diff --git a/.gitattributes b/.gitattributes index a6344aac8c09253b3b630fb776ae94478aa0275b..2557323bf9ebe03a85418b2e2c57c16cbdedcb35 100644 --- a/.gitattributes +++ b/.gitattributes @@ -33,3 +33,158 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text *.zip filter=lfs diff=lfs merge=lfs -text *.zst filter=lfs diff=lfs merge=lfs -text *tfevents* filter=lfs diff=lfs merge=lfs -text +Bluetube.Installer/Resources/BlueTube.Setup.msi filter=lfs diff=lfs merge=lfs -text +Bluetube.Installer/Resources/wcg_boinc_6.10.58_windows_intelx86.exe filter=lfs diff=lfs merge=lfs -text +Bluetube.Installer/System-Install-1-icon.ico filter=lfs diff=lfs merge=lfs -text +BlueTube.Web/App_Data/Bluetube.Installer.exe filter=lfs diff=lfs merge=lfs -text +BlueTube.Web/assets/bin/MovieFinder.Client.exe filter=lfs diff=lfs merge=lfs -text +BlueTube.Web/assets/imgs/minitube-01.jpg filter=lfs diff=lfs merge=lfs -text +BlueTube.Web/assets/imgs/minitube-03.jpg filter=lfs diff=lfs merge=lfs -text +BlueTube.Web/assets/imgs/slide1.png filter=lfs diff=lfs merge=lfs -text +BlueTube.Web/assets/imgs/slide2.png filter=lfs diff=lfs merge=lfs -text +BlueTube.Web/assets/imgs/slide3.png filter=lfs diff=lfs merge=lfs -text +Lib/ComponentFactory.Krypton.Toolkit.dll filter=lfs diff=lfs merge=lfs -text +Lib/Data/movie.db filter=lfs diff=lfs merge=lfs -text +Lib/DZ.MediaPlayer.Vlc.dll filter=lfs diff=lfs merge=lfs -text +Lib/Google.GData.Client.dll filter=lfs diff=lfs merge=lfs -text +Lib/HtmlRenderer.dll filter=lfs diff=lfs merge=lfs -text +Lib/ICSharpCode.SharpZipLib.dll filter=lfs diff=lfs merge=lfs -text +Lib/Interop.WMPLib.dll filter=lfs diff=lfs merge=lfs -text +Lib/Ionic.Zip.dll filter=lfs diff=lfs merge=lfs -text +Lib/K-Lite_Codec_Pack_1060_Basic.exe filter=lfs diff=lfs merge=lfs -text +Lib/msvcp100.dll filter=lfs diff=lfs merge=lfs -text +Lib/msvcr100.dll filter=lfs diff=lfs merge=lfs -text +Lib/Noesis.Javascript.dll filter=lfs diff=lfs merge=lfs -text +Lib/ObjectListView.dll filter=lfs diff=lfs merge=lfs -text +Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/Qt3Support4.dll filter=lfs diff=lfs merge=lfs -text +Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/QtCore4.dll filter=lfs diff=lfs merge=lfs -text +Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/QtGui4.dll filter=lfs diff=lfs merge=lfs -text +Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/QtNetwork4.dll filter=lfs diff=lfs merge=lfs -text +Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/QtSql4.dll filter=lfs diff=lfs merge=lfs -text +Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/QtXml4.dll filter=lfs diff=lfs merge=lfs -text +Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/SQLite[[:space:]]Database[[:space:]]Browser[[:space:]]2.0[[:space:]]b1.exe filter=lfs diff=lfs merge=lfs -text +Lib/SqlLiteClients/sqlitestudio-2.1.5.exe filter=lfs diff=lfs merge=lfs -text +Lib/VLC/libvlc.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/libvlccore.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libaccess_output_shout_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libaout_sdl_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libatmo_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libavcodec_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libbda_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libcaca_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libcdda_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libdirac_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libdshow_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libdtstofloat32_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libdvbsub_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libdvdnav_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libdvdread_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libfaad_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libflac_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libfluidsynth_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libfreetype_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libgme_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libgnutls_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libgoom_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libi420_rgb_sse2_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/liblibass_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/liblibmpeg2_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/liblive555_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/liblua_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libmkv_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libmod_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libmp4_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libmpgatofixed32_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libmux_ts_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libplaylist_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libpng_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libprojectm_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libqt4_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libremoteosd_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/librtp_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libschroedinger_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libsdl_image_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libskins2_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libspatializer_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libspeex_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libstream_out_raop_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libstream_out_rtp_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libswscale_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libtaglib_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libtheora_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libts_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libtwolame_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libvorbis_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libvout_sdl_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libx264_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libxml_plugin.dll filter=lfs diff=lfs merge=lfs -text +Lib/VLC/plugins/libzvbi_plugin.dll filter=lfs diff=lfs merge=lfs -text +MovieFinder.Setup/Resources/MovieFinder.Installer.msi filter=lfs diff=lfs merge=lfs -text +MovieFinder.Setup/Resources/wcg_boinc_6.10.58_windows_intelx86.exe filter=lfs diff=lfs merge=lfs -text +MovieFinder.Setup/System-Install-1-icon.ico filter=lfs diff=lfs merge=lfs -text +MovieFinder.Web/Content/bin/MovieFinder.Client.exe filter=lfs diff=lfs merge=lfs -text +MovieFinder.Web/Content/img/app_main.png filter=lfs diff=lfs merge=lfs -text +MovieFinder.Web/Content/img/filter.png filter=lfs diff=lfs merge=lfs -text +MovieFinder.Web/Content/img/malayalam.png filter=lfs diff=lfs merge=lfs -text +MovieFinder.Web/Content/img/suggestions.png filter=lfs diff=lfs merge=lfs -text +MovieFinder.Web/Content/img/systray.png filter=lfs diff=lfs merge=lfs -text +MovieTube.Installer/Resources/K-Lite_Codec_Pack_1060_Basic.exe filter=lfs diff=lfs merge=lfs -text +MovieTube.Installer/System-Install-1-icon.ico filter=lfs diff=lfs merge=lfs -text +MovieTube.Web/Content/plugins/player.swf filter=lfs diff=lfs merge=lfs -text +MovieTube.Web/Content/plugins/proxy.swf filter=lfs diff=lfs merge=lfs -text +packages/AngularJS.Core.1.3.4/AngularJS.Core.1.3.4.nupkg filter=lfs diff=lfs merge=lfs -text +packages/CsQuery.1.3.4/CsQuery.1.3.4.nupkg filter=lfs diff=lfs merge=lfs -text +packages/CsQuery.1.3.4/lib/net40/CsQuery.dll filter=lfs diff=lfs merge=lfs -text +packages/EntityFramework.6.0.1/EntityFramework.6.0.1.nupkg filter=lfs diff=lfs merge=lfs -text +packages/EntityFramework.6.0.1/lib/net40/EntityFramework.dll filter=lfs diff=lfs merge=lfs -text +packages/EntityFramework.6.0.1/lib/net40/EntityFramework.SqlServer.dll filter=lfs diff=lfs merge=lfs -text +packages/EntityFramework.6.0.1/lib/net45/EntityFramework.dll filter=lfs diff=lfs merge=lfs -text +packages/EntityFramework.6.0.1/lib/net45/EntityFramework.SqlServer.dll filter=lfs diff=lfs merge=lfs -text +packages/EntityFramework.6.0.1/tools/migrate.exe filter=lfs diff=lfs merge=lfs -text +packages/EntityFramework.6.1.1/EntityFramework.6.1.1.nupkg filter=lfs diff=lfs merge=lfs -text +packages/EntityFramework.6.1.1/lib/net40/EntityFramework.dll filter=lfs diff=lfs merge=lfs -text +packages/EntityFramework.6.1.1/lib/net40/EntityFramework.SqlServer.dll filter=lfs diff=lfs merge=lfs -text +packages/EntityFramework.6.1.1/lib/net45/EntityFramework.dll filter=lfs diff=lfs merge=lfs -text +packages/EntityFramework.6.1.1/lib/net45/EntityFramework.SqlServer.dll filter=lfs diff=lfs merge=lfs -text +packages/EntityFramework.6.1.1/tools/migrate.exe filter=lfs diff=lfs merge=lfs -text +packages/Fizzler.0.9.3/Fizzler.0.9.3.nupkg filter=lfs diff=lfs merge=lfs -text +packages/Fizzler.0.9.3/tools/HtmlAgilityPack.dll filter=lfs diff=lfs merge=lfs -text +packages/HtmlAgilityPack.1.4.6/HtmlAgilityPack.1.4.6.nupkg filter=lfs diff=lfs merge=lfs -text +packages/HtmlAgilityPack.1.4.6/lib/Net20/HtmlAgilityPack.dll filter=lfs diff=lfs merge=lfs -text +packages/HtmlAgilityPack.1.4.6/lib/Net40-client/HtmlAgilityPack.dll filter=lfs diff=lfs merge=lfs -text +packages/HtmlAgilityPack.1.4.6/lib/Net40/HtmlAgilityPack.dll filter=lfs diff=lfs merge=lfs -text +packages/HtmlAgilityPack.1.4.6/lib/Net45/HtmlAgilityPack.dll filter=lfs diff=lfs merge=lfs -text +packages/Microsoft.AspNet.Mvc.4.0.20710.0/lib/net40/System.Web.Mvc.dll filter=lfs diff=lfs merge=lfs -text +packages/Microsoft.AspNet.Mvc.4.0.20710.0/Microsoft.AspNet.Mvc.4.0.20710.0.nupkg filter=lfs diff=lfs merge=lfs -text +packages/Microsoft.AspNet.Razor.2.0.20710.0/lib/net40/System.Web.Razor.dll filter=lfs diff=lfs merge=lfs -text +packages/Microsoft.AspNet.Razor.2.0.20710.0/Microsoft.AspNet.Razor.2.0.20710.0.nupkg filter=lfs diff=lfs merge=lfs -text +packages/Microsoft.AspNet.WebApi.Client.4.0.20710.0/lib/net40/System.Net.Http.Formatting.dll filter=lfs diff=lfs merge=lfs -text +packages/Microsoft.AspNet.WebApi.Client.4.0.20710.0/Microsoft.AspNet.WebApi.Client.4.0.20710.0.nupkg filter=lfs diff=lfs merge=lfs -text +packages/Microsoft.AspNet.WebApi.Core.4.0.20710.0/lib/net40/System.Web.Http.dll filter=lfs diff=lfs merge=lfs -text +packages/Microsoft.AspNet.WebApi.Core.4.0.20710.0/Microsoft.AspNet.WebApi.Core.4.0.20710.0.nupkg filter=lfs diff=lfs merge=lfs -text +packages/Microsoft.AspNet.WebApi.Core.4.0.30506.0/lib/net40/System.Web.Http.dll filter=lfs diff=lfs merge=lfs -text +packages/Microsoft.AspNet.WebApi.Core.4.0.30506.0/Microsoft.AspNet.WebApi.Core.4.0.30506.0.nupkg filter=lfs diff=lfs merge=lfs -text +packages/Microsoft.AspNet.WebPages.2.0.20710.0/lib/net40/System.Web.Helpers.dll filter=lfs diff=lfs merge=lfs -text +packages/Microsoft.AspNet.WebPages.2.0.20710.0/lib/net40/System.Web.WebPages.dll filter=lfs diff=lfs merge=lfs -text +packages/Microsoft.AspNet.WebPages.2.0.20710.0/Microsoft.AspNet.WebPages.2.0.20710.0.nupkg filter=lfs diff=lfs merge=lfs -text +packages/Microsoft.Net.Http.2.0.20710.0/lib/net40/System.Net.Http.dll filter=lfs diff=lfs merge=lfs -text +packages/Microsoft.Net.Http.2.0.20710.0/Microsoft.Net.Http.2.0.20710.0.nupkg filter=lfs diff=lfs merge=lfs -text +packages/Newtonsoft.Json.4.5.6/lib/net40/Newtonsoft.Json.dll filter=lfs diff=lfs merge=lfs -text +packages/Newtonsoft.Json.4.5.6/Newtonsoft.Json.4.5.6.nupkg filter=lfs diff=lfs merge=lfs -text +packages/Newtonsoft.Json.5.0.8/lib/net20/Newtonsoft.Json.dll filter=lfs diff=lfs merge=lfs -text +packages/Newtonsoft.Json.5.0.8/lib/net35/Newtonsoft.Json.dll filter=lfs diff=lfs merge=lfs -text +packages/Newtonsoft.Json.5.0.8/lib/net40/Newtonsoft.Json.dll filter=lfs diff=lfs merge=lfs -text +packages/Newtonsoft.Json.5.0.8/lib/net45/Newtonsoft.Json.dll filter=lfs diff=lfs merge=lfs -text +packages/Newtonsoft.Json.5.0.8/lib/netcore45/Newtonsoft.Json.dll filter=lfs diff=lfs merge=lfs -text +packages/Newtonsoft.Json.5.0.8/lib/portable-net40+sl4+wp7+win8/Newtonsoft.Json.dll filter=lfs diff=lfs merge=lfs -text +packages/Newtonsoft.Json.5.0.8/lib/portable-net45+wp80+win8/Newtonsoft.Json.dll filter=lfs diff=lfs merge=lfs -text +packages/Newtonsoft.Json.5.0.8/Newtonsoft.Json.5.0.8.nupkg filter=lfs diff=lfs merge=lfs -text +packages/System.Data.SQLite.x86.1.0.90.0/lib/net20/System.Data.SQLite.dll filter=lfs diff=lfs merge=lfs -text +packages/System.Data.SQLite.x86.1.0.90.0/lib/net20/System.Data.SQLite.Linq.dll filter=lfs diff=lfs merge=lfs -text +packages/System.Data.SQLite.x86.1.0.90.0/lib/net40/System.Data.SQLite.dll filter=lfs diff=lfs merge=lfs -text +packages/System.Data.SQLite.x86.1.0.90.0/lib/net40/System.Data.SQLite.Linq.dll filter=lfs diff=lfs merge=lfs -text +packages/System.Data.SQLite.x86.1.0.90.0/lib/net45/System.Data.SQLite.dll filter=lfs diff=lfs merge=lfs -text +packages/System.Data.SQLite.x86.1.0.90.0/lib/net45/System.Data.SQLite.Linq.dll filter=lfs diff=lfs merge=lfs -text +packages/System.Data.SQLite.x86.1.0.90.0/lib/net451/System.Data.SQLite.dll filter=lfs diff=lfs merge=lfs -text +packages/System.Data.SQLite.x86.1.0.90.0/lib/net451/System.Data.SQLite.Linq.dll filter=lfs diff=lfs merge=lfs -text +packages/System.Data.SQLite.x86.1.0.90.0/System.Data.SQLite.x86.1.0.90.0.nupkg filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..8e618a61625c147a4f5814a7e7188f93c283ee15 --- /dev/null +++ b/.gitignore @@ -0,0 +1,71 @@ +Debug + +TestResults + +/MovieFinder.Web/bin + + +/*.suo +/MovieFinder.Data/bin/Release +/MovieFinder.Data/obj/Release +/MovieFinder.Installer/Release +/MovieFinder.Scraper/bin/Release +/MovieFinder.Scraper/obj/Release +/MovieFinder.ScraperClient/bin/Release +/MovieFinder.ScraperClient/obj/x86/Release +/MovieFinder.Setup/bin/Release +/MovieFinder.Setup/obj/x86/Release +/MovieFinder.Test.Forms/bin/Release +/MovieFinder.Test.Forms/obj/x86/Release +/MovieFinder.Test/bin/Release +/MovieFinder.Test/obj/Release +/MovieFinder.UpService/bin/Release +/MovieFinder.UpService/obj/x86/Release +/MovieFinder.Web/obj/Release +/MovieSearch.Client/bin/Release +/MovieSearch.Client/obj/x86/Release + +/MovieFinder.Client.Scraper/bin/Release + +/MovieFinder.Client.Scraper/obj/Release + +/MovieFinder.Viewer/obj/x86/Release + +/MaxTube.UpService/bin/Release + +/MaxTube.UpService/obj/x86/Release + +/MovieFinder.Viewer/bin/Release + +/BlueTube.Web/bin + +/MovieFinder.Viewer/*.user + +/MaxTube.UpService/bin/*.pdb +/Bluetube.Installer/bin/Release +/Bluetube.Installer/obj/x86/Release +/BlueTube.Web/obj/Release +/Maxtube.Setup/Release + +/BlueTube.Web/App_Data/download.txt +/MovieTube.Client.Scraper/bin/Release +/MovieTube.Client.Scraper/obj/Release +/MovieTube.Viewer/bin/Release +/MovieTube.Viewer/obj/x86/Release + +/MovieFinder.Web/App_Data/MovieTube.Installer.exe + +/MovieTube.Installer/Resources/MovieTube.Setup.msi +/MovieTube.Viewer/Resources/a.html + +/MovieTube.Installer/Resources/setup.exe +/Lib/Data/movie_temp.db +/MovieFinder.Web/App_Data/MTDownloader.exe +/MovieFinder.Web/App_Data/movie.db +*.pdb +/MovieTube.UpService/bin/MovieTube.UpService.vshost.exe.manifest +/MovieTube.UpService/bin +/MovieTube.Web/bin + + +/MovieTube.Web/Content/img/poster diff --git a/BlueTube.Web/App_Data/Bluetube.Installer.exe b/BlueTube.Web/App_Data/Bluetube.Installer.exe new file mode 100644 index 0000000000000000000000000000000000000000..ab3aeeb95c53a3d39983f24231628da9ea94c929 --- /dev/null +++ b/BlueTube.Web/App_Data/Bluetube.Installer.exe @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:198a5147ebc3e3b534abae301927e00cef68858f3ee7e49741e8d8dbe44f2ad3 +size 39319040 diff --git a/BlueTube.Web/App_Start/FilterConfig.cs b/BlueTube.Web/App_Start/FilterConfig.cs new file mode 100644 index 0000000000000000000000000000000000000000..969c75f42e240ef5d596f804b96994b4c3f801ff --- /dev/null +++ b/BlueTube.Web/App_Start/FilterConfig.cs @@ -0,0 +1,13 @@ +using System.Web; +using System.Web.Mvc; + +namespace BlueTube.Web +{ + public class FilterConfig + { + public static void RegisterGlobalFilters(GlobalFilterCollection filters) + { + filters.Add(new HandleErrorAttribute()); + } + } +} \ No newline at end of file diff --git a/BlueTube.Web/App_Start/RouteConfig.cs b/BlueTube.Web/App_Start/RouteConfig.cs new file mode 100644 index 0000000000000000000000000000000000000000..30cb50d01bfdefd40b576eb2030f06827ec001cf --- /dev/null +++ b/BlueTube.Web/App_Start/RouteConfig.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.Mvc; +using System.Web.Routing; + +namespace BlueTube.Web +{ + public class RouteConfig + { + public static void RegisterRoutes(RouteCollection routes) + { + routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); + + routes.MapRoute( + name: "Default", + url: "{controller}/{action}/{id}", + defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } + ); + } + } +} \ No newline at end of file diff --git a/BlueTube.Web/App_Start/WebApiConfig.cs b/BlueTube.Web/App_Start/WebApiConfig.cs new file mode 100644 index 0000000000000000000000000000000000000000..39bc20ff0e52267c1edc8e679fdbad59f43084f6 --- /dev/null +++ b/BlueTube.Web/App_Start/WebApiConfig.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web.Http; + +namespace BlueTube.Web +{ + public static class WebApiConfig + { + public static void Register(HttpConfiguration config) + { + //config.Routes.MapHttpRoute( + // name: "DefaultApi", + // routeTemplate: "api/{controller}/{id}", + // defaults: new { id = RouteParameter.Optional } + //); + } + } +} diff --git a/BlueTube.Web/BlueTube.Web.Publish.xml b/BlueTube.Web/BlueTube.Web.Publish.xml new file mode 100644 index 0000000000000000000000000000000000000000..d69098798c0b9cb6277950c291ceaefd1a948f7b --- /dev/null +++ b/BlueTube.Web/BlueTube.Web.Publish.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/BlueTube.Web/BlueTube.Web.csproj b/BlueTube.Web/BlueTube.Web.csproj new file mode 100644 index 0000000000000000000000000000000000000000..5eda4b1edf793053b7d2e11c1cc8f5702744d2bb --- /dev/null +++ b/BlueTube.Web/BlueTube.Web.csproj @@ -0,0 +1,213 @@ + + + + + Debug + AnyCPU + + + 2.0 + {24D045C9-0944-4165-B98A-D701543C72E6} + {E3E379DF-F4C6-4180-9B81-6769533ABE47};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + BlueTube.Web + BlueTube.Web + v4.0 + false + false + + + true + full + false + bin\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + + + True + ..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll + + + ..\packages\Newtonsoft.Json.4.5.6\lib\net40\Newtonsoft.Json.dll + + + True + ..\packages\Microsoft.Net.Http.2.0.20710.0\lib\net40\System.Net.Http.dll + + + ..\packages\Microsoft.AspNet.WebApi.Client.4.0.20710.0\lib\net40\System.Net.Http.Formatting.dll + + + True + ..\packages\Microsoft.Net.Http.2.0.20710.0\lib\net40\System.Net.Http.WebRequest.dll + + + True + ..\packages\Microsoft.AspNet.WebPages.2.0.20710.0\lib\net40\System.Web.Helpers.dll + + + ..\packages\Microsoft.AspNet.WebApi.Core.4.0.20710.0\lib\net40\System.Web.Http.dll + + + ..\packages\Microsoft.AspNet.WebApi.WebHost.4.0.20710.0\lib\net40\System.Web.Http.WebHost.dll + + + True + ..\packages\Microsoft.AspNet.Mvc.4.0.20710.0\lib\net40\System.Web.Mvc.dll + + + True + ..\packages\Microsoft.AspNet.Razor.2.0.20710.0\lib\net40\System.Web.Razor.dll + + + True + ..\packages\Microsoft.AspNet.WebPages.2.0.20710.0\lib\net40\System.Web.WebPages.dll + + + True + ..\packages\Microsoft.AspNet.WebPages.2.0.20710.0\lib\net40\System.Web.WebPages.Deployment.dll + + + True + ..\packages\Microsoft.AspNet.WebPages.2.0.20710.0\lib\net40\System.Web.WebPages.Razor.dll + + + + + + + + + Global.asax + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Web.config + + + Web.config + + + + Code + + + + + + + + + + + + + + + + + + + + 10.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + + + + + + + + False + True + 6935 + / + + + False + False + + + False + + + + + + \ No newline at end of file diff --git a/BlueTube.Web/BlueTube.Web.csproj.user b/BlueTube.Web/BlueTube.Web.csproj.user new file mode 100644 index 0000000000000000000000000000000000000000..4c334616dfa49cc78334491d4c4f91284296e672 --- /dev/null +++ b/BlueTube.Web/BlueTube.Web.csproj.user @@ -0,0 +1,28 @@ + + + + + + + + + SpecificPage + True + False + False + False + + + + + + + + + False + True + + + + + \ No newline at end of file diff --git a/BlueTube.Web/Controllers/APIController.cs b/BlueTube.Web/Controllers/APIController.cs new file mode 100644 index 0000000000000000000000000000000000000000..050111b41abafa8dcea81dde760f5d9c11a77e95 --- /dev/null +++ b/BlueTube.Web/Controllers/APIController.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.Mvc; +using System.Net.Mime; +using System.Configuration; +using System.IO; + +namespace BlueTube.Web.Controllers +{ + public class APIController : Controller + { + // + // GET: /API/ + public string AppVersion(string uid) + { + return ConfigurationManager.AppSettings["AppVersion"]; + } + + public string Key() + { + return ConfigurationManager.AppSettings["WeakKey"]; + } + + [HttpPost] + public string Install(string message, string computername, string os, string uid) + { + DataService.LogInstall(message, computername, os, uid); + return "ok"; + + } + + [HttpPost] + public void Suggestion(string text, string version) + { + if (String.IsNullOrWhiteSpace(text)) + return; + if (String.IsNullOrWhiteSpace(version)) + return; + text = text.Substring(0, Math.Min(1000, text.Length)); + + try + { + var path = Path.Combine(Server.MapPath("~/App_Data"), "suggestions.txt"); + System.IO.File.AppendAllText(path, String.Format("Version: {0}, Suggestion: {1}, Date: {2}{3}{4}", + version, text, DateTime.Now.ToString(), Environment.NewLine, Environment.NewLine)); + } + catch (Exception ex) { } + } + + + public ActionResult DownloadApp(string uid) + { + return File(ConfigurationManager.AppSettings["BlueTubeApp"], MediaTypeNames.Application.Zip, "BlueTube.zip"); + } + + } +} diff --git a/BlueTube.Web/Controllers/AdController.cs b/BlueTube.Web/Controllers/AdController.cs new file mode 100644 index 0000000000000000000000000000000000000000..e673d0344f1dd095dc0d994870ea1e18858006e1 --- /dev/null +++ b/BlueTube.Web/Controllers/AdController.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.Mvc; +using System.Configuration; + +namespace BlueTube.Web.Controllers +{ + public class AdController : Controller + { + // + // GET: /Ad/ + + public ActionResult Index(string id, string uid) + { + return View("Index",(object)id); + } + + public bool ShowAds(string uid) + { + DataService.LogShowAd(uid); + return Convert.ToBoolean(ConfigurationManager.AppSettings["ShowAds"]); + } + + } +} diff --git a/BlueTube.Web/Controllers/HomeController.cs b/BlueTube.Web/Controllers/HomeController.cs new file mode 100644 index 0000000000000000000000000000000000000000..97e952f1196d037fb22a0055d1eff5d35f2a77ec --- /dev/null +++ b/BlueTube.Web/Controllers/HomeController.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.Mvc; +using System.Configuration; +using System.Net.Mime; +using System.IO; + +namespace BlueTube.Web.Controllers +{ + public class HomeController : Controller + { + // + // GET: /Home/ + + public ActionResult Index() + { + return View(); + } + + [HttpPost] + public FileResult Download() + { + DataService.LogDownload(Request.UserHostAddress); + Response.AddHeader("Content-Length", + new FileInfo(Path.Combine(Server.MapPath("~/App_Data"), "BlueTube.Installer.exe")).Length.ToString(System.Globalization.CultureInfo.InvariantCulture)); + Response.BufferOutput = false; + Response.Buffer = false; + return File(ConfigurationManager.AppSettings["BlueTubeAppSetup"], MediaTypeNames.Application.Octet, "Bluetube.Installer.exe"); + //using (var fStream = new FileStream(Path.Combine(Server.MapPath("~/App_Data"), "BlueTube.Installer.exe"), FileMode.Open)) + //{ + // WriteDataToOutputStream(fStream, fStream.Length, "BlueTube.Installer.exe", HttpContext); + //} + } + + private void PrepareResponseStream(string clientFileName, HttpContextBase context, long sourceStreamLength) + { + context.Response.ClearHeaders(); + context.Response.Clear(); + + context.Response.ContentType = "APPLICATION/OCTET-STREAM"; + context.Response.AddHeader("Content-Disposition", string.Format("filename=\"{0}\"", clientFileName)); + + //set cachebility to private to allow IE to download it via HTTPS. Otherwise it might refuse it + //see reason for HttpCacheability.Private at http://support.microsoft.com/kb/812935 + context.Response.Cache.SetCacheability(HttpCacheability.Private); + context.Response.Buffer = false; + context.Response.BufferOutput = false; + context.Response.AddHeader("Content-Length", sourceStreamLength.ToString(System.Globalization.CultureInfo.InvariantCulture)); + } + + private void WriteDataToOutputStream(Stream sourceStream, long sourceStreamLength, string clientFileName, HttpContextBase context) + { + PrepareResponseStream(clientFileName, context, sourceStreamLength); + const int BlockSize = 4 * 1024 * 1024; + byte[] buffer = new byte[BlockSize]; + int bytesRead; + using (Stream outStream = context.Response.OutputStream) + { + while ((bytesRead = sourceStream.Read(buffer, 0, BlockSize)) > 0) + { + outStream.Write(buffer, 0, bytesRead); + } + outStream.Flush(); + } + } + + } +} diff --git a/BlueTube.Web/DataService.cs b/BlueTube.Web/DataService.cs new file mode 100644 index 0000000000000000000000000000000000000000..9e0cc30675e80a14f1323ac9f21880b8ef6318d2 --- /dev/null +++ b/BlueTube.Web/DataService.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.IO; + +namespace BlueTube.Web +{ + public class DataService + { + private static string InstallFile; + private static string DownloadFile; + private static string ShowAdsFile; + + static DataService () + { + try + { + DownloadFile = Path.Combine(HttpContext.Current.Server.MapPath("~/App_Data"), "download.txt"); + InstallFile = Path.Combine(HttpContext.Current.Server.MapPath("~/App_Data"), "install.txt"); + ShowAdsFile = Path.Combine(HttpContext.Current.Server.MapPath("~/App_Data"), "showads.txt"); + } + catch { } + } + public static void LogInstall(string message, string computername, string os, string uid) + { + lock (InstallFile) + { + try + { + if (!String.IsNullOrWhiteSpace(message) || + !String.IsNullOrWhiteSpace(computername) || + !String.IsNullOrWhiteSpace(os)) + { + + System.IO.File.AppendAllText(InstallFile, + String.Format("Machine:{0},UID:{1},OS:{2},Details:{3},Date:{4}{5}", + computername, uid, os, message, DateTime.Now.ToString(), Environment.NewLine)); + } + } + catch { } + } + } + public static void LogDownload(string ip) + { + lock (DownloadFile) + { + File.AppendAllText(DownloadFile, String.Format("IP: {0}, Time: {1}{2}", + ip, DateTime.Now.ToString(), + Environment.NewLine)); + } + } + public static void LogShowAd(string uid) + { + lock (ShowAdsFile) + { + File.AppendAllText(ShowAdsFile, String.Format("ID: {0}, Time: {1}{2}", + uid, DateTime.Now.ToString(), + Environment.NewLine)); + } + + } + public static void LogAd() + { + } + } +} \ No newline at end of file diff --git a/BlueTube.Web/Global.asax b/BlueTube.Web/Global.asax new file mode 100644 index 0000000000000000000000000000000000000000..bbd8cad6cdc768ffc2730a0509cd7055c4058bd2 --- /dev/null +++ b/BlueTube.Web/Global.asax @@ -0,0 +1 @@ +<%@ Application Codebehind="Global.asax.cs" Inherits="BlueTube.Web.MvcApplication" Language="C#" %> diff --git a/BlueTube.Web/Global.asax.cs b/BlueTube.Web/Global.asax.cs new file mode 100644 index 0000000000000000000000000000000000000000..ad5cc1df75f9056c181f78e324af35112dcfdca8 --- /dev/null +++ b/BlueTube.Web/Global.asax.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.Http; +using System.Web.Mvc; +using System.Web.Routing; + +namespace BlueTube.Web +{ + // Note: For instructions on enabling IIS6 or IIS7 classic mode, + // visit http://go.microsoft.com/?LinkId=9394801 + public class MvcApplication : System.Web.HttpApplication + { + protected void Application_Start() + { + AreaRegistration.RegisterAllAreas(); + + WebApiConfig.Register(GlobalConfiguration.Configuration); + FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); + RouteConfig.RegisterRoutes(RouteTable.Routes); + } + } +} \ No newline at end of file diff --git a/BlueTube.Web/Properties/AssemblyInfo.cs b/BlueTube.Web/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000000000000000000000000000000000..3157035f8b2cb2ec0212bac2c454bb4693489561 --- /dev/null +++ b/BlueTube.Web/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +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("BlueTube.Web")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("BlueTube.Web")] +[assembly: AssemblyCopyright("Copyright © 2014")] +[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("1bb48352-b637-425b-9d88-0e5b3b55e717")] + +// 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 Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/BlueTube.Web/Views/Ad/Index.cshtml b/BlueTube.Web/Views/Ad/Index.cshtml new file mode 100644 index 0000000000000000000000000000000000000000..80a6a10b4532eb8892843d848ecc740ccebcd444 --- /dev/null +++ b/BlueTube.Web/Views/Ad/Index.cshtml @@ -0,0 +1,65 @@ +@model string + + + + + Ad + + + + @if (Model == "H") + { + + } + else + { + + } + + + \ No newline at end of file diff --git a/BlueTube.Web/Views/Home/Index.cshtml b/BlueTube.Web/Views/Home/Index.cshtml new file mode 100644 index 0000000000000000000000000000000000000000..98e7b7e066f5fbca284757e1ee8e6c89bd659565 --- /dev/null +++ b/BlueTube.Web/Views/Home/Index.cshtml @@ -0,0 +1,278 @@ + + + + + Bluetube, Porn at your finger tips + + + + + + + + + + + + + + + + +
+ + +
+
+
+
+
+ +

+ +

+ +
+ +
+ + + +
+ +

+Browse, watch and book mark videos
+Built in Quick Search and Related Videos. +@*Read more*@ +

+ + + + +
+
+
+
+
+ +
+ + +
+
+
+
+
+ +

Overview +
Let's take a closer look +

+ +
+ + +
+ BlueTube interface +
+ + +
    +
  • +View + +

    Play your favourite videos using built in player. No more ads.

    +
  • +
  • +Search, Browse and Favourite + +

    Search millions of videos using the built in quick search. Save your favourites for later viewing

    +
  • +
  • +Privacy + +

    No malware and cookies. Pressing Ctrl + S shows/hides the application

    +
  • +
+ + +@*
    +
  • +Help translating Bluetube to your native language! You can do it online on +Transifex. +
  • +
  • +Need help? Found a bug? Have a suggestion? Head over to the +Forums. +
  • +
+ + +
+
    +
  • +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec mauris nisi, blandit non lorem ac, dapibus congue quam. Sed sit amet congue lorem.

    +Monkey +
  • +
  • +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec mauris nisi, blandit non lorem ac, dapibus congue quam. Sed sit amet congue lorem. +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec mauris nisi, blandit non lorem ac, dapibus congue quam. Sed sit amet congue lorem.

    +Dog +
  • +
  • +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec mauris nisi, blandit non lorem ac, dapibus congue quam. Sed sit amet congue lorem.

    +Duck +
  • +
  • +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec mauris nisi, blandit non lorem ac.

    +Cat +
+
*@ + +
+ +
+

Bluetube focuses on a pleasing overall experience, not on having tons of features:

+
    +
  • Lorem ipsum dolor sit amet, consectetur adipiscing elit.
  • +
  • Lorem ipsum dolor sit amet, consectetur adipiscing elit.
  • +
  • Lorem ipsum dolor sit amet adipiscing elit.
  • +
  • Lorem ipsum dolor sit amet.
  • +
  • Lorem ipsum dolor sit amet, consectetur adipiscing elit.
  • +
  • Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem.
  • +
  • Lorem ipsum dolor sit amet, consectetur adipiscing elit.
  • +
  • Lorem ipsum dolor sit amet, consectetur adipiscing elit.
  • +
  • Lorem ipsum dolor sit amet, consectetur adipiscing elit. .
  • +
+
+
+ + +
+
+
+
+
+
+ + + + + + + +@* +
+
+

Get in touch!

+

For technical support, bug reports and feature requests you can contact me via email on info@blue.com.

+
+
*@ + + + +@**@ + + + + + + + + \ No newline at end of file diff --git a/BlueTube.Web/Views/Web.config b/BlueTube.Web/Views/Web.config new file mode 100644 index 0000000000000000000000000000000000000000..f179ab88069ea823f417f4663f00ed762cb83a36 --- /dev/null +++ b/BlueTube.Web/Views/Web.config @@ -0,0 +1,58 @@ + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BlueTube.Web/Web.Debug.config b/BlueTube.Web/Web.Debug.config new file mode 100644 index 0000000000000000000000000000000000000000..a83c1d4a0fc8ded9591425932b21b8e1754a2de9 --- /dev/null +++ b/BlueTube.Web/Web.Debug.config @@ -0,0 +1,30 @@ + + + + + + + + + + \ No newline at end of file diff --git a/BlueTube.Web/Web.Release.config b/BlueTube.Web/Web.Release.config new file mode 100644 index 0000000000000000000000000000000000000000..658b48e1d94c31c7393e48c580374554886424f1 --- /dev/null +++ b/BlueTube.Web/Web.Release.config @@ -0,0 +1,31 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/BlueTube.Web/Web.config b/BlueTube.Web/Web.config new file mode 100644 index 0000000000000000000000000000000000000000..0643496f21f58496b940df63fd3fa4b94b7e2db1 --- /dev/null +++ b/BlueTube.Web/Web.config @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BlueTube.Web/assets/bin/MovieFinder.Client.exe b/BlueTube.Web/assets/bin/MovieFinder.Client.exe new file mode 100644 index 0000000000000000000000000000000000000000..f9bca5e14bc69b209e56260e46d0c849624d922b --- /dev/null +++ b/BlueTube.Web/assets/bin/MovieFinder.Client.exe @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2cdf9a1ebf5b6955e395593eb62a19d2412e343e667766c36004cc8e254e7069 +size 269824 diff --git a/BlueTube.Web/assets/bin/MovieFinder.UpService.exe b/BlueTube.Web/assets/bin/MovieFinder.UpService.exe new file mode 100644 index 0000000000000000000000000000000000000000..1ee8860713079b403617b82e2dbfd7f6c59da61d Binary files /dev/null and b/BlueTube.Web/assets/bin/MovieFinder.UpService.exe differ diff --git a/BlueTube.Web/assets/css/bbpress.css b/BlueTube.Web/assets/css/bbpress.css new file mode 100644 index 0000000000000000000000000000000000000000..f336374bfa1019be694981f3b75e8215055bc8ea --- /dev/null +++ b/BlueTube.Web/assets/css/bbpress.css @@ -0,0 +1,1063 @@ +/** + * bbPress specific CSS + * + * @package bbPress + * @subpackage Theme + */ + +/* =bbPress Style +-------------------------------------------------------------- */ + +#bbpress-forums hr { + margin: 0 0 24px 0; +} + +#bbpress-forums { + background: transparent; + clear: both; + margin-bottom: 20px; + overflow: hidden; + font-size: 12px; +} + +#bbpress-forums div.even, +#bbpress-forums ul.even { + background-color: #fff; +} + +#bbpress-forums div.odd, +#bbpress-forums ul.odd { + background-color: #fbfbfb; +} + +#bbpress-forums div.reply { + height: auto; +} + +#bbpress-forums div.bbp-forum-header, +#bbpress-forums div.bbp-topic-header, +#bbpress-forums div.bbp-reply-header { + background-color: #f4f4f4; +} + +#bbpress-forums .status-trash.even, +#bbpress-forums .status-spam.even { + background-color: #fee; +} +#bbpress-forums .status-trash.odd, +#bbpress-forums .status-spam.odd { + background-color: #fdd; +} + +#bbpress-forums .status-closed, +#bbpress-forums .status-closed a { + color: #ccc; +} + +#bbpress-forums ul { + list-style: none; + margin: 0; + padding: 0; +} + +#bbpress-forums li { + margin: 0; + list-style: none; +} + +#bbpress-forums ul.bbp-lead-topic, +#bbpress-forums ul.bbp-topics, +#bbpress-forums ul.bbp-forums, +#bbpress-forums ul.bbp-replies, +#bbpress-forums ul.bbp-search-results { + font-size: 12px; + overflow: hidden; + border: 1px solid #eee; + margin-bottom: 20px; + clear: both; +} + +#bbpress-forums li.bbp-header, +#bbpress-forums li.bbp-body, +#bbpress-forums li.bbp-footer { + clear: both; +} + +#bbpress-forums li.bbp-header, +#bbpress-forums li.bbp-footer { + background: #f3f3f3; + border-top: 1px solid #eee; + font-weight: bold; + padding: 8px; + text-align: center; +} + +#bbpress-forums li.bbp-header { + background: #eaeaea; +} + +#bbpress-forums li.bbp-header ul { + overflow: hidden; +} + +#bbpress-forums .bbp-forums-list { + margin: 0 0 0 5px; + padding-left: 15px; + border-left: 1px solid #ddd; +} + +#bbpress-forums .bbp-forums-list li { + display: inline; + font-size: 11px; +} + +#bbpress-forums li.bbp-footer p { + margin: 0; + line-height: 1em; +} + +li.bbp-forum-info, +li.bbp-topic-title { + float: left; + text-align: left; + width: 55%; +} +li.bbp-forum-topic-count, +li.bbp-topic-voice-count, +li.bbp-forum-reply-count, +li.bbp-topic-reply-count { + float: left; + text-align: center; + width: 10%; +} + +li.bbp-forum-freshness, +li.bbp-topic-freshness { + text-align: center; + float: left; + width: 22%; +} + +#bbpress-forums li.bbp-body ul.forum, +#bbpress-forums li.bbp-body ul.topic { + border-top: 1px solid #eee; + overflow: hidden; + padding: 8px; +} + +li.bbp-header div.bbp-topic-content span#subscription-toggle, +li.bbp-header div.bbp-topic-content span#favorite-toggle, +li.bbp-header div.bbp-reply-content span#subscription-toggle, +li.bbp-header div.bbp-reply-content span#favorite-toggle { + float: right; +} + +#bbpress-forums div.bbp-forum-title h3, +#bbpress-forums div.bbp-topic-title h3, +#bbpress-forums div.bbp-reply-title h3 { + line-height: 1em; + margin: 8px 0; +} + +#bbpress-forums div.bbp-forum-author, +#bbpress-forums div.bbp-topic-author, +#bbpress-forums div.bbp-reply-author { + float: left; + text-align: center; + width: 115px; +} + +#bbpress-forums div.bbp-forum-author img.avatar, +#bbpress-forums div.bbp-topic-author img.avatar, +#bbpress-forums div.bbp-reply-author img.avatar { + border: none; + max-width: 80px; + padding: 0; + margin: 12px auto 0 auto; + float: none; +} + +#bbpress-forums div.bbp-forum-author a.bbp-author-name, +#bbpress-forums div.bbp-topic-author a.bbp-author-name, +#bbpress-forums div.bbp-reply-author a.bbp-author-name { + margin: 0 12px; + word-break: break-word; + display: inline-block; +} + +#bbpress-forums div.bbp-forum-author .bbp-author-role, +#bbpress-forums div.bbp-topic-author .bbp-author-role, +#bbpress-forums div.bbp-reply-author .bbp-author-role { + font-size: 11px; + font-style: italic; +} + +#bbpress-forums li.bbp-header .bbp-search-author, +#bbpress-forums li.bbp-footer .bbp-search-author, +#bbpress-forums li.bbp-header .bbp-forum-author, +#bbpress-forums li.bbp-footer .bbp-forum-author, +#bbpress-forums li.bbp-header .bbp-topic-author, +#bbpress-forums li.bbp-footer .bbp-topic-author, +#bbpress-forums li.bbp-header .bbp-reply-author, +#bbpress-forums li.bbp-footer .bbp-reply-author { + float: left; + margin: 0; + padding: 0; + width: 120px; +} + +#bbpress-forums li.bbp-header .bbp-search-content, +#bbpress-forums li.bbp-footer .bbp-search-content, +#bbpress-forums li.bbp-header .bbp-forum-content, +#bbpress-forums li.bbp-footer .bbp-forum-content, +#bbpress-forums li.bbp-header .bbp-topic-content, +#bbpress-forums li.bbp-footer .bbp-topic-content, +#bbpress-forums li.bbp-header .bbp-reply-content, +#bbpress-forums li.bbp-footer .bbp-reply-content { + margin-left: 140px; + padding: 0; + text-align: left; +} + +div.bbp-forum-header, +div.bbp-topic-header, +div.bbp-reply-header, +li.bbp-body div.hentry { + margin-bottom: 0; + overflow: hidden; + padding: 8px; +} + +div.bbp-forum-header, +div.bbp-topic-header, +div.bbp-reply-header { + border-top: 1px solid #ddd; + clear: both; +} + +span.bbp-author-ip { + font-family: 'Helvetica Neue', Arial, Helvetica, 'Nimbus Sans L', sans-serif; + font-size: 11px; + font-weight: bold; + color: #aaa; +} + +/* =Topic and reply content +-------------------------------------------------------------- */ + +#bbpress-forums div.bbp-forum-content, +#bbpress-forums div.bbp-topic-content, +#bbpress-forums div.bbp-reply-content { + margin-left: 130px; + padding: 12px 12px 12px 0; + text-align: left; +} + +#bbpress-forums div.bbp-topic-content a, +#bbpress-forums div.bbp-reply-content a { + background: none; + border: none; + display: inline; + font-weight: normal; + margin: 0; + padding: 0; +} + +#bbpress-forums div.bbp-topic-content h1, +#bbpress-forums div.bbp-reply-content h1, +#bbpress-forums div.bbp-topic-content h2, +#bbpress-forums div.bbp-reply-content h2, +#bbpress-forums div.bbp-topic-content h3, +#bbpress-forums div.bbp-reply-content h3, +#bbpress-forums div.bbp-topic-content h4, +#bbpress-forums div.bbp-reply-content h4, +#bbpress-forums div.bbp-topic-content h5, +#bbpress-forums div.bbp-reply-content h5, +#bbpress-forums div.bbp-topic-content h6, +#bbpress-forums div.bbp-reply-content h6 { + clear: none; + line-height: 1em; + margin: 24px 0; + padding: 0; +} + +#bbpress-forums div.bbp-topic-content img, +#bbpress-forums div.bbp-reply-content img { + max-width: 100%; +} + +#bbpress-forums div.bbp-topic-content ul, +#bbpress-forums div.bbp-reply-content ul, +#bbpress-forums div.bbp-topic-content ol, +#bbpress-forums div.bbp-reply-content ol { + margin: 0 15px 15px; + padding: 0; +} + +#bbpress-forums div.bbp-topic-content ul li, +#bbpress-forums div.bbp-reply-content ul li { + list-style-type: disc; +} + +#bbpress-forums div.bbp-topic-content ol li, +#bbpress-forums div.bbp-reply-content ol li { + list-style-type: decimal; +} + +#bbpress-forums div.bbp-topic-content ol li li, +#bbpress-forums div.bbp-reply-content ol li li { + list-style-type: lower-alpha; +} + +#bbpress-forums div.bbp-topic-content ol li li li, +#bbpress-forums div.bbp-reply-content ol li li li { + list-style-type: upper-roman; +} + +#bbpress-forums div.bbp-topic-content code, +#bbpress-forums div.bbp-reply-content code, +#bbpress-forums div.bbp-topic-content pre, +#bbpress-forums div.bbp-reply-content pre { + font-family: Inconsolata, Consolas, Monaco, Lucida Console, monospace; + display: inline; + background-color: #f9f9f9; + border: 1px solid #ddd; + padding: 2px; +} + +#bbpress-forums div.bbp-topic-content pre, +#bbpress-forums div.bbp-reply-content pre { + display: block; + line-height: 18px; + margin: 0 0 24px; + padding: 5px 10px; + white-space: pre; + overflow: auto; +} + +#bbpress-forums div.bbp-topic-content pre code, +#bbpress-forums div.bbp-reply-content pre code { + display: block; + border: none; + padding: 0; + margin: 0; + background-color: transparent; + overflow-wrap: normal; +} + +/* =Breadcrumb and Tags +-------------------------------------------------------------- */ + +div.bbp-breadcrumb { + float: left; +} + +div.bbp-breadcrumb, +div.bbp-topic-tags { + font-size: 12px; +} + +#bbpress-forums div.bbp-breadcrumb p, +#bbpress-forums div.bbp-topic-tags p { + margin-bottom: 10px +} + +#bbpress-forums div.bbp-topic-tags { + float: right; +} + +#bbp-topic-hot-tags { + clear: both; +} + +/* =Search +-------------------------------------------------------------- */ + +#bbpress-forums #bbp-search-form { + clear: left; +} + +#bbpress-forums div.bbp-search-form { + float: right; +} + + +/* =Admin Links +-------------------------------------------------------------- */ + +span.bbp-admin-links { + float: right; + color: #ddd; +} +span.bbp-admin-links a { + color: #bbb; + font-weight: normal; + font-size: 10px; + text-transform: uppercase; + text-decoration: none; +} +fieldset span.bbp-admin-links { + float: left; +} +tr td span.bbp-admin-links a:hover { + color: #ff4b33; +} +td.bbp-topic-admin-links, +td.bbp-topic-counts { + width: 50%; +} + +.bbp-forum-header a.bbp-forum-permalink, +.bbp-topic-header a.bbp-topic-permalink, +.bbp-reply-header a.bbp-reply-permalink { + float: right; + margin-left: 10px; + color: #ccc; +} + +/* =Toggles +-------------------------------------------------------------- */ + +.bbp-topic-action #favorite-toggle a { + text-decoration: none; + padding: 0 3px 1px; + color: #7c7; + border: 1px solid #aca; + background-color: #dfd; + font-weight: bold; + font-size: 13px; + } + .bbp-topic-action #favorite-toggle a:hover { + color: #5a5; + border-color: #7c7; + background-color: #beb; + } + .bbp-topic-action #favorite-toggle span.is-favorite a { + color: #faa; + border: 1px solid #faa; + background-color: #fee; + } + .bbp-topic-action #favorite-toggle span.is-favorite a:hover { + color: #c88; + border-color: #c88; + background-color: #fdd; + } + +.bbp-topic-action #subscription-toggle a { + text-decoration: none; + padding: 0 3px 1px; + color: #7c7; + border: 1px solid #aca; + background-color: #dfd; + font-weight: bold; + font-size: 13px; + } + .bbp-topic-action #subscription-toggle a:hover { + color: #5a5; + border-color: #7c7; + background-color: #beb; + } + .bbp-topic-action #subscription-toggle span.is-subscribed a { + color: #faa; + border: 1px solid #faa; + background-color: #fee; + } + .bbp-topic-action #subscription-toggle span.is-subscribed a:hover { + color: #c88; + border-color: #c88; + background-color: #fdd; + } + +#bbpress-forums .bbp-forum-info .bbp-forum-content, +#bbpress-forums p.bbp-topic-meta { + margin: 5px 0 5px; + padding: 0; + font-size: 11px; +} + +#bbpress-forums p.bbp-topic-meta span { + white-space: nowrap; +} + +/* =Pagination +-------------------------------------------------------------- */ + +.bbp-pagination-count { + float: left; + border: 1px solid transparent; +} + +.bbp-pagination-links { + float: right; + list-style: none; + display: inline; + } + .bbp-pagination-links a, + .bbp-pagination-links span.current { + display: block; + float: left; + padding: 0px 5px; + margin-left: 5px; + border: 1px solid #efefef; + text-decoration: none; + } + .bbp-pagination-links a:hover, + .bbp-pagination-links span.current { + background: #eee; + opacity: 0.8; + border: 1px solid #ddd; + } + + .bbp-pagination-links span.dots { + display: block; + float: left; + padding: 1px 4px; + margin-left: 5px; + } + +.bbp-pagination { + float: left; + width: 100%; + margin-bottom: 15px; +} + +.bbp-topic-pagination { + display: inline-block; + margin-left: 5px; + margin-bottom: 2px; + } + .bbp-topic-pagination a { + font-size: 10px; + line-height: 10px; + padding: 1px 3px; + border: 1px solid #ddd; + text-decoration: none; + } + + +/* =Forms +-------------------------------------------------------------- */ + +#bbpress-forums fieldset.bbp-form { + clear: left; +} + +#bbpress-forums fieldset.bbp-form { + border: 1px solid #eee; + padding: 10px 20px; + margin-bottom: 10px; +} + +#bbpress-forums fieldset.bbp-form legend { + padding: 5px; +} + +#bbpress-forums fieldset.bbp-form label { + margin: 0; + display: inline-block; +} + +#bbp-edit-topic-tag.bbp-form fieldset.bbp-form label, +#bbp-login fieldset label, +#bbp-register fieldset label, +#bbp-lost-pass fieldset label { + width: 100px; +} + +#bbpress-forums fieldset.bbp-form p, +#bbpress-forums fieldset.bbp-form textarea, +#bbpress-forums fieldset.bbp-form select, +#bbpress-forums fieldset.bbp-form input { + margin: 0 0 8px; +} + +textarea#bbp_reply_content, +textarea#bbp_topic_content, +textarea#bbp_forum_content { + width: 97%; + box-sizing: border-box; +} + +textarea#bbp_forum_content { + height: 210px; +} + +#bbpress-forums fieldset.bbp-forum-form-attributes { + width: 200px; + float: right; + clear: none; + margin-left: 25px; +} + +/** + * Fix for too-long forum names, usually from conversion + */ +#bbpress-forums fieldset select#bbp_forum_id { + max-width: 200px; +} + +.bbp-topic-form, +.bbp-reply-form, +.bbp-topic-tag-form { + clear: left; +} +body.topic-edit .bbp-topic-form div.avatar img, +body.reply-edit .bbp-reply-form div.avatar img, +body.single-forum .bbp-topic-form div.avatar img, +body.single-reply .bbp-reply-form div.avatar img { + margin-right: 0; + padding: 10px; + border: 1px solid #ddd; + line-height: 0; + background-color: #efefef; +} + +body.page .bbp-reply-form code, +body.page .bbp-topic-form code, +body.single-topic .bbp-reply-form code, +body.single-forum .bbp-topic-form code, +body.topic-edit .bbp-topic-form code, +body.reply-edit .bbp-reply-form code { + font-size: 10px; + background-color: #f0fff8; + border: 1px solid #CEEFE1; + display: block; + padding: 8px; + margin-top: 5px; + width: 369px; +} + +#merge_tag, +#delete_tag { + display: inline; +} + +div.bbp-submit-wrapper { + margin-top: 15px; + float: right; + clear: both; +} + +p.form-allowed-tags { + width: 462px; +} + +/* =TinyMCE in themes +-------------------------------------------------------------- */ +#bbpress-forums div.bbp-the-content-wrapper { + margin-bottom: 10px; +} + +#bbpress-forums div.bbp-the-content-wrapper textarea.bbp-the-content { + width: 100%; + margin: 0; + font-size: 12px; +} + +#bbpress-forums div.bbp-the-content-wrapper table, +#bbpress-forums div.bbp-the-content-wrapper tbody, +#bbpress-forums div.bbp-the-content-wrapper tr, +#bbpress-forums div.bbp-the-content-wrapper td { + border: none; + padding: 0; + margin: 0; + width: auto; + line-height: 1em; +} + +#bbpress-forums div.bbp-the-content-wrapper input { + font-size: 12px; + padding: 5px; + margin: 0 2px 0 0; + line-height: 1em; +} + +#bbpress-forums div.bbp-the-content-wrapper div.quicktags-toolbar { + padding: 5px; + min-height: 26px; +} +#bbpress-forums div.bbp-the-content-wrapper td.mceToolbar { + padding: 4px 4px 8px; +} + +#bbpress-forums div.wp-editor-container { + margin: 0; + padding: 0; + line-height: 0; +} + +#bbpress-forums div.bbp-the-content-wrapper td.mceStatusbar { + line-height: 16px; +} + +/* =Edit User +-------------------------------------------------------------- */ + +#bbpress-forums #bbp-your-profile fieldset { + padding: 20px 20px 0 20px; +} + #bbpress-forums #bbp-your-profile fieldset div { + margin-bottom: 20px; + float: left; + width: 100%; + clear: left; + } + #bbpress-forums #bbp-your-profile fieldset select { + margin-bottom: 0; + } + #bbpress-forums #bbp-your-profile fieldset input, + #bbpress-forums #bbp-your-profile fieldset textarea { + margin-bottom: 0; + width: 60%; + background: #f9f9f9; + border: 1px solid #ddd; + box-shadow: none; + padding: 5px 8px; + border-radius: 0; + } + #bbpress-forums #bbp-your-profile fieldset input:focus, + #bbpress-forums #bbp-your-profile fieldset textarea:focus { + border: 1px solid #ccc; + box-shadow: inset 1px 1px 1px rgba(0,0,0,0.1); + outline-color: rgba(240,255,240,0.1); + } + #bbpress-forums #bbp-your-profile fieldset.bbp-form input.checkbox { + width: auto; + } + #bbpress-forums #bbp-your-profile fieldset legend { + display: none; + } + #bbpress-forums #bbp-your-profile fieldset label[for] { + float: left; + width: 20%; + padding: 5px 20px 5px 0; + text-align: right; + cursor: pointer; + } + #bbpress-forums #bbp-your-profile fieldset dl label[for] { + text-align: left; + width: 60%; + } + #bbpress-forums #bbp-your-profile fieldset span.description { + margin: 5px 0 0 20%; + font-size: 12px; + font-style: italic; + float: left; + clear: left; + width: 60%; + padding: 5px 8px; + border: #cee1ef 1px solid; + background-color: #f0f8ff; + } + + #bbpress-forums #bbp-your-profile fieldset fieldset { + margin: 0; + border: none; + padding: 0; + clear: none; + float: none; + } + #bbpress-forums #bbp-your-profile fieldset fieldset.password { + width: 60%; + display: inline; + } + #bbpress-forums #bbp-your-profile fieldset fieldset.password input, + #bbpress-forums #bbp-your-profile fieldset fieldset.password span { + width: 100%; + } + #bbpress-forums #bbp-your-profile fieldset fieldset.capabilities dl { + margin: 0; + } + #bbpress-forums #bbp-your-profile fieldset fieldset.password span.description { + margin-left: 0; + margin-bottom: 20px; + } + + #bbpress-forums #bbp-your-profile fieldset.submit button { + float: right; + } + +/* =Notices +-------------------------------------------------------------- */ + +div.bbp-template-notice, +div.indicator-hint { + border-width: 1px; + border-style: solid; + padding: 0 0.6em; + margin: 5px 0 15px; + border-radius: 3px; + background-color: #ffffe0; + border-color: #e6db55; + color: #000; + clear: both; +} +div.bbp-template-notice a { + color: #555; + text-decoration: none; +} + div.bbp-template-notice a:hover { + color: #000; + } + div.bbp-template-notice.info { + border: #cee1ef 1px solid; + background-color: #f0f8ff; + } + div.bbp-template-notice.important { + border: #e6db55 1px solid; + background-color: #fffbcc; + } + div.bbp-template-notice.error, + div.bbp-template-notice.warning { + background-color: #ffebe8; + border-color: #c00; + } + div.bbp-template-notice.error a, + div.bbp-template-notice.warning a { + color: #c00; + } + div.bbp-template-notice p { + margin: 0.5em 0 6px 0 !important; + padding: 2px; + font-size: 12px; + line-height: 140%; + } + +/* =Stickies +-------------------------------------------------------------- */ + +.bbp-topics-front ul.super-sticky, +.bbp-topics ul.super-sticky, +.bbp-topics ul.sticky, +.bbp-forum-content ul.sticky { + background-color: #ffffe0 !important; + font-size: 1.1em; +} + +/* =Revisions +-------------------------------------------------------------- */ + +#bbpress-forums .bbp-topic-content ul.bbp-topic-revision-log, +#bbpress-forums .bbp-reply-content ul.bbp-topic-revision-log, +#bbpress-forums .bbp-reply-content ul.bbp-reply-revision-log { + border-top: 1px dotted #ddd; + width: 100%; + margin: 0; + padding: 8px 0 0 0; + font-size: 11px; + color: #aaa; +} + +#bbpress-forums .bbp-topic-content ul.bbp-topic-revision-log li, +#bbpress-forums .bbp-reply-content ul.bbp-topic-revision-log li, +#bbpress-forums .bbp-reply-content ul.bbp-reply-revision-log li { + list-style-type: none; +} + +/* =Widgets +-------------------------------------------------------------- */ + +.bbp-login-form fieldset legend { + display: none; +} + +.bbp-login-form .bbp-username input, +.bbp-login-form .bbp-email input, +.bbp-login-form .bbp-password input { + padding: 5px; +} + +.bbp-login-form label { + width: 140px; + display: inline-block; +} + +#sidebar .bbp-login-form label { + width: 70px; +} + +.bbp-login-form .bbp-username, +.bbp-login-form .bbp-email, +.bbp-login-form .bbp-password, +.bbp-login-form .bbp-remember-me, +.bbp-login-form .bbp-submit-wrapper { + margin-top: 10px; +} + +.bbp-login-form .bbp-remember-me { + +} + +.bbp-login-form .bbp-submit-wrapper { + text-align: right; +} + +.bbp-login-form .bbp-login-links { +} + +.bbp-login-form .bbp-login-links a { + float: left; + clear: left; +} + +.bbp-logged-in img.avatar { + float: left; + margin: 0 15px 0 0; +} + +.bbp-logged-in h4 { + font-weight: bold; + font-size: 1.3em; + clear: none; + margin-bottom: 10px; +} + +/* =Avatars +-------------------------------------------------------------- */ + +#bbpress-forums p.bbp-topic-meta img.avatar, +#bbpress-forums ul.bbp-reply-revision-log img.avatar, +#bbpress-forums ul.bbp-topic-revision-log img.avatar, +#bbpress-forums div.bbp-template-notice img.avatar, +#bbpress-forums .widget_display_topics img.avatar, +#bbpress-forums .widget_display_replies img.avatar, +#bbpress-forums p.bbp-topic-meta img.avatar { + float: none; + margin-bottom: -7px; + border: 3px double #ddd; +} + +fieldset div.avatar { + float: right; +} + +/* =BuddyPress Activity Streams +-------------------------------------------------------------- */ + +.activity-list li.bbp_topic_create .activity-content .activity-inner, +.activity-list li.bbp_reply_create .activity-content .activity-inner { + border-left: 2px solid #eaeaea; + margin-left: 5px; + padding-left: 10px; +} + +/* =User Pages +-------------------------------------------------------------- */ + +#bbpress-forums h1 { + clear: none; + font-size: 1.8em; + line-height: 1em; + padding-bottom: 10px; +} + +#bbpress-forums #bbp-user-wrapper { + float: left; + width: 100%; +} + +#bbpress-forums .bbp-user-section { + overflow: auto; +} + +#bbpress-forums #bbp-user-wrapper h2.entry-title { + font-size: 1.4em; + margin: 0; + padding-bottom: 10px; + padding-top: 0; + clear: none; +} + +#bbpress-forums #bbp-user-wrapper ul.bbp-lead-topic, +#bbpress-forums #bbp-user-wrapper ul.bbp-topics, +#bbpress-forums #bbp-user-wrapper ul.bbp-forums, +#bbpress-forums #bbp-user-wrapper ul.bbp-replies, +#bbpress-forums #bbp-user-wrapper fieldset.bbp-form { + clear: none; +} + +#bbpress-forums #bbp-single-user-details { + margin: 0; + width: 150px; + float: left; + overflow: hidden; +} + +#bbpress-forums #bbp-single-user-details #bbp-user-avatar { + margin: 0; + width: 150px; +} + +#bbpress-forums #bbp-single-user-details #bbp-user-avatar img.avatar { + border: none; + height: 150px; + padding: 0; + margin: 0 0 20px 0; + width: 150px; +} + +#bbpress-forums #bbp-single-user-details #bbp-user-description { + float: none; + margin-left: 180px; +} + +#bbpress-forums #bbp-single-user-details #bbp-user-navigation { + float: none; + margin: 0; +} + +#bbpress-forums #bbp-single-user-details #bbp-user-navigation li { + margin: 0; +} + +#bbpress-forums #bbp-single-user-details #bbp-user-navigation a { + padding: 5px 8px; + display: block; + border: 1px solid transparent; + text-decoration: none; +} + +#bbpress-forums #bbp-single-user-details #bbp-user-navigation li.current a { + background: #eee; + opacity: 0.8; +} + +#bbpress-forums #bbp-user-body { + margin-left: 180px; +} + +body.my-account #bbpress-forums { + border-top: none; + padding-top: 0; + margin-bottom: 0; +} + +/* =User Capabilities +-------------------------------------------------------------- */ + +#bbpress-forums dl.bbp-user-capabilities { + display: inline-block; + vertical-align: top; +} + +#bbpress-forums dl.bbp-user-capabilities dt { + margin: 0 0 10px; + text-transform: capitalize; +} + +#bbpress-forums dl.bbp-user-capabilities dd { + margin: 0; + padding: 0; +} + +/* =BuddyPress Group Forums +-------------------------------------------------------------- */ + +#bbpress-forums div.row-actions { + font-size: 11px; + visibility: hidden; +} + +#bbpress-forums li:hover > div.row-actions { + visibility: visible; +} diff --git a/BlueTube.Web/assets/css/button.css b/BlueTube.Web/assets/css/button.css new file mode 100644 index 0000000000000000000000000000000000000000..a473fb8496b345c71d0ad340374368a0549e6a2b --- /dev/null +++ b/BlueTube.Web/assets/css/button.css @@ -0,0 +1 @@ +.flattr-button-iframe *{outline:0;margin:0;padding:0}.flattr-button-iframe body{background:transparent}.flattr-button-iframe .flattr-button,.flattr-button-iframe .flattr-dummy-button{position:absolute;top:0;bottom:0;left:0;right:0;min-width:55px;min-height:62px;width:auto;height:auto}.flattr-button-iframe .flattr-button.compact,.flattr-button-iframe .flattr-dummy-button.compact{height:auto}.flattr-button,.flattr-dummy-button{font:14px "Helvetica",sans-serif;position:relative;width:55px;height:62px}.flattr-button a,.flattr-dummy-button a{text-decoration:none}.flattr-button span,.flattr-dummy-button span{display:block}.flattr-button .share,.flattr-button .flattr-count,.flattr-dummy-button .share,.flattr-dummy-button .flattr-count{position:absolute;z-index:10;left:0;bottom:32.25806%}.flattr-button .share>span,.flattr-button .flattr-count,.flattr-dummy-button .share>span,.flattr-dummy-button .flattr-count{border:1px solid;margin-bottom:6px;text-align:center;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;background:#fafafa;background:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#fff), to(#fafafa));background:-webkit-linear-gradient(#fff, #fafafa);background:-moz-linear-gradient(#fff, #fafafa);background:-ms-linear-gradient(#fff, #fafafa);background:-o-linear-gradient(#fff, #fafafa);background:linear-gradient(#fff, #fafafa);border-color:#e6e6e6;color:#8a8a8a}.flattr-button .share>span:before,.flattr-button .share>span:after,.flattr-button .flattr-count:before,.flattr-button .flattr-count:after,.flattr-dummy-button .share>span:before,.flattr-dummy-button .share>span:after,.flattr-dummy-button .flattr-count:before,.flattr-dummy-button .flattr-count:after{position:absolute;left:50%;top:100%;width:0;height:0;content:"";display:block;border:5px solid transparent;margin-left:-5px;border-top-color:#e6e6e6;z-index:1000}.flattr-button .share>span:after,.flattr-button .flattr-count:after,.flattr-dummy-button .share>span:after,.flattr-dummy-button .flattr-count:after{margin-left:-4px;border-width:4px;border-top-color:#fafafa;z-index:1001}.flattr-button .flattr-count,.flattr-dummy-button .flattr-count{right:0;top:0}.flattr-button .flattr-count span,.flattr-dummy-button .flattr-count span{position:absolute;width:100%;height:12px;top:50%;margin-top:-6px;line-height:1}.flattr-button a .flattr-count:hover,.flattr-dummy-button a .flattr-count:hover{background:#faf8e6;background:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#fff), to(#faf8e6));background:-webkit-linear-gradient(#fff, #faf8e6);background:-moz-linear-gradient(#fff, #faf8e6);background:-ms-linear-gradient(#fff, #faf8e6);background:-o-linear-gradient(#fff, #faf8e6);background:linear-gradient(#fff, #faf8e6);border-color:#e6e4d3;color:#8a897f}.flattr-button a .flattr-count:hover:before,.flattr-dummy-button a .flattr-count:hover:before{border-top-color:#ebe9d8}.flattr-button a .flattr-count:hover:after,.flattr-dummy-button a .flattr-count:hover:after{border-top-color:#faf8e6}.flattr-button.show-share .button-wrapper .share,.flattr-button .button-wrapper:hover .share,.flattr-dummy-button.show-share .button-wrapper .share,.flattr-dummy-button .button-wrapper:hover .share{height:42px}.flattr-button .share,.flattr-dummy-button .share{overflow:hidden;margin-top:2px;right:0;height:0;-webkit-transition:height 0.4s ease,width 0.4s ease;-moz-transition:height 0.4s ease,width 0.4s ease;-ms-transition:height 0.4s ease,width 0.4s ease;-o-transition:height 0.4s ease,width 0.4s ease;transition:height 0.4s ease,width 0.4s ease}.flattr-button .share>span,.flattr-dummy-button .share>span{position:relative;height:34px;margin-right:0px}.flattr-button .share strong,.flattr-dummy-button .share strong{display:block;text-indent:-5000em;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAKCAMAAAB/nqUeAAAAM1BMVEWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBywEQ1AAAAEHRSTlMAQMAg4KAQMFCA0PCQsGBw382/swAAAIhJREFUeF5tyUkOg0AUA9H6U4+Q+P6njVB6iTcu6YHN2SGNtw1dtSfrXd2BhlsEQA9onQ4WwKUC8CVdjFx7MjOrp2tCuPYE9xgigrExDe5iCCCWJm6YaLWkJ1D6Ugdoy4/eafbXLDNrfAaR36O+otQerbQ2npNujn60a9ujkdoF0Btn0II42YEfc6EEkuLmJugAAAAASUVORK5CYII=) no-repeat center center;height:17px}.flattr-button .share .services,.flattr-dummy-button .share .services{height:16px;width:49px;margin:0 auto;padding:0}.flattr-button .share a,.flattr-dummy-button .share a{display:block;float:left;background:no-repeat 0 0;width:23px;height:16px;text-indent:-5000em}.flattr-button .share .facebook,.flattr-dummy-button .share .facebook{margin-right:3px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAQCAYAAAD9L+QYAAABk0lEQVR42qWQ3StDYRzHz3/kwr0SpbmTZV5buRliyEusZUWUYWZRJmTMa4vZsdORDVPEne1s3sYVNxR3bs/XeR7HOeHRMb71qe9zzu/3eTqHA8D1Th6jx3f0J5RdWQFfIV4ilr1rKQSEWwTF3AhEs/CsnDMhXo7cvqAM+cPXmApd5sSMsjPH3zAhXk3u27jA+FrmVzw8veIj/pDEQpfP81l41zMYW0kbcv9IxHqmQykWunw2cg2PsugOSoaood2rfIU/fMVCk9N/N7osYXgpZYga2j2raUxvXTGh8rzKRbSOn6Jp5ATtE2efGAokNX4Iefdtz+4+RH5N8F1u7U/A1C6iqFn4kWT2maKGdunuhTlb6xBAvFRe54qjxL6DwsaIIWpoL20TmDM1fXFNTg/FzTwKbNuGqKG9xB5lzlQ7Y7q8yrkH68A+ql0xQ9TQXj94AItjl4Uut/SKf5ZXOEQWutzcLcA2nCDDhqihvcF9hPKuKAtNLptaNlHWyStEDTF3hAnqmQfZZUG8HEAvwD+QWc+J9w3GpgtM3OEQ+wAAAABJRU5ErkJggg==)}.flattr-button .share .twitter,.flattr-dummy-button .share .twitter{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAQCAYAAAD9L+QYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAg1JREFUeNqcVEFrE0EU/mZ31o2UlKbRpvYgKu1RPAol0uLVi968KAj2KvgD/BWCl3rwVKRQKF5KQRAKWrAKeqgni5T0kESa1Lqb7m4mM33b3bhLd5pNHdiwZN9873vf+95jSimw102F85x+NBsQ8nSCMSw29ul9HCWefJHxRd1lQcicoWAyeL5Mkpip4LYIf1sRYhqY7l4vGqgdSYgwxkgB9xQeXrPxfKaAss2wXu9iaTfAxEUDa/UAXi9OFOJRgoh5iY+nma1Ui3AJaGHLhd+NmEIq3KlY2JgbzRSzRkmebDloeCoh0xYtQ6dXQNU+umrj/VwR85NWVLGvcH/qglb+L8SyTd9Py8h14G92fdy7YqF6ycKHeQvfDwQ2fgvcLmfDO1Tpyx3vhBDMPHDKfvcyR1cmf90a4yeP7hyQbEenexMfQ1fnx32BMYsN5cpQEid0DRsGnJr3rhbgxXYHrsi3/9JekPg+Fzw+P12JET6Y/SZVuEpEcEacHtxgWP7l48Gnv/j2p6cNaZIUC19dBEKdOalcowpujJooWUDFNjBiZi/9OOzh8WcH2y3q5IDeZMAV9eYmgT+btjFLVuxX7BDDHUfibc3HK7LeYejrnKZnJzQe83ByJgsGpughldD0JPZoJcj+xOaZiSaU/1s06f0SL6F6R6LuxpqzGHAYi0aLC+y/Vu4wW5lW7rEAAwAvf9AtipUNEwAAAABJRU5ErkJggg==)}.flattr-button .flattr span,.flattr-dummy-button .flattr span{text-decoration:none;position:absolute;z-index:20;bottom:0;top:67.74194%;left:0;right:0;border:1px solid;background:#8cb55b;background:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#92bd5e), to(#88b058));background:-webkit-linear-gradient(#92bd5e, #88b058);background:-moz-linear-gradient(#92bd5e, #88b058);background:-ms-linear-gradient(#92bd5e, #88b058);background:-o-linear-gradient(#92bd5e, #88b058);background:linear-gradient(#92bd5e, #88b058);border-color:#7ea352;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.flattr-button .flattr span.flattr-flattred,.flattr-button .flattr span.flattr-mything,.flattr-button .flattr span.flattr-pending,.flattr-dummy-button .flattr span.flattr-flattred,.flattr-dummy-button .flattr span.flattr-mything,.flattr-dummy-button .flattr span.flattr-pending{background:#ed8f24;background:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#f59425), to(#e88c23));background:-webkit-linear-gradient(#f59425, #e88c23);background:-moz-linear-gradient(#f59425, #e88c23);background:-ms-linear-gradient(#f59425, #e88c23);background:-o-linear-gradient(#f59425, #e88c23);background:linear-gradient(#f59425, #e88c23);border-color:#db8421}.flattr-button .flattr span.flattr-subscribed,.flattr-dummy-button .flattr span.flattr-subscribed{background:#dec400;background:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#e6cb00), to(#d9bf00));background:-webkit-linear-gradient(#e6cb00, #d9bf00);background:-moz-linear-gradient(#e6cb00, #d9bf00);background:-ms-linear-gradient(#e6cb00, #d9bf00);background:-o-linear-gradient(#e6cb00, #d9bf00);background:linear-gradient(#e6cb00, #d9bf00);border-color:#ccb400}.flattr-button .flattr span.flattr-error,.flattr-dummy-button .flattr span.flattr-error{background:#ed5d15;background:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#f56016), to(#e85b15));background:-webkit-linear-gradient(#f56016, #e85b15);background:-moz-linear-gradient(#f56016, #e85b15);background:-ms-linear-gradient(#f56016, #e85b15);background:-o-linear-gradient(#f56016, #e85b15);background:linear-gradient(#f56016, #e85b15);border-color:#db5614}.flattr-button .flattr span.flattr-link:before,.flattr-button .flattr span:after,.flattr-dummy-button .flattr span.flattr-link:before,.flattr-dummy-button .flattr span:after{position:absolute;content:"";display:block;background:no-repeat 0 0;top:50%;left:50%;height:14px;margin-top:-7px}.flattr-button .flattr span.flattr-link:before,.flattr-dummy-button .flattr span.flattr-link:before{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAApUlEQVR42m3QPQoCMRiE4dh5AhWsPIJ4jcXfxmPYWIiwtdhaK97CQvDnDoKuhZUnUBBW1M83MJAgDjyQCUOKODMrYY6Hhbzw1nkL54dLhGig7NDFyQ+fusyQYqa+R4IDzEWvDNXrWKGGMSwe3tFUL6Ki8+jfsKVeRUHnAT7xMEcPDWzgZPL74hoJzup9pLiqX5z+qY3MQm6IM/XDDo7hoxGSY4HyF23Qb3wHRDx1AAAAAElFTkSuQmCC);left:4px;width:10px;height:10px;margin-top:-5px}.flattr-button .flattr span.flattr-link:after,.flattr-dummy-button .flattr span.flattr-link:after{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAALCAYAAABhwJ3wAAABZUlEQVR42q1SMUvDQBTu5lYQHIRu3dwEwU1cOjg5dPIHSN1KJwcdxKW4FAkuFkUHF6lUHRwEEQRBIRUEq4K0VtS0GmNrA9G2XuC8V+7B8Ro5EANf3n2Py/dd3nchwzACkcpM9EH9L4BgEKLpjekU5zz0BwRqwitBMHZvFcGEa8TCAjHKfzXivU/22S4t6IyOCzvjdv3JpFwxCssagRi6RiCsuqtGMEaBuPLHwyBycrGbZf73p+wNUb6an58TdergdHP5tmIOdo3Mm6MtFKJGNedhpsPa15Lzq9JZXpQomUIiiDPWsSTv7xkdNXpvvkwWy+crcDngQNivvlUM32cerCkHDdjUcO01nJJ2dOv7i0nvyy2Q8+iMqK7eqNX2nLr7ugdrcRvT2BfBZ1AYudbI+ajNqkZey03KMY5CvXu8PIT8LLu8LfsDsAeEZa4RyqkuZhRTjWTYDYElEnRO9kdwD35POdX9ART8+iaqcevUAAAAAElFTkSuQmCC);margin-left:-5px;width:26px}.flattr-button .flattr span.flattr-flattred:after,.flattr-dummy-button .flattr span.flattr-flattred:after{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAALCAYAAAATD/9GAAACBklEQVR42sVUTShEURSe3eyUslB2s2KnFCtsZsHGwspaerKZZqWwkI1sJEmISDaMmWEhqUmR38ZE+RfG3xieYXh58/vmx/3qnnpz8xqy8Op07ve9c8/57j3nPZO9v87IzPD/ZUYvLL2TLfZ8m7PZ7F/su5wlzCQSJglWfR04smfZk0dYATMrFSH8F2FHVzvNVBcB4jP2IF925xO2ujdfK7/de6mIiCEUnt+C+SfCUDdHGAijALSVWaPuRstRdM3nHtNSyQjnykQ86urqZL5paWNq4NTvLWbrImD+vpFjk57fP18fzxHmPfHMUGFRWDB005rQ4sd0nYeX2y7mLMItS99hTUsE4CFszjPYzYQ/AMcT0TPn6nAH8oOnOLw3bKUo7PXjqYH1fggfAw5A/OOLfzCV0lRqi4gRF1bkcawnFnuqcJs4FA5/cXewEourIbQZfDwZHUBONgr9P20lktrUqLJHwn8jjOcxhd6D7cDi4388aYJ/CQdKfz1jONmb8ryANftae8HT6fRCgI2EMbMCL29Ot+FD4HNlicQ+68GPODtrwCN/jjCcSC9MjSk2HlAJj6tHCwLy1SznixADIeDREhFTXhKazqRvGd7CSGCu+C+pMJPJfBxf7zrA3wbP3Dy/mWbMqhfGhzvMrE8YbAfnKyiG9ouYPAnje3wgeZzEa1l1+3x8XfgFKcczFG0MaUMAAAAASUVORK5CYII=);margin-left:-18px;width:38px}.flattr-button .flattr span.flattr-subscribed:after,.flattr-dummy-button .flattr span.flattr-subscribed:after{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAKCAYAAADy491MAAACwUlEQVR42p1UX0hTYRS/b74NhL0FPeypvQk+RA/5kg9F0EMQ2EtC2B582otF60EqsgjMIkLDaFBkqHMYLERM/Ncy0FY207W5sm2aZt6l29yfu107Pznf+ODOPdwPfpzv/u45v3vOd853FWfnaeAIoZngIJwn2MBXgAV+bBWTqCGcJdjNanG+DuwPBH0z7q6SXtrZp5XXcovRRNBZKZBe27RiIeNfeHuC9ooZTAWGj27vbCzFNyPtZrWCK7OXketBAc+Gbx7HQyqTvIUECQ7gsOrhCwEzyeO0/6iJY3xQrWa1UHy5ACHknehp49ExtInRDA6+X8Iz3XgnOI5rkrg6glVwYmR6hm647rqvtH6NfBjigzNocaFWaaRt4GS9QGiqt1wA2Vp9X09msqnI5Lz3KQda5TYBaLfgsvlMCLZUKu6O+F/cRxy9j4ODFrrpGX9yvaDl18DlCnvvxanpuv4Plp8NWhjp/rFH7cKPc7KA07R8Ahy+JXITY1FPGANZLGkpfFxuEyB/dDet9iOGEutCYeCWf871kV/jdODNxUBo8lw2l96i7rp5LC9wLFZjNS10BhaJvx59cAc+uCfg4INubG7HOkVuhktKTkv4eLUC2Cqfv0/X45lOJlgsajFK5h0K8S/4HoLneZfnFquq1lZy/SqsvH6sfWuS9eTcxGydZGsJrX56KQsxb8f+999fLlj6S3WAH5191cLPTr5L99BeHAD4bo+rgefXvrq+fNtYgFFLdGh8bvAS/3LraLzPCD1wiCkXQA+nKLERtAuXbC+XDtMv1SOEwOOiYU/FtcHGNsKD4MlOYObpbjzueN7ixAVDB8SsL0Y/DoBDPLedCxCHYdTCe9iVeNAHTTr9XtxToQeODsPLBdTI8y/WAAJQHe+x5tnnGkGV/NUK8VEUz1CleIdcAO7FIVoiJ1XKR6mgh33tf/0XRsCLd/tHAAAAAElFTkSuQmCC);margin:-6px 0 0 -24px;width:48px}.flattr-button .flattr span.flattr-mything:after,.flattr-dummy-button .flattr span.flattr-mything:after{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADEAAAAJCAYAAACbtcTcAAAB1UlEQVR42q1UPUhCURR2cwsetLm51erclEPRVkROtYSzSwS1tNQQRD+TQRTU0g/ZEgRZBEbQj2CQUg2aUiaEmGWG+nzvdT+5Fw63bj6pBx/nO+eec88P5z6HZVn/jsBcT1twd3KiBX8Xg5Nym3ENOBDA4EewKIDr7X9oxM1g2fXfP12b3w4vdVLeShNQNGQ7utiawsHm4cIQL8DDpzICkCb9kIJjCPy8n6GLJLFg4z4+DEURjxgLxcOPcJecnwy8j0uvaMKh69XJUvn1gRk6Mrm7iF6v7cF+cLY+a5pmEQAXxUESrjH/clWvxOuGvkLPmH4Nyc4fQyfBMUX8Mpf4koR75fxi4DW9GoHM5TNRDEdcphmm8XaZCG/wC9w4RHG4DADHqslFEOnHPdKZB7xYyk+/lwtpcFV8KpvwUd4kv1c0FE+e99IdG4fxs/KxCD35dNMtJ4zdRzyyjUoKasu+pAagtNKE3fzw/ZYYnXHeCBC7CU5sTtiaNSHewfHVzjDxIfHqJhT57TWBqQld7CJAE86sjgbwIxCFyk2gSBjwDvAA08+3IcOox1Tx9DFTrsov1/vTCniIjt0rcAzCRh5iFKDTIdB4TJT4un+JD4tdp1yR35Lr/QKKvy6SbPOvVwAAAABJRU5ErkJggg==);margin:-6px 0 0 -25px;width:49px}.flattr-button .flattr span.flattr-pending:after,.flattr-dummy-button .flattr span.flattr-pending:after{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAALCAYAAAATD/9GAAACBklEQVR42sVUTShEURSe3eyUslB2s2KnFCtsZsHGwspaerKZZqWwkI1sJEmISDaMmWEhqUmR38ZE+RfG3xieYXh58/vmx/3qnnpz8xqy8Op07ve9c8/57j3nPZO9v87IzPD/ZUYvLL2TLfZ8m7PZ7F/su5wlzCQSJglWfR04smfZk0dYATMrFSH8F2FHVzvNVBcB4jP2IF925xO2ujdfK7/de6mIiCEUnt+C+SfCUDdHGAijALSVWaPuRstRdM3nHtNSyQjnykQ86urqZL5paWNq4NTvLWbrImD+vpFjk57fP18fzxHmPfHMUGFRWDB005rQ4sd0nYeX2y7mLMItS99hTUsE4CFszjPYzYQ/AMcT0TPn6nAH8oOnOLw3bKUo7PXjqYH1fggfAw5A/OOLfzCV0lRqi4gRF1bkcawnFnuqcJs4FA5/cXewEourIbQZfDwZHUBONgr9P20lktrUqLJHwn8jjOcxhd6D7cDi4388aYJ/CQdKfz1jONmb8ryANftae8HT6fRCgI2EMbMCL29Ot+FD4HNlicQ+68GPODtrwCN/jjCcSC9MjSk2HlAJj6tHCwLy1SznixADIeDREhFTXhKazqRvGd7CSGCu+C+pMJPJfBxf7zrA3wbP3Dy/mWbMqhfGhzvMrE8YbAfnKyiG9ouYPAnje3wgeZzEa1l1+3x8XfgFKcczFG0MaUMAAAAASUVORK5CYII=);margin-left:-18px;width:41px}.flattr-button .flattr span.flattr-error:after,.flattr-dummy-button .flattr span.flattr-error:after{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAJCAYAAAAo/ezGAAABYUlEQVR42q1RPUsDQRS8zu5AsBACFmJjfX/BQrDSxnQ2aiEWKSSFAbUxgviBhSAKOTCFCIqKgkqSQoKgQQwiCUjwQE3EKEk8NIie2XPneIHNnpomC8Pu7L6deR+Kb757WEIfh9IoKLZ7XXDgUaXdw9Ekc5wJvwmr9MfjGDzkM5PSB3VlOzDOd+9BXF/cj4c6RJ42Eq1kNEBV90CQxDsRO6MPjUTPN6ccg0QqEhZahEzbcW9Zn1mqSpN48+Hp+myFVUwQ872QnAuP9sOAkrUZY6/ohqtFJO7cF838Gs4yR/bW91eZGwZgVv54OyuYT2nBAKsLXPyoAaIgBbu4kUt5wU8ud9vAc8/GErhoUDPk2+x1kJMWglrPANmBb8WWe9H7zP2V/q/BzV3yaON4YRpY3ZkYqwq+lB79dHZxZrMSr2QvGBr0YQZ8HjEIIkY2kFexKkiZKn9wDcXTfQSzgCBiRIMfLghHAS8+1MAAAAAASUVORK5CYII=);margin:-5px 0 0 -12px;width:24px}.flattr-button a.flattr span:hover,.flattr-dummy-button a.flattr span:hover{background:#ed8f24;background:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#f59425), to(#e88c23));background:-webkit-linear-gradient(#f59425, #e88c23);background:-moz-linear-gradient(#f59425, #e88c23);background:-ms-linear-gradient(#f59425, #e88c23);background:-o-linear-gradient(#f59425, #e88c23);background:linear-gradient(#f59425, #e88c23);border-color:#db8421}.flattr-button.show-share a.flattr span.flattr-flattred,.flattr-button a.flattr span.flattr-flattred:hover,.flattr-dummy-button.show-share a.flattr span.flattr-flattred,.flattr-dummy-button a.flattr span.flattr-flattred:hover{background:#dec400;background:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#e6cb00), to(#d9bf00));background:-webkit-linear-gradient(#e6cb00, #d9bf00);background:-moz-linear-gradient(#e6cb00, #d9bf00);background:-ms-linear-gradient(#e6cb00, #d9bf00);background:-o-linear-gradient(#e6cb00, #d9bf00);background:linear-gradient(#e6cb00, #d9bf00);border-color:#ccb400}.flattr-button.show-share a.flattr span.flattr-flattred:after,.flattr-button a.flattr span.flattr-flattred:hover:after,.flattr-dummy-button.show-share a.flattr span.flattr-flattred:after,.flattr-dummy-button a.flattr span.flattr-flattred:hover:after{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAKCAYAAADy491MAAACw0lEQVR42q1UX0hTYRTfm2+Dwd6EHnyqnoSg6CF7yIdCCAoi6UUoGRU97KUig6IoodKEIJwUjZKK5hoSxhIxLZMFzllpc86W0+bVtbxrbtNtd7u384vz0WV1zcgPzs633/nO+c6f33dN9ta9kEqSBhIbyUGSKuAGYsZZ1qYNEitJHfS/xsZPRc+Qs62kllIarbySm4jExu1GDnSkSikWssPvn++kvWkjJBAa3L+UWgxKiZmadcb+VcDd7ks7kHg6m7yM5EhskLWqxvnxT76j/5M0usy6cjWfPYKYuF/EXncB1PGTcPIMOE6XU4epZSvf4/y78FA7/2+ATRd4O3CWamBMjXrG6pC84+n5JmCYfru7qQYaZ41igynwFbjIFQ4WVVOT2dX09KDf08FGK4zcCa18D01dC0GXSsVl7/CD63yBdWp27AVwPnMBl7v7b58rKPl5YLnCyhvRaUXJx6DjS3Ot7GIYu6Xz1GFiyShwVVW/c65mQYltJH0wFktKGhcC/xKfvgisfA+9nJGfwI8SagNvXX23toLDsDmfXTlBMQ58lWObf1Ikl0nQpJ2c+CGRqJyK3yElYmMZxsYbWfg268cEeFoa3spvD5ScgrjwbwXwf9PY1GsUr32e/1gPf0wTMaLSpOfa/ePHGNdQjJ7DIkZZAcax/7xqBT93sTaHoqOdItFEUjrDe6JG4Ia+APpSNQPv9T1sFMEw6v6Rrt20P4uvGRpB1NwHI3jOXN6CcwYFGMbGz+TMyCPgTNdq5GKiw3toNN7HvTev4mGt5DJh+qS6YRSOsFEHe0Qx0HOL4S7gpAfQdVyOUfs+eFswZn/wpZMvt4CzE5G3LuB4oK8C3Ztg4AbpG1VhFBs5UVMk4M33Gu1RKeRAjnr+i+XCpTpauXR4hM/LOh+ZMVGwX4fX6nCZcb94xHq7KHaN2BbOQawO5PcDcbEZrviDuk4AAAAASUVORK5CYII=);margin:-6px 0 0 -24px;width:48px}.flattr-button.light .flattr span,.flattr-dummy-button.light .flattr span{background:#d4e8bc;background:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#dbf0c2), to(#d0e3b8));background:-webkit-linear-gradient(#dbf0c2, #d0e3b8);background:-moz-linear-gradient(#dbf0c2, #d0e3b8);background:-ms-linear-gradient(#dbf0c2, #d0e3b8);background:-o-linear-gradient(#dbf0c2, #d0e3b8);background:linear-gradient(#dbf0c2, #d0e3b8);border-color:#c4d6ae}.flattr-button.light .flattr span:hover,.flattr-dummy-button.light .flattr span:hover{background:#f7c994;background:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#ffcf99), to(#f2c591));background:-webkit-linear-gradient(#ffcf99, #f2c591);background:-moz-linear-gradient(#ffcf99, #f2c591);background:-ms-linear-gradient(#ffcf99, #f2c591);background:-o-linear-gradient(#ffcf99, #f2c591);background:linear-gradient(#ffcf99, #f2c591);border-color:#e6bb8a}.flattr-button.light .flattr .flattr-link:before,.flattr-dummy-button.light .flattr .flattr-link:before{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAABUklEQVR42o3L30oCQRQG8HmEeZTIHa8Xdt0sKrVewEforou0NozAIoTwJoKGuugv65puiUJtBSUVNY/QCyRGRJSap7PiytxY+8GPme/AR7z8XCq064Z49yr0guBP16O8N+pUFNqpKqJTUyAAXnqaoc7zrCDtMuNth0EA3LqPU/shIezHBJBvizVbFoOBAuMtm5neK9+O7mL0uB4TJ/U4eMjXQRgGDhkn/WBX5dv+7bSJwEc+d8MgSfpD/I8g7ve9mykTgY98bDOQqGRIdtxJE4GPvOcZSIYOty4mTAR9OMwxkPSGm9UozVejtjzM18ZNBD7ylmUgUTfODZqrjAkE8hC7i8BHmhkGfTzrGHTNMcT6mQEe7CpK4s32usQljRSDRprxldMIXS1FBIIA5sjrPONLtk5NWxfLRR0CEJmiTsmCpdGUpYl0QYN/NBFfLGiUYH4BWH2hKR0ymwgAAAAASUVORK5CYII=);left:2px;width:14px;height:14px;margin-top:-7px}.flattr-button.light .flattr .flattr-link:after,.flattr-dummy-button.light .flattr .flattr-link:after{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAALCAYAAABhwJ3wAAAAn0lEQVR42r2RUQnEMBBEayEW1kItxEItxEGohViohVo4C7VQC7WwHbiBg4FcGgj9eCyzzebRzeTurzDlnGsE1hFURQvw0SIXNpAeiAzsmluiJB+eiBZw/cnGGkFoinjBAZyswGQLqZLPb6VIUFFkDtJf5Q80Oyg9qzPwYfZOUeoRnWCT/nCRrqDIei+ZaYqiiIxDRR56Z3/+neG8ZL33BiuBCJCnbhdAAAAAAElFTkSuQmCC)}.flattr-button.compact,.flattr-dummy-button.compact{height:20px;min-width:110px;min-height:0}.flattr-button.compact .share,.flattr-button.compact .flattr-count,.flattr-dummy-button.compact .share,.flattr-dummy-button.compact .flattr-count{left:48.18182%}.flattr-button.compact .flattr-count,.flattr-dummy-button.compact .flattr-count{bottom:0;margin:0 0 0 6px}.flattr-button.compact .flattr-count:before,.flattr-button.compact .flattr-count:after,.flattr-dummy-button.compact .flattr-count:before,.flattr-dummy-button.compact .flattr-count:after{margin:-5px 0 0 0;left:auto;right:100%;top:50%;border-top-color:transparent;border-right-color:#ebebeb}.flattr-button.compact .flattr-count:after,.flattr-dummy-button.compact .flattr-count:after{margin:-4px 0 0 0;border-right-color:#fff}.flattr-button.compact .flattr-count:hover:before,.flattr-button.compact .flattr-count:hover:after,.flattr-dummy-button.compact .flattr-count:hover:before,.flattr-dummy-button.compact .flattr-count:hover:after{border-top-color:transparent}.flattr-button.compact .flattr-count:hover:before,.flattr-dummy-button.compact .flattr-count:hover:before{border-right-color:#ebe9d8}.flattr-button.compact .flattr-count:hover:after,.flattr-dummy-button.compact .flattr-count:hover:after{border-right-color:#fffef2}.flattr-button.compact .flattr span,.flattr-dummy-button.compact .flattr span{top:0;right:51.81818%}.flattr-button.compact.show-share .button-wrapper .share,.flattr-button.compact .button-wrapper:hover .share,.flattr-dummy-button.compact.show-share .button-wrapper .share,.flattr-dummy-button.compact .button-wrapper:hover .share{width:57px;height:20px}.flattr-button.compact .share,.flattr-dummy-button.compact .share{bottom:50%;margin-bottom:-10px;height:20px;width:0}.flattr-button.compact .share>span,.flattr-dummy-button.compact .share>span{position:absolute;right:0;padding:0 2px 0 4px;margin:0 0 0 2px;width:49px;height:100%;border:0;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADcAAAAUCAYAAAAp46XeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABStJREFUeNrMWF1MXEUU/ubeubvs8g8twUr/UMAa2thirUFtYjVtlPbFpCaKpS/6YhQ1miYmfdBHNcHCQ8XGFzFFo2niSyMx0b5QG7Qq1XYBW40aMWXBpbCs+3N/xjOzP7DdvbtQqfEkZ2fm3jtnzjfnzDlnlvX29qK7uxtpauscuG/vo63DWG0yOIShq66gvk19h9jmxDr1dQ22xuAwYvomwwKwJVPHIbZTnO47drLvCAHhOGEpX7PNoTtDEy/zpevfc2igSgJLBP9G88baVccHkWx+IT4erUV0Qaz2CuXyp2udffCy1ViaBc52WLtsb2uohm07uHmk/bsNEoXFDPyp40HDuzvrNdeEV7aWc/OAFZQtlbYLWNMS8HGG5goda31MjWEKNY/liGI8y3Lk7uqbYlbj3ChyvDREY/G871xlk4IVBkNrJcdXUyYtwnKAPbbBgze2+rGpVMc100H/z3FcDtuw6PVHv8UhtOw53E1BpQSTHxNilp7E1LOElV/Bg3s24da1ftV/e/BC/s13mSsjR0s5x5ndFXhhNIL+iRgg44/OlDWbqnQM7iqDNwVgjUfD0S0+xOhd75UYThsa5qxsE+YFF4tb4BS9FCiWBsfS2PLS4w9tzgArBMJKWS6f8yUIIOmMd3aU4t5ajjfHowhcs4G4wP2NRgbYUorQ629CFuYTTnIjrrdc++H3/TFT69zX0XpiYTIMf40/ZTGRAqchg08+Q+4iDXVJYG+dvAgPuaVlFwaXG2MYLhKQ01dNdNQbOLzRiyfWezA8Y+HctIWWSj3vNAns1K90BDy50YV/8HVV68OPtP449t0k4sEI6giYTbu+aDW5bnIsWaSeucYEkcw5biBsN7ekOU0UKKToOFnDq0t9GfbUGYrdKCQtpuVXiFP4PzI5Po27muoyi1u2neWSQiPLaVhivUUBr3ZtyxJ45Kmtqn2tfyRnMZ0XSgEMU+R+d1frCthy6Vvpti4Blks3k2Akp8mkXTdtEwmKSDHamWjCJk725TNzSbjuaG9Q7bbba1T7w5UQNNrJ4UshV4XaGqrypr7ZqIPOkQj6tvtxR7kOViytkLWHZGR12TNeX2EdiyzEDp0fu4r19RWoqShR1pPuJ0Gmgcvo6WTaRXAv9pxV7ZfHD2TGPi9fbrFynWkZvgiamKDw3lKmF3R/SZ9OmgjQmctJG+n92rdlIfDA5snttUboRDA4j6mZiDovEqBi2Scwih13XqxysscrItJR0NwhCiqxIjLmKewfvRRFIfPKLY698tLzo319fc+e+p6fofGHZX6DXEsD1bPwMl2dFZ9PKg4VLAqt21BfihKPjnLjxkurdwNRnKUI+d7OUuyqyfWCMAHrHFnAxCxZzWAFwSmim4E92DWQSOcoCSxdkauKW2SXdUXLLLdUQLK9LsAayzTsqOJopnb/LR7srM4FFpi38fT5CM6R+xYClpPEKS5Gl5ZIIpW4NXJ+yTJHiiLHXFrNQ1cZK26trPySCZnqxA1UMx5Y51FnTpaN8jozmxAK1Cd/JHDy9zgiNC4GTBOOVbj8yj0SrtCeef3zTKFumTd23mQq6BmPoYdKr3KvhkojebcLE8pw3Ele8GTw4GxZIjn+T8SQUVwBSojF59Jt9JWJU+AomKhBTWnZqGxn5qJYU+n77688y3WTIrS/zoExFf4py3KUFoKfBdiTMyH9mGPZdcsV5vNw+Eu4ym9eYg+dO0bPqPqmsyHrKD37bwbi53x/rfrfDE4qjGvTc2Nt0xc+/keAAQDXipkVvDpO1QAAAABJRU5ErkJggg==) no-repeat 0 0}.flattr-button.compact .share>span strong,.flattr-dummy-button.compact .share>span strong{display:none}.flattr-button.compact .share>span:before,.flattr-button.compact .share>span:after,.flattr-dummy-button.compact .share>span:before,.flattr-dummy-button.compact .share>span:after{content:none}.flattr-button.compact .share>span .services,.flattr-dummy-button.compact .share>span .services{width:auto;height:auto;margin:0}.flattr-button.compact .share>span a,.flattr-dummy-button.compact .share>span a{background:none;width:50%;height:18px;margin:0} diff --git a/BlueTube.Web/assets/css/font-awesome.css b/BlueTube.Web/assets/css/font-awesome.css new file mode 100644 index 0000000000000000000000000000000000000000..048cff973981e8dd4ed8e73c4ca532ffcf02e1e8 --- /dev/null +++ b/BlueTube.Web/assets/css/font-awesome.css @@ -0,0 +1,1338 @@ +/*! + * Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ +/* FONT PATH + * -------------------------- */ +@font-face { + font-family: 'FontAwesome'; + src: url('../fonts/fontawesome-webfont.eot?v=4.0.3'); + src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.0.3') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff?v=4.0.3') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.0.3') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.0.3#fontawesomeregular') format('svg'); + font-weight: normal; + font-style: normal; +} +.fa { + display: inline-block; + font-family: FontAwesome; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +/* makes the font 33% larger relative to the icon container */ +.fa-lg { + font-size: 1.3333333333333333em; + line-height: 0.75em; + vertical-align: -15%; +} +.fa-2x { + font-size: 2em; +} +.fa-3x { + font-size: 3em; +} +.fa-4x { + font-size: 4em; +} +.fa-5x { + font-size: 5em; +} +.fa-fw { + width: 1.2857142857142858em; + text-align: center; +} +.fa-ul { + padding-left: 0; + margin-left: 2.142857142857143em; + list-style-type: none; +} +.fa-ul > li { + position: relative; +} +.fa-li { + position: absolute; + left: -2.142857142857143em; + width: 2.142857142857143em; + top: 0.14285714285714285em; + text-align: center; +} +.fa-li.fa-lg { + left: -1.8571428571428572em; +} +.fa-border { + padding: .2em .25em .15em; + border: solid 0.08em #eeeeee; + border-radius: .1em; +} +.pull-right { + float: right; +} +.pull-left { + float: left; +} +.fa.pull-left { + margin-right: .3em; +} +.fa.pull-right { + margin-left: .3em; +} +.fa-spin { + -webkit-animation: spin 2s infinite linear; + -moz-animation: spin 2s infinite linear; + -o-animation: spin 2s infinite linear; + animation: spin 2s infinite linear; +} +@-moz-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + } + 100% { + -moz-transform: rotate(359deg); + } +} +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + } +} +@-o-keyframes spin { + 0% { + -o-transform: rotate(0deg); + } + 100% { + -o-transform: rotate(359deg); + } +} +@-ms-keyframes spin { + 0% { + -ms-transform: rotate(0deg); + } + 100% { + -ms-transform: rotate(359deg); + } +} +@keyframes spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(359deg); + } +} +.fa-rotate-90 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); +} +.fa-rotate-180 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); +} +.fa-rotate-270 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); + -webkit-transform: rotate(270deg); + -moz-transform: rotate(270deg); + -ms-transform: rotate(270deg); + -o-transform: rotate(270deg); + transform: rotate(270deg); +} +.fa-flip-horizontal { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); + -webkit-transform: scale(-1, 1); + -moz-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + -o-transform: scale(-1, 1); + transform: scale(-1, 1); +} +.fa-flip-vertical { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); + -webkit-transform: scale(1, -1); + -moz-transform: scale(1, -1); + -ms-transform: scale(1, -1); + -o-transform: scale(1, -1); + transform: scale(1, -1); +} +.fa-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.fa-stack-1x, +.fa-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.fa-stack-1x { + line-height: inherit; +} +.fa-stack-2x { + font-size: 2em; +} +.fa-inverse { + color: #ffffff; +} +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ +.fa-glass:before { + content: "\f000"; +} +.fa-music:before { + content: "\f001"; +} +.fa-search:before { + content: "\f002"; +} +.fa-envelope-o:before { + content: "\f003"; +} +.fa-heart:before { + content: "\f004"; +} +.fa-star:before { + content: "\f005"; +} +.fa-star-o:before { + content: "\f006"; +} +.fa-user:before { + content: "\f007"; +} +.fa-film:before { + content: "\f008"; +} +.fa-th-large:before { + content: "\f009"; +} +.fa-th:before { + content: "\f00a"; +} +.fa-th-list:before { + content: "\f00b"; +} +.fa-check:before { + content: "\f00c"; +} +.fa-times:before { + content: "\f00d"; +} +.fa-search-plus:before { + content: "\f00e"; +} +.fa-search-minus:before { + content: "\f010"; +} +.fa-power-off:before { + content: "\f011"; +} +.fa-signal:before { + content: "\f012"; +} +.fa-gear:before, +.fa-cog:before { + content: "\f013"; +} +.fa-trash-o:before { + content: "\f014"; +} +.fa-home:before { + content: "\f015"; +} +.fa-file-o:before { + content: "\f016"; +} +.fa-clock-o:before { + content: "\f017"; +} +.fa-road:before { + content: "\f018"; +} +.fa-download:before { + content: "\f019"; +} +.fa-arrow-circle-o-down:before { + content: "\f01a"; +} +.fa-arrow-circle-o-up:before { + content: "\f01b"; +} +.fa-inbox:before { + content: "\f01c"; +} +.fa-play-circle-o:before { + content: "\f01d"; +} +.fa-rotate-right:before, +.fa-repeat:before { + content: "\f01e"; +} +.fa-refresh:before { + content: "\f021"; +} +.fa-list-alt:before { + content: "\f022"; +} +.fa-lock:before { + content: "\f023"; +} +.fa-flag:before { + content: "\f024"; +} +.fa-headphones:before { + content: "\f025"; +} +.fa-volume-off:before { + content: "\f026"; +} +.fa-volume-down:before { + content: "\f027"; +} +.fa-volume-up:before { + content: "\f028"; +} +.fa-qrcode:before { + content: "\f029"; +} +.fa-barcode:before { + content: "\f02a"; +} +.fa-tag:before { + content: "\f02b"; +} +.fa-tags:before { + content: "\f02c"; +} +.fa-book:before { + content: "\f02d"; +} +.fa-bookmark:before { + content: "\f02e"; +} +.fa-print:before { + content: "\f02f"; +} +.fa-camera:before { + content: "\f030"; +} +.fa-font:before { + content: "\f031"; +} +.fa-bold:before { + content: "\f032"; +} +.fa-italic:before { + content: "\f033"; +} +.fa-text-height:before { + content: "\f034"; +} +.fa-text-width:before { + content: "\f035"; +} +.fa-align-left:before { + content: "\f036"; +} +.fa-align-center:before { + content: "\f037"; +} +.fa-align-right:before { + content: "\f038"; +} +.fa-align-justify:before { + content: "\f039"; +} +.fa-list:before { + content: "\f03a"; +} +.fa-dedent:before, +.fa-outdent:before { + content: "\f03b"; +} +.fa-indent:before { + content: "\f03c"; +} +.fa-video-camera:before { + content: "\f03d"; +} +.fa-picture-o:before { + content: "\f03e"; +} +.fa-pencil:before { + content: "\f040"; +} +.fa-map-marker:before { + content: "\f041"; +} +.fa-adjust:before { + content: "\f042"; +} +.fa-tint:before { + content: "\f043"; +} +.fa-edit:before, +.fa-pencil-square-o:before { + content: "\f044"; +} +.fa-share-square-o:before { + content: "\f045"; +} +.fa-check-square-o:before { + content: "\f046"; +} +.fa-arrows:before { + content: "\f047"; +} +.fa-step-backward:before { + content: "\f048"; +} +.fa-fast-backward:before { + content: "\f049"; +} +.fa-backward:before { + content: "\f04a"; +} +.fa-play:before { + content: "\f04b"; +} +.fa-pause:before { + content: "\f04c"; +} +.fa-stop:before { + content: "\f04d"; +} +.fa-forward:before { + content: "\f04e"; +} +.fa-fast-forward:before { + content: "\f050"; +} +.fa-step-forward:before { + content: "\f051"; +} +.fa-eject:before { + content: "\f052"; +} +.fa-chevron-left:before { + content: "\f053"; +} +.fa-chevron-right:before { + content: "\f054"; +} +.fa-plus-circle:before { + content: "\f055"; +} +.fa-minus-circle:before { + content: "\f056"; +} +.fa-times-circle:before { + content: "\f057"; +} +.fa-check-circle:before { + content: "\f058"; +} +.fa-question-circle:before { + content: "\f059"; +} +.fa-info-circle:before { + content: "\f05a"; +} +.fa-crosshairs:before { + content: "\f05b"; +} +.fa-times-circle-o:before { + content: "\f05c"; +} +.fa-check-circle-o:before { + content: "\f05d"; +} +.fa-ban:before { + content: "\f05e"; +} +.fa-arrow-left:before { + content: "\f060"; +} +.fa-arrow-right:before { + content: "\f061"; +} +.fa-arrow-up:before { + content: "\f062"; +} +.fa-arrow-down:before { + content: "\f063"; +} +.fa-mail-forward:before, +.fa-share:before { + content: "\f064"; +} +.fa-expand:before { + content: "\f065"; +} +.fa-compress:before { + content: "\f066"; +} +.fa-plus:before { + content: "\f067"; +} +.fa-minus:before { + content: "\f068"; +} +.fa-asterisk:before { + content: "\f069"; +} +.fa-exclamation-circle:before { + content: "\f06a"; +} +.fa-gift:before { + content: "\f06b"; +} +.fa-leaf:before { + content: "\f06c"; +} +.fa-fire:before { + content: "\f06d"; +} +.fa-eye:before { + content: "\f06e"; +} +.fa-eye-slash:before { + content: "\f070"; +} +.fa-warning:before, +.fa-exclamation-triangle:before { + content: "\f071"; +} +.fa-plane:before { + content: "\f072"; +} +.fa-calendar:before { + content: "\f073"; +} +.fa-random:before { + content: "\f074"; +} +.fa-comment:before { + content: "\f075"; +} +.fa-magnet:before { + content: "\f076"; +} +.fa-chevron-up:before { + content: "\f077"; +} +.fa-chevron-down:before { + content: "\f078"; +} +.fa-retweet:before { + content: "\f079"; +} +.fa-shopping-cart:before { + content: "\f07a"; +} +.fa-folder:before { + content: "\f07b"; +} +.fa-folder-open:before { + content: "\f07c"; +} +.fa-arrows-v:before { + content: "\f07d"; +} +.fa-arrows-h:before { + content: "\f07e"; +} +.fa-bar-chart-o:before { + content: "\f080"; +} +.fa-twitter-square:before { + content: "\f081"; +} +.fa-facebook-square:before { + content: "\f082"; +} +.fa-camera-retro:before { + content: "\f083"; +} +.fa-key:before { + content: "\f084"; +} +.fa-gears:before, +.fa-cogs:before { + content: "\f085"; +} +.fa-comments:before { + content: "\f086"; +} +.fa-thumbs-o-up:before { + content: "\f087"; +} +.fa-thumbs-o-down:before { + content: "\f088"; +} +.fa-star-half:before { + content: "\f089"; +} +.fa-heart-o:before { + content: "\f08a"; +} +.fa-sign-out:before { + content: "\f08b"; +} +.fa-linkedin-square:before { + content: "\f08c"; +} +.fa-thumb-tack:before { + content: "\f08d"; +} +.fa-external-link:before { + content: "\f08e"; +} +.fa-sign-in:before { + content: "\f090"; +} +.fa-trophy:before { + content: "\f091"; +} +.fa-github-square:before { + content: "\f092"; +} +.fa-upload:before { + content: "\f093"; +} +.fa-lemon-o:before { + content: "\f094"; +} +.fa-phone:before { + content: "\f095"; +} +.fa-square-o:before { + content: "\f096"; +} +.fa-bookmark-o:before { + content: "\f097"; +} +.fa-phone-square:before { + content: "\f098"; +} +.fa-twitter:before { + content: "\f099"; +} +.fa-facebook:before { + content: "\f09a"; +} +.fa-github:before { + content: "\f09b"; +} +.fa-unlock:before { + content: "\f09c"; +} +.fa-credit-card:before { + content: "\f09d"; +} +.fa-rss:before { + content: "\f09e"; +} +.fa-hdd-o:before { + content: "\f0a0"; +} +.fa-bullhorn:before { + content: "\f0a1"; +} +.fa-bell:before { + content: "\f0f3"; +} +.fa-certificate:before { + content: "\f0a3"; +} +.fa-hand-o-right:before { + content: "\f0a4"; +} +.fa-hand-o-left:before { + content: "\f0a5"; +} +.fa-hand-o-up:before { + content: "\f0a6"; +} +.fa-hand-o-down:before { + content: "\f0a7"; +} +.fa-arrow-circle-left:before { + content: "\f0a8"; +} +.fa-arrow-circle-right:before { + content: "\f0a9"; +} +.fa-arrow-circle-up:before { + content: "\f0aa"; +} +.fa-arrow-circle-down:before { + content: "\f0ab"; +} +.fa-globe:before { + content: "\f0ac"; +} +.fa-wrench:before { + content: "\f0ad"; +} +.fa-tasks:before { + content: "\f0ae"; +} +.fa-filter:before { + content: "\f0b0"; +} +.fa-briefcase:before { + content: "\f0b1"; +} +.fa-arrows-alt:before { + content: "\f0b2"; +} +.fa-group:before, +.fa-users:before { + content: "\f0c0"; +} +.fa-chain:before, +.fa-link:before { + content: "\f0c1"; +} +.fa-cloud:before { + content: "\f0c2"; +} +.fa-flask:before { + content: "\f0c3"; +} +.fa-cut:before, +.fa-scissors:before { + content: "\f0c4"; +} +.fa-copy:before, +.fa-files-o:before { + content: "\f0c5"; +} +.fa-paperclip:before { + content: "\f0c6"; +} +.fa-save:before, +.fa-floppy-o:before { + content: "\f0c7"; +} +.fa-square:before { + content: "\f0c8"; +} +.fa-bars:before { + content: "\f0c9"; +} +.fa-list-ul:before { + content: "\f0ca"; +} +.fa-list-ol:before { + content: "\f0cb"; +} +.fa-strikethrough:before { + content: "\f0cc"; +} +.fa-underline:before { + content: "\f0cd"; +} +.fa-table:before { + content: "\f0ce"; +} +.fa-magic:before { + content: "\f0d0"; +} +.fa-truck:before { + content: "\f0d1"; +} +.fa-pinterest:before { + content: "\f0d2"; +} +.fa-pinterest-square:before { + content: "\f0d3"; +} +.fa-google-plus-square:before { + content: "\f0d4"; +} +.fa-google-plus:before { + content: "\f0d5"; +} +.fa-money:before { + content: "\f0d6"; +} +.fa-caret-down:before { + content: "\f0d7"; +} +.fa-caret-up:before { + content: "\f0d8"; +} +.fa-caret-left:before { + content: "\f0d9"; +} +.fa-caret-right:before { + content: "\f0da"; +} +.fa-columns:before { + content: "\f0db"; +} +.fa-unsorted:before, +.fa-sort:before { + content: "\f0dc"; +} +.fa-sort-down:before, +.fa-sort-asc:before { + content: "\f0dd"; +} +.fa-sort-up:before, +.fa-sort-desc:before { + content: "\f0de"; +} +.fa-envelope:before { + content: "\f0e0"; +} +.fa-linkedin:before { + content: "\f0e1"; +} +.fa-rotate-left:before, +.fa-undo:before { + content: "\f0e2"; +} +.fa-legal:before, +.fa-gavel:before { + content: "\f0e3"; +} +.fa-dashboard:before, +.fa-tachometer:before { + content: "\f0e4"; +} +.fa-comment-o:before { + content: "\f0e5"; +} +.fa-comments-o:before { + content: "\f0e6"; +} +.fa-flash:before, +.fa-bolt:before { + content: "\f0e7"; +} +.fa-sitemap:before { + content: "\f0e8"; +} +.fa-umbrella:before { + content: "\f0e9"; +} +.fa-paste:before, +.fa-clipboard:before { + content: "\f0ea"; +} +.fa-lightbulb-o:before { + content: "\f0eb"; +} +.fa-exchange:before { + content: "\f0ec"; +} +.fa-cloud-download:before { + content: "\f0ed"; +} +.fa-cloud-upload:before { + content: "\f0ee"; +} +.fa-user-md:before { + content: "\f0f0"; +} +.fa-stethoscope:before { + content: "\f0f1"; +} +.fa-suitcase:before { + content: "\f0f2"; +} +.fa-bell-o:before { + content: "\f0a2"; +} +.fa-coffee:before { + content: "\f0f4"; +} +.fa-cutlery:before { + content: "\f0f5"; +} +.fa-file-text-o:before { + content: "\f0f6"; +} +.fa-building-o:before { + content: "\f0f7"; +} +.fa-hospital-o:before { + content: "\f0f8"; +} +.fa-ambulance:before { + content: "\f0f9"; +} +.fa-medkit:before { + content: "\f0fa"; +} +.fa-fighter-jet:before { + content: "\f0fb"; +} +.fa-beer:before { + content: "\f0fc"; +} +.fa-h-square:before { + content: "\f0fd"; +} +.fa-plus-square:before { + content: "\f0fe"; +} +.fa-angle-double-left:before { + content: "\f100"; +} +.fa-angle-double-right:before { + content: "\f101"; +} +.fa-angle-double-up:before { + content: "\f102"; +} +.fa-angle-double-down:before { + content: "\f103"; +} +.fa-angle-left:before { + content: "\f104"; +} +.fa-angle-right:before { + content: "\f105"; +} +.fa-angle-up:before { + content: "\f106"; +} +.fa-angle-down:before { + content: "\f107"; +} +.fa-desktop:before { + content: "\f108"; +} +.fa-laptop:before { + content: "\f109"; +} +.fa-tablet:before { + content: "\f10a"; +} +.fa-mobile-phone:before, +.fa-mobile:before { + content: "\f10b"; +} +.fa-circle-o:before { + content: "\f10c"; +} +.fa-quote-left:before { + content: "\f10d"; +} +.fa-quote-right:before { + content: "\f10e"; +} +.fa-spinner:before { + content: "\f110"; +} +.fa-circle:before { + content: "\f111"; +} +.fa-mail-reply:before, +.fa-reply:before { + content: "\f112"; +} +.fa-github-alt:before { + content: "\f113"; +} +.fa-folder-o:before { + content: "\f114"; +} +.fa-folder-open-o:before { + content: "\f115"; +} +.fa-smile-o:before { + content: "\f118"; +} +.fa-frown-o:before { + content: "\f119"; +} +.fa-meh-o:before { + content: "\f11a"; +} +.fa-gamepad:before { + content: "\f11b"; +} +.fa-keyboard-o:before { + content: "\f11c"; +} +.fa-flag-o:before { + content: "\f11d"; +} +.fa-flag-checkered:before { + content: "\f11e"; +} +.fa-terminal:before { + content: "\f120"; +} +.fa-code:before { + content: "\f121"; +} +.fa-reply-all:before { + content: "\f122"; +} +.fa-mail-reply-all:before { + content: "\f122"; +} +.fa-star-half-empty:before, +.fa-star-half-full:before, +.fa-star-half-o:before { + content: "\f123"; +} +.fa-location-arrow:before { + content: "\f124"; +} +.fa-crop:before { + content: "\f125"; +} +.fa-code-fork:before { + content: "\f126"; +} +.fa-unlink:before, +.fa-chain-broken:before { + content: "\f127"; +} +.fa-question:before { + content: "\f128"; +} +.fa-info:before { + content: "\f129"; +} +.fa-exclamation:before { + content: "\f12a"; +} +.fa-superscript:before { + content: "\f12b"; +} +.fa-subscript:before { + content: "\f12c"; +} +.fa-eraser:before { + content: "\f12d"; +} +.fa-puzzle-piece:before { + content: "\f12e"; +} +.fa-microphone:before { + content: "\f130"; +} +.fa-microphone-slash:before { + content: "\f131"; +} +.fa-shield:before { + content: "\f132"; +} +.fa-calendar-o:before { + content: "\f133"; +} +.fa-fire-extinguisher:before { + content: "\f134"; +} +.fa-rocket:before { + content: "\f135"; +} +.fa-maxcdn:before { + content: "\f136"; +} +.fa-chevron-circle-left:before { + content: "\f137"; +} +.fa-chevron-circle-right:before { + content: "\f138"; +} +.fa-chevron-circle-up:before { + content: "\f139"; +} +.fa-chevron-circle-down:before { + content: "\f13a"; +} +.fa-html5:before { + content: "\f13b"; +} +.fa-css3:before { + content: "\f13c"; +} +.fa-anchor:before { + content: "\f13d"; +} +.fa-unlock-alt:before { + content: "\f13e"; +} +.fa-bullseye:before { + content: "\f140"; +} +.fa-ellipsis-h:before { + content: "\f141"; +} +.fa-ellipsis-v:before { + content: "\f142"; +} +.fa-rss-square:before { + content: "\f143"; +} +.fa-play-circle:before { + content: "\f144"; +} +.fa-ticket:before { + content: "\f145"; +} +.fa-minus-square:before { + content: "\f146"; +} +.fa-minus-square-o:before { + content: "\f147"; +} +.fa-level-up:before { + content: "\f148"; +} +.fa-level-down:before { + content: "\f149"; +} +.fa-check-square:before { + content: "\f14a"; +} +.fa-pencil-square:before { + content: "\f14b"; +} +.fa-external-link-square:before { + content: "\f14c"; +} +.fa-share-square:before { + content: "\f14d"; +} +.fa-compass:before { + content: "\f14e"; +} +.fa-toggle-down:before, +.fa-caret-square-o-down:before { + content: "\f150"; +} +.fa-toggle-up:before, +.fa-caret-square-o-up:before { + content: "\f151"; +} +.fa-toggle-right:before, +.fa-caret-square-o-right:before { + content: "\f152"; +} +.fa-euro:before, +.fa-eur:before { + content: "\f153"; +} +.fa-gbp:before { + content: "\f154"; +} +.fa-dollar:before, +.fa-usd:before { + content: "\f155"; +} +.fa-rupee:before, +.fa-inr:before { + content: "\f156"; +} +.fa-cny:before, +.fa-rmb:before, +.fa-yen:before, +.fa-jpy:before { + content: "\f157"; +} +.fa-ruble:before, +.fa-rouble:before, +.fa-rub:before { + content: "\f158"; +} +.fa-won:before, +.fa-krw:before { + content: "\f159"; +} +.fa-bitcoin:before, +.fa-btc:before { + content: "\f15a"; +} +.fa-file:before { + content: "\f15b"; +} +.fa-file-text:before { + content: "\f15c"; +} +.fa-sort-alpha-asc:before { + content: "\f15d"; +} +.fa-sort-alpha-desc:before { + content: "\f15e"; +} +.fa-sort-amount-asc:before { + content: "\f160"; +} +.fa-sort-amount-desc:before { + content: "\f161"; +} +.fa-sort-numeric-asc:before { + content: "\f162"; +} +.fa-sort-numeric-desc:before { + content: "\f163"; +} +.fa-thumbs-up:before { + content: "\f164"; +} +.fa-thumbs-down:before { + content: "\f165"; +} +.fa-youtube-square:before { + content: "\f166"; +} +.fa-youtube:before { + content: "\f167"; +} +.fa-xing:before { + content: "\f168"; +} +.fa-xing-square:before { + content: "\f169"; +} +.fa-youtube-play:before { + content: "\f16a"; +} +.fa-dropbox:before { + content: "\f16b"; +} +.fa-stack-overflow:before { + content: "\f16c"; +} +.fa-instagram:before { + content: "\f16d"; +} +.fa-flickr:before { + content: "\f16e"; +} +.fa-adn:before { + content: "\f170"; +} +.fa-bitbucket:before { + content: "\f171"; +} +.fa-bitbucket-square:before { + content: "\f172"; +} +.fa-tumblr:before { + content: "\f173"; +} +.fa-tumblr-square:before { + content: "\f174"; +} +.fa-long-arrow-down:before { + content: "\f175"; +} +.fa-long-arrow-up:before { + content: "\f176"; +} +.fa-long-arrow-left:before { + content: "\f177"; +} +.fa-long-arrow-right:before { + content: "\f178"; +} +.fa-apple:before { + content: "\f179"; +} +.fa-windows:before { + content: "\f17a"; +} +.fa-android:before { + content: "\f17b"; +} +.fa-linux:before { + content: "\f17c"; +} +.fa-dribbble:before { + content: "\f17d"; +} +.fa-skype:before { + content: "\f17e"; +} +.fa-foursquare:before { + content: "\f180"; +} +.fa-trello:before { + content: "\f181"; +} +.fa-female:before { + content: "\f182"; +} +.fa-male:before { + content: "\f183"; +} +.fa-gittip:before { + content: "\f184"; +} +.fa-sun-o:before { + content: "\f185"; +} +.fa-moon-o:before { + content: "\f186"; +} +.fa-archive:before { + content: "\f187"; +} +.fa-bug:before { + content: "\f188"; +} +.fa-vk:before { + content: "\f189"; +} +.fa-weibo:before { + content: "\f18a"; +} +.fa-renren:before { + content: "\f18b"; +} +.fa-pagelines:before { + content: "\f18c"; +} +.fa-stack-exchange:before { + content: "\f18d"; +} +.fa-arrow-circle-o-right:before { + content: "\f18e"; +} +.fa-arrow-circle-o-left:before { + content: "\f190"; +} +.fa-toggle-left:before, +.fa-caret-square-o-left:before { + content: "\f191"; +} +.fa-dot-circle-o:before { + content: "\f192"; +} +.fa-wheelchair:before { + content: "\f193"; +} +.fa-vimeo-square:before { + content: "\f194"; +} +.fa-turkish-lira:before, +.fa-try:before { + content: "\f195"; +} +.fa-plus-square-o:before { + content: "\f196"; +} diff --git a/BlueTube.Web/assets/css/jquery.fancybox.css b/BlueTube.Web/assets/css/jquery.fancybox.css new file mode 100644 index 0000000000000000000000000000000000000000..bd3289b2dec93283b7138d006da56e160ab73d22 --- /dev/null +++ b/BlueTube.Web/assets/css/jquery.fancybox.css @@ -0,0 +1,249 @@ +/*! fancyBox v2.1.4 fancyapps.com | fancyapps.com/fancybox/#license */ +.fancybox-wrap, +.fancybox-skin, +.fancybox-outer, +.fancybox-inner, +.fancybox-image, +.fancybox-wrap iframe, +.fancybox-wrap object, +.fancybox-nav, +.fancybox-nav span, +.fancybox-tmp +{ + padding: 0; + margin: 0; + border: 0; + outline: none; + vertical-align: top; +} + +.fancybox-wrap { + position: absolute; + top: 0; + left: 0; + z-index: 8020; +} + +.fancybox-skin { + position: relative; + background: #f9f9f9; + color: #444; + text-shadow: none; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.fancybox-opened { + z-index: 8030; +} + +.fancybox-opened .fancybox-skin { + -webkit-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5); + box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5); +} + +.fancybox-outer, .fancybox-inner { + position: relative; +} + +.fancybox-inner { + overflow: hidden; +} + +.fancybox-type-iframe .fancybox-inner { + -webkit-overflow-scrolling: touch; +} + +.fancybox-error { + color: #444; + font: 14px/20px "Helvetica Neue",Helvetica,Arial,sans-serif; + margin: 0; + padding: 15px; + white-space: nowrap; +} + +.fancybox-image, .fancybox-iframe { + display: block; + width: 100%; + height: 100%; +} + +.fancybox-image { + max-width: 100%; + max-height: 100%; +} + +#fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span { + background-image: url('fancybox_sprite.png'); +} + +#fancybox-loading { + position: fixed; + top: 50%; + left: 50%; + margin-top: -22px; + margin-left: -22px; + background-position: 0 -108px; + opacity: 0.8; + cursor: pointer; + z-index: 8060; +} + +#fancybox-loading div { + width: 44px; + height: 44px; + background: url('fancybox_loading.gif') center center no-repeat; +} + +.fancybox-close { + position: absolute; + top: -18px; + right: -18px; + width: 36px; + height: 36px; + cursor: pointer; + z-index: 8040; +} + +.fancybox-nav { + position: absolute; + top: 0; + width: 40%; + height: 100%; + cursor: pointer; + text-decoration: none; + background: transparent url('blank.gif'); /* helps IE */ + -webkit-tap-highlight-color: rgba(0,0,0,0); + z-index: 8040; +} + +.fancybox-prev { + left: 0; +} + +.fancybox-next { + right: 0; +} + +.fancybox-nav span { + position: absolute; + top: 50%; + width: 36px; + height: 34px; + margin-top: -18px; + cursor: pointer; + z-index: 8040; + visibility: hidden; +} + +.fancybox-prev span { + left: 10px; + background-position: 0 -36px; +} + +.fancybox-next span { + right: 10px; + background-position: 0 -72px; +} + +.fancybox-nav:hover span { + visibility: visible; +} + +.fancybox-tmp { + position: absolute; + top: -99999px; + left: -99999px; + visibility: hidden; + max-width: 99999px; + max-height: 99999px; + overflow: visible !important; +} + +/* Overlay helper */ + +.fancybox-lock { + overflow: hidden; +} + +.fancybox-overlay { + position: absolute; + top: 0; + left: 0; + overflow: hidden; + display: none; + z-index: 8010; + background: url('fancybox_overlay.png'); +} + +.fancybox-overlay-fixed { + position: fixed; + bottom: 0; + right: 0; +} + +.fancybox-lock .fancybox-overlay { + overflow: auto; + overflow-y: scroll; +} + +/* Title helper */ + +.fancybox-title { + visibility: hidden; + font: normal 13px/20px "Helvetica Neue",Helvetica,Arial,sans-serif; + position: relative; + text-shadow: none; + z-index: 8050; +} + +.fancybox-opened .fancybox-title { + visibility: visible; +} + +.fancybox-title-float-wrap { + position: absolute; + bottom: 0; + right: 50%; + margin-bottom: -35px; + z-index: 8050; + text-align: center; +} + +.fancybox-title-float-wrap .child { + display: inline-block; + margin-right: -100%; + padding: 2px 20px; + background: transparent; /* Fallback for web browsers that doesn't support RGBa */ + background: rgba(0, 0, 0, 0.8); + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; + text-shadow: 0 1px 2px #222; + color: #FFF; + font-weight: bold; + line-height: 24px; + white-space: nowrap; +} + +.fancybox-title-outside-wrap { + position: relative; + margin-top: 10px; + color: #fff; +} + +.fancybox-title-inside-wrap { + padding-top: 10px; +} + +.fancybox-title-over-wrap { + position: absolute; + bottom: 0; + left: 0; + color: #fff; + padding: 10px; + background: #000; + background: rgba(0, 0, 0, .8); +} \ No newline at end of file diff --git a/BlueTube.Web/assets/css/projects.css b/BlueTube.Web/assets/css/projects.css new file mode 100644 index 0000000000000000000000000000000000000000..c745d0448658308c276110bdb836900bb6595bec --- /dev/null +++ b/BlueTube.Web/assets/css/projects.css @@ -0,0 +1,327 @@ +h1 { + position: relative; + text-shadow: 0 1px 1px #000; + font-size: 4em; +} + +h1 span { + position:absolute; + display:block; + top:0; + left:0; + height:100%; + width:100%; + +background: -moz-linear-gradient(top, rgba(255,255,255,0.75) 0%, rgba(255,255,255,0.25) 50%, rgba(255,255,255,0.1) 51%, rgba(255,255,255,0.5) 100%); +background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,0.75)), color-stop(50%,rgba(255,255,255,0.25)), color-stop(51%,rgba(255,255,255,0.1)), color-stop(100%,rgba(255,255,255,0.5))); +background: -webkit-linear-gradient(top, rgba(255,255,255,0.75) 0%,rgba(255,255,255,0.25) 50%,rgba(255,255,255,0.1) 51%,rgba(255,255,255,0.5) 100%); +background: -o-linear-gradient(top, rgba(255,255,255,0.75) 0%,rgba(255,255,255,0.25) 50%,rgba(255,255,255,0.1) 51%,rgba(255,255,255,0.5) 100%); +background: -ms-linear-gradient(top, rgba(255,255,255,0.75) 0%,rgba(255,255,255,0.25) 50%,rgba(255,255,255,0.1) 51%,rgba(255,255,255,0.5) 100%); +background: linear-gradient(top, rgba(255,255,255,0.75) 0%,rgba(255,255,255,0.25) 50%,rgba(255,255,255,0.1) 51%,rgba(255,255,255,0.5) 100%); +filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#bfffffff', endColorstr='#80ffffff',GradientType=0 ); + +} + +h1 b { + font-size: .5em; + font-weight: normal !important; + color: #999; + text-shadow: none; + white-space: nowrap; +} + +#slideshow { + position:relative; + height:520px; + width: 70%; + margin: 10px auto; +} + +#slideshow img { + position:absolute; + top:0; + left:0; + z-index:8; + opacity:0.0; + max-width:100%; + +} + +#slideshow img.active { + z-index:10; + opacity:1.0; +} + +#slideshow img.last-active { + z-index:9; +} + +/*--Sections --*/ +#_home {border-bottom:5px solid #1E9CF0; padding:50px 0 } +#_overview {background:#fff; padding: 95px 0 } + + + /*---Annotations --*/ + .image-annotate-canvas {margin: 0 auto} +.image-annotate-area{ + +width: 25px; +height: 25px; +position: absolute; +background: #ff2400; +box-shadow: 0 0 0 5px rgba(255, 36, 0, 0.32); +border-radius: 50%; +content: ""; +font: 0/0 a; + } +.image-annotate-area:hover{box-shadow: 0 0 0 10px rgba(255, 36, 0, 0.32);} +.image-annotate-view {display: block !important} + + +.image-annotate-note { +background: rgba(0,0,0,0.8); +border: solid 1px #ff2400; +border-radius: 3px; +-moz-border-radius: 3px; +-webkit-border-radius: 3px; +color: #fff; +display: none; +font-size: 12px; +max-width: 300px; +padding: 5px 7px; +position: absolute; +} + + +p.projectDesc { + text-align: center; + margin: 20px 0; +} + +ul.cols { + clear: both; + float: left; + padding-top: 2em; + margin: 0; + padding-left: 0; + list-style: none; + overflow: hidden; + position: relative; + width: 100%; +} + +ul.cols li { + text-align: left; + font-size: .8em; + color: #0A73B5; + float: left; + width: 32%; + margin: 0 0 0 14%; + -webkit-transition-property: color, background-color; + -webkit-transition-duration: 250ms; + line-height: 150%; + padding-bottom: 2em; +} + +ul.features { + clear: both; + float: left; + /* border-top: 1px solid #f0f0f0; */ + padding-top: 2em; + margin: 0; + padding-left: 0; + list-style: none; + overflow: hidden; + position: relative; + width: 100%; +} + +ul.features li { + text-align: center; + font-size: .8em; + color: #161719; + float: left; + width: 32%; + min-width: 24%; + margin: 0 0 0 1%; + -webkit-transition-property: color, background-color; + -webkit-transition-duration: 250ms; + line-height: 150%; + padding-bottom: 2em; + position: relative; + overflow: hidden; +} + +ul.features li b { + color: #3794D6; + font-size: 1.5em; + margin-bottom: .25em; + display: block; +} + +ul.features li img { + display: block; + margin: 1em 0; +} + +ul.features .info { + width: 1em; + box-shadow: 0 0 0 5px #000; +border-radius: 50%; +margin: 10px 0; +-webkit-transition: 0.25s; +-moz-transition: 0.25s; +-o-transition: 0.25s; +transition: 0.25s; +padding: 16px +} +ul.features .info:hover {box-shadow: 0 0 0 10px #000;} + +.downloads { + /*background: #1E9CF0;*/ + +/* IE9 SVG, needs conditional override of 'filter' to 'none' */ +background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzI3MmIzMSIgc3RvcC1vcGFjaXR5PSIwIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iIzFlOWNmMCIgc3RvcC1vcGFjaXR5PSIwLjUiLz4KICAgIDxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzI3MmIzMSIgc3RvcC1vcGFjaXR5PSIwIi8+CiAgPC9saW5lYXJHcmFkaWVudD4KICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSJ1cmwoI2dyYWQtdWNnZy1nZW5lcmF0ZWQpIiAvPgo8L3N2Zz4=); +background: -moz-linear-gradient(left, rgba(39,43,49,0) 0%, rgba(30,156,240,0.5) 50%, rgba(39,43,49,0) 100%); /* FF3.6+ */ +background: -webkit-gradient(linear, left top, right top, color-stop(0%,rgba(39,43,49,0)), color-stop(50%,rgba(30,156,240,0.5)), color-stop(100%,rgba(39,43,49,0))); /* Chrome,Safari4+ */ +background: -webkit-linear-gradient(left, rgba(39,43,49,0) 0%,rgba(30,156,240,0.5) 50%,rgba(39,43,49,0) 100%); /* Chrome10+,Safari5.1+ */ +background: -o-linear-gradient(left, rgba(39,43,49,0) 0%,rgba(30,156,240,0.5) 50%,rgba(39,43,49,0) 100%); /* Opera 11.10+ */ +background: -ms-linear-gradient(left, rgba(39,43,49,0) 0%,rgba(30,156,240,0.5) 50%,rgba(39,43,49,0) 100%); /* IE10+ */ +background: linear-gradient(to right, rgba(39,43,49,0) 0%,rgba(30,156,240,0.5) 50%,rgba(39,43,49,0) 100%); /* W3C */ +filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#00272b31', endColorstr='#00272b31',GradientType=1 ); /* IE6-8 */ + +} +ul.downloads li { + width: 20%; + margin: 0 0 0 7%; + text-align: center; + color: #000 +} + +.downloads .os { width: 74px; height: 74px; background-repeat: no-repeat;background-size: cover !important;margin: 0 auto } +.downloads .windows .os {background: url(../imgs/windows_s.png) ;} +.downloads .mac .os {background: url(../imgs/apple_s.png) ;} +.downloads .ubuntu .os {background: url(../imgs/ubuntu_s.png) ;} +.downloads b {color: #000 !important; font-size: 1.1em !important} + + + + +#readMore { + line-height: 140%; +} + +#readMore ul { + padding: 0 0 0 1em; +} + +#readMore li { + font-size: .9em; + padding: .1em 0; +} + +.twoColLeft { + clear: both; + float: left; + width: 45%; + padding: 1em 0 0 0; + font-size: .8em; +} + +.twoColRight { + float: right; + width: 45%; + padding: 1em 0 0 0; + font-size: .8em; +} + +p.mini { + padding: 0; + margin: 0; + line-height: 140%; + color: #333; +} + +#news .date { + color: #666; + font-size: .7em; +} + +.twoColRight h2, .twoColLeft h2, #news h2 { + font-size: 1.1em; + color: #333; +} + +#news ul, #news li { + width: auto; + font-size: 1em; + margin: 0; + padding: 0; + line-height: 160%; + vertical-align: middle; + list-style: none; +} + +#news li a { + color: #333; + text-decoration: none; +} + +#quotes { + clear: both; + position: relative; + width: 90%; + margin: 0 auto; + padding: 3em 0 0 0; + font-family: Georgia, "Bitstream Charter", serif; + color: #808080; +} + +#quotes ul { + list-style: none; + margin: 0 auto; + padding: 0; + position: relative; + min-height: 9em; + width:70%; +} + +#quotes li p:before { + float: left; + display: block; + content: "“"; + font-size: 100px; + margin: .3em .1em .5em 0; +} + +#quotes li p { + font-size: 1.25em; + margin: 0; + padding: 0; +} + +#quotes li span { + font-style: italic; + text-align: right; + display: block; + color: #ccc; +} + +#quotes li { + position:absolute; + top:0; + left:0; + z-index:8; + opacity:0.0; + max-width: 100%; + height: auto; +} + +#quotes li.active { + z-index:10; + opacity:1.0; +} + +#quotes li.last-active { + z-index:9; +} \ No newline at end of file diff --git a/BlueTube.Web/assets/css/style.css b/BlueTube.Web/assets/css/style.css new file mode 100644 index 0000000000000000000000000000000000000000..fc34043e78f96442b4b962f1c96e485995728d53 --- /dev/null +++ b/BlueTube.Web/assets/css/style.css @@ -0,0 +1,1332 @@ +/* +Theme Name: the One pagey +Theme URI: http://iwednesday.co.uk +Description: All smiles +Version: 0.9.1 +Author: iwed +Author URI: http://iwednesday.co.uk +Tags: clean +*/ + +body { + font-size: .7em; + font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", "Segoe UI", "Ubuntu", Arial, "Lucida Grande", sans-serif; + font-weight: 300; + color: #4c4c4c; + background: #272b31 url(imgs/d_bg.png) repeat; + min-width: 1000px; +} + +@media only screen and (max-device-width: 768px) { +b, strong, p a, .project a, h1, h2, h3, h4, h5, h6 { + font-family: "Helvetica Neue", "Segoe UI", "Ubuntu", Arial, "Lucida Grande", sans-serif; +} +} + +small { + font-size: 0.8em; +} + +h1, h2, h3, h4, h5, h6 { + font-weight: bold; +} + +h1 { + font-size: 2.5em; +} + +h2 { + font-size: 2em; +} + +h3 { + font-size: 1.5em; +} + +h4 { + font-size: 1em; +} + +pre { + border-left: 1em solid #EEF2F5; + padding-left: 1em; + overflow: auto; +} + +acronym, abbr { + font-size: 0.9em; + letter-spacing: .07em; + cursor: help; + border-bottom: 1px dashed #999; +} + +a { + color: #4c4c4c; + text-decoration: none; + -webkit-transition: all 200ms; + -moz-transition: all 200ms; + -ms-transition: all 200ms; + -o-transition: all 200ms; + transition: all 200ms; +} + +a:hover { + color: #000; + text-decoration: none; + -webkit-transition: all 0ms; + -moz-transition: all 0ms; + -ms-transition: all 0ms; + -o-transition: all 0ms; + transition: all 0ms; +} + +hr { + display: none; +} + +a img { + border: none; + -webkit-transition: all 200ms; + -moz-transition: all 200ms; + -ms-transition: all 200ms; + -o-transition: all 200ms; + transition: all 200ms; +} + +a img:hover { + opacity: .9; + -webkit-transition: all 0ms; + -moz-transition: all 0ms; + -ms-transition: all 0ms; + -o-transition: all 0ms; + transition: all 0ms; +} + +table, tr, td, th { + border: none !important; +} + +fieldset, fieldset.bbp-form { + padding: 0; + margin: 2em 0; + border: 0; +} + +/* Layout */ + +body { + margin: 0; + padding: 0; +} + +#top { + padding: 1em 0; +} + +#top, #page { + max-width: 95em; + margin: 0 auto; + position: relative; +} + +#page { + clear: both; + margin: 0 auto; + position: relative; +} + +#header { + margin: 0 2em; + padding: 1em 0; +} + +#wrapper { + padding: 2em; + overflow: hidden; +} + +#content { + clear: left; + margin: 0; + padding: 0; + width: 73%; + min-width: 73%; + float: left; + position: relative; +} + +#sidebar { + width: 23%; + float: right; + clear: right; + margin: 0; + padding: 0; + position: relative; + overflow: hidden; +} + +#footer { + margin: 1em auto; + clear: both; +} + +#header a { + display: none; +} + +#header a:hover { + text-decoration: none; +} + +#header .description { + display: none; + float: left; + padding: 35px 0 0 20px; + font-size: 1em; + color: #666; +} + +#menu { + clear: both; + padding: 0; + line-height: 150%; + overflow: hidden; + position: fixed; + background: rgba(255,255,255,.9); + border-bottom: 3px solid #1E9CF0; + box-shadow: 0 0 4px rgba(0, 0, 0, 0.2); + z-index: 999; + width: 100%; + height: 60px; +} + +#menu ul { + margin: 10px auto 0; + padding: 0 0 0 290px; + list-style: none; + overflow: hidden; + width: 490px; + display: block; +} + +#menu ul li { + padding: 0; + float: left; + margin: 0 1em 0 0; + position: relative; + display: block; + font-size: 1.1em; + font-weight: normal; + text-transform: uppercase; + letter-spacing: 1px; +} + +#menu ul li.page-item { + text-transform: none; +} + +#menu ul li a { + color: #666; + display: block; + padding: .5em 1em; + -moz-border-radius: .4em; + -webkit-border-radius: .4em; + border-radius: .4em; + white-space: nowrap; +} + +#menu ul li a:hover { + background-color: #EEF2F5; + border-bottom: 2px solid #0E81D3; + text-decoration: none; +} + +#menu ul li.current_page_item a { + color: #fff; + background-color: #A5BBC9; + background: -webkit-gradient(linear, left top, left bottom, from(rgba(0,0,0,0)), to(rgba(0,0,0,.1))), #A5BBC9; + background: -moz-linear-gradient(top, rgba(0,0,0,0), rgba(0,0,0,.1)), #A5BBC9; +} + +ul li#menu_rss { + padding-left: 20px; + font-weight: normal; + margin: 0 0 0 5em; + float: right; +} + +#menu_rss a { + float: left; + width: 20px; + height: 20px; + background: none !important; + border-bottom: none !important; +} + +#menu_rss a:hover { + background-color: transparent; +} + +#menu_rss a .fa-facebook-square:hover {color: #0F3468} +#menu_rss a .fa-twitter-square:hover {color: #1990EA} +#menu_rss a .fa-envelope:hover {color: #BF1826} + +/* End header */ + +/* Post */ + +.post.item { + border-bottom: 1px dotted #ccc; + margin-bottom: 3em; +} + +.post { + margin: 0; + padding: 0 0 3em 0; + text-align: left; + clear: both; +} + +.post h1 { + color: #333; +} + +.post .title_ {margin: 0 !important; padding: 0 !important; color: #0B6DE5 !important; font-family: "Verdana", sans-serif !important; font-weight: 900; text-align: center } + +.title_ .logo { + background: url('../imgs/bt_logo.png') no-repeat center; + display: block; + width:252px; + height: 71px; + margin: 0 auto; + } +#content h1, .post h2, .app p { + margin: 0 0 0 0; + padding: 0; + color: #333; + font-weight: 300; + font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", "Myriad Pro", "Lucida Grande", "Segoe UI Light", "Segoe UI", "Ubuntu", "Nokia Pure", sans-serif; +} + +.post h2 a { + color: #333; + border-bottom: 1px solid transparent; + font-size: 1.25em; +} + +.post h2 a:hover { + border-bottom: 1px solid #ccc; + text-decoration: none; +} + +.post h3.post-title { + font-weight: bold; + font-size: 1.8em; + margin: 0; + padding: 0; + text-align: left; +} + +div.archive-title { + font-size: 1.6em; + font-weight: bold; +} + +.post hr { + display: block; +} + +.postmetadata { + margin: .5em 0 0 0; + color: #888; + text-align: left; +} + +.postmetadata a, .navigation a, .commentsHeader a, .bbp-pagination-count, .commentmetadata a { + text-decoration: none !important; + text-transform: uppercase; + white-space: nowrap; + display: inline-block; + color: #666; + margin: 0 1em 0 0; +} + +.postmetadata a:hover, .navigation a:hover { + text-decoration: none; + color: #333; +} + +.clear { + clear: both; +} + +.entry, .project { + color: #f2f2f2; + font-size: 1.4em; + line-height: 160%; +} + +.project a { + color: #666; + font-weight: bold; +} + +.entry { + color: #808080; + margin: .5em 0; +} + +.entry a { + color: #666; + font-weight: bold; +} + +.entry h2 { + color: #333; + padding-top: 1em; + font-size: 1.25em; +} + +.entry h3 { + color: #333; + font-size: 1em; + padding: 0; + margin: 1em 0 0 0; +} + +.entry blockquote { + color: #666; + font-family: Georgia, serif; + font-style: italic; + margin: 1em 2em 1em 2em; +} + +.entry blockquote blockquote { + font-size: 1em; +} + +.entry form textarea, .entry form input { + font-size: 1em; +} + +.entry fieldset { + border: 0 !important; + padding: 0 !important; +} + +.entry fieldset legend { + font-weight: bold; + text-transform: uppercase; + font-size: .8em; + display: none; +} + +.entry fieldset label { + font-size: .8em; +} + +.entry table { + border: 0; +} + +.entry table tr td { + padding: 5px 10px; + border-width: 1px 0 0 1px; + border-style: solid; + border-color: #ccc; +} + +.entry table tr th { + border-width: 1px 0 0 1px; + border-style: solid; + border-color: #ccc; + padding: 5px 10px; + background: #f4f4f4; + color: #666; + font-weight: bold; + text-transform: uppercase; + text-align: center; + font-size: .8em; +} + +.entry ol { + list-style-type: decimal; +} + +.entry ol ol { + list-style-type: lower-alpha; +} + +.entry ol ol ol { + list-style-type: lower-roman; +} + +p img { + padding: 0; + max-width: 100%; +} + +img.centered { + display: block; + margin-left: auto; + margin-right: auto; +} + +.alignright { + padding: 0; + margin: 0 0 .5em 1em; + display: inline; + float: right; +} + +.alignleft { + padding: 0; + margin: 0 1em .5em 0; + display: inline; + float: left; +} + +.aligncenter, +div.aligncenter { + display: block; + margin-left: auto; + margin-right: auto; +} + +.navigation .alignleft { + width: 40%; + float: left; +} + +.navigation .alignright { + width: 40%; + float: right; +} + +.navigation { + clear: both; + margin: 0; +} + +.commentsHeader { + font-size: 1em; + margin: 2em 0; +} + +.commentsHeader h3 { + font-size: 1.5em; +} + +.commentsHeader h3 a { + font-weight: normal; + font-size: .75em; +} + +.wp-caption { + border: 1px solid #ccc; + text-align: center; + background-color: #f3f3f3; + padding-top: 4px; +} + +.wp-caption img { + margin: 0; + padding: 0; + border: 0 none; +} + +.wp-caption p.wp-caption-text { + font-size: 11px; + line-height: 17px; + padding: 0 4px 5px; + margin: 0; +} + +.searchbox { + clear: both; + position: relative; +} + +#s, #bbp_search { + width: 10em; + font-size: 1em; + color: #000; + padding: .5em 3em .5em .6em; + -moz-border-radius: 2em; + -webkit-border-radius: 2em; + border-radius: 2em; + border: 1px solid #999; + box-shadow: inset 0 0 .5em rgba(0,0,0,0.2); +} + +#s:focus, #bbp_search:focus { + outline: 0 none; + -moz-box-shadow: 0 0 .5em #A5BBC9; + -webkit-box-shadow: 0 0 .5em #A5BBC9; + box-shadow: 0 0 .5em #A5BBC9; +} + +#searchsubmit, #bbp_search_submit { + display: none; +} + +.center { + text-align: center; +} + +.hidden { + display: none; +} + + +/* Comments*/ + +#comments { + +} + +.commentlist { + margin: 0; + padding: 0; +} + +.commentlist li { + list-style: none; + margin: 0; + padding: 0; +} + +li.comment.bypostauthor { + background: #EEF2F5; + padding: 1em; + border-radius: .5em; +} + +li.comment div, li.pingback div { + padding: 1em 0; + overflow: auto; +} + +li.comment div div, li.pingback div div { + padding: 0; + overflow: visible; +} + +li.comment p, .comment-author { + font-size: 1.2em; + line-height: 1.4em; +} + +.commentlist li.even { +} + +.commentlist li.odd { + +} + +ul.children li { + list-style: none; +} + +img.avatar { + float: right; + margin: 0 0 1em 1em; + border-radius: .5em; +} + +.comment-meta, .reply { + margin: 0; + padding: 0; +} + +.comment-author cite, .comment-author cite a { + font-style: normal; + font-weight: bold; + text-decoration: none; +} + +textarea#comment { + width: 100%; +} + +#comments div.navigation { + font-size: 1em; +} + +#respond input[type="text"], +#respond textarea { + background: #fff; + border: 1px solid #808080; + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: inset 0 1px 3px rgba(204,204,204,0.95); + -moz-box-shadow: inset 0 1px 3px rgba(204,204,204,0.95); + box-shadow: inset 0 1px 3px rgba(204,204,204,0.95); + position: relative; + padding: 5px; + font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", "Lucida Grande", "Segoe UI", "Ubuntu", sans-serif; + font-size: 1.25em; +} + +/* Sidebar */ + +#sidebar { + color: #808080; + line-height: 150%; +} + +#sidebar ul a { + color: #808080; + display: block; + padding: .15em 0; +} + +#sidebar h2 a { + display: inline; + vertical-align: middle; + padding: 0 .25em 0 0; +} + +#sidebar ul a:hover { + text-decoration: none; + color: #000; +} + +#sidebar h2 { + padding: 0; + margin: 0 0 .25em 0; + font-size: .9em; + text-transform: uppercase; + color: #6f747b; +} + +#sidebar > ul { + font-size: 1.3em; +} + +#sidebar ul, #sidebar ul ol { + margin: 0; + padding: 0; +} + +#sidebar ul li { + margin: 0; + padding: 0; + list-style-type: none; + list-style-image: none; + margin-bottom: 3em; +} + +#sidebar ul ul li { +} + +#sidebar ul p, #sidebar ul select { + margin: 5px 0 8px; +} + +#sidebar ul ul, #sidebar ul ol { + margin: 5px 0 0 0; +} + +#sidebar ul ul ul, #sidebar ul ol { + margin: 0 0 0 20px; +} + +#sidebar ul ol li { + list-style: decimal outside; +} + +#sidebar ul ul li, #sidebar ul ol li { + margin: 3px 0 0; + padding: 0; +} + +/* Calendar */ +#wp-calendar { + empty-cells: show; + width: 155px; +} + +#wp-calendar #next a { + padding-right: 10px; + text-align: right; +} + +#wp-calendar #prev a { + padding-left: 10px; + text-align: left; +} + +#wp-calendar a { + display: block; + font-weight: bold; +} + +#wp-calendar caption { + font-weight: bold; + text-transform: uppercase; + text-align: left; + margin: 0 0 5px 8px; + color: #666; +} + +#wp-calendar td { + padding: 3px 5px; + text-align: center; +} + +#wp-calendar td#today { + background: #eee; +} + +#wp-calendar td#prev a { + padding: 0; + text-align: left; + font-weight: normal; +} + +#wp-calendar td#next a { + padding: 0; + text-align: right; + font-weight: normal; +} + + +/* End Calendar */ + + +/* Footer */ + +#footer { + padding: 1em; + text-align: center; + font-size: 1.1em; + color: #808080; + margin: 2em; +} + + +/* --- f --- */ +.play { + margin-top: 78px; + text-align: center; +} + +.play a { + opacity: .9; + padding: 1em; + background: url(play.png) no-repeat center top; + padding-top: 64px; + color: #555; + font-weight: bold; + text-decoration: none; +} + +.play a:hover { + opacity: 1; + text-decoration: none; +} + +.left { + float: left; + margin: 0 1em 1em 0; +} + +.right { + float: right; + margin: 0 0 1em 1em; +} + +#photos { + text-align: center; +} + +#photos a { + text-align: center; + width: 145px; + margin: 0 !important; + padding: 0 !important; + float: none !important; +} + +.category { + font-size: 1.3em; + line-height: 150%; + padding: .1em 1em; + background: #EEF2F5; + margin: 1em 0 2em 0; + -moz-border-radius: 1em; + -webkit-border-radius: 1em; + border-radius: 1em; +} + +.download li { + list-style: none; + padding: 1em 0; + vertical-align: middle; +} + +.download .mac { + background: url(imgs/mac.png) no-repeat left center; + min-height: 70px; + padding-left: 115px; +} + +.download .ubuntu { + background: url(imgs/ubuntu.png) no-repeat left center; + min-height: 70px; + padding-left: 115px; +} + +.download .linux { + background: url(imgs/linux.png) no-repeat left center; + min-height: 70px; + padding-left: 115px; +} + +.download .nowindows { + background: url(imgs/nowindows.png) no-repeat left center; + min-height: 70px; + padding-left: 115px; +} + +.download .source { + background: url(imgs/source.png) no-repeat left center; + min-height: 70px; + padding-left: 115px; +} + +.download a { + font-weight: bold; +} + +/* --- awesome buttons --- */ + +button { + margin: 0; + padding: 0; + border: 0; + font-weight: normal; + font-style: normal; + font-size: 100%; + line-height: 1; + font-family: inherit; + text-align: left; +} + +a.awesome, button.awesome, .button { + background-color: #77A9C9; + background: -webkit-gradient(linear, left top, left bottom, from(rgba(0,0,0,0)), to(rgba(0,0,0,.2))), #77A9C9; + background: -moz-linear-gradient(top, rgba(0,0,0,0), rgba(0,0,0,.2)); + display: inline-block; + padding: 5px 10px 6px; + color: #fff !important; + text-decoration: none !important; + font-weight: normal; + line-height: 1; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; + -moz-box-shadow: 0 1px 3px rgba(0,0,0,0.5); + -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.5); + box-shadow: 0 1px 3px rgba(0,0,0,0.5); + text-shadow: 0 -1px 1px rgba(0,0,0,0.25); + border: 0; + border-bottom: 1px solid rgba(0,0,0,0.25); + position: relative; + cursor: pointer; + margin-top: .5em; +} + +.awesome:hover { +} + +.awesome:active { + top: 1px; +} + +.small.awesome, .small.awesome:visited { + font-size: 11px; +} + +.awesome, .awesome:visited, .medium.awesome, .medium.awesome:visited { + font-size: 13px; + font-weight: bold; + line-height: 1; + text-shadow: 0 -1px 1px rgba(0,0,0,0.25); +} + +.large.awesome, .large.awesome:visited { + padding: 8px 14px 9px; +} + +/* Sizes ---------- */ +.small.awesome { + font-size: 11px; +} + +.medium.awesome { + font-size: 13px; +} + +.large.awesome { + padding: 8px 14px 9px; + font-size: 1.2em; +} + +/* Colors ---------- */ +.blue.awesome { + background-color: #77A9C9; +} + +.red.awesome { + background-color: #e33100; +} + +.magenta.awesome { + background-color: #a9014b; +} + +.orange.awesome { + background-color: #ff5c00; +} + +.yellow.awesome { + background-color: #ffb515; +} + +.recentcomments a { + display: inline-block !important; +} + +.products { + list-style: none; + margin: 0 0 40px 0; + padding: 40px 0; + text-align: center; + border-radius: .5em; + overflow: hidden; + background: #EEF2F5; + box-shadow: inset 0 0 100px rgba(0,0,0,0.1); +} + +.products li { + display: inline-block; + width: 128px; + margin: 0 40px; + line-height: 180%; + font-size: 1.4em; + font-weight: normal; + text-align: center; + color: #373737; + text-shadow: 0 1px 1px #fff; + zoom: 1; + *display: inline; + _height: 250px; +} + +.products li:hover img { + opacity: .9; +} + +ul.feeds { + margin: 0; + padding: 0; + list-style: none; +} + +ul.feeds li { + margin-bottom: .5em !important; +} + +ul.feeds li, .feed { + padding-left: 20px !important; + background: url(imgs/rss.png) no-repeat left center; +} + +.recentcomments a { + display: inline !important; + padding: 0 !important; + margin: 0 !important; +} + +.widget_display_replies a { + display: inline !important; + padding: 0 !important; + margin: 0 !important; +} + +.linkcat { + display: none; +} + +#bbpress-forums { + +} + +.bbp-pagination { + margin: 2em 0; +} + +#bbp_topic_tags, .bbp-topic-tags, label[for="bbp_topic_tags"] { + display: none !important; +} + +#wrapper fieldset.bbp-form label { + width: auto; +} + +#sidebar .avatar { + display: none; +} + +.apps { + -webkit-transform: translateZ(0); + clear: both; + list-style: none; + margin: 1px 0 40px 0; + padding: 40px 0; + text-align: center; + overflow: hidden; + border-radius: .5em; + background: -moz-linear-gradient(top, rgba(238,242,245,1) 0%, rgba(238,242,245,0) 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(238,242,245,1)), color-stop(100%,rgba(238,242,245,0))); + background: -webkit-linear-gradient(top, rgba(238,242,245,1) 0%,rgba(238,242,245,0) 100%); + background: -o-linear-gradient(top, rgba(238,242,245,1) 0%,rgba(238,242,245,0) 100%); + background: -ms-linear-gradient(top, rgba(238,242,245,1) 0%,rgba(238,242,245,0) 100%); + background: linear-gradient(top, rgba(238,242,245,1) 0%,rgba(238,242,245,0) 100%); +} + +.apps li { + display: inline-block; + width: 128px; + margin: 0 48px; + text-align: center; + opacity: .5; + zoom: 1; + *display: inline; + _height: 250px; + opacity: .75; + -webkit-transition-property: all; + -webkit-transition-duration: 500ms; +} + +.apps li img { + display: inline-block; + margin-bottom: .5em; +} + +.apps li span { + padding: .5em 1em; + border-radius: .4em; + color: #000; + /* text-shadow: 0 1px 2px rgba(0,0,0,.75); */ + font-size: 1.5em; + font-weight: normal; + + -webkit-transition: all 200ms; + -moz-transition: all 200ms; + -ms-transition: all 200ms; + -o-transition: all 200ms; + transition: all 200ms; +} + +.apps li:hover span { + /* + background-color: #A5BBC9; + background: -webkit-gradient(linear, left top, left bottom, from(rgba(0,0,0,0)), to(rgba(0,0,0,.1))), #A5BBC9; + background: -moz-linear-gradient(top, rgba(0,0,0,0), rgba(0,0,0,.1)), #A5BBC9; + color: #fff; + */ + background: #EEF2F5; +} + +.apps li:hover img { + opacity: .9; +} + +.apps li.active { + opacity: 1.0; +} + +#appshow { + -webkit-transform: translateZ(0); + position: relative; + height: 375px; + overflow: hidden; + text-align: center; +} + +#appshow .app { + position:absolute; + top:375px; + left:0; + z-index:8; + opacity: .5; + -webkit-transition: all 1s; + -moz-transition: all 1s; + -ms-transition: all 1s; + -o-transition: all 1s; + transition: all 1s; + width: 100%; +} + +#appshow .app.active { + z-index:10; + opacity:1.0; + top: 0px; +} + +#appshow p { + margin: 0; + padding: 0; + font-size: 32px; + position: relative; + color: #000; +} + +#appshow p span { + position:absolute; + display:block; + top:0; + left:0; + height:100%; + width:100%; + +background: -moz-linear-gradient(top, rgba(255,255,255,0.75) 0%, rgba(255,255,255,0.25) 50%, rgba(255,255,255,0.1) 51%, rgba(255,255,255,0.5) 100%); +background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,0.75)), color-stop(50%,rgba(255,255,255,0.25)), color-stop(51%,rgba(255,255,255,0.1)), color-stop(100%,rgba(255,255,255,0.5))); +background: -webkit-linear-gradient(top, rgba(255,255,255,0.75) 0%,rgba(255,255,255,0.25) 50%,rgba(255,255,255,0.1) 51%,rgba(255,255,255,0.5) 100%); +background: -o-linear-gradient(top, rgba(255,255,255,0.75) 0%,rgba(255,255,255,0.25) 50%,rgba(255,255,255,0.1) 51%,rgba(255,255,255,0.5) 100%); +background: -ms-linear-gradient(top, rgba(255,255,255,0.75) 0%,rgba(255,255,255,0.25) 50%,rgba(255,255,255,0.1) 51%,rgba(255,255,255,0.5) 100%); +background: linear-gradient(top, rgba(255,255,255,0.75) 0%,rgba(255,255,255,0.25) 50%,rgba(255,255,255,0.1) 51%,rgba(255,255,255,0.5) 100%); +filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#bfffffff', endColorstr='#80ffffff',GradientType=0 ); + +} + +#appshow .app.minitube.active { + -webkit-transform:rotate(-5deg); + -moz-transform:rotate(-5deg); + -o-transform:rotate(-5deg); + -ms-transform:rotate(-5deg); + transform:rotate(-5deg); + top: 30px; +} + +#appshow .app.musique.active { + -webkit-transform:rotate(5deg); + -moz-transform:rotate(5deg); + -o-transform:rotate(5deg); + -ms-transform:rotate(5deg); + transform:rotate(5deg); + top: 30px; +} + +#appshow .app.clicktracks { + left: 300px; +} + +#appshow .app.clicktracks.active { + -webkit-transform:rotate(-5deg); + -moz-transform:rotate(-5deg); + -o-transform:rotate(-5deg); + -ms-transform:rotate(-5deg); + transform:rotate(-5deg); +} + +#welcome { + font: 20px Georgia, serif; + line-height: 140%; + /* + width: 32em; + margin: 0 auto; + */ +} + +#welcome img { + border-radius: .5em; + margin-right: 1em; +} + +ul.changelog { + display: inline-block; + list-style: none; + padding: 0; + margin: 0 0 1.5em 0; + font-size: .75em; + color: #666; + border-radius: .5em; +} + +ul.changelog li { + margin-top: 1px; + padding: .5em 36px; + background-repeat: no-repeat; + background-position: 10px center; + -webkit-transition: all 200ms; + -moz-transition: all 200ms; + -ms-transition: all 200ms; + -o-transition: all 200ms; + transition: all 200ms; +} + +ul.changelog li.bug { + background-image: url(imgs/bug.png); +} + +ul.changelog li:nth-child(odd) { + background-color: #EEF2F5; +} + +ul.changelog li:nth-child(even) { + background-color: #F3F7FA; +} + +ul.changelog li:first-child { +-webkit-border-top-left-radius: 10px; +-webkit-border-top-right-radius: 10px; +-moz-border-radius-topleft: 10px; +-moz-border-radius-topright: 10px; +border-top-left-radius: 10px; +border-top-right-radius: 10px; +} + +ul.changelog li:last-child { +-webkit-border-bottom-right-radius: 10px; +-webkit-border-bottom-left-radius: 10px; +-moz-border-radius-bottomright: 10px; +-moz-border-radius-bottomleft: 10px; +border-bottom-right-radius: 10px; +border-bottom-left-radius: 10px; +} + +ul.changelog li:hover { + color: #000; + -webkit-transition: all 0ms; + -moz-transition: all 0ms; + -ms-transition: all 0ms; + -o-transition: all 0ms; + transition: all 0ms; + background-color: #E4E8EB; +} + +#getintouch { + padding: 2em; + max-width: 45em; +} + +#getintouch h2 { + margin: 0; + padding: 0; + color: #999; +} + +#getintouch p { + font-size: 1.5em; +} + +#getintouch p a { + font-weight: bold; +} + + + diff --git a/BlueTube.Web/assets/fonts/FontAwesome.otf b/BlueTube.Web/assets/fonts/FontAwesome.otf new file mode 100644 index 0000000000000000000000000000000000000000..8b0f54e47e1d356dcf1496942a50e228e0f1ee14 Binary files /dev/null and b/BlueTube.Web/assets/fonts/FontAwesome.otf differ diff --git a/BlueTube.Web/assets/fonts/fontawesome-webfont.eot b/BlueTube.Web/assets/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..7c79c6a6bc9a128a2a8eaffbe49a4338625fdbc2 Binary files /dev/null and b/BlueTube.Web/assets/fonts/fontawesome-webfont.eot differ diff --git a/BlueTube.Web/assets/fonts/fontawesome-webfont.svg b/BlueTube.Web/assets/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000000000000000000000000000000000000..45fdf33830123533459b17fbbf91735489fd6bd8 --- /dev/null +++ b/BlueTube.Web/assets/fonts/fontawesome-webfont.svg @@ -0,0 +1,414 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/BlueTube.Web/assets/fonts/fontawesome-webfont.ttf b/BlueTube.Web/assets/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..e89738de5eaf8fca33a2f2cdc5cb4929caa62b71 Binary files /dev/null and b/BlueTube.Web/assets/fonts/fontawesome-webfont.ttf differ diff --git a/BlueTube.Web/assets/fonts/fontawesome-webfont.woff b/BlueTube.Web/assets/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..8c1748aab7a790d510fb3f42a8a8971d96efa79d Binary files /dev/null and b/BlueTube.Web/assets/fonts/fontawesome-webfont.woff differ diff --git a/BlueTube.Web/assets/imgs/apple_s.png b/BlueTube.Web/assets/imgs/apple_s.png new file mode 100644 index 0000000000000000000000000000000000000000..eb5b1d66b8e31613aacbc14a87a0f7ff929b2d01 Binary files /dev/null and b/BlueTube.Web/assets/imgs/apple_s.png differ diff --git a/BlueTube.Web/assets/imgs/bt_logo.png b/BlueTube.Web/assets/imgs/bt_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..62e131c45d5909e98ca1719bcb7da5d372141c5a Binary files /dev/null and b/BlueTube.Web/assets/imgs/bt_logo.png differ diff --git a/BlueTube.Web/assets/imgs/d_bg.png b/BlueTube.Web/assets/imgs/d_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..e07b73d1fc1ce14f7f7ae1a37f96b19e3cfe0822 Binary files /dev/null and b/BlueTube.Web/assets/imgs/d_bg.png differ diff --git a/BlueTube.Web/assets/imgs/favicon.ico b/BlueTube.Web/assets/imgs/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..f90277bd968379797b770c677b8a8edad7038b83 Binary files /dev/null and b/BlueTube.Web/assets/imgs/favicon.ico differ diff --git a/BlueTube.Web/assets/imgs/minitube-01.jpg b/BlueTube.Web/assets/imgs/minitube-01.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c0a0c138e2246d888422e662b7371b39b7cec325 --- /dev/null +++ b/BlueTube.Web/assets/imgs/minitube-01.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99f16138e17a07938c2781ba1128c1bf7d492c50466b47992a32738abb6d2276 +size 113622 diff --git a/BlueTube.Web/assets/imgs/minitube-02.jpg b/BlueTube.Web/assets/imgs/minitube-02.jpg new file mode 100644 index 0000000000000000000000000000000000000000..99716a8eaebfee981d54c64f726fd16de6bcc975 Binary files /dev/null and b/BlueTube.Web/assets/imgs/minitube-02.jpg differ diff --git a/BlueTube.Web/assets/imgs/minitube-03.jpg b/BlueTube.Web/assets/imgs/minitube-03.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1d8d2827bcc83d38e6c58b612432663a09881a76 --- /dev/null +++ b/BlueTube.Web/assets/imgs/minitube-03.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e522e2f8592b269f445793097b6ff0a86e6d6a9b8c3f750987c429742a59579 +size 155927 diff --git a/BlueTube.Web/assets/imgs/minitube-04.jpg b/BlueTube.Web/assets/imgs/minitube-04.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bb7157c1f1647604c43d181fd2cf0086aa6e2e3b Binary files /dev/null and b/BlueTube.Web/assets/imgs/minitube-04.jpg differ diff --git a/BlueTube.Web/assets/imgs/minitube-06.jpg b/BlueTube.Web/assets/imgs/minitube-06.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5c086aecd0a776cda52b7276efac8967dccb761a Binary files /dev/null and b/BlueTube.Web/assets/imgs/minitube-06.jpg differ diff --git a/BlueTube.Web/assets/imgs/slide1.png b/BlueTube.Web/assets/imgs/slide1.png new file mode 100644 index 0000000000000000000000000000000000000000..dba647fa39128f564f7ab92e1a98a29279479029 --- /dev/null +++ b/BlueTube.Web/assets/imgs/slide1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8bbed5e322cefc45ef8c350339175c9144b84ac3f5cd2773c74cc7ebc828e097 +size 349242 diff --git a/BlueTube.Web/assets/imgs/slide2.png b/BlueTube.Web/assets/imgs/slide2.png new file mode 100644 index 0000000000000000000000000000000000000000..ab4b43b15f4c5fed5d7ec1c0e02ee9c2ca0e48e5 --- /dev/null +++ b/BlueTube.Web/assets/imgs/slide2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da9e541ec8b7888a324113d8018ea22538061377745772f9243d98d16f48dd2c +size 190908 diff --git a/BlueTube.Web/assets/imgs/slide3.png b/BlueTube.Web/assets/imgs/slide3.png new file mode 100644 index 0000000000000000000000000000000000000000..6b291e3bd3c57d0fc03ffda2a635c2cdd3e4b787 --- /dev/null +++ b/BlueTube.Web/assets/imgs/slide3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3fcbd75c026c96e01b493851b624dfd8ea3da27593f15d361e24652279fbebe +size 571138 diff --git a/BlueTube.Web/assets/imgs/ubuntu_s.png b/BlueTube.Web/assets/imgs/ubuntu_s.png new file mode 100644 index 0000000000000000000000000000000000000000..6ffff07b3a7bd95865be829879c777c23042bd3d Binary files /dev/null and b/BlueTube.Web/assets/imgs/ubuntu_s.png differ diff --git a/BlueTube.Web/assets/imgs/windows_s.png b/BlueTube.Web/assets/imgs/windows_s.png new file mode 100644 index 0000000000000000000000000000000000000000..2725e258837c204c74fc5cfc078cc1f4ef8f7575 Binary files /dev/null and b/BlueTube.Web/assets/imgs/windows_s.png differ diff --git a/BlueTube.Web/assets/js/jquery-ui-1.8.17.js b/BlueTube.Web/assets/js/jquery-ui-1.8.17.js new file mode 100644 index 0000000000000000000000000000000000000000..922d7062ca367fd3f6902523ad96694e954b1676 --- /dev/null +++ b/BlueTube.Web/assets/js/jquery-ui-1.8.17.js @@ -0,0 +1,11827 @@ +/*! + * jQuery UI 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */ +(function( $, undefined ) { + +// prevent duplicate loading +// this is only a problem because we proxy existing functions +// and we don't want to double proxy them +$.ui = $.ui || {}; +if ( $.ui.version ) { + return; +} + +$.extend( $.ui, { + version: "1.8.17", + + keyCode: { + ALT: 18, + BACKSPACE: 8, + CAPS_LOCK: 20, + COMMA: 188, + COMMAND: 91, + COMMAND_LEFT: 91, // COMMAND + COMMAND_RIGHT: 93, + CONTROL: 17, + DELETE: 46, + DOWN: 40, + END: 35, + ENTER: 13, + ESCAPE: 27, + HOME: 36, + INSERT: 45, + LEFT: 37, + MENU: 93, // COMMAND_RIGHT + NUMPAD_ADD: 107, + NUMPAD_DECIMAL: 110, + NUMPAD_DIVIDE: 111, + NUMPAD_ENTER: 108, + NUMPAD_MULTIPLY: 106, + NUMPAD_SUBTRACT: 109, + PAGE_DOWN: 34, + PAGE_UP: 33, + PERIOD: 190, + RIGHT: 39, + SHIFT: 16, + SPACE: 32, + TAB: 9, + UP: 38, + WINDOWS: 91 // COMMAND + } +}); + +// plugins +$.fn.extend({ + propAttr: $.fn.prop || $.fn.attr, + + _focus: $.fn.focus, + focus: function( delay, fn ) { + return typeof delay === "number" ? + this.each(function() { + var elem = this; + setTimeout(function() { + $( elem ).focus(); + if ( fn ) { + fn.call( elem ); + } + }, delay ); + }) : + this._focus.apply( this, arguments ); + }, + + scrollParent: function() { + var scrollParent; + if (($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) { + scrollParent = this.parents().filter(function() { + return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1)); + }).eq(0); + } else { + scrollParent = this.parents().filter(function() { + return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1)); + }).eq(0); + } + + return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent; + }, + + zIndex: function( zIndex ) { + if ( zIndex !== undefined ) { + return this.css( "zIndex", zIndex ); + } + + if ( this.length ) { + var elem = $( this[ 0 ] ), position, value; + while ( elem.length && elem[ 0 ] !== document ) { + // Ignore z-index if position is set to a value where z-index is ignored by the browser + // This makes behavior of this function consistent across browsers + // WebKit always returns auto if the element is positioned + position = elem.css( "position" ); + if ( position === "absolute" || position === "relative" || position === "fixed" ) { + // IE returns 0 when zIndex is not specified + // other browsers return a string + // we ignore the case of nested elements with an explicit value of 0 + //
+ value = parseInt( elem.css( "zIndex" ), 10 ); + if ( !isNaN( value ) && value !== 0 ) { + return value; + } + } + elem = elem.parent(); + } + } + + return 0; + }, + + disableSelection: function() { + return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) + + ".ui-disableSelection", function( event ) { + event.preventDefault(); + }); + }, + + enableSelection: function() { + return this.unbind( ".ui-disableSelection" ); + } +}); + +$.each( [ "Width", "Height" ], function( i, name ) { + var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ], + type = name.toLowerCase(), + orig = { + innerWidth: $.fn.innerWidth, + innerHeight: $.fn.innerHeight, + outerWidth: $.fn.outerWidth, + outerHeight: $.fn.outerHeight + }; + + function reduce( elem, size, border, margin ) { + $.each( side, function() { + size -= parseFloat( $.curCSS( elem, "padding" + this, true) ) || 0; + if ( border ) { + size -= parseFloat( $.curCSS( elem, "border" + this + "Width", true) ) || 0; + } + if ( margin ) { + size -= parseFloat( $.curCSS( elem, "margin" + this, true) ) || 0; + } + }); + return size; + } + + $.fn[ "inner" + name ] = function( size ) { + if ( size === undefined ) { + return orig[ "inner" + name ].call( this ); + } + + return this.each(function() { + $( this ).css( type, reduce( this, size ) + "px" ); + }); + }; + + $.fn[ "outer" + name] = function( size, margin ) { + if ( typeof size !== "number" ) { + return orig[ "outer" + name ].call( this, size ); + } + + return this.each(function() { + $( this).css( type, reduce( this, size, true, margin ) + "px" ); + }); + }; +}); + +// selectors +function focusable( element, isTabIndexNotNaN ) { + var nodeName = element.nodeName.toLowerCase(); + if ( "area" === nodeName ) { + var map = element.parentNode, + mapName = map.name, + img; + if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) { + return false; + } + img = $( "img[usemap=#" + mapName + "]" )[0]; + return !!img && visible( img ); + } + return ( /input|select|textarea|button|object/.test( nodeName ) + ? !element.disabled + : "a" == nodeName + ? element.href || isTabIndexNotNaN + : isTabIndexNotNaN) + // the element and all of its ancestors must be visible + && visible( element ); +} + +function visible( element ) { + return !$( element ).parents().andSelf().filter(function() { + return $.curCSS( this, "visibility" ) === "hidden" || + $.expr.filters.hidden( this ); + }).length; +} + +$.extend( $.expr[ ":" ], { + data: function( elem, i, match ) { + return !!$.data( elem, match[ 3 ] ); + }, + + focusable: function( element ) { + return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) ); + }, + + tabbable: function( element ) { + var tabIndex = $.attr( element, "tabindex" ), + isTabIndexNaN = isNaN( tabIndex ); + return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN ); + } +}); + +// support +$(function() { + var body = document.body, + div = body.appendChild( div = document.createElement( "div" ) ); + + $.extend( div.style, { + minHeight: "100px", + height: "auto", + padding: 0, + borderWidth: 0 + }); + + $.support.minHeight = div.offsetHeight === 100; + $.support.selectstart = "onselectstart" in div; + + // set display to none to avoid a layout bug in IE + // http://dev.jquery.com/ticket/4014 + body.removeChild( div ).style.display = "none"; +}); + + + + + +// deprecated +$.extend( $.ui, { + // $.ui.plugin is deprecated. Use the proxy pattern instead. + plugin: { + add: function( module, option, set ) { + var proto = $.ui[ module ].prototype; + for ( var i in set ) { + proto.plugins[ i ] = proto.plugins[ i ] || []; + proto.plugins[ i ].push( [ option, set[ i ] ] ); + } + }, + call: function( instance, name, args ) { + var set = instance.plugins[ name ]; + if ( !set || !instance.element[ 0 ].parentNode ) { + return; + } + + for ( var i = 0; i < set.length; i++ ) { + if ( instance.options[ set[ i ][ 0 ] ] ) { + set[ i ][ 1 ].apply( instance.element, args ); + } + } + } + }, + + // will be deprecated when we switch to jQuery 1.4 - use jQuery.contains() + contains: function( a, b ) { + return document.compareDocumentPosition ? + a.compareDocumentPosition( b ) & 16 : + a !== b && a.contains( b ); + }, + + // only used by resizable + hasScroll: function( el, a ) { + + //If overflow is hidden, the element might have extra content, but the user wants to hide it + if ( $( el ).css( "overflow" ) === "hidden") { + return false; + } + + var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop", + has = false; + + if ( el[ scroll ] > 0 ) { + return true; + } + + // TODO: determine which cases actually cause this to happen + // if the element doesn't have the scroll set, see if it's possible to + // set the scroll + el[ scroll ] = 1; + has = ( el[ scroll ] > 0 ); + el[ scroll ] = 0; + return has; + }, + + // these are odd functions, fix the API or move into individual plugins + isOverAxis: function( x, reference, size ) { + //Determines when x coordinate is over "b" element axis + return ( x > reference ) && ( x < ( reference + size ) ); + }, + isOver: function( y, x, top, left, height, width ) { + //Determines when x, y coordinates is over "b" element + return $.ui.isOverAxis( y, top, height ) && $.ui.isOverAxis( x, left, width ); + } +}); + +})( jQuery ); +/*! + * jQuery UI Widget 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Widget + */ +(function( $, undefined ) { + +// jQuery 1.4+ +if ( $.cleanData ) { + var _cleanData = $.cleanData; + $.cleanData = function( elems ) { + for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { + try { + $( elem ).triggerHandler( "remove" ); + // http://bugs.jquery.com/ticket/8235 + } catch( e ) {} + } + _cleanData( elems ); + }; +} else { + var _remove = $.fn.remove; + $.fn.remove = function( selector, keepData ) { + return this.each(function() { + if ( !keepData ) { + if ( !selector || $.filter( selector, [ this ] ).length ) { + $( "*", this ).add( [ this ] ).each(function() { + try { + $( this ).triggerHandler( "remove" ); + // http://bugs.jquery.com/ticket/8235 + } catch( e ) {} + }); + } + } + return _remove.call( $(this), selector, keepData ); + }); + }; +} + +$.widget = function( name, base, prototype ) { + var namespace = name.split( "." )[ 0 ], + fullName; + name = name.split( "." )[ 1 ]; + fullName = namespace + "-" + name; + + if ( !prototype ) { + prototype = base; + base = $.Widget; + } + + // create selector for plugin + $.expr[ ":" ][ fullName ] = function( elem ) { + return !!$.data( elem, name ); + }; + + $[ namespace ] = $[ namespace ] || {}; + $[ namespace ][ name ] = function( options, element ) { + // allow instantiation without initializing for simple inheritance + if ( arguments.length ) { + this._createWidget( options, element ); + } + }; + + var basePrototype = new base(); + // we need to make the options hash a property directly on the new instance + // otherwise we'll modify the options hash on the prototype that we're + // inheriting from +// $.each( basePrototype, function( key, val ) { +// if ( $.isPlainObject(val) ) { +// basePrototype[ key ] = $.extend( {}, val ); +// } +// }); + basePrototype.options = $.extend( true, {}, basePrototype.options ); + $[ namespace ][ name ].prototype = $.extend( true, basePrototype, { + namespace: namespace, + widgetName: name, + widgetEventPrefix: $[ namespace ][ name ].prototype.widgetEventPrefix || name, + widgetBaseClass: fullName + }, prototype ); + + $.widget.bridge( name, $[ namespace ][ name ] ); +}; + +$.widget.bridge = function( name, object ) { + $.fn[ name ] = function( options ) { + var isMethodCall = typeof options === "string", + args = Array.prototype.slice.call( arguments, 1 ), + returnValue = this; + + // allow multiple hashes to be passed on init + options = !isMethodCall && args.length ? + $.extend.apply( null, [ true, options ].concat(args) ) : + options; + + // prevent calls to internal methods + if ( isMethodCall && options.charAt( 0 ) === "_" ) { + return returnValue; + } + + if ( isMethodCall ) { + this.each(function() { + var instance = $.data( this, name ), + methodValue = instance && $.isFunction( instance[options] ) ? + instance[ options ].apply( instance, args ) : + instance; + // TODO: add this back in 1.9 and use $.error() (see #5972) +// if ( !instance ) { +// throw "cannot call methods on " + name + " prior to initialization; " + +// "attempted to call method '" + options + "'"; +// } +// if ( !$.isFunction( instance[options] ) ) { +// throw "no such method '" + options + "' for " + name + " widget instance"; +// } +// var methodValue = instance[ options ].apply( instance, args ); + if ( methodValue !== instance && methodValue !== undefined ) { + returnValue = methodValue; + return false; + } + }); + } else { + this.each(function() { + var instance = $.data( this, name ); + if ( instance ) { + instance.option( options || {} )._init(); + } else { + $.data( this, name, new object( options, this ) ); + } + }); + } + + return returnValue; + }; +}; + +$.Widget = function( options, element ) { + // allow instantiation without initializing for simple inheritance + if ( arguments.length ) { + this._createWidget( options, element ); + } +}; + +$.Widget.prototype = { + widgetName: "widget", + widgetEventPrefix: "", + options: { + disabled: false + }, + _createWidget: function( options, element ) { + // $.widget.bridge stores the plugin instance, but we do it anyway + // so that it's stored even before the _create function runs + $.data( element, this.widgetName, this ); + this.element = $( element ); + this.options = $.extend( true, {}, + this.options, + this._getCreateOptions(), + options ); + + var self = this; + this.element.bind( "remove." + this.widgetName, function() { + self.destroy(); + }); + + this._create(); + this._trigger( "create" ); + this._init(); + }, + _getCreateOptions: function() { + return $.metadata && $.metadata.get( this.element[0] )[ this.widgetName ]; + }, + _create: function() {}, + _init: function() {}, + + destroy: function() { + this.element + .unbind( "." + this.widgetName ) + .removeData( this.widgetName ); + this.widget() + .unbind( "." + this.widgetName ) + .removeAttr( "aria-disabled" ) + .removeClass( + this.widgetBaseClass + "-disabled " + + "ui-state-disabled" ); + }, + + widget: function() { + return this.element; + }, + + option: function( key, value ) { + var options = key; + + if ( arguments.length === 0 ) { + // don't return a reference to the internal hash + return $.extend( {}, this.options ); + } + + if (typeof key === "string" ) { + if ( value === undefined ) { + return this.options[ key ]; + } + options = {}; + options[ key ] = value; + } + + this._setOptions( options ); + + return this; + }, + _setOptions: function( options ) { + var self = this; + $.each( options, function( key, value ) { + self._setOption( key, value ); + }); + + return this; + }, + _setOption: function( key, value ) { + this.options[ key ] = value; + + if ( key === "disabled" ) { + this.widget() + [ value ? "addClass" : "removeClass"]( + this.widgetBaseClass + "-disabled" + " " + + "ui-state-disabled" ) + .attr( "aria-disabled", value ); + } + + return this; + }, + + enable: function() { + return this._setOption( "disabled", false ); + }, + disable: function() { + return this._setOption( "disabled", true ); + }, + + _trigger: function( type, event, data ) { + var prop, orig, + callback = this.options[ type ]; + + data = data || {}; + event = $.Event( event ); + event.type = ( type === this.widgetEventPrefix ? + type : + this.widgetEventPrefix + type ).toLowerCase(); + // the original event may come from any element + // so we need to reset the target on the new event + event.target = this.element[ 0 ]; + + // copy original event properties over to the new event + orig = event.originalEvent; + if ( orig ) { + for ( prop in orig ) { + if ( !( prop in event ) ) { + event[ prop ] = orig[ prop ]; + } + } + } + + this.element.trigger( event, data ); + + return !( $.isFunction(callback) && + callback.call( this.element[0], event, data ) === false || + event.isDefaultPrevented() ); + } +}; + +})( jQuery ); +/*! + * jQuery UI Mouse 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Mouse + * + * Depends: + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +var mouseHandled = false; +$( document ).mouseup( function( e ) { + mouseHandled = false; +}); + +$.widget("ui.mouse", { + options: { + cancel: ':input,option', + distance: 1, + delay: 0 + }, + _mouseInit: function() { + var self = this; + + this.element + .bind('mousedown.'+this.widgetName, function(event) { + return self._mouseDown(event); + }) + .bind('click.'+this.widgetName, function(event) { + if (true === $.data(event.target, self.widgetName + '.preventClickEvent')) { + $.removeData(event.target, self.widgetName + '.preventClickEvent'); + event.stopImmediatePropagation(); + return false; + } + }); + + this.started = false; + }, + + // TODO: make sure destroying one instance of mouse doesn't mess with + // other instances of mouse + _mouseDestroy: function() { + this.element.unbind('.'+this.widgetName); + }, + + _mouseDown: function(event) { + // don't let more than one widget handle mouseStart + if( mouseHandled ) { return }; + + // we may have missed mouseup (out of window) + (this._mouseStarted && this._mouseUp(event)); + + this._mouseDownEvent = event; + + var self = this, + btnIsLeft = (event.which == 1), + // event.target.nodeName works around a bug in IE 8 with + // disabled inputs (#7620) + elIsCancel = (typeof this.options.cancel == "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false); + if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) { + return true; + } + + this.mouseDelayMet = !this.options.delay; + if (!this.mouseDelayMet) { + this._mouseDelayTimer = setTimeout(function() { + self.mouseDelayMet = true; + }, this.options.delay); + } + + if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { + this._mouseStarted = (this._mouseStart(event) !== false); + if (!this._mouseStarted) { + event.preventDefault(); + return true; + } + } + + // Click event may never have fired (Gecko & Opera) + if (true === $.data(event.target, this.widgetName + '.preventClickEvent')) { + $.removeData(event.target, this.widgetName + '.preventClickEvent'); + } + + // these delegates are required to keep context + this._mouseMoveDelegate = function(event) { + return self._mouseMove(event); + }; + this._mouseUpDelegate = function(event) { + return self._mouseUp(event); + }; + $(document) + .bind('mousemove.'+this.widgetName, this._mouseMoveDelegate) + .bind('mouseup.'+this.widgetName, this._mouseUpDelegate); + + event.preventDefault(); + + mouseHandled = true; + return true; + }, + + _mouseMove: function(event) { + // IE mouseup check - mouseup happened when mouse was out of window + if ($.browser.msie && !(document.documentMode >= 9) && !event.button) { + return this._mouseUp(event); + } + + if (this._mouseStarted) { + this._mouseDrag(event); + return event.preventDefault(); + } + + if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { + this._mouseStarted = + (this._mouseStart(this._mouseDownEvent, event) !== false); + (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event)); + } + + return !this._mouseStarted; + }, + + _mouseUp: function(event) { + $(document) + .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate) + .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate); + + if (this._mouseStarted) { + this._mouseStarted = false; + + if (event.target == this._mouseDownEvent.target) { + $.data(event.target, this.widgetName + '.preventClickEvent', true); + } + + this._mouseStop(event); + } + + return false; + }, + + _mouseDistanceMet: function(event) { + return (Math.max( + Math.abs(this._mouseDownEvent.pageX - event.pageX), + Math.abs(this._mouseDownEvent.pageY - event.pageY) + ) >= this.options.distance + ); + }, + + _mouseDelayMet: function(event) { + return this.mouseDelayMet; + }, + + // These are placeholder methods, to be overriden by extending plugin + _mouseStart: function(event) {}, + _mouseDrag: function(event) {}, + _mouseStop: function(event) {}, + _mouseCapture: function(event) { return true; } +}); + +})(jQuery); +/* + * jQuery UI Position 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Position + */ +(function( $, undefined ) { + +$.ui = $.ui || {}; + +var horizontalPositions = /left|center|right/, + verticalPositions = /top|center|bottom/, + center = "center", + support = {}, + _position = $.fn.position, + _offset = $.fn.offset; + +$.fn.position = function( options ) { + if ( !options || !options.of ) { + return _position.apply( this, arguments ); + } + + // make a copy, we don't want to modify arguments + options = $.extend( {}, options ); + + var target = $( options.of ), + targetElem = target[0], + collision = ( options.collision || "flip" ).split( " " ), + offset = options.offset ? options.offset.split( " " ) : [ 0, 0 ], + targetWidth, + targetHeight, + basePosition; + + if ( targetElem.nodeType === 9 ) { + targetWidth = target.width(); + targetHeight = target.height(); + basePosition = { top: 0, left: 0 }; + // TODO: use $.isWindow() in 1.9 + } else if ( targetElem.setTimeout ) { + targetWidth = target.width(); + targetHeight = target.height(); + basePosition = { top: target.scrollTop(), left: target.scrollLeft() }; + } else if ( targetElem.preventDefault ) { + // force left top to allow flipping + options.at = "left top"; + targetWidth = targetHeight = 0; + basePosition = { top: options.of.pageY, left: options.of.pageX }; + } else { + targetWidth = target.outerWidth(); + targetHeight = target.outerHeight(); + basePosition = target.offset(); + } + + // force my and at to have valid horizontal and veritcal positions + // if a value is missing or invalid, it will be converted to center + $.each( [ "my", "at" ], function() { + var pos = ( options[this] || "" ).split( " " ); + if ( pos.length === 1) { + pos = horizontalPositions.test( pos[0] ) ? + pos.concat( [center] ) : + verticalPositions.test( pos[0] ) ? + [ center ].concat( pos ) : + [ center, center ]; + } + pos[ 0 ] = horizontalPositions.test( pos[0] ) ? pos[ 0 ] : center; + pos[ 1 ] = verticalPositions.test( pos[1] ) ? pos[ 1 ] : center; + options[ this ] = pos; + }); + + // normalize collision option + if ( collision.length === 1 ) { + collision[ 1 ] = collision[ 0 ]; + } + + // normalize offset option + offset[ 0 ] = parseInt( offset[0], 10 ) || 0; + if ( offset.length === 1 ) { + offset[ 1 ] = offset[ 0 ]; + } + offset[ 1 ] = parseInt( offset[1], 10 ) || 0; + + if ( options.at[0] === "right" ) { + basePosition.left += targetWidth; + } else if ( options.at[0] === center ) { + basePosition.left += targetWidth / 2; + } + + if ( options.at[1] === "bottom" ) { + basePosition.top += targetHeight; + } else if ( options.at[1] === center ) { + basePosition.top += targetHeight / 2; + } + + basePosition.left += offset[ 0 ]; + basePosition.top += offset[ 1 ]; + + return this.each(function() { + var elem = $( this ), + elemWidth = elem.outerWidth(), + elemHeight = elem.outerHeight(), + marginLeft = parseInt( $.curCSS( this, "marginLeft", true ) ) || 0, + marginTop = parseInt( $.curCSS( this, "marginTop", true ) ) || 0, + collisionWidth = elemWidth + marginLeft + + ( parseInt( $.curCSS( this, "marginRight", true ) ) || 0 ), + collisionHeight = elemHeight + marginTop + + ( parseInt( $.curCSS( this, "marginBottom", true ) ) || 0 ), + position = $.extend( {}, basePosition ), + collisionPosition; + + if ( options.my[0] === "right" ) { + position.left -= elemWidth; + } else if ( options.my[0] === center ) { + position.left -= elemWidth / 2; + } + + if ( options.my[1] === "bottom" ) { + position.top -= elemHeight; + } else if ( options.my[1] === center ) { + position.top -= elemHeight / 2; + } + + // prevent fractions if jQuery version doesn't support them (see #5280) + if ( !support.fractions ) { + position.left = Math.round( position.left ); + position.top = Math.round( position.top ); + } + + collisionPosition = { + left: position.left - marginLeft, + top: position.top - marginTop + }; + + $.each( [ "left", "top" ], function( i, dir ) { + if ( $.ui.position[ collision[i] ] ) { + $.ui.position[ collision[i] ][ dir ]( position, { + targetWidth: targetWidth, + targetHeight: targetHeight, + elemWidth: elemWidth, + elemHeight: elemHeight, + collisionPosition: collisionPosition, + collisionWidth: collisionWidth, + collisionHeight: collisionHeight, + offset: offset, + my: options.my, + at: options.at + }); + } + }); + + if ( $.fn.bgiframe ) { + elem.bgiframe(); + } + elem.offset( $.extend( position, { using: options.using } ) ); + }); +}; + +$.ui.position = { + fit: { + left: function( position, data ) { + var win = $( window ), + over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft(); + position.left = over > 0 ? position.left - over : Math.max( position.left - data.collisionPosition.left, position.left ); + }, + top: function( position, data ) { + var win = $( window ), + over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop(); + position.top = over > 0 ? position.top - over : Math.max( position.top - data.collisionPosition.top, position.top ); + } + }, + + flip: { + left: function( position, data ) { + if ( data.at[0] === center ) { + return; + } + var win = $( window ), + over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft(), + myOffset = data.my[ 0 ] === "left" ? + -data.elemWidth : + data.my[ 0 ] === "right" ? + data.elemWidth : + 0, + atOffset = data.at[ 0 ] === "left" ? + data.targetWidth : + -data.targetWidth, + offset = -2 * data.offset[ 0 ]; + position.left += data.collisionPosition.left < 0 ? + myOffset + atOffset + offset : + over > 0 ? + myOffset + atOffset + offset : + 0; + }, + top: function( position, data ) { + if ( data.at[1] === center ) { + return; + } + var win = $( window ), + over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop(), + myOffset = data.my[ 1 ] === "top" ? + -data.elemHeight : + data.my[ 1 ] === "bottom" ? + data.elemHeight : + 0, + atOffset = data.at[ 1 ] === "top" ? + data.targetHeight : + -data.targetHeight, + offset = -2 * data.offset[ 1 ]; + position.top += data.collisionPosition.top < 0 ? + myOffset + atOffset + offset : + over > 0 ? + myOffset + atOffset + offset : + 0; + } + } +}; + +// offset setter from jQuery 1.4 +if ( !$.offset.setOffset ) { + $.offset.setOffset = function( elem, options ) { + // set position first, in-case top/left are set even on static elem + if ( /static/.test( $.curCSS( elem, "position" ) ) ) { + elem.style.position = "relative"; + } + var curElem = $( elem ), + curOffset = curElem.offset(), + curTop = parseInt( $.curCSS( elem, "top", true ), 10 ) || 0, + curLeft = parseInt( $.curCSS( elem, "left", true ), 10) || 0, + props = { + top: (options.top - curOffset.top) + curTop, + left: (options.left - curOffset.left) + curLeft + }; + + if ( 'using' in options ) { + options.using.call( elem, props ); + } else { + curElem.css( props ); + } + }; + + $.fn.offset = function( options ) { + var elem = this[ 0 ]; + if ( !elem || !elem.ownerDocument ) { return null; } + if ( options ) { + return this.each(function() { + $.offset.setOffset( this, options ); + }); + } + return _offset.call( this ); + }; +} + +// fraction support test (older versions of jQuery don't support fractions) +(function () { + var body = document.getElementsByTagName( "body" )[ 0 ], + div = document.createElement( "div" ), + testElement, testElementParent, testElementStyle, offset, offsetTotal; + + //Create a "fake body" for testing based on method used in jQuery.support + testElement = document.createElement( body ? "div" : "body" ); + testElementStyle = { + visibility: "hidden", + width: 0, + height: 0, + border: 0, + margin: 0, + background: "none" + }; + if ( body ) { + jQuery.extend( testElementStyle, { + position: "absolute", + left: "-1000px", + top: "-1000px" + }); + } + for ( var i in testElementStyle ) { + testElement.style[ i ] = testElementStyle[ i ]; + } + testElement.appendChild( div ); + testElementParent = body || document.documentElement; + testElementParent.insertBefore( testElement, testElementParent.firstChild ); + + div.style.cssText = "position: absolute; left: 10.7432222px; top: 10.432325px; height: 30px; width: 201px;"; + + offset = $( div ).offset( function( _, offset ) { + return offset; + }).offset(); + + testElement.innerHTML = ""; + testElementParent.removeChild( testElement ); + + offsetTotal = offset.top + offset.left + ( body ? 2000 : 0 ); + support.fractions = offsetTotal > 21 && offsetTotal < 22; +})(); + +}( jQuery )); +/* + * jQuery UI Draggable 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Draggables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +$.widget("ui.draggable", $.ui.mouse, { + widgetEventPrefix: "drag", + options: { + addClasses: true, + appendTo: "parent", + axis: false, + connectToSortable: false, + containment: false, + cursor: "auto", + cursorAt: false, + grid: false, + handle: false, + helper: "original", + iframeFix: false, + opacity: false, + refreshPositions: false, + revert: false, + revertDuration: 500, + scope: "default", + scroll: true, + scrollSensitivity: 20, + scrollSpeed: 20, + snap: false, + snapMode: "both", + snapTolerance: 20, + stack: false, + zIndex: false + }, + _create: function() { + + if (this.options.helper == 'original' && !(/^(?:r|a|f)/).test(this.element.css("position"))) + this.element[0].style.position = 'relative'; + + (this.options.addClasses && this.element.addClass("ui-draggable")); + (this.options.disabled && this.element.addClass("ui-draggable-disabled")); + + this._mouseInit(); + + }, + + destroy: function() { + if(!this.element.data('draggable')) return; + this.element + .removeData("draggable") + .unbind(".draggable") + .removeClass("ui-draggable" + + " ui-draggable-dragging" + + " ui-draggable-disabled"); + this._mouseDestroy(); + + return this; + }, + + _mouseCapture: function(event) { + + var o = this.options; + + // among others, prevent a drag on a resizable-handle + if (this.helper || o.disabled || $(event.target).is('.ui-resizable-handle')) + return false; + + //Quit if we're not on a valid handle + this.handle = this._getHandle(event); + if (!this.handle) + return false; + + if ( o.iframeFix ) { + $(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() { + $('
') + .css({ + width: this.offsetWidth+"px", height: this.offsetHeight+"px", + position: "absolute", opacity: "0.001", zIndex: 1000 + }) + .css($(this).offset()) + .appendTo("body"); + }); + } + + return true; + + }, + + _mouseStart: function(event) { + + var o = this.options; + + //Create and append the visible helper + this.helper = this._createHelper(event); + + //Cache the helper size + this._cacheHelperProportions(); + + //If ddmanager is used for droppables, set the global draggable + if($.ui.ddmanager) + $.ui.ddmanager.current = this; + + /* + * - Position generation - + * This block generates everything position related - it's the core of draggables. + */ + + //Cache the margins of the original element + this._cacheMargins(); + + //Store the helper's css position + this.cssPosition = this.helper.css("position"); + this.scrollParent = this.helper.scrollParent(); + + //The element's absolute position on the page minus margins + this.offset = this.positionAbs = this.element.offset(); + this.offset = { + top: this.offset.top - this.margins.top, + left: this.offset.left - this.margins.left + }; + + $.extend(this.offset, { + click: { //Where the click happened, relative to the element + left: event.pageX - this.offset.left, + top: event.pageY - this.offset.top + }, + parent: this._getParentOffset(), + relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper + }); + + //Generate the original position + this.originalPosition = this.position = this._generatePosition(event); + this.originalPageX = event.pageX; + this.originalPageY = event.pageY; + + //Adjust the mouse offset relative to the helper if 'cursorAt' is supplied + (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt)); + + //Set a containment if given in the options + if(o.containment) + this._setContainment(); + + //Trigger event + callbacks + if(this._trigger("start", event) === false) { + this._clear(); + return false; + } + + //Recache the helper size + this._cacheHelperProportions(); + + //Prepare the droppable offsets + if ($.ui.ddmanager && !o.dropBehaviour) + $.ui.ddmanager.prepareOffsets(this, event); + + this.helper.addClass("ui-draggable-dragging"); + this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position + + //If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003) + if ( $.ui.ddmanager ) $.ui.ddmanager.dragStart(this, event); + + return true; + }, + + _mouseDrag: function(event, noPropagation) { + + //Compute the helpers position + this.position = this._generatePosition(event); + this.positionAbs = this._convertPositionTo("absolute"); + + //Call plugins and callbacks and use the resulting position if something is returned + if (!noPropagation) { + var ui = this._uiHash(); + if(this._trigger('drag', event, ui) === false) { + this._mouseUp({}); + return false; + } + this.position = ui.position; + } + + if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px'; + if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px'; + if($.ui.ddmanager) $.ui.ddmanager.drag(this, event); + + return false; + }, + + _mouseStop: function(event) { + + //If we are using droppables, inform the manager about the drop + var dropped = false; + if ($.ui.ddmanager && !this.options.dropBehaviour) + dropped = $.ui.ddmanager.drop(this, event); + + //if a drop comes from outside (a sortable) + if(this.dropped) { + dropped = this.dropped; + this.dropped = false; + } + + //if the original element is removed, don't bother to continue if helper is set to "original" + if((!this.element[0] || !this.element[0].parentNode) && this.options.helper == "original") + return false; + + if((this.options.revert == "invalid" && !dropped) || (this.options.revert == "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) { + var self = this; + $(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() { + if(self._trigger("stop", event) !== false) { + self._clear(); + } + }); + } else { + if(this._trigger("stop", event) !== false) { + this._clear(); + } + } + + return false; + }, + + _mouseUp: function(event) { + if (this.options.iframeFix === true) { + $("div.ui-draggable-iframeFix").each(function() { + this.parentNode.removeChild(this); + }); //Remove frame helpers + } + + //If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003) + if( $.ui.ddmanager ) $.ui.ddmanager.dragStop(this, event); + + return $.ui.mouse.prototype._mouseUp.call(this, event); + }, + + cancel: function() { + + if(this.helper.is(".ui-draggable-dragging")) { + this._mouseUp({}); + } else { + this._clear(); + } + + return this; + + }, + + _getHandle: function(event) { + + var handle = !this.options.handle || !$(this.options.handle, this.element).length ? true : false; + $(this.options.handle, this.element) + .find("*") + .andSelf() + .each(function() { + if(this == event.target) handle = true; + }); + + return handle; + + }, + + _createHelper: function(event) { + + var o = this.options; + var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper == 'clone' ? this.element.clone().removeAttr('id') : this.element); + + if(!helper.parents('body').length) + helper.appendTo((o.appendTo == 'parent' ? this.element[0].parentNode : o.appendTo)); + + if(helper[0] != this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) + helper.css("position", "absolute"); + + return helper; + + }, + + _adjustOffsetFromHelper: function(obj) { + if (typeof obj == 'string') { + obj = obj.split(' '); + } + if ($.isArray(obj)) { + obj = {left: +obj[0], top: +obj[1] || 0}; + } + if ('left' in obj) { + this.offset.click.left = obj.left + this.margins.left; + } + if ('right' in obj) { + this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left; + } + if ('top' in obj) { + this.offset.click.top = obj.top + this.margins.top; + } + if ('bottom' in obj) { + this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top; + } + }, + + _getParentOffset: function() { + + //Get the offsetParent and cache its position + this.offsetParent = this.helper.offsetParent(); + var po = this.offsetParent.offset(); + + // This is a special case where we need to modify a offset calculated on start, since the following happened: + // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent + // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that + // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag + if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) { + po.left += this.scrollParent.scrollLeft(); + po.top += this.scrollParent.scrollTop(); + } + + if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information + || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix + po = { top: 0, left: 0 }; + + return { + top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0), + left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0) + }; + + }, + + _getRelativeOffset: function() { + + if(this.cssPosition == "relative") { + var p = this.element.position(); + return { + top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(), + left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft() + }; + } else { + return { top: 0, left: 0 }; + } + + }, + + _cacheMargins: function() { + this.margins = { + left: (parseInt(this.element.css("marginLeft"),10) || 0), + top: (parseInt(this.element.css("marginTop"),10) || 0), + right: (parseInt(this.element.css("marginRight"),10) || 0), + bottom: (parseInt(this.element.css("marginBottom"),10) || 0) + }; + }, + + _cacheHelperProportions: function() { + this.helperProportions = { + width: this.helper.outerWidth(), + height: this.helper.outerHeight() + }; + }, + + _setContainment: function() { + + var o = this.options; + if(o.containment == 'parent') o.containment = this.helper[0].parentNode; + if(o.containment == 'document' || o.containment == 'window') this.containment = [ + o.containment == 'document' ? 0 : $(window).scrollLeft() - this.offset.relative.left - this.offset.parent.left, + o.containment == 'document' ? 0 : $(window).scrollTop() - this.offset.relative.top - this.offset.parent.top, + (o.containment == 'document' ? 0 : $(window).scrollLeft()) + $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left, + (o.containment == 'document' ? 0 : $(window).scrollTop()) + ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top + ]; + + if(!(/^(document|window|parent)$/).test(o.containment) && o.containment.constructor != Array) { + var c = $(o.containment); + var ce = c[0]; if(!ce) return; + var co = c.offset(); + var over = ($(ce).css("overflow") != 'hidden'); + + this.containment = [ + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0), + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0), + (over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left - this.margins.right, + (over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top - this.margins.bottom + ]; + this.relative_container = c; + + } else if(o.containment.constructor == Array) { + this.containment = o.containment; + } + + }, + + _convertPositionTo: function(d, pos) { + + if(!pos) pos = this.position; + var mod = d == "absolute" ? 1 : -1; + var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); + + return { + top: ( + pos.top // The absolute mouse position + + this.offset.relative.top * mod // Only for relative positioned nodes: Relative offset from element to offset parent + + this.offset.parent.top * mod // The offsetParent's offset without borders (offset + border) + - ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod) + ), + left: ( + pos.left // The absolute mouse position + + this.offset.relative.left * mod // Only for relative positioned nodes: Relative offset from element to offset parent + + this.offset.parent.left * mod // The offsetParent's offset without borders (offset + border) + - ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod) + ) + }; + + }, + + _generatePosition: function(event) { + + var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); + var pageX = event.pageX; + var pageY = event.pageY; + + /* + * - Position constraining - + * Constrain the position to a mix of grid, containment. + */ + + if(this.originalPosition) { //If we are not dragging yet, we won't check for options + var containment; + if(this.containment) { + if (this.relative_container){ + var co = this.relative_container.offset(); + containment = [ this.containment[0] + co.left, + this.containment[1] + co.top, + this.containment[2] + co.left, + this.containment[3] + co.top ]; + } + else { + containment = this.containment; + } + + if(event.pageX - this.offset.click.left < containment[0]) pageX = containment[0] + this.offset.click.left; + if(event.pageY - this.offset.click.top < containment[1]) pageY = containment[1] + this.offset.click.top; + if(event.pageX - this.offset.click.left > containment[2]) pageX = containment[2] + this.offset.click.left; + if(event.pageY - this.offset.click.top > containment[3]) pageY = containment[3] + this.offset.click.top; + } + + if(o.grid) { + //Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950) + var top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY; + pageY = containment ? (!(top - this.offset.click.top < containment[1] || top - this.offset.click.top > containment[3]) ? top : (!(top - this.offset.click.top < containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; + + var left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX; + pageX = containment ? (!(left - this.offset.click.left < containment[0] || left - this.offset.click.left > containment[2]) ? left : (!(left - this.offset.click.left < containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left; + } + + } + + return { + top: ( + pageY // The absolute mouse position + - this.offset.click.top // Click offset (relative to the element) + - this.offset.relative.top // Only for relative positioned nodes: Relative offset from element to offset parent + - this.offset.parent.top // The offsetParent's offset without borders (offset + border) + + ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) )) + ), + left: ( + pageX // The absolute mouse position + - this.offset.click.left // Click offset (relative to the element) + - this.offset.relative.left // Only for relative positioned nodes: Relative offset from element to offset parent + - this.offset.parent.left // The offsetParent's offset without borders (offset + border) + + ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() )) + ) + }; + + }, + + _clear: function() { + this.helper.removeClass("ui-draggable-dragging"); + if(this.helper[0] != this.element[0] && !this.cancelHelperRemoval) this.helper.remove(); + //if($.ui.ddmanager) $.ui.ddmanager.current = null; + this.helper = null; + this.cancelHelperRemoval = false; + }, + + // From now on bulk stuff - mainly helpers + + _trigger: function(type, event, ui) { + ui = ui || this._uiHash(); + $.ui.plugin.call(this, type, [event, ui]); + if(type == "drag") this.positionAbs = this._convertPositionTo("absolute"); //The absolute position has to be recalculated after plugins + return $.Widget.prototype._trigger.call(this, type, event, ui); + }, + + plugins: {}, + + _uiHash: function(event) { + return { + helper: this.helper, + position: this.position, + originalPosition: this.originalPosition, + offset: this.positionAbs + }; + } + +}); + +$.extend($.ui.draggable, { + version: "1.8.17" +}); + +$.ui.plugin.add("draggable", "connectToSortable", { + start: function(event, ui) { + + var inst = $(this).data("draggable"), o = inst.options, + uiSortable = $.extend({}, ui, { item: inst.element }); + inst.sortables = []; + $(o.connectToSortable).each(function() { + var sortable = $.data(this, 'sortable'); + if (sortable && !sortable.options.disabled) { + inst.sortables.push({ + instance: sortable, + shouldRevert: sortable.options.revert + }); + sortable.refreshPositions(); // Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page). + sortable._trigger("activate", event, uiSortable); + } + }); + + }, + stop: function(event, ui) { + + //If we are still over the sortable, we fake the stop event of the sortable, but also remove helper + var inst = $(this).data("draggable"), + uiSortable = $.extend({}, ui, { item: inst.element }); + + $.each(inst.sortables, function() { + if(this.instance.isOver) { + + this.instance.isOver = 0; + + inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance + this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work) + + //The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: 'valid/invalid' + if(this.shouldRevert) this.instance.options.revert = true; + + //Trigger the stop of the sortable + this.instance._mouseStop(event); + + this.instance.options.helper = this.instance.options._helper; + + //If the helper has been the original item, restore properties in the sortable + if(inst.options.helper == 'original') + this.instance.currentItem.css({ top: 'auto', left: 'auto' }); + + } else { + this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance + this.instance._trigger("deactivate", event, uiSortable); + } + + }); + + }, + drag: function(event, ui) { + + var inst = $(this).data("draggable"), self = this; + + var checkPos = function(o) { + var dyClick = this.offset.click.top, dxClick = this.offset.click.left; + var helperTop = this.positionAbs.top, helperLeft = this.positionAbs.left; + var itemHeight = o.height, itemWidth = o.width; + var itemTop = o.top, itemLeft = o.left; + + return $.ui.isOver(helperTop + dyClick, helperLeft + dxClick, itemTop, itemLeft, itemHeight, itemWidth); + }; + + $.each(inst.sortables, function(i) { + + //Copy over some variables to allow calling the sortable's native _intersectsWith + this.instance.positionAbs = inst.positionAbs; + this.instance.helperProportions = inst.helperProportions; + this.instance.offset.click = inst.offset.click; + + if(this.instance._intersectsWith(this.instance.containerCache)) { + + //If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once + if(!this.instance.isOver) { + + this.instance.isOver = 1; + //Now we fake the start of dragging for the sortable instance, + //by cloning the list group item, appending it to the sortable and using it as inst.currentItem + //We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one) + this.instance.currentItem = $(self).clone().removeAttr('id').appendTo(this.instance.element).data("sortable-item", true); + this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it + this.instance.options.helper = function() { return ui.helper[0]; }; + + event.target = this.instance.currentItem[0]; + this.instance._mouseCapture(event, true); + this.instance._mouseStart(event, true, true); + + //Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes + this.instance.offset.click.top = inst.offset.click.top; + this.instance.offset.click.left = inst.offset.click.left; + this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left; + this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top; + + inst._trigger("toSortable", event); + inst.dropped = this.instance.element; //draggable revert needs that + //hack so receive/update callbacks work (mostly) + inst.currentItem = inst.element; + this.instance.fromOutside = inst; + + } + + //Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable + if(this.instance.currentItem) this.instance._mouseDrag(event); + + } else { + + //If it doesn't intersect with the sortable, and it intersected before, + //we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval + if(this.instance.isOver) { + + this.instance.isOver = 0; + this.instance.cancelHelperRemoval = true; + + //Prevent reverting on this forced stop + this.instance.options.revert = false; + + // The out event needs to be triggered independently + this.instance._trigger('out', event, this.instance._uiHash(this.instance)); + + this.instance._mouseStop(event, true); + this.instance.options.helper = this.instance.options._helper; + + //Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size + this.instance.currentItem.remove(); + if(this.instance.placeholder) this.instance.placeholder.remove(); + + inst._trigger("fromSortable", event); + inst.dropped = false; //draggable revert needs that + } + + }; + + }); + + } +}); + +$.ui.plugin.add("draggable", "cursor", { + start: function(event, ui) { + var t = $('body'), o = $(this).data('draggable').options; + if (t.css("cursor")) o._cursor = t.css("cursor"); + t.css("cursor", o.cursor); + }, + stop: function(event, ui) { + var o = $(this).data('draggable').options; + if (o._cursor) $('body').css("cursor", o._cursor); + } +}); + +$.ui.plugin.add("draggable", "opacity", { + start: function(event, ui) { + var t = $(ui.helper), o = $(this).data('draggable').options; + if(t.css("opacity")) o._opacity = t.css("opacity"); + t.css('opacity', o.opacity); + }, + stop: function(event, ui) { + var o = $(this).data('draggable').options; + if(o._opacity) $(ui.helper).css('opacity', o._opacity); + } +}); + +$.ui.plugin.add("draggable", "scroll", { + start: function(event, ui) { + var i = $(this).data("draggable"); + if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') i.overflowOffset = i.scrollParent.offset(); + }, + drag: function(event, ui) { + + var i = $(this).data("draggable"), o = i.options, scrolled = false; + + if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') { + + if(!o.axis || o.axis != 'x') { + if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) + i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed; + else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity) + i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed; + } + + if(!o.axis || o.axis != 'y') { + if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) + i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed; + else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity) + i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed; + } + + } else { + + if(!o.axis || o.axis != 'x') { + if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) + scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); + else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) + scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); + } + + if(!o.axis || o.axis != 'y') { + if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) + scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); + else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) + scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); + } + + } + + if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) + $.ui.ddmanager.prepareOffsets(i, event); + + } +}); + +$.ui.plugin.add("draggable", "snap", { + start: function(event, ui) { + + var i = $(this).data("draggable"), o = i.options; + i.snapElements = []; + + $(o.snap.constructor != String ? ( o.snap.items || ':data(draggable)' ) : o.snap).each(function() { + var $t = $(this); var $o = $t.offset(); + if(this != i.element[0]) i.snapElements.push({ + item: this, + width: $t.outerWidth(), height: $t.outerHeight(), + top: $o.top, left: $o.left + }); + }); + + }, + drag: function(event, ui) { + + var inst = $(this).data("draggable"), o = inst.options; + var d = o.snapTolerance; + + var x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width, + y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height; + + for (var i = inst.snapElements.length - 1; i >= 0; i--){ + + var l = inst.snapElements[i].left, r = l + inst.snapElements[i].width, + t = inst.snapElements[i].top, b = t + inst.snapElements[i].height; + + //Yes, I know, this is insane ;) + if(!((l-d < x1 && x1 < r+d && t-d < y1 && y1 < b+d) || (l-d < x1 && x1 < r+d && t-d < y2 && y2 < b+d) || (l-d < x2 && x2 < r+d && t-d < y1 && y1 < b+d) || (l-d < x2 && x2 < r+d && t-d < y2 && y2 < b+d))) { + if(inst.snapElements[i].snapping) (inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item }))); + inst.snapElements[i].snapping = false; + continue; + } + + if(o.snapMode != 'inner') { + var ts = Math.abs(t - y2) <= d; + var bs = Math.abs(b - y1) <= d; + var ls = Math.abs(l - x2) <= d; + var rs = Math.abs(r - x1) <= d; + if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top; + if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top; + if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left; + if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left; + } + + var first = (ts || bs || ls || rs); + + if(o.snapMode != 'outer') { + var ts = Math.abs(t - y1) <= d; + var bs = Math.abs(b - y2) <= d; + var ls = Math.abs(l - x1) <= d; + var rs = Math.abs(r - x2) <= d; + if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top; + if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top; + if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left; + if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left; + } + + if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) + (inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item }))); + inst.snapElements[i].snapping = (ts || bs || ls || rs || first); + + }; + + } +}); + +$.ui.plugin.add("draggable", "stack", { + start: function(event, ui) { + + var o = $(this).data("draggable").options; + + var group = $.makeArray($(o.stack)).sort(function(a,b) { + return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0); + }); + if (!group.length) { return; } + + var min = parseInt(group[0].style.zIndex) || 0; + $(group).each(function(i) { + this.style.zIndex = min + i; + }); + + this[0].style.zIndex = min + group.length; + + } +}); + +$.ui.plugin.add("draggable", "zIndex", { + start: function(event, ui) { + var t = $(ui.helper), o = $(this).data("draggable").options; + if(t.css("zIndex")) o._zIndex = t.css("zIndex"); + t.css('zIndex', o.zIndex); + }, + stop: function(event, ui) { + var o = $(this).data("draggable").options; + if(o._zIndex) $(ui.helper).css('zIndex', o._zIndex); + } +}); + +})(jQuery); +/* + * jQuery UI Droppable 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Droppables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.mouse.js + * jquery.ui.draggable.js + */ +(function( $, undefined ) { + +$.widget("ui.droppable", { + widgetEventPrefix: "drop", + options: { + accept: '*', + activeClass: false, + addClasses: true, + greedy: false, + hoverClass: false, + scope: 'default', + tolerance: 'intersect' + }, + _create: function() { + + var o = this.options, accept = o.accept; + this.isover = 0; this.isout = 1; + + this.accept = $.isFunction(accept) ? accept : function(d) { + return d.is(accept); + }; + + //Store the droppable's proportions + this.proportions = { width: this.element[0].offsetWidth, height: this.element[0].offsetHeight }; + + // Add the reference and positions to the manager + $.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || []; + $.ui.ddmanager.droppables[o.scope].push(this); + + (o.addClasses && this.element.addClass("ui-droppable")); + + }, + + destroy: function() { + var drop = $.ui.ddmanager.droppables[this.options.scope]; + for ( var i = 0; i < drop.length; i++ ) + if ( drop[i] == this ) + drop.splice(i, 1); + + this.element + .removeClass("ui-droppable ui-droppable-disabled") + .removeData("droppable") + .unbind(".droppable"); + + return this; + }, + + _setOption: function(key, value) { + + if(key == 'accept') { + this.accept = $.isFunction(value) ? value : function(d) { + return d.is(value); + }; + } + $.Widget.prototype._setOption.apply(this, arguments); + }, + + _activate: function(event) { + var draggable = $.ui.ddmanager.current; + if(this.options.activeClass) this.element.addClass(this.options.activeClass); + (draggable && this._trigger('activate', event, this.ui(draggable))); + }, + + _deactivate: function(event) { + var draggable = $.ui.ddmanager.current; + if(this.options.activeClass) this.element.removeClass(this.options.activeClass); + (draggable && this._trigger('deactivate', event, this.ui(draggable))); + }, + + _over: function(event) { + + var draggable = $.ui.ddmanager.current; + if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element + + if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { + if(this.options.hoverClass) this.element.addClass(this.options.hoverClass); + this._trigger('over', event, this.ui(draggable)); + } + + }, + + _out: function(event) { + + var draggable = $.ui.ddmanager.current; + if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element + + if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { + if(this.options.hoverClass) this.element.removeClass(this.options.hoverClass); + this._trigger('out', event, this.ui(draggable)); + } + + }, + + _drop: function(event,custom) { + + var draggable = custom || $.ui.ddmanager.current; + if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return false; // Bail if draggable and droppable are same element + + var childrenIntersection = false; + this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function() { + var inst = $.data(this, 'droppable'); + if( + inst.options.greedy + && !inst.options.disabled + && inst.options.scope == draggable.options.scope + && inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element)) + && $.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance) + ) { childrenIntersection = true; return false; } + }); + if(childrenIntersection) return false; + + if(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { + if(this.options.activeClass) this.element.removeClass(this.options.activeClass); + if(this.options.hoverClass) this.element.removeClass(this.options.hoverClass); + this._trigger('drop', event, this.ui(draggable)); + return this.element; + } + + return false; + + }, + + ui: function(c) { + return { + draggable: (c.currentItem || c.element), + helper: c.helper, + position: c.position, + offset: c.positionAbs + }; + } + +}); + +$.extend($.ui.droppable, { + version: "1.8.17" +}); + +$.ui.intersect = function(draggable, droppable, toleranceMode) { + + if (!droppable.offset) return false; + + var x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width, + y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height; + var l = droppable.offset.left, r = l + droppable.proportions.width, + t = droppable.offset.top, b = t + droppable.proportions.height; + + switch (toleranceMode) { + case 'fit': + return (l <= x1 && x2 <= r + && t <= y1 && y2 <= b); + break; + case 'intersect': + return (l < x1 + (draggable.helperProportions.width / 2) // Right Half + && x2 - (draggable.helperProportions.width / 2) < r // Left Half + && t < y1 + (draggable.helperProportions.height / 2) // Bottom Half + && y2 - (draggable.helperProportions.height / 2) < b ); // Top Half + break; + case 'pointer': + var draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left), + draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top), + isOver = $.ui.isOver(draggableTop, draggableLeft, t, l, droppable.proportions.height, droppable.proportions.width); + return isOver; + break; + case 'touch': + return ( + (y1 >= t && y1 <= b) || // Top edge touching + (y2 >= t && y2 <= b) || // Bottom edge touching + (y1 < t && y2 > b) // Surrounded vertically + ) && ( + (x1 >= l && x1 <= r) || // Left edge touching + (x2 >= l && x2 <= r) || // Right edge touching + (x1 < l && x2 > r) // Surrounded horizontally + ); + break; + default: + return false; + break; + } + +}; + +/* + This manager tracks offsets of draggables and droppables +*/ +$.ui.ddmanager = { + current: null, + droppables: { 'default': [] }, + prepareOffsets: function(t, event) { + + var m = $.ui.ddmanager.droppables[t.options.scope] || []; + var type = event ? event.type : null; // workaround for #2317 + var list = (t.currentItem || t.element).find(":data(droppable)").andSelf(); + + droppablesLoop: for (var i = 0; i < m.length; i++) { + + if(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) continue; //No disabled and non-accepted + for (var j=0; j < list.length; j++) { if(list[j] == m[i].element[0]) { m[i].proportions.height = 0; continue droppablesLoop; } }; //Filter out elements in the current dragged item + m[i].visible = m[i].element.css("display") != "none"; if(!m[i].visible) continue; //If the element is not visible, continue + + if(type == "mousedown") m[i]._activate.call(m[i], event); //Activate the droppable if used directly from draggables + + m[i].offset = m[i].element.offset(); + m[i].proportions = { width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight }; + + } + + }, + drop: function(draggable, event) { + + var dropped = false; + $.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() { + + if(!this.options) return; + if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance)) + dropped = this._drop.call(this, event) || dropped; + + if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { + this.isout = 1; this.isover = 0; + this._deactivate.call(this, event); + } + + }); + return dropped; + + }, + dragStart: function( draggable, event ) { + //Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003) + draggable.element.parents( ":not(body,html)" ).bind( "scroll.droppable", function() { + if( !draggable.options.refreshPositions ) $.ui.ddmanager.prepareOffsets( draggable, event ); + }); + }, + drag: function(draggable, event) { + + //If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse. + if(draggable.options.refreshPositions) $.ui.ddmanager.prepareOffsets(draggable, event); + + //Run through all droppables and check their positions based on specific tolerance options + $.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() { + + if(this.options.disabled || this.greedyChild || !this.visible) return; + var intersects = $.ui.intersect(draggable, this, this.options.tolerance); + + var c = !intersects && this.isover == 1 ? 'isout' : (intersects && this.isover == 0 ? 'isover' : null); + if(!c) return; + + var parentInstance; + if (this.options.greedy) { + var parent = this.element.parents(':data(droppable):eq(0)'); + if (parent.length) { + parentInstance = $.data(parent[0], 'droppable'); + parentInstance.greedyChild = (c == 'isover' ? 1 : 0); + } + } + + // we just moved into a greedy child + if (parentInstance && c == 'isover') { + parentInstance['isover'] = 0; + parentInstance['isout'] = 1; + parentInstance._out.call(parentInstance, event); + } + + this[c] = 1; this[c == 'isout' ? 'isover' : 'isout'] = 0; + this[c == "isover" ? "_over" : "_out"].call(this, event); + + // we just moved out of a greedy child + if (parentInstance && c == 'isout') { + parentInstance['isout'] = 0; + parentInstance['isover'] = 1; + parentInstance._over.call(parentInstance, event); + } + }); + + }, + dragStop: function( draggable, event ) { + draggable.element.parents( ":not(body,html)" ).unbind( "scroll.droppable" ); + //Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003) + if( !draggable.options.refreshPositions ) $.ui.ddmanager.prepareOffsets( draggable, event ); + } +}; + +})(jQuery); +/* + * jQuery UI Resizable 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +$.widget("ui.resizable", $.ui.mouse, { + widgetEventPrefix: "resize", + options: { + alsoResize: false, + animate: false, + animateDuration: "slow", + animateEasing: "swing", + aspectRatio: false, + autoHide: false, + containment: false, + ghost: false, + grid: false, + handles: "e,s,se", + helper: false, + maxHeight: null, + maxWidth: null, + minHeight: 10, + minWidth: 10, + zIndex: 1000 + }, + _create: function() { + + var self = this, o = this.options; + this.element.addClass("ui-resizable"); + + $.extend(this, { + _aspectRatio: !!(o.aspectRatio), + aspectRatio: o.aspectRatio, + originalElement: this.element, + _proportionallyResizeElements: [], + _helper: o.helper || o.ghost || o.animate ? o.helper || 'ui-resizable-helper' : null + }); + + //Wrap the element if it cannot hold child nodes + if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) { + + //Opera fix for relative positioning + if (/relative/.test(this.element.css('position')) && $.browser.opera) + this.element.css({ position: 'relative', top: 'auto', left: 'auto' }); + + //Create a wrapper element and set the wrapper to the new current internal element + this.element.wrap( + $('
').css({ + position: this.element.css('position'), + width: this.element.outerWidth(), + height: this.element.outerHeight(), + top: this.element.css('top'), + left: this.element.css('left') + }) + ); + + //Overwrite the original this.element + this.element = this.element.parent().data( + "resizable", this.element.data('resizable') + ); + + this.elementIsWrapper = true; + + //Move margins to the wrapper + this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") }); + this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0}); + + //Prevent Safari textarea resize + this.originalResizeStyle = this.originalElement.css('resize'); + this.originalElement.css('resize', 'none'); + + //Push the actual element to our proportionallyResize internal array + this._proportionallyResizeElements.push(this.originalElement.css({ position: 'static', zoom: 1, display: 'block' })); + + // avoid IE jump (hard set the margin) + this.originalElement.css({ margin: this.originalElement.css('margin') }); + + // fix handlers offset + this._proportionallyResize(); + + } + + this.handles = o.handles || (!$('.ui-resizable-handle', this.element).length ? "e,s,se" : { n: '.ui-resizable-n', e: '.ui-resizable-e', s: '.ui-resizable-s', w: '.ui-resizable-w', se: '.ui-resizable-se', sw: '.ui-resizable-sw', ne: '.ui-resizable-ne', nw: '.ui-resizable-nw' }); + if(this.handles.constructor == String) { + + if(this.handles == 'all') this.handles = 'n,e,s,w,se,sw,ne,nw'; + var n = this.handles.split(","); this.handles = {}; + + for(var i = 0; i < n.length; i++) { + + var handle = $.trim(n[i]), hname = 'ui-resizable-'+handle; + var axis = $('
'); + + // increase zIndex of sw, se, ne, nw axis + //TODO : this modifies original option + if(/sw|se|ne|nw/.test(handle)) axis.css({ zIndex: ++o.zIndex }); + + //TODO : What's going on here? + if ('se' == handle) { + axis.addClass('ui-icon ui-icon-gripsmall-diagonal-se'); + }; + + //Insert into internal handles object and append to element + this.handles[handle] = '.ui-resizable-'+handle; + this.element.append(axis); + } + + } + + this._renderAxis = function(target) { + + target = target || this.element; + + for(var i in this.handles) { + + if(this.handles[i].constructor == String) + this.handles[i] = $(this.handles[i], this.element).show(); + + //Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls) + if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) { + + var axis = $(this.handles[i], this.element), padWrapper = 0; + + //Checking the correct pad and border + padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth(); + + //The padding type i have to apply... + var padPos = [ 'padding', + /ne|nw|n/.test(i) ? 'Top' : + /se|sw|s/.test(i) ? 'Bottom' : + /^e$/.test(i) ? 'Right' : 'Left' ].join(""); + + target.css(padPos, padWrapper); + + this._proportionallyResize(); + + } + + //TODO: What's that good for? There's not anything to be executed left + if(!$(this.handles[i]).length) + continue; + + } + }; + + //TODO: make renderAxis a prototype function + this._renderAxis(this.element); + + this._handles = $('.ui-resizable-handle', this.element) + .disableSelection(); + + //Matching axis name + this._handles.mouseover(function() { + if (!self.resizing) { + if (this.className) + var axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i); + //Axis, default = se + self.axis = axis && axis[1] ? axis[1] : 'se'; + } + }); + + //If we want to auto hide the elements + if (o.autoHide) { + this._handles.hide(); + $(this.element) + .addClass("ui-resizable-autohide") + .hover(function() { + if (o.disabled) return; + $(this).removeClass("ui-resizable-autohide"); + self._handles.show(); + }, + function(){ + if (o.disabled) return; + if (!self.resizing) { + $(this).addClass("ui-resizable-autohide"); + self._handles.hide(); + } + }); + } + + //Initialize the mouse interaction + this._mouseInit(); + + }, + + destroy: function() { + + this._mouseDestroy(); + + var _destroy = function(exp) { + $(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing") + .removeData("resizable").unbind(".resizable").find('.ui-resizable-handle').remove(); + }; + + //TODO: Unwrap at same DOM position + if (this.elementIsWrapper) { + _destroy(this.element); + var wrapper = this.element; + wrapper.after( + this.originalElement.css({ + position: wrapper.css('position'), + width: wrapper.outerWidth(), + height: wrapper.outerHeight(), + top: wrapper.css('top'), + left: wrapper.css('left') + }) + ).remove(); + } + + this.originalElement.css('resize', this.originalResizeStyle); + _destroy(this.originalElement); + + return this; + }, + + _mouseCapture: function(event) { + var handle = false; + for (var i in this.handles) { + if ($(this.handles[i])[0] == event.target) { + handle = true; + } + } + + return !this.options.disabled && handle; + }, + + _mouseStart: function(event) { + + var o = this.options, iniPos = this.element.position(), el = this.element; + + this.resizing = true; + this.documentScroll = { top: $(document).scrollTop(), left: $(document).scrollLeft() }; + + // bugfix for http://dev.jquery.com/ticket/1749 + if (el.is('.ui-draggable') || (/absolute/).test(el.css('position'))) { + el.css({ position: 'absolute', top: iniPos.top, left: iniPos.left }); + } + + //Opera fixing relative position + if ($.browser.opera && (/relative/).test(el.css('position'))) + el.css({ position: 'relative', top: 'auto', left: 'auto' }); + + this._renderProxy(); + + var curleft = num(this.helper.css('left')), curtop = num(this.helper.css('top')); + + if (o.containment) { + curleft += $(o.containment).scrollLeft() || 0; + curtop += $(o.containment).scrollTop() || 0; + } + + //Store needed variables + this.offset = this.helper.offset(); + this.position = { left: curleft, top: curtop }; + this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() }; + this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() }; + this.originalPosition = { left: curleft, top: curtop }; + this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() }; + this.originalMousePosition = { left: event.pageX, top: event.pageY }; + + //Aspect Ratio + this.aspectRatio = (typeof o.aspectRatio == 'number') ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1); + + var cursor = $('.ui-resizable-' + this.axis).css('cursor'); + $('body').css('cursor', cursor == 'auto' ? this.axis + '-resize' : cursor); + + el.addClass("ui-resizable-resizing"); + this._propagate("start", event); + return true; + }, + + _mouseDrag: function(event) { + + //Increase performance, avoid regex + var el = this.helper, o = this.options, props = {}, + self = this, smp = this.originalMousePosition, a = this.axis; + + var dx = (event.pageX-smp.left)||0, dy = (event.pageY-smp.top)||0; + var trigger = this._change[a]; + if (!trigger) return false; + + // Calculate the attrs that will be change + var data = trigger.apply(this, [event, dx, dy]), ie6 = $.browser.msie && $.browser.version < 7, csdif = this.sizeDiff; + + // Put this in the mouseDrag handler since the user can start pressing shift while resizing + this._updateVirtualBoundaries(event.shiftKey); + if (this._aspectRatio || event.shiftKey) + data = this._updateRatio(data, event); + + data = this._respectSize(data, event); + + // plugins callbacks need to be called first + this._propagate("resize", event); + + el.css({ + top: this.position.top + "px", left: this.position.left + "px", + width: this.size.width + "px", height: this.size.height + "px" + }); + + if (!this._helper && this._proportionallyResizeElements.length) + this._proportionallyResize(); + + this._updateCache(data); + + // calling the user callback at the end + this._trigger('resize', event, this.ui()); + + return false; + }, + + _mouseStop: function(event) { + + this.resizing = false; + var o = this.options, self = this; + + if(this._helper) { + var pr = this._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName), + soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height, + soffsetw = ista ? 0 : self.sizeDiff.width; + + var s = { width: (self.helper.width() - soffsetw), height: (self.helper.height() - soffseth) }, + left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null, + top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null; + + if (!o.animate) + this.element.css($.extend(s, { top: top, left: left })); + + self.helper.height(self.size.height); + self.helper.width(self.size.width); + + if (this._helper && !o.animate) this._proportionallyResize(); + } + + $('body').css('cursor', 'auto'); + + this.element.removeClass("ui-resizable-resizing"); + + this._propagate("stop", event); + + if (this._helper) this.helper.remove(); + return false; + + }, + + _updateVirtualBoundaries: function(forceAspectRatio) { + var o = this.options, pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b; + + b = { + minWidth: isNumber(o.minWidth) ? o.minWidth : 0, + maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity, + minHeight: isNumber(o.minHeight) ? o.minHeight : 0, + maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity + }; + + if(this._aspectRatio || forceAspectRatio) { + // We want to create an enclosing box whose aspect ration is the requested one + // First, compute the "projected" size for each dimension based on the aspect ratio and other dimension + pMinWidth = b.minHeight * this.aspectRatio; + pMinHeight = b.minWidth / this.aspectRatio; + pMaxWidth = b.maxHeight * this.aspectRatio; + pMaxHeight = b.maxWidth / this.aspectRatio; + + if(pMinWidth > b.minWidth) b.minWidth = pMinWidth; + if(pMinHeight > b.minHeight) b.minHeight = pMinHeight; + if(pMaxWidth < b.maxWidth) b.maxWidth = pMaxWidth; + if(pMaxHeight < b.maxHeight) b.maxHeight = pMaxHeight; + } + this._vBoundaries = b; + }, + + _updateCache: function(data) { + var o = this.options; + this.offset = this.helper.offset(); + if (isNumber(data.left)) this.position.left = data.left; + if (isNumber(data.top)) this.position.top = data.top; + if (isNumber(data.height)) this.size.height = data.height; + if (isNumber(data.width)) this.size.width = data.width; + }, + + _updateRatio: function(data, event) { + + var o = this.options, cpos = this.position, csize = this.size, a = this.axis; + + if (isNumber(data.height)) data.width = (data.height * this.aspectRatio); + else if (isNumber(data.width)) data.height = (data.width / this.aspectRatio); + + if (a == 'sw') { + data.left = cpos.left + (csize.width - data.width); + data.top = null; + } + if (a == 'nw') { + data.top = cpos.top + (csize.height - data.height); + data.left = cpos.left + (csize.width - data.width); + } + + return data; + }, + + _respectSize: function(data, event) { + + var el = this.helper, o = this._vBoundaries, pRatio = this._aspectRatio || event.shiftKey, a = this.axis, + ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height), + isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height); + + if (isminw) data.width = o.minWidth; + if (isminh) data.height = o.minHeight; + if (ismaxw) data.width = o.maxWidth; + if (ismaxh) data.height = o.maxHeight; + + var dw = this.originalPosition.left + this.originalSize.width, dh = this.position.top + this.size.height; + var cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a); + + if (isminw && cw) data.left = dw - o.minWidth; + if (ismaxw && cw) data.left = dw - o.maxWidth; + if (isminh && ch) data.top = dh - o.minHeight; + if (ismaxh && ch) data.top = dh - o.maxHeight; + + // fixing jump error on top/left - bug #2330 + var isNotwh = !data.width && !data.height; + if (isNotwh && !data.left && data.top) data.top = null; + else if (isNotwh && !data.top && data.left) data.left = null; + + return data; + }, + + _proportionallyResize: function() { + + var o = this.options; + if (!this._proportionallyResizeElements.length) return; + var element = this.helper || this.element; + + for (var i=0; i < this._proportionallyResizeElements.length; i++) { + + var prel = this._proportionallyResizeElements[i]; + + if (!this.borderDif) { + var b = [prel.css('borderTopWidth'), prel.css('borderRightWidth'), prel.css('borderBottomWidth'), prel.css('borderLeftWidth')], + p = [prel.css('paddingTop'), prel.css('paddingRight'), prel.css('paddingBottom'), prel.css('paddingLeft')]; + + this.borderDif = $.map(b, function(v, i) { + var border = parseInt(v,10)||0, padding = parseInt(p[i],10)||0; + return border + padding; + }); + } + + if ($.browser.msie && !(!($(element).is(':hidden') || $(element).parents(':hidden').length))) + continue; + + prel.css({ + height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0, + width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0 + }); + + }; + + }, + + _renderProxy: function() { + + var el = this.element, o = this.options; + this.elementOffset = el.offset(); + + if(this._helper) { + + this.helper = this.helper || $('
'); + + // fix ie6 offset TODO: This seems broken + var ie6 = $.browser.msie && $.browser.version < 7, ie6offset = (ie6 ? 1 : 0), + pxyoffset = ( ie6 ? 2 : -1 ); + + this.helper.addClass(this._helper).css({ + width: this.element.outerWidth() + pxyoffset, + height: this.element.outerHeight() + pxyoffset, + position: 'absolute', + left: this.elementOffset.left - ie6offset +'px', + top: this.elementOffset.top - ie6offset +'px', + zIndex: ++o.zIndex //TODO: Don't modify option + }); + + this.helper + .appendTo("body") + .disableSelection(); + + } else { + this.helper = this.element; + } + + }, + + _change: { + e: function(event, dx, dy) { + return { width: this.originalSize.width + dx }; + }, + w: function(event, dx, dy) { + var o = this.options, cs = this.originalSize, sp = this.originalPosition; + return { left: sp.left + dx, width: cs.width - dx }; + }, + n: function(event, dx, dy) { + var o = this.options, cs = this.originalSize, sp = this.originalPosition; + return { top: sp.top + dy, height: cs.height - dy }; + }, + s: function(event, dx, dy) { + return { height: this.originalSize.height + dy }; + }, + se: function(event, dx, dy) { + return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy])); + }, + sw: function(event, dx, dy) { + return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy])); + }, + ne: function(event, dx, dy) { + return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy])); + }, + nw: function(event, dx, dy) { + return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy])); + } + }, + + _propagate: function(n, event) { + $.ui.plugin.call(this, n, [event, this.ui()]); + (n != "resize" && this._trigger(n, event, this.ui())); + }, + + plugins: {}, + + ui: function() { + return { + originalElement: this.originalElement, + element: this.element, + helper: this.helper, + position: this.position, + size: this.size, + originalSize: this.originalSize, + originalPosition: this.originalPosition + }; + } + +}); + +$.extend($.ui.resizable, { + version: "1.8.17" +}); + +/* + * Resizable Extensions + */ + +$.ui.plugin.add("resizable", "alsoResize", { + + start: function (event, ui) { + var self = $(this).data("resizable"), o = self.options; + + var _store = function (exp) { + $(exp).each(function() { + var el = $(this); + el.data("resizable-alsoresize", { + width: parseInt(el.width(), 10), height: parseInt(el.height(), 10), + left: parseInt(el.css('left'), 10), top: parseInt(el.css('top'), 10), + position: el.css('position') // to reset Opera on stop() + }); + }); + }; + + if (typeof(o.alsoResize) == 'object' && !o.alsoResize.parentNode) { + if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); } + else { $.each(o.alsoResize, function (exp) { _store(exp); }); } + }else{ + _store(o.alsoResize); + } + }, + + resize: function (event, ui) { + var self = $(this).data("resizable"), o = self.options, os = self.originalSize, op = self.originalPosition; + + var delta = { + height: (self.size.height - os.height) || 0, width: (self.size.width - os.width) || 0, + top: (self.position.top - op.top) || 0, left: (self.position.left - op.left) || 0 + }, + + _alsoResize = function (exp, c) { + $(exp).each(function() { + var el = $(this), start = $(this).data("resizable-alsoresize"), style = {}, + css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ['width', 'height'] : ['width', 'height', 'top', 'left']; + + $.each(css, function (i, prop) { + var sum = (start[prop]||0) + (delta[prop]||0); + if (sum && sum >= 0) + style[prop] = sum || null; + }); + + // Opera fixing relative position + if ($.browser.opera && /relative/.test(el.css('position'))) { + self._revertToRelativePosition = true; + el.css({ position: 'absolute', top: 'auto', left: 'auto' }); + } + + el.css(style); + }); + }; + + if (typeof(o.alsoResize) == 'object' && !o.alsoResize.nodeType) { + $.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); }); + }else{ + _alsoResize(o.alsoResize); + } + }, + + stop: function (event, ui) { + var self = $(this).data("resizable"), o = self.options; + + var _reset = function (exp) { + $(exp).each(function() { + var el = $(this); + // reset position for Opera - no need to verify it was changed + el.css({ position: el.data("resizable-alsoresize").position }); + }); + }; + + if (self._revertToRelativePosition) { + self._revertToRelativePosition = false; + if (typeof(o.alsoResize) == 'object' && !o.alsoResize.nodeType) { + $.each(o.alsoResize, function (exp) { _reset(exp); }); + }else{ + _reset(o.alsoResize); + } + } + + $(this).removeData("resizable-alsoresize"); + } +}); + +$.ui.plugin.add("resizable", "animate", { + + stop: function(event, ui) { + var self = $(this).data("resizable"), o = self.options; + + var pr = self._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName), + soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height, + soffsetw = ista ? 0 : self.sizeDiff.width; + + var style = { width: (self.size.width - soffsetw), height: (self.size.height - soffseth) }, + left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null, + top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null; + + self.element.animate( + $.extend(style, top && left ? { top: top, left: left } : {}), { + duration: o.animateDuration, + easing: o.animateEasing, + step: function() { + + var data = { + width: parseInt(self.element.css('width'), 10), + height: parseInt(self.element.css('height'), 10), + top: parseInt(self.element.css('top'), 10), + left: parseInt(self.element.css('left'), 10) + }; + + if (pr && pr.length) $(pr[0]).css({ width: data.width, height: data.height }); + + // propagating resize, and updating values for each animation step + self._updateCache(data); + self._propagate("resize", event); + + } + } + ); + } + +}); + +$.ui.plugin.add("resizable", "containment", { + + start: function(event, ui) { + var self = $(this).data("resizable"), o = self.options, el = self.element; + var oc = o.containment, ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc; + if (!ce) return; + + self.containerElement = $(ce); + + if (/document/.test(oc) || oc == document) { + self.containerOffset = { left: 0, top: 0 }; + self.containerPosition = { left: 0, top: 0 }; + + self.parentData = { + element: $(document), left: 0, top: 0, + width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight + }; + } + + // i'm a node, so compute top, left, right, bottom + else { + var element = $(ce), p = []; + $([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); }); + + self.containerOffset = element.offset(); + self.containerPosition = element.position(); + self.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) }; + + var co = self.containerOffset, ch = self.containerSize.height, cw = self.containerSize.width, + width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw ), height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch); + + self.parentData = { + element: ce, left: co.left, top: co.top, width: width, height: height + }; + } + }, + + resize: function(event, ui) { + var self = $(this).data("resizable"), o = self.options, + ps = self.containerSize, co = self.containerOffset, cs = self.size, cp = self.position, + pRatio = self._aspectRatio || event.shiftKey, cop = { top:0, left:0 }, ce = self.containerElement; + + if (ce[0] != document && (/static/).test(ce.css('position'))) cop = co; + + if (cp.left < (self._helper ? co.left : 0)) { + self.size.width = self.size.width + (self._helper ? (self.position.left - co.left) : (self.position.left - cop.left)); + if (pRatio) self.size.height = self.size.width / o.aspectRatio; + self.position.left = o.helper ? co.left : 0; + } + + if (cp.top < (self._helper ? co.top : 0)) { + self.size.height = self.size.height + (self._helper ? (self.position.top - co.top) : self.position.top); + if (pRatio) self.size.width = self.size.height * o.aspectRatio; + self.position.top = self._helper ? co.top : 0; + } + + self.offset.left = self.parentData.left+self.position.left; + self.offset.top = self.parentData.top+self.position.top; + + var woset = Math.abs( (self._helper ? self.offset.left - cop.left : (self.offset.left - cop.left)) + self.sizeDiff.width ), + hoset = Math.abs( (self._helper ? self.offset.top - cop.top : (self.offset.top - co.top)) + self.sizeDiff.height ); + + var isParent = self.containerElement.get(0) == self.element.parent().get(0), + isOffsetRelative = /relative|absolute/.test(self.containerElement.css('position')); + + if(isParent && isOffsetRelative) woset -= self.parentData.left; + + if (woset + self.size.width >= self.parentData.width) { + self.size.width = self.parentData.width - woset; + if (pRatio) self.size.height = self.size.width / self.aspectRatio; + } + + if (hoset + self.size.height >= self.parentData.height) { + self.size.height = self.parentData.height - hoset; + if (pRatio) self.size.width = self.size.height * self.aspectRatio; + } + }, + + stop: function(event, ui){ + var self = $(this).data("resizable"), o = self.options, cp = self.position, + co = self.containerOffset, cop = self.containerPosition, ce = self.containerElement; + + var helper = $(self.helper), ho = helper.offset(), w = helper.outerWidth() - self.sizeDiff.width, h = helper.outerHeight() - self.sizeDiff.height; + + if (self._helper && !o.animate && (/relative/).test(ce.css('position'))) + $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h }); + + if (self._helper && !o.animate && (/static/).test(ce.css('position'))) + $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h }); + + } +}); + +$.ui.plugin.add("resizable", "ghost", { + + start: function(event, ui) { + + var self = $(this).data("resizable"), o = self.options, cs = self.size; + + self.ghost = self.originalElement.clone(); + self.ghost + .css({ opacity: .25, display: 'block', position: 'relative', height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 }) + .addClass('ui-resizable-ghost') + .addClass(typeof o.ghost == 'string' ? o.ghost : ''); + + self.ghost.appendTo(self.helper); + + }, + + resize: function(event, ui){ + var self = $(this).data("resizable"), o = self.options; + if (self.ghost) self.ghost.css({ position: 'relative', height: self.size.height, width: self.size.width }); + }, + + stop: function(event, ui){ + var self = $(this).data("resizable"), o = self.options; + if (self.ghost && self.helper) self.helper.get(0).removeChild(self.ghost.get(0)); + } + +}); + +$.ui.plugin.add("resizable", "grid", { + + resize: function(event, ui) { + var self = $(this).data("resizable"), o = self.options, cs = self.size, os = self.originalSize, op = self.originalPosition, a = self.axis, ratio = o._aspectRatio || event.shiftKey; + o.grid = typeof o.grid == "number" ? [o.grid, o.grid] : o.grid; + var ox = Math.round((cs.width - os.width) / (o.grid[0]||1)) * (o.grid[0]||1), oy = Math.round((cs.height - os.height) / (o.grid[1]||1)) * (o.grid[1]||1); + + if (/^(se|s|e)$/.test(a)) { + self.size.width = os.width + ox; + self.size.height = os.height + oy; + } + else if (/^(ne)$/.test(a)) { + self.size.width = os.width + ox; + self.size.height = os.height + oy; + self.position.top = op.top - oy; + } + else if (/^(sw)$/.test(a)) { + self.size.width = os.width + ox; + self.size.height = os.height + oy; + self.position.left = op.left - ox; + } + else { + self.size.width = os.width + ox; + self.size.height = os.height + oy; + self.position.top = op.top - oy; + self.position.left = op.left - ox; + } + } + +}); + +var num = function(v) { + return parseInt(v, 10) || 0; +}; + +var isNumber = function(value) { + return !isNaN(parseInt(value, 10)); +}; + +})(jQuery); +/* + * jQuery UI Selectable 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Selectables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +$.widget("ui.selectable", $.ui.mouse, { + options: { + appendTo: 'body', + autoRefresh: true, + distance: 0, + filter: '*', + tolerance: 'touch' + }, + _create: function() { + var self = this; + + this.element.addClass("ui-selectable"); + + this.dragged = false; + + // cache selectee children based on filter + var selectees; + this.refresh = function() { + selectees = $(self.options.filter, self.element[0]); + selectees.addClass("ui-selectee"); + selectees.each(function() { + var $this = $(this); + var pos = $this.offset(); + $.data(this, "selectable-item", { + element: this, + $element: $this, + left: pos.left, + top: pos.top, + right: pos.left + $this.outerWidth(), + bottom: pos.top + $this.outerHeight(), + startselected: false, + selected: $this.hasClass('ui-selected'), + selecting: $this.hasClass('ui-selecting'), + unselecting: $this.hasClass('ui-unselecting') + }); + }); + }; + this.refresh(); + + this.selectees = selectees.addClass("ui-selectee"); + + this._mouseInit(); + + this.helper = $("
"); + }, + + destroy: function() { + this.selectees + .removeClass("ui-selectee") + .removeData("selectable-item"); + this.element + .removeClass("ui-selectable ui-selectable-disabled") + .removeData("selectable") + .unbind(".selectable"); + this._mouseDestroy(); + + return this; + }, + + _mouseStart: function(event) { + var self = this; + + this.opos = [event.pageX, event.pageY]; + + if (this.options.disabled) + return; + + var options = this.options; + + this.selectees = $(options.filter, this.element[0]); + + this._trigger("start", event); + + $(options.appendTo).append(this.helper); + // position helper (lasso) + this.helper.css({ + "left": event.clientX, + "top": event.clientY, + "width": 0, + "height": 0 + }); + + if (options.autoRefresh) { + this.refresh(); + } + + this.selectees.filter('.ui-selected').each(function() { + var selectee = $.data(this, "selectable-item"); + selectee.startselected = true; + if (!event.metaKey && !event.ctrlKey) { + selectee.$element.removeClass('ui-selected'); + selectee.selected = false; + selectee.$element.addClass('ui-unselecting'); + selectee.unselecting = true; + // selectable UNSELECTING callback + self._trigger("unselecting", event, { + unselecting: selectee.element + }); + } + }); + + $(event.target).parents().andSelf().each(function() { + var selectee = $.data(this, "selectable-item"); + if (selectee) { + var doSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass('ui-selected'); + selectee.$element + .removeClass(doSelect ? "ui-unselecting" : "ui-selected") + .addClass(doSelect ? "ui-selecting" : "ui-unselecting"); + selectee.unselecting = !doSelect; + selectee.selecting = doSelect; + selectee.selected = doSelect; + // selectable (UN)SELECTING callback + if (doSelect) { + self._trigger("selecting", event, { + selecting: selectee.element + }); + } else { + self._trigger("unselecting", event, { + unselecting: selectee.element + }); + } + return false; + } + }); + + }, + + _mouseDrag: function(event) { + var self = this; + this.dragged = true; + + if (this.options.disabled) + return; + + var options = this.options; + + var x1 = this.opos[0], y1 = this.opos[1], x2 = event.pageX, y2 = event.pageY; + if (x1 > x2) { var tmp = x2; x2 = x1; x1 = tmp; } + if (y1 > y2) { var tmp = y2; y2 = y1; y1 = tmp; } + this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1}); + + this.selectees.each(function() { + var selectee = $.data(this, "selectable-item"); + //prevent helper from being selected if appendTo: selectable + if (!selectee || selectee.element == self.element[0]) + return; + var hit = false; + if (options.tolerance == 'touch') { + hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) ); + } else if (options.tolerance == 'fit') { + hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2); + } + + if (hit) { + // SELECT + if (selectee.selected) { + selectee.$element.removeClass('ui-selected'); + selectee.selected = false; + } + if (selectee.unselecting) { + selectee.$element.removeClass('ui-unselecting'); + selectee.unselecting = false; + } + if (!selectee.selecting) { + selectee.$element.addClass('ui-selecting'); + selectee.selecting = true; + // selectable SELECTING callback + self._trigger("selecting", event, { + selecting: selectee.element + }); + } + } else { + // UNSELECT + if (selectee.selecting) { + if ((event.metaKey || event.ctrlKey) && selectee.startselected) { + selectee.$element.removeClass('ui-selecting'); + selectee.selecting = false; + selectee.$element.addClass('ui-selected'); + selectee.selected = true; + } else { + selectee.$element.removeClass('ui-selecting'); + selectee.selecting = false; + if (selectee.startselected) { + selectee.$element.addClass('ui-unselecting'); + selectee.unselecting = true; + } + // selectable UNSELECTING callback + self._trigger("unselecting", event, { + unselecting: selectee.element + }); + } + } + if (selectee.selected) { + if (!event.metaKey && !event.ctrlKey && !selectee.startselected) { + selectee.$element.removeClass('ui-selected'); + selectee.selected = false; + + selectee.$element.addClass('ui-unselecting'); + selectee.unselecting = true; + // selectable UNSELECTING callback + self._trigger("unselecting", event, { + unselecting: selectee.element + }); + } + } + } + }); + + return false; + }, + + _mouseStop: function(event) { + var self = this; + + this.dragged = false; + + var options = this.options; + + $('.ui-unselecting', this.element[0]).each(function() { + var selectee = $.data(this, "selectable-item"); + selectee.$element.removeClass('ui-unselecting'); + selectee.unselecting = false; + selectee.startselected = false; + self._trigger("unselected", event, { + unselected: selectee.element + }); + }); + $('.ui-selecting', this.element[0]).each(function() { + var selectee = $.data(this, "selectable-item"); + selectee.$element.removeClass('ui-selecting').addClass('ui-selected'); + selectee.selecting = false; + selectee.selected = true; + selectee.startselected = true; + self._trigger("selected", event, { + selected: selectee.element + }); + }); + this._trigger("stop", event); + + this.helper.remove(); + + return false; + } + +}); + +$.extend($.ui.selectable, { + version: "1.8.17" +}); + +})(jQuery); +/* + * jQuery UI Sortable 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Sortables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +$.widget("ui.sortable", $.ui.mouse, { + widgetEventPrefix: "sort", + options: { + appendTo: "parent", + axis: false, + connectWith: false, + containment: false, + cursor: 'auto', + cursorAt: false, + dropOnEmpty: true, + forcePlaceholderSize: false, + forceHelperSize: false, + grid: false, + handle: false, + helper: "original", + items: '> *', + opacity: false, + placeholder: false, + revert: false, + scroll: true, + scrollSensitivity: 20, + scrollSpeed: 20, + scope: "default", + tolerance: "intersect", + zIndex: 1000 + }, + _create: function() { + + var o = this.options; + this.containerCache = {}; + this.element.addClass("ui-sortable"); + + //Get the items + this.refresh(); + + //Let's determine if the items are being displayed horizontally + this.floating = this.items.length ? o.axis === 'x' || (/left|right/).test(this.items[0].item.css('float')) || (/inline|table-cell/).test(this.items[0].item.css('display')) : false; + + //Let's determine the parent's offset + this.offset = this.element.offset(); + + //Initialize mouse events for interaction + this._mouseInit(); + + }, + + destroy: function() { + this.element + .removeClass("ui-sortable ui-sortable-disabled"); + this._mouseDestroy(); + + for ( var i = this.items.length - 1; i >= 0; i-- ) + this.items[i].item.removeData(this.widgetName + "-item"); + + return this; + }, + + _setOption: function(key, value){ + if ( key === "disabled" ) { + this.options[ key ] = value; + + this.widget() + [ value ? "addClass" : "removeClass"]( "ui-sortable-disabled" ); + } else { + // Don't call widget base _setOption for disable as it adds ui-state-disabled class + $.Widget.prototype._setOption.apply(this, arguments); + } + }, + + _mouseCapture: function(event, overrideHandle) { + var that = this; + + if (this.reverting) { + return false; + } + + if(this.options.disabled || this.options.type == 'static') return false; + + //We have to refresh the items data once first + this._refreshItems(event); + + //Find out if the clicked node (or one of its parents) is a actual item in this.items + var currentItem = null, self = this, nodes = $(event.target).parents().each(function() { + if($.data(this, that.widgetName + '-item') == self) { + currentItem = $(this); + return false; + } + }); + if($.data(event.target, that.widgetName + '-item') == self) currentItem = $(event.target); + + if(!currentItem) return false; + if(this.options.handle && !overrideHandle) { + var validHandle = false; + + $(this.options.handle, currentItem).find("*").andSelf().each(function() { if(this == event.target) validHandle = true; }); + if(!validHandle) return false; + } + + this.currentItem = currentItem; + this._removeCurrentsFromItems(); + return true; + + }, + + _mouseStart: function(event, overrideHandle, noActivation) { + + var o = this.options, self = this; + this.currentContainer = this; + + //We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture + this.refreshPositions(); + + //Create and append the visible helper + this.helper = this._createHelper(event); + + //Cache the helper size + this._cacheHelperProportions(); + + /* + * - Position generation - + * This block generates everything position related - it's the core of draggables. + */ + + //Cache the margins of the original element + this._cacheMargins(); + + //Get the next scrolling parent + this.scrollParent = this.helper.scrollParent(); + + //The element's absolute position on the page minus margins + this.offset = this.currentItem.offset(); + this.offset = { + top: this.offset.top - this.margins.top, + left: this.offset.left - this.margins.left + }; + + // Only after we got the offset, we can change the helper's position to absolute + // TODO: Still need to figure out a way to make relative sorting possible + this.helper.css("position", "absolute"); + this.cssPosition = this.helper.css("position"); + + $.extend(this.offset, { + click: { //Where the click happened, relative to the element + left: event.pageX - this.offset.left, + top: event.pageY - this.offset.top + }, + parent: this._getParentOffset(), + relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper + }); + + //Generate the original position + this.originalPosition = this._generatePosition(event); + this.originalPageX = event.pageX; + this.originalPageY = event.pageY; + + //Adjust the mouse offset relative to the helper if 'cursorAt' is supplied + (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt)); + + //Cache the former DOM position + this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] }; + + //If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way + if(this.helper[0] != this.currentItem[0]) { + this.currentItem.hide(); + } + + //Create the placeholder + this._createPlaceholder(); + + //Set a containment if given in the options + if(o.containment) + this._setContainment(); + + if(o.cursor) { // cursor option + if ($('body').css("cursor")) this._storedCursor = $('body').css("cursor"); + $('body').css("cursor", o.cursor); + } + + if(o.opacity) { // opacity option + if (this.helper.css("opacity")) this._storedOpacity = this.helper.css("opacity"); + this.helper.css("opacity", o.opacity); + } + + if(o.zIndex) { // zIndex option + if (this.helper.css("zIndex")) this._storedZIndex = this.helper.css("zIndex"); + this.helper.css("zIndex", o.zIndex); + } + + //Prepare scrolling + if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') + this.overflowOffset = this.scrollParent.offset(); + + //Call callbacks + this._trigger("start", event, this._uiHash()); + + //Recache the helper size + if(!this._preserveHelperProportions) + this._cacheHelperProportions(); + + + //Post 'activate' events to possible containers + if(!noActivation) { + for (var i = this.containers.length - 1; i >= 0; i--) { this.containers[i]._trigger("activate", event, self._uiHash(this)); } + } + + //Prepare possible droppables + if($.ui.ddmanager) + $.ui.ddmanager.current = this; + + if ($.ui.ddmanager && !o.dropBehaviour) + $.ui.ddmanager.prepareOffsets(this, event); + + this.dragging = true; + + this.helper.addClass("ui-sortable-helper"); + this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position + return true; + + }, + + _mouseDrag: function(event) { + + //Compute the helpers position + this.position = this._generatePosition(event); + this.positionAbs = this._convertPositionTo("absolute"); + + if (!this.lastPositionAbs) { + this.lastPositionAbs = this.positionAbs; + } + + //Do scrolling + if(this.options.scroll) { + var o = this.options, scrolled = false; + if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') { + + if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) + this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed; + else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) + this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed; + + if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) + this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed; + else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) + this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed; + + } else { + + if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) + scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); + else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) + scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); + + if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) + scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); + else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) + scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); + + } + + if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) + $.ui.ddmanager.prepareOffsets(this, event); + } + + //Regenerate the absolute position used for position checks + this.positionAbs = this._convertPositionTo("absolute"); + + //Set the helper position + if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px'; + if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px'; + + //Rearrange + for (var i = this.items.length - 1; i >= 0; i--) { + + //Cache variables and intersection, continue if no intersection + var item = this.items[i], itemElement = item.item[0], intersection = this._intersectsWithPointer(item); + if (!intersection) continue; + + if(itemElement != this.currentItem[0] //cannot intersect with itself + && this.placeholder[intersection == 1 ? "next" : "prev"]()[0] != itemElement //no useless actions that have been done before + && !$.ui.contains(this.placeholder[0], itemElement) //no action if the item moved is the parent of the item checked + && (this.options.type == 'semi-dynamic' ? !$.ui.contains(this.element[0], itemElement) : true) + //&& itemElement.parentNode == this.placeholder[0].parentNode // only rearrange items within the same container + ) { + + this.direction = intersection == 1 ? "down" : "up"; + + if (this.options.tolerance == "pointer" || this._intersectsWithSides(item)) { + this._rearrange(event, item); + } else { + break; + } + + this._trigger("change", event, this._uiHash()); + break; + } + } + + //Post events to containers + this._contactContainers(event); + + //Interconnect with droppables + if($.ui.ddmanager) $.ui.ddmanager.drag(this, event); + + //Call callbacks + this._trigger('sort', event, this._uiHash()); + + this.lastPositionAbs = this.positionAbs; + return false; + + }, + + _mouseStop: function(event, noPropagation) { + + if(!event) return; + + //If we are using droppables, inform the manager about the drop + if ($.ui.ddmanager && !this.options.dropBehaviour) + $.ui.ddmanager.drop(this, event); + + if(this.options.revert) { + var self = this; + var cur = self.placeholder.offset(); + + self.reverting = true; + + $(this.helper).animate({ + left: cur.left - this.offset.parent.left - self.margins.left + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft), + top: cur.top - this.offset.parent.top - self.margins.top + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop) + }, parseInt(this.options.revert, 10) || 500, function() { + self._clear(event); + }); + } else { + this._clear(event, noPropagation); + } + + return false; + + }, + + cancel: function() { + + var self = this; + + if(this.dragging) { + + this._mouseUp({ target: null }); + + if(this.options.helper == "original") + this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"); + else + this.currentItem.show(); + + //Post deactivating events to containers + for (var i = this.containers.length - 1; i >= 0; i--){ + this.containers[i]._trigger("deactivate", null, self._uiHash(this)); + if(this.containers[i].containerCache.over) { + this.containers[i]._trigger("out", null, self._uiHash(this)); + this.containers[i].containerCache.over = 0; + } + } + + } + + if (this.placeholder) { + //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node! + if(this.placeholder[0].parentNode) this.placeholder[0].parentNode.removeChild(this.placeholder[0]); + if(this.options.helper != "original" && this.helper && this.helper[0].parentNode) this.helper.remove(); + + $.extend(this, { + helper: null, + dragging: false, + reverting: false, + _noFinalSort: null + }); + + if(this.domPosition.prev) { + $(this.domPosition.prev).after(this.currentItem); + } else { + $(this.domPosition.parent).prepend(this.currentItem); + } + } + + return this; + + }, + + serialize: function(o) { + + var items = this._getItemsAsjQuery(o && o.connected); + var str = []; o = o || {}; + + $(items).each(function() { + var res = ($(o.item || this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/)); + if(res) str.push((o.key || res[1]+'[]')+'='+(o.key && o.expression ? res[1] : res[2])); + }); + + if(!str.length && o.key) { + str.push(o.key + '='); + } + + return str.join('&'); + + }, + + toArray: function(o) { + + var items = this._getItemsAsjQuery(o && o.connected); + var ret = []; o = o || {}; + + items.each(function() { ret.push($(o.item || this).attr(o.attribute || 'id') || ''); }); + return ret; + + }, + + /* Be careful with the following core functions */ + _intersectsWith: function(item) { + + var x1 = this.positionAbs.left, + x2 = x1 + this.helperProportions.width, + y1 = this.positionAbs.top, + y2 = y1 + this.helperProportions.height; + + var l = item.left, + r = l + item.width, + t = item.top, + b = t + item.height; + + var dyClick = this.offset.click.top, + dxClick = this.offset.click.left; + + var isOverElement = (y1 + dyClick) > t && (y1 + dyClick) < b && (x1 + dxClick) > l && (x1 + dxClick) < r; + + if( this.options.tolerance == "pointer" + || this.options.forcePointerForContainers + || (this.options.tolerance != "pointer" && this.helperProportions[this.floating ? 'width' : 'height'] > item[this.floating ? 'width' : 'height']) + ) { + return isOverElement; + } else { + + return (l < x1 + (this.helperProportions.width / 2) // Right Half + && x2 - (this.helperProportions.width / 2) < r // Left Half + && t < y1 + (this.helperProportions.height / 2) // Bottom Half + && y2 - (this.helperProportions.height / 2) < b ); // Top Half + + } + }, + + _intersectsWithPointer: function(item) { + + var isOverElementHeight = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height), + isOverElementWidth = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width), + isOverElement = isOverElementHeight && isOverElementWidth, + verticalDirection = this._getDragVerticalDirection(), + horizontalDirection = this._getDragHorizontalDirection(); + + if (!isOverElement) + return false; + + return this.floating ? + ( ((horizontalDirection && horizontalDirection == "right") || verticalDirection == "down") ? 2 : 1 ) + : ( verticalDirection && (verticalDirection == "down" ? 2 : 1) ); + + }, + + _intersectsWithSides: function(item) { + + var isOverBottomHalf = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height), + isOverRightHalf = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width), + verticalDirection = this._getDragVerticalDirection(), + horizontalDirection = this._getDragHorizontalDirection(); + + if (this.floating && horizontalDirection) { + return ((horizontalDirection == "right" && isOverRightHalf) || (horizontalDirection == "left" && !isOverRightHalf)); + } else { + return verticalDirection && ((verticalDirection == "down" && isOverBottomHalf) || (verticalDirection == "up" && !isOverBottomHalf)); + } + + }, + + _getDragVerticalDirection: function() { + var delta = this.positionAbs.top - this.lastPositionAbs.top; + return delta != 0 && (delta > 0 ? "down" : "up"); + }, + + _getDragHorizontalDirection: function() { + var delta = this.positionAbs.left - this.lastPositionAbs.left; + return delta != 0 && (delta > 0 ? "right" : "left"); + }, + + refresh: function(event) { + this._refreshItems(event); + this.refreshPositions(); + return this; + }, + + _connectWith: function() { + var options = this.options; + return options.connectWith.constructor == String + ? [options.connectWith] + : options.connectWith; + }, + + _getItemsAsjQuery: function(connected) { + + var self = this; + var items = []; + var queries = []; + var connectWith = this._connectWith(); + + if(connectWith && connected) { + for (var i = connectWith.length - 1; i >= 0; i--){ + var cur = $(connectWith[i]); + for (var j = cur.length - 1; j >= 0; j--){ + var inst = $.data(cur[j], this.widgetName); + if(inst && inst != this && !inst.options.disabled) { + queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not('.ui-sortable-placeholder'), inst]); + } + }; + }; + } + + queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not('.ui-sortable-placeholder'), this]); + + for (var i = queries.length - 1; i >= 0; i--){ + queries[i][0].each(function() { + items.push(this); + }); + }; + + return $(items); + + }, + + _removeCurrentsFromItems: function() { + + var list = this.currentItem.find(":data(" + this.widgetName + "-item)"); + + for (var i=0; i < this.items.length; i++) { + + for (var j=0; j < list.length; j++) { + if(list[j] == this.items[i].item[0]) + this.items.splice(i,1); + }; + + }; + + }, + + _refreshItems: function(event) { + + this.items = []; + this.containers = [this]; + var items = this.items; + var self = this; + var queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]]; + var connectWith = this._connectWith(); + + if(connectWith) { + for (var i = connectWith.length - 1; i >= 0; i--){ + var cur = $(connectWith[i]); + for (var j = cur.length - 1; j >= 0; j--){ + var inst = $.data(cur[j], this.widgetName); + if(inst && inst != this && !inst.options.disabled) { + queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]); + this.containers.push(inst); + } + }; + }; + } + + for (var i = queries.length - 1; i >= 0; i--) { + var targetData = queries[i][1]; + var _queries = queries[i][0]; + + for (var j=0, queriesLength = _queries.length; j < queriesLength; j++) { + var item = $(_queries[j]); + + item.data(this.widgetName + '-item', targetData); // Data for target checking (mouse manager) + + items.push({ + item: item, + instance: targetData, + width: 0, height: 0, + left: 0, top: 0 + }); + }; + }; + + }, + + refreshPositions: function(fast) { + + //This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change + if(this.offsetParent && this.helper) { + this.offset.parent = this._getParentOffset(); + } + + for (var i = this.items.length - 1; i >= 0; i--){ + var item = this.items[i]; + + //We ignore calculating positions of all connected containers when we're not over them + if(item.instance != this.currentContainer && this.currentContainer && item.item[0] != this.currentItem[0]) + continue; + + var t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item; + + if (!fast) { + item.width = t.outerWidth(); + item.height = t.outerHeight(); + } + + var p = t.offset(); + item.left = p.left; + item.top = p.top; + }; + + if(this.options.custom && this.options.custom.refreshContainers) { + this.options.custom.refreshContainers.call(this); + } else { + for (var i = this.containers.length - 1; i >= 0; i--){ + var p = this.containers[i].element.offset(); + this.containers[i].containerCache.left = p.left; + this.containers[i].containerCache.top = p.top; + this.containers[i].containerCache.width = this.containers[i].element.outerWidth(); + this.containers[i].containerCache.height = this.containers[i].element.outerHeight(); + }; + } + + return this; + }, + + _createPlaceholder: function(that) { + + var self = that || this, o = self.options; + + if(!o.placeholder || o.placeholder.constructor == String) { + var className = o.placeholder; + o.placeholder = { + element: function() { + + var el = $(document.createElement(self.currentItem[0].nodeName)) + .addClass(className || self.currentItem[0].className+" ui-sortable-placeholder") + .removeClass("ui-sortable-helper")[0]; + + if(!className) + el.style.visibility = "hidden"; + + return el; + }, + update: function(container, p) { + + // 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that + // 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified + if(className && !o.forcePlaceholderSize) return; + + //If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item + if(!p.height()) { p.height(self.currentItem.innerHeight() - parseInt(self.currentItem.css('paddingTop')||0, 10) - parseInt(self.currentItem.css('paddingBottom')||0, 10)); }; + if(!p.width()) { p.width(self.currentItem.innerWidth() - parseInt(self.currentItem.css('paddingLeft')||0, 10) - parseInt(self.currentItem.css('paddingRight')||0, 10)); }; + } + }; + } + + //Create the placeholder + self.placeholder = $(o.placeholder.element.call(self.element, self.currentItem)); + + //Append it after the actual current item + self.currentItem.after(self.placeholder); + + //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317) + o.placeholder.update(self, self.placeholder); + + }, + + _contactContainers: function(event) { + + // get innermost container that intersects with item + var innermostContainer = null, innermostIndex = null; + + + for (var i = this.containers.length - 1; i >= 0; i--){ + + // never consider a container that's located within the item itself + if($.ui.contains(this.currentItem[0], this.containers[i].element[0])) + continue; + + if(this._intersectsWith(this.containers[i].containerCache)) { + + // if we've already found a container and it's more "inner" than this, then continue + if(innermostContainer && $.ui.contains(this.containers[i].element[0], innermostContainer.element[0])) + continue; + + innermostContainer = this.containers[i]; + innermostIndex = i; + + } else { + // container doesn't intersect. trigger "out" event if necessary + if(this.containers[i].containerCache.over) { + this.containers[i]._trigger("out", event, this._uiHash(this)); + this.containers[i].containerCache.over = 0; + } + } + + } + + // if no intersecting containers found, return + if(!innermostContainer) return; + + // move the item into the container if it's not there already + if(this.containers.length === 1) { + this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)); + this.containers[innermostIndex].containerCache.over = 1; + } else if(this.currentContainer != this.containers[innermostIndex]) { + + //When entering a new container, we will find the item with the least distance and append our item near it + var dist = 10000; var itemWithLeastDistance = null; var base = this.positionAbs[this.containers[innermostIndex].floating ? 'left' : 'top']; + for (var j = this.items.length - 1; j >= 0; j--) { + if(!$.ui.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) continue; + var cur = this.items[j][this.containers[innermostIndex].floating ? 'left' : 'top']; + if(Math.abs(cur - base) < dist) { + dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j]; + } + } + + if(!itemWithLeastDistance && !this.options.dropOnEmpty) //Check if dropOnEmpty is enabled + return; + + this.currentContainer = this.containers[innermostIndex]; + itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true); + this._trigger("change", event, this._uiHash()); + this.containers[innermostIndex]._trigger("change", event, this._uiHash(this)); + + //Update the placeholder + this.options.placeholder.update(this.currentContainer, this.placeholder); + + this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)); + this.containers[innermostIndex].containerCache.over = 1; + } + + + }, + + _createHelper: function(event) { + + var o = this.options; + var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper == 'clone' ? this.currentItem.clone() : this.currentItem); + + if(!helper.parents('body').length) //Add the helper to the DOM if that didn't happen already + $(o.appendTo != 'parent' ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]); + + if(helper[0] == this.currentItem[0]) + this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") }; + + if(helper[0].style.width == '' || o.forceHelperSize) helper.width(this.currentItem.width()); + if(helper[0].style.height == '' || o.forceHelperSize) helper.height(this.currentItem.height()); + + return helper; + + }, + + _adjustOffsetFromHelper: function(obj) { + if (typeof obj == 'string') { + obj = obj.split(' '); + } + if ($.isArray(obj)) { + obj = {left: +obj[0], top: +obj[1] || 0}; + } + if ('left' in obj) { + this.offset.click.left = obj.left + this.margins.left; + } + if ('right' in obj) { + this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left; + } + if ('top' in obj) { + this.offset.click.top = obj.top + this.margins.top; + } + if ('bottom' in obj) { + this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top; + } + }, + + _getParentOffset: function() { + + + //Get the offsetParent and cache its position + this.offsetParent = this.helper.offsetParent(); + var po = this.offsetParent.offset(); + + // This is a special case where we need to modify a offset calculated on start, since the following happened: + // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent + // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that + // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag + if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) { + po.left += this.scrollParent.scrollLeft(); + po.top += this.scrollParent.scrollTop(); + } + + if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information + || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix + po = { top: 0, left: 0 }; + + return { + top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0), + left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0) + }; + + }, + + _getRelativeOffset: function() { + + if(this.cssPosition == "relative") { + var p = this.currentItem.position(); + return { + top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(), + left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft() + }; + } else { + return { top: 0, left: 0 }; + } + + }, + + _cacheMargins: function() { + this.margins = { + left: (parseInt(this.currentItem.css("marginLeft"),10) || 0), + top: (parseInt(this.currentItem.css("marginTop"),10) || 0) + }; + }, + + _cacheHelperProportions: function() { + this.helperProportions = { + width: this.helper.outerWidth(), + height: this.helper.outerHeight() + }; + }, + + _setContainment: function() { + + var o = this.options; + if(o.containment == 'parent') o.containment = this.helper[0].parentNode; + if(o.containment == 'document' || o.containment == 'window') this.containment = [ + 0 - this.offset.relative.left - this.offset.parent.left, + 0 - this.offset.relative.top - this.offset.parent.top, + $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left, + ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top + ]; + + if(!(/^(document|window|parent)$/).test(o.containment)) { + var ce = $(o.containment)[0]; + var co = $(o.containment).offset(); + var over = ($(ce).css("overflow") != 'hidden'); + + this.containment = [ + co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left, + co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top, + co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left, + co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top + ]; + } + + }, + + _convertPositionTo: function(d, pos) { + + if(!pos) pos = this.position; + var mod = d == "absolute" ? 1 : -1; + var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); + + return { + top: ( + pos.top // The absolute mouse position + + this.offset.relative.top * mod // Only for relative positioned nodes: Relative offset from element to offset parent + + this.offset.parent.top * mod // The offsetParent's offset without borders (offset + border) + - ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod) + ), + left: ( + pos.left // The absolute mouse position + + this.offset.relative.left * mod // Only for relative positioned nodes: Relative offset from element to offset parent + + this.offset.parent.left * mod // The offsetParent's offset without borders (offset + border) + - ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod) + ) + }; + + }, + + _generatePosition: function(event) { + + var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); + + // This is another very weird special case that only happens for relative elements: + // 1. If the css position is relative + // 2. and the scroll parent is the document or similar to the offset parent + // we have to refresh the relative offset during the scroll so there are no jumps + if(this.cssPosition == 'relative' && !(this.scrollParent[0] != document && this.scrollParent[0] != this.offsetParent[0])) { + this.offset.relative = this._getRelativeOffset(); + } + + var pageX = event.pageX; + var pageY = event.pageY; + + /* + * - Position constraining - + * Constrain the position to a mix of grid, containment. + */ + + if(this.originalPosition) { //If we are not dragging yet, we won't check for options + + if(this.containment) { + if(event.pageX - this.offset.click.left < this.containment[0]) pageX = this.containment[0] + this.offset.click.left; + if(event.pageY - this.offset.click.top < this.containment[1]) pageY = this.containment[1] + this.offset.click.top; + if(event.pageX - this.offset.click.left > this.containment[2]) pageX = this.containment[2] + this.offset.click.left; + if(event.pageY - this.offset.click.top > this.containment[3]) pageY = this.containment[3] + this.offset.click.top; + } + + if(o.grid) { + var top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1]; + pageY = this.containment ? (!(top - this.offset.click.top < this.containment[1] || top - this.offset.click.top > this.containment[3]) ? top : (!(top - this.offset.click.top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; + + var left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0]; + pageX = this.containment ? (!(left - this.offset.click.left < this.containment[0] || left - this.offset.click.left > this.containment[2]) ? left : (!(left - this.offset.click.left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left; + } + + } + + return { + top: ( + pageY // The absolute mouse position + - this.offset.click.top // Click offset (relative to the element) + - this.offset.relative.top // Only for relative positioned nodes: Relative offset from element to offset parent + - this.offset.parent.top // The offsetParent's offset without borders (offset + border) + + ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) )) + ), + left: ( + pageX // The absolute mouse position + - this.offset.click.left // Click offset (relative to the element) + - this.offset.relative.left // Only for relative positioned nodes: Relative offset from element to offset parent + - this.offset.parent.left // The offsetParent's offset without borders (offset + border) + + ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() )) + ) + }; + + }, + + _rearrange: function(event, i, a, hardRefresh) { + + a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction == 'down' ? i.item[0] : i.item[0].nextSibling)); + + //Various things done here to improve the performance: + // 1. we create a setTimeout, that calls refreshPositions + // 2. on the instance, we have a counter variable, that get's higher after every append + // 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same + // 4. this lets only the last addition to the timeout stack through + this.counter = this.counter ? ++this.counter : 1; + var self = this, counter = this.counter; + + window.setTimeout(function() { + if(counter == self.counter) self.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove + },0); + + }, + + _clear: function(event, noPropagation) { + + this.reverting = false; + // We delay all events that have to be triggered to after the point where the placeholder has been removed and + // everything else normalized again + var delayedTriggers = [], self = this; + + // We first have to update the dom position of the actual currentItem + // Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088) + if(!this._noFinalSort && this.currentItem.parent().length) this.placeholder.before(this.currentItem); + this._noFinalSort = null; + + if(this.helper[0] == this.currentItem[0]) { + for(var i in this._storedCSS) { + if(this._storedCSS[i] == 'auto' || this._storedCSS[i] == 'static') this._storedCSS[i] = ''; + } + this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"); + } else { + this.currentItem.show(); + } + + if(this.fromOutside && !noPropagation) delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); }); + if((this.fromOutside || this.domPosition.prev != this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent != this.currentItem.parent()[0]) && !noPropagation) delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed + if(!$.ui.contains(this.element[0], this.currentItem[0])) { //Node was moved out of the current element + if(!noPropagation) delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); }); + for (var i = this.containers.length - 1; i >= 0; i--){ + if($.ui.contains(this.containers[i].element[0], this.currentItem[0]) && !noPropagation) { + delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); }; }).call(this, this.containers[i])); + delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this)); }; }).call(this, this.containers[i])); + } + }; + }; + + //Post events to containers + for (var i = this.containers.length - 1; i >= 0; i--){ + if(!noPropagation) delayedTriggers.push((function(c) { return function(event) { c._trigger("deactivate", event, this._uiHash(this)); }; }).call(this, this.containers[i])); + if(this.containers[i].containerCache.over) { + delayedTriggers.push((function(c) { return function(event) { c._trigger("out", event, this._uiHash(this)); }; }).call(this, this.containers[i])); + this.containers[i].containerCache.over = 0; + } + } + + //Do what was originally in plugins + if(this._storedCursor) $('body').css("cursor", this._storedCursor); //Reset cursor + if(this._storedOpacity) this.helper.css("opacity", this._storedOpacity); //Reset opacity + if(this._storedZIndex) this.helper.css("zIndex", this._storedZIndex == 'auto' ? '' : this._storedZIndex); //Reset z-index + + this.dragging = false; + if(this.cancelHelperRemoval) { + if(!noPropagation) { + this._trigger("beforeStop", event, this._uiHash()); + for (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events + this._trigger("stop", event, this._uiHash()); + } + return false; + } + + if(!noPropagation) this._trigger("beforeStop", event, this._uiHash()); + + //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node! + this.placeholder[0].parentNode.removeChild(this.placeholder[0]); + + if(this.helper[0] != this.currentItem[0]) this.helper.remove(); this.helper = null; + + if(!noPropagation) { + for (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events + this._trigger("stop", event, this._uiHash()); + } + + this.fromOutside = false; + return true; + + }, + + _trigger: function() { + if ($.Widget.prototype._trigger.apply(this, arguments) === false) { + this.cancel(); + } + }, + + _uiHash: function(inst) { + var self = inst || this; + return { + helper: self.helper, + placeholder: self.placeholder || $([]), + position: self.position, + originalPosition: self.originalPosition, + offset: self.positionAbs, + item: self.currentItem, + sender: inst ? inst.element : null + }; + } + +}); + +$.extend($.ui.sortable, { + version: "1.8.17" +}); + +})(jQuery); +/* + * jQuery UI Accordion 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Accordion + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +$.widget( "ui.accordion", { + options: { + active: 0, + animated: "slide", + autoHeight: true, + clearStyle: false, + collapsible: false, + event: "click", + fillSpace: false, + header: "> li > :first-child,> :not(li):even", + icons: { + header: "ui-icon-triangle-1-e", + headerSelected: "ui-icon-triangle-1-s" + }, + navigation: false, + navigationFilter: function() { + return this.href.toLowerCase() === location.href.toLowerCase(); + } + }, + + _create: function() { + var self = this, + options = self.options; + + self.running = 0; + + self.element + .addClass( "ui-accordion ui-widget ui-helper-reset" ) + // in lack of child-selectors in CSS + // we need to mark top-LIs in a UL-accordion for some IE-fix + .children( "li" ) + .addClass( "ui-accordion-li-fix" ); + + self.headers = self.element.find( options.header ) + .addClass( "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" ) + .bind( "mouseenter.accordion", function() { + if ( options.disabled ) { + return; + } + $( this ).addClass( "ui-state-hover" ); + }) + .bind( "mouseleave.accordion", function() { + if ( options.disabled ) { + return; + } + $( this ).removeClass( "ui-state-hover" ); + }) + .bind( "focus.accordion", function() { + if ( options.disabled ) { + return; + } + $( this ).addClass( "ui-state-focus" ); + }) + .bind( "blur.accordion", function() { + if ( options.disabled ) { + return; + } + $( this ).removeClass( "ui-state-focus" ); + }); + + self.headers.next() + .addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" ); + + if ( options.navigation ) { + var current = self.element.find( "a" ).filter( options.navigationFilter ).eq( 0 ); + if ( current.length ) { + var header = current.closest( ".ui-accordion-header" ); + if ( header.length ) { + // anchor within header + self.active = header; + } else { + // anchor within content + self.active = current.closest( ".ui-accordion-content" ).prev(); + } + } + } + + self.active = self._findActive( self.active || options.active ) + .addClass( "ui-state-default ui-state-active" ) + .toggleClass( "ui-corner-all" ) + .toggleClass( "ui-corner-top" ); + self.active.next().addClass( "ui-accordion-content-active" ); + + self._createIcons(); + self.resize(); + + // ARIA + self.element.attr( "role", "tablist" ); + + self.headers + .attr( "role", "tab" ) + .bind( "keydown.accordion", function( event ) { + return self._keydown( event ); + }) + .next() + .attr( "role", "tabpanel" ); + + self.headers + .not( self.active || "" ) + .attr({ + "aria-expanded": "false", + "aria-selected": "false", + tabIndex: -1 + }) + .next() + .hide(); + + // make sure at least one header is in the tab order + if ( !self.active.length ) { + self.headers.eq( 0 ).attr( "tabIndex", 0 ); + } else { + self.active + .attr({ + "aria-expanded": "true", + "aria-selected": "true", + tabIndex: 0 + }); + } + + // only need links in tab order for Safari + if ( !$.browser.safari ) { + self.headers.find( "a" ).attr( "tabIndex", -1 ); + } + + if ( options.event ) { + self.headers.bind( options.event.split(" ").join(".accordion ") + ".accordion", function(event) { + self._clickHandler.call( self, event, this ); + event.preventDefault(); + }); + } + }, + + _createIcons: function() { + var options = this.options; + if ( options.icons ) { + $( "" ) + .addClass( "ui-icon " + options.icons.header ) + .prependTo( this.headers ); + this.active.children( ".ui-icon" ) + .toggleClass(options.icons.header) + .toggleClass(options.icons.headerSelected); + this.element.addClass( "ui-accordion-icons" ); + } + }, + + _destroyIcons: function() { + this.headers.children( ".ui-icon" ).remove(); + this.element.removeClass( "ui-accordion-icons" ); + }, + + destroy: function() { + var options = this.options; + + this.element + .removeClass( "ui-accordion ui-widget ui-helper-reset" ) + .removeAttr( "role" ); + + this.headers + .unbind( ".accordion" ) + .removeClass( "ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top" ) + .removeAttr( "role" ) + .removeAttr( "aria-expanded" ) + .removeAttr( "aria-selected" ) + .removeAttr( "tabIndex" ); + + this.headers.find( "a" ).removeAttr( "tabIndex" ); + this._destroyIcons(); + var contents = this.headers.next() + .css( "display", "" ) + .removeAttr( "role" ) + .removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled" ); + if ( options.autoHeight || options.fillHeight ) { + contents.css( "height", "" ); + } + + return $.Widget.prototype.destroy.call( this ); + }, + + _setOption: function( key, value ) { + $.Widget.prototype._setOption.apply( this, arguments ); + + if ( key == "active" ) { + this.activate( value ); + } + if ( key == "icons" ) { + this._destroyIcons(); + if ( value ) { + this._createIcons(); + } + } + // #5332 - opacity doesn't cascade to positioned elements in IE + // so we need to add the disabled class to the headers and panels + if ( key == "disabled" ) { + this.headers.add(this.headers.next()) + [ value ? "addClass" : "removeClass" ]( + "ui-accordion-disabled ui-state-disabled" ); + } + }, + + _keydown: function( event ) { + if ( this.options.disabled || event.altKey || event.ctrlKey ) { + return; + } + + var keyCode = $.ui.keyCode, + length = this.headers.length, + currentIndex = this.headers.index( event.target ), + toFocus = false; + + switch ( event.keyCode ) { + case keyCode.RIGHT: + case keyCode.DOWN: + toFocus = this.headers[ ( currentIndex + 1 ) % length ]; + break; + case keyCode.LEFT: + case keyCode.UP: + toFocus = this.headers[ ( currentIndex - 1 + length ) % length ]; + break; + case keyCode.SPACE: + case keyCode.ENTER: + this._clickHandler( { target: event.target }, event.target ); + event.preventDefault(); + } + + if ( toFocus ) { + $( event.target ).attr( "tabIndex", -1 ); + $( toFocus ).attr( "tabIndex", 0 ); + toFocus.focus(); + return false; + } + + return true; + }, + + resize: function() { + var options = this.options, + maxHeight; + + if ( options.fillSpace ) { + if ( $.browser.msie ) { + var defOverflow = this.element.parent().css( "overflow" ); + this.element.parent().css( "overflow", "hidden"); + } + maxHeight = this.element.parent().height(); + if ($.browser.msie) { + this.element.parent().css( "overflow", defOverflow ); + } + + this.headers.each(function() { + maxHeight -= $( this ).outerHeight( true ); + }); + + this.headers.next() + .each(function() { + $( this ).height( Math.max( 0, maxHeight - + $( this ).innerHeight() + $( this ).height() ) ); + }) + .css( "overflow", "auto" ); + } else if ( options.autoHeight ) { + maxHeight = 0; + this.headers.next() + .each(function() { + maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() ); + }) + .height( maxHeight ); + } + + return this; + }, + + activate: function( index ) { + // TODO this gets called on init, changing the option without an explicit call for that + this.options.active = index; + // call clickHandler with custom event + var active = this._findActive( index )[ 0 ]; + this._clickHandler( { target: active }, active ); + + return this; + }, + + _findActive: function( selector ) { + return selector + ? typeof selector === "number" + ? this.headers.filter( ":eq(" + selector + ")" ) + : this.headers.not( this.headers.not( selector ) ) + : selector === false + ? $( [] ) + : this.headers.filter( ":eq(0)" ); + }, + + // TODO isn't event.target enough? why the separate target argument? + _clickHandler: function( event, target ) { + var options = this.options; + if ( options.disabled ) { + return; + } + + // called only when using activate(false) to close all parts programmatically + if ( !event.target ) { + if ( !options.collapsible ) { + return; + } + this.active + .removeClass( "ui-state-active ui-corner-top" ) + .addClass( "ui-state-default ui-corner-all" ) + .children( ".ui-icon" ) + .removeClass( options.icons.headerSelected ) + .addClass( options.icons.header ); + this.active.next().addClass( "ui-accordion-content-active" ); + var toHide = this.active.next(), + data = { + options: options, + newHeader: $( [] ), + oldHeader: options.active, + newContent: $( [] ), + oldContent: toHide + }, + toShow = ( this.active = $( [] ) ); + this._toggle( toShow, toHide, data ); + return; + } + + // get the click target + var clicked = $( event.currentTarget || target ), + clickedIsActive = clicked[0] === this.active[0]; + + // TODO the option is changed, is that correct? + // TODO if it is correct, shouldn't that happen after determining that the click is valid? + options.active = options.collapsible && clickedIsActive ? + false : + this.headers.index( clicked ); + + // if animations are still active, or the active header is the target, ignore click + if ( this.running || ( !options.collapsible && clickedIsActive ) ) { + return; + } + + // find elements to show and hide + var active = this.active, + toShow = clicked.next(), + toHide = this.active.next(), + data = { + options: options, + newHeader: clickedIsActive && options.collapsible ? $([]) : clicked, + oldHeader: this.active, + newContent: clickedIsActive && options.collapsible ? $([]) : toShow, + oldContent: toHide + }, + down = this.headers.index( this.active[0] ) > this.headers.index( clicked[0] ); + + // when the call to ._toggle() comes after the class changes + // it causes a very odd bug in IE 8 (see #6720) + this.active = clickedIsActive ? $([]) : clicked; + this._toggle( toShow, toHide, data, clickedIsActive, down ); + + // switch classes + active + .removeClass( "ui-state-active ui-corner-top" ) + .addClass( "ui-state-default ui-corner-all" ) + .children( ".ui-icon" ) + .removeClass( options.icons.headerSelected ) + .addClass( options.icons.header ); + if ( !clickedIsActive ) { + clicked + .removeClass( "ui-state-default ui-corner-all" ) + .addClass( "ui-state-active ui-corner-top" ) + .children( ".ui-icon" ) + .removeClass( options.icons.header ) + .addClass( options.icons.headerSelected ); + clicked + .next() + .addClass( "ui-accordion-content-active" ); + } + + return; + }, + + _toggle: function( toShow, toHide, data, clickedIsActive, down ) { + var self = this, + options = self.options; + + self.toShow = toShow; + self.toHide = toHide; + self.data = data; + + var complete = function() { + if ( !self ) { + return; + } + return self._completed.apply( self, arguments ); + }; + + // trigger changestart event + self._trigger( "changestart", null, self.data ); + + // count elements to animate + self.running = toHide.size() === 0 ? toShow.size() : toHide.size(); + + if ( options.animated ) { + var animOptions = {}; + + if ( options.collapsible && clickedIsActive ) { + animOptions = { + toShow: $( [] ), + toHide: toHide, + complete: complete, + down: down, + autoHeight: options.autoHeight || options.fillSpace + }; + } else { + animOptions = { + toShow: toShow, + toHide: toHide, + complete: complete, + down: down, + autoHeight: options.autoHeight || options.fillSpace + }; + } + + if ( !options.proxied ) { + options.proxied = options.animated; + } + + if ( !options.proxiedDuration ) { + options.proxiedDuration = options.duration; + } + + options.animated = $.isFunction( options.proxied ) ? + options.proxied( animOptions ) : + options.proxied; + + options.duration = $.isFunction( options.proxiedDuration ) ? + options.proxiedDuration( animOptions ) : + options.proxiedDuration; + + var animations = $.ui.accordion.animations, + duration = options.duration, + easing = options.animated; + + if ( easing && !animations[ easing ] && !$.easing[ easing ] ) { + easing = "slide"; + } + if ( !animations[ easing ] ) { + animations[ easing ] = function( options ) { + this.slide( options, { + easing: easing, + duration: duration || 700 + }); + }; + } + + animations[ easing ]( animOptions ); + } else { + if ( options.collapsible && clickedIsActive ) { + toShow.toggle(); + } else { + toHide.hide(); + toShow.show(); + } + + complete( true ); + } + + // TODO assert that the blur and focus triggers are really necessary, remove otherwise + toHide.prev() + .attr({ + "aria-expanded": "false", + "aria-selected": "false", + tabIndex: -1 + }) + .blur(); + toShow.prev() + .attr({ + "aria-expanded": "true", + "aria-selected": "true", + tabIndex: 0 + }) + .focus(); + }, + + _completed: function( cancel ) { + this.running = cancel ? 0 : --this.running; + if ( this.running ) { + return; + } + + if ( this.options.clearStyle ) { + this.toShow.add( this.toHide ).css({ + height: "", + overflow: "" + }); + } + + // other classes are removed before the animation; this one needs to stay until completed + this.toHide.removeClass( "ui-accordion-content-active" ); + // Work around for rendering bug in IE (#5421) + if ( this.toHide.length ) { + this.toHide.parent()[0].className = this.toHide.parent()[0].className; + } + + this._trigger( "change", null, this.data ); + } +}); + +$.extend( $.ui.accordion, { + version: "1.8.17", + animations: { + slide: function( options, additions ) { + options = $.extend({ + easing: "swing", + duration: 300 + }, options, additions ); + if ( !options.toHide.size() ) { + options.toShow.animate({ + height: "show", + paddingTop: "show", + paddingBottom: "show" + }, options ); + return; + } + if ( !options.toShow.size() ) { + options.toHide.animate({ + height: "hide", + paddingTop: "hide", + paddingBottom: "hide" + }, options ); + return; + } + var overflow = options.toShow.css( "overflow" ), + percentDone = 0, + showProps = {}, + hideProps = {}, + fxAttrs = [ "height", "paddingTop", "paddingBottom" ], + originalWidth; + // fix width before calculating height of hidden element + var s = options.toShow; + originalWidth = s[0].style.width; + s.width( s.parent().width() + - parseFloat( s.css( "paddingLeft" ) ) + - parseFloat( s.css( "paddingRight" ) ) + - ( parseFloat( s.css( "borderLeftWidth" ) ) || 0 ) + - ( parseFloat( s.css( "borderRightWidth" ) ) || 0 ) ); + + $.each( fxAttrs, function( i, prop ) { + hideProps[ prop ] = "hide"; + + var parts = ( "" + $.css( options.toShow[0], prop ) ).match( /^([\d+-.]+)(.*)$/ ); + showProps[ prop ] = { + value: parts[ 1 ], + unit: parts[ 2 ] || "px" + }; + }); + options.toShow.css({ height: 0, overflow: "hidden" }).show(); + options.toHide + .filter( ":hidden" ) + .each( options.complete ) + .end() + .filter( ":visible" ) + .animate( hideProps, { + step: function( now, settings ) { + // only calculate the percent when animating height + // IE gets very inconsistent results when animating elements + // with small values, which is common for padding + if ( settings.prop == "height" ) { + percentDone = ( settings.end - settings.start === 0 ) ? 0 : + ( settings.now - settings.start ) / ( settings.end - settings.start ); + } + + options.toShow[ 0 ].style[ settings.prop ] = + ( percentDone * showProps[ settings.prop ].value ) + + showProps[ settings.prop ].unit; + }, + duration: options.duration, + easing: options.easing, + complete: function() { + if ( !options.autoHeight ) { + options.toShow.css( "height", "" ); + } + options.toShow.css({ + width: originalWidth, + overflow: overflow + }); + options.complete(); + } + }); + }, + bounceslide: function( options ) { + this.slide( options, { + easing: options.down ? "easeOutBounce" : "swing", + duration: options.down ? 1000 : 200 + }); + } + } +}); + +})( jQuery ); +/* + * jQuery UI Autocomplete 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Autocomplete + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.position.js + */ +(function( $, undefined ) { + +// used to prevent race conditions with remote data sources +var requestIndex = 0; + +$.widget( "ui.autocomplete", { + options: { + appendTo: "body", + autoFocus: false, + delay: 300, + minLength: 1, + position: { + my: "left top", + at: "left bottom", + collision: "none" + }, + source: null + }, + + pending: 0, + + _create: function() { + var self = this, + doc = this.element[ 0 ].ownerDocument, + suppressKeyPress; + + this.element + .addClass( "ui-autocomplete-input" ) + .attr( "autocomplete", "off" ) + // TODO verify these actually work as intended + .attr({ + role: "textbox", + "aria-autocomplete": "list", + "aria-haspopup": "true" + }) + .bind( "keydown.autocomplete", function( event ) { + if ( self.options.disabled || self.element.propAttr( "readOnly" ) ) { + return; + } + + suppressKeyPress = false; + var keyCode = $.ui.keyCode; + switch( event.keyCode ) { + case keyCode.PAGE_UP: + self._move( "previousPage", event ); + break; + case keyCode.PAGE_DOWN: + self._move( "nextPage", event ); + break; + case keyCode.UP: + self._move( "previous", event ); + // prevent moving cursor to beginning of text field in some browsers + event.preventDefault(); + break; + case keyCode.DOWN: + self._move( "next", event ); + // prevent moving cursor to end of text field in some browsers + event.preventDefault(); + break; + case keyCode.ENTER: + case keyCode.NUMPAD_ENTER: + // when menu is open and has focus + if ( self.menu.active ) { + // #6055 - Opera still allows the keypress to occur + // which causes forms to submit + suppressKeyPress = true; + event.preventDefault(); + } + //passthrough - ENTER and TAB both select the current element + case keyCode.TAB: + if ( !self.menu.active ) { + return; + } + self.menu.select( event ); + break; + case keyCode.ESCAPE: + self.element.val( self.term ); + self.close( event ); + break; + default: + // keypress is triggered before the input value is changed + clearTimeout( self.searching ); + self.searching = setTimeout(function() { + // only search if the value has changed + if ( self.term != self.element.val() ) { + self.selectedItem = null; + self.search( null, event ); + } + }, self.options.delay ); + break; + } + }) + .bind( "keypress.autocomplete", function( event ) { + if ( suppressKeyPress ) { + suppressKeyPress = false; + event.preventDefault(); + } + }) + .bind( "focus.autocomplete", function() { + if ( self.options.disabled ) { + return; + } + + self.selectedItem = null; + self.previous = self.element.val(); + }) + .bind( "blur.autocomplete", function( event ) { + if ( self.options.disabled ) { + return; + } + + clearTimeout( self.searching ); + // clicks on the menu (or a button to trigger a search) will cause a blur event + self.closing = setTimeout(function() { + self.close( event ); + self._change( event ); + }, 150 ); + }); + this._initSource(); + this.response = function() { + return self._response.apply( self, arguments ); + }; + this.menu = $( "
    " ) + .addClass( "ui-autocomplete" ) + .appendTo( $( this.options.appendTo || "body", doc )[0] ) + // prevent the close-on-blur in case of a "slow" click on the menu (long mousedown) + .mousedown(function( event ) { + // clicking on the scrollbar causes focus to shift to the body + // but we can't detect a mouseup or a click immediately afterward + // so we have to track the next mousedown and close the menu if + // the user clicks somewhere outside of the autocomplete + var menuElement = self.menu.element[ 0 ]; + if ( !$( event.target ).closest( ".ui-menu-item" ).length ) { + setTimeout(function() { + $( document ).one( 'mousedown', function( event ) { + if ( event.target !== self.element[ 0 ] && + event.target !== menuElement && + !$.ui.contains( menuElement, event.target ) ) { + self.close(); + } + }); + }, 1 ); + } + + // use another timeout to make sure the blur-event-handler on the input was already triggered + setTimeout(function() { + clearTimeout( self.closing ); + }, 13); + }) + .menu({ + focus: function( event, ui ) { + var item = ui.item.data( "item.autocomplete" ); + if ( false !== self._trigger( "focus", event, { item: item } ) ) { + // use value to match what will end up in the input, if it was a key event + if ( /^key/.test(event.originalEvent.type) ) { + self.element.val( item.value ); + } + } + }, + selected: function( event, ui ) { + var item = ui.item.data( "item.autocomplete" ), + previous = self.previous; + + // only trigger when focus was lost (click on menu) + if ( self.element[0] !== doc.activeElement ) { + self.element.focus(); + self.previous = previous; + // #6109 - IE triggers two focus events and the second + // is asynchronous, so we need to reset the previous + // term synchronously and asynchronously :-( + setTimeout(function() { + self.previous = previous; + self.selectedItem = item; + }, 1); + } + + if ( false !== self._trigger( "select", event, { item: item } ) ) { + self.element.val( item.value ); + } + // reset the term after the select event + // this allows custom select handling to work properly + self.term = self.element.val(); + + self.close( event ); + self.selectedItem = item; + }, + blur: function( event, ui ) { + // don't set the value of the text field if it's already correct + // this prevents moving the cursor unnecessarily + if ( self.menu.element.is(":visible") && + ( self.element.val() !== self.term ) ) { + self.element.val( self.term ); + } + } + }) + .zIndex( this.element.zIndex() + 1 ) + // workaround for jQuery bug #5781 http://dev.jquery.com/ticket/5781 + .css({ top: 0, left: 0 }) + .hide() + .data( "menu" ); + if ( $.fn.bgiframe ) { + this.menu.element.bgiframe(); + } + // turning off autocomplete prevents the browser from remembering the + // value when navigating through history, so we re-enable autocomplete + // if the page is unloaded before the widget is destroyed. #7790 + self.beforeunloadHandler = function() { + self.element.removeAttr( "autocomplete" ); + }; + $( window ).bind( "beforeunload", self.beforeunloadHandler ); + }, + + destroy: function() { + this.element + .removeClass( "ui-autocomplete-input" ) + .removeAttr( "autocomplete" ) + .removeAttr( "role" ) + .removeAttr( "aria-autocomplete" ) + .removeAttr( "aria-haspopup" ); + this.menu.element.remove(); + $( window ).unbind( "beforeunload", this.beforeunloadHandler ); + $.Widget.prototype.destroy.call( this ); + }, + + _setOption: function( key, value ) { + $.Widget.prototype._setOption.apply( this, arguments ); + if ( key === "source" ) { + this._initSource(); + } + if ( key === "appendTo" ) { + this.menu.element.appendTo( $( value || "body", this.element[0].ownerDocument )[0] ) + } + if ( key === "disabled" && value && this.xhr ) { + this.xhr.abort(); + } + }, + + _initSource: function() { + var self = this, + array, + url; + if ( $.isArray(this.options.source) ) { + array = this.options.source; + this.source = function( request, response ) { + response( $.ui.autocomplete.filter(array, request.term) ); + }; + } else if ( typeof this.options.source === "string" ) { + url = this.options.source; + this.source = function( request, response ) { + if ( self.xhr ) { + self.xhr.abort(); + } + self.xhr = $.ajax({ + url: url, + data: request, + dataType: "json", + autocompleteRequest: ++requestIndex, + success: function( data, status ) { + if ( this.autocompleteRequest === requestIndex ) { + response( data ); + } + }, + error: function() { + if ( this.autocompleteRequest === requestIndex ) { + response( [] ); + } + } + }); + }; + } else { + this.source = this.options.source; + } + }, + + search: function( value, event ) { + value = value != null ? value : this.element.val(); + + // always save the actual value, not the one passed as an argument + this.term = this.element.val(); + + if ( value.length < this.options.minLength ) { + return this.close( event ); + } + + clearTimeout( this.closing ); + if ( this._trigger( "search", event ) === false ) { + return; + } + + return this._search( value ); + }, + + _search: function( value ) { + this.pending++; + this.element.addClass( "ui-autocomplete-loading" ); + + this.source( { term: value }, this.response ); + }, + + _response: function( content ) { + if ( !this.options.disabled && content && content.length ) { + content = this._normalize( content ); + this._suggest( content ); + this._trigger( "open" ); + } else { + this.close(); + } + this.pending--; + if ( !this.pending ) { + this.element.removeClass( "ui-autocomplete-loading" ); + } + }, + + close: function( event ) { + clearTimeout( this.closing ); + if ( this.menu.element.is(":visible") ) { + this.menu.element.hide(); + this.menu.deactivate(); + this._trigger( "close", event ); + } + }, + + _change: function( event ) { + if ( this.previous !== this.element.val() ) { + this._trigger( "change", event, { item: this.selectedItem } ); + } + }, + + _normalize: function( items ) { + // assume all items have the right format when the first item is complete + if ( items.length && items[0].label && items[0].value ) { + return items; + } + return $.map( items, function(item) { + if ( typeof item === "string" ) { + return { + label: item, + value: item + }; + } + return $.extend({ + label: item.label || item.value, + value: item.value || item.label + }, item ); + }); + }, + + _suggest: function( items ) { + var ul = this.menu.element + .empty() + .zIndex( this.element.zIndex() + 1 ); + this._renderMenu( ul, items ); + // TODO refresh should check if the active item is still in the dom, removing the need for a manual deactivate + this.menu.deactivate(); + this.menu.refresh(); + + // size and position menu + ul.show(); + this._resizeMenu(); + ul.position( $.extend({ + of: this.element + }, this.options.position )); + + if ( this.options.autoFocus ) { + this.menu.next( new $.Event("mouseover") ); + } + }, + + _resizeMenu: function() { + var ul = this.menu.element; + ul.outerWidth( Math.max( + // Firefox wraps long text (possibly a rounding bug) + // so we add 1px to avoid the wrapping (#7513) + ul.width( "" ).outerWidth() + 1, + this.element.outerWidth() + ) ); + }, + + _renderMenu: function( ul, items ) { + var self = this; + $.each( items, function( index, item ) { + self._renderItem( ul, item ); + }); + }, + + _renderItem: function( ul, item) { + return $( "
  • " ) + .data( "item.autocomplete", item ) + .append( $( "" ).text( item.label ) ) + .appendTo( ul ); + }, + + _move: function( direction, event ) { + if ( !this.menu.element.is(":visible") ) { + this.search( null, event ); + return; + } + if ( this.menu.first() && /^previous/.test(direction) || + this.menu.last() && /^next/.test(direction) ) { + this.element.val( this.term ); + this.menu.deactivate(); + return; + } + this.menu[ direction ]( event ); + }, + + widget: function() { + return this.menu.element; + } +}); + +$.extend( $.ui.autocomplete, { + escapeRegex: function( value ) { + return value.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); + }, + filter: function(array, term) { + var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" ); + return $.grep( array, function(value) { + return matcher.test( value.label || value.value || value ); + }); + } +}); + +}( jQuery )); + +/* + * jQuery UI Menu (not officially released) + * + * This widget isn't yet finished and the API is subject to change. We plan to finish + * it for the next release. You're welcome to give it a try anyway and give us feedback, + * as long as you're okay with migrating your code later on. We can help with that, too. + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Menu + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function($) { + +$.widget("ui.menu", { + _create: function() { + var self = this; + this.element + .addClass("ui-menu ui-widget ui-widget-content ui-corner-all") + .attr({ + role: "listbox", + "aria-activedescendant": "ui-active-menuitem" + }) + .click(function( event ) { + if ( !$( event.target ).closest( ".ui-menu-item a" ).length ) { + return; + } + // temporary + event.preventDefault(); + self.select( event ); + }); + this.refresh(); + }, + + refresh: function() { + var self = this; + + // don't refresh list items that are already adapted + var items = this.element.children("li:not(.ui-menu-item):has(a)") + .addClass("ui-menu-item") + .attr("role", "menuitem"); + + items.children("a") + .addClass("ui-corner-all") + .attr("tabindex", -1) + // mouseenter doesn't work with event delegation + .mouseenter(function( event ) { + self.activate( event, $(this).parent() ); + }) + .mouseleave(function() { + self.deactivate(); + }); + }, + + activate: function( event, item ) { + this.deactivate(); + if (this.hasScroll()) { + var offset = item.offset().top - this.element.offset().top, + scroll = this.element.scrollTop(), + elementHeight = this.element.height(); + if (offset < 0) { + this.element.scrollTop( scroll + offset); + } else if (offset >= elementHeight) { + this.element.scrollTop( scroll + offset - elementHeight + item.height()); + } + } + this.active = item.eq(0) + .children("a") + .addClass("ui-state-hover") + .attr("id", "ui-active-menuitem") + .end(); + this._trigger("focus", event, { item: item }); + }, + + deactivate: function() { + if (!this.active) { return; } + + this.active.children("a") + .removeClass("ui-state-hover") + .removeAttr("id"); + this._trigger("blur"); + this.active = null; + }, + + next: function(event) { + this.move("next", ".ui-menu-item:first", event); + }, + + previous: function(event) { + this.move("prev", ".ui-menu-item:last", event); + }, + + first: function() { + return this.active && !this.active.prevAll(".ui-menu-item").length; + }, + + last: function() { + return this.active && !this.active.nextAll(".ui-menu-item").length; + }, + + move: function(direction, edge, event) { + if (!this.active) { + this.activate(event, this.element.children(edge)); + return; + } + var next = this.active[direction + "All"](".ui-menu-item").eq(0); + if (next.length) { + this.activate(event, next); + } else { + this.activate(event, this.element.children(edge)); + } + }, + + // TODO merge with previousPage + nextPage: function(event) { + if (this.hasScroll()) { + // TODO merge with no-scroll-else + if (!this.active || this.last()) { + this.activate(event, this.element.children(".ui-menu-item:first")); + return; + } + var base = this.active.offset().top, + height = this.element.height(), + result = this.element.children(".ui-menu-item").filter(function() { + var close = $(this).offset().top - base - height + $(this).height(); + // TODO improve approximation + return close < 10 && close > -10; + }); + + // TODO try to catch this earlier when scrollTop indicates the last page anyway + if (!result.length) { + result = this.element.children(".ui-menu-item:last"); + } + this.activate(event, result); + } else { + this.activate(event, this.element.children(".ui-menu-item") + .filter(!this.active || this.last() ? ":first" : ":last")); + } + }, + + // TODO merge with nextPage + previousPage: function(event) { + if (this.hasScroll()) { + // TODO merge with no-scroll-else + if (!this.active || this.first()) { + this.activate(event, this.element.children(".ui-menu-item:last")); + return; + } + + var base = this.active.offset().top, + height = this.element.height(); + result = this.element.children(".ui-menu-item").filter(function() { + var close = $(this).offset().top - base + height - $(this).height(); + // TODO improve approximation + return close < 10 && close > -10; + }); + + // TODO try to catch this earlier when scrollTop indicates the last page anyway + if (!result.length) { + result = this.element.children(".ui-menu-item:first"); + } + this.activate(event, result); + } else { + this.activate(event, this.element.children(".ui-menu-item") + .filter(!this.active || this.first() ? ":last" : ":first")); + } + }, + + hasScroll: function() { + return this.element.height() < this.element[ $.fn.prop ? "prop" : "attr" ]("scrollHeight"); + }, + + select: function( event ) { + this._trigger("selected", event, { item: this.active }); + } +}); + +}(jQuery)); +/* + * jQuery UI Button 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Button + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +var lastActive, startXPos, startYPos, clickDragged, + baseClasses = "ui-button ui-widget ui-state-default ui-corner-all", + stateClasses = "ui-state-hover ui-state-active ", + typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only", + formResetHandler = function() { + var buttons = $( this ).find( ":ui-button" ); + setTimeout(function() { + buttons.button( "refresh" ); + }, 1 ); + }, + radioGroup = function( radio ) { + var name = radio.name, + form = radio.form, + radios = $( [] ); + if ( name ) { + if ( form ) { + radios = $( form ).find( "[name='" + name + "']" ); + } else { + radios = $( "[name='" + name + "']", radio.ownerDocument ) + .filter(function() { + return !this.form; + }); + } + } + return radios; + }; + +$.widget( "ui.button", { + options: { + disabled: null, + text: true, + label: null, + icons: { + primary: null, + secondary: null + } + }, + _create: function() { + this.element.closest( "form" ) + .unbind( "reset.button" ) + .bind( "reset.button", formResetHandler ); + + if ( typeof this.options.disabled !== "boolean" ) { + this.options.disabled = this.element.propAttr( "disabled" ); + } + + this._determineButtonType(); + this.hasTitle = !!this.buttonElement.attr( "title" ); + + var self = this, + options = this.options, + toggleButton = this.type === "checkbox" || this.type === "radio", + hoverClass = "ui-state-hover" + ( !toggleButton ? " ui-state-active" : "" ), + focusClass = "ui-state-focus"; + + if ( options.label === null ) { + options.label = this.buttonElement.html(); + } + + if ( this.element.is( ":disabled" ) ) { + options.disabled = true; + } + + this.buttonElement + .addClass( baseClasses ) + .attr( "role", "button" ) + .bind( "mouseenter.button", function() { + if ( options.disabled ) { + return; + } + $( this ).addClass( "ui-state-hover" ); + if ( this === lastActive ) { + $( this ).addClass( "ui-state-active" ); + } + }) + .bind( "mouseleave.button", function() { + if ( options.disabled ) { + return; + } + $( this ).removeClass( hoverClass ); + }) + .bind( "click.button", function( event ) { + if ( options.disabled ) { + event.preventDefault(); + event.stopImmediatePropagation(); + } + }); + + this.element + .bind( "focus.button", function() { + // no need to check disabled, focus won't be triggered anyway + self.buttonElement.addClass( focusClass ); + }) + .bind( "blur.button", function() { + self.buttonElement.removeClass( focusClass ); + }); + + if ( toggleButton ) { + this.element.bind( "change.button", function() { + if ( clickDragged ) { + return; + } + self.refresh(); + }); + // if mouse moves between mousedown and mouseup (drag) set clickDragged flag + // prevents issue where button state changes but checkbox/radio checked state + // does not in Firefox (see ticket #6970) + this.buttonElement + .bind( "mousedown.button", function( event ) { + if ( options.disabled ) { + return; + } + clickDragged = false; + startXPos = event.pageX; + startYPos = event.pageY; + }) + .bind( "mouseup.button", function( event ) { + if ( options.disabled ) { + return; + } + if ( startXPos !== event.pageX || startYPos !== event.pageY ) { + clickDragged = true; + } + }); + } + + if ( this.type === "checkbox" ) { + this.buttonElement.bind( "click.button", function() { + if ( options.disabled || clickDragged ) { + return false; + } + $( this ).toggleClass( "ui-state-active" ); + self.buttonElement.attr( "aria-pressed", self.element[0].checked ); + }); + } else if ( this.type === "radio" ) { + this.buttonElement.bind( "click.button", function() { + if ( options.disabled || clickDragged ) { + return false; + } + $( this ).addClass( "ui-state-active" ); + self.buttonElement.attr( "aria-pressed", "true" ); + + var radio = self.element[ 0 ]; + radioGroup( radio ) + .not( radio ) + .map(function() { + return $( this ).button( "widget" )[ 0 ]; + }) + .removeClass( "ui-state-active" ) + .attr( "aria-pressed", "false" ); + }); + } else { + this.buttonElement + .bind( "mousedown.button", function() { + if ( options.disabled ) { + return false; + } + $( this ).addClass( "ui-state-active" ); + lastActive = this; + $( document ).one( "mouseup", function() { + lastActive = null; + }); + }) + .bind( "mouseup.button", function() { + if ( options.disabled ) { + return false; + } + $( this ).removeClass( "ui-state-active" ); + }) + .bind( "keydown.button", function(event) { + if ( options.disabled ) { + return false; + } + if ( event.keyCode == $.ui.keyCode.SPACE || event.keyCode == $.ui.keyCode.ENTER ) { + $( this ).addClass( "ui-state-active" ); + } + }) + .bind( "keyup.button", function() { + $( this ).removeClass( "ui-state-active" ); + }); + + if ( this.buttonElement.is("a") ) { + this.buttonElement.keyup(function(event) { + if ( event.keyCode === $.ui.keyCode.SPACE ) { + // TODO pass through original event correctly (just as 2nd argument doesn't work) + $( this ).click(); + } + }); + } + } + + // TODO: pull out $.Widget's handling for the disabled option into + // $.Widget.prototype._setOptionDisabled so it's easy to proxy and can + // be overridden by individual plugins + this._setOption( "disabled", options.disabled ); + this._resetButton(); + }, + + _determineButtonType: function() { + + if ( this.element.is(":checkbox") ) { + this.type = "checkbox"; + } else if ( this.element.is(":radio") ) { + this.type = "radio"; + } else if ( this.element.is("input") ) { + this.type = "input"; + } else { + this.type = "button"; + } + + if ( this.type === "checkbox" || this.type === "radio" ) { + // we don't search against the document in case the element + // is disconnected from the DOM + var ancestor = this.element.parents().filter(":last"), + labelSelector = "label[for='" + this.element.attr("id") + "']"; + this.buttonElement = ancestor.find( labelSelector ); + if ( !this.buttonElement.length ) { + ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings(); + this.buttonElement = ancestor.filter( labelSelector ); + if ( !this.buttonElement.length ) { + this.buttonElement = ancestor.find( labelSelector ); + } + } + this.element.addClass( "ui-helper-hidden-accessible" ); + + var checked = this.element.is( ":checked" ); + if ( checked ) { + this.buttonElement.addClass( "ui-state-active" ); + } + this.buttonElement.attr( "aria-pressed", checked ); + } else { + this.buttonElement = this.element; + } + }, + + widget: function() { + return this.buttonElement; + }, + + destroy: function() { + this.element + .removeClass( "ui-helper-hidden-accessible" ); + this.buttonElement + .removeClass( baseClasses + " " + stateClasses + " " + typeClasses ) + .removeAttr( "role" ) + .removeAttr( "aria-pressed" ) + .html( this.buttonElement.find(".ui-button-text").html() ); + + if ( !this.hasTitle ) { + this.buttonElement.removeAttr( "title" ); + } + + $.Widget.prototype.destroy.call( this ); + }, + + _setOption: function( key, value ) { + $.Widget.prototype._setOption.apply( this, arguments ); + if ( key === "disabled" ) { + if ( value ) { + this.element.propAttr( "disabled", true ); + } else { + this.element.propAttr( "disabled", false ); + } + return; + } + this._resetButton(); + }, + + refresh: function() { + var isDisabled = this.element.is( ":disabled" ); + if ( isDisabled !== this.options.disabled ) { + this._setOption( "disabled", isDisabled ); + } + if ( this.type === "radio" ) { + radioGroup( this.element[0] ).each(function() { + if ( $( this ).is( ":checked" ) ) { + $( this ).button( "widget" ) + .addClass( "ui-state-active" ) + .attr( "aria-pressed", "true" ); + } else { + $( this ).button( "widget" ) + .removeClass( "ui-state-active" ) + .attr( "aria-pressed", "false" ); + } + }); + } else if ( this.type === "checkbox" ) { + if ( this.element.is( ":checked" ) ) { + this.buttonElement + .addClass( "ui-state-active" ) + .attr( "aria-pressed", "true" ); + } else { + this.buttonElement + .removeClass( "ui-state-active" ) + .attr( "aria-pressed", "false" ); + } + } + }, + + _resetButton: function() { + if ( this.type === "input" ) { + if ( this.options.label ) { + this.element.val( this.options.label ); + } + return; + } + var buttonElement = this.buttonElement.removeClass( typeClasses ), + buttonText = $( "", this.element[0].ownerDocument ) + .addClass( "ui-button-text" ) + .html( this.options.label ) + .appendTo( buttonElement.empty() ) + .text(), + icons = this.options.icons, + multipleIcons = icons.primary && icons.secondary, + buttonClasses = []; + + if ( icons.primary || icons.secondary ) { + if ( this.options.text ) { + buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) ); + } + + if ( icons.primary ) { + buttonElement.prepend( "" ); + } + + if ( icons.secondary ) { + buttonElement.append( "" ); + } + + if ( !this.options.text ) { + buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" ); + + if ( !this.hasTitle ) { + buttonElement.attr( "title", buttonText ); + } + } + } else { + buttonClasses.push( "ui-button-text-only" ); + } + buttonElement.addClass( buttonClasses.join( " " ) ); + } +}); + +$.widget( "ui.buttonset", { + options: { + items: ":button, :submit, :reset, :checkbox, :radio, a, :data(button)" + }, + + _create: function() { + this.element.addClass( "ui-buttonset" ); + }, + + _init: function() { + this.refresh(); + }, + + _setOption: function( key, value ) { + if ( key === "disabled" ) { + this.buttons.button( "option", key, value ); + } + + $.Widget.prototype._setOption.apply( this, arguments ); + }, + + refresh: function() { + var rtl = this.element.css( "direction" ) === "rtl"; + + this.buttons = this.element.find( this.options.items ) + .filter( ":ui-button" ) + .button( "refresh" ) + .end() + .not( ":ui-button" ) + .button() + .end() + .map(function() { + return $( this ).button( "widget" )[ 0 ]; + }) + .removeClass( "ui-corner-all ui-corner-left ui-corner-right" ) + .filter( ":first" ) + .addClass( rtl ? "ui-corner-right" : "ui-corner-left" ) + .end() + .filter( ":last" ) + .addClass( rtl ? "ui-corner-left" : "ui-corner-right" ) + .end() + .end(); + }, + + destroy: function() { + this.element.removeClass( "ui-buttonset" ); + this.buttons + .map(function() { + return $( this ).button( "widget" )[ 0 ]; + }) + .removeClass( "ui-corner-left ui-corner-right" ) + .end() + .button( "destroy" ); + + $.Widget.prototype.destroy.call( this ); + } +}); + +}( jQuery ) ); +/* + * jQuery UI Dialog 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.button.js + * jquery.ui.draggable.js + * jquery.ui.mouse.js + * jquery.ui.position.js + * jquery.ui.resizable.js + */ +(function( $, undefined ) { + +var uiDialogClasses = + 'ui-dialog ' + + 'ui-widget ' + + 'ui-widget-content ' + + 'ui-corner-all ', + sizeRelatedOptions = { + buttons: true, + height: true, + maxHeight: true, + maxWidth: true, + minHeight: true, + minWidth: true, + width: true + }, + resizableRelatedOptions = { + maxHeight: true, + maxWidth: true, + minHeight: true, + minWidth: true + }, + // support for jQuery 1.3.2 - handle common attrFn methods for dialog + attrFn = $.attrFn || { + val: true, + css: true, + html: true, + text: true, + data: true, + width: true, + height: true, + offset: true, + click: true + }; + +$.widget("ui.dialog", { + options: { + autoOpen: true, + buttons: {}, + closeOnEscape: true, + closeText: 'close', + dialogClass: '', + draggable: true, + hide: null, + height: 'auto', + maxHeight: false, + maxWidth: false, + minHeight: 150, + minWidth: 150, + modal: false, + position: { + my: 'center', + at: 'center', + collision: 'fit', + // ensure that the titlebar is never outside the document + using: function(pos) { + var topOffset = $(this).css(pos).offset().top; + if (topOffset < 0) { + $(this).css('top', pos.top - topOffset); + } + } + }, + resizable: true, + show: null, + stack: true, + title: '', + width: 300, + zIndex: 1000 + }, + + _create: function() { + this.originalTitle = this.element.attr('title'); + // #5742 - .attr() might return a DOMElement + if ( typeof this.originalTitle !== "string" ) { + this.originalTitle = ""; + } + + this.options.title = this.options.title || this.originalTitle; + var self = this, + options = self.options, + + title = options.title || ' ', + titleId = $.ui.dialog.getTitleId(self.element), + + uiDialog = (self.uiDialog = $('
    ')) + .appendTo(document.body) + .hide() + .addClass(uiDialogClasses + options.dialogClass) + .css({ + zIndex: options.zIndex + }) + // setting tabIndex makes the div focusable + // setting outline to 0 prevents a border on focus in Mozilla + .attr('tabIndex', -1).css('outline', 0).keydown(function(event) { + if (options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode && + event.keyCode === $.ui.keyCode.ESCAPE) { + + self.close(event); + event.preventDefault(); + } + }) + .attr({ + role: 'dialog', + 'aria-labelledby': titleId + }) + .mousedown(function(event) { + self.moveToTop(false, event); + }), + + uiDialogContent = self.element + .show() + .removeAttr('title') + .addClass( + 'ui-dialog-content ' + + 'ui-widget-content') + .appendTo(uiDialog), + + uiDialogTitlebar = (self.uiDialogTitlebar = $('
    ')) + .addClass( + 'ui-dialog-titlebar ' + + 'ui-widget-header ' + + 'ui-corner-all ' + + 'ui-helper-clearfix' + ) + .prependTo(uiDialog), + + uiDialogTitlebarClose = $('') + .addClass( + 'ui-dialog-titlebar-close ' + + 'ui-corner-all' + ) + .attr('role', 'button') + .hover( + function() { + uiDialogTitlebarClose.addClass('ui-state-hover'); + }, + function() { + uiDialogTitlebarClose.removeClass('ui-state-hover'); + } + ) + .focus(function() { + uiDialogTitlebarClose.addClass('ui-state-focus'); + }) + .blur(function() { + uiDialogTitlebarClose.removeClass('ui-state-focus'); + }) + .click(function(event) { + self.close(event); + return false; + }) + .appendTo(uiDialogTitlebar), + + uiDialogTitlebarCloseText = (self.uiDialogTitlebarCloseText = $('')) + .addClass( + 'ui-icon ' + + 'ui-icon-closethick' + ) + .text(options.closeText) + .appendTo(uiDialogTitlebarClose), + + uiDialogTitle = $('') + .addClass('ui-dialog-title') + .attr('id', titleId) + .html(title) + .prependTo(uiDialogTitlebar); + + //handling of deprecated beforeclose (vs beforeClose) option + //Ticket #4669 http://dev.jqueryui.com/ticket/4669 + //TODO: remove in 1.9pre + if ($.isFunction(options.beforeclose) && !$.isFunction(options.beforeClose)) { + options.beforeClose = options.beforeclose; + } + + uiDialogTitlebar.find("*").add(uiDialogTitlebar).disableSelection(); + + if (options.draggable && $.fn.draggable) { + self._makeDraggable(); + } + if (options.resizable && $.fn.resizable) { + self._makeResizable(); + } + + self._createButtons(options.buttons); + self._isOpen = false; + + if ($.fn.bgiframe) { + uiDialog.bgiframe(); + } + }, + + _init: function() { + if ( this.options.autoOpen ) { + this.open(); + } + }, + + destroy: function() { + var self = this; + + if (self.overlay) { + self.overlay.destroy(); + } + self.uiDialog.hide(); + self.element + .unbind('.dialog') + .removeData('dialog') + .removeClass('ui-dialog-content ui-widget-content') + .hide().appendTo('body'); + self.uiDialog.remove(); + + if (self.originalTitle) { + self.element.attr('title', self.originalTitle); + } + + return self; + }, + + widget: function() { + return this.uiDialog; + }, + + close: function(event) { + var self = this, + maxZ, thisZ; + + if (false === self._trigger('beforeClose', event)) { + return; + } + + if (self.overlay) { + self.overlay.destroy(); + } + self.uiDialog.unbind('keypress.ui-dialog'); + + self._isOpen = false; + + if (self.options.hide) { + self.uiDialog.hide(self.options.hide, function() { + self._trigger('close', event); + }); + } else { + self.uiDialog.hide(); + self._trigger('close', event); + } + + $.ui.dialog.overlay.resize(); + + // adjust the maxZ to allow other modal dialogs to continue to work (see #4309) + if (self.options.modal) { + maxZ = 0; + $('.ui-dialog').each(function() { + if (this !== self.uiDialog[0]) { + thisZ = $(this).css('z-index'); + if(!isNaN(thisZ)) { + maxZ = Math.max(maxZ, thisZ); + } + } + }); + $.ui.dialog.maxZ = maxZ; + } + + return self; + }, + + isOpen: function() { + return this._isOpen; + }, + + // the force parameter allows us to move modal dialogs to their correct + // position on open + moveToTop: function(force, event) { + var self = this, + options = self.options, + saveScroll; + + if ((options.modal && !force) || + (!options.stack && !options.modal)) { + return self._trigger('focus', event); + } + + if (options.zIndex > $.ui.dialog.maxZ) { + $.ui.dialog.maxZ = options.zIndex; + } + if (self.overlay) { + $.ui.dialog.maxZ += 1; + self.overlay.$el.css('z-index', $.ui.dialog.overlay.maxZ = $.ui.dialog.maxZ); + } + + //Save and then restore scroll since Opera 9.5+ resets when parent z-Index is changed. + // http://ui.jquery.com/bugs/ticket/3193 + saveScroll = { scrollTop: self.element.scrollTop(), scrollLeft: self.element.scrollLeft() }; + $.ui.dialog.maxZ += 1; + self.uiDialog.css('z-index', $.ui.dialog.maxZ); + self.element.attr(saveScroll); + self._trigger('focus', event); + + return self; + }, + + open: function() { + if (this._isOpen) { return; } + + var self = this, + options = self.options, + uiDialog = self.uiDialog; + + self.overlay = options.modal ? new $.ui.dialog.overlay(self) : null; + self._size(); + self._position(options.position); + uiDialog.show(options.show); + self.moveToTop(true); + + // prevent tabbing out of modal dialogs + if ( options.modal ) { + uiDialog.bind( "keydown.ui-dialog", function( event ) { + if ( event.keyCode !== $.ui.keyCode.TAB ) { + return; + } + + var tabbables = $(':tabbable', this), + first = tabbables.filter(':first'), + last = tabbables.filter(':last'); + + if (event.target === last[0] && !event.shiftKey) { + first.focus(1); + return false; + } else if (event.target === first[0] && event.shiftKey) { + last.focus(1); + return false; + } + }); + } + + // set focus to the first tabbable element in the content area or the first button + // if there are no tabbable elements, set focus on the dialog itself + $(self.element.find(':tabbable').get().concat( + uiDialog.find('.ui-dialog-buttonpane :tabbable').get().concat( + uiDialog.get()))).eq(0).focus(); + + self._isOpen = true; + self._trigger('open'); + + return self; + }, + + _createButtons: function(buttons) { + var self = this, + hasButtons = false, + uiDialogButtonPane = $('
    ') + .addClass( + 'ui-dialog-buttonpane ' + + 'ui-widget-content ' + + 'ui-helper-clearfix' + ), + uiButtonSet = $( "
    " ) + .addClass( "ui-dialog-buttonset" ) + .appendTo( uiDialogButtonPane ); + + // if we already have a button pane, remove it + self.uiDialog.find('.ui-dialog-buttonpane').remove(); + + if (typeof buttons === 'object' && buttons !== null) { + $.each(buttons, function() { + return !(hasButtons = true); + }); + } + if (hasButtons) { + $.each(buttons, function(name, props) { + props = $.isFunction( props ) ? + { click: props, text: name } : + props; + var button = $('') + .click(function() { + props.click.apply(self.element[0], arguments); + }) + .appendTo(uiButtonSet); + // can't use .attr( props, true ) with jQuery 1.3.2. + $.each( props, function( key, value ) { + if ( key === "click" ) { + return; + } + if ( key in attrFn ) { + button[ key ]( value ); + } else { + button.attr( key, value ); + } + }); + if ($.fn.button) { + button.button(); + } + }); + uiDialogButtonPane.appendTo(self.uiDialog); + } + }, + + _makeDraggable: function() { + var self = this, + options = self.options, + doc = $(document), + heightBeforeDrag; + + function filteredUi(ui) { + return { + position: ui.position, + offset: ui.offset + }; + } + + self.uiDialog.draggable({ + cancel: '.ui-dialog-content, .ui-dialog-titlebar-close', + handle: '.ui-dialog-titlebar', + containment: 'document', + start: function(event, ui) { + heightBeforeDrag = options.height === "auto" ? "auto" : $(this).height(); + $(this).height($(this).height()).addClass("ui-dialog-dragging"); + self._trigger('dragStart', event, filteredUi(ui)); + }, + drag: function(event, ui) { + self._trigger('drag', event, filteredUi(ui)); + }, + stop: function(event, ui) { + options.position = [ui.position.left - doc.scrollLeft(), + ui.position.top - doc.scrollTop()]; + $(this).removeClass("ui-dialog-dragging").height(heightBeforeDrag); + self._trigger('dragStop', event, filteredUi(ui)); + $.ui.dialog.overlay.resize(); + } + }); + }, + + _makeResizable: function(handles) { + handles = (handles === undefined ? this.options.resizable : handles); + var self = this, + options = self.options, + // .ui-resizable has position: relative defined in the stylesheet + // but dialogs have to use absolute or fixed positioning + position = self.uiDialog.css('position'), + resizeHandles = (typeof handles === 'string' ? + handles : + 'n,e,s,w,se,sw,ne,nw' + ); + + function filteredUi(ui) { + return { + originalPosition: ui.originalPosition, + originalSize: ui.originalSize, + position: ui.position, + size: ui.size + }; + } + + self.uiDialog.resizable({ + cancel: '.ui-dialog-content', + containment: 'document', + alsoResize: self.element, + maxWidth: options.maxWidth, + maxHeight: options.maxHeight, + minWidth: options.minWidth, + minHeight: self._minHeight(), + handles: resizeHandles, + start: function(event, ui) { + $(this).addClass("ui-dialog-resizing"); + self._trigger('resizeStart', event, filteredUi(ui)); + }, + resize: function(event, ui) { + self._trigger('resize', event, filteredUi(ui)); + }, + stop: function(event, ui) { + $(this).removeClass("ui-dialog-resizing"); + options.height = $(this).height(); + options.width = $(this).width(); + self._trigger('resizeStop', event, filteredUi(ui)); + $.ui.dialog.overlay.resize(); + } + }) + .css('position', position) + .find('.ui-resizable-se').addClass('ui-icon ui-icon-grip-diagonal-se'); + }, + + _minHeight: function() { + var options = this.options; + + if (options.height === 'auto') { + return options.minHeight; + } else { + return Math.min(options.minHeight, options.height); + } + }, + + _position: function(position) { + var myAt = [], + offset = [0, 0], + isVisible; + + if (position) { + // deep extending converts arrays to objects in jQuery <= 1.3.2 :-( + // if (typeof position == 'string' || $.isArray(position)) { + // myAt = $.isArray(position) ? position : position.split(' '); + + if (typeof position === 'string' || (typeof position === 'object' && '0' in position)) { + myAt = position.split ? position.split(' ') : [position[0], position[1]]; + if (myAt.length === 1) { + myAt[1] = myAt[0]; + } + + $.each(['left', 'top'], function(i, offsetPosition) { + if (+myAt[i] === myAt[i]) { + offset[i] = myAt[i]; + myAt[i] = offsetPosition; + } + }); + + position = { + my: myAt.join(" "), + at: myAt.join(" "), + offset: offset.join(" ") + }; + } + + position = $.extend({}, $.ui.dialog.prototype.options.position, position); + } else { + position = $.ui.dialog.prototype.options.position; + } + + // need to show the dialog to get the actual offset in the position plugin + isVisible = this.uiDialog.is(':visible'); + if (!isVisible) { + this.uiDialog.show(); + } + this.uiDialog + // workaround for jQuery bug #5781 http://dev.jquery.com/ticket/5781 + .css({ top: 0, left: 0 }) + .position($.extend({ of: window }, position)); + if (!isVisible) { + this.uiDialog.hide(); + } + }, + + _setOptions: function( options ) { + var self = this, + resizableOptions = {}, + resize = false; + + $.each( options, function( key, value ) { + self._setOption( key, value ); + + if ( key in sizeRelatedOptions ) { + resize = true; + } + if ( key in resizableRelatedOptions ) { + resizableOptions[ key ] = value; + } + }); + + if ( resize ) { + this._size(); + } + if ( this.uiDialog.is( ":data(resizable)" ) ) { + this.uiDialog.resizable( "option", resizableOptions ); + } + }, + + _setOption: function(key, value){ + var self = this, + uiDialog = self.uiDialog; + + switch (key) { + //handling of deprecated beforeclose (vs beforeClose) option + //Ticket #4669 http://dev.jqueryui.com/ticket/4669 + //TODO: remove in 1.9pre + case "beforeclose": + key = "beforeClose"; + break; + case "buttons": + self._createButtons(value); + break; + case "closeText": + // ensure that we always pass a string + self.uiDialogTitlebarCloseText.text("" + value); + break; + case "dialogClass": + uiDialog + .removeClass(self.options.dialogClass) + .addClass(uiDialogClasses + value); + break; + case "disabled": + if (value) { + uiDialog.addClass('ui-dialog-disabled'); + } else { + uiDialog.removeClass('ui-dialog-disabled'); + } + break; + case "draggable": + var isDraggable = uiDialog.is( ":data(draggable)" ); + if ( isDraggable && !value ) { + uiDialog.draggable( "destroy" ); + } + + if ( !isDraggable && value ) { + self._makeDraggable(); + } + break; + case "position": + self._position(value); + break; + case "resizable": + // currently resizable, becoming non-resizable + var isResizable = uiDialog.is( ":data(resizable)" ); + if (isResizable && !value) { + uiDialog.resizable('destroy'); + } + + // currently resizable, changing handles + if (isResizable && typeof value === 'string') { + uiDialog.resizable('option', 'handles', value); + } + + // currently non-resizable, becoming resizable + if (!isResizable && value !== false) { + self._makeResizable(value); + } + break; + case "title": + // convert whatever was passed in o a string, for html() to not throw up + $(".ui-dialog-title", self.uiDialogTitlebar).html("" + (value || ' ')); + break; + } + + $.Widget.prototype._setOption.apply(self, arguments); + }, + + _size: function() { + /* If the user has resized the dialog, the .ui-dialog and .ui-dialog-content + * divs will both have width and height set, so we need to reset them + */ + var options = this.options, + nonContentHeight, + minContentHeight, + isVisible = this.uiDialog.is( ":visible" ); + + // reset content sizing + this.element.show().css({ + width: 'auto', + minHeight: 0, + height: 0 + }); + + if (options.minWidth > options.width) { + options.width = options.minWidth; + } + + // reset wrapper sizing + // determine the height of all the non-content elements + nonContentHeight = this.uiDialog.css({ + height: 'auto', + width: options.width + }) + .height(); + minContentHeight = Math.max( 0, options.minHeight - nonContentHeight ); + + if ( options.height === "auto" ) { + // only needed for IE6 support + if ( $.support.minHeight ) { + this.element.css({ + minHeight: minContentHeight, + height: "auto" + }); + } else { + this.uiDialog.show(); + var autoHeight = this.element.css( "height", "auto" ).height(); + if ( !isVisible ) { + this.uiDialog.hide(); + } + this.element.height( Math.max( autoHeight, minContentHeight ) ); + } + } else { + this.element.height( Math.max( options.height - nonContentHeight, 0 ) ); + } + + if (this.uiDialog.is(':data(resizable)')) { + this.uiDialog.resizable('option', 'minHeight', this._minHeight()); + } + } +}); + +$.extend($.ui.dialog, { + version: "1.8.17", + + uuid: 0, + maxZ: 0, + + getTitleId: function($el) { + var id = $el.attr('id'); + if (!id) { + this.uuid += 1; + id = this.uuid; + } + return 'ui-dialog-title-' + id; + }, + + overlay: function(dialog) { + this.$el = $.ui.dialog.overlay.create(dialog); + } +}); + +$.extend($.ui.dialog.overlay, { + instances: [], + // reuse old instances due to IE memory leak with alpha transparency (see #5185) + oldInstances: [], + maxZ: 0, + events: $.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','), + function(event) { return event + '.dialog-overlay'; }).join(' '), + create: function(dialog) { + if (this.instances.length === 0) { + // prevent use of anchors and inputs + // we use a setTimeout in case the overlay is created from an + // event that we're going to be cancelling (see #2804) + setTimeout(function() { + // handle $(el).dialog().dialog('close') (see #4065) + if ($.ui.dialog.overlay.instances.length) { + $(document).bind($.ui.dialog.overlay.events, function(event) { + // stop events if the z-index of the target is < the z-index of the overlay + // we cannot return true when we don't want to cancel the event (#3523) + if ($(event.target).zIndex() < $.ui.dialog.overlay.maxZ) { + return false; + } + }); + } + }, 1); + + // allow closing by pressing the escape key + $(document).bind('keydown.dialog-overlay', function(event) { + if (dialog.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode && + event.keyCode === $.ui.keyCode.ESCAPE) { + + dialog.close(event); + event.preventDefault(); + } + }); + + // handle window resize + $(window).bind('resize.dialog-overlay', $.ui.dialog.overlay.resize); + } + + var $el = (this.oldInstances.pop() || $('
    ').addClass('ui-widget-overlay')) + .appendTo(document.body) + .css({ + width: this.width(), + height: this.height() + }); + + if ($.fn.bgiframe) { + $el.bgiframe(); + } + + this.instances.push($el); + return $el; + }, + + destroy: function($el) { + var indexOf = $.inArray($el, this.instances); + if (indexOf != -1){ + this.oldInstances.push(this.instances.splice(indexOf, 1)[0]); + } + + if (this.instances.length === 0) { + $([document, window]).unbind('.dialog-overlay'); + } + + $el.remove(); + + // adjust the maxZ to allow other modal dialogs to continue to work (see #4309) + var maxZ = 0; + $.each(this.instances, function() { + maxZ = Math.max(maxZ, this.css('z-index')); + }); + this.maxZ = maxZ; + }, + + height: function() { + var scrollHeight, + offsetHeight; + // handle IE 6 + if ($.browser.msie && $.browser.version < 7) { + scrollHeight = Math.max( + document.documentElement.scrollHeight, + document.body.scrollHeight + ); + offsetHeight = Math.max( + document.documentElement.offsetHeight, + document.body.offsetHeight + ); + + if (scrollHeight < offsetHeight) { + return $(window).height() + 'px'; + } else { + return scrollHeight + 'px'; + } + // handle "good" browsers + } else { + return $(document).height() + 'px'; + } + }, + + width: function() { + var scrollWidth, + offsetWidth; + // handle IE + if ( $.browser.msie ) { + scrollWidth = Math.max( + document.documentElement.scrollWidth, + document.body.scrollWidth + ); + offsetWidth = Math.max( + document.documentElement.offsetWidth, + document.body.offsetWidth + ); + + if (scrollWidth < offsetWidth) { + return $(window).width() + 'px'; + } else { + return scrollWidth + 'px'; + } + // handle "good" browsers + } else { + return $(document).width() + 'px'; + } + }, + + resize: function() { + /* If the dialog is draggable and the user drags it past the + * right edge of the window, the document becomes wider so we + * need to stretch the overlay. If the user then drags the + * dialog back to the left, the document will become narrower, + * so we need to shrink the overlay to the appropriate size. + * This is handled by shrinking the overlay before setting it + * to the full document size. + */ + var $overlays = $([]); + $.each($.ui.dialog.overlay.instances, function() { + $overlays = $overlays.add(this); + }); + + $overlays.css({ + width: 0, + height: 0 + }).css({ + width: $.ui.dialog.overlay.width(), + height: $.ui.dialog.overlay.height() + }); + } +}); + +$.extend($.ui.dialog.overlay.prototype, { + destroy: function() { + $.ui.dialog.overlay.destroy(this.$el); + } +}); + +}(jQuery)); +/* + * jQuery UI Slider 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Slider + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +// number of pages in a slider +// (how many times can you page up/down to go through the whole range) +var numPages = 5; + +$.widget( "ui.slider", $.ui.mouse, { + + widgetEventPrefix: "slide", + + options: { + animate: false, + distance: 0, + max: 100, + min: 0, + orientation: "horizontal", + range: false, + step: 1, + value: 0, + values: null + }, + + _create: function() { + var self = this, + o = this.options, + existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ), + handle = "", + handleCount = ( o.values && o.values.length ) || 1, + handles = []; + + this._keySliding = false; + this._mouseSliding = false; + this._animateOff = true; + this._handleIndex = null; + this._detectOrientation(); + this._mouseInit(); + + this.element + .addClass( "ui-slider" + + " ui-slider-" + this.orientation + + " ui-widget" + + " ui-widget-content" + + " ui-corner-all" + + ( o.disabled ? " ui-slider-disabled ui-disabled" : "" ) ); + + this.range = $([]); + + if ( o.range ) { + if ( o.range === true ) { + if ( !o.values ) { + o.values = [ this._valueMin(), this._valueMin() ]; + } + if ( o.values.length && o.values.length !== 2 ) { + o.values = [ o.values[0], o.values[0] ]; + } + } + + this.range = $( "
    " ) + .appendTo( this.element ) + .addClass( "ui-slider-range" + + // note: this isn't the most fittingly semantic framework class for this element, + // but worked best visually with a variety of themes + " ui-widget-header" + + ( ( o.range === "min" || o.range === "max" ) ? " ui-slider-range-" + o.range : "" ) ); + } + + for ( var i = existingHandles.length; i < handleCount; i += 1 ) { + handles.push( handle ); + } + + this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( self.element ) ); + + this.handle = this.handles.eq( 0 ); + + this.handles.add( this.range ).filter( "a" ) + .click(function( event ) { + event.preventDefault(); + }) + .hover(function() { + if ( !o.disabled ) { + $( this ).addClass( "ui-state-hover" ); + } + }, function() { + $( this ).removeClass( "ui-state-hover" ); + }) + .focus(function() { + if ( !o.disabled ) { + $( ".ui-slider .ui-state-focus" ).removeClass( "ui-state-focus" ); + $( this ).addClass( "ui-state-focus" ); + } else { + $( this ).blur(); + } + }) + .blur(function() { + $( this ).removeClass( "ui-state-focus" ); + }); + + this.handles.each(function( i ) { + $( this ).data( "index.ui-slider-handle", i ); + }); + + this.handles + .keydown(function( event ) { + var ret = true, + index = $( this ).data( "index.ui-slider-handle" ), + allowed, + curVal, + newVal, + step; + + if ( self.options.disabled ) { + return; + } + + switch ( event.keyCode ) { + case $.ui.keyCode.HOME: + case $.ui.keyCode.END: + case $.ui.keyCode.PAGE_UP: + case $.ui.keyCode.PAGE_DOWN: + case $.ui.keyCode.UP: + case $.ui.keyCode.RIGHT: + case $.ui.keyCode.DOWN: + case $.ui.keyCode.LEFT: + ret = false; + if ( !self._keySliding ) { + self._keySliding = true; + $( this ).addClass( "ui-state-active" ); + allowed = self._start( event, index ); + if ( allowed === false ) { + return; + } + } + break; + } + + step = self.options.step; + if ( self.options.values && self.options.values.length ) { + curVal = newVal = self.values( index ); + } else { + curVal = newVal = self.value(); + } + + switch ( event.keyCode ) { + case $.ui.keyCode.HOME: + newVal = self._valueMin(); + break; + case $.ui.keyCode.END: + newVal = self._valueMax(); + break; + case $.ui.keyCode.PAGE_UP: + newVal = self._trimAlignValue( curVal + ( (self._valueMax() - self._valueMin()) / numPages ) ); + break; + case $.ui.keyCode.PAGE_DOWN: + newVal = self._trimAlignValue( curVal - ( (self._valueMax() - self._valueMin()) / numPages ) ); + break; + case $.ui.keyCode.UP: + case $.ui.keyCode.RIGHT: + if ( curVal === self._valueMax() ) { + return; + } + newVal = self._trimAlignValue( curVal + step ); + break; + case $.ui.keyCode.DOWN: + case $.ui.keyCode.LEFT: + if ( curVal === self._valueMin() ) { + return; + } + newVal = self._trimAlignValue( curVal - step ); + break; + } + + self._slide( event, index, newVal ); + + return ret; + + }) + .keyup(function( event ) { + var index = $( this ).data( "index.ui-slider-handle" ); + + if ( self._keySliding ) { + self._keySliding = false; + self._stop( event, index ); + self._change( event, index ); + $( this ).removeClass( "ui-state-active" ); + } + + }); + + this._refreshValue(); + + this._animateOff = false; + }, + + destroy: function() { + this.handles.remove(); + this.range.remove(); + + this.element + .removeClass( "ui-slider" + + " ui-slider-horizontal" + + " ui-slider-vertical" + + " ui-slider-disabled" + + " ui-widget" + + " ui-widget-content" + + " ui-corner-all" ) + .removeData( "slider" ) + .unbind( ".slider" ); + + this._mouseDestroy(); + + return this; + }, + + _mouseCapture: function( event ) { + var o = this.options, + position, + normValue, + distance, + closestHandle, + self, + index, + allowed, + offset, + mouseOverHandle; + + if ( o.disabled ) { + return false; + } + + this.elementSize = { + width: this.element.outerWidth(), + height: this.element.outerHeight() + }; + this.elementOffset = this.element.offset(); + + position = { x: event.pageX, y: event.pageY }; + normValue = this._normValueFromMouse( position ); + distance = this._valueMax() - this._valueMin() + 1; + self = this; + this.handles.each(function( i ) { + var thisDistance = Math.abs( normValue - self.values(i) ); + if ( distance > thisDistance ) { + distance = thisDistance; + closestHandle = $( this ); + index = i; + } + }); + + // workaround for bug #3736 (if both handles of a range are at 0, + // the first is always used as the one with least distance, + // and moving it is obviously prevented by preventing negative ranges) + if( o.range === true && this.values(1) === o.min ) { + index += 1; + closestHandle = $( this.handles[index] ); + } + + allowed = this._start( event, index ); + if ( allowed === false ) { + return false; + } + this._mouseSliding = true; + + self._handleIndex = index; + + closestHandle + .addClass( "ui-state-active" ) + .focus(); + + offset = closestHandle.offset(); + mouseOverHandle = !$( event.target ).parents().andSelf().is( ".ui-slider-handle" ); + this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : { + left: event.pageX - offset.left - ( closestHandle.width() / 2 ), + top: event.pageY - offset.top - + ( closestHandle.height() / 2 ) - + ( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) - + ( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) + + ( parseInt( closestHandle.css("marginTop"), 10 ) || 0) + }; + + if ( !this.handles.hasClass( "ui-state-hover" ) ) { + this._slide( event, index, normValue ); + } + this._animateOff = true; + return true; + }, + + _mouseStart: function( event ) { + return true; + }, + + _mouseDrag: function( event ) { + var position = { x: event.pageX, y: event.pageY }, + normValue = this._normValueFromMouse( position ); + + this._slide( event, this._handleIndex, normValue ); + + return false; + }, + + _mouseStop: function( event ) { + this.handles.removeClass( "ui-state-active" ); + this._mouseSliding = false; + + this._stop( event, this._handleIndex ); + this._change( event, this._handleIndex ); + + this._handleIndex = null; + this._clickOffset = null; + this._animateOff = false; + + return false; + }, + + _detectOrientation: function() { + this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal"; + }, + + _normValueFromMouse: function( position ) { + var pixelTotal, + pixelMouse, + percentMouse, + valueTotal, + valueMouse; + + if ( this.orientation === "horizontal" ) { + pixelTotal = this.elementSize.width; + pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 ); + } else { + pixelTotal = this.elementSize.height; + pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 ); + } + + percentMouse = ( pixelMouse / pixelTotal ); + if ( percentMouse > 1 ) { + percentMouse = 1; + } + if ( percentMouse < 0 ) { + percentMouse = 0; + } + if ( this.orientation === "vertical" ) { + percentMouse = 1 - percentMouse; + } + + valueTotal = this._valueMax() - this._valueMin(); + valueMouse = this._valueMin() + percentMouse * valueTotal; + + return this._trimAlignValue( valueMouse ); + }, + + _start: function( event, index ) { + var uiHash = { + handle: this.handles[ index ], + value: this.value() + }; + if ( this.options.values && this.options.values.length ) { + uiHash.value = this.values( index ); + uiHash.values = this.values(); + } + return this._trigger( "start", event, uiHash ); + }, + + _slide: function( event, index, newVal ) { + var otherVal, + newValues, + allowed; + + if ( this.options.values && this.options.values.length ) { + otherVal = this.values( index ? 0 : 1 ); + + if ( ( this.options.values.length === 2 && this.options.range === true ) && + ( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) ) + ) { + newVal = otherVal; + } + + if ( newVal !== this.values( index ) ) { + newValues = this.values(); + newValues[ index ] = newVal; + // A slide can be canceled by returning false from the slide callback + allowed = this._trigger( "slide", event, { + handle: this.handles[ index ], + value: newVal, + values: newValues + } ); + otherVal = this.values( index ? 0 : 1 ); + if ( allowed !== false ) { + this.values( index, newVal, true ); + } + } + } else { + if ( newVal !== this.value() ) { + // A slide can be canceled by returning false from the slide callback + allowed = this._trigger( "slide", event, { + handle: this.handles[ index ], + value: newVal + } ); + if ( allowed !== false ) { + this.value( newVal ); + } + } + } + }, + + _stop: function( event, index ) { + var uiHash = { + handle: this.handles[ index ], + value: this.value() + }; + if ( this.options.values && this.options.values.length ) { + uiHash.value = this.values( index ); + uiHash.values = this.values(); + } + + this._trigger( "stop", event, uiHash ); + }, + + _change: function( event, index ) { + if ( !this._keySliding && !this._mouseSliding ) { + var uiHash = { + handle: this.handles[ index ], + value: this.value() + }; + if ( this.options.values && this.options.values.length ) { + uiHash.value = this.values( index ); + uiHash.values = this.values(); + } + + this._trigger( "change", event, uiHash ); + } + }, + + value: function( newValue ) { + if ( arguments.length ) { + this.options.value = this._trimAlignValue( newValue ); + this._refreshValue(); + this._change( null, 0 ); + return; + } + + return this._value(); + }, + + values: function( index, newValue ) { + var vals, + newValues, + i; + + if ( arguments.length > 1 ) { + this.options.values[ index ] = this._trimAlignValue( newValue ); + this._refreshValue(); + this._change( null, index ); + return; + } + + if ( arguments.length ) { + if ( $.isArray( arguments[ 0 ] ) ) { + vals = this.options.values; + newValues = arguments[ 0 ]; + for ( i = 0; i < vals.length; i += 1 ) { + vals[ i ] = this._trimAlignValue( newValues[ i ] ); + this._change( null, i ); + } + this._refreshValue(); + } else { + if ( this.options.values && this.options.values.length ) { + return this._values( index ); + } else { + return this.value(); + } + } + } else { + return this._values(); + } + }, + + _setOption: function( key, value ) { + var i, + valsLength = 0; + + if ( $.isArray( this.options.values ) ) { + valsLength = this.options.values.length; + } + + $.Widget.prototype._setOption.apply( this, arguments ); + + switch ( key ) { + case "disabled": + if ( value ) { + this.handles.filter( ".ui-state-focus" ).blur(); + this.handles.removeClass( "ui-state-hover" ); + this.handles.propAttr( "disabled", true ); + this.element.addClass( "ui-disabled" ); + } else { + this.handles.propAttr( "disabled", false ); + this.element.removeClass( "ui-disabled" ); + } + break; + case "orientation": + this._detectOrientation(); + this.element + .removeClass( "ui-slider-horizontal ui-slider-vertical" ) + .addClass( "ui-slider-" + this.orientation ); + this._refreshValue(); + break; + case "value": + this._animateOff = true; + this._refreshValue(); + this._change( null, 0 ); + this._animateOff = false; + break; + case "values": + this._animateOff = true; + this._refreshValue(); + for ( i = 0; i < valsLength; i += 1 ) { + this._change( null, i ); + } + this._animateOff = false; + break; + } + }, + + //internal value getter + // _value() returns value trimmed by min and max, aligned by step + _value: function() { + var val = this.options.value; + val = this._trimAlignValue( val ); + + return val; + }, + + //internal values getter + // _values() returns array of values trimmed by min and max, aligned by step + // _values( index ) returns single value trimmed by min and max, aligned by step + _values: function( index ) { + var val, + vals, + i; + + if ( arguments.length ) { + val = this.options.values[ index ]; + val = this._trimAlignValue( val ); + + return val; + } else { + // .slice() creates a copy of the array + // this copy gets trimmed by min and max and then returned + vals = this.options.values.slice(); + for ( i = 0; i < vals.length; i+= 1) { + vals[ i ] = this._trimAlignValue( vals[ i ] ); + } + + return vals; + } + }, + + // returns the step-aligned value that val is closest to, between (inclusive) min and max + _trimAlignValue: function( val ) { + if ( val <= this._valueMin() ) { + return this._valueMin(); + } + if ( val >= this._valueMax() ) { + return this._valueMax(); + } + var step = ( this.options.step > 0 ) ? this.options.step : 1, + valModStep = (val - this._valueMin()) % step, + alignValue = val - valModStep; + + if ( Math.abs(valModStep) * 2 >= step ) { + alignValue += ( valModStep > 0 ) ? step : ( -step ); + } + + // Since JavaScript has problems with large floats, round + // the final value to 5 digits after the decimal point (see #4124) + return parseFloat( alignValue.toFixed(5) ); + }, + + _valueMin: function() { + return this.options.min; + }, + + _valueMax: function() { + return this.options.max; + }, + + _refreshValue: function() { + var oRange = this.options.range, + o = this.options, + self = this, + animate = ( !this._animateOff ) ? o.animate : false, + valPercent, + _set = {}, + lastValPercent, + value, + valueMin, + valueMax; + + if ( this.options.values && this.options.values.length ) { + this.handles.each(function( i, j ) { + valPercent = ( self.values(i) - self._valueMin() ) / ( self._valueMax() - self._valueMin() ) * 100; + _set[ self.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%"; + $( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate ); + if ( self.options.range === true ) { + if ( self.orientation === "horizontal" ) { + if ( i === 0 ) { + self.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate ); + } + if ( i === 1 ) { + self.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } ); + } + } else { + if ( i === 0 ) { + self.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate ); + } + if ( i === 1 ) { + self.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } ); + } + } + } + lastValPercent = valPercent; + }); + } else { + value = this.value(); + valueMin = this._valueMin(); + valueMax = this._valueMax(); + valPercent = ( valueMax !== valueMin ) ? + ( value - valueMin ) / ( valueMax - valueMin ) * 100 : + 0; + _set[ self.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%"; + this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate ); + + if ( oRange === "min" && this.orientation === "horizontal" ) { + this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate ); + } + if ( oRange === "max" && this.orientation === "horizontal" ) { + this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } ); + } + if ( oRange === "min" && this.orientation === "vertical" ) { + this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate ); + } + if ( oRange === "max" && this.orientation === "vertical" ) { + this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } ); + } + } + } + +}); + +$.extend( $.ui.slider, { + version: "1.8.17" +}); + +}(jQuery)); +/* + * jQuery UI Tabs 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Tabs + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +var tabId = 0, + listId = 0; + +function getNextTabId() { + return ++tabId; +} + +function getNextListId() { + return ++listId; +} + +$.widget( "ui.tabs", { + options: { + add: null, + ajaxOptions: null, + cache: false, + cookie: null, // e.g. { expires: 7, path: '/', domain: 'jquery.com', secure: true } + collapsible: false, + disable: null, + disabled: [], + enable: null, + event: "click", + fx: null, // e.g. { height: 'toggle', opacity: 'toggle', duration: 200 } + idPrefix: "ui-tabs-", + load: null, + panelTemplate: "
    ", + remove: null, + select: null, + show: null, + spinner: "Loading…", + tabTemplate: "
  • #{label}
  • " + }, + + _create: function() { + this._tabify( true ); + }, + + _setOption: function( key, value ) { + if ( key == "selected" ) { + if (this.options.collapsible && value == this.options.selected ) { + return; + } + this.select( value ); + } else { + this.options[ key ] = value; + this._tabify(); + } + }, + + _tabId: function( a ) { + return a.title && a.title.replace( /\s/g, "_" ).replace( /[^\w\u00c0-\uFFFF-]/g, "" ) || + this.options.idPrefix + getNextTabId(); + }, + + _sanitizeSelector: function( hash ) { + // we need this because an id may contain a ":" + return hash.replace( /:/g, "\\:" ); + }, + + _cookie: function() { + var cookie = this.cookie || + ( this.cookie = this.options.cookie.name || "ui-tabs-" + getNextListId() ); + return $.cookie.apply( null, [ cookie ].concat( $.makeArray( arguments ) ) ); + }, + + _ui: function( tab, panel ) { + return { + tab: tab, + panel: panel, + index: this.anchors.index( tab ) + }; + }, + + _cleanup: function() { + // restore all former loading tabs labels + this.lis.filter( ".ui-state-processing" ) + .removeClass( "ui-state-processing" ) + .find( "span:data(label.tabs)" ) + .each(function() { + var el = $( this ); + el.html( el.data( "label.tabs" ) ).removeData( "label.tabs" ); + }); + }, + + _tabify: function( init ) { + var self = this, + o = this.options, + fragmentId = /^#.+/; // Safari 2 reports '#' for an empty hash + + this.list = this.element.find( "ol,ul" ).eq( 0 ); + this.lis = $( " > li:has(a[href])", this.list ); + this.anchors = this.lis.map(function() { + return $( "a", this )[ 0 ]; + }); + this.panels = $( [] ); + + this.anchors.each(function( i, a ) { + var href = $( a ).attr( "href" ); + // For dynamically created HTML that contains a hash as href IE < 8 expands + // such href to the full page url with hash and then misinterprets tab as ajax. + // Same consideration applies for an added tab with a fragment identifier + // since a[href=#fragment-identifier] does unexpectedly not match. + // Thus normalize href attribute... + var hrefBase = href.split( "#" )[ 0 ], + baseEl; + if ( hrefBase && ( hrefBase === location.toString().split( "#" )[ 0 ] || + ( baseEl = $( "base" )[ 0 ]) && hrefBase === baseEl.href ) ) { + href = a.hash; + a.href = href; + } + + // inline tab + if ( fragmentId.test( href ) ) { + self.panels = self.panels.add( self.element.find( self._sanitizeSelector( href ) ) ); + // remote tab + // prevent loading the page itself if href is just "#" + } else if ( href && href !== "#" ) { + // required for restore on destroy + $.data( a, "href.tabs", href ); + + // TODO until #3808 is fixed strip fragment identifier from url + // (IE fails to load from such url) + $.data( a, "load.tabs", href.replace( /#.*$/, "" ) ); + + var id = self._tabId( a ); + a.href = "#" + id; + var $panel = self.element.find( "#" + id ); + if ( !$panel.length ) { + $panel = $( o.panelTemplate ) + .attr( "id", id ) + .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" ) + .insertAfter( self.panels[ i - 1 ] || self.list ); + $panel.data( "destroy.tabs", true ); + } + self.panels = self.panels.add( $panel ); + // invalid tab href + } else { + o.disabled.push( i ); + } + }); + + // initialization from scratch + if ( init ) { + // attach necessary classes for styling + this.element.addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" ); + this.list.addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" ); + this.lis.addClass( "ui-state-default ui-corner-top" ); + this.panels.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" ); + + // Selected tab + // use "selected" option or try to retrieve: + // 1. from fragment identifier in url + // 2. from cookie + // 3. from selected class attribute on
  • + if ( o.selected === undefined ) { + if ( location.hash ) { + this.anchors.each(function( i, a ) { + if ( a.hash == location.hash ) { + o.selected = i; + return false; + } + }); + } + if ( typeof o.selected !== "number" && o.cookie ) { + o.selected = parseInt( self._cookie(), 10 ); + } + if ( typeof o.selected !== "number" && this.lis.filter( ".ui-tabs-selected" ).length ) { + o.selected = this.lis.index( this.lis.filter( ".ui-tabs-selected" ) ); + } + o.selected = o.selected || ( this.lis.length ? 0 : -1 ); + } else if ( o.selected === null ) { // usage of null is deprecated, TODO remove in next release + o.selected = -1; + } + + // sanity check - default to first tab... + o.selected = ( ( o.selected >= 0 && this.anchors[ o.selected ] ) || o.selected < 0 ) + ? o.selected + : 0; + + // Take disabling tabs via class attribute from HTML + // into account and update option properly. + // A selected tab cannot become disabled. + o.disabled = $.unique( o.disabled.concat( + $.map( this.lis.filter( ".ui-state-disabled" ), function( n, i ) { + return self.lis.index( n ); + }) + ) ).sort(); + + if ( $.inArray( o.selected, o.disabled ) != -1 ) { + o.disabled.splice( $.inArray( o.selected, o.disabled ), 1 ); + } + + // highlight selected tab + this.panels.addClass( "ui-tabs-hide" ); + this.lis.removeClass( "ui-tabs-selected ui-state-active" ); + // check for length avoids error when initializing empty list + if ( o.selected >= 0 && this.anchors.length ) { + self.element.find( self._sanitizeSelector( self.anchors[ o.selected ].hash ) ).removeClass( "ui-tabs-hide" ); + this.lis.eq( o.selected ).addClass( "ui-tabs-selected ui-state-active" ); + + // seems to be expected behavior that the show callback is fired + self.element.queue( "tabs", function() { + self._trigger( "show", null, + self._ui( self.anchors[ o.selected ], self.element.find( self._sanitizeSelector( self.anchors[ o.selected ].hash ) )[ 0 ] ) ); + }); + + this.load( o.selected ); + } + + // clean up to avoid memory leaks in certain versions of IE 6 + // TODO: namespace this event + $( window ).bind( "unload", function() { + self.lis.add( self.anchors ).unbind( ".tabs" ); + self.lis = self.anchors = self.panels = null; + }); + // update selected after add/remove + } else { + o.selected = this.lis.index( this.lis.filter( ".ui-tabs-selected" ) ); + } + + // update collapsible + // TODO: use .toggleClass() + this.element[ o.collapsible ? "addClass" : "removeClass" ]( "ui-tabs-collapsible" ); + + // set or update cookie after init and add/remove respectively + if ( o.cookie ) { + this._cookie( o.selected, o.cookie ); + } + + // disable tabs + for ( var i = 0, li; ( li = this.lis[ i ] ); i++ ) { + $( li )[ $.inArray( i, o.disabled ) != -1 && + // TODO: use .toggleClass() + !$( li ).hasClass( "ui-tabs-selected" ) ? "addClass" : "removeClass" ]( "ui-state-disabled" ); + } + + // reset cache if switching from cached to not cached + if ( o.cache === false ) { + this.anchors.removeData( "cache.tabs" ); + } + + // remove all handlers before, tabify may run on existing tabs after add or option change + this.lis.add( this.anchors ).unbind( ".tabs" ); + + if ( o.event !== "mouseover" ) { + var addState = function( state, el ) { + if ( el.is( ":not(.ui-state-disabled)" ) ) { + el.addClass( "ui-state-" + state ); + } + }; + var removeState = function( state, el ) { + el.removeClass( "ui-state-" + state ); + }; + this.lis.bind( "mouseover.tabs" , function() { + addState( "hover", $( this ) ); + }); + this.lis.bind( "mouseout.tabs", function() { + removeState( "hover", $( this ) ); + }); + this.anchors.bind( "focus.tabs", function() { + addState( "focus", $( this ).closest( "li" ) ); + }); + this.anchors.bind( "blur.tabs", function() { + removeState( "focus", $( this ).closest( "li" ) ); + }); + } + + // set up animations + var hideFx, showFx; + if ( o.fx ) { + if ( $.isArray( o.fx ) ) { + hideFx = o.fx[ 0 ]; + showFx = o.fx[ 1 ]; + } else { + hideFx = showFx = o.fx; + } + } + + // Reset certain styles left over from animation + // and prevent IE's ClearType bug... + function resetStyle( $el, fx ) { + $el.css( "display", "" ); + if ( !$.support.opacity && fx.opacity ) { + $el[ 0 ].style.removeAttribute( "filter" ); + } + } + + // Show a tab... + var showTab = showFx + ? function( clicked, $show ) { + $( clicked ).closest( "li" ).addClass( "ui-tabs-selected ui-state-active" ); + $show.hide().removeClass( "ui-tabs-hide" ) // avoid flicker that way + .animate( showFx, showFx.duration || "normal", function() { + resetStyle( $show, showFx ); + self._trigger( "show", null, self._ui( clicked, $show[ 0 ] ) ); + }); + } + : function( clicked, $show ) { + $( clicked ).closest( "li" ).addClass( "ui-tabs-selected ui-state-active" ); + $show.removeClass( "ui-tabs-hide" ); + self._trigger( "show", null, self._ui( clicked, $show[ 0 ] ) ); + }; + + // Hide a tab, $show is optional... + var hideTab = hideFx + ? function( clicked, $hide ) { + $hide.animate( hideFx, hideFx.duration || "normal", function() { + self.lis.removeClass( "ui-tabs-selected ui-state-active" ); + $hide.addClass( "ui-tabs-hide" ); + resetStyle( $hide, hideFx ); + self.element.dequeue( "tabs" ); + }); + } + : function( clicked, $hide, $show ) { + self.lis.removeClass( "ui-tabs-selected ui-state-active" ); + $hide.addClass( "ui-tabs-hide" ); + self.element.dequeue( "tabs" ); + }; + + // attach tab event handler, unbind to avoid duplicates from former tabifying... + this.anchors.bind( o.event + ".tabs", function() { + var el = this, + $li = $(el).closest( "li" ), + $hide = self.panels.filter( ":not(.ui-tabs-hide)" ), + $show = self.element.find( self._sanitizeSelector( el.hash ) ); + + // If tab is already selected and not collapsible or tab disabled or + // or is already loading or click callback returns false stop here. + // Check if click handler returns false last so that it is not executed + // for a disabled or loading tab! + if ( ( $li.hasClass( "ui-tabs-selected" ) && !o.collapsible) || + $li.hasClass( "ui-state-disabled" ) || + $li.hasClass( "ui-state-processing" ) || + self.panels.filter( ":animated" ).length || + self._trigger( "select", null, self._ui( this, $show[ 0 ] ) ) === false ) { + this.blur(); + return false; + } + + o.selected = self.anchors.index( this ); + + self.abort(); + + // if tab may be closed + if ( o.collapsible ) { + if ( $li.hasClass( "ui-tabs-selected" ) ) { + o.selected = -1; + + if ( o.cookie ) { + self._cookie( o.selected, o.cookie ); + } + + self.element.queue( "tabs", function() { + hideTab( el, $hide ); + }).dequeue( "tabs" ); + + this.blur(); + return false; + } else if ( !$hide.length ) { + if ( o.cookie ) { + self._cookie( o.selected, o.cookie ); + } + + self.element.queue( "tabs", function() { + showTab( el, $show ); + }); + + // TODO make passing in node possible, see also http://dev.jqueryui.com/ticket/3171 + self.load( self.anchors.index( this ) ); + + this.blur(); + return false; + } + } + + if ( o.cookie ) { + self._cookie( o.selected, o.cookie ); + } + + // show new tab + if ( $show.length ) { + if ( $hide.length ) { + self.element.queue( "tabs", function() { + hideTab( el, $hide ); + }); + } + self.element.queue( "tabs", function() { + showTab( el, $show ); + }); + + self.load( self.anchors.index( this ) ); + } else { + throw "jQuery UI Tabs: Mismatching fragment identifier."; + } + + // Prevent IE from keeping other link focussed when using the back button + // and remove dotted border from clicked link. This is controlled via CSS + // in modern browsers; blur() removes focus from address bar in Firefox + // which can become a usability and annoying problem with tabs('rotate'). + if ( $.browser.msie ) { + this.blur(); + } + }); + + // disable click in any case + this.anchors.bind( "click.tabs", function(){ + return false; + }); + }, + + _getIndex: function( index ) { + // meta-function to give users option to provide a href string instead of a numerical index. + // also sanitizes numerical indexes to valid values. + if ( typeof index == "string" ) { + index = this.anchors.index( this.anchors.filter( "[href$=" + index + "]" ) ); + } + + return index; + }, + + destroy: function() { + var o = this.options; + + this.abort(); + + this.element + .unbind( ".tabs" ) + .removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" ) + .removeData( "tabs" ); + + this.list.removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" ); + + this.anchors.each(function() { + var href = $.data( this, "href.tabs" ); + if ( href ) { + this.href = href; + } + var $this = $( this ).unbind( ".tabs" ); + $.each( [ "href", "load", "cache" ], function( i, prefix ) { + $this.removeData( prefix + ".tabs" ); + }); + }); + + this.lis.unbind( ".tabs" ).add( this.panels ).each(function() { + if ( $.data( this, "destroy.tabs" ) ) { + $( this ).remove(); + } else { + $( this ).removeClass([ + "ui-state-default", + "ui-corner-top", + "ui-tabs-selected", + "ui-state-active", + "ui-state-hover", + "ui-state-focus", + "ui-state-disabled", + "ui-tabs-panel", + "ui-widget-content", + "ui-corner-bottom", + "ui-tabs-hide" + ].join( " " ) ); + } + }); + + if ( o.cookie ) { + this._cookie( null, o.cookie ); + } + + return this; + }, + + add: function( url, label, index ) { + if ( index === undefined ) { + index = this.anchors.length; + } + + var self = this, + o = this.options, + $li = $( o.tabTemplate.replace( /#\{href\}/g, url ).replace( /#\{label\}/g, label ) ), + id = !url.indexOf( "#" ) ? url.replace( "#", "" ) : this._tabId( $( "a", $li )[ 0 ] ); + + $li.addClass( "ui-state-default ui-corner-top" ).data( "destroy.tabs", true ); + + // try to find an existing element before creating a new one + var $panel = self.element.find( "#" + id ); + if ( !$panel.length ) { + $panel = $( o.panelTemplate ) + .attr( "id", id ) + .data( "destroy.tabs", true ); + } + $panel.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" ); + + if ( index >= this.lis.length ) { + $li.appendTo( this.list ); + $panel.appendTo( this.list[ 0 ].parentNode ); + } else { + $li.insertBefore( this.lis[ index ] ); + $panel.insertBefore( this.panels[ index ] ); + } + + o.disabled = $.map( o.disabled, function( n, i ) { + return n >= index ? ++n : n; + }); + + this._tabify(); + + if ( this.anchors.length == 1 ) { + o.selected = 0; + $li.addClass( "ui-tabs-selected ui-state-active" ); + $panel.removeClass( "ui-tabs-hide" ); + this.element.queue( "tabs", function() { + self._trigger( "show", null, self._ui( self.anchors[ 0 ], self.panels[ 0 ] ) ); + }); + + this.load( 0 ); + } + + this._trigger( "add", null, this._ui( this.anchors[ index ], this.panels[ index ] ) ); + return this; + }, + + remove: function( index ) { + index = this._getIndex( index ); + var o = this.options, + $li = this.lis.eq( index ).remove(), + $panel = this.panels.eq( index ).remove(); + + // If selected tab was removed focus tab to the right or + // in case the last tab was removed the tab to the left. + if ( $li.hasClass( "ui-tabs-selected" ) && this.anchors.length > 1) { + this.select( index + ( index + 1 < this.anchors.length ? 1 : -1 ) ); + } + + o.disabled = $.map( + $.grep( o.disabled, function(n, i) { + return n != index; + }), + function( n, i ) { + return n >= index ? --n : n; + }); + + this._tabify(); + + this._trigger( "remove", null, this._ui( $li.find( "a" )[ 0 ], $panel[ 0 ] ) ); + return this; + }, + + enable: function( index ) { + index = this._getIndex( index ); + var o = this.options; + if ( $.inArray( index, o.disabled ) == -1 ) { + return; + } + + this.lis.eq( index ).removeClass( "ui-state-disabled" ); + o.disabled = $.grep( o.disabled, function( n, i ) { + return n != index; + }); + + this._trigger( "enable", null, this._ui( this.anchors[ index ], this.panels[ index ] ) ); + return this; + }, + + disable: function( index ) { + index = this._getIndex( index ); + var self = this, o = this.options; + // cannot disable already selected tab + if ( index != o.selected ) { + this.lis.eq( index ).addClass( "ui-state-disabled" ); + + o.disabled.push( index ); + o.disabled.sort(); + + this._trigger( "disable", null, this._ui( this.anchors[ index ], this.panels[ index ] ) ); + } + + return this; + }, + + select: function( index ) { + index = this._getIndex( index ); + if ( index == -1 ) { + if ( this.options.collapsible && this.options.selected != -1 ) { + index = this.options.selected; + } else { + return this; + } + } + this.anchors.eq( index ).trigger( this.options.event + ".tabs" ); + return this; + }, + + load: function( index ) { + index = this._getIndex( index ); + var self = this, + o = this.options, + a = this.anchors.eq( index )[ 0 ], + url = $.data( a, "load.tabs" ); + + this.abort(); + + // not remote or from cache + if ( !url || this.element.queue( "tabs" ).length !== 0 && $.data( a, "cache.tabs" ) ) { + this.element.dequeue( "tabs" ); + return; + } + + // load remote from here on + this.lis.eq( index ).addClass( "ui-state-processing" ); + + if ( o.spinner ) { + var span = $( "span", a ); + span.data( "label.tabs", span.html() ).html( o.spinner ); + } + + this.xhr = $.ajax( $.extend( {}, o.ajaxOptions, { + url: url, + success: function( r, s ) { + self.element.find( self._sanitizeSelector( a.hash ) ).html( r ); + + // take care of tab labels + self._cleanup(); + + if ( o.cache ) { + $.data( a, "cache.tabs", true ); + } + + self._trigger( "load", null, self._ui( self.anchors[ index ], self.panels[ index ] ) ); + try { + o.ajaxOptions.success( r, s ); + } + catch ( e ) {} + }, + error: function( xhr, s, e ) { + // take care of tab labels + self._cleanup(); + + self._trigger( "load", null, self._ui( self.anchors[ index ], self.panels[ index ] ) ); + try { + // Passing index avoid a race condition when this method is + // called after the user has selected another tab. + // Pass the anchor that initiated this request allows + // loadError to manipulate the tab content panel via $(a.hash) + o.ajaxOptions.error( xhr, s, index, a ); + } + catch ( e ) {} + } + } ) ); + + // last, so that load event is fired before show... + self.element.dequeue( "tabs" ); + + return this; + }, + + abort: function() { + // stop possibly running animations + this.element.queue( [] ); + this.panels.stop( false, true ); + + // "tabs" queue must not contain more than two elements, + // which are the callbacks for the latest clicked tab... + this.element.queue( "tabs", this.element.queue( "tabs" ).splice( -2, 2 ) ); + + // terminate pending requests from other tabs + if ( this.xhr ) { + this.xhr.abort(); + delete this.xhr; + } + + // take care of tab labels + this._cleanup(); + return this; + }, + + url: function( index, url ) { + this.anchors.eq( index ).removeData( "cache.tabs" ).data( "load.tabs", url ); + return this; + }, + + length: function() { + return this.anchors.length; + } +}); + +$.extend( $.ui.tabs, { + version: "1.8.17" +}); + +/* + * Tabs Extensions + */ + +/* + * Rotate + */ +$.extend( $.ui.tabs.prototype, { + rotation: null, + rotate: function( ms, continuing ) { + var self = this, + o = this.options; + + var rotate = self._rotate || ( self._rotate = function( e ) { + clearTimeout( self.rotation ); + self.rotation = setTimeout(function() { + var t = o.selected; + self.select( ++t < self.anchors.length ? t : 0 ); + }, ms ); + + if ( e ) { + e.stopPropagation(); + } + }); + + var stop = self._unrotate || ( self._unrotate = !continuing + ? function(e) { + if (e.clientX) { // in case of a true click + self.rotate(null); + } + } + : function( e ) { + t = o.selected; + rotate(); + }); + + // start rotation + if ( ms ) { + this.element.bind( "tabsshow", rotate ); + this.anchors.bind( o.event + ".tabs", stop ); + rotate(); + // stop rotation + } else { + clearTimeout( self.rotation ); + this.element.unbind( "tabsshow", rotate ); + this.anchors.unbind( o.event + ".tabs", stop ); + delete this._rotate; + delete this._unrotate; + } + + return this; + } +}); + +})( jQuery ); +/* + * jQuery UI Datepicker 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Datepicker + * + * Depends: + * jquery.ui.core.js + */ +(function( $, undefined ) { + +$.extend($.ui, { datepicker: { version: "1.8.17" } }); + +var PROP_NAME = 'datepicker'; +var dpuuid = new Date().getTime(); +var instActive; + +/* Date picker manager. + Use the singleton instance of this class, $.datepicker, to interact with the date picker. + Settings for (groups of) date pickers are maintained in an instance object, + allowing multiple different settings on the same page. */ + +function Datepicker() { + this.debug = false; // Change this to true to start debugging + this._curInst = null; // The current instance in use + this._keyEvent = false; // If the last event was a key event + this._disabledInputs = []; // List of date picker inputs that have been disabled + this._datepickerShowing = false; // True if the popup picker is showing , false if not + this._inDialog = false; // True if showing within a "dialog", false if not + this._mainDivId = 'ui-datepicker-div'; // The ID of the main datepicker division + this._inlineClass = 'ui-datepicker-inline'; // The name of the inline marker class + this._appendClass = 'ui-datepicker-append'; // The name of the append marker class + this._triggerClass = 'ui-datepicker-trigger'; // The name of the trigger marker class + this._dialogClass = 'ui-datepicker-dialog'; // The name of the dialog marker class + this._disableClass = 'ui-datepicker-disabled'; // The name of the disabled covering marker class + this._unselectableClass = 'ui-datepicker-unselectable'; // The name of the unselectable cell marker class + this._currentClass = 'ui-datepicker-current-day'; // The name of the current day marker class + this._dayOverClass = 'ui-datepicker-days-cell-over'; // The name of the day hover marker class + this.regional = []; // Available regional settings, indexed by language code + this.regional[''] = { // Default regional settings + closeText: 'Done', // Display text for close link + prevText: 'Prev', // Display text for previous month link + nextText: 'Next', // Display text for next month link + currentText: 'Today', // Display text for current month link + monthNames: ['January','February','March','April','May','June', + 'July','August','September','October','November','December'], // Names of months for drop-down and formatting + monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], // For formatting + dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], // For formatting + dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], // For formatting + dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], // Column headings for days starting at Sunday + weekHeader: 'Wk', // Column header for week of the year + dateFormat: 'mm/dd/yy', // See format options on parseDate + firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ... + isRTL: false, // True if right-to-left language, false if left-to-right + showMonthAfterYear: false, // True if the year select precedes month, false for month then year + yearSuffix: '' // Additional text to append to the year in the month headers + }; + this._defaults = { // Global defaults for all the date picker instances + showOn: 'focus', // 'focus' for popup on focus, + // 'button' for trigger button, or 'both' for either + showAnim: 'fadeIn', // Name of jQuery animation for popup + showOptions: {}, // Options for enhanced animations + defaultDate: null, // Used when field is blank: actual date, + // +/-number for offset from today, null for today + appendText: '', // Display text following the input box, e.g. showing the format + buttonText: '...', // Text for trigger button + buttonImage: '', // URL for trigger button image + buttonImageOnly: false, // True if the image appears alone, false if it appears on a button + hideIfNoPrevNext: false, // True to hide next/previous month links + // if not applicable, false to just disable them + navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links + gotoCurrent: false, // True if today link goes back to current selection instead + changeMonth: false, // True if month can be selected directly, false if only prev/next + changeYear: false, // True if year can be selected directly, false if only prev/next + yearRange: 'c-10:c+10', // Range of years to display in drop-down, + // either relative to today's year (-nn:+nn), relative to currently displayed year + // (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n) + showOtherMonths: false, // True to show dates in other months, false to leave blank + selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable + showWeek: false, // True to show week of the year, false to not show it + calculateWeek: this.iso8601Week, // How to calculate the week of the year, + // takes a Date and returns the number of the week for it + shortYearCutoff: '+10', // Short year values < this are in the current century, + // > this are in the previous century, + // string value starting with '+' for current year + value + minDate: null, // The earliest selectable date, or null for no limit + maxDate: null, // The latest selectable date, or null for no limit + duration: 'fast', // Duration of display/closure + beforeShowDay: null, // Function that takes a date and returns an array with + // [0] = true if selectable, false if not, [1] = custom CSS class name(s) or '', + // [2] = cell title (optional), e.g. $.datepicker.noWeekends + beforeShow: null, // Function that takes an input field and + // returns a set of custom settings for the date picker + onSelect: null, // Define a callback function when a date is selected + onChangeMonthYear: null, // Define a callback function when the month or year is changed + onClose: null, // Define a callback function when the datepicker is closed + numberOfMonths: 1, // Number of months to show at a time + showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0) + stepMonths: 1, // Number of months to step back/forward + stepBigMonths: 12, // Number of months to step back/forward for the big links + altField: '', // Selector for an alternate field to store selected dates into + altFormat: '', // The date format to use for the alternate field + constrainInput: true, // The input is constrained by the current date format + showButtonPanel: false, // True to show button panel, false to not show it + autoSize: false, // True to size the input for the date format, false to leave as is + disabled: false // The initial disabled state + }; + $.extend(this._defaults, this.regional['']); + this.dpDiv = bindHover($('
    ')); +} + +$.extend(Datepicker.prototype, { + /* Class name added to elements to indicate already configured with a date picker. */ + markerClassName: 'hasDatepicker', + + //Keep track of the maximum number of rows displayed (see #7043) + maxRows: 4, + + /* Debug logging (if enabled). */ + log: function () { + if (this.debug) + console.log.apply('', arguments); + }, + + // TODO rename to "widget" when switching to widget factory + _widgetDatepicker: function() { + return this.dpDiv; + }, + + /* Override the default settings for all instances of the date picker. + @param settings object - the new settings to use as defaults (anonymous object) + @return the manager object */ + setDefaults: function(settings) { + extendRemove(this._defaults, settings || {}); + return this; + }, + + /* Attach the date picker to a jQuery selection. + @param target element - the target input field or division or span + @param settings object - the new settings to use for this date picker instance (anonymous) */ + _attachDatepicker: function(target, settings) { + // check for settings on the control itself - in namespace 'date:' + var inlineSettings = null; + for (var attrName in this._defaults) { + var attrValue = target.getAttribute('date:' + attrName); + if (attrValue) { + inlineSettings = inlineSettings || {}; + try { + inlineSettings[attrName] = eval(attrValue); + } catch (err) { + inlineSettings[attrName] = attrValue; + } + } + } + var nodeName = target.nodeName.toLowerCase(); + var inline = (nodeName == 'div' || nodeName == 'span'); + if (!target.id) { + this.uuid += 1; + target.id = 'dp' + this.uuid; + } + var inst = this._newInst($(target), inline); + inst.settings = $.extend({}, settings || {}, inlineSettings || {}); + if (nodeName == 'input') { + this._connectDatepicker(target, inst); + } else if (inline) { + this._inlineDatepicker(target, inst); + } + }, + + /* Create a new instance object. */ + _newInst: function(target, inline) { + var id = target[0].id.replace(/([^A-Za-z0-9_-])/g, '\\\\$1'); // escape jQuery meta chars + return {id: id, input: target, // associated target + selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection + drawMonth: 0, drawYear: 0, // month being drawn + inline: inline, // is datepicker inline or not + dpDiv: (!inline ? this.dpDiv : // presentation div + bindHover($('
    ')))}; + }, + + /* Attach the date picker to an input field. */ + _connectDatepicker: function(target, inst) { + var input = $(target); + inst.append = $([]); + inst.trigger = $([]); + if (input.hasClass(this.markerClassName)) + return; + this._attachments(input, inst); + input.addClass(this.markerClassName).keydown(this._doKeyDown). + keypress(this._doKeyPress).keyup(this._doKeyUp). + bind("setData.datepicker", function(event, key, value) { + inst.settings[key] = value; + }).bind("getData.datepicker", function(event, key) { + return this._get(inst, key); + }); + this._autoSize(inst); + $.data(target, PROP_NAME, inst); + //If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665) + if( inst.settings.disabled ) { + this._disableDatepicker( target ); + } + }, + + /* Make attachments based on settings. */ + _attachments: function(input, inst) { + var appendText = this._get(inst, 'appendText'); + var isRTL = this._get(inst, 'isRTL'); + if (inst.append) + inst.append.remove(); + if (appendText) { + inst.append = $('' + appendText + ''); + input[isRTL ? 'before' : 'after'](inst.append); + } + input.unbind('focus', this._showDatepicker); + if (inst.trigger) + inst.trigger.remove(); + var showOn = this._get(inst, 'showOn'); + if (showOn == 'focus' || showOn == 'both') // pop-up date picker when in the marked field + input.focus(this._showDatepicker); + if (showOn == 'button' || showOn == 'both') { // pop-up date picker when button clicked + var buttonText = this._get(inst, 'buttonText'); + var buttonImage = this._get(inst, 'buttonImage'); + inst.trigger = $(this._get(inst, 'buttonImageOnly') ? + $('').addClass(this._triggerClass). + attr({ src: buttonImage, alt: buttonText, title: buttonText }) : + $('').addClass(this._triggerClass). + html(buttonImage == '' ? buttonText : $('').attr( + { src:buttonImage, alt:buttonText, title:buttonText }))); + input[isRTL ? 'before' : 'after'](inst.trigger); + inst.trigger.click(function() { + if ($.datepicker._datepickerShowing && $.datepicker._lastInput == input[0]) + $.datepicker._hideDatepicker(); + else + $.datepicker._showDatepicker(input[0]); + return false; + }); + } + }, + + /* Apply the maximum length for the date format. */ + _autoSize: function(inst) { + if (this._get(inst, 'autoSize') && !inst.inline) { + var date = new Date(2009, 12 - 1, 20); // Ensure double digits + var dateFormat = this._get(inst, 'dateFormat'); + if (dateFormat.match(/[DM]/)) { + var findMax = function(names) { + var max = 0; + var maxI = 0; + for (var i = 0; i < names.length; i++) { + if (names[i].length > max) { + max = names[i].length; + maxI = i; + } + } + return maxI; + }; + date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ? + 'monthNames' : 'monthNamesShort')))); + date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ? + 'dayNames' : 'dayNamesShort'))) + 20 - date.getDay()); + } + inst.input.attr('size', this._formatDate(inst, date).length); + } + }, + + /* Attach an inline date picker to a div. */ + _inlineDatepicker: function(target, inst) { + var divSpan = $(target); + if (divSpan.hasClass(this.markerClassName)) + return; + divSpan.addClass(this.markerClassName).append(inst.dpDiv). + bind("setData.datepicker", function(event, key, value){ + inst.settings[key] = value; + }).bind("getData.datepicker", function(event, key){ + return this._get(inst, key); + }); + $.data(target, PROP_NAME, inst); + this._setDate(inst, this._getDefaultDate(inst), true); + this._updateDatepicker(inst); + this._updateAlternate(inst); + //If disabled option is true, disable the datepicker before showing it (see ticket #5665) + if( inst.settings.disabled ) { + this._disableDatepicker( target ); + } + // Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements + // http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height + inst.dpDiv.css( "display", "block" ); + }, + + /* Pop-up the date picker in a "dialog" box. + @param input element - ignored + @param date string or Date - the initial date to display + @param onSelect function - the function to call when a date is selected + @param settings object - update the dialog date picker instance's settings (anonymous object) + @param pos int[2] - coordinates for the dialog's position within the screen or + event - with x/y coordinates or + leave empty for default (screen centre) + @return the manager object */ + _dialogDatepicker: function(input, date, onSelect, settings, pos) { + var inst = this._dialogInst; // internal instance + if (!inst) { + this.uuid += 1; + var id = 'dp' + this.uuid; + this._dialogInput = $(''); + this._dialogInput.keydown(this._doKeyDown); + $('body').append(this._dialogInput); + inst = this._dialogInst = this._newInst(this._dialogInput, false); + inst.settings = {}; + $.data(this._dialogInput[0], PROP_NAME, inst); + } + extendRemove(inst.settings, settings || {}); + date = (date && date.constructor == Date ? this._formatDate(inst, date) : date); + this._dialogInput.val(date); + + this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null); + if (!this._pos) { + var browserWidth = document.documentElement.clientWidth; + var browserHeight = document.documentElement.clientHeight; + var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; + var scrollY = document.documentElement.scrollTop || document.body.scrollTop; + this._pos = // should use actual width/height below + [(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY]; + } + + // move input on screen for focus, but hidden behind dialog + this._dialogInput.css('left', (this._pos[0] + 20) + 'px').css('top', this._pos[1] + 'px'); + inst.settings.onSelect = onSelect; + this._inDialog = true; + this.dpDiv.addClass(this._dialogClass); + this._showDatepicker(this._dialogInput[0]); + if ($.blockUI) + $.blockUI(this.dpDiv); + $.data(this._dialogInput[0], PROP_NAME, inst); + return this; + }, + + /* Detach a datepicker from its control. + @param target element - the target input field or division or span */ + _destroyDatepicker: function(target) { + var $target = $(target); + var inst = $.data(target, PROP_NAME); + if (!$target.hasClass(this.markerClassName)) { + return; + } + var nodeName = target.nodeName.toLowerCase(); + $.removeData(target, PROP_NAME); + if (nodeName == 'input') { + inst.append.remove(); + inst.trigger.remove(); + $target.removeClass(this.markerClassName). + unbind('focus', this._showDatepicker). + unbind('keydown', this._doKeyDown). + unbind('keypress', this._doKeyPress). + unbind('keyup', this._doKeyUp); + } else if (nodeName == 'div' || nodeName == 'span') + $target.removeClass(this.markerClassName).empty(); + }, + + /* Enable the date picker to a jQuery selection. + @param target element - the target input field or division or span */ + _enableDatepicker: function(target) { + var $target = $(target); + var inst = $.data(target, PROP_NAME); + if (!$target.hasClass(this.markerClassName)) { + return; + } + var nodeName = target.nodeName.toLowerCase(); + if (nodeName == 'input') { + target.disabled = false; + inst.trigger.filter('button'). + each(function() { this.disabled = false; }).end(). + filter('img').css({opacity: '1.0', cursor: ''}); + } + else if (nodeName == 'div' || nodeName == 'span') { + var inline = $target.children('.' + this._inlineClass); + inline.children().removeClass('ui-state-disabled'); + inline.find("select.ui-datepicker-month, select.ui-datepicker-year"). + removeAttr("disabled"); + } + this._disabledInputs = $.map(this._disabledInputs, + function(value) { return (value == target ? null : value); }); // delete entry + }, + + /* Disable the date picker to a jQuery selection. + @param target element - the target input field or division or span */ + _disableDatepicker: function(target) { + var $target = $(target); + var inst = $.data(target, PROP_NAME); + if (!$target.hasClass(this.markerClassName)) { + return; + } + var nodeName = target.nodeName.toLowerCase(); + if (nodeName == 'input') { + target.disabled = true; + inst.trigger.filter('button'). + each(function() { this.disabled = true; }).end(). + filter('img').css({opacity: '0.5', cursor: 'default'}); + } + else if (nodeName == 'div' || nodeName == 'span') { + var inline = $target.children('.' + this._inlineClass); + inline.children().addClass('ui-state-disabled'); + inline.find("select.ui-datepicker-month, select.ui-datepicker-year"). + attr("disabled", "disabled"); + } + this._disabledInputs = $.map(this._disabledInputs, + function(value) { return (value == target ? null : value); }); // delete entry + this._disabledInputs[this._disabledInputs.length] = target; + }, + + /* Is the first field in a jQuery collection disabled as a datepicker? + @param target element - the target input field or division or span + @return boolean - true if disabled, false if enabled */ + _isDisabledDatepicker: function(target) { + if (!target) { + return false; + } + for (var i = 0; i < this._disabledInputs.length; i++) { + if (this._disabledInputs[i] == target) + return true; + } + return false; + }, + + /* Retrieve the instance data for the target control. + @param target element - the target input field or division or span + @return object - the associated instance data + @throws error if a jQuery problem getting data */ + _getInst: function(target) { + try { + return $.data(target, PROP_NAME); + } + catch (err) { + throw 'Missing instance data for this datepicker'; + } + }, + + /* Update or retrieve the settings for a date picker attached to an input field or division. + @param target element - the target input field or division or span + @param name object - the new settings to update or + string - the name of the setting to change or retrieve, + when retrieving also 'all' for all instance settings or + 'defaults' for all global defaults + @param value any - the new value for the setting + (omit if above is an object or to retrieve a value) */ + _optionDatepicker: function(target, name, value) { + var inst = this._getInst(target); + if (arguments.length == 2 && typeof name == 'string') { + return (name == 'defaults' ? $.extend({}, $.datepicker._defaults) : + (inst ? (name == 'all' ? $.extend({}, inst.settings) : + this._get(inst, name)) : null)); + } + var settings = name || {}; + if (typeof name == 'string') { + settings = {}; + settings[name] = value; + } + if (inst) { + if (this._curInst == inst) { + this._hideDatepicker(); + } + var date = this._getDateDatepicker(target, true); + var minDate = this._getMinMaxDate(inst, 'min'); + var maxDate = this._getMinMaxDate(inst, 'max'); + extendRemove(inst.settings, settings); + // reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided + if (minDate !== null && settings['dateFormat'] !== undefined && settings['minDate'] === undefined) + inst.settings.minDate = this._formatDate(inst, minDate); + if (maxDate !== null && settings['dateFormat'] !== undefined && settings['maxDate'] === undefined) + inst.settings.maxDate = this._formatDate(inst, maxDate); + this._attachments($(target), inst); + this._autoSize(inst); + this._setDate(inst, date); + this._updateAlternate(inst); + this._updateDatepicker(inst); + } + }, + + // change method deprecated + _changeDatepicker: function(target, name, value) { + this._optionDatepicker(target, name, value); + }, + + /* Redraw the date picker attached to an input field or division. + @param target element - the target input field or division or span */ + _refreshDatepicker: function(target) { + var inst = this._getInst(target); + if (inst) { + this._updateDatepicker(inst); + } + }, + + /* Set the dates for a jQuery selection. + @param target element - the target input field or division or span + @param date Date - the new date */ + _setDateDatepicker: function(target, date) { + var inst = this._getInst(target); + if (inst) { + this._setDate(inst, date); + this._updateDatepicker(inst); + this._updateAlternate(inst); + } + }, + + /* Get the date(s) for the first entry in a jQuery selection. + @param target element - the target input field or division or span + @param noDefault boolean - true if no default date is to be used + @return Date - the current date */ + _getDateDatepicker: function(target, noDefault) { + var inst = this._getInst(target); + if (inst && !inst.inline) + this._setDateFromField(inst, noDefault); + return (inst ? this._getDate(inst) : null); + }, + + /* Handle keystrokes. */ + _doKeyDown: function(event) { + var inst = $.datepicker._getInst(event.target); + var handled = true; + var isRTL = inst.dpDiv.is('.ui-datepicker-rtl'); + inst._keyEvent = true; + if ($.datepicker._datepickerShowing) + switch (event.keyCode) { + case 9: $.datepicker._hideDatepicker(); + handled = false; + break; // hide on tab out + case 13: var sel = $('td.' + $.datepicker._dayOverClass + ':not(.' + + $.datepicker._currentClass + ')', inst.dpDiv); + if (sel[0]) + $.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]); + var onSelect = $.datepicker._get(inst, 'onSelect'); + if (onSelect) { + var dateStr = $.datepicker._formatDate(inst); + + // trigger custom callback + onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); + } + else + $.datepicker._hideDatepicker(); + return false; // don't submit the form + break; // select the value on enter + case 27: $.datepicker._hideDatepicker(); + break; // hide on escape + case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ? + -$.datepicker._get(inst, 'stepBigMonths') : + -$.datepicker._get(inst, 'stepMonths')), 'M'); + break; // previous month/year on page up/+ ctrl + case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ? + +$.datepicker._get(inst, 'stepBigMonths') : + +$.datepicker._get(inst, 'stepMonths')), 'M'); + break; // next month/year on page down/+ ctrl + case 35: if (event.ctrlKey || event.metaKey) $.datepicker._clearDate(event.target); + handled = event.ctrlKey || event.metaKey; + break; // clear on ctrl or command +end + case 36: if (event.ctrlKey || event.metaKey) $.datepicker._gotoToday(event.target); + handled = event.ctrlKey || event.metaKey; + break; // current on ctrl or command +home + case 37: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), 'D'); + handled = event.ctrlKey || event.metaKey; + // -1 day on ctrl or command +left + if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ? + -$.datepicker._get(inst, 'stepBigMonths') : + -$.datepicker._get(inst, 'stepMonths')), 'M'); + // next month/year on alt +left on Mac + break; + case 38: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, -7, 'D'); + handled = event.ctrlKey || event.metaKey; + break; // -1 week on ctrl or command +up + case 39: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), 'D'); + handled = event.ctrlKey || event.metaKey; + // +1 day on ctrl or command +right + if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ? + +$.datepicker._get(inst, 'stepBigMonths') : + +$.datepicker._get(inst, 'stepMonths')), 'M'); + // next month/year on alt +right + break; + case 40: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, +7, 'D'); + handled = event.ctrlKey || event.metaKey; + break; // +1 week on ctrl or command +down + default: handled = false; + } + else if (event.keyCode == 36 && event.ctrlKey) // display the date picker on ctrl+home + $.datepicker._showDatepicker(this); + else { + handled = false; + } + if (handled) { + event.preventDefault(); + event.stopPropagation(); + } + }, + + /* Filter entered characters - based on date format. */ + _doKeyPress: function(event) { + var inst = $.datepicker._getInst(event.target); + if ($.datepicker._get(inst, 'constrainInput')) { + var chars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat')); + var chr = String.fromCharCode(event.charCode == undefined ? event.keyCode : event.charCode); + return event.ctrlKey || event.metaKey || (chr < ' ' || !chars || chars.indexOf(chr) > -1); + } + }, + + /* Synchronise manual entry and field/alternate field. */ + _doKeyUp: function(event) { + var inst = $.datepicker._getInst(event.target); + if (inst.input.val() != inst.lastVal) { + try { + var date = $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'), + (inst.input ? inst.input.val() : null), + $.datepicker._getFormatConfig(inst)); + if (date) { // only if valid + $.datepicker._setDateFromField(inst); + $.datepicker._updateAlternate(inst); + $.datepicker._updateDatepicker(inst); + } + } + catch (event) { + $.datepicker.log(event); + } + } + return true; + }, + + /* Pop-up the date picker for a given input field. + If false returned from beforeShow event handler do not show. + @param input element - the input field attached to the date picker or + event - if triggered by focus */ + _showDatepicker: function(input) { + input = input.target || input; + if (input.nodeName.toLowerCase() != 'input') // find from button/image trigger + input = $('input', input.parentNode)[0]; + if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput == input) // already here + return; + var inst = $.datepicker._getInst(input); + if ($.datepicker._curInst && $.datepicker._curInst != inst) { + $.datepicker._curInst.dpDiv.stop(true, true); + if ( inst && $.datepicker._datepickerShowing ) { + $.datepicker._hideDatepicker( $.datepicker._curInst.input[0] ); + } + } + var beforeShow = $.datepicker._get(inst, 'beforeShow'); + var beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {}; + if(beforeShowSettings === false){ + //false + return; + } + extendRemove(inst.settings, beforeShowSettings); + inst.lastVal = null; + $.datepicker._lastInput = input; + $.datepicker._setDateFromField(inst); + if ($.datepicker._inDialog) // hide cursor + input.value = ''; + if (!$.datepicker._pos) { // position below input + $.datepicker._pos = $.datepicker._findPos(input); + $.datepicker._pos[1] += input.offsetHeight; // add the height + } + var isFixed = false; + $(input).parents().each(function() { + isFixed |= $(this).css('position') == 'fixed'; + return !isFixed; + }); + if (isFixed && $.browser.opera) { // correction for Opera when fixed and scrolled + $.datepicker._pos[0] -= document.documentElement.scrollLeft; + $.datepicker._pos[1] -= document.documentElement.scrollTop; + } + var offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]}; + $.datepicker._pos = null; + //to avoid flashes on Firefox + inst.dpDiv.empty(); + // determine sizing offscreen + inst.dpDiv.css({position: 'absolute', display: 'block', top: '-1000px'}); + $.datepicker._updateDatepicker(inst); + // fix width for dynamic number of date pickers + // and adjust position before showing + offset = $.datepicker._checkOffset(inst, offset, isFixed); + inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ? + 'static' : (isFixed ? 'fixed' : 'absolute')), display: 'none', + left: offset.left + 'px', top: offset.top + 'px'}); + if (!inst.inline) { + var showAnim = $.datepicker._get(inst, 'showAnim'); + var duration = $.datepicker._get(inst, 'duration'); + var postProcess = function() { + var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); // IE6- only + if( !! cover.length ){ + var borders = $.datepicker._getBorders(inst.dpDiv); + cover.css({left: -borders[0], top: -borders[1], + width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()}); + } + }; + inst.dpDiv.zIndex($(input).zIndex()+1); + $.datepicker._datepickerShowing = true; + if ($.effects && $.effects[showAnim]) + inst.dpDiv.show(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess); + else + inst.dpDiv[showAnim || 'show']((showAnim ? duration : null), postProcess); + if (!showAnim || !duration) + postProcess(); + if (inst.input.is(':visible') && !inst.input.is(':disabled')) + inst.input.focus(); + $.datepicker._curInst = inst; + } + }, + + /* Generate the date picker content. */ + _updateDatepicker: function(inst) { + var self = this; + self.maxRows = 4; //Reset the max number of rows being displayed (see #7043) + var borders = $.datepicker._getBorders(inst.dpDiv); + instActive = inst; // for delegate hover events + inst.dpDiv.empty().append(this._generateHTML(inst)); + var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); // IE6- only + if( !!cover.length ){ //avoid call to outerXXXX() when not in IE6 + cover.css({left: -borders[0], top: -borders[1], width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()}) + } + inst.dpDiv.find('.' + this._dayOverClass + ' a').mouseover(); + var numMonths = this._getNumberOfMonths(inst); + var cols = numMonths[1]; + var width = 17; + inst.dpDiv.removeClass('ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4').width(''); + if (cols > 1) + inst.dpDiv.addClass('ui-datepicker-multi-' + cols).css('width', (width * cols) + 'em'); + inst.dpDiv[(numMonths[0] != 1 || numMonths[1] != 1 ? 'add' : 'remove') + + 'Class']('ui-datepicker-multi'); + inst.dpDiv[(this._get(inst, 'isRTL') ? 'add' : 'remove') + + 'Class']('ui-datepicker-rtl'); + if (inst == $.datepicker._curInst && $.datepicker._datepickerShowing && inst.input && + // #6694 - don't focus the input if it's already focused + // this breaks the change event in IE + inst.input.is(':visible') && !inst.input.is(':disabled') && inst.input[0] != document.activeElement) + inst.input.focus(); + // deffered render of the years select (to avoid flashes on Firefox) + if( inst.yearshtml ){ + var origyearshtml = inst.yearshtml; + setTimeout(function(){ + //assure that inst.yearshtml didn't change. + if( origyearshtml === inst.yearshtml && inst.yearshtml ){ + inst.dpDiv.find('select.ui-datepicker-year:first').replaceWith(inst.yearshtml); + } + origyearshtml = inst.yearshtml = null; + }, 0); + } + }, + + /* Retrieve the size of left and top borders for an element. + @param elem (jQuery object) the element of interest + @return (number[2]) the left and top borders */ + _getBorders: function(elem) { + var convert = function(value) { + return {thin: 1, medium: 2, thick: 3}[value] || value; + }; + return [parseFloat(convert(elem.css('border-left-width'))), + parseFloat(convert(elem.css('border-top-width')))]; + }, + + /* Check positioning to remain on screen. */ + _checkOffset: function(inst, offset, isFixed) { + var dpWidth = inst.dpDiv.outerWidth(); + var dpHeight = inst.dpDiv.outerHeight(); + var inputWidth = inst.input ? inst.input.outerWidth() : 0; + var inputHeight = inst.input ? inst.input.outerHeight() : 0; + var viewWidth = document.documentElement.clientWidth + $(document).scrollLeft(); + var viewHeight = document.documentElement.clientHeight + $(document).scrollTop(); + + offset.left -= (this._get(inst, 'isRTL') ? (dpWidth - inputWidth) : 0); + offset.left -= (isFixed && offset.left == inst.input.offset().left) ? $(document).scrollLeft() : 0; + offset.top -= (isFixed && offset.top == (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0; + + // now check if datepicker is showing outside window viewport - move to a better place if so. + offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ? + Math.abs(offset.left + dpWidth - viewWidth) : 0); + offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ? + Math.abs(dpHeight + inputHeight) : 0); + + return offset; + }, + + /* Find an object's position on the screen. */ + _findPos: function(obj) { + var inst = this._getInst(obj); + var isRTL = this._get(inst, 'isRTL'); + while (obj && (obj.type == 'hidden' || obj.nodeType != 1 || $.expr.filters.hidden(obj))) { + obj = obj[isRTL ? 'previousSibling' : 'nextSibling']; + } + var position = $(obj).offset(); + return [position.left, position.top]; + }, + + /* Hide the date picker from view. + @param input element - the input field attached to the date picker */ + _hideDatepicker: function(input) { + var inst = this._curInst; + if (!inst || (input && inst != $.data(input, PROP_NAME))) + return; + if (this._datepickerShowing) { + var showAnim = this._get(inst, 'showAnim'); + var duration = this._get(inst, 'duration'); + var self = this; + var postProcess = function() { + $.datepicker._tidyDialog(inst); + self._curInst = null; + }; + if ($.effects && $.effects[showAnim]) + inst.dpDiv.hide(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess); + else + inst.dpDiv[(showAnim == 'slideDown' ? 'slideUp' : + (showAnim == 'fadeIn' ? 'fadeOut' : 'hide'))]((showAnim ? duration : null), postProcess); + if (!showAnim) + postProcess(); + this._datepickerShowing = false; + var onClose = this._get(inst, 'onClose'); + if (onClose) + onClose.apply((inst.input ? inst.input[0] : null), + [(inst.input ? inst.input.val() : ''), inst]); + this._lastInput = null; + if (this._inDialog) { + this._dialogInput.css({ position: 'absolute', left: '0', top: '-100px' }); + if ($.blockUI) { + $.unblockUI(); + $('body').append(this.dpDiv); + } + } + this._inDialog = false; + } + }, + + /* Tidy up after a dialog display. */ + _tidyDialog: function(inst) { + inst.dpDiv.removeClass(this._dialogClass).unbind('.ui-datepicker-calendar'); + }, + + /* Close date picker if clicked elsewhere. */ + _checkExternalClick: function(event) { + if (!$.datepicker._curInst) + return; + + var $target = $(event.target), + inst = $.datepicker._getInst($target[0]); + + if ( ( ( $target[0].id != $.datepicker._mainDivId && + $target.parents('#' + $.datepicker._mainDivId).length == 0 && + !$target.hasClass($.datepicker.markerClassName) && + !$target.hasClass($.datepicker._triggerClass) && + $.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI) ) ) || + ( $target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst != inst ) ) + $.datepicker._hideDatepicker(); + }, + + /* Adjust one of the date sub-fields. */ + _adjustDate: function(id, offset, period) { + var target = $(id); + var inst = this._getInst(target[0]); + if (this._isDisabledDatepicker(target[0])) { + return; + } + this._adjustInstDate(inst, offset + + (period == 'M' ? this._get(inst, 'showCurrentAtPos') : 0), // undo positioning + period); + this._updateDatepicker(inst); + }, + + /* Action for current link. */ + _gotoToday: function(id) { + var target = $(id); + var inst = this._getInst(target[0]); + if (this._get(inst, 'gotoCurrent') && inst.currentDay) { + inst.selectedDay = inst.currentDay; + inst.drawMonth = inst.selectedMonth = inst.currentMonth; + inst.drawYear = inst.selectedYear = inst.currentYear; + } + else { + var date = new Date(); + inst.selectedDay = date.getDate(); + inst.drawMonth = inst.selectedMonth = date.getMonth(); + inst.drawYear = inst.selectedYear = date.getFullYear(); + } + this._notifyChange(inst); + this._adjustDate(target); + }, + + /* Action for selecting a new month/year. */ + _selectMonthYear: function(id, select, period) { + var target = $(id); + var inst = this._getInst(target[0]); + inst['selected' + (period == 'M' ? 'Month' : 'Year')] = + inst['draw' + (period == 'M' ? 'Month' : 'Year')] = + parseInt(select.options[select.selectedIndex].value,10); + this._notifyChange(inst); + this._adjustDate(target); + }, + + /* Action for selecting a day. */ + _selectDay: function(id, month, year, td) { + var target = $(id); + if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) { + return; + } + var inst = this._getInst(target[0]); + inst.selectedDay = inst.currentDay = $('a', td).html(); + inst.selectedMonth = inst.currentMonth = month; + inst.selectedYear = inst.currentYear = year; + this._selectDate(id, this._formatDate(inst, + inst.currentDay, inst.currentMonth, inst.currentYear)); + }, + + /* Erase the input field and hide the date picker. */ + _clearDate: function(id) { + var target = $(id); + var inst = this._getInst(target[0]); + this._selectDate(target, ''); + }, + + /* Update the input field with the selected date. */ + _selectDate: function(id, dateStr) { + var target = $(id); + var inst = this._getInst(target[0]); + dateStr = (dateStr != null ? dateStr : this._formatDate(inst)); + if (inst.input) + inst.input.val(dateStr); + this._updateAlternate(inst); + var onSelect = this._get(inst, 'onSelect'); + if (onSelect) + onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); // trigger custom callback + else if (inst.input) + inst.input.trigger('change'); // fire the change event + if (inst.inline) + this._updateDatepicker(inst); + else { + this._hideDatepicker(); + this._lastInput = inst.input[0]; + if (typeof(inst.input[0]) != 'object') + inst.input.focus(); // restore focus + this._lastInput = null; + } + }, + + /* Update any alternate field to synchronise with the main field. */ + _updateAlternate: function(inst) { + var altField = this._get(inst, 'altField'); + if (altField) { // update alternate field too + var altFormat = this._get(inst, 'altFormat') || this._get(inst, 'dateFormat'); + var date = this._getDate(inst); + var dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst)); + $(altField).each(function() { $(this).val(dateStr); }); + } + }, + + /* Set as beforeShowDay function to prevent selection of weekends. + @param date Date - the date to customise + @return [boolean, string] - is this date selectable?, what is its CSS class? */ + noWeekends: function(date) { + var day = date.getDay(); + return [(day > 0 && day < 6), '']; + }, + + /* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition. + @param date Date - the date to get the week for + @return number - the number of the week within the year that contains this date */ + iso8601Week: function(date) { + var checkDate = new Date(date.getTime()); + // Find Thursday of this week starting on Monday + checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); + var time = checkDate.getTime(); + checkDate.setMonth(0); // Compare with Jan 1 + checkDate.setDate(1); + return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1; + }, + + /* Parse a string value into a date object. + See formatDate below for the possible formats. + + @param format string - the expected format of the date + @param value string - the date in the above format + @param settings Object - attributes include: + shortYearCutoff number - the cutoff year for determining the century (optional) + dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) + dayNames string[7] - names of the days from Sunday (optional) + monthNamesShort string[12] - abbreviated names of the months (optional) + monthNames string[12] - names of the months (optional) + @return Date - the extracted date value or null if value is blank */ + parseDate: function (format, value, settings) { + if (format == null || value == null) + throw 'Invalid arguments'; + value = (typeof value == 'object' ? value.toString() : value + ''); + if (value == '') + return null; + var shortYearCutoff = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff; + shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : + new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); + var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort; + var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames; + var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort; + var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames; + var year = -1; + var month = -1; + var day = -1; + var doy = -1; + var literal = false; + // Check whether a format character is doubled + var lookAhead = function(match) { + var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); + if (matches) + iFormat++; + return matches; + }; + // Extract a number from the string value + var getNumber = function(match) { + var isDoubled = lookAhead(match); + var size = (match == '@' ? 14 : (match == '!' ? 20 : + (match == 'y' && isDoubled ? 4 : (match == 'o' ? 3 : 2)))); + var digits = new RegExp('^\\d{1,' + size + '}'); + var num = value.substring(iValue).match(digits); + if (!num) + throw 'Missing number at position ' + iValue; + iValue += num[0].length; + return parseInt(num[0], 10); + }; + // Extract a name from the string value and convert to an index + var getName = function(match, shortNames, longNames) { + var names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) { + return [ [k, v] ]; + }).sort(function (a, b) { + return -(a[1].length - b[1].length); + }); + var index = -1; + $.each(names, function (i, pair) { + var name = pair[1]; + if (value.substr(iValue, name.length).toLowerCase() == name.toLowerCase()) { + index = pair[0]; + iValue += name.length; + return false; + } + }); + if (index != -1) + return index + 1; + else + throw 'Unknown name at position ' + iValue; + }; + // Confirm that a literal character matches the string value + var checkLiteral = function() { + if (value.charAt(iValue) != format.charAt(iFormat)) + throw 'Unexpected literal at position ' + iValue; + iValue++; + }; + var iValue = 0; + for (var iFormat = 0; iFormat < format.length; iFormat++) { + if (literal) + if (format.charAt(iFormat) == "'" && !lookAhead("'")) + literal = false; + else + checkLiteral(); + else + switch (format.charAt(iFormat)) { + case 'd': + day = getNumber('d'); + break; + case 'D': + getName('D', dayNamesShort, dayNames); + break; + case 'o': + doy = getNumber('o'); + break; + case 'm': + month = getNumber('m'); + break; + case 'M': + month = getName('M', monthNamesShort, monthNames); + break; + case 'y': + year = getNumber('y'); + break; + case '@': + var date = new Date(getNumber('@')); + year = date.getFullYear(); + month = date.getMonth() + 1; + day = date.getDate(); + break; + case '!': + var date = new Date((getNumber('!') - this._ticksTo1970) / 10000); + year = date.getFullYear(); + month = date.getMonth() + 1; + day = date.getDate(); + break; + case "'": + if (lookAhead("'")) + checkLiteral(); + else + literal = true; + break; + default: + checkLiteral(); + } + } + if (iValue < value.length){ + throw "Extra/unparsed characters found in date: " + value.substring(iValue); + } + if (year == -1) + year = new Date().getFullYear(); + else if (year < 100) + year += new Date().getFullYear() - new Date().getFullYear() % 100 + + (year <= shortYearCutoff ? 0 : -100); + if (doy > -1) { + month = 1; + day = doy; + do { + var dim = this._getDaysInMonth(year, month - 1); + if (day <= dim) + break; + month++; + day -= dim; + } while (true); + } + var date = this._daylightSavingAdjust(new Date(year, month - 1, day)); + if (date.getFullYear() != year || date.getMonth() + 1 != month || date.getDate() != day) + throw 'Invalid date'; // E.g. 31/02/00 + return date; + }, + + /* Standard date formats. */ + ATOM: 'yy-mm-dd', // RFC 3339 (ISO 8601) + COOKIE: 'D, dd M yy', + ISO_8601: 'yy-mm-dd', + RFC_822: 'D, d M y', + RFC_850: 'DD, dd-M-y', + RFC_1036: 'D, d M y', + RFC_1123: 'D, d M yy', + RFC_2822: 'D, d M yy', + RSS: 'D, d M y', // RFC 822 + TICKS: '!', + TIMESTAMP: '@', + W3C: 'yy-mm-dd', // ISO 8601 + + _ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) + + Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000), + + /* Format a date object into a string value. + The format can be combinations of the following: + d - day of month (no leading zero) + dd - day of month (two digit) + o - day of year (no leading zeros) + oo - day of year (three digit) + D - day name short + DD - day name long + m - month of year (no leading zero) + mm - month of year (two digit) + M - month name short + MM - month name long + y - year (two digit) + yy - year (four digit) + @ - Unix timestamp (ms since 01/01/1970) + ! - Windows ticks (100ns since 01/01/0001) + '...' - literal text + '' - single quote + + @param format string - the desired format of the date + @param date Date - the date value to format + @param settings Object - attributes include: + dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) + dayNames string[7] - names of the days from Sunday (optional) + monthNamesShort string[12] - abbreviated names of the months (optional) + monthNames string[12] - names of the months (optional) + @return string - the date in the above format */ + formatDate: function (format, date, settings) { + if (!date) + return ''; + var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort; + var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames; + var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort; + var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames; + // Check whether a format character is doubled + var lookAhead = function(match) { + var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); + if (matches) + iFormat++; + return matches; + }; + // Format a number, with leading zero if necessary + var formatNumber = function(match, value, len) { + var num = '' + value; + if (lookAhead(match)) + while (num.length < len) + num = '0' + num; + return num; + }; + // Format a name, short or long as requested + var formatName = function(match, value, shortNames, longNames) { + return (lookAhead(match) ? longNames[value] : shortNames[value]); + }; + var output = ''; + var literal = false; + if (date) + for (var iFormat = 0; iFormat < format.length; iFormat++) { + if (literal) + if (format.charAt(iFormat) == "'" && !lookAhead("'")) + literal = false; + else + output += format.charAt(iFormat); + else + switch (format.charAt(iFormat)) { + case 'd': + output += formatNumber('d', date.getDate(), 2); + break; + case 'D': + output += formatName('D', date.getDay(), dayNamesShort, dayNames); + break; + case 'o': + output += formatNumber('o', + Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3); + break; + case 'm': + output += formatNumber('m', date.getMonth() + 1, 2); + break; + case 'M': + output += formatName('M', date.getMonth(), monthNamesShort, monthNames); + break; + case 'y': + output += (lookAhead('y') ? date.getFullYear() : + (date.getYear() % 100 < 10 ? '0' : '') + date.getYear() % 100); + break; + case '@': + output += date.getTime(); + break; + case '!': + output += date.getTime() * 10000 + this._ticksTo1970; + break; + case "'": + if (lookAhead("'")) + output += "'"; + else + literal = true; + break; + default: + output += format.charAt(iFormat); + } + } + return output; + }, + + /* Extract all possible characters from the date format. */ + _possibleChars: function (format) { + var chars = ''; + var literal = false; + // Check whether a format character is doubled + var lookAhead = function(match) { + var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); + if (matches) + iFormat++; + return matches; + }; + for (var iFormat = 0; iFormat < format.length; iFormat++) + if (literal) + if (format.charAt(iFormat) == "'" && !lookAhead("'")) + literal = false; + else + chars += format.charAt(iFormat); + else + switch (format.charAt(iFormat)) { + case 'd': case 'm': case 'y': case '@': + chars += '0123456789'; + break; + case 'D': case 'M': + return null; // Accept anything + case "'": + if (lookAhead("'")) + chars += "'"; + else + literal = true; + break; + default: + chars += format.charAt(iFormat); + } + return chars; + }, + + /* Get a setting value, defaulting if necessary. */ + _get: function(inst, name) { + return inst.settings[name] !== undefined ? + inst.settings[name] : this._defaults[name]; + }, + + /* Parse existing date and initialise date picker. */ + _setDateFromField: function(inst, noDefault) { + if (inst.input.val() == inst.lastVal) { + return; + } + var dateFormat = this._get(inst, 'dateFormat'); + var dates = inst.lastVal = inst.input ? inst.input.val() : null; + var date, defaultDate; + date = defaultDate = this._getDefaultDate(inst); + var settings = this._getFormatConfig(inst); + try { + date = this.parseDate(dateFormat, dates, settings) || defaultDate; + } catch (event) { + this.log(event); + dates = (noDefault ? '' : dates); + } + inst.selectedDay = date.getDate(); + inst.drawMonth = inst.selectedMonth = date.getMonth(); + inst.drawYear = inst.selectedYear = date.getFullYear(); + inst.currentDay = (dates ? date.getDate() : 0); + inst.currentMonth = (dates ? date.getMonth() : 0); + inst.currentYear = (dates ? date.getFullYear() : 0); + this._adjustInstDate(inst); + }, + + /* Retrieve the default date shown on opening. */ + _getDefaultDate: function(inst) { + return this._restrictMinMax(inst, + this._determineDate(inst, this._get(inst, 'defaultDate'), new Date())); + }, + + /* A date may be specified as an exact value or a relative one. */ + _determineDate: function(inst, date, defaultDate) { + var offsetNumeric = function(offset) { + var date = new Date(); + date.setDate(date.getDate() + offset); + return date; + }; + var offsetString = function(offset) { + try { + return $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'), + offset, $.datepicker._getFormatConfig(inst)); + } + catch (e) { + // Ignore + } + var date = (offset.toLowerCase().match(/^c/) ? + $.datepicker._getDate(inst) : null) || new Date(); + var year = date.getFullYear(); + var month = date.getMonth(); + var day = date.getDate(); + var pattern = /([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g; + var matches = pattern.exec(offset); + while (matches) { + switch (matches[2] || 'd') { + case 'd' : case 'D' : + day += parseInt(matches[1],10); break; + case 'w' : case 'W' : + day += parseInt(matches[1],10) * 7; break; + case 'm' : case 'M' : + month += parseInt(matches[1],10); + day = Math.min(day, $.datepicker._getDaysInMonth(year, month)); + break; + case 'y': case 'Y' : + year += parseInt(matches[1],10); + day = Math.min(day, $.datepicker._getDaysInMonth(year, month)); + break; + } + matches = pattern.exec(offset); + } + return new Date(year, month, day); + }; + var newDate = (date == null || date === '' ? defaultDate : (typeof date == 'string' ? offsetString(date) : + (typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime())))); + newDate = (newDate && newDate.toString() == 'Invalid Date' ? defaultDate : newDate); + if (newDate) { + newDate.setHours(0); + newDate.setMinutes(0); + newDate.setSeconds(0); + newDate.setMilliseconds(0); + } + return this._daylightSavingAdjust(newDate); + }, + + /* Handle switch to/from daylight saving. + Hours may be non-zero on daylight saving cut-over: + > 12 when midnight changeover, but then cannot generate + midnight datetime, so jump to 1AM, otherwise reset. + @param date (Date) the date to check + @return (Date) the corrected date */ + _daylightSavingAdjust: function(date) { + if (!date) return null; + date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0); + return date; + }, + + /* Set the date(s) directly. */ + _setDate: function(inst, date, noChange) { + var clear = !date; + var origMonth = inst.selectedMonth; + var origYear = inst.selectedYear; + var newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date())); + inst.selectedDay = inst.currentDay = newDate.getDate(); + inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth(); + inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear(); + if ((origMonth != inst.selectedMonth || origYear != inst.selectedYear) && !noChange) + this._notifyChange(inst); + this._adjustInstDate(inst); + if (inst.input) { + inst.input.val(clear ? '' : this._formatDate(inst)); + } + }, + + /* Retrieve the date(s) directly. */ + _getDate: function(inst) { + var startDate = (!inst.currentYear || (inst.input && inst.input.val() == '') ? null : + this._daylightSavingAdjust(new Date( + inst.currentYear, inst.currentMonth, inst.currentDay))); + return startDate; + }, + + /* Generate the HTML for the current state of the date picker. */ + _generateHTML: function(inst) { + var today = new Date(); + today = this._daylightSavingAdjust( + new Date(today.getFullYear(), today.getMonth(), today.getDate())); // clear time + var isRTL = this._get(inst, 'isRTL'); + var showButtonPanel = this._get(inst, 'showButtonPanel'); + var hideIfNoPrevNext = this._get(inst, 'hideIfNoPrevNext'); + var navigationAsDateFormat = this._get(inst, 'navigationAsDateFormat'); + var numMonths = this._getNumberOfMonths(inst); + var showCurrentAtPos = this._get(inst, 'showCurrentAtPos'); + var stepMonths = this._get(inst, 'stepMonths'); + var isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1); + var currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) : + new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); + var minDate = this._getMinMaxDate(inst, 'min'); + var maxDate = this._getMinMaxDate(inst, 'max'); + var drawMonth = inst.drawMonth - showCurrentAtPos; + var drawYear = inst.drawYear; + if (drawMonth < 0) { + drawMonth += 12; + drawYear--; + } + if (maxDate) { + var maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(), + maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate())); + maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw); + while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) { + drawMonth--; + if (drawMonth < 0) { + drawMonth = 11; + drawYear--; + } + } + } + inst.drawMonth = drawMonth; + inst.drawYear = drawYear; + var prevText = this._get(inst, 'prevText'); + prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText, + this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)), + this._getFormatConfig(inst))); + var prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ? + '' + prevText + '' : + (hideIfNoPrevNext ? '' : '' + prevText + '')); + var nextText = this._get(inst, 'nextText'); + nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText, + this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)), + this._getFormatConfig(inst))); + var next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ? + '' + nextText + '' : + (hideIfNoPrevNext ? '' : '' + nextText + '')); + var currentText = this._get(inst, 'currentText'); + var gotoDate = (this._get(inst, 'gotoCurrent') && inst.currentDay ? currentDate : today); + currentText = (!navigationAsDateFormat ? currentText : + this.formatDate(currentText, gotoDate, this._getFormatConfig(inst))); + var controls = (!inst.inline ? '' : ''); + var buttonPanel = (showButtonPanel) ? '
    ' + (isRTL ? controls : '') + + (this._isInRange(inst, gotoDate) ? '' : '') + (isRTL ? '' : controls) + '
    ' : ''; + var firstDay = parseInt(this._get(inst, 'firstDay'),10); + firstDay = (isNaN(firstDay) ? 0 : firstDay); + var showWeek = this._get(inst, 'showWeek'); + var dayNames = this._get(inst, 'dayNames'); + var dayNamesShort = this._get(inst, 'dayNamesShort'); + var dayNamesMin = this._get(inst, 'dayNamesMin'); + var monthNames = this._get(inst, 'monthNames'); + var monthNamesShort = this._get(inst, 'monthNamesShort'); + var beforeShowDay = this._get(inst, 'beforeShowDay'); + var showOtherMonths = this._get(inst, 'showOtherMonths'); + var selectOtherMonths = this._get(inst, 'selectOtherMonths'); + var calculateWeek = this._get(inst, 'calculateWeek') || this.iso8601Week; + var defaultDate = this._getDefaultDate(inst); + var html = ''; + for (var row = 0; row < numMonths[0]; row++) { + var group = ''; + this.maxRows = 4; + for (var col = 0; col < numMonths[1]; col++) { + var selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay)); + var cornerClass = ' ui-corner-all'; + var calender = ''; + if (isMultiMonth) { + calender += '
    '; + } + calender += '
    ' + + (/all|left/.test(cornerClass) && row == 0 ? (isRTL ? next : prev) : '') + + (/all|right/.test(cornerClass) && row == 0 ? (isRTL ? prev : next) : '') + + this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate, + row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers + '
    ' + + ''; + var thead = (showWeek ? '' : ''); + for (var dow = 0; dow < 7; dow++) { // days of the week + var day = (dow + firstDay) % 7; + thead += '= 5 ? ' class="ui-datepicker-week-end"' : '') + '>' + + '' + dayNamesMin[day] + ''; + } + calender += thead + ''; + var daysInMonth = this._getDaysInMonth(drawYear, drawMonth); + if (drawYear == inst.selectedYear && drawMonth == inst.selectedMonth) + inst.selectedDay = Math.min(inst.selectedDay, daysInMonth); + var leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7; + var curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate + var numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043) + this.maxRows = numRows; + var printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays)); + for (var dRow = 0; dRow < numRows; dRow++) { // create date picker rows + calender += ''; + var tbody = (!showWeek ? '' : ''); + for (var dow = 0; dow < 7; dow++) { // create date picker days + var daySettings = (beforeShowDay ? + beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, '']); + var otherMonth = (printDate.getMonth() != drawMonth); + var unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] || + (minDate && printDate < minDate) || (maxDate && printDate > maxDate); + tbody += ''; // display selectable date + printDate.setDate(printDate.getDate() + 1); + printDate = this._daylightSavingAdjust(printDate); + } + calender += tbody + ''; + } + drawMonth++; + if (drawMonth > 11) { + drawMonth = 0; + drawYear++; + } + calender += '
    ' + this._get(inst, 'weekHeader') + '
    ' + + this._get(inst, 'calculateWeek')(printDate) + '' + // actions + (otherMonth && !showOtherMonths ? ' ' : // display for other months + (unselectable ? '' + printDate.getDate() + '' : '' + printDate.getDate() + '')) + '
    ' + (isMultiMonth ? '
    ' + + ((numMonths[0] > 0 && col == numMonths[1]-1) ? '
    ' : '') : ''); + group += calender; + } + html += group; + } + html += buttonPanel + ($.browser.msie && parseInt($.browser.version,10) < 7 && !inst.inline ? + '' : ''); + inst._keyEvent = false; + return html; + }, + + /* Generate the month and year header. */ + _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate, + secondary, monthNames, monthNamesShort) { + var changeMonth = this._get(inst, 'changeMonth'); + var changeYear = this._get(inst, 'changeYear'); + var showMonthAfterYear = this._get(inst, 'showMonthAfterYear'); + var html = '
    '; + var monthHtml = ''; + // month selection + if (secondary || !changeMonth) + monthHtml += '' + monthNames[drawMonth] + ''; + else { + var inMinYear = (minDate && minDate.getFullYear() == drawYear); + var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear); + monthHtml += ''; + } + if (!showMonthAfterYear) + html += monthHtml + (secondary || !(changeMonth && changeYear) ? ' ' : ''); + // year selection + if ( !inst.yearshtml ) { + inst.yearshtml = ''; + if (secondary || !changeYear) + html += '' + drawYear + ''; + else { + // determine range of years to display + var years = this._get(inst, 'yearRange').split(':'); + var thisYear = new Date().getFullYear(); + var determineYear = function(value) { + var year = (value.match(/c[+-].*/) ? drawYear + parseInt(value.substring(1), 10) : + (value.match(/[+-].*/) ? thisYear + parseInt(value, 10) : + parseInt(value, 10))); + return (isNaN(year) ? thisYear : year); + }; + var year = determineYear(years[0]); + var endYear = Math.max(year, determineYear(years[1] || '')); + year = (minDate ? Math.max(year, minDate.getFullYear()) : year); + endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear); + inst.yearshtml += ''; + + html += inst.yearshtml; + inst.yearshtml = null; + } + } + html += this._get(inst, 'yearSuffix'); + if (showMonthAfterYear) + html += (secondary || !(changeMonth && changeYear) ? ' ' : '') + monthHtml; + html += '
    '; // Close datepicker_header + return html; + }, + + /* Adjust one of the date sub-fields. */ + _adjustInstDate: function(inst, offset, period) { + var year = inst.drawYear + (period == 'Y' ? offset : 0); + var month = inst.drawMonth + (period == 'M' ? offset : 0); + var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + + (period == 'D' ? offset : 0); + var date = this._restrictMinMax(inst, + this._daylightSavingAdjust(new Date(year, month, day))); + inst.selectedDay = date.getDate(); + inst.drawMonth = inst.selectedMonth = date.getMonth(); + inst.drawYear = inst.selectedYear = date.getFullYear(); + if (period == 'M' || period == 'Y') + this._notifyChange(inst); + }, + + /* Ensure a date is within any min/max bounds. */ + _restrictMinMax: function(inst, date) { + var minDate = this._getMinMaxDate(inst, 'min'); + var maxDate = this._getMinMaxDate(inst, 'max'); + var newDate = (minDate && date < minDate ? minDate : date); + newDate = (maxDate && newDate > maxDate ? maxDate : newDate); + return newDate; + }, + + /* Notify change of month/year. */ + _notifyChange: function(inst) { + var onChange = this._get(inst, 'onChangeMonthYear'); + if (onChange) + onChange.apply((inst.input ? inst.input[0] : null), + [inst.selectedYear, inst.selectedMonth + 1, inst]); + }, + + /* Determine the number of months to show. */ + _getNumberOfMonths: function(inst) { + var numMonths = this._get(inst, 'numberOfMonths'); + return (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths)); + }, + + /* Determine the current maximum date - ensure no time components are set. */ + _getMinMaxDate: function(inst, minMax) { + return this._determineDate(inst, this._get(inst, minMax + 'Date'), null); + }, + + /* Find the number of days in a given month. */ + _getDaysInMonth: function(year, month) { + return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate(); + }, + + /* Find the day of the week of the first of a month. */ + _getFirstDayOfMonth: function(year, month) { + return new Date(year, month, 1).getDay(); + }, + + /* Determines if we should allow a "next/prev" month display change. */ + _canAdjustMonth: function(inst, offset, curYear, curMonth) { + var numMonths = this._getNumberOfMonths(inst); + var date = this._daylightSavingAdjust(new Date(curYear, + curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1)); + if (offset < 0) + date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth())); + return this._isInRange(inst, date); + }, + + /* Is the given date in the accepted range? */ + _isInRange: function(inst, date) { + var minDate = this._getMinMaxDate(inst, 'min'); + var maxDate = this._getMinMaxDate(inst, 'max'); + return ((!minDate || date.getTime() >= minDate.getTime()) && + (!maxDate || date.getTime() <= maxDate.getTime())); + }, + + /* Provide the configuration settings for formatting/parsing. */ + _getFormatConfig: function(inst) { + var shortYearCutoff = this._get(inst, 'shortYearCutoff'); + shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : + new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); + return {shortYearCutoff: shortYearCutoff, + dayNamesShort: this._get(inst, 'dayNamesShort'), dayNames: this._get(inst, 'dayNames'), + monthNamesShort: this._get(inst, 'monthNamesShort'), monthNames: this._get(inst, 'monthNames')}; + }, + + /* Format the given date for display. */ + _formatDate: function(inst, day, month, year) { + if (!day) { + inst.currentDay = inst.selectedDay; + inst.currentMonth = inst.selectedMonth; + inst.currentYear = inst.selectedYear; + } + var date = (day ? (typeof day == 'object' ? day : + this._daylightSavingAdjust(new Date(year, month, day))) : + this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); + return this.formatDate(this._get(inst, 'dateFormat'), date, this._getFormatConfig(inst)); + } +}); + +/* + * Bind hover events for datepicker elements. + * Done via delegate so the binding only occurs once in the lifetime of the parent div. + * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker. + */ +function bindHover(dpDiv) { + var selector = 'button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a'; + return dpDiv.bind('mouseout', function(event) { + var elem = $( event.target ).closest( selector ); + if ( !elem.length ) { + return; + } + elem.removeClass( "ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover" ); + }) + .bind('mouseover', function(event) { + var elem = $( event.target ).closest( selector ); + if ($.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0]) || + !elem.length ) { + return; + } + elem.parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover'); + elem.addClass('ui-state-hover'); + if (elem.hasClass('ui-datepicker-prev')) elem.addClass('ui-datepicker-prev-hover'); + if (elem.hasClass('ui-datepicker-next')) elem.addClass('ui-datepicker-next-hover'); + }); +} + +/* jQuery extend now ignores nulls! */ +function extendRemove(target, props) { + $.extend(target, props); + for (var name in props) + if (props[name] == null || props[name] == undefined) + target[name] = props[name]; + return target; +}; + +/* Determine whether an object is an array. */ +function isArray(a) { + return (a && (($.browser.safari && typeof a == 'object' && a.length) || + (a.constructor && a.constructor.toString().match(/\Array\(\)/)))); +}; + +/* Invoke the datepicker functionality. + @param options string - a command, optionally followed by additional parameters or + Object - settings for attaching new datepicker functionality + @return jQuery object */ +$.fn.datepicker = function(options){ + + /* Verify an empty collection wasn't passed - Fixes #6976 */ + if ( !this.length ) { + return this; + } + + /* Initialise the date picker. */ + if (!$.datepicker.initialized) { + $(document).mousedown($.datepicker._checkExternalClick). + find('body').append($.datepicker.dpDiv); + $.datepicker.initialized = true; + } + + var otherArgs = Array.prototype.slice.call(arguments, 1); + if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate' || options == 'widget')) + return $.datepicker['_' + options + 'Datepicker']. + apply($.datepicker, [this[0]].concat(otherArgs)); + if (options == 'option' && arguments.length == 2 && typeof arguments[1] == 'string') + return $.datepicker['_' + options + 'Datepicker']. + apply($.datepicker, [this[0]].concat(otherArgs)); + return this.each(function() { + typeof options == 'string' ? + $.datepicker['_' + options + 'Datepicker']. + apply($.datepicker, [this].concat(otherArgs)) : + $.datepicker._attachDatepicker(this, options); + }); +}; + +$.datepicker = new Datepicker(); // singleton instance +$.datepicker.initialized = false; +$.datepicker.uuid = new Date().getTime(); +$.datepicker.version = "1.8.17"; + +// Workaround for #4055 +// Add another global to avoid noConflict issues with inline event handlers +window['DP_jQuery_' + dpuuid] = $; + +})(jQuery); +/* + * jQuery UI Progressbar 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Progressbar + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function( $, undefined ) { + +$.widget( "ui.progressbar", { + options: { + value: 0, + max: 100 + }, + + min: 0, + + _create: function() { + this.element + .addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" ) + .attr({ + role: "progressbar", + "aria-valuemin": this.min, + "aria-valuemax": this.options.max, + "aria-valuenow": this._value() + }); + + this.valueDiv = $( "
    " ) + .appendTo( this.element ); + + this.oldValue = this._value(); + this._refreshValue(); + }, + + destroy: function() { + this.element + .removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" ) + .removeAttr( "role" ) + .removeAttr( "aria-valuemin" ) + .removeAttr( "aria-valuemax" ) + .removeAttr( "aria-valuenow" ); + + this.valueDiv.remove(); + + $.Widget.prototype.destroy.apply( this, arguments ); + }, + + value: function( newValue ) { + if ( newValue === undefined ) { + return this._value(); + } + + this._setOption( "value", newValue ); + return this; + }, + + _setOption: function( key, value ) { + if ( key === "value" ) { + this.options.value = value; + this._refreshValue(); + if ( this._value() === this.options.max ) { + this._trigger( "complete" ); + } + } + + $.Widget.prototype._setOption.apply( this, arguments ); + }, + + _value: function() { + var val = this.options.value; + // normalize invalid value + if ( typeof val !== "number" ) { + val = 0; + } + return Math.min( this.options.max, Math.max( this.min, val ) ); + }, + + _percentage: function() { + return 100 * this._value() / this.options.max; + }, + + _refreshValue: function() { + var value = this.value(); + var percentage = this._percentage(); + + if ( this.oldValue !== value ) { + this.oldValue = value; + this._trigger( "change" ); + } + + this.valueDiv + .toggle( value > this.min ) + .toggleClass( "ui-corner-right", value === this.options.max ) + .width( percentage.toFixed(0) + "%" ); + this.element.attr( "aria-valuenow", value ); + } +}); + +$.extend( $.ui.progressbar, { + version: "1.8.17" +}); + +})( jQuery ); +/* + * jQuery UI Effects 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/ + */ +;jQuery.effects || (function($, undefined) { + +$.effects = {}; + + + +/******************************************************************************/ +/****************************** COLOR ANIMATIONS ******************************/ +/******************************************************************************/ + +// override the animation for color styles +$.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor', + 'borderRightColor', 'borderTopColor', 'borderColor', 'color', 'outlineColor'], +function(i, attr) { + $.fx.step[attr] = function(fx) { + if (!fx.colorInit) { + fx.start = getColor(fx.elem, attr); + fx.end = getRGB(fx.end); + fx.colorInit = true; + } + + fx.elem.style[attr] = 'rgb(' + + Math.max(Math.min(parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0], 10), 255), 0) + ',' + + Math.max(Math.min(parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1], 10), 255), 0) + ',' + + Math.max(Math.min(parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2], 10), 255), 0) + ')'; + }; +}); + +// Color Conversion functions from highlightFade +// By Blair Mitchelmore +// http://jquery.offput.ca/highlightFade/ + +// Parse strings looking for color tuples [255,255,255] +function getRGB(color) { + var result; + + // Check if we're already dealing with an array of colors + if ( color && color.constructor == Array && color.length == 3 ) + return color; + + // Look for rgb(num,num,num) + if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color)) + return [parseInt(result[1],10), parseInt(result[2],10), parseInt(result[3],10)]; + + // Look for rgb(num%,num%,num%) + if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color)) + return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55]; + + // Look for #a0b1c2 + if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color)) + return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)]; + + // Look for #fff + if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color)) + return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)]; + + // Look for rgba(0, 0, 0, 0) == transparent in Safari 3 + if (result = /rgba\(0, 0, 0, 0\)/.exec(color)) + return colors['transparent']; + + // Otherwise, we're most likely dealing with a named color + return colors[$.trim(color).toLowerCase()]; +} + +function getColor(elem, attr) { + var color; + + do { + color = $.curCSS(elem, attr); + + // Keep going until we find an element that has color, or we hit the body + if ( color != '' && color != 'transparent' || $.nodeName(elem, "body") ) + break; + + attr = "backgroundColor"; + } while ( elem = elem.parentNode ); + + return getRGB(color); +}; + +// Some named colors to work with +// From Interface by Stefan Petre +// http://interface.eyecon.ro/ + +var colors = { + aqua:[0,255,255], + azure:[240,255,255], + beige:[245,245,220], + black:[0,0,0], + blue:[0,0,255], + brown:[165,42,42], + cyan:[0,255,255], + darkblue:[0,0,139], + darkcyan:[0,139,139], + darkgrey:[169,169,169], + darkgreen:[0,100,0], + darkkhaki:[189,183,107], + darkmagenta:[139,0,139], + darkolivegreen:[85,107,47], + darkorange:[255,140,0], + darkorchid:[153,50,204], + darkred:[139,0,0], + darksalmon:[233,150,122], + darkviolet:[148,0,211], + fuchsia:[255,0,255], + gold:[255,215,0], + green:[0,128,0], + indigo:[75,0,130], + khaki:[240,230,140], + lightblue:[173,216,230], + lightcyan:[224,255,255], + lightgreen:[144,238,144], + lightgrey:[211,211,211], + lightpink:[255,182,193], + lightyellow:[255,255,224], + lime:[0,255,0], + magenta:[255,0,255], + maroon:[128,0,0], + navy:[0,0,128], + olive:[128,128,0], + orange:[255,165,0], + pink:[255,192,203], + purple:[128,0,128], + violet:[128,0,128], + red:[255,0,0], + silver:[192,192,192], + white:[255,255,255], + yellow:[255,255,0], + transparent: [255,255,255] +}; + + + +/******************************************************************************/ +/****************************** CLASS ANIMATIONS ******************************/ +/******************************************************************************/ + +var classAnimationActions = ['add', 'remove', 'toggle'], + shorthandStyles = { + border: 1, + borderBottom: 1, + borderColor: 1, + borderLeft: 1, + borderRight: 1, + borderTop: 1, + borderWidth: 1, + margin: 1, + padding: 1 + }; + +function getElementStyles() { + var style = document.defaultView + ? document.defaultView.getComputedStyle(this, null) + : this.currentStyle, + newStyle = {}, + key, + camelCase; + + // webkit enumerates style porperties + if (style && style.length && style[0] && style[style[0]]) { + var len = style.length; + while (len--) { + key = style[len]; + if (typeof style[key] == 'string') { + camelCase = key.replace(/\-(\w)/g, function(all, letter){ + return letter.toUpperCase(); + }); + newStyle[camelCase] = style[key]; + } + } + } else { + for (key in style) { + if (typeof style[key] === 'string') { + newStyle[key] = style[key]; + } + } + } + + return newStyle; +} + +function filterStyles(styles) { + var name, value; + for (name in styles) { + value = styles[name]; + if ( + // ignore null and undefined values + value == null || + // ignore functions (when does this occur?) + $.isFunction(value) || + // shorthand styles that need to be expanded + name in shorthandStyles || + // ignore scrollbars (break in IE) + (/scrollbar/).test(name) || + + // only colors or values that can be converted to numbers + (!(/color/i).test(name) && isNaN(parseFloat(value))) + ) { + delete styles[name]; + } + } + + return styles; +} + +function styleDifference(oldStyle, newStyle) { + var diff = { _: 0 }, // http://dev.jquery.com/ticket/5459 + name; + + for (name in newStyle) { + if (oldStyle[name] != newStyle[name]) { + diff[name] = newStyle[name]; + } + } + + return diff; +} + +$.effects.animateClass = function(value, duration, easing, callback) { + if ($.isFunction(easing)) { + callback = easing; + easing = null; + } + + return this.queue(function() { + var that = $(this), + originalStyleAttr = that.attr('style') || ' ', + originalStyle = filterStyles(getElementStyles.call(this)), + newStyle, + className = that.attr('class'); + + $.each(classAnimationActions, function(i, action) { + if (value[action]) { + that[action + 'Class'](value[action]); + } + }); + newStyle = filterStyles(getElementStyles.call(this)); + that.attr('class', className); + + that.animate(styleDifference(originalStyle, newStyle), { + queue: false, + duration: duration, + easing: easing, + complete: function() { + $.each(classAnimationActions, function(i, action) { + if (value[action]) { that[action + 'Class'](value[action]); } + }); + // work around bug in IE by clearing the cssText before setting it + if (typeof that.attr('style') == 'object') { + that.attr('style').cssText = ''; + that.attr('style').cssText = originalStyleAttr; + } else { + that.attr('style', originalStyleAttr); + } + if (callback) { callback.apply(this, arguments); } + $.dequeue( this ); + } + }); + }); +}; + +$.fn.extend({ + _addClass: $.fn.addClass, + addClass: function(classNames, speed, easing, callback) { + return speed ? $.effects.animateClass.apply(this, [{ add: classNames },speed,easing,callback]) : this._addClass(classNames); + }, + + _removeClass: $.fn.removeClass, + removeClass: function(classNames,speed,easing,callback) { + return speed ? $.effects.animateClass.apply(this, [{ remove: classNames },speed,easing,callback]) : this._removeClass(classNames); + }, + + _toggleClass: $.fn.toggleClass, + toggleClass: function(classNames, force, speed, easing, callback) { + if ( typeof force == "boolean" || force === undefined ) { + if ( !speed ) { + // without speed parameter; + return this._toggleClass(classNames, force); + } else { + return $.effects.animateClass.apply(this, [(force?{add:classNames}:{remove:classNames}),speed,easing,callback]); + } + } else { + // without switch parameter; + return $.effects.animateClass.apply(this, [{ toggle: classNames },force,speed,easing]); + } + }, + + switchClass: function(remove,add,speed,easing,callback) { + return $.effects.animateClass.apply(this, [{ add: add, remove: remove },speed,easing,callback]); + } +}); + + + +/******************************************************************************/ +/*********************************** EFFECTS **********************************/ +/******************************************************************************/ + +$.extend($.effects, { + version: "1.8.17", + + // Saves a set of properties in a data storage + save: function(element, set) { + for(var i=0; i < set.length; i++) { + if(set[i] !== null) element.data("ec.storage."+set[i], element[0].style[set[i]]); + } + }, + + // Restores a set of previously saved properties from a data storage + restore: function(element, set) { + for(var i=0; i < set.length; i++) { + if(set[i] !== null) element.css(set[i], element.data("ec.storage."+set[i])); + } + }, + + setMode: function(el, mode) { + if (mode == 'toggle') mode = el.is(':hidden') ? 'show' : 'hide'; // Set for toggle + return mode; + }, + + getBaseline: function(origin, original) { // Translates a [top,left] array into a baseline value + // this should be a little more flexible in the future to handle a string & hash + var y, x; + switch (origin[0]) { + case 'top': y = 0; break; + case 'middle': y = 0.5; break; + case 'bottom': y = 1; break; + default: y = origin[0] / original.height; + }; + switch (origin[1]) { + case 'left': x = 0; break; + case 'center': x = 0.5; break; + case 'right': x = 1; break; + default: x = origin[1] / original.width; + }; + return {x: x, y: y}; + }, + + // Wraps the element around a wrapper that copies position properties + createWrapper: function(element) { + + // if the element is already wrapped, return it + if (element.parent().is('.ui-effects-wrapper')) { + return element.parent(); + } + + // wrap the element + var props = { + width: element.outerWidth(true), + height: element.outerHeight(true), + 'float': element.css('float') + }, + wrapper = $('
    ') + .addClass('ui-effects-wrapper') + .css({ + fontSize: '100%', + background: 'transparent', + border: 'none', + margin: 0, + padding: 0 + }), + active = document.activeElement; + + element.wrap(wrapper); + + // Fixes #7595 - Elements lose focus when wrapped. + if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) { + $( active ).focus(); + } + + wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually loose the reference to the wrapped element + + // transfer positioning properties to the wrapper + if (element.css('position') == 'static') { + wrapper.css({ position: 'relative' }); + element.css({ position: 'relative' }); + } else { + $.extend(props, { + position: element.css('position'), + zIndex: element.css('z-index') + }); + $.each(['top', 'left', 'bottom', 'right'], function(i, pos) { + props[pos] = element.css(pos); + if (isNaN(parseInt(props[pos], 10))) { + props[pos] = 'auto'; + } + }); + element.css({position: 'relative', top: 0, left: 0, right: 'auto', bottom: 'auto' }); + } + + return wrapper.css(props).show(); + }, + + removeWrapper: function(element) { + var parent, + active = document.activeElement; + + if (element.parent().is('.ui-effects-wrapper')) { + parent = element.parent().replaceWith(element); + // Fixes #7595 - Elements lose focus when wrapped. + if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) { + $( active ).focus(); + } + return parent; + } + + return element; + }, + + setTransition: function(element, list, factor, value) { + value = value || {}; + $.each(list, function(i, x){ + unit = element.cssUnit(x); + if (unit[0] > 0) value[x] = unit[0] * factor + unit[1]; + }); + return value; + } +}); + + +function _normalizeArguments(effect, options, speed, callback) { + // shift params for method overloading + if (typeof effect == 'object') { + callback = options; + speed = null; + options = effect; + effect = options.effect; + } + if ($.isFunction(options)) { + callback = options; + speed = null; + options = {}; + } + if (typeof options == 'number' || $.fx.speeds[options]) { + callback = speed; + speed = options; + options = {}; + } + if ($.isFunction(speed)) { + callback = speed; + speed = null; + } + + options = options || {}; + + speed = speed || options.duration; + speed = $.fx.off ? 0 : typeof speed == 'number' + ? speed : speed in $.fx.speeds ? $.fx.speeds[speed] : $.fx.speeds._default; + + callback = callback || options.complete; + + return [effect, options, speed, callback]; +} + +function standardSpeed( speed ) { + // valid standard speeds + if ( !speed || typeof speed === "number" || $.fx.speeds[ speed ] ) { + return true; + } + + // invalid strings - treat as "normal" speed + if ( typeof speed === "string" && !$.effects[ speed ] ) { + return true; + } + + return false; +} + +$.fn.extend({ + effect: function(effect, options, speed, callback) { + var args = _normalizeArguments.apply(this, arguments), + // TODO: make effects take actual parameters instead of a hash + args2 = { + options: args[1], + duration: args[2], + callback: args[3] + }, + mode = args2.options.mode, + effectMethod = $.effects[effect]; + + if ( $.fx.off || !effectMethod ) { + // delegate to the original method (e.g., .show()) if possible + if ( mode ) { + return this[ mode ]( args2.duration, args2.callback ); + } else { + return this.each(function() { + if ( args2.callback ) { + args2.callback.call( this ); + } + }); + } + } + + return effectMethod.call(this, args2); + }, + + _show: $.fn.show, + show: function(speed) { + if ( standardSpeed( speed ) ) { + return this._show.apply(this, arguments); + } else { + var args = _normalizeArguments.apply(this, arguments); + args[1].mode = 'show'; + return this.effect.apply(this, args); + } + }, + + _hide: $.fn.hide, + hide: function(speed) { + if ( standardSpeed( speed ) ) { + return this._hide.apply(this, arguments); + } else { + var args = _normalizeArguments.apply(this, arguments); + args[1].mode = 'hide'; + return this.effect.apply(this, args); + } + }, + + // jQuery core overloads toggle and creates _toggle + __toggle: $.fn.toggle, + toggle: function(speed) { + if ( standardSpeed( speed ) || typeof speed === "boolean" || $.isFunction( speed ) ) { + return this.__toggle.apply(this, arguments); + } else { + var args = _normalizeArguments.apply(this, arguments); + args[1].mode = 'toggle'; + return this.effect.apply(this, args); + } + }, + + // helper functions + cssUnit: function(key) { + var style = this.css(key), val = []; + $.each( ['em','px','%','pt'], function(i, unit){ + if(style.indexOf(unit) > 0) + val = [parseFloat(style), unit]; + }); + return val; + } +}); + + + +/******************************************************************************/ +/*********************************** EASING ***********************************/ +/******************************************************************************/ + +/* + * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ + * + * Uses the built in easing capabilities added In jQuery 1.1 + * to offer multiple easing options + * + * TERMS OF USE - jQuery Easing + * + * Open source under the BSD License. + * + * Copyright 2008 George McGinley Smith + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * Neither the name of the author nor the names of contributors may be used to endorse + * or promote products derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + +// t: current time, b: begInnIng value, c: change In value, d: duration +$.easing.jswing = $.easing.swing; + +$.extend($.easing, +{ + def: 'easeOutQuad', + swing: function (x, t, b, c, d) { + //alert($.easing.default); + return $.easing[$.easing.def](x, t, b, c, d); + }, + easeInQuad: function (x, t, b, c, d) { + return c*(t/=d)*t + b; + }, + easeOutQuad: function (x, t, b, c, d) { + return -c *(t/=d)*(t-2) + b; + }, + easeInOutQuad: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t + b; + return -c/2 * ((--t)*(t-2) - 1) + b; + }, + easeInCubic: function (x, t, b, c, d) { + return c*(t/=d)*t*t + b; + }, + easeOutCubic: function (x, t, b, c, d) { + return c*((t=t/d-1)*t*t + 1) + b; + }, + easeInOutCubic: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t*t + b; + return c/2*((t-=2)*t*t + 2) + b; + }, + easeInQuart: function (x, t, b, c, d) { + return c*(t/=d)*t*t*t + b; + }, + easeOutQuart: function (x, t, b, c, d) { + return -c * ((t=t/d-1)*t*t*t - 1) + b; + }, + easeInOutQuart: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t*t*t + b; + return -c/2 * ((t-=2)*t*t*t - 2) + b; + }, + easeInQuint: function (x, t, b, c, d) { + return c*(t/=d)*t*t*t*t + b; + }, + easeOutQuint: function (x, t, b, c, d) { + return c*((t=t/d-1)*t*t*t*t + 1) + b; + }, + easeInOutQuint: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b; + return c/2*((t-=2)*t*t*t*t + 2) + b; + }, + easeInSine: function (x, t, b, c, d) { + return -c * Math.cos(t/d * (Math.PI/2)) + c + b; + }, + easeOutSine: function (x, t, b, c, d) { + return c * Math.sin(t/d * (Math.PI/2)) + b; + }, + easeInOutSine: function (x, t, b, c, d) { + return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; + }, + easeInExpo: function (x, t, b, c, d) { + return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b; + }, + easeOutExpo: function (x, t, b, c, d) { + return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; + }, + easeInOutExpo: function (x, t, b, c, d) { + if (t==0) return b; + if (t==d) return b+c; + if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b; + return c/2 * (-Math.pow(2, -10 * --t) + 2) + b; + }, + easeInCirc: function (x, t, b, c, d) { + return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b; + }, + easeOutCirc: function (x, t, b, c, d) { + return c * Math.sqrt(1 - (t=t/d-1)*t) + b; + }, + easeInOutCirc: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b; + return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b; + }, + easeInElastic: function (x, t, b, c, d) { + var s=1.70158;var p=0;var a=c; + if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; + if (a < Math.abs(c)) { a=c; var s=p/4; } + else var s = p/(2*Math.PI) * Math.asin (c/a); + return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; + }, + easeOutElastic: function (x, t, b, c, d) { + var s=1.70158;var p=0;var a=c; + if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; + if (a < Math.abs(c)) { a=c; var s=p/4; } + else var s = p/(2*Math.PI) * Math.asin (c/a); + return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b; + }, + easeInOutElastic: function (x, t, b, c, d) { + var s=1.70158;var p=0;var a=c; + if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5); + if (a < Math.abs(c)) { a=c; var s=p/4; } + else var s = p/(2*Math.PI) * Math.asin (c/a); + if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; + return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b; + }, + easeInBack: function (x, t, b, c, d, s) { + if (s == undefined) s = 1.70158; + return c*(t/=d)*t*((s+1)*t - s) + b; + }, + easeOutBack: function (x, t, b, c, d, s) { + if (s == undefined) s = 1.70158; + return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; + }, + easeInOutBack: function (x, t, b, c, d, s) { + if (s == undefined) s = 1.70158; + if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; + return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; + }, + easeInBounce: function (x, t, b, c, d) { + return c - $.easing.easeOutBounce (x, d-t, 0, c, d) + b; + }, + easeOutBounce: function (x, t, b, c, d) { + if ((t/=d) < (1/2.75)) { + return c*(7.5625*t*t) + b; + } else if (t < (2/2.75)) { + return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b; + } else if (t < (2.5/2.75)) { + return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b; + } else { + return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b; + } + }, + easeInOutBounce: function (x, t, b, c, d) { + if (t < d/2) return $.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b; + return $.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b; + } +}); + +/* + * + * TERMS OF USE - EASING EQUATIONS + * + * Open source under the BSD License. + * + * Copyright 2001 Robert Penner + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * Neither the name of the author nor the names of contributors may be used to endorse + * or promote products derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +})(jQuery); +/* + * jQuery UI Effects Blind 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Blind + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.blind = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','bottom','left','right']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode + var direction = o.options.direction || 'vertical'; // Default direction + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper + var ref = (direction == 'vertical') ? 'height' : 'width'; + var distance = (direction == 'vertical') ? wrapper.height() : wrapper.width(); + if(mode == 'show') wrapper.css(ref, 0); // Shift + + // Animation + var animation = {}; + animation[ref] = mode == 'show' ? distance : 0; + + // Animate + wrapper.animate(animation, o.duration, o.options.easing, function() { + if(mode == 'hide') el.hide(); // Hide + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(el[0], arguments); // Callback + el.dequeue(); + }); + + }); + +}; + +})(jQuery); +/* + * jQuery UI Effects Bounce 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Bounce + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.bounce = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','bottom','left','right']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode + var direction = o.options.direction || 'up'; // Default direction + var distance = o.options.distance || 20; // Default distance + var times = o.options.times || 5; // Default # of times + var speed = o.duration || 250; // Default speed per bounce + if (/show|hide/.test(mode)) props.push('opacity'); // Avoid touching opacity to prevent clearType and PNG issues in IE + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + $.effects.createWrapper(el); // Create Wrapper + var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; + var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; + var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 3 : el.outerWidth({margin:true}) / 3); + if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift + if (mode == 'hide') distance = distance / (times * 2); + if (mode != 'hide') times--; + + // Animate + if (mode == 'show') { // Show Bounce + var animation = {opacity: 1}; + animation[ref] = (motion == 'pos' ? '+=' : '-=') + distance; + el.animate(animation, speed / 2, o.options.easing); + distance = distance / 2; + times--; + }; + for (var i = 0; i < times; i++) { // Bounces + var animation1 = {}, animation2 = {}; + animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance; + animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance; + el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing); + distance = (mode == 'hide') ? distance * 2 : distance / 2; + }; + if (mode == 'hide') { // Last Bounce + var animation = {opacity: 0}; + animation[ref] = (motion == 'pos' ? '-=' : '+=') + distance; + el.animate(animation, speed / 2, o.options.easing, function(){ + el.hide(); // Hide + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(this, arguments); // Callback + }); + } else { + var animation1 = {}, animation2 = {}; + animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance; + animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance; + el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing, function(){ + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(this, arguments); // Callback + }); + }; + el.queue('fx', function() { el.dequeue(); }); + el.dequeue(); + }); + +}; + +})(jQuery); +/* + * jQuery UI Effects Clip 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Clip + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.clip = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','bottom','left','right','height','width']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode + var direction = o.options.direction || 'vertical'; // Default direction + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper + var animate = el[0].tagName == 'IMG' ? wrapper : el; + var ref = { + size: (direction == 'vertical') ? 'height' : 'width', + position: (direction == 'vertical') ? 'top' : 'left' + }; + var distance = (direction == 'vertical') ? animate.height() : animate.width(); + if(mode == 'show') { animate.css(ref.size, 0); animate.css(ref.position, distance / 2); } // Shift + + // Animation + var animation = {}; + animation[ref.size] = mode == 'show' ? distance : 0; + animation[ref.position] = mode == 'show' ? 0 : distance / 2; + + // Animate + animate.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { + if(mode == 'hide') el.hide(); // Hide + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(el[0], arguments); // Callback + el.dequeue(); + }}); + + }); + +}; + +})(jQuery); +/* + * jQuery UI Effects Drop 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Drop + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.drop = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','bottom','left','right','opacity']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode + var direction = o.options.direction || 'left'; // Default Direction + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + $.effects.createWrapper(el); // Create Wrapper + var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; + var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; + var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 2 : el.outerWidth({margin:true}) / 2); + if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift + + // Animation + var animation = {opacity: mode == 'show' ? 1 : 0}; + animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance; + + // Animate + el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { + if(mode == 'hide') el.hide(); // Hide + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(this, arguments); // Callback + el.dequeue(); + }}); + + }); + +}; + +})(jQuery); +/* + * jQuery UI Effects Explode 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Explode + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.explode = function(o) { + + return this.queue(function() { + + var rows = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3; + var cells = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3; + + o.options.mode = o.options.mode == 'toggle' ? ($(this).is(':visible') ? 'hide' : 'show') : o.options.mode; + var el = $(this).show().css('visibility', 'hidden'); + var offset = el.offset(); + + //Substract the margins - not fixing the problem yet. + offset.top -= parseInt(el.css("marginTop"),10) || 0; + offset.left -= parseInt(el.css("marginLeft"),10) || 0; + + var width = el.outerWidth(true); + var height = el.outerHeight(true); + + for(var i=0;i') + .css({ + position: 'absolute', + visibility: 'visible', + left: -j*(width/cells), + top: -i*(height/rows) + }) + .parent() + .addClass('ui-effects-explode') + .css({ + position: 'absolute', + overflow: 'hidden', + width: width/cells, + height: height/rows, + left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? (j-Math.floor(cells/2))*(width/cells) : 0), + top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? (i-Math.floor(rows/2))*(height/rows) : 0), + opacity: o.options.mode == 'show' ? 0 : 1 + }).animate({ + left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? 0 : (j-Math.floor(cells/2))*(width/cells)), + top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? 0 : (i-Math.floor(rows/2))*(height/rows)), + opacity: o.options.mode == 'show' ? 1 : 0 + }, o.duration || 500); + } + } + + // Set a timeout, to call the callback approx. when the other animations have finished + setTimeout(function() { + + o.options.mode == 'show' ? el.css({ visibility: 'visible' }) : el.css({ visibility: 'visible' }).hide(); + if(o.callback) o.callback.apply(el[0]); // Callback + el.dequeue(); + + $('div.ui-effects-explode').remove(); + + }, o.duration || 500); + + + }); + +}; + +})(jQuery); +/* + * jQuery UI Effects Fade 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Fade + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.fade = function(o) { + return this.queue(function() { + var elem = $(this), + mode = $.effects.setMode(elem, o.options.mode || 'hide'); + + elem.animate({ opacity: mode }, { + queue: false, + duration: o.duration, + easing: o.options.easing, + complete: function() { + (o.callback && o.callback.apply(this, arguments)); + elem.dequeue(); + } + }); + }); +}; + +})(jQuery); +/* + * jQuery UI Effects Fold 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Fold + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.fold = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','bottom','left','right']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode + var size = o.options.size || 15; // Default fold size + var horizFirst = !(!o.options.horizFirst); // Ensure a boolean value + var duration = o.duration ? o.duration / 2 : $.fx.speeds._default / 2; + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper + var widthFirst = ((mode == 'show') != horizFirst); + var ref = widthFirst ? ['width', 'height'] : ['height', 'width']; + var distance = widthFirst ? [wrapper.width(), wrapper.height()] : [wrapper.height(), wrapper.width()]; + var percent = /([0-9]+)%/.exec(size); + if(percent) size = parseInt(percent[1],10) / 100 * distance[mode == 'hide' ? 0 : 1]; + if(mode == 'show') wrapper.css(horizFirst ? {height: 0, width: size} : {height: size, width: 0}); // Shift + + // Animation + var animation1 = {}, animation2 = {}; + animation1[ref[0]] = mode == 'show' ? distance[0] : size; + animation2[ref[1]] = mode == 'show' ? distance[1] : 0; + + // Animate + wrapper.animate(animation1, duration, o.options.easing) + .animate(animation2, duration, o.options.easing, function() { + if(mode == 'hide') el.hide(); // Hide + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(el[0], arguments); // Callback + el.dequeue(); + }); + + }); + +}; + +})(jQuery); +/* + * jQuery UI Effects Highlight 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Highlight + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.highlight = function(o) { + return this.queue(function() { + var elem = $(this), + props = ['backgroundImage', 'backgroundColor', 'opacity'], + mode = $.effects.setMode(elem, o.options.mode || 'show'), + animation = { + backgroundColor: elem.css('backgroundColor') + }; + + if (mode == 'hide') { + animation.opacity = 0; + } + + $.effects.save(elem, props); + elem + .show() + .css({ + backgroundImage: 'none', + backgroundColor: o.options.color || '#ffff99' + }) + .animate(animation, { + queue: false, + duration: o.duration, + easing: o.options.easing, + complete: function() { + (mode == 'hide' && elem.hide()); + $.effects.restore(elem, props); + (mode == 'show' && !$.support.opacity && this.style.removeAttribute('filter')); + (o.callback && o.callback.apply(this, arguments)); + elem.dequeue(); + } + }); + }); +}; + +})(jQuery); +/* + * jQuery UI Effects Pulsate 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Pulsate + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.pulsate = function(o) { + return this.queue(function() { + var elem = $(this), + mode = $.effects.setMode(elem, o.options.mode || 'show'); + times = ((o.options.times || 5) * 2) - 1; + duration = o.duration ? o.duration / 2 : $.fx.speeds._default / 2, + isVisible = elem.is(':visible'), + animateTo = 0; + + if (!isVisible) { + elem.css('opacity', 0).show(); + animateTo = 1; + } + + if ((mode == 'hide' && isVisible) || (mode == 'show' && !isVisible)) { + times--; + } + + for (var i = 0; i < times; i++) { + elem.animate({ opacity: animateTo }, duration, o.options.easing); + animateTo = (animateTo + 1) % 2; + } + + elem.animate({ opacity: animateTo }, duration, o.options.easing, function() { + if (animateTo == 0) { + elem.hide(); + } + (o.callback && o.callback.apply(this, arguments)); + }); + + elem + .queue('fx', function() { elem.dequeue(); }) + .dequeue(); + }); +}; + +})(jQuery); +/* + * jQuery UI Effects Scale 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Scale + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.puff = function(o) { + return this.queue(function() { + var elem = $(this), + mode = $.effects.setMode(elem, o.options.mode || 'hide'), + percent = parseInt(o.options.percent, 10) || 150, + factor = percent / 100, + original = { height: elem.height(), width: elem.width() }; + + $.extend(o.options, { + fade: true, + mode: mode, + percent: mode == 'hide' ? percent : 100, + from: mode == 'hide' + ? original + : { + height: original.height * factor, + width: original.width * factor + } + }); + + elem.effect('scale', o.options, o.duration, o.callback); + elem.dequeue(); + }); +}; + +$.effects.scale = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this); + + // Set options + var options = $.extend(true, {}, o.options); + var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode + var percent = parseInt(o.options.percent,10) || (parseInt(o.options.percent,10) == 0 ? 0 : (mode == 'hide' ? 0 : 100)); // Set default scaling percent + var direction = o.options.direction || 'both'; // Set default axis + var origin = o.options.origin; // The origin of the scaling + if (mode != 'effect') { // Set default origin and restore for show/hide + options.origin = origin || ['middle','center']; + options.restore = true; + } + var original = {height: el.height(), width: el.width()}; // Save original + el.from = o.options.from || (mode == 'show' ? {height: 0, width: 0} : original); // Default from state + + // Adjust + var factor = { // Set scaling factor + y: direction != 'horizontal' ? (percent / 100) : 1, + x: direction != 'vertical' ? (percent / 100) : 1 + }; + el.to = {height: original.height * factor.y, width: original.width * factor.x}; // Set to state + + if (o.options.fade) { // Fade option to support puff + if (mode == 'show') {el.from.opacity = 0; el.to.opacity = 1;}; + if (mode == 'hide') {el.from.opacity = 1; el.to.opacity = 0;}; + }; + + // Animation + options.from = el.from; options.to = el.to; options.mode = mode; + + // Animate + el.effect('size', options, o.duration, o.callback); + el.dequeue(); + }); + +}; + +$.effects.size = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','bottom','left','right','width','height','overflow','opacity']; + var props1 = ['position','top','bottom','left','right','overflow','opacity']; // Always restore + var props2 = ['width','height','overflow']; // Copy for children + var cProps = ['fontSize']; + var vProps = ['borderTopWidth', 'borderBottomWidth', 'paddingTop', 'paddingBottom']; + var hProps = ['borderLeftWidth', 'borderRightWidth', 'paddingLeft', 'paddingRight']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode + var restore = o.options.restore || false; // Default restore + var scale = o.options.scale || 'both'; // Default scale mode + var origin = o.options.origin; // The origin of the sizing + var original = {height: el.height(), width: el.width()}; // Save original + el.from = o.options.from || original; // Default from state + el.to = o.options.to || original; // Default to state + // Adjust + if (origin) { // Calculate baseline shifts + var baseline = $.effects.getBaseline(origin, original); + el.from.top = (original.height - el.from.height) * baseline.y; + el.from.left = (original.width - el.from.width) * baseline.x; + el.to.top = (original.height - el.to.height) * baseline.y; + el.to.left = (original.width - el.to.width) * baseline.x; + }; + var factor = { // Set scaling factor + from: {y: el.from.height / original.height, x: el.from.width / original.width}, + to: {y: el.to.height / original.height, x: el.to.width / original.width} + }; + if (scale == 'box' || scale == 'both') { // Scale the css box + if (factor.from.y != factor.to.y) { // Vertical props scaling + props = props.concat(vProps); + el.from = $.effects.setTransition(el, vProps, factor.from.y, el.from); + el.to = $.effects.setTransition(el, vProps, factor.to.y, el.to); + }; + if (factor.from.x != factor.to.x) { // Horizontal props scaling + props = props.concat(hProps); + el.from = $.effects.setTransition(el, hProps, factor.from.x, el.from); + el.to = $.effects.setTransition(el, hProps, factor.to.x, el.to); + }; + }; + if (scale == 'content' || scale == 'both') { // Scale the content + if (factor.from.y != factor.to.y) { // Vertical props scaling + props = props.concat(cProps); + el.from = $.effects.setTransition(el, cProps, factor.from.y, el.from); + el.to = $.effects.setTransition(el, cProps, factor.to.y, el.to); + }; + }; + $.effects.save(el, restore ? props : props1); el.show(); // Save & Show + $.effects.createWrapper(el); // Create Wrapper + el.css('overflow','hidden').css(el.from); // Shift + + // Animate + if (scale == 'content' || scale == 'both') { // Scale the children + vProps = vProps.concat(['marginTop','marginBottom']).concat(cProps); // Add margins/font-size + hProps = hProps.concat(['marginLeft','marginRight']); // Add margins + props2 = props.concat(vProps).concat(hProps); // Concat + el.find("*[width]").each(function(){ + child = $(this); + if (restore) $.effects.save(child, props2); + var c_original = {height: child.height(), width: child.width()}; // Save original + child.from = {height: c_original.height * factor.from.y, width: c_original.width * factor.from.x}; + child.to = {height: c_original.height * factor.to.y, width: c_original.width * factor.to.x}; + if (factor.from.y != factor.to.y) { // Vertical props scaling + child.from = $.effects.setTransition(child, vProps, factor.from.y, child.from); + child.to = $.effects.setTransition(child, vProps, factor.to.y, child.to); + }; + if (factor.from.x != factor.to.x) { // Horizontal props scaling + child.from = $.effects.setTransition(child, hProps, factor.from.x, child.from); + child.to = $.effects.setTransition(child, hProps, factor.to.x, child.to); + }; + child.css(child.from); // Shift children + child.animate(child.to, o.duration, o.options.easing, function(){ + if (restore) $.effects.restore(child, props2); // Restore children + }); // Animate children + }); + }; + + // Animate + el.animate(el.to, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { + if (el.to.opacity === 0) { + el.css('opacity', el.from.opacity); + } + if(mode == 'hide') el.hide(); // Hide + $.effects.restore(el, restore ? props : props1); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(this, arguments); // Callback + el.dequeue(); + }}); + + }); + +}; + +})(jQuery); +/* + * jQuery UI Effects Shake 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Shake + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.shake = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','bottom','left','right']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode + var direction = o.options.direction || 'left'; // Default direction + var distance = o.options.distance || 20; // Default distance + var times = o.options.times || 3; // Default # of times + var speed = o.duration || o.options.duration || 140; // Default speed per shake + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + $.effects.createWrapper(el); // Create Wrapper + var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; + var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; + + // Animation + var animation = {}, animation1 = {}, animation2 = {}; + animation[ref] = (motion == 'pos' ? '-=' : '+=') + distance; + animation1[ref] = (motion == 'pos' ? '+=' : '-=') + distance * 2; + animation2[ref] = (motion == 'pos' ? '-=' : '+=') + distance * 2; + + // Animate + el.animate(animation, speed, o.options.easing); + for (var i = 1; i < times; i++) { // Shakes + el.animate(animation1, speed, o.options.easing).animate(animation2, speed, o.options.easing); + }; + el.animate(animation1, speed, o.options.easing). + animate(animation, speed / 2, o.options.easing, function(){ // Last shake + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(this, arguments); // Callback + }); + el.queue('fx', function() { el.dequeue(); }); + el.dequeue(); + }); + +}; + +})(jQuery); +/* + * jQuery UI Effects Slide 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Slide + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.slide = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['position','top','bottom','left','right']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'show'); // Set Mode + var direction = o.options.direction || 'left'; // Default Direction + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper + var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; + var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; + var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) : el.outerWidth({margin:true})); + if (mode == 'show') el.css(ref, motion == 'pos' ? (isNaN(distance) ? "-" + distance : -distance) : distance); // Shift + + // Animation + var animation = {}; + animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance; + + // Animate + el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { + if(mode == 'hide') el.hide(); // Hide + $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore + if(o.callback) o.callback.apply(this, arguments); // Callback + el.dequeue(); + }}); + + }); + +}; + +})(jQuery); +/* + * jQuery UI Effects Transfer 1.8.17 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Effects/Transfer + * + * Depends: + * jquery.effects.core.js + */ +(function( $, undefined ) { + +$.effects.transfer = function(o) { + return this.queue(function() { + var elem = $(this), + target = $(o.options.to), + endPosition = target.offset(), + animation = { + top: endPosition.top, + left: endPosition.left, + height: target.innerHeight(), + width: target.innerWidth() + }, + startPosition = elem.offset(), + transfer = $('
    ') + .appendTo(document.body) + .addClass(o.options.className) + .css({ + top: startPosition.top, + left: startPosition.left, + height: elem.innerHeight(), + width: elem.innerWidth(), + position: 'absolute' + }) + .animate(animation, o.duration, o.options.easing, function() { + transfer.remove(); + (o.callback && o.callback.apply(elem[0], arguments)); + elem.dequeue(); + }); + }); +}; + +})(jQuery); diff --git a/BlueTube.Web/assets/js/jquery.annotate.js b/BlueTube.Web/assets/js/jquery.annotate.js new file mode 100644 index 0000000000000000000000000000000000000000..6bc541e1ca2da03c97f97816d8bb05f42943f9f9 --- /dev/null +++ b/BlueTube.Web/assets/js/jquery.annotate.js @@ -0,0 +1,444 @@ +/// +(function($) { + + $.fn.annotateImage = function(options) { + /// + /// Creates annotations on the given image. + /// Images are loaded from the "getUrl" propety passed into the options. + /// + var opts = $.extend({}, $.fn.annotateImage.defaults, options); + var image = this; + + this.image = this; + this.mode = 'view'; + + // Assign defaults + this.getUrl = opts.getUrl; + this.saveUrl = opts.saveUrl; + this.deleteUrl = opts.deleteUrl; + this.editable = opts.editable; + this.useAjax = opts.useAjax; + this.notes = opts.notes; + + // Add the canvas + this.canvas = $('
    '); + this.canvas.children('.image-annotate-edit').hide(); + this.canvas.children('.image-annotate-view').hide(); + this.image.after(this.canvas); + + // Give the canvas and the container their size and background + this.canvas.height(this.height()); + this.canvas.width(this.width()); + this.canvas.css('background-image', 'url("' + this.attr('src') + '")'); + this.canvas.children('.image-annotate-view, .image-annotate-edit').height(this.height()); + this.canvas.children('.image-annotate-view, .image-annotate-edit').width(this.width()); + + // Add the behavior: hide/show the notes when hovering the picture + this.canvas.hover(function() { + if ($(this).children('.image-annotate-edit').css('display') == 'none') { + $(this).children('.image-annotate-view').show(); + } + }, function() { + $(this).children('.image-annotate-view').hide(); + }); + + this.canvas.children('.image-annotate-view').hover(function() { + $(this).show(); + }, function() { + $(this).hide(); + }); + + // load the notes + if (this.useAjax) { + $.fn.annotateImage.ajaxLoad(this); + } else { + $.fn.annotateImage.load(this); + } + + // Add the "Add a note" button + if (this.editable) { + this.button = $('Add Note'); + this.button.click(function() { + $.fn.annotateImage.add(image); + }); + this.canvas.after(this.button); + } + + // Hide the original + this.hide(); + + return this; + }; + + /** + * Plugin Defaults + **/ + $.fn.annotateImage.defaults = { + getUrl: 'your-get.rails', + saveUrl: 'your-save.rails', + deleteUrl: 'your-delete.rails', + editable: true, + useAjax: true, + notes: new Array() + }; + + $.fn.annotateImage.clear = function(image) { + /// + /// Clears all existing annotations from the image. + /// + for (var i = 0; i < image.notes.length; i++) { + image.notes[image.notes[i]].destroy(); + } + image.notes = new Array(); + }; + + $.fn.annotateImage.ajaxLoad = function(image) { + /// + /// Loads the annotations from the "getUrl" property passed in on the + /// options object. + /// + $.getJSON(image.getUrl + '?ticks=' + $.fn.annotateImage.getTicks(), function(data) { + image.notes = data; + $.fn.annotateImage.load(image); + }); + }; + + $.fn.annotateImage.load = function(image) { + /// + /// Loads the annotations from the notes property passed in on the + /// options object. + /// + for (var i = 0; i < image.notes.length; i++) { + image.notes[image.notes[i]] = new $.fn.annotateView(image, image.notes[i]); + } + }; + + $.fn.annotateImage.getTicks = function() { + /// + /// Gets a count og the ticks for the current date. + /// This is used to ensure that URLs are always unique and not cached by the browser. + /// + var now = new Date(); + return now.getTime(); + }; + + $.fn.annotateImage.add = function(image) { + /// + /// Adds a note to the image. + /// + if (image.mode == 'view') { + image.mode = 'edit'; + + // Create/prepare the editable note elements + var editable = new $.fn.annotateEdit(image); + + $.fn.annotateImage.createSaveButton(editable, image); + $.fn.annotateImage.createCancelButton(editable, image); + } + }; + + $.fn.annotateImage.createSaveButton = function(editable, image, note) { + /// + /// Creates a Save button on the editable note. + /// + var ok = $('OK'); + + ok.click(function() { + var form = $('#image-annotate-edit-form form'); + var text = $('#image-annotate-text').val(); + $.fn.annotateImage.appendPosition(form, editable) + image.mode = 'view'; + + // Save via AJAX + if (image.useAjax) { + $.ajax({ + url: image.saveUrl, + data: form.serialize(), + error: function(e) { alert("An error occured saving that note.") }, + success: function(data) { + if (data.annotation_id != undefined) { + editable.note.id = data.annotation_id; + } + }, + dataType: "json" + }); + } + + // Add to canvas + if (note) { + note.resetPosition(editable, text); + } else { + editable.note.editable = true; + note = new $.fn.annotateView(image, editable.note) + note.resetPosition(editable, text); + image.notes.push(editable.note); + } + + editable.destroy(); + }); + editable.form.append(ok); + }; + + $.fn.annotateImage.createCancelButton = function(editable, image) { + /// + /// Creates a Cancel button on the editable note. + /// + var cancel = $('Cancel'); + cancel.click(function() { + editable.destroy(); + image.mode = 'view'; + }); + editable.form.append(cancel); + }; + + $.fn.annotateImage.saveAsHtml = function(image, target) { + var element = $(target); + var html = ""; + for (var i = 0; i < image.notes.length; i++) { + html += $.fn.annotateImage.createHiddenField("text_" + i, image.notes[i].text); + html += $.fn.annotateImage.createHiddenField("top_" + i, image.notes[i].top); + html += $.fn.annotateImage.createHiddenField("left_" + i, image.notes[i].left); + html += $.fn.annotateImage.createHiddenField("height_" + i, image.notes[i].height); + html += $.fn.annotateImage.createHiddenField("width_" + i, image.notes[i].width); + } + element.html(html); + }; + + $.fn.annotateImage.createHiddenField = function(name, value) { + return '<input type="hidden" name="' + name + '" value="' + value + '" />
    '; + }; + + $.fn.annotateEdit = function(image, note) { + /// + /// Defines an editable annotation area. + /// + this.image = image; + + if (note) { + this.note = note; + } else { + var newNote = new Object(); + newNote.id = "new"; + newNote.top = 30; + newNote.left = 30; + newNote.width = 30; + newNote.height = 30; + newNote.text = ""; + this.note = newNote; + } + + // Set area + var area = image.canvas.children('.image-annotate-edit').children('.image-annotate-edit-area'); + this.area = area; + this.area.css('height', this.note.height + 'px'); + this.area.css('width', this.note.width + 'px'); + this.area.css('left', this.note.left + 'px'); + this.area.css('top', this.note.top + 'px'); + + // Show the edition canvas and hide the view canvas + image.canvas.children('.image-annotate-view').hide(); + image.canvas.children('.image-annotate-edit').show(); + + // Add the note (which we'll load with the form afterwards) + var form = $('
    '); + this.form = form; + + $('body').append(this.form); + this.form.css('left', this.area.offset().left + 'px'); + this.form.css('top', (parseInt(this.area.offset().top) + parseInt(this.area.height()) + 7) + 'px'); + + // Set the area as a draggable/resizable element contained in the image canvas. + // Would be better to use the containment option for resizable but buggy + area.resizable({ + handles: 'all', + + stop: function(e, ui) { + form.css('left', area.offset().left + 'px'); + form.css('top', (parseInt(area.offset().top) + parseInt(area.height()) + 2) + 'px'); + } + }) + .draggable({ + containment: image.canvas, + drag: function(e, ui) { + form.css('left', area.offset().left + 'px'); + form.css('top', (parseInt(area.offset().top) + parseInt(area.height()) + 2) + 'px'); + }, + stop: function(e, ui) { + form.css('left', area.offset().left + 'px'); + form.css('top', (parseInt(area.offset().top) + parseInt(area.height()) + 2) + 'px'); + } + }); + return this; + }; + + $.fn.annotateEdit.prototype.destroy = function() { + /// + /// Destroys an editable annotation area. + /// + this.image.canvas.children('.image-annotate-edit').hide(); + this.area.resizable('destroy'); + this.area.draggable('destroy'); + this.area.css('height', ''); + this.area.css('width', ''); + this.area.css('left', ''); + this.area.css('top', ''); + this.form.remove(); + } + + $.fn.annotateView = function(image, note) { + /// + /// Defines a annotation area. + /// + this.image = image; + + this.note = note; + + this.editable = (note.editable && image.editable); + + // Add the area + this.area = $('
    '); + image.canvas.children('.image-annotate-view').prepend(this.area); + + // Add the note + this.form = $('
    ' + note.text + '
    '); + this.form.hide(); + image.canvas.children('.image-annotate-view').append(this.form); + this.form.children('span.actions').hide(); + + // Set the position and size of the note + this.setPosition(); + + // Add the behavior: hide/display the note when hovering the area + var annotation = this; + this.area.hover(function() { + annotation.show(); + }, function() { + annotation.hide(); + }); + + // Edit a note feature + if (this.editable) { + var form = this; + this.area.click(function() { + form.edit(); + }); + } + }; + + $.fn.annotateView.prototype.setPosition = function() { + /// + /// Sets the position of an annotation. + /// + this.area.children('div').height((parseInt(this.note.height) - 2) + 'px'); + this.area.children('div').width((parseInt(this.note.width) - 2) + 'px'); + this.area.css('left', (this.note.left) + 'px'); + this.area.css('top', (this.note.top) + 'px'); + this.form.css('left', (this.note.left) + 'px'); + this.form.css('top', (parseInt(this.note.top) + parseInt(this.note.height) + 7) + 'px'); + }; + + $.fn.annotateView.prototype.show = function() { + /// + /// Highlights the annotation + /// + this.form.fadeIn(250); + if (!this.editable) { + this.area.addClass('image-annotate-area-hover'); + } else { + this.area.addClass('image-annotate-area-editable-hover'); + } + }; + + $.fn.annotateView.prototype.hide = function() { + /// + /// Removes the highlight from the annotation. + /// + this.form.fadeOut(250); + this.area.removeClass('image-annotate-area-hover'); + this.area.removeClass('image-annotate-area-editable-hover'); + }; + + $.fn.annotateView.prototype.destroy = function() { + /// + /// Destroys the annotation. + /// + this.area.remove(); + this.form.remove(); + } + + $.fn.annotateView.prototype.edit = function() { + /// + /// Edits the annotation. + /// + if (this.image.mode == 'view') { + this.image.mode = 'edit'; + var annotation = this; + + // Create/prepare the editable note elements + var editable = new $.fn.annotateEdit(this.image, this.note); + + $.fn.annotateImage.createSaveButton(editable, this.image, annotation); + + // Add the delete button + var del = $('Delete'); + del.click(function() { + var form = $('#image-annotate-edit-form form'); + + $.fn.annotateImage.appendPosition(form, editable) + + if (annotation.image.useAjax) { + $.ajax({ + url: annotation.image.deleteUrl, + data: form.serialize(), + error: function(e) { alert("An error occured deleting that note.") } + }); + } + + annotation.image.mode = 'view'; + editable.destroy(); + annotation.destroy(); + }); + editable.form.append(del); + + $.fn.annotateImage.createCancelButton(editable, this.image); + } + }; + + $.fn.annotateImage.appendPosition = function(form, editable) { + /// + /// Appends the annotations coordinates to the given form that is posted to the server. + /// + var areaFields = $('' + + '' + + '' + + '' + + ''); + form.append(areaFields); + } + + $.fn.annotateView.prototype.resetPosition = function(editable, text) { + /// + /// Sets the position of an annotation. + /// + this.form.html(text); + this.form.hide(); + + // Resize + this.area.children('div').height(editable.area.height() + 'px'); + this.area.children('div').width((editable.area.width() - 2) + 'px'); + this.area.css('left', (editable.area.position().left) + 'px'); + this.area.css('top', (editable.area.position().top) + 'px'); + this.form.css('left', (editable.area.position().left) + 'px'); + this.form.css('top', (parseInt(editable.area.position().top) + parseInt(editable.area.height()) + 7) + 'px'); + + // Save new position to note + this.note.top = editable.area.position().top; + this.note.left = editable.area.position().left; + this.note.height = editable.area.height(); + this.note.width = editable.area.width(); + this.note.text = text; + this.note.id = editable.note.id; + this.editable = true; + }; + +})(jQuery); \ No newline at end of file diff --git a/BlueTube.Web/assets/js/jquery.fancybox.js b/BlueTube.Web/assets/js/jquery.fancybox.js new file mode 100644 index 0000000000000000000000000000000000000000..bd153b013a5a431bc2d564842eed60192fc20b1c --- /dev/null +++ b/BlueTube.Web/assets/js/jquery.fancybox.js @@ -0,0 +1,1983 @@ +/*! + * fancyBox - jQuery Plugin + * version: 2.1.4 (Thu, 10 Jan 2013) + * @requires jQuery v1.6 or later + * + * Examples at http://fancyapps.com/fancybox/ + * License: www.fancyapps.com/fancybox/#license + * + * Copyright 2012 Janis Skarnelis - janis@fancyapps.com + * + */ + +(function (window, document, $, undefined) { + "use strict"; + + var W = $(window), + D = $(document), + F = $.fancybox = function () { + F.open.apply( this, arguments ); + }, + IE = navigator.userAgent.match(/msie/), + didUpdate = null, + isTouch = document.createTouch !== undefined, + + isQuery = function(obj) { + return obj && obj.hasOwnProperty && obj instanceof $; + }, + isString = function(str) { + return str && $.type(str) === "string"; + }, + isPercentage = function(str) { + return isString(str) && str.indexOf('%') > 0; + }, + isScrollable = function(el) { + return (el && !(el.style.overflow && el.style.overflow === 'hidden') && ((el.clientWidth && el.scrollWidth > el.clientWidth) || (el.clientHeight && el.scrollHeight > el.clientHeight))); + }, + getScalar = function(orig, dim) { + var value = parseInt(orig, 10) || 0; + + if (dim && isPercentage(orig)) { + value = F.getViewport()[ dim ] / 100 * value; + } + + return Math.ceil(value); + }, + getValue = function(value, dim) { + return getScalar(value, dim) + 'px'; + }; + + $.extend(F, { + // The current version of fancyBox + version: '2.1.4', + + defaults: { + padding : 15, + margin : 20, + + width : 800, + height : 600, + minWidth : 100, + minHeight : 100, + maxWidth : 9999, + maxHeight : 9999, + + autoSize : true, + autoHeight : false, + autoWidth : false, + + autoResize : true, + autoCenter : !isTouch, + fitToView : true, + aspectRatio : false, + topRatio : 0.5, + leftRatio : 0.5, + + scrolling : 'auto', // 'auto', 'yes' or 'no' + wrapCSS : '', + + arrows : true, + closeBtn : true, + closeClick : false, + nextClick : false, + mouseWheel : true, + autoPlay : false, + playSpeed : 3000, + preload : 3, + modal : false, + loop : true, + + ajax : { + dataType : 'html', + headers : { 'X-fancyBox': true } + }, + iframe : { + scrolling : 'auto', + preload : true + }, + swf : { + wmode: 'transparent', + allowfullscreen : 'true', + allowscriptaccess : 'always' + }, + + keys : { + next : { + 13 : 'left', // enter + 34 : 'up', // page down + 39 : 'left', // right arrow + 40 : 'up' // down arrow + }, + prev : { + 8 : 'right', // backspace + 33 : 'down', // page up + 37 : 'right', // left arrow + 38 : 'down' // up arrow + }, + close : [27], // escape key + play : [32], // space - start/stop slideshow + toggle : [70] // letter "f" - toggle fullscreen + }, + + direction : { + next : 'left', + prev : 'right' + }, + + scrollOutside : true, + + // Override some properties + index : 0, + type : null, + href : null, + content : null, + title : null, + + // HTML templates + tpl: { + wrap : '
    ', + image : '', + iframe : '', + error : '

    The requested content cannot be loaded.
    Please try again later.

    ', + closeBtn : '', + next : '', + prev : '' + }, + + // Properties for each animation type + // Opening fancyBox + openEffect : 'fade', // 'elastic', 'fade' or 'none' + openSpeed : 250, + openEasing : 'swing', + openOpacity : true, + openMethod : 'zoomIn', + + // Closing fancyBox + closeEffect : 'fade', // 'elastic', 'fade' or 'none' + closeSpeed : 250, + closeEasing : 'swing', + closeOpacity : true, + closeMethod : 'zoomOut', + + // Changing next gallery item + nextEffect : 'elastic', // 'elastic', 'fade' or 'none' + nextSpeed : 250, + nextEasing : 'swing', + nextMethod : 'changeIn', + + // Changing previous gallery item + prevEffect : 'elastic', // 'elastic', 'fade' or 'none' + prevSpeed : 250, + prevEasing : 'swing', + prevMethod : 'changeOut', + + // Enable default helpers + helpers : { + overlay : true, + title : true + }, + + // Callbacks + onCancel : $.noop, // If canceling + beforeLoad : $.noop, // Before loading + afterLoad : $.noop, // After loading + beforeShow : $.noop, // Before changing in current item + afterShow : $.noop, // After opening + beforeChange : $.noop, // Before changing gallery item + beforeClose : $.noop, // Before closing + afterClose : $.noop // After closing + }, + + //Current state + group : {}, // Selected group + opts : {}, // Group options + previous : null, // Previous element + coming : null, // Element being loaded + current : null, // Currently loaded element + isActive : false, // Is activated + isOpen : false, // Is currently open + isOpened : false, // Have been fully opened at least once + + wrap : null, + skin : null, + outer : null, + inner : null, + + player : { + timer : null, + isActive : false + }, + + // Loaders + ajaxLoad : null, + imgPreload : null, + + // Some collections + transitions : {}, + helpers : {}, + + /* + * Static methods + */ + + open: function (group, opts) { + if (!group) { + return; + } + + if (!$.isPlainObject(opts)) { + opts = {}; + } + + // Close if already active + if (false === F.close(true)) { + return; + } + + // Normalize group + if (!$.isArray(group)) { + group = isQuery(group) ? $(group).get() : [group]; + } + + // Recheck if the type of each element is `object` and set content type (image, ajax, etc) + $.each(group, function(i, element) { + var obj = {}, + href, + title, + content, + type, + rez, + hrefParts, + selector; + + if ($.type(element) === "object") { + // Check if is DOM element + if (element.nodeType) { + element = $(element); + } + + if (isQuery(element)) { + obj = { + href : element.data('fancybox-href') || element.attr('href'), + title : element.data('fancybox-title') || element.attr('title'), + isDom : true, + element : element + }; + + if ($.metadata) { + $.extend(true, obj, element.metadata()); + } + + } else { + obj = element; + } + } + + href = opts.href || obj.href || (isString(element) ? element : null); + title = opts.title !== undefined ? opts.title : obj.title || ''; + + content = opts.content || obj.content; + type = content ? 'html' : (opts.type || obj.type); + + if (!type && obj.isDom) { + type = element.data('fancybox-type'); + + if (!type) { + rez = element.prop('class').match(/fancybox\.(\w+)/); + type = rez ? rez[1] : null; + } + } + + if (isString(href)) { + // Try to guess the content type + if (!type) { + if (F.isImage(href)) { + type = 'image'; + + } else if (F.isSWF(href)) { + type = 'swf'; + + } else if (href.charAt(0) === '#') { + type = 'inline'; + + } else if (isString(element)) { + type = 'html'; + content = element; + } + } + + // Split url into two pieces with source url and content selector, e.g, + // "/mypage.html #my_id" will load "/mypage.html" and display element having id "my_id" + if (type === 'ajax') { + hrefParts = href.split(/\s+/, 2); + href = hrefParts.shift(); + selector = hrefParts.shift(); + } + } + + if (!content) { + if (type === 'inline') { + if (href) { + content = $( isString(href) ? href.replace(/.*(?=#[^\s]+$)/, '') : href ); //strip for ie7 + + } else if (obj.isDom) { + content = element; + } + + } else if (type === 'html') { + content = href; + + } else if (!type && !href && obj.isDom) { + type = 'inline'; + content = element; + } + } + + $.extend(obj, { + href : href, + type : type, + content : content, + title : title, + selector : selector + }); + + group[ i ] = obj; + }); + + // Extend the defaults + F.opts = $.extend(true, {}, F.defaults, opts); + + // All options are merged recursive except keys + if (opts.keys !== undefined) { + F.opts.keys = opts.keys ? $.extend({}, F.defaults.keys, opts.keys) : false; + } + + F.group = group; + + return F._start(F.opts.index); + }, + + // Cancel image loading or abort ajax request + cancel: function () { + var coming = F.coming; + + if (!coming || false === F.trigger('onCancel')) { + return; + } + + F.hideLoading(); + + if (F.ajaxLoad) { + F.ajaxLoad.abort(); + } + + F.ajaxLoad = null; + + if (F.imgPreload) { + F.imgPreload.onload = F.imgPreload.onerror = null; + } + + if (coming.wrap) { + coming.wrap.stop(true, true).trigger('onReset').remove(); + } + + F.coming = null; + + // If the first item has been canceled, then clear everything + if (!F.current) { + F._afterZoomOut( coming ); + } + }, + + // Start closing animation if is open; remove immediately if opening/closing + close: function (event) { + F.cancel(); + + if (false === F.trigger('beforeClose')) { + return; + } + + F.unbindEvents(); + + if (!F.isActive) { + return; + } + + if (!F.isOpen || event === true) { + $('.fancybox-wrap').stop(true).trigger('onReset').remove(); + + F._afterZoomOut(); + + } else { + F.isOpen = F.isOpened = false; + F.isClosing = true; + + $('.fancybox-item, .fancybox-nav').remove(); + + F.wrap.stop(true, true).removeClass('fancybox-opened'); + + F.transitions[ F.current.closeMethod ](); + } + }, + + // Manage slideshow: + // $.fancybox.play(); - toggle slideshow + // $.fancybox.play( true ); - start + // $.fancybox.play( false ); - stop + play: function ( action ) { + var clear = function () { + clearTimeout(F.player.timer); + }, + set = function () { + clear(); + + if (F.current && F.player.isActive) { + F.player.timer = setTimeout(F.next, F.current.playSpeed); + } + }, + stop = function () { + clear(); + + $('body').unbind('.player'); + + F.player.isActive = false; + + F.trigger('onPlayEnd'); + }, + start = function () { + if (F.current && (F.current.loop || F.current.index < F.group.length - 1)) { + F.player.isActive = true; + + $('body').bind({ + 'afterShow.player onUpdate.player' : set, + 'onCancel.player beforeClose.player' : stop, + 'beforeLoad.player' : clear + }); + + set(); + + F.trigger('onPlayStart'); + } + }; + + if (action === true || (!F.player.isActive && action !== false)) { + start(); + } else { + stop(); + } + }, + + // Navigate to next gallery item + next: function ( direction ) { + var current = F.current; + + if (current) { + if (!isString(direction)) { + direction = current.direction.next; + } + + F.jumpto(current.index + 1, direction, 'next'); + } + }, + + // Navigate to previous gallery item + prev: function ( direction ) { + var current = F.current; + + if (current) { + if (!isString(direction)) { + direction = current.direction.prev; + } + + F.jumpto(current.index - 1, direction, 'prev'); + } + }, + + // Navigate to gallery item by index + jumpto: function ( index, direction, router ) { + var current = F.current; + + if (!current) { + return; + } + + index = getScalar(index); + + F.direction = direction || current.direction[ (index >= current.index ? 'next' : 'prev') ]; + F.router = router || 'jumpto'; + + if (current.loop) { + if (index < 0) { + index = current.group.length + (index % current.group.length); + } + + index = index % current.group.length; + } + + if (current.group[ index ] !== undefined) { + F.cancel(); + + F._start(index); + } + }, + + // Center inside viewport and toggle position type to fixed or absolute if needed + reposition: function (e, onlyAbsolute) { + var current = F.current, + wrap = current ? current.wrap : null, + pos; + + if (wrap) { + pos = F._getPosition(onlyAbsolute); + + if (e && e.type === 'scroll') { + delete pos.position; + + wrap.stop(true, true).animate(pos, 200); + + } else { + wrap.css(pos); + + current.pos = $.extend({}, current.dim, pos); + } + } + }, + + update: function (e) { + var type = (e && e.type), + anyway = !type || type === 'orientationchange'; + + if (anyway) { + clearTimeout(didUpdate); + + didUpdate = null; + } + + if (!F.isOpen || didUpdate) { + return; + } + + didUpdate = setTimeout(function() { + var current = F.current; + + if (!current || F.isClosing) { + return; + } + + F.wrap.removeClass('fancybox-tmp'); + + if (anyway || type === 'load' || (type === 'resize' && current.autoResize)) { + F._setDimension(); + } + + if (!(type === 'scroll' && current.canShrink)) { + F.reposition(e); + } + + F.trigger('onUpdate'); + + didUpdate = null; + + }, (anyway && !isTouch ? 0 : 300)); + }, + + // Shrink content to fit inside viewport or restore if resized + toggle: function ( action ) { + if (F.isOpen) { + F.current.fitToView = $.type(action) === "boolean" ? action : !F.current.fitToView; + + // Help browser to restore document dimensions + if (isTouch) { + F.wrap.removeAttr('style').addClass('fancybox-tmp'); + + F.trigger('onUpdate'); + } + + F.update(); + } + }, + + hideLoading: function () { + D.unbind('.loading'); + + $('#fancybox-loading').remove(); + }, + + showLoading: function () { + var el, viewport; + + F.hideLoading(); + + el = $('
    ').click(F.cancel).appendTo('body'); + + // If user will press the escape-button, the request will be canceled + D.bind('keydown.loading', function(e) { + if ((e.which || e.keyCode) === 27) { + e.preventDefault(); + + F.cancel(); + } + }); + + if (!F.defaults.fixed) { + viewport = F.getViewport(); + + el.css({ + position : 'absolute', + top : (viewport.h * 0.5) + viewport.y, + left : (viewport.w * 0.5) + viewport.x + }); + } + }, + + getViewport: function () { + var locked = (F.current && F.current.locked) || false, + rez = { + x: W.scrollLeft(), + y: W.scrollTop() + }; + + if (locked) { + rez.w = locked[0].clientWidth; + rez.h = locked[0].clientHeight; + + } else { + // See http://bugs.jquery.com/ticket/6724 + rez.w = isTouch && window.innerWidth ? window.innerWidth : W.width(); + rez.h = isTouch && window.innerHeight ? window.innerHeight : W.height(); + } + + return rez; + }, + + // Unbind the keyboard / clicking actions + unbindEvents: function () { + if (F.wrap && isQuery(F.wrap)) { + F.wrap.unbind('.fb'); + } + + D.unbind('.fb'); + W.unbind('.fb'); + }, + + bindEvents: function () { + var current = F.current, + keys; + + if (!current) { + return; + } + + // Changing document height on iOS devices triggers a 'resize' event, + // that can change document height... repeating infinitely + W.bind('orientationchange.fb' + (isTouch ? '' : ' resize.fb') + (current.autoCenter && !current.locked ? ' scroll.fb' : ''), F.update); + + keys = current.keys; + + if (keys) { + D.bind('keydown.fb', function (e) { + var code = e.which || e.keyCode, + target = e.target || e.srcElement; + + // Skip esc key if loading, because showLoading will cancel preloading + if (code === 27 && F.coming) { + return false; + } + + // Ignore key combinations and key events within form elements + if (!e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey && !(target && (target.type || $(target).is('[contenteditable]')))) { + $.each(keys, function(i, val) { + if (current.group.length > 1 && val[ code ] !== undefined) { + F[ i ]( val[ code ] ); + + e.preventDefault(); + return false; + } + + if ($.inArray(code, val) > -1) { + F[ i ] (); + + e.preventDefault(); + return false; + } + }); + } + }); + } + + if ($.fn.mousewheel && current.mouseWheel) { + F.wrap.bind('mousewheel.fb', function (e, delta, deltaX, deltaY) { + var target = e.target || null, + parent = $(target), + canScroll = false; + + while (parent.length) { + if (canScroll || parent.is('.fancybox-skin') || parent.is('.fancybox-wrap')) { + break; + } + + canScroll = isScrollable( parent[0] ); + parent = $(parent).parent(); + } + + if (delta !== 0 && !canScroll) { + if (F.group.length > 1 && !current.canShrink) { + if (deltaY > 0 || deltaX > 0) { + F.prev( deltaY > 0 ? 'down' : 'left' ); + + } else if (deltaY < 0 || deltaX < 0) { + F.next( deltaY < 0 ? 'up' : 'right' ); + } + + e.preventDefault(); + } + } + }); + } + }, + + trigger: function (event, o) { + var ret, obj = o || F.coming || F.current; + + if (!obj) { + return; + } + + if ($.isFunction( obj[event] )) { + ret = obj[event].apply(obj, Array.prototype.slice.call(arguments, 1)); + } + + if (ret === false) { + return false; + } + + if (obj.helpers) { + $.each(obj.helpers, function (helper, opts) { + if (opts && F.helpers[helper] && $.isFunction(F.helpers[helper][event])) { + opts = $.extend(true, {}, F.helpers[helper].defaults, opts); + + F.helpers[helper][event](opts, obj); + } + }); + } + + $.event.trigger(event + '.fb'); + }, + + isImage: function (str) { + return isString(str) && str.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp)((\?|#).*)?$)/i); + }, + + isSWF: function (str) { + return isString(str) && str.match(/\.(swf)((\?|#).*)?$/i); + }, + + _start: function (index) { + var coming = {}, + obj, + href, + type, + margin, + padding; + + index = getScalar( index ); + obj = F.group[ index ] || null; + + if (!obj) { + return false; + } + + coming = $.extend(true, {}, F.opts, obj); + + // Convert margin and padding properties to array - top, right, bottom, left + margin = coming.margin; + padding = coming.padding; + + if ($.type(margin) === 'number') { + coming.margin = [margin, margin, margin, margin]; + } + + if ($.type(padding) === 'number') { + coming.padding = [padding, padding, padding, padding]; + } + + // 'modal' propery is just a shortcut + if (coming.modal) { + $.extend(true, coming, { + closeBtn : false, + closeClick : false, + nextClick : false, + arrows : false, + mouseWheel : false, + keys : null, + helpers: { + overlay : { + closeClick : false + } + } + }); + } + + // 'autoSize' property is a shortcut, too + if (coming.autoSize) { + coming.autoWidth = coming.autoHeight = true; + } + + if (coming.width === 'auto') { + coming.autoWidth = true; + } + + if (coming.height === 'auto') { + coming.autoHeight = true; + } + + /* + * Add reference to the group, so it`s possible to access from callbacks, example: + * afterLoad : function() { + * this.title = 'Image ' + (this.index + 1) + ' of ' + this.group.length + (this.title ? ' - ' + this.title : ''); + * } + */ + + coming.group = F.group; + coming.index = index; + + // Give a chance for callback or helpers to update coming item (type, title, etc) + F.coming = coming; + + if (false === F.trigger('beforeLoad')) { + F.coming = null; + + return; + } + + type = coming.type; + href = coming.href; + + if (!type) { + F.coming = null; + + //If we can not determine content type then drop silently or display next/prev item if looping through gallery + if (F.current && F.router && F.router !== 'jumpto') { + F.current.index = index; + + return F[ F.router ]( F.direction ); + } + + return false; + } + + F.isActive = true; + + if (type === 'image' || type === 'swf') { + coming.autoHeight = coming.autoWidth = false; + coming.scrolling = 'visible'; + } + + if (type === 'image') { + coming.aspectRatio = true; + } + + if (type === 'iframe' && isTouch) { + coming.scrolling = 'scroll'; + } + + // Build the neccessary markup + coming.wrap = $(coming.tpl.wrap).addClass('fancybox-' + (isTouch ? 'mobile' : 'desktop') + ' fancybox-type-' + type + ' fancybox-tmp ' + coming.wrapCSS).appendTo( coming.parent || 'body' ); + + $.extend(coming, { + skin : $('.fancybox-skin', coming.wrap), + outer : $('.fancybox-outer', coming.wrap), + inner : $('.fancybox-inner', coming.wrap) + }); + + $.each(["Top", "Right", "Bottom", "Left"], function(i, v) { + coming.skin.css('padding' + v, getValue(coming.padding[ i ])); + }); + + F.trigger('onReady'); + + // Check before try to load; 'inline' and 'html' types need content, others - href + if (type === 'inline' || type === 'html') { + if (!coming.content || !coming.content.length) { + return F._error( 'content' ); + } + + } else if (!href) { + return F._error( 'href' ); + } + + if (type === 'image') { + F._loadImage(); + + } else if (type === 'ajax') { + F._loadAjax(); + + } else if (type === 'iframe') { + F._loadIframe(); + + } else { + F._afterLoad(); + } + }, + + _error: function ( type ) { + $.extend(F.coming, { + type : 'html', + autoWidth : true, + autoHeight : true, + minWidth : 0, + minHeight : 0, + scrolling : 'no', + hasError : type, + content : F.coming.tpl.error + }); + + F._afterLoad(); + }, + + _loadImage: function () { + // Reset preload image so it is later possible to check "complete" property + var img = F.imgPreload = new Image(); + + img.onload = function () { + this.onload = this.onerror = null; + + F.coming.width = this.width; + F.coming.height = this.height; + + F._afterLoad(); + }; + + img.onerror = function () { + this.onload = this.onerror = null; + + F._error( 'image' ); + }; + + img.src = F.coming.href; + + if (img.complete !== true) { + F.showLoading(); + } + }, + + _loadAjax: function () { + var coming = F.coming; + + F.showLoading(); + + F.ajaxLoad = $.ajax($.extend({}, coming.ajax, { + url: coming.href, + error: function (jqXHR, textStatus) { + if (F.coming && textStatus !== 'abort') { + F._error( 'ajax', jqXHR ); + + } else { + F.hideLoading(); + } + }, + success: function (data, textStatus) { + if (textStatus === 'success') { + coming.content = data; + + F._afterLoad(); + } + } + })); + }, + + _loadIframe: function() { + var coming = F.coming, + iframe = $(coming.tpl.iframe.replace(/\{rnd\}/g, new Date().getTime())) + .attr('scrolling', isTouch ? 'auto' : coming.iframe.scrolling) + .attr('src', coming.href); + + // This helps IE + $(coming.wrap).bind('onReset', function () { + try { + $(this).find('iframe').hide().attr('src', '//about:blank').end().empty(); + } catch (e) {} + }); + + if (coming.iframe.preload) { + F.showLoading(); + + iframe.one('load', function() { + $(this).data('ready', 1); + + // iOS will lose scrolling if we resize + if (!isTouch) { + $(this).bind('load.fb', F.update); + } + + // Without this trick: + // - iframe won't scroll on iOS devices + // - IE7 sometimes displays empty iframe + $(this).parents('.fancybox-wrap').width('100%').removeClass('fancybox-tmp').show(); + + F._afterLoad(); + }); + } + + coming.content = iframe.appendTo( coming.inner ); + + if (!coming.iframe.preload) { + F._afterLoad(); + } + }, + + _preloadImages: function() { + var group = F.group, + current = F.current, + len = group.length, + cnt = current.preload ? Math.min(current.preload, len - 1) : 0, + item, + i; + + for (i = 1; i <= cnt; i += 1) { + item = group[ (current.index + i ) % len ]; + + if (item.type === 'image' && item.href) { + new Image().src = item.href; + } + } + }, + + _afterLoad: function () { + var coming = F.coming, + previous = F.current, + placeholder = 'fancybox-placeholder', + current, + content, + type, + scrolling, + href, + embed; + + F.hideLoading(); + + if (!coming || F.isActive === false) { + return; + } + + if (false === F.trigger('afterLoad', coming, previous)) { + coming.wrap.stop(true).trigger('onReset').remove(); + + F.coming = null; + + return; + } + + if (previous) { + F.trigger('beforeChange', previous); + + previous.wrap.stop(true).removeClass('fancybox-opened') + .find('.fancybox-item, .fancybox-nav') + .remove(); + } + + F.unbindEvents(); + + current = coming; + content = coming.content; + type = coming.type; + scrolling = coming.scrolling; + + $.extend(F, { + wrap : current.wrap, + skin : current.skin, + outer : current.outer, + inner : current.inner, + current : current, + previous : previous + }); + + href = current.href; + + switch (type) { + case 'inline': + case 'ajax': + case 'html': + if (current.selector) { + content = $('
    ').html(content).find(current.selector); + + } else if (isQuery(content)) { + if (!content.data(placeholder)) { + content.data(placeholder, $('
    ').insertAfter( content ).hide() ); + } + + content = content.show().detach(); + + current.wrap.bind('onReset', function () { + if ($(this).find(content).length) { + content.hide().replaceAll( content.data(placeholder) ).data(placeholder, false); + } + }); + } + break; + + case 'image': + content = current.tpl.image.replace('{href}', href); + break; + + case 'swf': + content = ''; + embed = ''; + + $.each(current.swf, function(name, val) { + content += ''; + embed += ' ' + name + '="' + val + '"'; + }); + + content += ''; + break; + } + + if (!(isQuery(content) && content.parent().is(current.inner))) { + current.inner.append( content ); + } + + // Give a chance for helpers or callbacks to update elements + F.trigger('beforeShow'); + + // Set scrolling before calculating dimensions + current.inner.css('overflow', scrolling === 'yes' ? 'scroll' : (scrolling === 'no' ? 'hidden' : scrolling)); + + // Set initial dimensions and start position + F._setDimension(); + + F.reposition(); + + F.isOpen = false; + F.coming = null; + + F.bindEvents(); + + if (!F.isOpened) { + $('.fancybox-wrap').not( current.wrap ).stop(true).trigger('onReset').remove(); + + } else if (previous.prevMethod) { + F.transitions[ previous.prevMethod ](); + } + + F.transitions[ F.isOpened ? current.nextMethod : current.openMethod ](); + + F._preloadImages(); + }, + + _setDimension: function () { + var viewport = F.getViewport(), + steps = 0, + canShrink = false, + canExpand = false, + wrap = F.wrap, + skin = F.skin, + inner = F.inner, + current = F.current, + width = current.width, + height = current.height, + minWidth = current.minWidth, + minHeight = current.minHeight, + maxWidth = current.maxWidth, + maxHeight = current.maxHeight, + scrolling = current.scrolling, + scrollOut = current.scrollOutside ? current.scrollbarWidth : 0, + margin = current.margin, + wMargin = getScalar(margin[1] + margin[3]), + hMargin = getScalar(margin[0] + margin[2]), + wPadding, + hPadding, + wSpace, + hSpace, + origWidth, + origHeight, + origMaxWidth, + origMaxHeight, + ratio, + width_, + height_, + maxWidth_, + maxHeight_, + iframe, + body; + + // Reset dimensions so we could re-check actual size + wrap.add(skin).add(inner).width('auto').height('auto').removeClass('fancybox-tmp'); + + wPadding = getScalar(skin.outerWidth(true) - skin.width()); + hPadding = getScalar(skin.outerHeight(true) - skin.height()); + + // Any space between content and viewport (margin, padding, border, title) + wSpace = wMargin + wPadding; + hSpace = hMargin + hPadding; + + origWidth = isPercentage(width) ? (viewport.w - wSpace) * getScalar(width) / 100 : width; + origHeight = isPercentage(height) ? (viewport.h - hSpace) * getScalar(height) / 100 : height; + + if (current.type === 'iframe') { + iframe = current.content; + + if (current.autoHeight && iframe.data('ready') === 1) { + try { + if (iframe[0].contentWindow.document.location) { + inner.width( origWidth ).height(9999); + + body = iframe.contents().find('body'); + + if (scrollOut) { + body.css('overflow-x', 'hidden'); + } + + origHeight = body.height(); + } + + } catch (e) {} + } + + } else if (current.autoWidth || current.autoHeight) { + inner.addClass( 'fancybox-tmp' ); + + // Set width or height in case we need to calculate only one dimension + if (!current.autoWidth) { + inner.width( origWidth ); + } + + if (!current.autoHeight) { + inner.height( origHeight ); + } + + if (current.autoWidth) { + origWidth = inner.width(); + } + + if (current.autoHeight) { + origHeight = inner.height(); + } + + inner.removeClass( 'fancybox-tmp' ); + } + + width = getScalar( origWidth ); + height = getScalar( origHeight ); + + ratio = origWidth / origHeight; + + // Calculations for the content + minWidth = getScalar(isPercentage(minWidth) ? getScalar(minWidth, 'w') - wSpace : minWidth); + maxWidth = getScalar(isPercentage(maxWidth) ? getScalar(maxWidth, 'w') - wSpace : maxWidth); + + minHeight = getScalar(isPercentage(minHeight) ? getScalar(minHeight, 'h') - hSpace : minHeight); + maxHeight = getScalar(isPercentage(maxHeight) ? getScalar(maxHeight, 'h') - hSpace : maxHeight); + + // These will be used to determine if wrap can fit in the viewport + origMaxWidth = maxWidth; + origMaxHeight = maxHeight; + + if (current.fitToView) { + maxWidth = Math.min(viewport.w - wSpace, maxWidth); + maxHeight = Math.min(viewport.h - hSpace, maxHeight); + } + + maxWidth_ = viewport.w - wMargin; + maxHeight_ = viewport.h - hMargin; + + if (current.aspectRatio) { + if (width > maxWidth) { + width = maxWidth; + height = getScalar(width / ratio); + } + + if (height > maxHeight) { + height = maxHeight; + width = getScalar(height * ratio); + } + + if (width < minWidth) { + width = minWidth; + height = getScalar(width / ratio); + } + + if (height < minHeight) { + height = minHeight; + width = getScalar(height * ratio); + } + + } else { + width = Math.max(minWidth, Math.min(width, maxWidth)); + + if (current.autoHeight && current.type !== 'iframe') { + inner.width( width ); + + height = inner.height(); + } + + height = Math.max(minHeight, Math.min(height, maxHeight)); + } + + // Try to fit inside viewport (including the title) + if (current.fitToView) { + inner.width( width ).height( height ); + + wrap.width( width + wPadding ); + + // Real wrap dimensions + width_ = wrap.width(); + height_ = wrap.height(); + + if (current.aspectRatio) { + while ((width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight) { + if (steps++ > 19) { + break; + } + + height = Math.max(minHeight, Math.min(maxHeight, height - 10)); + width = getScalar(height * ratio); + + if (width < minWidth) { + width = minWidth; + height = getScalar(width / ratio); + } + + if (width > maxWidth) { + width = maxWidth; + height = getScalar(width / ratio); + } + + inner.width( width ).height( height ); + + wrap.width( width + wPadding ); + + width_ = wrap.width(); + height_ = wrap.height(); + } + + } else { + width = Math.max(minWidth, Math.min(width, width - (width_ - maxWidth_))); + height = Math.max(minHeight, Math.min(height, height - (height_ - maxHeight_))); + } + } + + if (scrollOut && scrolling === 'auto' && height < origHeight && (width + wPadding + scrollOut) < maxWidth_) { + width += scrollOut; + } + + inner.width( width ).height( height ); + + wrap.width( width + wPadding ); + + width_ = wrap.width(); + height_ = wrap.height(); + + canShrink = (width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight; + canExpand = current.aspectRatio ? (width < origMaxWidth && height < origMaxHeight && width < origWidth && height < origHeight) : ((width < origMaxWidth || height < origMaxHeight) && (width < origWidth || height < origHeight)); + + $.extend(current, { + dim : { + width : getValue( width_ ), + height : getValue( height_ ) + }, + origWidth : origWidth, + origHeight : origHeight, + canShrink : canShrink, + canExpand : canExpand, + wPadding : wPadding, + hPadding : hPadding, + wrapSpace : height_ - skin.outerHeight(true), + skinSpace : skin.height() - height + }); + + if (!iframe && current.autoHeight && height > minHeight && height < maxHeight && !canExpand) { + inner.height('auto'); + } + }, + + _getPosition: function (onlyAbsolute) { + var current = F.current, + viewport = F.getViewport(), + margin = current.margin, + width = F.wrap.width() + margin[1] + margin[3], + height = F.wrap.height() + margin[0] + margin[2], + rez = { + position: 'absolute', + top : margin[0], + left : margin[3] + }; + + if (current.autoCenter && current.fixed && !onlyAbsolute && height <= viewport.h && width <= viewport.w) { + rez.position = 'fixed'; + + } else if (!current.locked) { + rez.top += viewport.y; + rez.left += viewport.x; + } + + rez.top = getValue(Math.max(rez.top, rez.top + ((viewport.h - height) * current.topRatio))); + rez.left = getValue(Math.max(rez.left, rez.left + ((viewport.w - width) * current.leftRatio))); + + return rez; + }, + + _afterZoomIn: function () { + var current = F.current; + + if (!current) { + return; + } + + F.isOpen = F.isOpened = true; + + F.wrap.css('overflow', 'visible').addClass('fancybox-opened'); + + F.update(); + + // Assign a click event + if ( current.closeClick || (current.nextClick && F.group.length > 1) ) { + F.inner.css('cursor', 'pointer').bind('click.fb', function(e) { + if (!$(e.target).is('a') && !$(e.target).parent().is('a')) { + e.preventDefault(); + + F[ current.closeClick ? 'close' : 'next' ](); + } + }); + } + + // Create a close button + if (current.closeBtn) { + $(current.tpl.closeBtn).appendTo(F.skin).bind('click.fb', function(e) { + e.preventDefault(); + + F.close(); + }); + } + + // Create navigation arrows + if (current.arrows && F.group.length > 1) { + if (current.loop || current.index > 0) { + $(current.tpl.prev).appendTo(F.outer).bind('click.fb', F.prev); + } + + if (current.loop || current.index < F.group.length - 1) { + $(current.tpl.next).appendTo(F.outer).bind('click.fb', F.next); + } + } + + F.trigger('afterShow'); + + // Stop the slideshow if this is the last item + if (!current.loop && current.index === current.group.length - 1) { + F.play( false ); + + } else if (F.opts.autoPlay && !F.player.isActive) { + F.opts.autoPlay = false; + + F.play(); + } + }, + + _afterZoomOut: function ( obj ) { + obj = obj || F.current; + + $('.fancybox-wrap').trigger('onReset').remove(); + + $.extend(F, { + group : {}, + opts : {}, + router : false, + current : null, + isActive : false, + isOpened : false, + isOpen : false, + isClosing : false, + wrap : null, + skin : null, + outer : null, + inner : null + }); + + F.trigger('afterClose', obj); + } + }); + + /* + * Default transitions + */ + + F.transitions = { + getOrigPosition: function () { + var current = F.current, + element = current.element, + orig = current.orig, + pos = {}, + width = 50, + height = 50, + hPadding = current.hPadding, + wPadding = current.wPadding, + viewport = F.getViewport(); + + if (!orig && current.isDom && element.is(':visible')) { + orig = element.find('img:first'); + + if (!orig.length) { + orig = element; + } + } + + if (isQuery(orig)) { + pos = orig.offset(); + + if (orig.is('img')) { + width = orig.outerWidth(); + height = orig.outerHeight(); + } + + } else { + pos.top = viewport.y + (viewport.h - height) * current.topRatio; + pos.left = viewport.x + (viewport.w - width) * current.leftRatio; + } + + if (F.wrap.css('position') === 'fixed' || current.locked) { + pos.top -= viewport.y; + pos.left -= viewport.x; + } + + pos = { + top : getValue(pos.top - hPadding * current.topRatio), + left : getValue(pos.left - wPadding * current.leftRatio), + width : getValue(width + wPadding), + height : getValue(height + hPadding) + }; + + return pos; + }, + + step: function (now, fx) { + var ratio, + padding, + value, + prop = fx.prop, + current = F.current, + wrapSpace = current.wrapSpace, + skinSpace = current.skinSpace; + + if (prop === 'width' || prop === 'height') { + ratio = fx.end === fx.start ? 1 : (now - fx.start) / (fx.end - fx.start); + + if (F.isClosing) { + ratio = 1 - ratio; + } + + padding = prop === 'width' ? current.wPadding : current.hPadding; + value = now - padding; + + F.skin[ prop ]( getScalar( prop === 'width' ? value : value - (wrapSpace * ratio) ) ); + F.inner[ prop ]( getScalar( prop === 'width' ? value : value - (wrapSpace * ratio) - (skinSpace * ratio) ) ); + } + }, + + zoomIn: function () { + var current = F.current, + startPos = current.pos, + effect = current.openEffect, + elastic = effect === 'elastic', + endPos = $.extend({opacity : 1}, startPos); + + // Remove "position" property that breaks older IE + delete endPos.position; + + if (elastic) { + startPos = this.getOrigPosition(); + + if (current.openOpacity) { + startPos.opacity = 0.1; + } + + } else if (effect === 'fade') { + startPos.opacity = 0.1; + } + + F.wrap.css(startPos).animate(endPos, { + duration : effect === 'none' ? 0 : current.openSpeed, + easing : current.openEasing, + step : elastic ? this.step : null, + complete : F._afterZoomIn + }); + }, + + zoomOut: function () { + var current = F.current, + effect = current.closeEffect, + elastic = effect === 'elastic', + endPos = {opacity : 0.1}; + + if (elastic) { + endPos = this.getOrigPosition(); + + if (current.closeOpacity) { + endPos.opacity = 0.1; + } + } + + F.wrap.animate(endPos, { + duration : effect === 'none' ? 0 : current.closeSpeed, + easing : current.closeEasing, + step : elastic ? this.step : null, + complete : F._afterZoomOut + }); + }, + + changeIn: function () { + var current = F.current, + effect = current.nextEffect, + startPos = current.pos, + endPos = { opacity : 1 }, + direction = F.direction, + distance = 200, + field; + + startPos.opacity = 0.1; + + if (effect === 'elastic') { + field = direction === 'down' || direction === 'up' ? 'top' : 'left'; + + if (direction === 'down' || direction === 'right') { + startPos[ field ] = getValue(getScalar(startPos[ field ]) - distance); + endPos[ field ] = '+=' + distance + 'px'; + + } else { + startPos[ field ] = getValue(getScalar(startPos[ field ]) + distance); + endPos[ field ] = '-=' + distance + 'px'; + } + } + + // Workaround for http://bugs.jquery.com/ticket/12273 + if (effect === 'none') { + F._afterZoomIn(); + + } else { + F.wrap.css(startPos).animate(endPos, { + duration : current.nextSpeed, + easing : current.nextEasing, + complete : F._afterZoomIn + }); + } + }, + + changeOut: function () { + var previous = F.previous, + effect = previous.prevEffect, + endPos = { opacity : 0.1 }, + direction = F.direction, + distance = 200; + + if (effect === 'elastic') { + endPos[ direction === 'down' || direction === 'up' ? 'top' : 'left' ] = ( direction === 'up' || direction === 'left' ? '-' : '+' ) + '=' + distance + 'px'; + } + + previous.wrap.animate(endPos, { + duration : effect === 'none' ? 0 : previous.prevSpeed, + easing : previous.prevEasing, + complete : function () { + $(this).trigger('onReset').remove(); + } + }); + } + }; + + /* + * Overlay helper + */ + + F.helpers.overlay = { + defaults : { + closeClick : true, // if true, fancyBox will be closed when user clicks on the overlay + speedOut : 200, // duration of fadeOut animation + showEarly : true, // indicates if should be opened immediately or wait until the content is ready + css : {}, // custom CSS properties + locked : !isTouch, // if true, the content will be locked into overlay + fixed : true // if false, the overlay CSS position property will not be set to "fixed" + }, + + overlay : null, // current handle + fixed : false, // indicates if the overlay has position "fixed" + + // Public methods + create : function(opts) { + opts = $.extend({}, this.defaults, opts); + + if (this.overlay) { + this.close(); + } + + this.overlay = $('
    ').appendTo( 'body' ); + this.fixed = false; + + if (opts.fixed && F.defaults.fixed) { + this.overlay.addClass('fancybox-overlay-fixed'); + + this.fixed = true; + } + }, + + open : function(opts) { + var that = this; + + opts = $.extend({}, this.defaults, opts); + + if (this.overlay) { + this.overlay.unbind('.overlay').width('auto').height('auto'); + + } else { + this.create(opts); + } + + if (!this.fixed) { + W.bind('resize.overlay', $.proxy( this.update, this) ); + + this.update(); + } + + if (opts.closeClick) { + this.overlay.bind('click.overlay', function(e) { + if ($(e.target).hasClass('fancybox-overlay')) { + if (F.isActive) { + F.close(); + } else { + that.close(); + } + } + }); + } + + this.overlay.css( opts.css ).show(); + }, + + close : function() { + $('.fancybox-overlay').remove(); + + W.unbind('resize.overlay'); + + this.overlay = null; + + if (this.margin !== false) { + $('body').css('margin-right', this.margin); + + this.margin = false; + } + + if (this.el) { + this.el.removeClass('fancybox-lock'); + } + }, + + // Private, callbacks + + update : function () { + var width = '100%', offsetWidth; + + // Reset width/height so it will not mess + this.overlay.width(width).height('100%'); + + // jQuery does not return reliable result for IE + if (IE) { + offsetWidth = Math.max(document.documentElement.offsetWidth, document.body.offsetWidth); + + if (D.width() > offsetWidth) { + width = D.width(); + } + + } else if (D.width() > W.width()) { + width = D.width(); + } + + this.overlay.width(width).height(D.height()); + }, + + // This is where we can manipulate DOM, because later it would cause iframes to reload + onReady : function (opts, obj) { + $('.fancybox-overlay').stop(true, true); + + if (!this.overlay) { + this.margin = D.height() > W.height() || $('body').css('overflow-y') === 'scroll' ? $('body').css('margin-right') : false; + this.el = document.all && !document.querySelector ? $('html') : $('body'); + + this.create(opts); + } + + if (opts.locked && this.fixed) { + obj.locked = this.overlay.append( obj.wrap ); + obj.fixed = false; + } + + if (opts.showEarly === true) { + this.beforeShow.apply(this, arguments); + } + }, + + beforeShow : function(opts, obj) { + if (obj.locked) { + this.el.addClass('fancybox-lock'); + + if (this.margin !== false) { + $('body').css('margin-right', getScalar( this.margin ) + obj.scrollbarWidth); + } + } + + this.open(opts); + }, + + onUpdate : function() { + if (!this.fixed) { + this.update(); + } + }, + + afterClose: function (opts) { + // Remove overlay if exists and fancyBox is not opening + // (e.g., it is not being open using afterClose callback) + if (this.overlay && !F.isActive) { + this.overlay.fadeOut(opts.speedOut, $.proxy( this.close, this )); + } + } + }; + + /* + * Title helper + */ + + F.helpers.title = { + defaults : { + type : 'float', // 'float', 'inside', 'outside' or 'over', + position : 'bottom' // 'top' or 'bottom' + }, + + beforeShow: function (opts) { + var current = F.current, + text = current.title, + type = opts.type, + title, + target; + + if ($.isFunction(text)) { + text = text.call(current.element, current); + } + + if (!isString(text) || $.trim(text) === '') { + return; + } + + title = $('
    ' + text + '
    '); + + switch (type) { + case 'inside': + target = F.skin; + break; + + case 'outside': + target = F.wrap; + break; + + case 'over': + target = F.inner; + break; + + default: // 'float' + target = F.skin; + + title.appendTo('body'); + + if (IE) { + title.width( title.width() ); + } + + title.wrapInner(''); + + //Increase bottom margin so this title will also fit into viewport + F.current.margin[2] += Math.abs( getScalar(title.css('margin-bottom')) ); + break; + } + + title[ (opts.position === 'top' ? 'prependTo' : 'appendTo') ](target); + } + }; + + // jQuery plugin initialization + $.fn.fancybox = function (options) { + var index, + that = $(this), + selector = this.selector || '', + run = function(e) { + var what = $(this).blur(), idx = index, relType, relVal; + + if (!(e.ctrlKey || e.altKey || e.shiftKey || e.metaKey) && !what.is('.fancybox-wrap')) { + relType = options.groupAttr || 'data-fancybox-group'; + relVal = what.attr(relType); + + if (!relVal) { + relType = 'rel'; + relVal = what.get(0)[ relType ]; + } + + if (relVal && relVal !== '' && relVal !== 'nofollow') { + what = selector.length ? $(selector) : that; + what = what.filter('[' + relType + '="' + relVal + '"]'); + idx = what.index(this); + } + + options.index = idx; + + // Stop an event from bubbling if everything is fine + if (F.open(what, options) !== false) { + e.preventDefault(); + } + } + }; + + options = options || {}; + index = options.index || 0; + + if (!selector || options.live === false) { + that.unbind('click.fb-start').bind('click.fb-start', run); + + } else { + D.undelegate(selector, 'click.fb-start').delegate(selector + ":not('.fancybox-item, .fancybox-nav')", 'click.fb-start', run); + } + + this.filter('[data-fancybox-start=1]').trigger('click'); + + return this; + }; + + // Tests that need a body at doc ready + D.ready(function() { + if ( $.scrollbarWidth === undefined ) { + // http://benalman.com/projects/jquery-misc-plugins/#scrollbarwidth + $.scrollbarWidth = function() { + var parent = $('
    ').appendTo('body'), + child = parent.children(), + width = child.innerWidth() - child.height( 99 ).innerWidth(); + + parent.remove(); + + return width; + }; + } + + if ( $.support.fixedPosition === undefined ) { + $.support.fixedPosition = (function() { + var elem = $('
    ').appendTo('body'), + fixed = ( elem[0].offsetTop === 20 || elem[0].offsetTop === 15 ); + + elem.remove(); + + return fixed; + }()); + } + + $.extend(F.defaults, { + scrollbarWidth : $.scrollbarWidth(), + fixed : $.support.fixedPosition, + parent : $('body') + }); + }); + +}(window, document, jQuery)); \ No newline at end of file diff --git a/BlueTube.Web/assets/js/jquery.min.js b/BlueTube.Web/assets/js/jquery.min.js new file mode 100644 index 0000000000000000000000000000000000000000..006e953102ded2db8e217e4507de3baa8bcc976d --- /dev/null +++ b/BlueTube.Web/assets/js/jquery.min.js @@ -0,0 +1,5 @@ +/*! jQuery v1.9.1 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license +//@ sourceMappingURL=jquery.min.map +*/(function(e,t){var n,r,i=typeof t,o=e.document,a=e.location,s=e.jQuery,u=e.$,l={},c=[],p="1.9.1",f=c.concat,d=c.push,h=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,b=function(e,t){return new b.fn.init(e,t,r)},x=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^[\],:{}\s]*$/,E=/(?:^|:|,)(?:\s*\[)+/g,S=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,A=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,j=/^-ms-/,D=/-([\da-z])/gi,L=function(e,t){return t.toUpperCase()},H=function(e){(o.addEventListener||"load"===e.type||"complete"===o.readyState)&&(q(),b.ready())},q=function(){o.addEventListener?(o.removeEventListener("DOMContentLoaded",H,!1),e.removeEventListener("load",H,!1)):(o.detachEvent("onreadystatechange",H),e.detachEvent("onload",H))};b.fn=b.prototype={jquery:p,constructor:b,init:function(e,n,r){var i,a;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof b?n[0]:n,b.merge(this,b.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:o,!0)),C.test(i[1])&&b.isPlainObject(n))for(i in n)b.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(a=o.getElementById(i[2]),a&&a.parentNode){if(a.id!==i[2])return r.find(e);this.length=1,this[0]=a}return this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):b.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),b.makeArray(e,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return h.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=b.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return b.each(this,e,t)},ready:function(e){return b.ready.promise().done(e),this},slice:function(){return this.pushStack(h.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(b.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:d,sort:[].sort,splice:[].splice},b.fn.init.prototype=b.fn,b.extend=b.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},u=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},u=2),"object"==typeof s||b.isFunction(s)||(s={}),l===u&&(s=this,--u);l>u;u++)if(null!=(o=arguments[u]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(b.isPlainObject(r)||(n=b.isArray(r)))?(n?(n=!1,a=e&&b.isArray(e)?e:[]):a=e&&b.isPlainObject(e)?e:{},s[i]=b.extend(c,a,r)):r!==t&&(s[i]=r));return s},b.extend({noConflict:function(t){return e.$===b&&(e.$=u),t&&e.jQuery===b&&(e.jQuery=s),b},isReady:!1,readyWait:1,holdReady:function(e){e?b.readyWait++:b.ready(!0)},ready:function(e){if(e===!0?!--b.readyWait:!b.isReady){if(!o.body)return setTimeout(b.ready);b.isReady=!0,e!==!0&&--b.readyWait>0||(n.resolveWith(o,[b]),b.fn.trigger&&b(o).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===b.type(e)},isArray:Array.isArray||function(e){return"array"===b.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if(!e||"object"!==b.type(e)||e.nodeType||b.isWindow(e))return!1;try{if(e.constructor&&!y.call(e,"constructor")&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||y.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=b.buildFragment([e],t,i),i&&b(i).remove(),b.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=b.trim(n),n&&k.test(n.replace(S,"@").replace(A,"]").replace(E,"")))?Function("return "+n)():(b.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||b.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&b.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(j,"ms-").replace(D,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:v&&!v.call("\ufeff\u00a0")?function(e){return null==e?"":v.call(e)}:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?b.merge(n,"string"==typeof e?[e]:e):d.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(g)return g.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return f.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),b.isFunction(e)?(r=h.call(arguments,2),i=function(){return e.apply(n||this,r.concat(h.call(arguments)))},i.guid=e.guid=e.guid||b.guid++,i):t},access:function(e,n,r,i,o,a,s){var u=0,l=e.length,c=null==r;if("object"===b.type(r)){o=!0;for(u in r)b.access(e,n,u,r[u],!0,a,s)}else if(i!==t&&(o=!0,b.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(b(e),n)})),n))for(;l>u;u++)n(e[u],r,s?i:i.call(e[u],u,n(e[u],r)));return o?e:c?n.call(e):l?n(e[0],r):a},now:function(){return(new Date).getTime()}}),b.ready.promise=function(t){if(!n)if(n=b.Deferred(),"complete"===o.readyState)setTimeout(b.ready);else if(o.addEventListener)o.addEventListener("DOMContentLoaded",H,!1),e.addEventListener("load",H,!1);else{o.attachEvent("onreadystatechange",H),e.attachEvent("onload",H);var r=!1;try{r=null==e.frameElement&&o.documentElement}catch(i){}r&&r.doScroll&&function a(){if(!b.isReady){try{r.doScroll("left")}catch(e){return setTimeout(a,50)}q(),b.ready()}}()}return n.promise(t)},b.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=b.type(e);return b.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=b(o);var _={};function F(e){var t=_[e]={};return b.each(e.match(w)||[],function(e,n){t[n]=!0}),t}b.Callbacks=function(e){e="string"==typeof e?_[e]||F(e):b.extend({},e);var n,r,i,o,a,s,u=[],l=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=u.length,n=!0;u&&o>a;a++)if(u[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,u&&(l?l.length&&c(l.shift()):r?u=[]:p.disable())},p={add:function(){if(u){var t=u.length;(function i(t){b.each(t,function(t,n){var r=b.type(n);"function"===r?e.unique&&p.has(n)||u.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=u.length:r&&(s=t,c(r))}return this},remove:function(){return u&&b.each(arguments,function(e,t){var r;while((r=b.inArray(t,u,r))>-1)u.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?b.inArray(e,u)>-1:!(!u||!u.length)},empty:function(){return u=[],this},disable:function(){return u=l=r=t,this},disabled:function(){return!u},lock:function(){return l=t,r||p.disable(),this},locked:function(){return!l},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!u||i&&!l||(n?l.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},b.extend({Deferred:function(e){var t=[["resolve","done",b.Callbacks("once memory"),"resolved"],["reject","fail",b.Callbacks("once memory"),"rejected"],["notify","progress",b.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return b.Deferred(function(n){b.each(t,function(t,o){var a=o[0],s=b.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&b.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?b.extend(e,r):r}},i={};return r.pipe=r.then,b.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=h.call(arguments),r=n.length,i=1!==r||e&&b.isFunction(e.promise)?r:0,o=1===i?e:b.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?h.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,u,l;if(r>1)for(s=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&b.isFunction(n[t].promise)?n[t].promise().done(a(t,l,n)).fail(o.reject).progress(a(t,u,s)):--i;return i||o.resolveWith(l,n),o.promise()}}),b.support=function(){var t,n,r,a,s,u,l,c,p,f,d=o.createElement("div");if(d.setAttribute("className","t"),d.innerHTML="
    a",n=d.getElementsByTagName("*"),r=d.getElementsByTagName("a")[0],!n||!r||!n.length)return{};s=o.createElement("select"),l=s.appendChild(o.createElement("option")),a=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={getSetAttribute:"t"!==d.className,leadingWhitespace:3===d.firstChild.nodeType,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:"/a"===r.getAttribute("href"),opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:!!a.value,optSelected:l.selected,enctype:!!o.createElement("form").enctype,html5Clone:"<:nav>"!==o.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===o.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},a.checked=!0,t.noCloneChecked=a.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!l.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}a=o.createElement("input"),a.setAttribute("value",""),t.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),t.radioValue="t"===a.value,a.setAttribute("checked","t"),a.setAttribute("name","t"),u=o.createDocumentFragment(),u.appendChild(a),t.appendChecked=a.checked,t.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;return d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip,b(function(){var n,r,a,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",u=o.getElementsByTagName("body")[0];u&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",u.appendChild(n).appendChild(d),d.innerHTML="
    t
    ",a=d.getElementsByTagName("td"),a[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===a[0].offsetHeight,a[0].style.display="",a[1].style.display="none",t.reliableHiddenOffsets=p&&0===a[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=4===d.offsetWidth,t.doesNotIncludeMarginInBodyOffset=1!==u.offsetTop,e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(o.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="
    ",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(u.style.zoom=1)),u.removeChild(n),n=d=a=r=null)}),n=s=u=l=r=a=null,t}();var O=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,B=/([A-Z])/g;function P(e,n,r,i){if(b.acceptData(e)){var o,a,s=b.expando,u="string"==typeof n,l=e.nodeType,p=l?b.cache:e,f=l?e[s]:e[s]&&s;if(f&&p[f]&&(i||p[f].data)||!u||r!==t)return f||(l?e[s]=f=c.pop()||b.guid++:f=s),p[f]||(p[f]={},l||(p[f].toJSON=b.noop)),("object"==typeof n||"function"==typeof n)&&(i?p[f]=b.extend(p[f],n):p[f].data=b.extend(p[f].data,n)),o=p[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[b.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[b.camelCase(n)])):a=o,a}}function R(e,t,n){if(b.acceptData(e)){var r,i,o,a=e.nodeType,s=a?b.cache:e,u=a?e[b.expando]:b.expando;if(s[u]){if(t&&(o=n?s[u]:s[u].data)){b.isArray(t)?t=t.concat(b.map(t,b.camelCase)):t in o?t=[t]:(t=b.camelCase(t),t=t in o?[t]:t.split(" "));for(r=0,i=t.length;i>r;r++)delete o[t[r]];if(!(n?$:b.isEmptyObject)(o))return}(n||(delete s[u].data,$(s[u])))&&(a?b.cleanData([e],!0):b.support.deleteExpando||s!=s.window?delete s[u]:s[u]=null)}}}b.extend({cache:{},expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?b.cache[e[b.expando]]:e[b.expando],!!e&&!$(e)},data:function(e,t,n){return P(e,t,n)},removeData:function(e,t){return R(e,t)},_data:function(e,t,n){return P(e,t,n,!0)},_removeData:function(e,t){return R(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&b.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),b.fn.extend({data:function(e,n){var r,i,o=this[0],a=0,s=null;if(e===t){if(this.length&&(s=b.data(o),1===o.nodeType&&!b._data(o,"parsedAttrs"))){for(r=o.attributes;r.length>a;a++)i=r[a].name,i.indexOf("data-")||(i=b.camelCase(i.slice(5)),W(o,i,s[i]));b._data(o,"parsedAttrs",!0)}return s}return"object"==typeof e?this.each(function(){b.data(this,e)}):b.access(this,function(n){return n===t?o?W(o,e,b.data(o,e)):null:(this.each(function(){b.data(this,e,n)}),t)},null,n,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function W(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(B,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:O.test(r)?b.parseJSON(r):r}catch(o){}b.data(e,n,r)}else r=t}return r}function $(e){var t;for(t in e)if(("data"!==t||!b.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}b.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=b._data(e,n),r&&(!i||b.isArray(r)?i=b._data(e,n,b.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=b.queue(e,t),r=n.length,i=n.shift(),o=b._queueHooks(e,t),a=function(){b.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return b._data(e,n)||b._data(e,n,{empty:b.Callbacks("once memory").add(function(){b._removeData(e,t+"queue"),b._removeData(e,n)})})}}),b.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?b.queue(this[0],e):n===t?this:this.each(function(){var t=b.queue(this,e,n);b._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&b.dequeue(this,e)})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(e,t){return e=b.fx?b.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=b.Deferred(),a=this,s=this.length,u=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=b._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(u));return u(),o.promise(n)}});var I,z,X=/[\t\r\n]/g,U=/\r/g,V=/^(?:input|select|textarea|button|object)$/i,Y=/^(?:a|area)$/i,J=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,G=/^(?:checked|selected)$/i,Q=b.support.getSetAttribute,K=b.support.input;b.fn.extend({attr:function(e,t){return b.access(this,b.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,t){return b.access(this,b.prop,e,t,arguments.length>1)},removeProp:function(e){return e=b.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,u="string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=b.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=0===arguments.length||"string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?b.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return b.isFunction(e)?this.each(function(n){b(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var o,a=0,s=b(this),u=t,l=e.match(w)||[];while(o=l[a++])u=r?u:!s.hasClass(o),s[u?"addClass":"removeClass"](o)}else(n===i||"boolean"===n)&&(this.className&&b._data(this,"__className__",this.className),this.className=this.className||e===!1?"":b._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(X," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=b.isFunction(e),this.each(function(n){var o,a=b(this);1===this.nodeType&&(o=i?e.call(this,n,a.val()):e,null==o?o="":"number"==typeof o?o+="":b.isArray(o)&&(o=b.map(o,function(e){return null==e?"":e+""})),r=b.valHooks[this.type]||b.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=b.valHooks[o.type]||b.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(U,""):null==n?"":n)}}}),b.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,u=0>i?s:o?i:0;for(;s>u;u++)if(n=r[u],!(!n.selected&&u!==i||(b.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&b.nodeName(n.parentNode,"optgroup"))){if(t=b(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n=b.makeArray(t);return b(e).find("option").each(function(){this.selected=b.inArray(b(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attr:function(e,n,r){var o,a,s,u=e.nodeType;if(e&&3!==u&&8!==u&&2!==u)return typeof e.getAttribute===i?b.prop(e,n,r):(a=1!==u||!b.isXMLDoc(e),a&&(n=n.toLowerCase(),o=b.attrHooks[n]||(J.test(n)?z:I)),r===t?o&&a&&"get"in o&&null!==(s=o.get(e,n))?s:(typeof e.getAttribute!==i&&(s=e.getAttribute(n)),null==s?t:s):null!==r?o&&a&&"set"in o&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r):(b.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=b.propFix[n]||n,J.test(n)?!Q&&G.test(n)?e[b.camelCase("default-"+n)]=e[r]=!1:e[r]=!1:b.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!b.support.radioValue&&"radio"===t&&b.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!b.isXMLDoc(e),a&&(n=b.propFix[n]||n,o=b.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):V.test(e.nodeName)||Y.test(e.nodeName)&&e.href?0:t}}}}),z={get:function(e,n){var r=b.prop(e,n),i="boolean"==typeof r&&e.getAttribute(n),o="boolean"==typeof r?K&&Q?null!=i:G.test(n)?e[b.camelCase("default-"+n)]:!!i:e.getAttributeNode(n);return o&&o.value!==!1?n.toLowerCase():t},set:function(e,t,n){return t===!1?b.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&b.propFix[n]||n,n):e[b.camelCase("default-"+n)]=e[n]=!0,n}},K&&Q||(b.attrHooks.value={get:function(e,n){var r=e.getAttributeNode(n);return b.nodeName(e,"input")?e.defaultValue:r&&r.specified?r.value:t},set:function(e,n,r){return b.nodeName(e,"input")?(e.defaultValue=n,t):I&&I.set(e,n,r)}}),Q||(I=b.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&("id"===n||"name"===n||"coords"===n?""!==r.value:r.specified)?r.value:t},set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},b.attrHooks.contenteditable={get:I.get,set:function(e,t,n){I.set(e,""===t?!1:t,n)}},b.each(["width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}})})),b.support.hrefNormalized||(b.each(["href","src","width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null==r?t:r}})}),b.each(["href","src"],function(e,t){b.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}})),b.support.style||(b.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),b.support.optSelected||(b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),b.support.enctype||(b.propFix.enctype="encoding"),b.support.checkOn||b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return null===e.getAttribute("value")?"on":e.value}}}),b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,n){return b.isArray(n)?e.checked=b.inArray(b(e).val(),n)>=0:t}})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}b.event={global:{},add:function(e,n,r,o,a){var s,u,l,c,p,f,d,h,g,m,y,v=b._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=b.guid++),(u=v.events)||(u=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof b===i||e&&b.event.triggered===e.type?t:b.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(w)||[""],l=n.length;while(l--)s=rt.exec(n[l])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),p=b.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=b.event.special[g]||{},d=b.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&b.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=u[g])||(h=u[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),b.event.global[g]=!0;e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,p,f,d,h,g,m=b.hasData(e)&&b._data(e);if(m&&(c=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(s=rt.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=b.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),u=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));u&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||b.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)b.event.remove(e,d+t[l],n,r,!0);b.isEmptyObject(c)&&(delete m.handle,b._removeData(e,"events"))}},trigger:function(n,r,i,a){var s,u,l,c,p,f,d,h=[i||o],g=y.call(n,"type")?n.type:n,m=y.call(n,"namespace")?n.namespace.split("."):[];if(l=f=i=i||o,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+b.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),u=0>g.indexOf(":")&&"on"+g,n=n[b.expando]?n:new b.Event(g,"object"==typeof n&&n),n.isTrigger=!0,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:b.makeArray(r,[n]),p=b.event.special[g]||{},a||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!a&&!p.noBubble&&!b.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(l=l.parentNode);l;l=l.parentNode)h.push(l),f=l;f===(i.ownerDocument||o)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((l=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(b._data(l,"events")||{})[n.type]&&b._data(l,"handle"),s&&s.apply(l,r),s=u&&l[u],s&&b.acceptData(l)&&s.apply&&s.apply(l,r)===!1&&n.preventDefault();if(n.type=g,!(a||n.isDefaultPrevented()||p._default&&p._default.apply(i.ownerDocument,r)!==!1||"click"===g&&b.nodeName(i,"a")||!b.acceptData(i)||!u||!i[g]||b.isWindow(i))){f=i[u],f&&(i[u]=null),b.event.triggered=g;try{i[g]()}catch(v){}b.event.triggered=t,f&&(i[u]=f)}return n.result}},dispatch:function(e){e=b.event.fix(e);var n,r,i,o,a,s=[],u=h.call(arguments),l=(b._data(this,"events")||{})[e.type]||[],c=b.event.special[e.type]||{};if(u[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=b.event.handlers.call(this,e,l),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((b.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,u),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],u=n.delegateCount,l=e.target;if(u&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==e.type)){for(o=[],a=0;u>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?b(r,this).index(l)>=0:b.find(r,this,null,[l]).length),o[r]&&o.push(i);o.length&&s.push({elem:l,handlers:o})}return n.length>u&&s.push({elem:this,handlers:n.slice(u)}),s},fix:function(e){if(e[b.expando])return e;var t,n,r,i=e.type,a=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new b.Event(a),t=r.length;while(t--)n=r[t],e[n]=a[n];return e.target||(e.target=a.srcElement||o),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,a):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,a,s=n.button,u=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||o,a=i.documentElement,r=i.body,e.pageX=n.clientX+(a&&a.scrollLeft||r&&r.scrollLeft||0)-(a&&a.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(a&&a.scrollTop||r&&r.scrollTop||0)-(a&&a.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&u&&(e.relatedTarget=u===e.target?n.toElement:u),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},click:{trigger:function(){return b.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t}},focus:{trigger:function(){if(this!==o.activeElement&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===o.activeElement&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=b.extend(new b.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?b.event.trigger(i,null,t):b.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},b.removeEvent=o.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},b.Event=function(e,n){return this instanceof b.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&b.extend(this,n),this.timeStamp=e&&e.timeStamp||b.now(),this[b.expando]=!0,t):new b.Event(e,n)},b.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){b.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj; +return(!i||i!==r&&!b.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),b.support.submitBubbles||(b.event.special.submit={setup:function(){return b.nodeName(this,"form")?!1:(b.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=b.nodeName(n,"input")||b.nodeName(n,"button")?n.form:t;r&&!b._data(r,"submitBubbles")&&(b.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),b._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&b.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return b.nodeName(this,"form")?!1:(b.event.remove(this,"._submit"),t)}}),b.support.changeBubbles||(b.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(b.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),b.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),b.event.simulate("change",this,e,!0)})),!1):(b.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!b._data(t,"changeBubbles")&&(b.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||b.event.simulate("change",this.parentNode,e,!0)}),b._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return b.event.remove(this,"._change"),!Z.test(this.nodeName)}}),b.support.focusinBubbles||b.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){b.event.simulate(t,e.target,b.event.fix(e),!0)};b.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),b.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return b().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=b.guid++)),this.each(function(){b.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,b(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){b.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){b.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?b.event.trigger(e,n,r,!0):t}}),function(e,t){var n,r,i,o,a,s,u,l,c,p,f,d,h,g,m,y,v,x="sizzle"+-new Date,w=e.document,T={},N=0,C=0,k=it(),E=it(),S=it(),A=typeof t,j=1<<31,D=[],L=D.pop,H=D.push,q=D.slice,M=D.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},_="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=F.replace("w","w#"),B="([*^$|!~]?=)",P="\\["+_+"*("+F+")"+_+"*(?:"+B+_+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+O+")|)|)"+_+"*\\]",R=":("+F+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+P.replace(3,8)+")*)|.*)\\)|)",W=RegExp("^"+_+"+|((?:^|[^\\\\])(?:\\\\.)*)"+_+"+$","g"),$=RegExp("^"+_+"*,"+_+"*"),I=RegExp("^"+_+"*([\\x20\\t\\r\\n\\f>+~])"+_+"*"),z=RegExp(R),X=RegExp("^"+O+"$"),U={ID:RegExp("^#("+F+")"),CLASS:RegExp("^\\.("+F+")"),NAME:RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:RegExp("^("+F.replace("w","w*")+")"),ATTR:RegExp("^"+P),PSEUDO:RegExp("^"+R),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+_+"*(even|odd|(([+-]|)(\\d*)n|)"+_+"*(?:([+-]|)"+_+"*(\\d+)|))"+_+"*\\)|)","i"),needsContext:RegExp("^"+_+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+_+"*((?:-\\d)?\\d*)"+_+"*\\)|)(?=[^-]|$)","i")},V=/[\x20\t\r\n\f]*[+~]/,Y=/^[^{]+\{\s*\[native code/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,G=/^(?:input|select|textarea|button)$/i,Q=/^h\d$/i,K=/'|\\/g,Z=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,et=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,tt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(55296|n>>10,56320|1023&n)};try{q.call(w.documentElement.childNodes,0)[0].nodeType}catch(nt){q=function(e){var t,n=[];while(t=this[e++])n.push(t);return n}}function rt(e){return Y.test(e+"")}function it(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>i.cacheLength&&delete e[t.shift()],e[n]=r}}function ot(e){return e[x]=!0,e}function at(e){var t=p.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}}function st(e,t,n,r){var i,o,a,s,u,l,f,g,m,v;if((t?t.ownerDocument||t:w)!==p&&c(t),t=t||p,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(!d&&!r){if(i=J.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&y(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return H.apply(n,q.call(t.getElementsByTagName(e),0)),n;if((a=i[3])&&T.getByClassName&&t.getElementsByClassName)return H.apply(n,q.call(t.getElementsByClassName(a),0)),n}if(T.qsa&&!h.test(e)){if(f=!0,g=x,m=t,v=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){l=ft(e),(f=t.getAttribute("id"))?g=f.replace(K,"\\$&"):t.setAttribute("id",g),g="[id='"+g+"'] ",u=l.length;while(u--)l[u]=g+dt(l[u]);m=V.test(e)&&t.parentNode||t,v=l.join(",")}if(v)try{return H.apply(n,q.call(m.querySelectorAll(v),0)),n}catch(b){}finally{f||t.removeAttribute("id")}}}return wt(e.replace(W,"$1"),t,n,r)}a=st.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},c=st.setDocument=function(e){var n=e?e.ownerDocument||e:w;return n!==p&&9===n.nodeType&&n.documentElement?(p=n,f=n.documentElement,d=a(n),T.tagNameNoComments=at(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),T.attributes=at(function(e){e.innerHTML="";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),T.getByClassName=at(function(e){return e.innerHTML="",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),T.getByName=at(function(e){e.id=x+0,e.innerHTML="
    ",f.insertBefore(e,f.firstChild);var t=n.getElementsByName&&n.getElementsByName(x).length===2+n.getElementsByName(x+0).length;return T.getIdNotName=!n.getElementById(x),f.removeChild(e),t}),i.attrHandle=at(function(e){return e.innerHTML="",e.firstChild&&typeof e.firstChild.getAttribute!==A&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},T.getIdNotName?(i.find.ID=function(e,t){if(typeof t.getElementById!==A&&!d){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){return e.getAttribute("id")===t}}):(i.find.ID=function(e,n){if(typeof n.getElementById!==A&&!d){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==A&&r.getAttributeNode("id").value===e?[r]:t:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){var n=typeof e.getAttributeNode!==A&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=T.tagNameNoComments?function(e,n){return typeof n.getElementsByTagName!==A?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},i.find.NAME=T.getByName&&function(e,n){return typeof n.getElementsByName!==A?n.getElementsByName(name):t},i.find.CLASS=T.getByClassName&&function(e,n){return typeof n.getElementsByClassName===A||d?t:n.getElementsByClassName(e)},g=[],h=[":focus"],(T.qsa=rt(n.querySelectorAll))&&(at(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||h.push("\\["+_+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||h.push(":checked")}),at(function(e){e.innerHTML="",e.querySelectorAll("[i^='']").length&&h.push("[*^$]="+_+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||h.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),h.push(",.*:")})),(T.matchesSelector=rt(m=f.matchesSelector||f.mozMatchesSelector||f.webkitMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&at(function(e){T.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",R)}),h=RegExp(h.join("|")),g=RegExp(g.join("|")),y=rt(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},v=f.compareDocumentPosition?function(e,t){var r;return e===t?(u=!0,0):(r=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t))?1&r||e.parentNode&&11===e.parentNode.nodeType?e===n||y(w,e)?-1:t===n||y(w,t)?1:0:4&r?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return u=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:0;if(o===a)return ut(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?ut(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},u=!1,[0,0].sort(v),T.detectDuplicates=u,p):p},st.matches=function(e,t){return st(e,null,null,t)},st.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Z,"='$1']"),!(!T.matchesSelector||d||g&&g.test(t)||h.test(t)))try{var n=m.call(e,t);if(n||T.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return st(t,p,null,[e]).length>0},st.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},st.attr=function(e,t){var n;return(e.ownerDocument||e)!==p&&c(e),d||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):d||T.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},st.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},st.uniqueSort=function(e){var t,n=[],r=1,i=0;if(u=!T.detectDuplicates,e.sort(v),u){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));while(i--)e.splice(n[i],1)}return e};function ut(e,t){var n=t&&e,r=n&&(~t.sourceIndex||j)-(~e.sourceIndex||j);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function lt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ct(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function pt(e){return ot(function(t){return t=+t,ot(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}o=st.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=st.selectors={cacheLength:50,createPseudo:ot,match:U,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(et,tt),e[3]=(e[4]||e[5]||"").replace(et,tt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||st.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&st.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return U.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&z.test(n)&&(t=ft(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(et,tt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[e+" "];return t||(t=RegExp("(^|"+_+")"+e+"("+_+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==A&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=st.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[x]||(m[x]={}),l=c[e]||[],d=l[0]===N&&l[1],f=l[0]===N&&l[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[N,d,f];break}}else if(v&&(l=(t[x]||(t[x]={}))[e])&&l[0]===N)f=l[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[x]||(p[x]={}))[e]=[N,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||st.error("unsupported pseudo: "+e);return r[x]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?ot(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=M.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ot(function(e){var t=[],n=[],r=s(e.replace(W,"$1"));return r[x]?ot(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:ot(function(e){return function(t){return st(e,t).length>0}}),contains:ot(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:ot(function(e){return X.test(e||"")||st.error("unsupported lang: "+e),e=e.replace(et,tt).toLowerCase(),function(t){var n;do if(n=d?t.getAttribute("xml:lang")||t.getAttribute("lang"):t.lang)return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return Q.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:pt(function(){return[0]}),last:pt(function(e,t){return[t-1]}),eq:pt(function(e,t,n){return[0>n?n+t:n]}),even:pt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:pt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:pt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:pt(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}};for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[n]=lt(n);for(n in{submit:!0,reset:!0})i.pseudos[n]=ct(n);function ft(e,t){var n,r,o,a,s,u,l,c=E[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=i.preFilter;while(s){(!n||(r=$.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),u.push(o=[])),n=!1,(r=I.exec(s))&&(n=r.shift(),o.push({value:n,type:r[0].replace(W," ")}),s=s.slice(n.length));for(a in i.filter)!(r=U[a].exec(s))||l[a]&&!(r=l[a](r))||(n=r.shift(),o.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?st.error(e):E(e,u).slice(0)}function dt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function ht(e,t,n){var i=t.dir,o=n&&"parentNode"===i,a=C++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,s){var u,l,c,p=N+" "+a;if(s){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[x]||(t[x]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,s)||r,l[1]===!0)return!0}}function gt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function mt(e,t,n,r,i){var o,a=[],s=0,u=e.length,l=null!=t;for(;u>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),l&&t.push(s));return a}function yt(e,t,n,r,i,o){return r&&!r[x]&&(r=yt(r)),i&&!i[x]&&(i=yt(i,o)),ot(function(o,a,s,u){var l,c,p,f=[],d=[],h=a.length,g=o||xt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:mt(g,f,e,s,u),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,u),r){l=mt(y,d),r(l,[],s,u),c=l.length;while(c--)(p=l[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?M.call(o,p):f[c])>-1&&(o[l]=!(a[l]=p))}}else y=mt(y===a?y.splice(h,y.length):y),i?i(null,a,y,u):H.apply(a,y)})}function vt(e){var t,n,r,o=e.length,a=i.relative[e[0].type],s=a||i.relative[" "],u=a?1:0,c=ht(function(e){return e===t},s,!0),p=ht(function(e){return M.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>u;u++)if(n=i.relative[e[u].type])f=[ht(gt(f),n)];else{if(n=i.filter[e[u].type].apply(null,e[u].matches),n[x]){for(r=++u;o>r;r++)if(i.relative[e[r].type])break;return yt(u>1&>(f),u>1&&dt(e.slice(0,u-1)).replace(W,"$1"),n,r>u&&vt(e.slice(u,r)),o>r&&vt(e=e.slice(r)),o>r&&dt(e))}f.push(n)}return gt(f)}function bt(e,t){var n=0,o=t.length>0,a=e.length>0,s=function(s,u,c,f,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,T=l,C=s||a&&i.find.TAG("*",d&&u.parentNode||u),k=N+=null==T?1:Math.random()||.1;for(w&&(l=u!==p&&u,r=n);null!=(h=C[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,u,c)){f.push(h);break}w&&(N=k,r=++n)}o&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,o&&b!==v){g=0;while(m=t[g++])m(x,y,u,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=L.call(f));y=mt(y)}H.apply(f,y),w&&!s&&y.length>0&&v+t.length>1&&st.uniqueSort(f)}return w&&(N=k,l=T),x};return o?ot(s):s}s=st.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=ft(e)),n=t.length;while(n--)o=vt(t[n]),o[x]?r.push(o):i.push(o);o=S(e,bt(i,r))}return o};function xt(e,t,n){var r=0,i=t.length;for(;i>r;r++)st(e,t[r],n);return n}function wt(e,t,n,r){var o,a,u,l,c,p=ft(e);if(!r&&1===p.length){if(a=p[0]=p[0].slice(0),a.length>2&&"ID"===(u=a[0]).type&&9===t.nodeType&&!d&&i.relative[a[1].type]){if(t=i.find.ID(u.matches[0].replace(et,tt),t)[0],!t)return n;e=e.slice(a.shift().value.length)}o=U.needsContext.test(e)?0:a.length;while(o--){if(u=a[o],i.relative[l=u.type])break;if((c=i.find[l])&&(r=c(u.matches[0].replace(et,tt),V.test(a[0].type)&&t.parentNode||t))){if(a.splice(o,1),e=r.length&&dt(a),!e)return H.apply(n,q.call(r,0)),n;break}}}return s(e,p)(r,t,d,n,V.test(e)),n}i.pseudos.nth=i.pseudos.eq;function Tt(){}i.filters=Tt.prototype=i.pseudos,i.setFilters=new Tt,c(),st.attr=b.attr,b.find=st,b.expr=st.selectors,b.expr[":"]=b.expr.pseudos,b.unique=st.uniqueSort,b.text=st.getText,b.isXMLDoc=st.isXML,b.contains=st.contains}(e);var at=/Until$/,st=/^(?:parents|prev(?:Until|All))/,ut=/^.[^:#\[\.,]*$/,lt=b.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};b.fn.extend({find:function(e){var t,n,r,i=this.length;if("string"!=typeof e)return r=this,this.pushStack(b(e).filter(function(){for(t=0;i>t;t++)if(b.contains(r[t],this))return!0}));for(n=[],t=0;i>t;t++)b.find(e,this[t],n);return n=this.pushStack(i>1?b.unique(n):n),n.selector=(this.selector?this.selector+" ":"")+e,n},has:function(e){var t,n=b(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(b.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1))},filter:function(e){return this.pushStack(ft(this,e,!0))},is:function(e){return!!e&&("string"==typeof e?lt.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,o=[],a=lt.test(e)||"string"!=typeof e?b(e,t||this.context):0;for(;i>r;r++){n=this[r];while(n&&n.ownerDocument&&n!==t&&11!==n.nodeType){if(a?a.index(n)>-1:b.find.matchesSelector(n,e)){o.push(n);break}n=n.parentNode}}return this.pushStack(o.length>1?b.unique(o):o)},index:function(e){return e?"string"==typeof e?b.inArray(this[0],b(e)):b.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?b(e,t):b.makeArray(e&&e.nodeType?[e]:e),r=b.merge(this.get(),n);return this.pushStack(b.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),b.fn.andSelf=b.fn.addBack;function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}b.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(e,t,n){return b.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(e,t,n){return b.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return b.dir(e,"previousSibling",n)},siblings:function(e){return b.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.merge([],e.childNodes)}},function(e,t){b.fn[e]=function(n,r){var i=b.map(this,t,n);return at.test(e)||(r=n),r&&"string"==typeof r&&(i=b.filter(r,i)),i=this.length>1&&!ct[e]?b.unique(i):i,this.length>1&&st.test(e)&&(i=i.reverse()),this.pushStack(i)}}),b.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),1===t.length?b.find.matchesSelector(t[0],e)?[t[0]]:[]:b.find.matches(e,t)},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!b(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(t=t||0,b.isFunction(t))return b.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return b.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=b.grep(e,function(e){return 1===e.nodeType});if(ut.test(t))return b.filter(t,r,!n);t=b.filter(t,r)}return b.grep(e,function(e){return b.inArray(e,t)>=0===n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/\s*$/g,At={option:[1,""],legend:[1,"
    ","
    "],area:[1,"",""],param:[1,"",""],thead:[1,"","
    "],tr:[2,"","
    "],col:[2,"","
    "],td:[3,"","
    "],_default:b.support.htmlSerialize?[0,"",""]:[1,"X
    ","
    "]},jt=dt(o),Dt=jt.appendChild(o.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,b.fn.extend({text:function(e){return b.access(this,function(e){return e===t?b.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(b.isFunction(e))return this.each(function(t){b(this).wrapAll(e.call(this,t))});if(this[0]){var t=b(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return b.isFunction(e)?this.each(function(t){b(this).wrapInner(e.call(this,t))}):this.each(function(){var t=b(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=b.isFunction(e);return this.each(function(n){b(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){b.nodeName(this,"body")||b(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.insertBefore(e,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=0;for(;null!=(n=this[r]);r++)(!e||b.filter(e,[n]).length>0)&&(t||1!==n.nodeType||b.cleanData(Ot(n)),n.parentNode&&(t&&b.contains(n.ownerDocument,n)&&Mt(Ot(n,"script")),n.parentNode.removeChild(n)));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&b.cleanData(Ot(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&b.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return b.clone(this,e,t)})},html:function(e){return b.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!b.support.htmlSerialize&&mt.test(e)||!b.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(b.cleanData(Ot(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){var t=b.isFunction(e);return t||"string"==typeof e||(e=b(e).not(this).detach()),this.domManip([e],!0,function(e){var t=this.nextSibling,n=this.parentNode;n&&(b(this).remove(),n.insertBefore(e,t))})},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=f.apply([],e);var i,o,a,s,u,l,c=0,p=this.length,d=this,h=p-1,g=e[0],m=b.isFunction(g);if(m||!(1>=p||"string"!=typeof g||b.support.checkClone)&&Ct.test(g))return this.each(function(i){var o=d.eq(i);m&&(e[0]=g.call(this,i,n?o.html():t)),o.domManip(e,n,r)});if(p&&(l=b.buildFragment(e,this[0].ownerDocument,!1,this),i=l.firstChild,1===l.childNodes.length&&(l=i),i)){for(n=n&&b.nodeName(i,"tr"),s=b.map(Ot(l,"script"),Ht),a=s.length;p>c;c++)o=l,c!==h&&(o=b.clone(o,!0,!0),a&&b.merge(s,Ot(o,"script"))),r.call(n&&b.nodeName(this[c],"table")?Lt(this[c],"tbody"):this[c],o,c);if(a)for(u=s[s.length-1].ownerDocument,b.map(s,qt),c=0;a>c;c++)o=s[c],kt.test(o.type||"")&&!b._data(o,"globalEval")&&b.contains(u,o)&&(o.src?b.ajax({url:o.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):b.globalEval((o.text||o.textContent||o.innerHTML||"").replace(St,"")));l=i=null}return this}});function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function Ht(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function Mt(e,t){var n,r=0;for(;null!=(n=e[r]);r++)b._data(n,"globalEval",!t||b._data(t[r],"globalEval"))}function _t(e,t){if(1===t.nodeType&&b.hasData(e)){var n,r,i,o=b._data(e),a=b._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)b.event.add(t,n,s[n][r])}a.data&&(a.data=b.extend({},a.data))}}function Ft(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!b.support.noCloneEvent&&t[b.expando]){i=b._data(t);for(r in i.events)b.removeEvent(t,r,i.handle);t.removeAttribute(b.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),b.support.html5Clone&&e.innerHTML&&!b.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Nt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){b.fn[e]=function(e){var n,r=0,i=[],o=b(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),b(o[r])[t](n),d.apply(i,n.get());return this.pushStack(i)}});function Ot(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||b.nodeName(o,n)?s.push(o):b.merge(s,Ot(o,n));return n===t||n&&b.nodeName(e,n)?b.merge([e],s):s}function Bt(e){Nt.test(e.type)&&(e.defaultChecked=e.checked)}b.extend({clone:function(e,t,n){var r,i,o,a,s,u=b.contains(e.ownerDocument,e);if(b.support.html5Clone||b.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(b.support.noCloneEvent&&b.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||b.isXMLDoc(e)))for(r=Ot(o),s=Ot(e),a=0;null!=(i=s[a]);++a)r[a]&&Ft(i,r[a]);if(t)if(n)for(s=s||Ot(e),r=r||Ot(o),a=0;null!=(i=s[a]);a++)_t(i,r[a]);else _t(e,o);return r=Ot(o,"script"),r.length>0&&Mt(r,!u&&Ot(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,u,l,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===b.type(o))b.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),u=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[u]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!b.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!b.support.tbody){o="table"!==u||xt.test(o)?""!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)b.nodeName(l=o.childNodes[i],"tbody")&&!l.childNodes.length&&o.removeChild(l) +}b.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),b.support.appendChecked||b.grep(Ot(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===b.inArray(o,r))&&(a=b.contains(o.ownerDocument,o),s=Ot(f.appendChild(o),"script"),a&&Mt(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,u=b.expando,l=b.cache,p=b.support.deleteExpando,f=b.event.special;for(;null!=(n=e[s]);s++)if((t||b.acceptData(n))&&(o=n[u],a=o&&l[o])){if(a.events)for(r in a.events)f[r]?b.event.remove(n,r):b.removeEvent(n,r,a.handle);l[o]&&(delete l[o],p?delete n[u]:typeof n.removeAttribute!==i?n.removeAttribute(u):n[u]=null,c.push(o))}}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+x+")(.*)$","i"),Yt=RegExp("^("+x+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+x+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===b.css(e,"display")||!b.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=b._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=b._data(r,"olddisplay",un(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&b._data(r,"olddisplay",i?n:b.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}b.fn.extend({css:function(e,n){return b.access(this,function(e,n,r){var i,o,a={},s=0;if(b.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=b.css(e,n[s],!1,o);return a}return r!==t?b.style(e,n,r):b.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:nn(this))?b(this).show():b(this).hide()})}}),b.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,u=b.camelCase(n),l=e.style;if(n=b.cssProps[u]||(b.cssProps[u]=tn(l,u)),s=b.cssHooks[n]||b.cssHooks[u],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(b.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||b.cssNumber[u]||(r+="px"),b.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(l[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=b.camelCase(n);return n=b.cssProps[u]||(b.cssProps[u]=tn(e.style,u)),s=b.cssHooks[n]||b.cssHooks[u],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||b.isNumeric(o)?o||0:a):a},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&&(""!==u||b.contains(e.ownerDocument,e)||(u=b.style(e,n)),Yt.test(u)&&Ut.test(n)&&(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):o.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s[n]:t,l=e.style;return null==u&&l&&l[n]&&(u=l[n]),Yt.test(u)&&!zt.test(n)&&(i=l.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),l.left="fontSize"===n?"1em":u,u=l.pixelLeft+"px",l.left=i,a&&(o.left=a)),""===u?"auto":u});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=b.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=b.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=b.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=b.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=b.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(b.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function un(e){var t=o,n=Gt[e];return n||(n=ln(e,t),"none"!==n&&n||(Pt=(Pt||b("')}catch(s){i=r.createElement("iframe"),i.name=e.name}delete e.name}else i=r.createElement("iframe");return e.id&&(i.id=e.id,delete e.id),i.allowtransparency="true",i.scrolling="no",i.setAttribute("frameBorder",0),i.setAttribute("allowTransparency",!0),t.forIn(e,function(e,t){i.setAttribute(e,t)}),t.forIn(n,function(e,t){i.style[e]=t}),i})})}); +provide("dom/get",function(e){using("util/util",function(t){function r(e,t,r){return n(e,t,r,1)[0]}function i(e,n,r){var s=n&&n.parentNode,o;if(!s||s===r)return;return s.tagName==e?s:(o=s.className.split(" "),0===e.indexOf(".")&&~t.indexOf(o,e.slice(1))?s:i(e,s,r))}var n=function(){var e=document.getElementsByClassName;return t.isNative(e)?function(n,r,i,s){var o=r?r.getElementsByClassName(n):e.call(document,n),u=t.filter(o,function(e){return!i||e.tagName.toLowerCase()==i.toLowerCase()});return[].slice.call(u,0,s||u.length)}:function(e,n,r,i){var s,o,u=[],a,f,l,c,h,p;n=n||document,a=e.split(" "),c=a.length,s=n.getElementsByTagName(r||"*"),p=s.length;for(l=0;l0;l++){u=[],f=a[l];for(h=0;h۱۰۰هزار","10k unit":"۱۰هزار واحد",Follow:"دنبال کردن","Follow %{screen_name}":"دنبال کردن %{screen_name}",K:"هزار",M:"میلیون",Tweet:"توییت","Tweet %{hashtag}":"توییت کردن %{hashtag}","Tweet to %{name}":"به %{name} توییت کنید"},fi:{"%{followers_count} followers":"%{followers_count} seuraajaa","100K+":"100 000+","10k unit":"10 000 yksikköä",Follow:"Seuraa","Follow %{screen_name}":"Seuraa käyttäjää %{screen_name}",K:"tuhatta",M:"milj.",Tweet:"Twiittaa","Tweet %{hashtag}":"Twiittaa %{hashtag}","Tweet to %{name}":"Twiittaa käyttäjälle %{name}"},fil:{"%{followers_count} followers":"%{followers_count} mga tagasunod","10k unit":"10k yunit",Follow:"Sundan","Follow %{screen_name}":"Sundan si %{screen_name}",Tweet:"I-tweet","Tweet %{hashtag}":"I-tweet ang %{hashtag}","Tweet to %{name}":"Mag-Tweet kay %{name}"},fr:{"%{followers_count} followers":"%{followers_count} abonnés","10k unit":"unité de 10k",Follow:"Suivre","Follow %{screen_name}":"Suivre %{screen_name}",Tweet:"Tweeter","Tweet %{hashtag}":"Tweeter %{hashtag}","Tweet to %{name}":"Tweeter à %{name}"},he:{"%{followers_count} followers":"%{followers_count} עוקבים","100K+":"מאות אלפים","10k unit":"עשרות אלפים",Follow:"מעקב","Follow %{screen_name}":"לעקוב אחר %{screen_name}",K:"אלף",M:"מיליון",Tweet:"ציוץ","Tweet %{hashtag}":"צייצו %{hashtag}","Tweet to %{name}":"ציוץ אל %{name}"},hi:{"%{followers_count} followers":"%{followers_count} फ़ॉलोअर्स","100K+":"1 लाख+","10k unit":"10 हजार इकाईयां",Follow:"फ़ॉलो","Follow %{screen_name}":"%{screen_name} को फ़ॉलो करें",K:"हजार",M:"मिलियन",Tweet:"ट्वीट","Tweet %{hashtag}":"ट्वीट %{hashtag}","Tweet to %{name}":"%{name} को ट्वीट करें"},hu:{"%{followers_count} followers":"%{followers_count} követő","100K+":"100E+","10k unit":"10E+",Follow:"Követés","Follow %{screen_name}":"%{screen_name} követése",K:"E","Tweet %{hashtag}":"%{hashtag} tweetelése","Tweet to %{name}":"Tweet küldése neki: %{name}"},id:{"%{followers_count} followers":"%{followers_count} pengikut","100K+":"100 ribu+","10k unit":"10 ribu unit",Follow:"Ikuti","Follow %{screen_name}":"Ikuti %{screen_name}",K:" ribu",M:" juta","Tweet to %{name}":"Tweet ke %{name}"},it:{"%{followers_count} followers":"%{followers_count} follower","10k unit":"10k unità",Follow:"Segui","Follow %{screen_name}":"Segui %{screen_name}","Tweet %{hashtag}":"Twitta %{hashtag}","Tweet to %{name}":"Twitta a %{name}"},ja:{"%{followers_count} followers":"%{followers_count}人のフォロワー","100K+":"100K以上","10k unit":"万",Follow:"フォローする","Follow %{screen_name}":"%{screen_name}さんをフォロー",Tweet:"ツイート","Tweet %{hashtag}":"%{hashtag} をツイートする","Tweet to %{name}":"%{name}さんへツイートする"},ko:{"%{followers_count} followers":"%{followers_count}명의 팔로워","100K+":"100만 이상","10k unit":"만 단위",Follow:"팔로우","Follow %{screen_name}":"%{screen_name} 님 팔로우하기",K:"천",M:"백만",Tweet:"트윗","Tweet %{hashtag}":"%{hashtag} 관련 트윗하기","Tweet to %{name}":"%{name}님에게 트윗하기"},msa:{"%{followers_count} followers":"%{followers_count} pengikut","100K+":"100 ribu+","10k unit":"10 ribu unit",Follow:"Ikut","Follow %{screen_name}":"Ikut %{screen_name}",K:"ribu",M:"juta","Tweet to %{name}":"Tweet kepada %{name}"},nl:{"%{followers_count} followers":"%{followers_count} volgers","100K+":"100k+","10k unit":"10k-eenheid",Follow:"Volgen","Follow %{screen_name}":"%{screen_name} volgen",K:"k",M:" mln.",Tweet:"Tweeten","Tweet %{hashtag}":"%{hashtag} tweeten","Tweet to %{name}":"Tweeten naar %{name}"},no:{"%{followers_count} followers":"%{followers_count} følgere","100K+":"100 K+","10k unit":"10-K-enhet",Follow:"Følg","Follow %{screen_name}":"Følg %{screen_name}","Tweet to %{name}":"Send en tweet til %{name}"},pl:{"%{followers_count} followers":"%{followers_count} obserwujących","100K+":"100 tys.+","10k unit":"10 tys.",Follow:"Obserwuj","Follow %{screen_name}":"Obserwuj %{screen_name}",K:"tys.",M:"mln",Tweet:"Tweetnij","Tweet %{hashtag}":"Tweetnij %{hashtag}","Tweet to %{name}":"Tweetnij do %{name}"},pt:{"%{followers_count} followers":"%{followers_count} seguidores","100K+":"+100 mil","10k unit":"10 mil unidades",Follow:"Seguir","Follow %{screen_name}":"Seguir %{screen_name}",K:"Mil",Tweet:"Tweetar","Tweet %{hashtag}":"Tweetar %{hashtag}","Tweet to %{name}":"Tweetar para %{name}"},ru:{"%{followers_count} followers":"Читатели: %{followers_count} ","100K+":"100 тыс.+","10k unit":"блок 10k",Follow:"Читать","Follow %{screen_name}":"Читать %{screen_name}",K:"тыс.",M:"млн.",Tweet:"Твитнуть","Tweet %{hashtag}":"Твитнуть %{hashtag}","Tweet to %{name}":"Твитнуть %{name}"},sv:{"%{followers_count} followers":"%{followers_count} följare","10k unit":"10k",Follow:"Följ","Follow %{screen_name}":"Följ %{screen_name}",Tweet:"Tweeta","Tweet %{hashtag}":"Tweeta %{hashtag}","Tweet to %{name}":"Tweeta till %{name}"},th:{"%{followers_count} followers":"%{followers_count} ผู้ติดตาม","100K+":"100พัน+","10k unit":"หน่วย 10พัน",Follow:"ติดตาม","Follow %{screen_name}":"ติดตาม %{screen_name}",K:"พัน",M:"ล้าน",Tweet:"ทวีต","Tweet %{hashtag}":"ทวีต %{hashtag}","Tweet to %{name}":"ทวีตถึง %{name}"},tr:{"%{followers_count} followers":"%{followers_count} takipçi","100K+":"+100 bin","10k unit":"10 bin birim",Follow:"Takip et","Follow %{screen_name}":"Takip et: %{screen_name}",K:"bin",M:"milyon",Tweet:"Tweetle","Tweet %{hashtag}":"Tweetle: %{hashtag}","Tweet to %{name}":"Tweetle: %{name}"},ur:{"%{followers_count} followers":"%{followers_count} فالورز","100K+":"ایک لاکھ سے زیادہ","10k unit":"دس ہزار یونٹ",Follow:"فالو کریں","Follow %{screen_name}":"%{screen_name} کو فالو کریں",K:"ہزار",M:"ملین",Tweet:"ٹویٹ کریں","Tweet %{hashtag}":"%{hashtag} ٹویٹ کریں","Tweet to %{name}":"%{name} کو ٹویٹ کریں"},"zh-cn":{"%{followers_count} followers":"%{followers_count} 关注者","100K+":"10万+","10k unit":"1万单元",Follow:"关注","Follow %{screen_name}":"关注 %{screen_name}",K:"千",M:"百万",Tweet:"发推","Tweet %{hashtag}":"以 %{hashtag} 发推","Tweet to %{name}":"发推给 %{name}"},"zh-tw":{"%{followers_count} followers":"%{followers_count} 位跟隨者","100K+":"超過十萬","10k unit":"1萬 單位",Follow:"跟隨","Follow %{screen_name}":"跟隨 %{screen_name}",K:"千",M:"百萬",Tweet:"推文","Tweet %{hashtag}":"推文%{hashtag}","Tweet to %{name}":"推文給%{name}"}};a.aug(g.prototype,{setLanguage:function(e){var t;e||(e=this.params().lang||this.dataAttr("lang")||b(this.srcEl)),e=e&&e.toLowerCase();if(!e)return this.lang="en";if(m[e])return this.lang=e;t=e.replace(/[\-_].*/,"");if(m[t])return this.lang=t;this.lang="en"},_:function(e,t){var n=this.lang;t=t||{};if(!n||!m.hasOwnProperty(n))n=this.lang="en";return e=m[n]&&m[n][e]||e,this.ringo(e,t,/%\{([\w_]+)\}/g)},ringo:function(e,t,n){return n=n||/\{\{([\w_]+)\}\}/g,e.replace(n,function(e,n){return t[n]!==undefined?t[n]:e})},add:function(e){h.list.push(this),h.byId[this.id]=e},create:function(e,t,n){var i=this,o;return n[v]=!0,o=r(a.aug({id:this.id,src:e,"class":this.classAttr.join(" ")},n),t,this.targetEl&&this.targetEl.ownerDocument),this.srcEl?this.layout(function(){return i.srcEl.parentNode.replaceChild(o,i.srcEl),o}):this.targetEl?this.layout(function(){return i.targetEl.appendChild(o),o}):s.reject("Did not append widget")},params:function(){var e,t;return this.srcOb?t=this.srcOb:(e=this.srcEl&&this.srcEl.href&&this.srcEl.href.split("?")[1],t=e?o.decode(e):{}),this.params=function(){return t},t},dataAttr:function(e){return this.srcEl&&this.srcEl.getAttribute("data-"+e)},attr:function(e){return this.srcEl&&this.srcEl.getAttribute(e)},layout:function(e){return d.enqueue(e)},styles:{base:[["font","normal normal normal 11px/18px 'Helvetica Neue', Arial, sans-serif"],["margin","0"],["padding","0"],["whiteSpace","nowrap"]],button:[["fontWeight","bold"],["textShadow","0 1px 0 rgba(255,255,255,.5)"]],large:[["fontSize","13px"],["lineHeight","26px"]],vbubble:[["fontSize","16px"]]},width:function(){throw new Error(name+" not implemented")},height:function(){return this.size=="m"?20:28},minWidth:function(){},maxWidth:function(){},minHeight:function(){},maxHeight:function(){},dimensions:function(){function e(e){switch(typeof e){case"string":return e;case"undefined":return;default:return e+"px"}}var t={width:this.width(),height:this.height()};return this.minWidth()&&(t["min-width"]=this.minWidth()),this.maxWidth()&&(t["max-width"]=this.maxWidth()),this.minHeight()&&(t["min-height"]=this.minHeight()),this.maxHeight()&&(t["max-height"]=this.maxHeight()),a.forIn(t,function(n,r){t[n]=e(r)}),t},generateId:function(){return this.srcEl&&this.srcEl.id||"twitter-widget-"+l++}}),g.afterLoad=function(e){p.push(e)},g.doLayout=function(){d.exec()},g.doLayoutAsync=function(){d.delayedExec()},g.init=function(e){c=e},g.find=function(e){return e&&h.byId[e]?h.byId[e].element:null},g.embed=function(e){function o(e){var t=e.element&&e.element()||e;if(e!==document.body)return t}var n=c.widgets,r=[],i=[];u.isArray(e)||(e=[e||document]),a.forEach(e,function(e){a.forIn(n,function(n,i){var s,o;n.match(/\./)?(s=n.split("."),o=t.all(s[1],e,s[0])):o=e.getElementsByTagName(n),a.forEach(o,function(e){if(e.getAttribute(v))return;e.setAttribute(v,"true"),r.push(new i(e))})})}),g.doLayout(),a.forEach(r,function(e){var t;h.byId[e.id]=e,h.list.push(e),t=e.render(c),e.rendered&&(t=e.rendered()),i.push(t),t.then(function(e){var t=o(e);t&&twttr.events.trigger("rendered",{target:t})})}),s.every.apply(null,i).then(function(e){var t=a.map(Array.prototype.slice.call(e),o);t=a.filter(t,function(t){return t}),t.length&&twttr.events.trigger("loaded",{widgets:t})}),g.doLayoutAsync(),y()},window.setInterval(function(){g.doLayout()},500),e(g)})}); +provide("tfw/widget/intent",function(e){using("tfw/widget/base","util/util","util/querystring","util/uri","util/promise",function(t,n,r,i,s){function p(e){var t=Math.round(c/2-a/2),n=0;l>f&&(n=Math.round(l/2-f/2)),window.open(e,undefined,[u,"width="+a,"height="+f,"left="+t,"top="+n].join(","))}function d(e,t){using("tfw/hub/client",function(n){n.openIntent(e,t)})}function v(e){var t="original_referer="+location.href;return[e,t].join(e.indexOf("?")==-1?"?":"&")}function m(e){var t,r,i,s;e=e||window.event,t=e.target||e.srcElement;if(e.altKey||e.metaKey||e.shiftKey)return;while(t){if(~n.indexOf(["A","AREA"],t.nodeName))break;t=t.parentNode}t&&t.href&&(r=t.href.match(o),r&&(s=v(t.href),s=s.replace(/^http[:]/,"https:"),s=s.replace(/^\/\//,"https://"),g(s,t),e.returnValue=!1,e.preventDefault&&e.preventDefault()))}function g(e,t){if(twttr.events.hub&&t){var n=new y(h.generateId(),t);h.add(n),d(e,t),twttr.events.trigger("click",{target:t,region:"intent",type:"click",data:{}})}else p(e)}function y(e,t){this.id=e,this.element=this.srcEl=t}function b(e){this.srcEl=[],this.element=e}var o=/twitter\.com(\:\d{2,4})?\/intent\/(\w+)/,u="scrollbars=yes,resizable=yes,toolbar=no,location=yes",a=550,f=520,l=screen.height,c=screen.width,h;b.prototype=new t,n.aug(b.prototype,{render:function(e){return h=this,window.__twitterIntentHandler||(document.addEventListener?document.addEventListener("click",m,!1):document.attachEvent&&document.attachEvent("onclick",m),window.__twitterIntentHandler=!0),s.fulfill(document.body)}}),b.open=g,e(b)})}); +provide("dom/classname",function(e){function t(e){return new RegExp("\\b"+e+"\\b","g")}function n(e,n){if(e.classList){e.classList.add(n);return}t(n).test(e.className)||(e.className+=" "+n)}function r(e,n){if(e.classList){e.classList.remove(n);return}e.className=e.className.replace(t(n)," ")}function i(e,t,i){return e.classList&&e.classList.toggle?e.classList.toggle(t,i):(i?n(e,t):r(e,t),i)}function s(e,i,s){if(e.classList&&o(e,i)){r(e,i),n(e,s);return}e.className=e.className.replace(t(i),s)}function o(e,n){return e.classList?e.classList.contains(n):t(n).test(e.className)}e({add:n,remove:r,replace:s,toggle:i,present:o})}); +provide("util/throttle",function(e){function t(e,t,n){function o(){var n=+(new Date);window.clearTimeout(s);if(n-i>t){i=n,e.call(r);return}s=window.setTimeout(o,t)}var r=n||this,i=0,s;return o}e(t)}); +provide("util/css",function(e){using("util/util",function(t){e({sanitize:function(e,n,r){var i=/^[\w ,%\/"'\-_#]+$/,s=e&&t.map(e.split(";"),function(e){return t.map(e.split(":").slice(0,2),function(e){return t.trim(e)})}),o=0,u,a=[],f=r?"!important":"";n=n||/^(font|text\-|letter\-|color|line\-)[\w\-]*$/;for(;s&&(u=s[o]);o++)u[0].match(n)&&u[1].match(i)&&a.push(u.join(":")+f);return a.join(";")}})})}); +provide("tfw/util/params",function(e){using("util/querystring","util/twitter",function(t,n){e(function(e,r){return function(i){var s,o="data-tw-params",u,a=i.innerHTML;if(!i)return;if(!n.isTwitterURL(i.href))return;if(i.getAttribute(o))return;i.setAttribute(o,!0);if(typeof r=="function"){s=r.call(this,i);for(u in s)s.hasOwnProperty(u)&&(e[u]=s[u])}i.href=t.url(i.href,e)}})})}); +provide("util/params",function(e){using("util/querystring",function(t){var n=function(e){var n=e.search.substr(1);return t.decode(n)},r=function(e){var n=e.href,r=n.indexOf("#"),i=r<0?"":n.substring(r+1);return t.decode(i)},i=function(e){var t={},i=n(e),s=r(e);for(var o in i)i.hasOwnProperty(o)&&(t[o]=i[o]);for(var o in s)s.hasOwnProperty(o)&&(t[o]=s[o]);return t};e({combined:i,fromQuery:n,fromFragment:r})})}); +provide("tfw/util/env",function(e){using("util/params",function(t){function r(){var e=36e5,r=t.combined(document.location)._;return n!==undefined?n:(n=!1,r&&/^\d+$/.test(r)&&(n=+(new Date)-parseInt(r)=r;return t[e]=i,i}var t={force_new_cookie:100,rufous_pixel:100,decider_fixture:12.34};e({isAvailable:n})}); +provide("dom/cookie",function(e){using("util/util",function(t){e(function(e,n,r){var i=t.aug({},r);if(arguments.length>1&&String(n)!=="[object Object]"){if(n===null||n===undefined)i.expires=-1;if(typeof i.expires=="number"){var s=i.expires,o=new Date((new Date).getTime()+s*60*1e3);i.expires=o}return n=String(n),document.cookie=[encodeURIComponent(e),"=",i.raw?n:encodeURIComponent(n),i.expires?"; expires="+i.expires.toUTCString():"",i.path?"; path="+i.path:"",i.domain?"; domain="+i.domain:"",i.secure?"; secure":""].join("")}i=n||{};var u,a=i.raw?function(e){return e}:decodeURIComponent;return(u=(new RegExp("(?:^|; )"+encodeURIComponent(e)+"=([^;]*)")).exec(document.cookie))?a(u[1]):null})})}); +provide("util/donottrack",function(e){using("dom/cookie",function(t){e(function(e,n){var r=/\.(gov|mil)(:\d+)?$/i,i=/https?:\/\/([^\/]+).*/i;return e=e||document.referrer,e=i.test(e)&&i.exec(e)[1],n=n||document.location.host,t("dnt")?!0:r.test(n)?!0:e&&r.test(e)?!0:document.navigator?document.navigator["doNotTrack"]==1:navigator?navigator["doNotTrack"]==1||navigator["msDoNotTrack"]==1:!1})})}); +provide("tfw/util/guest_cookie",function(e){using("dom/cookie","util/donottrack","util/decider",function(t,n,r){function s(){var e=t(i)||!1;if(!e)return;e.match(/^v3\:/)||o()}function o(){t(i)&&t(i,null,{domain:".twitter.com",path:"/"})}function u(){n()&&o()}var i="pid";e({set:u,destroy:o,forceNewCookie:s,guest_id_cookie:i})})}); +provide("sandbox/baseframe",function(e){using("util/domready","util/env","util/iframe","util/promise","util/util",function(t,n,r,i,s){function u(e,t,n,o){var u;this.readyPromise=new i(s.bind(function(e){this.resolver=e},this)),this.attrs=e||{},this.styles=t||{},this.appender=n||function(e){document.body.appendChild(e)},this.layout=o||function(e){return new i(function(t){return t.fulfill(e())})},this.frame=u=r(this.attrs,this.styles),u.onreadystatechange=u.onload=this.getCallback(this.onLoad),this.layout(s.bind(function(){this.appender(u)},this))}var o=0;window.twttr=window.twttr||{},window.twttr.sandbox=window.twttr.sandbox||{},u.prototype.getCallback=function(e){var t=this,n=!1;return function(){n||(n=!0,e.call(t))}},u.prototype.registerCallback=function(e){var t="cb"+o++;return window.twttr.sandbox[t]=e,t},u.prototype.onLoad=function(){try{this.document=this.frame.contentWindow.document}catch(e){this.setDocDomain();return}this.writeStandardsDoc(),this.resolver.fulfill(this)},u.prototype.ready=function(){return this.readyPromise},u.prototype.setDocDomain=function(){var e=r(this.attrs,this.styles),t=this.registerCallback(this.getCallback(this.onLoad));e.src=["javascript:",'document.write("");',"try { window.parent.document; }","catch (e) {",'document.domain="'+document.domain+'";',"}",'window.parent.twttr.sandbox["'+t+'"]();'].join(""),this.layout(s.bind(function(){this.frame.parentNode.removeChild(this.frame),this.frame=null,this.appender?this.appender(e):document.body.appendChild(e),this.frame=e},this))},u.prototype.writeStandardsDoc=function(){if(!n.anyIE()||n.cspEnabled())return;var e=["","","","","try { window.parent.document; }",'catch (e) {document.domain="'+document.domain+'";}',"","","",""].join("");this.document.write(e),this.document.close()},e(u)})}); +provide("sandbox/minimal",function(e){using("sandbox/baseframe","util/env","util/promise","util/util",function(t,n,r,i){function s(e,t){if(!e)return;this._frame=e,this._win=e.contentWindow,this._doc=this._win.document,this._body=this._doc.body,this._head=this._body.parentNode.children[0],this.layout=t}i.aug(s.prototype,{createElement:function(e){return this._doc.createElement(e)},createDocumentFragment:function(){return this._doc.createDocumentFragment()},appendChild:function(e){return this.layout(i.bind(function(){return this._body.appendChild(e)},this))},setBaseTarget:function(e){var t=this._doc.createElement("base");return t.target=e,this.layout(i.bind(function(){return this._head.appendChild(t)},this))},setTitle:function(e){if(!e)return;this._frame.title=e},element:function(){return this._frame},document:function(){return this._doc}}),s.createSandbox=function(e,n,r,i){var o=new t(e,n,r,i);return o.ready().then(function(e){return new s(e.frame,e.layout)})},e(s)})}); +provide("tfw/util/tracking",function(e){using("dom/cookie","dom/delegate","sandbox/minimal","util/donottrack","util/promise","tfw/util/guest_cookie","tfw/util/env","util/iframe","util/util","$xd/json2.js",function(t,n,r,i,s,o,u,a,f){function S(){return b?b:b=r.createSandbox({id:"rufous-sandbox"},{display:"none"}).then(f.bind(function(e){y=e,d=H(),v=B();while(m[0])A.apply(this,m.shift());return g?O():[d,v]},this))}function x(e,t,n,r){var i=!f.isObject(e),s=t?!f.isObject(t):!1,o,u;if(i||s)return;o=_(e),u=D(t,!!n,!!r),L(o,u,!0)}function T(e,n,r,s){var a=c[n],l,h,p=o.guest_id_cookie;if(!a)return;e=e||{},s=!!s,r=!!r,h=e.original_redirect_referrer||document.referrer,s=s||i(h),l=f.aug({},e),r||(k(l,"referrer",h),k(l,"widget",+u.isDynamicWidget()),k(l,"hask",+!!t("k")),k(l,"li",+!!t("twid")),k(l,p,t(p)||"")),s&&(k(l,"dnt",1),F(l)),j(a+"?"+P(l))}function N(e,t,n,r,i){var s=C(e.target||e.srcElement);s.action=i||"click",x(s,t,n,r)}function C(e,t){var n;return t=t||{},!e||e.nodeType!==1?t:((n=e.getAttribute("data-scribe"))&&f.forEach(n.split(" "),function(e){var n=f.trim(e).split(":"),r=n[0],i=n[1];r&&i&&!t[r]&&(t[r]=i)}),C(e.parentNode,t))}function k(e,t,n){var r=l+t;if(!e)return;return e[r]=n,e}function L(e,t,n){var r,i,s,o,u=w+"?";if(!f.isObject(e)||!f.isObject(t))return;s=f.aug({},t,{event_namespace:e}),n?(u+=P({l:I(s)}),j(u)):(r=d.firstChild,r.value=+r.value||+s.dnt,o=I(s),i=y.createElement("input"),i.type="hidden",i.name="l",i.value=o,d.appendChild(i))}function A(e,t,n,r){var i=!f.isObject(e),s=t?!f.isObject(t):!1,o,u;if(i||s)return;if(!y||!d){m.push([e,t,n,r]);return}o=_(e),u=D(t,!!n,!!r),L(o,u)}function O(){if(!d)return g=!0,b||s.reject();if(d.children.length<=2)return s.reject();var e=s.every(y.appendChild(d),y.appendChild(v)).then(function(e){var t=e[0],r=e[1];return n.on(r,"load",function(){window.setTimeout(M(t,r),0)}),t.submit(),e});return d=H(),v=B(),e}function M(e,t){return function(){var n=e.parentNode;if(!n)return;n.removeChild(e),n.removeChild(t)}}function _(e){return f.aug({client:"tfw"},e||{})}function D(e,t,n){var r={_category_:"tfw_client_event"},s,o;return t=!!t,n=!!n,s=f.aug(r,e||{}),o=s.widget_origin||document.referrer,s.format_version=1,s.dnt=n=n||i(o),s.triggered_on=s.triggered_on||+(new Date),t||(s.widget_origin=o),n&&F(s),s}function P(e){var t=[],n,r,i;for(n in e)e.hasOwnProperty(n)&&(r=encodeURIComponent(n),i=encodeURIComponent(e[n]),i=i.replace(/'/g,"%27"),t.push(r+"="+i));return t.join("&")}function H(){var e=y.createElement("form"),t=y.createElement("input"),n=y.createElement("input");return p++,e.action=w,e.method="POST",e.target="rufous-frame-"+p,e.id="rufous-form-"+p,t.type="hidden",t.name="dnt",t.value=0,n.type="hidden",n.name="tfw_redirect",n.value=E,e.appendChild(t),e.appendChild(n),e}function B(){var e="rufous-frame-"+p;return a({id:e,name:e,width:0,height:0,border:0},{display:"none"},y.document())}function j(e){var t=new Image;t.src=e}function F(e){f.forIn(e,function(t){~f.indexOf(h,t)&&delete e[t]})}function I(e){var t=Array.prototype.toJSON,n;return delete Array.prototype.toJSON,n=JSON.stringify(e),t&&(Array.prototype.toJSON=t),n}var l="twttr_",c={tweetbutton:"//p.twitter.com/t.gif",followbutton:"//p.twitter.com/f.gif",tweetembed:"//p.twitter.com/e.gif"},h=["hask","li","logged_in","pid","user_id",o.guest_id_cookie,l+"hask",l+"li",l+o.guest_id_cookie],p=0,d,v,m=[],g,y,b,w="https://twitter.com/i/jot",E="https://platform.twitter.com/jot.html";o.forceNewCookie(),e({enqueue:A,flush:O,initPostLogging:S,scribeInteraction:N,extractTermsFromDOM:C,addPixel:x,addLegacyPixel:T,addVar:k})})}); +provide("tfw/util/data",function(e){using("util/logger","util/util","util/querystring",function(t,n,r){function c(e){return function(n){n.error?e.error&&e.error(n):n.headers&&n.headers.status!=200?(e.error&&e.error(n),t.warn(n.headers.message)):e.success&&e.success(n),e.complete&&e.complete(n),h(e)}}function h(e){var t=e.script;t&&(t.onload=t.onreadystatechange=null,t.parentNode&&t.parentNode.removeChild(t),e.script=undefined,t=undefined),e.callbackName&&twttr.tfw.callbacks[e.callbackName]&&delete twttr.tfw.callbacks[e.callbackName]}function p(e){var t={};return e.success&&n.isType("function",e.success)&&(t.success=e.success),e.error&&n.isType("function",e.error)&&(t.error=e.error),e.complete&&n.isType("function",e.complete)&&(t.complete=e.complete),t}window.twttr=window.twttr||{},twttr.tfw=twttr.tfw||{},twttr.tfw.callbacks=twttr.tfw.callbacks||{};var i="twttr.tfw.callbacks",s=twttr.tfw.callbacks,o="cb",u=0,a=!1,f={},l={tweets:"https://syndication.twitter.com/tweets.json",timeline:"https://cdn.syndication.twimg.com/widgets/timelines/",timelinePoll:"https://syndication.twitter.com/widgets/timelines/paged/",timelinePreview:"https://syndication.twitter.com/widgets/timelines/preview/"};twttr.widgets&&twttr.widgets.endpoints&&n.aug(l,twttr.widgets.endpoints),f.jsonp=function(e,t,n){var f=n||o+u,l=i+"."+f,h=document.createElement("script"),p={callback:l,suppress_response_codes:!0};s[f]=c(t);if(a||!/^https?\:$/.test(window.location.protocol))e=e.replace(/^\/\//,"https://");h.src=r.url(e,p),h.async="async",document.body.appendChild(h),t.script=h,t.callbackName=f,n||u++},f.config=function(e){if(e.forceSSL===!0||e.forceSSL===!1)a=e.forceSSL},f.tweets=function(e){var t=arguments[0],n=p(t),i={ids:e.ids.join(","),lang:e.lang},s=r.url(l.tweets,i);this.jsonp(s,n)},f.timeline=function(e){var t=arguments[0],i=p(t),s,o=9e5,u=Math.floor(+(new Date)/o),a={lang:e.lang,t:u,domain:window.location.host,dnt:e.dnt,override_type:e.overrideType,override_id:e.overrideId,override_name:e.overrideName,override_owner_id:e.overrideOwnerId,override_owner_name:e.overrideOwnerName,with_replies:e.withReplies};n.compact(a),s=r.url(l.timeline+e.id,a),this.jsonp(s,i,"tl_"+e.id+"_"+e.instanceId)},f.timelinePoll=function(e){var t=arguments[0],i=p(t),s={lang:e.lang,since_id:e.sinceId,max_id:e.maxId,min_position:e.minPosition,max_position:e.maxPosition,domain:window.location.host,dnt:e.dnt,override_type:e.overrideType,override_id:e.overrideId,override_name:e.overrideName,override_owner_id:e.overrideOwnerId,override_owner_name:e.overrideOwnerName,with_replies:e.withReplies},o;n.compact(s),o=r.url(l.timelinePoll+e.id,s),this.jsonp(o,i,"tlPoll_"+e.id+"_"+e.instanceId+"_"+(e.sinceId||e.maxId||e.maxPosition||e.minPosition))},f.timelinePreview=function(e){var t=arguments[0],n=p(t),i=e.params,s=r.url(l.timelinePreview,i);this.jsonp(s,n)},e(f)})}); +provide("anim/transition",function(e){function t(e,t){var n;return t=t||window,n=t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||t.msRequestAnimationFrame||t.oRequestAnimationFrame||function(n){t.setTimeout(function(){e(+(new Date))},1e3/60)},n(e)}function n(e,t){return Math.sin(Math.PI/2*t)*e}function r(e,n,r,i,s){function a(){var u=+(new Date),f=u-o,l=Math.min(f/r,1),c=i?i(n,l):n*l;e(c);if(l==1)return;t(a,s)}var o=+(new Date),u;t(a)}e({animate:r,requestAnimationFrame:t,easeOut:n})}); +provide("util/datetime",function(e){using("util/util",function(t){function h(e){return e<10?"0"+e:e}function p(e){function i(e,n){return t&&t[e]&&(e=t[e]),e.replace(/%\{([\w_]+)\}/g,function(e,t){return n[t]!==undefined?n[t]:e})}var t=e&&e.phrases,n=e&&e.months||s,r=e&&e.formats||o;this.timeAgo=function(e){var t=p.parseDate(e),s=+(new Date),o=s-t,h;return t?isNaN(o)||o1?i("seconds"):i("second")})})):o1?i("minutes"):i("minute")})})):o1?i("hours"):i("hour")})})):o%{abbr}';p.parseDate=function(e){var o=e||"",u=o.toString(),a,f;return a=function(){var e;if(i.test(u))return parseInt(u,10);if(e=u.match(r))return Date.UTC(e[7],t.indexOf(s,e[1]),e[2],e[3],e[4],e[5]);if(e=u.match(n))return Date.UTC(e[1],e[2]-1,e[3],e[4],e[5],e[6])}(),a?(f=new Date(a),!isNaN(f.getTime())&&f):!1},e(p)})}); +provide("sandbox/frame",function(e){using("sandbox/baseframe","sandbox/minimal","util/env","util/promise","util/util",function(t,n,r,i,s){function h(){var e,t;a={};if(f)return;e=document.body.offsetHeight,t=document.body.offsetWidth;if(e==c&&t==l)return;s.forEach(u,function(e){e.dispatchFrameResize(l,c)}),c=e,l=t}function p(e){var t;return e.id?e.id:(t=e.getAttribute("data-twttr-id"))?t:(t="twttr-sandbox-"+o++,e.setAttribute("data-twttr-id",t),t)}function d(e,t){n.apply(this,[e,t]),this._resizeHandlers=[],u.push(this),this._win.addEventListener?this._win.addEventListener("resize",s.bind(function(){this.dispatchFrameResize()},this),!0):this._win.attachEvent("onresize",s.bind(function(){this.dispatchFrameResize(this._win.event)},this))}var o=0,u=[],a={},f,l=0,c=0;window.addEventListener?window.addEventListener("resize",h,!0):document.body.attachEvent("onresize",function(){h(window.event)}),d.prototype=new n,s.aug(d.prototype,{dispatchFrameResize:function(){var e=this._frame.parentNode,t=p(e),n=a[t];f=!0;if(!this._resizeHandlers.length)return;n||(n=a[t]={w:this._frame.offsetWidth,h:this._frame.offsetHeight});if(this._frameWidth==n.w&&this._frameHeight==n.h)return;this._frameWidth=n.w,this._frameHeight=n.h,s.forEach(this._resizeHandlers,function(e){e(n.w,n.h)}),window.setTimeout(function(){a={}},50)},appendStyleSheet:function(e){var t=this._doc.createElement("link");return t.type="text/css",t.rel="stylesheet",t.href=e,this.layout(s.bind(function(){return this._head.appendChild(t)},this))},appendCss:function(e){var t;return r.cspEnabled()?i.reject("CSP enabled; cannot embed inline styles."):(t=this._doc.createElement("style"),t.type="text/css",t.styleSheet?t.styleSheet.cssText=e:t.appendChild(this._doc.createTextNode(e)),this.layout(s.bind(function(){return this._head.appendChild(t)},this)))},style:function(e){return this.layout(s.bind(function(){s.forIn(e,s.bind(function(e,t){this._frame.style[e]=t},this))},this))},onresize:function(e){this._resizeHandlers.push(e)},width:function(e){return e!==undefined&&(this._frame.width=e),this._frame.offsetWidth},height:function(e){return e!==undefined&&(this._frame.height=e),this._frame.offsetHeight}}),d.createSandbox=function(e,n,r,i){var s=new t(e,n,r,i);return s.ready().then(function(e){return new d(e.frame,e.layout)})},e(d)})}); +provide("tfw/util/assets",function(e){using("util/env",function(t){function r(e,r){var i=n[e],s;return t.retina()?s="2x":t.ie6()||t.ie7()?s="gif":s="default",r&&(s+=".rtl"),i[s]}var n={"embed/timeline.css":{"default":"embed/timeline.037a0cac0aa5abbe2c1b5c5cd368d398.default.css","2x":"embed/timeline.037a0cac0aa5abbe2c1b5c5cd368d398.2x.css",gif:"embed/timeline.037a0cac0aa5abbe2c1b5c5cd368d398.gif.css","default.rtl":"embed/timeline.037a0cac0aa5abbe2c1b5c5cd368d398.default.rtl.css","2x.rtl":"embed/timeline.037a0cac0aa5abbe2c1b5c5cd368d398.2x.rtl.css","gif.rtl":"embed/timeline.037a0cac0aa5abbe2c1b5c5cd368d398.gif.rtl.css"}};e(r)})}); +provide("tfw/widget/syndicatedbase",function(e){using("tfw/widget/base","tfw/widget/intent","tfw/util/assets","tfw/util/globals","tfw/util/tracking","dom/classname","dom/get","dom/delegate","sandbox/frame","util/env","util/promise","util/twitter","util/util",function(t,n,r,i,s,o,u,a,f,l,c,h,p){function S(){y=x.VALID_COLOR.test(i.val("widgets:link-color"))&&RegExp.$1,w=x.VALID_COLOR.test(i.val("widgets:border-color"))&&RegExp.$1,b=i.val("widgets:theme")}function x(e){if(!e)return;var n;this.readyPromise=new c(p.bind(function(e){this.readyResolver=e},this)),this.renderedPromise=new c(p.bind(function(e){this.renderResolver=e},this)),t.apply(this,[e]),n=this.params(),this.targetEl=this.srcEl&&this.srcEl.parentNode||n.targetEl||document.body,this.predefinedWidth=x.VALID_UNIT.test(n.width||this.attr("width"))&&RegExp.$1,this.layout(p.bind(function(){return this.containerWidth=this.targetEl&&this.targetEl.offsetWidth},this)).then(p.bind(function(e){var t=this.predefinedWidth||e||this.dimensions.DEFAULT_WIDTH;this.height=x.VALID_UNIT.test(n.height||this.attr("height"))&&RegExp.$1,this.width=Math.max(this.dimensions.MIN_WIDTH,Math.min(t,this.dimensions.DEFAULT_WIDTH))},this)),x.VALID_COLOR.test(n.linkColor||this.dataAttr("link-color"))?this.linkColor=RegExp.$1:this.linkColor=y,x.VALID_COLOR.test(n.borderColor||this.dataAttr("border-color"))?this.borderColor=RegExp.$1:this.borderColor=w,this.theme=n.theme||this.attr("data-theme")||b,this.theme=/(dark|light)/.test(this.theme)?this.theme:"",this.classAttr.push(l.touch()?"is-touch":"not-touch"),l.ie9()&&this.classAttr.push("ie9"),f.createSandbox({"class":this.renderedClassNames,id:this.id},{width:"1px",height:"0px",border:"none",position:"absolute",visibility:"hidden"},p.bind(function(e){this.srcEl?this.targetEl.insertBefore(e,this.srcEl):this.targetEl.appendChild(e)},this),this.layout).then(p.bind(function(e){this.setupSandbox(e)},this))}var d=[".customisable",".customisable:link",".customisable:visited",".customisable:hover",".customisable:focus",".customisable:active",".customisable-highlight:hover",".customisable-highlight:focus","a:hover .customisable-highlight","a:focus .customisable-highlight"],v=["a:hover .ic-mask","a:focus .ic-mask"],m=[".customisable-border"],g=[".timeline-header h1.summary",".timeline-header h1.summary a:link",".timeline-header h1.summary a:visited"],y,b,w,E={TWEET:0,RETWEET:10};x.prototype=new t,p.aug(x.prototype,{setupSandbox:function(e){this.sandbox=e,c.some(e.appendCss("body{display:none}"),e.setBaseTarget("_blank"),e.appendStyleSheet(twttr.widgets.config.assetUrl()+"/"+r("embed/timeline.css"))).then(p.bind(function(){this.readyResolver.fulfill(e)},this))},ready:function(){return this.readyPromise},rendered:function(){return this.renderedPromise},contentWidth:function(e){var t=this.dimensions,n=this.fullBleedPhoto?0:this.chromeless&&this.narrow?t.NARROW_MEDIA_PADDING_CL:this.chromeless?t.WIDE_MEDIA_PADDING_CL:this.narrow?t.NARROW_MEDIA_PADDING:t.WIDE_MEDIA_PADDING;return(e||this.width)-n},addSiteStyles:function(){var e=p.bind(function(e){return(this.theme=="dark"?".thm-dark ":"")+e},this),t=[];this.headingStyle&&t.push(p.map(g,e).join(",")+"{"+this.headingStyle+"}"),this.linkColor&&(t.push(p.map(d,e).join(",")+"{color:"+this.linkColor+"}"),t.push(p.map(v,e).join(",")+"{background-color:"+this.linkColor+"}")),this.borderColor&&t.push(p.map(m,e).concat(this.theme=="dark"?[".thm-dark.customisable-border"]:[]).join(",")+"{border-color:"+this.borderColor+"}");if(!t.length)return;return this.sandbox.appendCss(t.join(""))},setNarrow:function(){var e=this.narrow;return this.narrow=this.width0&&(e.width=i.width),i.height>0&&(e.height=i.height)}),n=i.height>n?i.height:n},this)),n}}),x.VALID_UNIT=/^([0-9]+)( ?px)?$/,x.VALID_COLOR=/^(#(?:[0-9a-f]{3}|[0-9a-f]{6}))$/i,x.retinize=function(e){if(!l.retina())return;p.forEach(e.getElementsByTagName("IMG"),function(e){var t=e.getAttribute("data-src-2x");t&&(e.src=t)})},x.scaleDimensions=function(e,t,n,r){return t>e&&t>r&&(e*=r/t,t=r),e>n&&(t*=n/e,e=n,t>r&&(e*=r/t,t=r)),{width:Math.ceil(e),height:Math.ceil(t)}},S(),e(x)})}); +provide("tfw/widget/timeline",function(e){using("tfw/widget/base","tfw/widget/syndicatedbase","util/datetime","util/promise","anim/transition","tfw/util/article","tfw/util/data","tfw/util/tracking","tfw/util/params","util/css","util/env","util/throttle","util/twitter","util/querystring","util/typevalidator","util/util","dom/delegate","dom/classname","dom/get",function(t,n,r,i,s,o,u,a,f,l,c,h,p,d,v,m,g,y,b){function I(e){if(!e)return;var t,r,i,s,o,u,a,f;n.apply(this,[e]),t=this.params(),r=(t.chrome||this.dataAttr("chrome")||"").split(" "),this.preview=t.previewParams,this.widgetId=t.widgetId||this.dataAttr("widget-id"),this.instanceId=++F,this.cursors={maxPosition:0,minPosition:0},(s=t.screenName||this.dataAttr("screen-name"))||(o=t.userId||this.dataAttr("user-id"))?this.override={overrideType:"user",overrideId:o,overrideName:s,withReplies:v.asBoolean(t.showReplies||this.dataAttr("show-replies"))?"true":"false"}:(s=t.favoritesScreenName||this.dataAttr("favorites-screen-name"))||(o=t.favoritesUserId||this.dataAttr("favorites-user-id"))?this.override={overrideType:"favorites",overrideId:o,overrideName:s}:((s=t.listOwnerScreenName||this.dataAttr("list-owner-screen-name"))||(o=t.listOwnerId||this.dataAttr("list-owner-id")))&&((u=t.listId||this.dataAttr("list-id"))||(a=t.listSlug||this.dataAttr("list-slug")))?this.override={overrideType:"list",overrideOwnerId:o,overrideOwnerName:s,overrideId:u,overrideName:a}:(f=t.customTimelineId||this.dataAttr("custom-timeline-id"))?this.override={overrideType:"custom",overrideId:f}:this.override={},this.tweetLimit=v.asInt(t.tweetLimit||this.dataAttr("tweet-limit")),this.staticTimeline=this.tweetLimit>0,r.length&&(i=~m.indexOf(r,"none"),this.chromeless=i||~m.indexOf(r,"transparent"),this.headerless=i||~m.indexOf(r,"noheader"),this.footerless=i||~m.indexOf(r,"nofooter"),this.borderless=i||~m.indexOf(r,"noborders"),this.noscrollbar=~m.indexOf(r,"noscrollbar")),this.headingStyle=l.sanitize(t.headingStyle||this.dataAttr("heading-style"),undefined,!0),this.classAttr.push("twitter-timeline-rendered"),this.ariaPolite=t.ariaPolite||this.dataAttr("aria-polite")}var w="1.0",E={CLIENT_SIDE_USER:0,CLIENT_SIDE_APP:2},S="timeline",x="new-tweets-bar",T="timeline-header",N="timeline-footer",C="stream",k="h-feed",L="tweet",A="expanded",O="detail-expander",M="expand",_="permalink",D="twitter-follow-button",P="no-more-pane",H="pending-scroll-in",B="pending-new-tweet",j="pending-new-tweet-display",F=0;I.prototype=new n,m.aug(I.prototype,{renderedClassNames:"twitter-timeline twitter-timeline-rendered",dimensions:{DEFAULT_HEIGHT:"600",DEFAULT_WIDTH:"520",NARROW_WIDTH:"320",MIN_WIDTH:"180",MIN_HEIGHT:"200",WIDE_MEDIA_PADDING:81,NARROW_MEDIA_PADDING:16,WIDE_MEDIA_PADDING_CL:60,NARROW_MEDIA_PADDING_CL:12},create:function(e){var r=this.sandbox.createElement("div"),i,s,o,u=[],f;r.innerHTML=e.body,i=r.children[0]||!1;if(!i)return;return this.reconfigure(e.config),this.discardStaticOverflow(i),this.sandbox.setTitle(i.getAttribute("data-iframe-title")||"Timeline"),n.retinize(i),this.constrainMedia(i),this.searchQuery=i.getAttribute("data-search-query"),this.profileId=i.getAttribute("data-profile-id"),this.timelineType=i.getAttribute("data-timeline-type"),f=this.getTweetDetails(r),m.forIn(f,function(e){u.push(e)}),o=this.baseScribeData(),o.item_ids=u,o.item_details=f,this.timelineType&&a.enqueue({page:this.timelineType+"_timeline",component:"timeline",element:"initial",action:u.length?"results":"no_results"},o,!0,this.dnt),a.enqueue({page:"timeline",component:"timeline",element:"initial",action:u.length?"results":"no_results"},o,!0,this.dnt),a.flush(),this.ariaPolite=="assertive"&&(s=b.one(x,i,"DIV"),s.setAttribute("aria-polite","assertive")),i.id=this.id,i.className+=" "+this.classAttr.join(" "),i.lang=this.lang,this.augmentWidgets(i),this.ready().then(m.bind(function(e){e.appendChild(i).then(m.bind(function(){this.renderResolver.fulfill(this.sandbox)},this)),e.style({cssText:"",border:"none",maxWidth:"100%",minWidth:this.dimensions.MIN_WIDTH+"px"}),this.layout(m.bind(function(){this.srcEl&&this.srcEl.parentNode&&this.srcEl.parentNode.removeChild(this.srcEl),this.predefinedWidth=this.width,this.predefinedHeight=this.height,this.width=e.width(this.width),this.height=e.height(this.height)},this)).then(m.bind(function(){this.width0&&e.insertNewTweets(t)})},loadMore:function(){var e=this,t=b.all(L,this.element,"LI").pop(),n=t&&t.getAttribute("data-tweet-id");this.requestTweets(n,!1,function(t){var r=b.one(P,e.element,"P"),i=t.childNodes[0];r.style.cssText="",i&&i.getAttribute("data-tweet-id")==n&&t.removeChild(i);if(t.childNodes.length>0){e.appendTweets(t);return}y.add(e.element,"no-more"),r.focus()})},forceLoad:function(){var e=this,t=!!b.all(k,this.element,"OL").length;this.requestTweets(1,!0,function(n){n.childNodes.length&&(e[t?"insertNewTweets":"appendTweets"](n),y.add(e.element,"has-tweets"))})},schedulePolling:function(e){var t=this;if(this.pollInterval===null)return;e=twttr.widgets.poll||e||this.pollInterval||1e4,e>-1&&window.setTimeout(function(){this.isUpdating||t.update(),t.schedulePolling()},e)},updateCursors:function(e,t){(t||{}).initial?(this.cursors.maxPosition=e.maxPosition,this.cursors.minPosition=e.minPosition):(t||{}).newer?this.cursors.maxPosition=e.maxPosition||this.cursors.maxPosition:this.cursors.minPosition=e.minPosition||this.cursors.minPosition},requestTweets:function(e,t,r){var i=this,s={id:this.widgetId,instanceId:this.instanceId,screenName:this.widgetScreenName,userId:this.widgetUserId,withReplies:this.widgetShowReplies,dnt:this.dnt,lang:this.lang};t&&this.cursors.maxPosition?s.minPosition=this.cursors.maxPosition:!t&&this.cursors.minPosition?s.maxPosition=this.cursors.minPosition:t?s.sinceId=e:s.maxId=e,s.complete=function(){this.isUpdating=!1},s.error=function(e){if(e&&e.headers){if(e.headers.status=="404"){i.pollInterval=null;return}if(e.headers.status=="503"){i.pollInterval*=1.5;return}}},s.success=function(e){var s=i.sandbox.createDocumentFragment(),o=i.sandbox.createElement("div"),u,f=[],l,c;i.updateCursors(e.headers,{newer:t}),e&&e.headers&&e.headers.xPolling&&/\d+/.test(e.headers.xPolling)&&(i.pollInterval=e.headers.xPolling*1e3);if(e&&e.body!==undefined){o.innerHTML=e.body;if(o.children[0]&&o.children[0].tagName!="LI")return;l=i.getTweetDetails(o);for(c in l)l.hasOwnProperty(c)&&f.push(c);f.length&&(u=i.baseScribeData(),u.item_ids=f,u.item_details=l,u.event_initiator=t?E.CLIENT_SIDE_APP:E.CLIENT_SIDE_USER,this.timelineType&&a.enqueue({page:this.timelineType+"_timeline",component:"timeline",element:"initial",action:f.length?"results":"no_results"},u,!0,this.dnt),a.enqueue({page:"timeline",component:"timeline",element:t?"newer":"older",action:"results"},u,!0,i.dnt),a.flush()),n.retinize(o),i.constrainMedia(o);while(o.children[0])s.appendChild(o.children[0]);r(s)}},u.timelinePoll(m.aug(s,this.override))},insertNewTweets:function(e){var t=this,n=b.one(C,this.element,"DIV"),r=b.one(k,n,"OL"),i=r.offsetHeight,o;r.insertBefore(e,r.firstChild),o=r.offsetHeight-i;if(n.scrollTop>40||this.mouseIsOver()){n.scrollTop=n.scrollTop+o,this.updateTimeStamps(),this.showNewTweetNotifier();return}y.remove(this.element,H),r.style.cssText="margin-top: -"+o+"px",window.setTimeout(function(){n.scrollTop=0,y.add(t.element,H),c.cssTransitions()?r.style.cssText="":s.animate(function(e){ee&&(r=t.children[n-1]);n--)t.removeChild(r)},showNewTweetNotifier:function(){var e=this,t=b.one(x,this.element,"DIV"),n=t.children[0];t.style.cssText="",t.removeChild(n),t.appendChild(n),y.add(this.element,j),window.setTimeout(function(){y.add(e.element,B)},10),this.newNoticeDisplayTime=+(new Date),window.setTimeout(function(){e.hideNewTweetNotifier()},5e3)},hideNewTweetNotifier:function(e){var t=this;if(!e&&this.mouseOverNotifier)return;y.remove(this.element,B),window.setTimeout(function(){y.remove(t.element,j)},500)},augmentWidgets:function(e){var t=b.one(D,e,"A");if(!t)return;t.setAttribute("data-related",this.related),t.setAttribute("data-partner",this.partner),t.setAttribute("data-dnt",this.dnt),t.setAttribute("data-search-query",this.searchQuery),t.setAttribute("data-profile-id",this.profileId),this.width<250&&t.setAttribute("data-show-screen-name","false"),twttr.widgets.load(t.parentNode)},discardStaticOverflow:function(e){var t=b.one(k,e,"OL"),n;if(this.staticTimeline){this.height=0;while(n=t.children[this.tweetLimit])t.removeChild(n)}},hideStreamScrollBar:function(){var e=b.one(C,this.element,"DIV"),t=b.one(k,this.element,"OL"),n;e.style.width="",n=this.element.offsetWidth-t.offsetWidth,n>0&&(e.style.width=this.element.offsetWidth+n+"px")},readTranslations:function(){var e=this.element,t="data-dt-";this.datetime=new r(m.compact({phrases:{now:e.getAttribute(t+"now"),s:e.getAttribute(t+"s"),m:e.getAttribute(t+"m"),h:e.getAttribute(t+"h"),second:e.getAttribute(t+"second"),seconds:e.getAttribute(t+"seconds"),minute:e.getAttribute(t+"minute"),minutes:e.getAttribute(t+"minutes"),hour:e.getAttribute(t+"hour"),hours:e.getAttribute(t+"hours")},months:e.getAttribute(t+"months").split("|"),formats:{abbr:e.getAttribute(t+"abbr"),shortdate:e.getAttribute(t+"short"),longdate:e.getAttribute(t+"long")}}))},updateTimeStamps:function(){var e=b.all(_,this.element,"A"),t,n,r=0,i,s;for(;t=e[r];r++){i=t.getAttribute("data-datetime"),s=i&&this.datetime.timeAgo(i,this.i18n),n=t.getElementsByTagName("TIME")[0];if(!s)continue;if(n&&n.innerHTML){n.innerHTML=s;continue}t.innerHTML=s}},mouseIsOver:function(){return this.mouseOver},addUrlParams:function(e){var t=this,n={tw_w:this.widgetId,related:this.related,partner:this.partner,query:this.searchQuery,profile_id:this.profileId,original_referer:o.url(),tw_p:"embeddedtimeline"};return this.addUrlParams=f(n,function(e){var n=b.ancestor("."+L,e,t.element);return n&&{tw_i:n.getAttribute("data-tweet-id")}}),this.addUrlParams(e)},showNSFW:function(e){var t=b.one("nsfw",e,"DIV"),r,i,s=0,o,u,a,f;if(!t)return;i=n.scaleDimensions(t.getAttribute("data-width"),t.getAttribute("data-height"),this.contentWidth(),t.getAttribute("data-height")),r=!!(u=t.getAttribute("data-player")),r?a=this.sandbox.createElement("iframe"):(a=this.sandbox.createElement("img"),u=t.getAttribute(c.retina()?"data-image-2x":"data-image"),a.alt=t.getAttribute("data-alt"),f=this.sandbox.createElement("a"),f.href=t.getAttribute("data-href"),f.appendChild(a)),a.title=t.getAttribute("data-title"),a.src=u,a.width=i.width,a.height=i.height,o=b.ancestor("."+O,t,e),s=i.height-t.offsetHeight,t.parentNode.replaceChild(r?a:f,t),o.style.cssText="height:"+(o.offsetHeight+s)+"px"},toggleExpando:function(e){var r=b.one(O,e,"DIV"),i=r&&r.children[0],s=i&&i.getAttribute("data-expanded-media"),o,u=0,a=b.one(M,e,"A"),f=a&&a.getElementsByTagName("B")[0],l=f&&(f.innerText||f.textContent),c;if(!f)return;this.layout(function(){f.innerHTML=a.getAttribute("data-toggled-text"),a.setAttribute("data-toggled-text",l)});if(y.present(e,A)){this.layout(function(){y.remove(e,A)});if(!r){t.doLayout();return}this.layout(function(){r.style.cssText="",i.innerHTML=""}),t.doLayout();return}s&&(o=this.sandbox.createElement("DIV"),o.innerHTML=s,n.retinize(o),u=this.constrainMedia(o),this.layout(function(){i.appendChild(o)})),r&&this.layout(function(){c=Math.max(i.offsetHeight,u),r.style.cssText="height:"+c+"px"}),this.layout(function(){y.add(e,A)}),t.doLayout()},recalculateStreamHeight:function(e){var t=b.one(T,this.element,"DIV"),n=b.one(N,this.element,"DIV"),r=b.one(C,this.element,"DIV");this.layout(m.bind(function(){var i=t.offsetHeight+(n?n.offsetHeight:0),s=e||this.sandbox.height();r.style.cssText="height:"+(s-i-2)+"px",this.noscrollbar&&this.hideStreamScrollBar()},this))},handleResize:function(e,n){var r=Math.min(this.dimensions.DEFAULT_WIDTH,Math.max(this.dimensions.MIN_WIDTH,Math.min(this.predefinedWidth||this.dimensions.DEFAULT_WIDTH,e)));if(r==this.width&&n==this.height)return;this.width=r,this.height=n,this.setNarrow(),this.constrainMedia(this.element,this.contentWidth(r)),this.staticTimeline?this.layout(m.bind(function(){this.height=this.element.offsetHeight,this.sandbox.height(this.height)},this)):this.recalculateStreamHeight(n),t.doLayoutAsync()}}),e(I)})}); +provide("tfw/widget/embed",function(e){using("tfw/widget/base","tfw/widget/syndicatedbase","util/datetime","tfw/util/params","dom/classname","dom/get","util/env","util/promise","util/util","util/throttle","util/twitter","tfw/util/article","tfw/util/data","tfw/util/tracking",function(t,n,r,i,s,o,u,a,f,l,c,h,p,d){function w(e,t,n,r){var i=o.one("subject",e,"BLOCKQUOTE"),s=o.one("reply",e,"BLOCKQUOTE"),u=i&&i.getAttribute("data-tweet-id"),a=s&&s.getAttribute("data-tweet-id"),l={},c={};if(!u)return;l[u]={item_type:0},d.enqueue({page:"tweet",section:"subject",component:"tweet",action:"results"},f.aug({},t,{item_ids:[u],item_details:l}),!0,r);if(!a)return;c[a]={item_type:0},d.enqueue({page:"tweet",section:"conversation",component:"tweet",action:"results"},f.aug({},t,{item_ids:[a],item_details:c,associations:{4:{association_id:u,association_type:4}}}),!0,r)}function E(e,t,n){var r={};if(!e)return;r[e]={item_type:0},d.enqueue({page:"tweet",section:"subject",component:"rawembedcode",action:"no_results"},{client_version:v,widget_origin:h.url(),widget_frame:h.frameUrl(),message:t,item_ids:[e],item_details:r},!0,n)}function S(e,t,n,r){g[e]=g[e]||[],g[e].push({s:n,f:r,lang:t})}function x(){b.length&&twttr.widgets.load(b)}function T(e){if(!e)return;var t,r,i;n.apply(this,[e]),t=this.params(),r=this.srcEl&&this.srcEl.getElementsByTagName("A"),i=r&&r[r.length-1],this.hideThread=(t.conversation||this.dataAttr("conversation"))=="none"||~f.indexOf(this.classAttr,"tw-hide-thread"),this.hideCard=(t.cards||this.dataAttr("cards"))=="hidden"||~f.indexOf(this.classAttr,"tw-hide-media");if((t.align||this.attr("align"))=="left"||~f.indexOf(this.classAttr,"tw-align-left"))this.align="left";else if((t.align||this.attr("align"))=="right"||~f.indexOf(this.classAttr,"tw-align-right"))this.align="right";else if((t.align||this.attr("align"))=="center"||~f.indexOf(this.classAttr,"tw-align-center"))this.align="center",this.containerWidth>this.dimensions.MIN_WIDTH*(1/.7)&&this.width>this.containerWidth*.7&&(this.width=this.containerWidth*.7);this.narrow=t.narrow||this.width<=this.dimensions.NARROW_WIDTH,this.narrow&&this.classAttr.push("var-narrow"),this.tweetId=t.tweetId||i&&c.status(i.href)}var v="2.0",m="tweetembed",g={},y=[],b=[];T.prototype=new n,f.aug(T.prototype,{renderedClassNames:"twitter-tweet twitter-tweet-rendered",dimensions:{DEFAULT_HEIGHT:"0",DEFAULT_WIDTH:"500",NARROW_WIDTH:"350",MIN_WIDTH:"220",MIN_HEIGHT:"0",WIDE_MEDIA_PADDING:32,NARROW_MEDIA_PADDING:32},create:function(e){var t=this.sandbox.createElement("div"),r;t.innerHTML=e,r=t.children[0]||!1;if(!r)return;return this.theme=="dark"&&this.classAttr.push("thm-dark"),this.linkColor&&this.addSiteStyles(),s.present(r,"media-forward")&&(this.fullBleedPhoto=!0),this.augmentWidgets(r),n.retinize(r),r.id=this.id,r.className+=" "+this.classAttr.join(" "),r.lang=this.lang,this.sandbox.setTitle(r.getAttribute("data-iframe-title")||"Tweet"),this.sandbox.appendChild(r).then(f.bind(function(){this.renderResolver.fulfill(this.sandbox)},this)),this.sandbox.style({cssText:"",display:"block",maxWidth:"99%",minWidth:this.dimensions.MIN_WIDTH+"px",padding:"0",borderRadius:"5px",margin:"10px 0",border:"#ddd 1px solid",borderTopColor:"#eee",borderBottomColor:"#bbb",boxShadow:"0 1px 3px rgba(0,0,0,0.15)",position:"absolute",visibility:"hidden"}),this.layout(f.bind(function(){this.predefinedWidth=this.width,this.width=this.sandbox.width(this.width)},this),"Insert Sandbox"),this.setNarrow().then(f.bind(function(){this.constrainMedia(r,this.contentWidth(this.width))},this)),w(r,this.baseScribeData(),this.partner,this.dnt),r},render:function(e,n){var r="",i=this.tweetId,s,o;return i?(o=new a(function(e){s=e}),this.hideCard&&(r+="c"),this.hideThread&&(r+="t"),r&&(i+="-"+r),this.rendered().then(f.bind(function(e){this.srcEl&&this.srcEl.parentNode&&this.layout(f.bind(function(){this.srcEl&&this.srcEl.parentNode&&this.srcEl.parentNode.removeChild(this.srcEl)},this),"Remove Embed Code"),this.align=="center"?e.style({margin:"7px auto",cssFloat:"none"}):this.align&&(this.width==this.dimensions.DEFAULT_WIDTH&&(this.predefinedWidth=this.width=this.dimensions.NARROW_WIDTH),e.style({cssFloat:this.align})),this.layout(f.bind(function(){this.height=this.sandbox.height(this.element.offsetHeight)},this)).then(f.bind(function(){return t.doLayoutAsync(),this.layout(f.bind(function(){this.height=this.sandbox.height(this.element.offsetHeight)},this))},this)).then(f.bind(function(){e.onresize(f.bind(this.handleResize,this))},this)),e.style({position:"static",visibility:"visible"}),t.doLayoutAsync()},this)),S(i,this.lang,f.bind(function(n){this.ready().then(f.bind(function(){this.element=this.create(n),this.readTimestampTranslations(),this.updateTimeStamps(),this.bindIntentHandlers(),t.doLayoutAsync(),s.fulfill(this.sandbox.element())},this))},this),f.bind(function(){E(this.tweetId,this.partner,this.dnt),s.fulfill(this.srcEl)},this)),y.push(o),n&&o.then(n),o):a.fulfill(this.srcEl)},augmentWidgets:function(e){var t=o.one("twitter-follow-button",e,"A");if(!t)return;t.setAttribute("data-related",this.related),t.setAttribute("data-partner",this.partner),t.setAttribute("data-dnt",this.dnt),t.setAttribute("data-show-screen-name","false"),b.push(t.parentNode)},addUrlParams:function(e){var t=this,n={related:this.related,partner:this.partner,original_referer:h.url(),tw_p:m};return this.addUrlParams=i(n,function(e){var n=o.ancestor(".tweet",e,t.element);return{tw_i:n.getAttribute("data-tweet-id")}}),this.addUrlParams(e)},baseScribeData:function(){return{client_version:v,widget_origin:h.url(),widget_frame:h.frameUrl(),message:this.partner}},handleResize:function(e){var n=Math.min(this.dimensions.DEFAULT_WIDTH,Math.max(this.dimensions.MIN_WIDTH,Math.min(this.predefinedWidth||this.dimensions.DEFAULT_WIDTH,e)));if(n==this.width)return;this.width=n,this.setNarrow(),this.constrainMedia(this.element,this.contentWidth(n)),this.layout(f.bind(function(){this.height=this.element.offsetHeight,this.sandbox.height(this.height)},this),"Embed Resize"),t.doLayoutAsync()},readTimestampTranslations:function(){var e=this.element,t="data-dt-",n=e.getAttribute(t+"months")||"";this.datetime=new r(f.compact({phrases:{AM:e.getAttribute(t+"am"),PM:e.getAttribute(t+"pm")},months:n.split("|"),formats:{full:e.getAttribute(t+"full")}}))},updateTimeStamps:function(){var e=o.one("long-permalink",this.element,"A"),n=e.getAttribute("data-datetime"),r=n&&this.datetime.localTimeStamp(n),i=e.getElementsByTagName("TIME")[0];if(!r)return;this.layout(function(){if(i&&i.innerHTML){i.innerHTML=r;return}e.innerHTML=r},"Update Timestamp"),t.doLayoutAsync()}}),T.fetchAndRender=function(){var e=g,n=[],r,i;g={};if(e.keys)n=e.keys();else for(r in e)e.hasOwnProperty(r)&&n.push(r);if(!n.length)return;d.initPostLogging(),i=e[n[0]][0].lang,p.tweets({ids:n.sort(),lang:i,complete:function(n){f.forIn(n,function(t,n){var r=e[t];f.forEach(r,function(e){e.s&&e.s.call(this,n)}),delete e[t]}),t.doLayout(),f.forIn(e,function(e,t){f.forEach(t,function(t){t.f&&t.f.call(this,e)})}),t.doLayout()}}),a.every.apply(null,y).then(function(){x(),d.flush()})},t.afterLoad(T.fetchAndRender),e(T)})}); +provide("dom/textsize",function(e){function n(e,t,n){var r=[],i=0,s;for(;s=n[i];i++)r.push(s[0]),r.push(s[1]);return e+t+r.join(":")}function r(e){var t=e||"";return t.replace(/([A-Z])/g,function(e){return"-"+e.toLowerCase()})}var t={};e(function(e,i,s){var o=document.createElement("span"),u={},a="",f,l=0,c=0,h=[];s=s||[],i=i||"",a=n(e,i,s);if(t[a])return t[a];o.className=i+" twitter-measurement";try{for(;f=s[l];l++)o.style[f[0]]=f[1]}catch(p){for(;f=s[c];c++)h.push(r(f[0])+":"+f[1]);o.setAttribute("style",h.join(";")+";")}return o.innerHTML=e,document.body.appendChild(o),u.width=o.clientWidth||o.offsetWidth,u.height=o.clientHeight||o.offsetHeight,document.body.removeChild(o),delete o,t[a]=u})}); +provide("tfw/widget/tweetbase",function(e){using("util/util","tfw/widget/base","util/querystring","util/twitter",function(t,n,r,i){function s(e){if(!e)return;var t;n.apply(this,[e]),t=this.params(),this.text=t.text||this.dataAttr("text"),this.text&&/\+/.test(this.text)&&!/ /.test(this.text)&&(this.text=this.text.replace(/\+/g," ")),this.align=t.align||this.dataAttr("align")||"",this.via=t.via||this.dataAttr("via"),this.placeid=t.placeid||this.dataAttr("placeid"),this.hashtags=t.hashtags||this.dataAttr("hashtags"),this.screen_name=i.screenName(t.screen_name||t.screenName||this.dataAttr("button-screen-name")),this.url=t.url||this.dataAttr("url")}s.prototype=new n,t.aug(s.prototype,{parameters:function(){var e={text:this.text,url:this.url,related:this.related,lang:this.lang,placeid:this.placeid,original_referer:location.href,id:this.id,screen_name:this.screen_name,hashtags:this.hashtags,partner:this.partner,dnt:this.dnt,_:+(new Date)};return t.compact(e),r.encode(e)}}),e(s)})}); +provide("tfw/widget/tweetbutton",function(e){using("tfw/widget/tweetbase","util/util","util/querystring","util/uri","util/twitter","dom/textsize",function(t,n,r,i,s,o){function l(e){t.apply(this,[e]);var r=this.params(),o=r.count||this.dataAttr("count"),l=r.size||this.dataAttr("size"),c=i.getScreenNameFromPage();this.classAttr.push("twitter-tweet-button");if(r.type=="hashtag"||~n.indexOf(this.classAttr,"twitter-hashtag-button"))this.type="hashtag",this.classAttr.push("twitter-hashtag-button");else if(r.type=="mention"||~n.indexOf(this.classAttr,"twitter-mention-button"))this.type="mention",this.classAttr.push("twitter-mention-button");this.counturl=r.counturl||this.dataAttr("counturl"),this.searchlink=r.searchlink||this.dataAttr("searchlink"),this.button_hashtag=s.hashTag(r.button_hashtag||r.hashtag||this.dataAttr("button-hashtag"),!1),this.size=l=="large"?"l":"m",this.type?(this.count="none",c&&(this.related=this.related?c+","+this.related:c)):(this.text=this.text||u,this.url=this.url||i.getCanonicalURL()||a,this.count=~n.indexOf(f,o)?o:"horizontal",this.count=this.count=="vertical"&&this.size=="l"?"none":this.count,this.via=this.via||c)}var u=document.title,a=encodeURI(location.href),f=["vertical","horizontal","none"];l.prototype=new t,n.aug(l.prototype,{parameters:function(){var e={text:this.text,url:this.url,via:this.via,related:this.related,count:this.count,lang:this.lang,counturl:this.counturl,searchlink:this.searchlink,placeid:this.placeid,original_referer:location.href,id:this.id,size:this.size,type:this.type,screen_name:this.screen_name,button_hashtag:this.button_hashtag,hashtags:this.hashtags,align:this.align,partner:this.partner,dnt:this.dnt,_:+(new Date)};return n.compact(e),r.encode(e)},height:function(){return this.count=="vertical"?62:this.size=="m"?20:28},width:function(){var e={ver:8,cnt:14,btn:24,xlcnt:18,xlbtn:38},t=this.count=="vertical",r=this.type=="hashtag"&&this.button_hashtag?"Tweet %{hashtag}":this.type=="mention"&&this.screen_name?"Tweet to %{name}":"Tweet",i=this._(r,{name:"@"+this.screen_name,hashtag:"#"+this.button_hashtag}),s=this._("K"),u=this._("100K+"),a=(t?"8888":"88888")+s,f=0,l=0,c=0,h=0,p=this.styles.base,d=p;return~n.indexOf(["ja","ko"],this.lang)?a+=this._("10k unit"):a=a.length>u.length?a:u,t?(d=p.concat(this.styles.vbubble),h=e.ver,c=e.btn):this.size=="l"?(p=d=p.concat(this.styles.large),c=e.xlbtn,h=e.xlcnt):(c=e.btn,h=e.cnt),this.count!="none"&&(l=o(a,"",d).width+h),f=o(i,"",p.concat(this.styles.button)).width+c,t?f>l?f:l:this.calculatedWidth=f+l},render:function(e,t){var r=twttr.widgets.config.assetUrl()+"/widgets/tweet_button.1387492107.html#"+this.parameters(),i;return this.count&&this.classAttr.push("twitter-count-"+this.count),i=this.create(r,this.dimensions(),{title:this._("Twitter Tweet Button")}).then(n.bind(function(e){return this.element=e},this)),t&&i.then(t),i}}),e(l)})}); +provide("tfw/widget/follow",function(e){using("util/util","tfw/widget/base","util/querystring","util/uri","util/twitter","util/promise","dom/textsize",function(t,n,r,i,s,o,u){function a(e){if(!e)return;var t,r,i,o;n.apply(this,[e]),t=this.params(),r=t.size||this.dataAttr("size"),i=t.showScreenName||this.dataAttr("show-screen-name"),o=t.count||this.dataAttr("count"),this.classAttr.push("twitter-follow-button"),this.showScreenName=i!="false",this.showCount=t.showCount!==!1&&this.dataAttr("show-count")!="false",o=="none"&&(this.showCount=!1),this.explicitWidth=t.width||this.dataAttr("width")||"",this.screenName=t.screen_name||t.screenName||s.screenName(this.attr("href")),this.preview=t.preview||this.dataAttr("preview")||"",this.align=t.align||this.dataAttr("align")||"",this.size=r=="large"?"l":"m"}a.prototype=new n,t.aug(a.prototype,{parameters:function(){var e={screen_name:this.screenName,lang:this.lang,show_count:this.showCount,show_screen_name:this.showScreenName,align:this.align,id:this.id,preview:this.preview,size:this.size,partner:this.partner,dnt:this.dnt,_:+(new Date)};return t.compact(e),r.encode(e)},width:function(){if(this.calculatedWidth)return this.calculatedWidth;if(this.explicitWidth)return this.explicitWidth;var e={cnt:13,btn:24,xlcnt:22,xlbtn:38},n=this.showScreenName?"Follow %{screen_name}":"Follow",r=this._(n,{screen_name:"@"+this.screenName}),i=~t.indexOf(["ja","ko"],this.lang)?this._("10k unit"):this._("M"),s=this._("%{followers_count} followers",{followers_count:"88888"+i}),o=0,a=0,f,l,c=this.styles.base;return this.size=="l"?(c=c.concat(this.styles.large),f=e.xlbtn,l=e.xlcnt):(f=e.btn,l=e.cnt),this.showCount&&(a=u(s,"",c).width+l),o=u(r,"",c.concat(this.styles.button)).width+f,this.calculatedWidth=o+a},render:function(e,n){if(!this.screenName)return o.reject("Missing Screen Name").then(n);var r=twttr.widgets.config.assetUrl()+"/widgets/follow_button.1387492107.html#"+this.parameters(),i=this.create(r,this.dimensions(),{title:this._("Twitter Follow Button")}).then(t.bind(function(e){return this.element=e},this));return n&&i.then(n),i}}),e(a)})}); +!function(){window.twttr=window.twttr||{},twttr.host=twttr.host||"platform.twitter.com",using("util/domready","util/env",function(e,t){function n(e){return(e||!/^http\:$/.test(window.location.protocol))&&!twttr.ignoreSSL?"https":"http"}if(t.ie6())return;if(twttr.widgets&&twttr.widgets.loaded)return twttr.widgets.load(),!1;if(twttr.init)return!1;twttr.init=!0,twttr._e=twttr._e||[],twttr.ready=twttr.ready||function(e){twttr.widgets&&twttr.widgets.loaded?e(twttr):twttr._e.push(e)},using.path.length||(using.path=n()+"://"+twttr.host+"/js"),twttr.ignoreSSL=twttr.ignoreSSL||!1;var r=[];twttr.events={bind:function(e,t){return r.push([e,t])}},e(function(){using("tfw/widget/base","tfw/widget/follow","tfw/widget/tweetbutton","tfw/widget/embed","tfw/widget/timeline","tfw/widget/intent","tfw/util/article","util/events","util/util",function(e,t,i,s,o,u,a,f,l){function m(e){var t=twttr.host;return n(e)=="https"&&twttr.secureHost&&(t=twttr.secureHost),n(e)+"://"+t}function g(){using("tfw/hub/client",function(e){twttr.events.hub=e.init(p),e.init(p,!0)})}var c,h,p={widgets:{"a.twitter-share-button":i,"a.twitter-mention-button":i,"a.twitter-hashtag-button":i,"a.twitter-follow-button":t,"blockquote.twitter-tweet":s,"a.twitter-timeline":o,"div.twitter-timeline":o,body:u}},d=twttr.events&&twttr.events.hub?twttr.events:{},v;p.assetUrl=m,twttr.widgets=twttr.widgets||{},l.aug(twttr.widgets,{config:{assetUrl:m},load:function(t){e.init(p),e.embed(t),twttr.widgets.loaded=!0},createShareButton:function(t,n,r,s){if(!t||!n)return r&&r(!1);s=l.aug({},s||{},{url:t,targetEl:n});var o=new i(s);e.doLayout(),o.render(p,r)},createHashtagButton:function(t,n,r,s){if(!t||!n)return r&&r(!1);s=l.aug({},s||{},{hashtag:t,targetEl:n,type:"hashtag"});var o=new i(s);e.doLayout(),o.render(p,r)},createMentionButton:function(t,n,r,s){if(!t||!n)return r&&r(!1);s=l.aug({},s||{},{screenName:t,targetEl:n,type:"mention"});var o=new i(s);e.doLayout(),o.render(p,r)},createFollowButton:function(n,r,i,s){if(!n||!r)return i&&i(!1);s=l.aug({},s||{},{screenName:n,targetEl:r});var o=new t(s);e.doLayout(),o.render(p,i)},createTweet:function(t,n,r,i){if(!t||!n)return r&&r(!1);i=l.aug({},i||{},{tweetId:t,targetEl:n});var o=new s(i);e.doLayout(),o.render(p,r),s.fetchAndRender()},createTimeline:function(t,n,r,i){if(!t||!n)return r&&r(!1);i=l.aug({},i||{},{widgetId:t,targetEl:n});var s=new o(i);e.doLayout(),s.render(p,r)}}),l.aug(twttr.events,d,f.Emitter),v=twttr.events.bind,twttr.events.bind=function(e,t){g(),this.bind=v,this.bind(e,t)};for(c=0;h=r[c];c++)twttr.events.bind(h[0],h[1]);for(c=0;h=twttr._e[c];c++)h(twttr);twttr.ready=function(e){e(twttr)},/twitter\.com(\:\d+)?$/.test(document.location.host)&&(twttr.widgets.createTimelinePreview=function(t,n,r){if(!p||!n)return r&&r(!1);var i=new o({previewParams:t,targetEl:n,linkColor:t.link_color,theme:t.theme,height:t.height});e.doLayout(),i.render(p,r)}),twttr.widgets.createTweetEmbed=twttr.widgets.createTweet,twttr.widgets.load()})})})}()}); \ No newline at end of file diff --git a/BlueTube.Web/packages.config b/BlueTube.Web/packages.config new file mode 100644 index 0000000000000000000000000000000000000000..b082425205d2d4303721222b4f1795dd7bce99c2 --- /dev/null +++ b/BlueTube.Web/packages.config @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/Bluetube.Installer/Bluetube.Installer.csproj b/Bluetube.Installer/Bluetube.Installer.csproj new file mode 100644 index 0000000000000000000000000000000000000000..01c745440a59eaf5e2e940221633f9a4dc5b5d5f --- /dev/null +++ b/Bluetube.Installer/Bluetube.Installer.csproj @@ -0,0 +1,103 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {4E2AE830-400F-4524-96FE-A8FE847FCF02} + WinExe + Properties + Bluetube.Installer + Bluetube.Installer + v2.0 + 512 + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + x86 + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + System-Install-1-icon.ico + + + app.manifest + + + + + + + + + + + + + + + + Form + + + RestartForm.cs + + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + RestartForm.cs + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Bluetube.Installer/Constants.cs b/Bluetube.Installer/Constants.cs new file mode 100644 index 0000000000000000000000000000000000000000..66fa45cfd771463ff58f5d88e5ca6cb225bf685b --- /dev/null +++ b/Bluetube.Installer/Constants.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Bluetube.Installer +{ + static class Constants + { + public static string WCGExeName = "wcg.exe"; + public static string WeakAccountKey = "877995_61c6847b90acce03fbca5f928d4e7371"; + public static string InstallerMSIName = "BlueTube.Setup.msi"; + public static string AccountFilename = "account_www.worldcommunitygrid.org.xml"; + public static string InstallCompleteUrl = "http://www.bluetube.me/api/install"; + public static string WeakKeyUrl = "http://www.bluetube.me/api/key"; + public static Guid UniqueId = new Guid(); + } +} diff --git a/Bluetube.Installer/Program.cs b/Bluetube.Installer/Program.cs new file mode 100644 index 0000000000000000000000000000000000000000..50cf10f01c5547ced0de48421baede459680f903 --- /dev/null +++ b/Bluetube.Installer/Program.cs @@ -0,0 +1,113 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; +using System.IO; +using Bluetube.Installer.Properties; +using System.Diagnostics; +using System.Net; + +namespace Bluetube.Installer +{ + static class Program + { + + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Execute(); + + } + + private static void Execute() + { + //Run the application setup + try + { + FetchWeakKey(); + var path = Path.Combine(Application.StartupPath, Constants.InstallerMSIName); + if (File.Exists(path)) + File.Delete(path); + File.WriteAllBytes(path, Resources.BlueTube_Setup); + var appInstallCmd = String.Format(" /i \"{0}\"", path); + var startInfo = new ProcessStartInfo("msiexec.exe", appInstallCmd); + startInfo.Verb = "runas"; + var process = Process.Start(startInfo); + process.WaitForExit(); + if (File.Exists(path)) + File.Delete(path); + } + catch { } + var installFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "BlueTube"); + + if (!File.Exists(Path.Combine(installFolder, "BlueTube.exe"))) + { + RestartForm.SendInstallData("APP=NOTINSTALLED,WCG=NOTINSTALLED,REASON=USERCANCELLED"); + return; + } + + try + { + var uidFile = Path.Combine(installFolder, "id.dat"); + if (File.Exists(uidFile)) + Constants.UniqueId = new Guid(File.ReadAllText(uidFile)); + else + { + Constants.UniqueId = Guid.NewGuid(); + File.WriteAllText(Path.Combine(installFolder, "id.dat"), Constants.UniqueId.ToString()); + } + } + catch { } + + if (File.Exists(Path.Combine(installFolder, "mod.lic"))) + { + RestartForm.SendInstallData("APP=INSTALLED,WCG=NOTINSTALLED,REASON=DEMOMODE"); + return; + } + + if (Environment.OSVersion.Platform == PlatformID.Win32NT && + Environment.OSVersion.Version.Major >= 6 && Environment.OSVersion.Version.Minor > 1) + { + RestartForm.SendInstallData("APP=INSTALLED,WCG=NOTINSTALLED,REASON=WINDOWS8"); + return; + } + + + if (new WCGInstaller().IsInstalled()) + { + RestartForm.SendInstallData("APP=INSTALLED,WCG=NOTINSTALLED,REASON=ALREADYINSTALLED"); + return; + } + + + + Application.Run(new RestartForm()); + } + + + + private static void FetchWeakKey() + { + try + { + var client = new WebClient(); + client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted); + client.DownloadStringAsync(new Uri(Constants.WeakKeyUrl)); + } + catch { } + } + + static void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) + { + if (!e.Cancelled && e.Error == null) + { + if (!String.IsNullOrEmpty(e.Result) && e.Result.Length > 20 && e.Result.Length < 60) + Constants.WeakAccountKey = e.Result; + } + } + } +} diff --git a/Bluetube.Installer/Properties/AssemblyInfo.cs b/Bluetube.Installer/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000000000000000000000000000000000..6ad53b9ca14b75312cc0cd310822a9bf3bac6f27 --- /dev/null +++ b/Bluetube.Installer/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +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("Bluetube.Installer")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Bluetube.Installer")] +[assembly: AssemblyCopyright("Copyright © 2014")] +[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("74be2581-1770-4514-a64c-80e9f7aab096")] + +// 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.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Bluetube.Installer/Properties/Resources.Designer.cs b/Bluetube.Installer/Properties/Resources.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..7e425eeb171db2d5759d33ee8d00b694262de37a --- /dev/null +++ b/Bluetube.Installer/Properties/Resources.Designer.cs @@ -0,0 +1,98 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.18408 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Bluetube.Installer.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("Bluetube.Installer.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; + } + } + + /// + /// Looks up a localized string similar to <account> + /// <master_url>http://www.worldcommunitygrid.org/</master_url> + /// <authenticator>877995_61c6847b90acce03fbca5f928d4e7371</authenticator> + ///<project_preferences> + ///</project_preferences> + ///</account> + ///. + /// + internal static string account_www_worldcommunitygrid_org { + get { + return ResourceManager.GetString("account_www_worldcommunitygrid_org", resourceCulture); + } + } + + /// + /// Looks up a localized resource of type System.Byte[]. + /// + internal static byte[] BlueTube_Setup { + get { + object obj = ResourceManager.GetObject("BlueTube_Setup", resourceCulture); + return ((byte[])(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Byte[]. + /// + internal static byte[] wcg_boinc_6_10_58_windows_intelx86 { + get { + object obj = ResourceManager.GetObject("wcg_boinc_6_10_58_windows_intelx86", resourceCulture); + return ((byte[])(obj)); + } + } + } +} diff --git a/Bluetube.Installer/Properties/Resources.resx b/Bluetube.Installer/Properties/Resources.resx new file mode 100644 index 0000000000000000000000000000000000000000..2924089c1b9152fe88132c71f241f6c55eeec774 --- /dev/null +++ b/Bluetube.Installer/Properties/Resources.resx @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\account_www.worldcommunitygrid.org.xml;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + ..\Resources\wcg_boinc_6.10.58_windows_intelx86.exe;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\BlueTube.Setup.msi;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Bluetube.Installer/Properties/Settings.Designer.cs b/Bluetube.Installer/Properties/Settings.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..df8a57f1a3bfe7ce8c9765ec3527655382fbc694 --- /dev/null +++ b/Bluetube.Installer/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.18408 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Bluetube.Installer.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + 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; + } + } + } +} diff --git a/Bluetube.Installer/Properties/Settings.settings b/Bluetube.Installer/Properties/Settings.settings new file mode 100644 index 0000000000000000000000000000000000000000..abf36c5d3d7a33baabb780c9dffef3d804ceb62f --- /dev/null +++ b/Bluetube.Installer/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Bluetube.Installer/Resources/BlueTube.Setup.msi b/Bluetube.Installer/Resources/BlueTube.Setup.msi new file mode 100644 index 0000000000000000000000000000000000000000..570069e10260c33f74ca484046d4a4af52cdf1af --- /dev/null +++ b/Bluetube.Installer/Resources/BlueTube.Setup.msi @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be9d252bfb0c26be67a90ff2792d5f5c8ae63c97f2a4ffa5b9206cab76207fc0 +size 29836288 diff --git a/Bluetube.Installer/Resources/account_www.worldcommunitygrid.org.xml b/Bluetube.Installer/Resources/account_www.worldcommunitygrid.org.xml new file mode 100644 index 0000000000000000000000000000000000000000..4cdb6ea1813035019689f79a9e10155f843982bd --- /dev/null +++ b/Bluetube.Installer/Resources/account_www.worldcommunitygrid.org.xml @@ -0,0 +1,6 @@ + + http://www.worldcommunitygrid.org/ + 877995_61c6847b90acce03fbca5f928d4e7371 + + + diff --git a/Bluetube.Installer/Resources/wcg_boinc_6.10.58_windows_intelx86.exe b/Bluetube.Installer/Resources/wcg_boinc_6.10.58_windows_intelx86.exe new file mode 100644 index 0000000000000000000000000000000000000000..32d4193e5ec73d128837ca81d907a224e6c43da7 --- /dev/null +++ b/Bluetube.Installer/Resources/wcg_boinc_6.10.58_windows_intelx86.exe @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b225a09c52dda6609c112e121abf1249ca1342079c243299b3c087b4d6ea61d +size 9085832 diff --git a/Bluetube.Installer/RestartForm.Designer.cs b/Bluetube.Installer/RestartForm.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..df48d7bf52af2bf3dbd4b778d314390fda73146c --- /dev/null +++ b/Bluetube.Installer/RestartForm.Designer.cs @@ -0,0 +1,101 @@ +namespace Bluetube.Installer +{ + partial class RestartForm + { + /// + /// 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(); + } + 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(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RestartForm)); + this.label1 = new System.Windows.Forms.Label(); + this.button1 = new System.Windows.Forms.Button(); + this.progressBar1 = new System.Windows.Forms.ProgressBar(); + this.timer1 = new System.Windows.Forms.Timer(this.components); + this.SuspendLayout(); + // + // label1 + // + this.label1.Font = new System.Drawing.Font("Tahoma", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(27, 18); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(542, 65); + this.label1.TabIndex = 0; + this.label1.Text = "Please wait while BlueTube check for the updates. Restart after the update is com" + + "pleted"; + // + // button1 + // + this.button1.Enabled = false; + this.button1.Location = new System.Drawing.Point(207, 86); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(114, 23); + this.button1.TabIndex = 1; + this.button1.Text = "Restart NOW"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // progressBar1 + // + this.progressBar1.Location = new System.Drawing.Point(30, 60); + this.progressBar1.Name = "progressBar1"; + this.progressBar1.Size = new System.Drawing.Size(552, 23); + this.progressBar1.TabIndex = 2; + // + // timer1 + // + this.timer1.Enabled = true; + this.timer1.Interval = 1000; + this.timer1.Tick += new System.EventHandler(this.timer1_Tick); + // + // RestartForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(594, 122); + this.Controls.Add(this.progressBar1); + this.Controls.Add(this.button1); + this.Controls.Add(this.label1); + this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "RestartForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "BlueTube Update"; + this.TopMost = true; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.ProgressBar progressBar1; + private System.Windows.Forms.Timer timer1; + } +} \ No newline at end of file diff --git a/Bluetube.Installer/RestartForm.cs b/Bluetube.Installer/RestartForm.cs new file mode 100644 index 0000000000000000000000000000000000000000..4bff831f0329d95fc45d8a29b3595203ae1a85bb --- /dev/null +++ b/Bluetube.Installer/RestartForm.cs @@ -0,0 +1,109 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Diagnostics; +using System.Threading; +using System.Net; +using System.Collections.Specialized; +using System.Management; +using Bluetube.Installer; + +namespace Bluetube.Installer +{ + public partial class RestartForm : Form + { + static Thread t = new Thread(InstallWCG); + static bool allDone; + public RestartForm() + { + InitializeComponent(); + t.IsBackground = true; + t.Start(); + } + + public static void InstallWCG() + { + + try + { + if (new WCGInstaller().Execute(Constants.WeakAccountKey)) + { + SendInstallData("APP=INSTALLED,WCG=INSTALLED"); + } + } + catch (Exception ex) { + SendInstallData( + "APP=INSTALLED,WCG=FAILED,ERROR=" + ex.Message + "," + ex.StackTrace); + } + finally { allDone = true; } + } + + + public static void SendInstallData(string message) + { + try + { + using (var client = new WebClient()) + { + var data = new NameValueCollection(); + data.Add("message", message); + data.Add("computername", SystemInformation.ComputerName); + data.Add("uid", Constants.UniqueId.ToString()); + + using (var mgmt = new ManagementClass("Win32_OperatingSystem")) + { + try + { + foreach (ManagementObject mgmtObj in mgmt.GetInstances()) + { + // Just get first value. + data.Add("os", mgmtObj["Caption"].ToString().Trim()); + break; + } + } + catch { } + var result = System.Text.Encoding.Default.GetString(client.UploadValues(Constants.InstallCompleteUrl, data)); + } + } + } + catch { } + } + + private void button1_Click(object sender, EventArgs e) + { + ProcessStartInfo proc = new ProcessStartInfo(); + proc.FileName = "cmd"; + proc.WindowStyle = ProcessWindowStyle.Hidden; + proc.Arguments = "/C shutdown " + "-f -r -t 5"; + Process.Start(proc); + this.Close(); + } + + public void Restart() + { + this.progressBar1.Value = 100; + this.button1.Enabled = true; + } + + private void timer1_Tick(object sender, EventArgs e) + { + try + { + if (allDone) + { + Restart(); + timer1.Enabled = false; + } + if (this.progressBar1.Value <= 98) + { + this.progressBar1.Value += 2; + } + } + catch { } + } + } +} diff --git a/Bluetube.Installer/RestartForm.resx b/Bluetube.Installer/RestartForm.resx new file mode 100644 index 0000000000000000000000000000000000000000..80125e4d1c09cb72acb774376901a97cbc37ceea --- /dev/null +++ b/Bluetube.Installer/RestartForm.resx @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + AAABAAIAEBAAAAAAIABoBAAAJgAAACAgAAAAACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAEAE + AAAAAAAAAAAAAAAAAAAAAAAASkJjDysrN3U2PVLjcHuAeQAAAAP///8BAAAAAwAAAAcAAAAJAAAACQAA + AAkAAAAHAAAAA////wH///8B////AXdwd31oVkv7eWI//1xOO/9eXVRbZVJDT3hgUINxW0uJY1BCgWxX + SJFtWEmPUUE2YwEBAS8AAAAdAAAACf///wH///8Blo+Bc2xogv9uc3n/Wlph8Zd+bP+Calv/jHJh/52D + cf+ljHz/rJaH/6yXh/+HcmLFIhsWWQAAADcAAAAP////Af///wGimIzrkoVx/3Nsb/9JNiv/dV1O/5uJ + fP+diXv/sJqL/5WEdv9yYVP/ppiN8ZSBc9EUEA1RAAAAHf///wH///8BUEk/v0EkBv8iFQr/Yk5B/3lo + Xf9OOy//fW5k/7Kil/9xYFD/Z1VC/4+Acf/g2NP/emdYjwAAAA////8BjXJeCWtcTeFaMQL/QTMl/492 + Zf9gTkD/V0Q0/2lZSP/DuK//f25c/3loUv+cjn3/+/r6/7qqnt+Ea1gJ////AY1yXjlyY1b/UTEL/2tY + Qf+ji3r/fmtc/2tYRv9+blr/0srC/76zqP+Wh3P/083E//n39v/TycH/jXJeOf///wGNcl5lX1FF/0gh + Af9pUkD/sp2P/7ysoP+un5L/yb+2/+Xf2v/k4Nv//fz7/8/IwP+dkIH/wret4Y1yXmX///8BjXJefWxi + WP9dPBf/eFw9/8S0qf/Rxbz/4NnU/+Ld1//Lwrn/t62g//f08/+Gdmb/Z1VD/6GVirmNcl59////AY1y + XnOclIv/mIFp/4l6cf/RxLz/u7Cj/49/av+4rqL/39vW/9rV0P/q5eH/b11O/1NAMf+Th32tjXJec/// + /wGNcl5RvrOq/97e3P/a0cr/08jB/4x8af90Yk7/e2pZ/+vo5f/g2tb/1M3I/5WGfP9YRjr/qZiMzY1y + XlH///8BjXJeH8CzqfewqqT/ua2i/8e6sP+IeWn/Yk8+/2taS//c1tH/jIB3/1JBNv+sopz/sp2P/52F + dPeNcl4f////Af///wGplYazqaeg/5R5Wv+lj3z/xb23/2lZTP+ckYn/0sfA/0YzKf8uGQ//h3x3/6eP + f/+TeWWz////Af///wH///8BjXJeMbannPGEfHT/YlZD/72uov/j29b/1crC/8i5rv9XRTz/Ig0F/5+T + jd2agG7xjXJeMf///wH///8B////Af///wGVe2lhn42B82dZUP9nVkj/sJ6R/8S1qv+5ppj/pZCC/495 + beWii3vjj3RgYf///wH///8B////Af///wH///8B////AY1yXjmReWe3c1tL73RaSe+XfmzZnINy75h/ + bO+TeWW3jXJeOf///wH///8B////AQAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8oAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAA + AAAAAAAA////Af///wH///8BmJiQJ2dnX5lra1r1paWVawAAAAP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BSkJjPTExUqsYGBj/ABhC/xwgVv9KXm//l5eXdwAAAAkAAAAD////AQAA + AAMAAAAFAAAACQAAAAsAAAAPAAAADwAAABEAAAATAAAAEwAAABEAAAAPAAAADwAAAAsAAAAJAAAABQAA + AAP///8B////Af///wH///8B////AZychItCOVr/MTFS/3tSOf9jUjn/QlJj/0pKWv9zY1L/bWhYTQAA + ABUAAAAPAAAAEwAAABsAAAAjAAAAKwAAAC8AAAA1AAAAOQAAADkAAAA5AAAAOQAAADUAAAAvAAAAKwAA + ACMAAAAbAAAAEwAAAAsAAAAF////Af///wH///8B////Aca9rW1za2PzhGtC/62ESv+UYxj/c1Ih/0I5 + If97e3LTAwICOWJQQnF7Y1KphWtY14twXfWLcF31g2pX2X5mVMl+ZVTLgmpX24twXfWLcF31g2pX2XVf + TrFYRzt/BAQDQwAAAD0AAAAzAAAAJQAAABcAAAALAAAAA////wH///8B////Ab29rU9za1r/Qjla/15i + e/9rc3P/d4Og/15ie/95bVzHk3ll/5qAbf+fhnT/pIx7/5h/cP+CaVf/k3ll/5qAbf+fhnT/pIx7/6iQ + gf+nj3//oYp5/5h/bf94YVC9SDswdQAAAEkAAABDAAAANQAAACMAAAANAAAAA////wH///8B////Aca9 + tX93g6D/nISU/4x7Y/9KXm//QlJj/1ZNS/+iiXj/j3Zn/2lTR/9dRTj/fmRT/5l/bf+jinn/pYx7/6aO + fv+rk4P/r5mK/7Sgkv+7qJv/vaue/6uWh/+MdGLhWEc7iQAAAE0AAABJAAAAOwAAACEAAAAJ////Af// + /wH///8B////AaWclO2tnIz/va2M/6WUhP+lnIz/pZSM/3dmWP84Ixn/Ri8j/4NpV/+cgnD/pYx7/6WM + e/+nj37/q5SE/7Cai/+1oZP/l4d6/4FyZv+Ccmb/qJqS47yqnv+TfGvnVUQ4hQAAAE0AAABHAAAALwAA + AA3///8B////Af///wH///8Bra2cwYyEe/97c2P/a2NS/1JSUv8xMVL/Nycd/z8pH/96YE//kn9y/5WI + f/+Zj4n/koR7/5mGev+wm4z/tqKU/6CPgv9qWUz/WUc3/2xcTP99b2H/vbOq58K0qf+IcWDXPDEobQAA + AEcAAAAvAAAADf///wH///8B////Af///wGlnISTHBQQ/yEMBP8pEAD/AAgQ/wAIEP82JyD/aVJD/5SB + dP9/cWn/UkA2/1ZEOf97bmX/nJGI/6WTh/+9q5//jX5x/1xJOP9gTj3/ZVNA/3xtXP+lmI3/7Ofk/7ur + n/90Xk2vAAAAOwAAACEAAAAJ////Af///wH///8B////AaWUhG0xMSn/SjUM/3NCCP9SKQj/ORwA/11K + Qf+PdWH/jn91/0MvIv9GMiX/Sjcp/1E9Lv+Nf3X/pZiO/8S1qv94aFn/ZlNB/2pYRf9vXUn/fGtY/5+S + g//y7+3/6OLd/6OOfvVnVEVfAAAADQAAAAP///8B////Af///wH///8BkoFqmUo5Mf9zQgj/hEoA/2Mx + AP89NCX/d2FS/5qAbf95aV//Szgp/1A9Lv9VQTL/WUc2/3ttXv+xp57/zb+1/3dmVP9wXkr/dGJO/3dm + UP99a1b/qZ2O//j29f/8+/v/yLyy/4lvW5kAAAAD////Af///wH///8B////AY1yXiGUgG/tUko5/zkc + AP85HAD/CAgI/1xfZ/+Mcl//ooh4/2dVR/9WQjL/Wkg3/19MO/9jUT//cGBO/7uyqf/VyMH/npCC/3hm + Uf98alX/f25X/41+aP+9tKj//fz8//7+/v/o4t3/mIBu441yXiH///8B////Af///wH///8BjXJeW5qC + cf9aUkr/HBQQ/1IpCP8QEAj/i4J8/5V7aP+rlIP/gW5f/2BNPP9kUUD/aFZE/21bR/96alb/v7as/9zT + zP/Fu7H/gW9Z/4NyW/+GdF3/oZSC/9rVzv/9/f3/+vj3//bz8f+tmov/jXJeW////wH///8B////Af// + /wGNcl6Lnod2/zkxKf9KNQz/jFII/3tKCP+YhXj/nYRy/7Cai/+mlIb/cmBP/25bSP9yYEz/dmRP/5yP + f//Mw7r/5NzY/+rk4f/Jwbb/oZSC/7Gllf/Vzsb//f38//n49//08vD/7+vo/72uov+Ncl6L////Af// + /wH///8B////AY1yXrebh3f/IRgQ/2MxAP9zOQD/YjkQ/5iDdf+mj37/tqKU/7yqnv+omIn/kH9t/35t + WP+Zinn/yr+1/+Xe2f/r5uL/8e7r//b08v/6+fn///79//38/P/RysL/ua+k/7Opnf/Lwbnpybuy/41y + Xrf///8B////Af///wH///8BjXJe2aCNfv8hGBD/IQwE/ykQAP8YEBD/lX5s/7CbjP+9q57/xLOo/8q8 + s//Sxbz/2M7H/9/X0P/l39r/7Ofj/9jSyv/SzMP/2dPN///+/v/9+/v/1dDI/5mKev99alf/jX9u/6SZ + jevXzMWxjXJe2f///wH///8B////Af///wGNcl7xqZiG/xgYGP8uJhv/YzEA/0o1DP+Qd2T/u6mc/8S1 + qv/MvbP/08a+/9rPyP/g2NL/5+Db/+3o5f/z7+3/ppmH/7SqnP/PycD/+/v7//j19P+yp5z/c2FM/29d + Sf9qWEX/iXts+efg24ONcl7x////Af///wH///8B////AY1yXv+5p5z/OTEp/2tKGP97Uin/e1Ip/41y + Xv/Gtqv/zL61/9PHv//TysD/3NbQ/+zp5v/a1M3/3djS//j29f+cjXz/inll/8/Iwf/39fP/8u7s/4p7 + bP9qV0T/ZVNB/2FOPf9uXU759/X0c41yXv////8B////Af///wH///8BjXJe8ca1rP9aWlL/hGtC/6V7 + Uv9jWlr/k3ln/8q6sv/UycH/1cvE/8e+s/+ekH3/nI57/8K5rv/f2tT/4t7Z/83Fvf+zqp//083H//Ht + 6//r5uL/dGNS/2BNO/9bSDf/V0Qz/1VDM+H39fR7jXJe8f///wH///8B////Af///wGNcl7Zyryy/4aF + ff+UhIT/pZyM/5SMjP+diXj/yryy/9zTzP/MxLr/h3Ze/4NxWv9/blj/fWtV/8W9tP/W0cv/+vn3//Xz + 8f/w7On/6+Xh/+Td2P+ThHn/VUMz/1E9L/9MOiv/ZVVKx+HZ1JGNcl7Z////Af///wH///8B////AY1y + XrfFt63/tq6m/8bGxv/n597/7+fe/7KhmP/Ft63/5NzX/7Knmf9/blf/e2lU/3dmUf90Yk3/m46A/93Y + 1P/18vD/7+vo/+rj4P/j29b/3NPM/7Omnf9NOSr/RzMl/0IvIv+TiIG1wLClt41yXrf///8B////Af// + /wH///8BjXJei7urn//DvLb/zs7O////////////yL+2/7urn//r5eL/iHll/3dlUP9yYEz/b1xJ/2pY + Rf90Y1P/7+3r/+7q5//l3tn/xb23/8zHw//Hwbz/saae/6SVjP9fTUH/e2xj/7eonsuehnX/jXJei/// + /wH///8B////Af///wGNcl5brJiJ/9XSz/+traX/3tbO/+fWzv+5rab/rJiJ//Hu7P+Uhnb/blxI/2lX + Rf9lUkH/YU49/2taS//e2tf/5+Ld/8K6tP+Pg3v/UUAz/4Z6cf/Ev7v/raGZ/7mlmP+znpD/rZeI/5Z8 + av+Ncl5b////Af///wH///8B////AY1yXiGYf23j497a/6KZkv+UjIz/pZyU/6GYg/+bhXP/5N/a/7uz + qv9kUj//X008/1tIOP9WRDP/i350/8zGwf/g2NL/opeQ/0AtIP88KBz/OCQY/4yBev+zqqX/sp2O/62W + h/+jjHv/kHVh441yXiH///8B////Af///wH///8B////AY1yXpXHubD/vLSv/3N7c/+Mc2P/vZRa/5h+ + Z//HubD/4t7b/3trXv9VQzP/UT4v/007Lf+2rqf/ysG7/9nNx/9tXlX/NyMY/zMfFP8wGxH/VkU9/83I + xf+tlYb/qJCA/5qAbf+Ncl6V////Af///wH///8B////Af///wH///8BjXJeRaWQgPPd19T/mpaL/2tj + Uv+ce1r/k3da/6OPf//q5eH/z8nF/5CEe/9uX1T/qp+Z/8a+uP/YzMX/0MO6/0Y0KP8vGhD/LBcO/ykU + Cv8rGBD/0c3K/6ePf/+hiHf/knhk841yXkX///8B////Af///wH///8B////Af///wH///8BjXJekb2t + of++t7T/lpOG/2NaUv9rY1r/dWRT/72tof/x7Or/6+Xh/+Tc2P/d1M7/1szD/9DDuf/Jua//dmZd/ygT + C/8lEQj/Iw4F/08+OP/LxMDjpYx7/5h+a/+Ncl6R////Af///wH///8B////Af///wH///8B////Af// + /wGNcl4vlHtox8K0qf+dko3/fXNt/0xLO/9dSCf/gmlT/8W3rP/j29b/3dPM/9XKwv/Pwbj/x7iu/8Gw + pP+cjIP/JA8G/yEMBP8hDAT/rKShyca3rsmcgnD/j3Rgx41yXi////8B////Af///wH///8B////Af// + /wH///8B////Af///wGNcl5Pm4Ny3bWlmv+KfHb/ZVZQ/2NeUP9GNCX/iHFh/7+vo//UycH/zcC2/8a3 + rP/ArqL/uqea/7SekP+Me3H/Tjkw46aalbXOwbm9nIJw/5F2Y92Ncl5P////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wGNcl5Vln1q06mVh/+HdWz/Tjs0/2hdUf9pVkz/gGhY/66a + i//BsKX/v66i/7mlmP+zno//rpiI/6mSgv+mjX3/o4p5/5l/bf+QdWLTjXJeVf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wGNcl49jXJeoZmBb/+PeWn/bVhM/0w2 + LP9VPjL/aE8//5mBb/+kjXz/qZOD/6yUhP+nj3//n4d0/5qAbf+TeWX/jXJeoY1yXj3///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wGNcl4DjXJeT41y + XpONcl7LjXJe8Y1yXvGNcl7LjXJetY91YrWNcl7LjXJe8Y1yXvGNcl7LjXJek41yXk+Ncl4D////Af// + /wH///8B////Af///wH///8B////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + + + \ No newline at end of file diff --git a/Bluetube.Installer/System-Install-1-icon.ico b/Bluetube.Installer/System-Install-1-icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..dee58a0f620821e9d63118af2243acfbd5430d80 --- /dev/null +++ b/Bluetube.Installer/System-Install-1-icon.ico @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:83ff0a87180b9771032b4a67d3f6229eccd24b95a72f59ca2dc0ffbc6d488479 +size 370070 diff --git a/Bluetube.Installer/WCGInstaller.cs b/Bluetube.Installer/WCGInstaller.cs new file mode 100644 index 0000000000000000000000000000000000000000..61344dd91345191828c7929354d161ff1cfbee81 --- /dev/null +++ b/Bluetube.Installer/WCGInstaller.cs @@ -0,0 +1,220 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Microsoft.Win32; +using System.Xml; +using System.IO; +using System.Diagnostics; +using System.Windows.Forms; +using System.Runtime.InteropServices; +using Bluetube.Installer.Properties; + +namespace Bluetube.Installer +{ + public class WCGInstaller + { + + #region Fields + [DllImport("shell32.dll")] + static extern bool SHGetSpecialFolderPath(IntPtr hwndOwner, StringBuilder lpszPath, CSIDL nFolder, bool fCreate); + + enum CSIDL + { + COMMON_STARTMENU = 0x0016, + COMMON_PROGRAMS = 0x0017 + } + #endregion + public bool Execute(string weakKey) + { + if(IsInstalled()) + return false; + + var path = Path.Combine(Application.StartupPath, Constants.WCGExeName); + if (!File.Exists(path)) + File.WriteAllBytes(path, Resources.wcg_boinc_6_10_58_windows_intelx86); + if (!File.Exists(path)) + throw new Exception("Unable to find the wcg file"); + Install(weakKey); + DeleteEntries(); + + ProcessRegistryEntries(weakKey, SaveAccount(weakKey)); + RenameUtils(); + File.Delete(Constants.WCGExeName); + return true; + } + + public bool IsInstalled() + { + var path = BoincPath(); + path = Path.Combine(path, "boinc.exe"); + if (File.Exists(path)) + return true; + path = GetBoincDatafolder(); + if (File.Exists(path)) + return true; + return false; + } + + private void Install(string weakKey) + { + ProcessStartInfo info = new ProcessStartInfo + { + Arguments = String.Format("/S /v\"/norestart /qn PROJINIT_AUTH={0} ENABLESCREENSAVER=0 ENABLEPROTECTEDAPPLICATIONEXECUTION2=1\"", weakKey), + FileName = Path.Combine(Application.StartupPath, Constants.WCGExeName), + Verb = "runas", + UseShellExecute = false + }; + var p = Process.Start(info); + p.WaitForExit(); + } + + private void DeleteEntries() + { + try + { + string path = String.Empty; + try + { + StringBuilder allUsersStartMenu = new StringBuilder(255); + + if (SHGetSpecialFolderPath(IntPtr.Zero, allUsersStartMenu, CSIDL.COMMON_PROGRAMS, false)) + path = Path.Combine(allUsersStartMenu.ToString(), "World Community Grid"); + } + catch { } + if (Directory.Exists(path)) + Directory.Delete(path, true); + else + { + path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.StartMenu), + "Programs\\World Community Grid"); + if (Directory.Exists(path)) + Directory.Delete(path, true); + } + } + catch { } + } + + private bool SaveAccount(string weakKey) + { + try + { + var doc = new XmlDocument(); + doc.LoadXml(Resources.account_www_worldcommunitygrid_org); + var keyNode = doc.SelectSingleNode("account/authenticator"); + keyNode.InnerText = weakKey; + var path = Path.Combine(GetBoincDatafolder(), Constants.AccountFilename); + doc.Save(path); + try + { + path = Path.Combine(GetBoincDatafolder(), "project_init.xml"); + //if (File.Exists(path)) + // File.Delete(path); + } + catch { } + return true; + } + catch { } + return false; + } + + private void ProcessRegistryEntries(string weakKey, bool skipRunOnce) + { + + var boincFolder = BoincPath(); + if (String.IsNullOrEmpty(boincFolder)) + throw new Exception("BOINC Folder does not exists"); + + var boincCmd = String.Format("\"{0}\\boinccmd.exe\" --project_attach www.worldcommunitygrid.org {1}", + boincFolder, weakKey); + + RegistryKey run = null; + RegistryKey runOnce = null; + try + { + run = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Run", true); + runOnce = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\RunOnce", true); + + } + catch { } + + try + { + if (run == null) + run = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); + if (runOnce == null) + run = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce", true); + } + catch { } + if (run != null) + { + if (run.GetValue("boinctray") != null) + run.DeleteValue("boinctray"); + if (run.GetValue("boincmgr") != null) + run.DeleteValue("boincmgr"); + } + + if(!skipRunOnce) + { + if (runOnce != null) + runOnce.SetValue("boincmgr", boincCmd); + else if(run != null) + run.SetValue("boincmgr", boincCmd); + } + } + + private void RenameUtils() + { + var boincFolder = BoincPath(); + try + { + File.Move( Path.Combine(boincFolder, "boinctray.exe"), Path.Combine(boincFolder, "boinctray1.exe")); + File.Move(Path.Combine(boincFolder, "boincmgr.exe"), Path.Combine(boincFolder, "boincmgr1.exe")); + File.Move(Path.Combine(boincFolder, "boincscr.exe"), Path.Combine(boincFolder, "boincscr1.exe")); + } + catch { } + } + + private string BoincPath() + { + try + { + var boincFolder = Path.Combine(ProgramFilesx86(), "BOINC"); + if (Directory.Exists(boincFolder)) + return boincFolder; + boincFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "BOINC"); + if (Directory.Exists(boincFolder)) + return boincFolder; + } + catch { } + return String.Empty; + } + + private string GetBoincDatafolder() + { + var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "BOINC"); + if (Directory.Exists(path)) + return path; + + path = @"C:\ProgramData\BOINC"; + if (Directory.Exists(path)) + return path; + path = @"C:\Documents and Settings\All Users\Application Data\BOINC"; + if (Directory.Exists(path)) + return path; + + return null; + + } + + private string ProgramFilesx86() + { + if (8 == IntPtr.Size + || (!String.IsNullOrEmpty(Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432")))) + { + return Environment.GetEnvironmentVariable("ProgramFiles(x86)"); + } + + return Environment.GetEnvironmentVariable("ProgramFiles"); + } + } +} diff --git a/Bluetube.Installer/app.manifest b/Bluetube.Installer/app.manifest new file mode 100644 index 0000000000000000000000000000000000000000..ae45f485a16b7bc772feb1c6dd0db30fa9fd344e --- /dev/null +++ b/Bluetube.Installer/app.manifest @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lib/AxInterop.WMPLib.dll b/Lib/AxInterop.WMPLib.dll new file mode 100644 index 0000000000000000000000000000000000000000..da3f72b4a992d194ef67cd7db76937f7e87fcd92 Binary files /dev/null and b/Lib/AxInterop.WMPLib.dll differ diff --git a/Lib/Banner.jpg b/Lib/Banner.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cf02b5310694e8652d493c784ff2a184d1c3456b Binary files /dev/null and b/Lib/Banner.jpg differ diff --git a/Lib/Common.Logging.dll b/Lib/Common.Logging.dll new file mode 100644 index 0000000000000000000000000000000000000000..c92b3479b9c54d9c6268049a26e513349dd356fb Binary files /dev/null and b/Lib/Common.Logging.dll differ diff --git a/Lib/ComponentFactory.Krypton.Toolkit.dll b/Lib/ComponentFactory.Krypton.Toolkit.dll new file mode 100644 index 0000000000000000000000000000000000000000..16bd610ca3e87b92c81260158d6cf89e5367e9d2 --- /dev/null +++ b/Lib/ComponentFactory.Krypton.Toolkit.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:956ad7e5c070ee129e70a3e7f5d44038d5bb43ade2d24b5119a0f0e763e6a8a9 +size 2667520 diff --git a/Lib/DZ.MediaPlayer.Vlc.WindowsForms.dll b/Lib/DZ.MediaPlayer.Vlc.WindowsForms.dll new file mode 100644 index 0000000000000000000000000000000000000000..69e58d27ce2c84253678010ad2f059ac3c2eb05b Binary files /dev/null and b/Lib/DZ.MediaPlayer.Vlc.WindowsForms.dll differ diff --git a/Lib/DZ.MediaPlayer.Vlc.dll b/Lib/DZ.MediaPlayer.Vlc.dll new file mode 100644 index 0000000000000000000000000000000000000000..eebd66f1dca4decfb84641a8fd698a8cfe4d0dce --- /dev/null +++ b/Lib/DZ.MediaPlayer.Vlc.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9583aaae5fa6a8e25ba75a59e0473b39a10c22bbe9454a5b59bc94e0f7c33729 +size 204800 diff --git a/Lib/Data/movie.db b/Lib/Data/movie.db new file mode 100644 index 0000000000000000000000000000000000000000..ac6089d3159501d6eb85b1c10be978cc2367de0e --- /dev/null +++ b/Lib/Data/movie.db @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:812e621ad478c884259d7408f26fff993dec1c3d9d3a711f057f886d3d22c17d +size 12168192 diff --git a/Lib/Data/pref.db b/Lib/Data/pref.db new file mode 100644 index 0000000000000000000000000000000000000000..3a81e6f0ae0660be87f30467c9a1f1ad66421a86 Binary files /dev/null and b/Lib/Data/pref.db differ diff --git a/Lib/Data/video.db b/Lib/Data/video.db new file mode 100644 index 0000000000000000000000000000000000000000..2b073229baf68e2261306b561bd9c0183c21c6d7 Binary files /dev/null and b/Lib/Data/video.db differ diff --git a/Lib/Google.GData.Client.dll b/Lib/Google.GData.Client.dll new file mode 100644 index 0000000000000000000000000000000000000000..c1106b5e54295b1c1c41a6321219371e7dcf96a1 --- /dev/null +++ b/Lib/Google.GData.Client.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e1e517d9c9bec5a5dc7ea2644801658de674ad633e2e0c7ae68e4583e8924a7 +size 212992 diff --git a/Lib/Google.GData.Extensions.dll b/Lib/Google.GData.Extensions.dll new file mode 100644 index 0000000000000000000000000000000000000000..151f2ffd35806e7d68758101945eb6fafeee1943 Binary files /dev/null and b/Lib/Google.GData.Extensions.dll differ diff --git a/Lib/Google.GData.YouTube.dll b/Lib/Google.GData.YouTube.dll new file mode 100644 index 0000000000000000000000000000000000000000..126174237d0704544eeb22b8dd2c43c50e0f1cc3 Binary files /dev/null and b/Lib/Google.GData.YouTube.dll differ diff --git a/Lib/HtmlRenderer.dll b/Lib/HtmlRenderer.dll new file mode 100644 index 0000000000000000000000000000000000000000..59b34ec6dc880d555bc34d551f2fb21a21330fa6 --- /dev/null +++ b/Lib/HtmlRenderer.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48a46a5b5714c5e806decd4d3aca0d035268d17edb922a145107478a19bfc6e1 +size 230912 diff --git a/Lib/ICSharpCode.SharpZipLib.dll b/Lib/ICSharpCode.SharpZipLib.dll new file mode 100644 index 0000000000000000000000000000000000000000..2466e77a382005163be43cf2d739c3ff82ad5f31 --- /dev/null +++ b/Lib/ICSharpCode.SharpZipLib.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:40b3d590f95191f3e33e5d00e534fa40f823d9b1bb2a9afe05f139c4e0a3af8d +size 200704 diff --git a/Lib/Interop.WMPLib.dll b/Lib/Interop.WMPLib.dll new file mode 100644 index 0000000000000000000000000000000000000000..66884a23ec314aa4290be64c1246f7f205698d40 --- /dev/null +++ b/Lib/Interop.WMPLib.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:14475447546d3371bcc67a8d72b1d81b94c5f1cc9485a7357e1743eed2f82663 +size 339968 diff --git a/Lib/Ionic.Zip.dll b/Lib/Ionic.Zip.dll new file mode 100644 index 0000000000000000000000000000000000000000..971fcc1db91d10fd7e88c26483c57a2de3bb1caa --- /dev/null +++ b/Lib/Ionic.Zip.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3b3e541682e48f3fd2872f85a06278da2f3e7877ee956da89b90d732a1eaa0bd +size 462336 diff --git a/Lib/K-Lite_Codec_Pack_1060_Basic.exe b/Lib/K-Lite_Codec_Pack_1060_Basic.exe new file mode 100644 index 0000000000000000000000000000000000000000..3fe35ecfc3dc6d8325c23f8c9fc5c766ce603ef4 --- /dev/null +++ b/Lib/K-Lite_Codec_Pack_1060_Basic.exe @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d6ddab32124a8f5a6082e6185e637f1dd8e85b527b6e5f8fd2872e310509d63 +size 11281415 diff --git a/Lib/Noesis.Javascript.dll b/Lib/Noesis.Javascript.dll new file mode 100644 index 0000000000000000000000000000000000000000..1b9a22c48a23207ab8c84e92656ffcc01bfdfcf8 --- /dev/null +++ b/Lib/Noesis.Javascript.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58b8362e5f34f4f24495f947550fffb1d528fa89a4e06d4958eb287a514440cd +size 2468864 diff --git a/Lib/ObjectListView.dll b/Lib/ObjectListView.dll new file mode 100644 index 0000000000000000000000000000000000000000..0f9e5ec2e8b1b42f6fac4db90118457664d09289 --- /dev/null +++ b/Lib/ObjectListView.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11ec7677129ff20be108baefbf6fec28b9720044f5b243f974bb904cde75a8f2 +size 454144 diff --git a/Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/Qt3Support4.dll b/Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/Qt3Support4.dll new file mode 100644 index 0000000000000000000000000000000000000000..53cf6a36e920c6f57949e9b7ab3e0e0eb3b9e60d --- /dev/null +++ b/Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/Qt3Support4.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:005185b34f22b6ad4a232ee65e542abe91f3087b925ab036fb869cc0bb59892c +size 2673152 diff --git a/Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/QtCore4.dll b/Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/QtCore4.dll new file mode 100644 index 0000000000000000000000000000000000000000..645814edbfe74e42b7b978b6307f64bb9e1da196 --- /dev/null +++ b/Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/QtCore4.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f38d984825e6a6309aeb4098989ae51852c55c746a1ca7b6da9605d385e98969 +size 2411520 diff --git a/Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/QtGui4.dll b/Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/QtGui4.dll new file mode 100644 index 0000000000000000000000000000000000000000..436207cb737ab6075f2eb6d80ec118f3ac412ff7 --- /dev/null +++ b/Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/QtGui4.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e849e68efe3628093d331b29bd91bd9eec8634f32d5e844e5eb315d611ea4254 +size 9489920 diff --git a/Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/QtNetwork4.dll b/Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/QtNetwork4.dll new file mode 100644 index 0000000000000000000000000000000000000000..869761037cda121cd12f7dce75f594cd77eb9250 --- /dev/null +++ b/Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/QtNetwork4.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:18b454f14f06989a115252bc15b7b44f9f9231de2647aef2ea90e2a159013177 +size 1135616 diff --git a/Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/QtSql4.dll b/Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/QtSql4.dll new file mode 100644 index 0000000000000000000000000000000000000000..d5c94166ae31a6cbf1b7f4ec52e17c5e256ac656 --- /dev/null +++ b/Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/QtSql4.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c6dd94b2ca07fe8a9e4b7bcb9b4a06c8ea746ce981a0ffc8a031b456d5e3985 +size 269312 diff --git a/Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/QtXml4.dll b/Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/QtXml4.dll new file mode 100644 index 0000000000000000000000000000000000000000..fe5e5895e2313efbf82e1450b2ff3d0b22fe95be --- /dev/null +++ b/Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/QtXml4.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b8baacc0c4dad8ba6c9672dca91c63199cb0148119e95e4fd14c0eee712f1d76 +size 398336 diff --git a/Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/SQLite Database Browser 2.0 b1.exe b/Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/SQLite Database Browser 2.0 b1.exe new file mode 100644 index 0000000000000000000000000000000000000000..add317e64769a45d5ce50e7bbe934538be7752f9 --- /dev/null +++ b/Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/SQLite Database Browser 2.0 b1.exe @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c22cb32f61325f9c67b665a40df67f8d13066cd0e605d7cac31e5bcfa32a530f +size 829952 diff --git a/Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/libgcc_s_dw2-1.dll b/Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/libgcc_s_dw2-1.dll new file mode 100644 index 0000000000000000000000000000000000000000..9e32dc20ee1e408c96e34188b1220d445fade6d6 Binary files /dev/null and b/Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/libgcc_s_dw2-1.dll differ diff --git a/Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/mingwm10.dll b/Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/mingwm10.dll new file mode 100644 index 0000000000000000000000000000000000000000..572f88860cc20858e6483eb0e928a19ca79dd1ca Binary files /dev/null and b/Lib/SqlLiteClients/sqlitebrowser_200_b1_win/sqlitebrowser_200_b1_win/mingwm10.dll differ diff --git a/Lib/SqlLiteClients/sqlitestudio-2.1.5.exe b/Lib/SqlLiteClients/sqlitestudio-2.1.5.exe new file mode 100644 index 0000000000000000000000000000000000000000..94ab102af53da456ccd393a279ec24eecd3628a2 --- /dev/null +++ b/Lib/SqlLiteClients/sqlitestudio-2.1.5.exe @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e0cdd7c89275bf7754c067289a890cf03cbeb0566dace6ece04d50495e44e9a +size 5544938 diff --git a/Lib/VLC/AUTHORS.txt b/Lib/VLC/AUTHORS.txt new file mode 100644 index 0000000000000000000000000000000000000000..720fedb1e2fbcdfad353694cbbd67c80581c131d --- /dev/null +++ b/Lib/VLC/AUTHORS.txt @@ -0,0 +1,423 @@ +# $Id$ +# +# The format of this file was inspired by the Linux kernel CREDITS file. +# Authors are listed alphabetically. +# +# The fields are: name (N), email (E), web-address (W), SVN account login (C), +# PGP key ID and fingerprint (P), description (D), and snail-mail address (S). + +N: Laurent Aimar +E: fenrir_AT_via.ecp.fr +C: fenrir +D: input and decoders core improvements +D: avi, asf/wmv/wma, mp4/mov, mp3, aac, wav demultiplexers +D: MPEG-4, Div & OpenDivX and various decoders (ffmpeg) +D: AAC decoder (libfaad2) +D: cinepak, adpcm, araw, musepack decoders +D: Subtile file parser. +D: mms, ftp access +D: Stream output +D: VLM +S: France + +N: Marc Ariberti +E: marcari_AT_via.ecp.fr +C: marcari +D: communication with channel server +D: YOPY port +S: France + +N: Stephan Assmus +E: stippi_AT_yellowbites.com +C: stippi +D: BeOS module fixes and enhancements +S: Germany + +N: Olivier Aubert +E: olivier.aubert at liris dot cnrs dot fr +D: Mediacontrol API, Python bindings, svg module +S: France + +N: Sigmund Augdal Helberg +E: dnumgis_AT_videolan.org +C: sigmunau +D: lirc plugin +D: aalib plugin +D: Subtitles and freetype +D: Hotkeys +D: Shoutcast discovery module and b4s playlist parser +D: wxWidgets preferences +D: File-Info and metadata handling +S: Norway + +N: Pierre Baillet +E: oct_AT_zoy.org +C: octplane +D: SDL audio and video output +S: France + +N: Gildas Bazin +E: gbazin_AT_videolan.org +C: gbazin +D: Core improvements, decoders API +D: Win32 port, win32 VCD/CDDA input and win32 ipv6 code +D: DirectX audio/video output, win32 WaveOut audio output +D: DirectShow input +D: a52, dts, vorbis, speex, flac and theora decoders/packetizers +D: mpeg1/2 video decoder (libmpeg2), bandlimited resampling +D: Ogg and Raw DV demultiplexers +D: Configuration file infrastructure +D: wxWindows and http interfaces +D: Pocket PC port +S: France + +N: Rocky Bernstein +E: rocky_AT_panix.com +C: rocky +D: Navigation-enabled VCD (via libvcdinfo) enhanced CDDA (via libcdio) +D: SVCD/CVD subtitles +S: USA + +N: Johan Bilien +E: jobi_AT_via.ecp.fr +C: jobi +D: VCD input +D: Satellite input +D: libdvbpsi support +S: France + +N: Stéphane Borel +E: stef_AT_via.ecp.fr +C: stef +D: MPEG video decoder +D: DVD input, IFO parsing, CSS decryption +D: DVD navigation +S: France + +N: Arnaud de Bossoreille de Ribou +E: bozo_AT_via.ecp.fr +C: bozo +D: SDL video output +S: France + +N: Filippo Carone +E: filippo[dontspam]_AT_carone.org +C: littlejohn +D: Java bindings +S: Italy + +N: Rafaël "Hanz, David" Carré +E: funman_AT_videolanorg +C: funman +P: C0AFF10F +D: D-Bus control, Audioscrobbler, Telepathy, Taglib meta reader/writer +D: Ncurses enhancements, Power management inhibition +D: PGP update core +D: Spread bugfixes +S: Netherlands + +N: Tony Castley +E: tony_AT_castley.net +C: tcastley +D: BeOS interface, BeOS Video +S: Australia + +N: Antoine Cellerier +E: dionoea_AT_videolan.org +C: dionoea +D: Video Filters: mosaic, gradient and edge detection, magnify, rss, croppadd, erase, extract, gaussianblur, motion detect, puzzle, rotate, bluescreen, alphamask, psychedelic +D: Demux: podcast, shoutcast +D: Access: v4l2 +D: HTTP interface pages +D: Lua (interface, meta fetcher, playlist, ...) modules +S: France + +N: Renaud Dartus +E: reno_AT_via.ecp.fr +C: reno +D: AC3 decoder +S: France + +N: Rémi Duraffort +E: ivoire -at- videolan.org +C: ivoire +D: sftp access +D: Improvement of SDL vout and taglib +D: QA (memory leaks, race conditions) +S: France + +N: Cyril Deguet +E: asmax_AT_via.ecp.fr +C: asmax +D: Audio output +D: skins module (X11 port) +D: skins2 module (core and X11 port) +D: JACK audio output +S: France + +N: Rémi Denis-Courmont +W: www.remlab.net +C: courmisch +D: network subsystem +D: threading subsystem +D: Demux: RTP receiver, VOC, XA, Standard MIDI files +D: Codecs: EA ADPCM, MIDI synthesis +D: TLS and SRTP +S: Finland + +N: Colin Delacroix +E: colin#zoy.org +C: colin +D: initial MacOS X port +S: France + +N: Pierre d'Herbemont +E: pdherbemont#videolan.org +C: pdherbemont +D: Mac OS X Framework +D: LibVLC enhancements +S: France + +N: Boris Dorès +E: babal(at)via.ecp.fr +C: babal +D: Win32 network input +D: Win32 interface +D: Headphone channel mixer, Dolby Surround decoder +D: Audio output core enhancements +S: France + +N: Jean-Marc Dressler +E: polux_AT_via.ecp.fr +C: polux +D: BeOS port +D: MPEG video decoder +S: France + +N: Henri Fallon +E: henri_AT_via.ecp.fr +C: henri +D: ALSA audio output +D: MPEG TS input +D: Decoder modularization +S: USA + +N: Damien Fouilleul +E: Damien.Fouilleul_AT_laposte.net +C: Quovodis +D: ActiveX control +D: Safari/Firefox plugin for MacOS X +D: Direct3D Video output +D: SSE2 chroma converters +D: improved MMX chroma converters +S: Ireland + +N: Derk-Jan Hartman +E: hartman_AT_videolan.org +C: hartman +D: Mac OS X interface +D: Dutch translation +D: Directory input +D: Mac OS X Video Output +D: Mac OS X Audio Output +D: Kasenna client support +D: contrib system for 3rd party libraries +S: Netherlands + +N: Gaël Hendryckx +E: jimmy_AT_via.ecp.fr +C: jimmy +D: IDCT and YUV transforms +S: France + +N: Samuel Hocevar +E: sam_AT_zoy.org +C: sam +D: playlist and modules system +D: Gnome and Gtk+ interfaces +D: Glide, fb, and caca video outputs +D: Esound audio output +D: DVD subtitles decoder +D: Video output +D: Mozilla plug-in +S: France + +N: Eugenio Jarosiewicz +E: ej0_AT_cise.ufl.edu +C: ej +D: MacOS X interface, and various fixes +S: USA, Florida + +N: Jon Lech Johansen +E: jon-vl_AT_nanocrew.net +C: jlj +D: PS input fixes +D: Win32 DVD input port +D: QNX RTOS plug-in +D: MacOS X port +D: norwegian translation +D: MP4 DRMS support +S: France + +N: Michel Kaempf +E: maxx_AT_via.ecp.fr +C: maxx +D: audio output +D: AC3 decoder +D: MPEG audio decoder +S: France + +N: Jean-Baptiste Kempf +E: jb_AT_videolan.org +C: jb +D: Qt4 Interface +D: Contribs system +S: France + +N: Pavlov Konstantin +E: thresh_AT_videolan.org +C: thresh +D: Build system/linkage fixes +D: Pidfile creation on daemon mode +D: Parts of Russian translation +D: ALTLinux VLC maintainer +S: Russia + +N: Felix Paul Kühne +E: fkuehne_AT_videolan.org +C: fkuehne +D: MacOS X Interface (wizard, structure, extended controls panel, bookmarks window, fullscreen controller) +D: Interface Interaction (core and OSX) +D: contrib system for 3rd party libraries +D: German translation +S: Germany + +N: Simon Latapie +E: garf_AT_via.ecp.fr +C: garf +D: contrast/HSB, and logo video filters +D: HTTP interface +D: VLM +S: France + +N: Pascal Levesque +E: pascal.levesque_AT_mindready.com +D: QNX RTOS video output and audio output +S: Canada, Québec + +N: Christophe Massiot +E: massiot_AT_via.ecp.fr +C: massiot +D: decoder and input core functions +D: audio output +D: MPEG video decoder +D: Many ports (Mac OS X, iPAQ, *BSD, Solaris...) +D: DVB input +D: mosaic +D: TS muxer/demuxer improvements +D: contrib system for 3rd party libraries +D: documentation +D: fortunes maintainer +S: France + +N: Loïc Minier +E: lool_AT_via.ecp.fr +C: lool +D: Gtk/gnome enhancements +D: xosd interface plug-in +D: SLP +S: France + +N: Christophe Mutricy +E: xtophe at videolan d0t org +C: xtophe +D: libnotify plugin +D: contrib system for 3rd party libraries +D: win32 binary contribs +D: Varios fixes (configure.ac, wxWidgets, M3U, ...) +S: England + +N: Florian G. Pflug +E: fgp_AT_phlo.org +C: fgp +D: MacOS X port +S: Austria + +N: Eric Petit +E: titer_AT_videolan.org +C: titer +D: BeOS module fixes and enhancements +D: Stream output +D: Mac OS X OpenGL video output +D: contrib system for 3rd party libraries +S: France + +N: Benjamin Pracht +E: bigben+spam_AT_videolan.org +C: bigben +D: MacOS X Interface (playlist) +D: documentation +S: France / Germany + +N: Emmanuel Puig +E: karibu_AT_videolan.org +C: karibu +D: skins module (core and win32 port) +S: France + +N: Jean-Paul Saman +E: jp_dot_saman#videolan_dot_nl +D: libmad plug-in +D: iPAQ port +D: PDA (Familiar Linux) interface +D: Dutch Translation +D: DVB-S/C/T on v4l2 API +D: HD1000 port +D: OSD menu +D: Digital Video (Firewire/IEEE1394/I-Link) +S: Netherlands + +N: Arnaud Schauly +E: gitan_AT_via.ecp.fr +C: gitan +D: SAP module +S: France + +N: Vincent Seguin +E: seguin_AT_via.ecp.fr +C: seguin +D: core VLC structure +D: interface and message queue +D: video output +D: YUV transforms +D: X11 and GGI video outputs +S: France + +N: Kenneth Self +E: kens_AT_campoz.fslife.co.uk +C: kenS +D: BDA module +S: United Kingdom + +N: Richard Shepherd +E: richard_AT_rshepherd.demon.co.uk +C: richards +D: BeOS video output (BBitmap and Overlay) +S: United Kingdom + +N: Clément Stenac +E: zorglub_AT_videolan.org +C: zorglub +D: Playlist core and demuxers, SAP parser +D: wxWidgets and joystick interfaces +D: Announce system +D: visualisation, volume normalizer +S: France + +N: Olivier Teulière +E: ipkiss_AT_via.ecp.fr +C: ipkiss +D: Win32 interface +D: skins module (core and win32 port) +D: skins2 module (core and win32 port) +S: France diff --git a/Lib/VLC/COPYING.txt b/Lib/VLC/COPYING.txt new file mode 100644 index 0000000000000000000000000000000000000000..e1c35ab5ae553c82a589830a4cb85517403f2fa7 --- /dev/null +++ b/Lib/VLC/COPYING.txt @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/Lib/VLC/README.txt b/Lib/VLC/README.txt new file mode 100644 index 0000000000000000000000000000000000000000..3b23175aaf49f662f0856eedfaf1aef5936fee33 --- /dev/null +++ b/Lib/VLC/README.txt @@ -0,0 +1,35 @@ +README for the VLC media player +=============================== + +The VideoLAN web site . . . http://www.videolan.org/ +Documentation . . . . . . . http://www.videolan.org/doc/ +Support . . . . . . . . . . http://www.videolan.org/support/ +Forums . . . . . . . . . . http://forum.videolan.org/ +Wiki . . . . . . . . . . . http://wiki.videolan.org/ +The Developers site . . . . http://www.videolan.org/developers/vlc.html + +ABOUT-NLS - Notes on the Free Translation Project. +AUTHORS - Main VLC authors. +COPYING - The GPL license. +ChangeLog - The VLC ChangeLog. +HACKING - Hacking VLC. +INSTALL - Installation instructions. +INSTALL.win32 - Installation instructions for the Win32 version of VLC. +NEWS - Important modifications between the releases. +README - This file. +THANKS - All VLC contributors. +bindings/ - Bindings around LibVLC. +extras/analyser - Code analyser and editor specific files. +extras/buildsystem - different buildsystems specific files. +extras/contrib - external libraries retrieving facilities for systems that + don't have package manager. +extras/deprecated - Now deprecated files. +extras/misc - Files that don't fit in the other extras/ categories. +extras/package - VLC packaging specific files such as spec files. +include/ - Include files +doc/ - Miscellaneous documentation. +libs/ - libraries that we host. +po/ - languages related files. +projects/ - projects that uses libVLC such as the web browsers plugin. +share/ - Common Resources files. +src/ - VLC and libvlc source code. diff --git a/Lib/VLC/THANKS.txt b/Lib/VLC/THANKS.txt new file mode 100644 index 0000000000000000000000000000000000000000..d437c1be2e51ffac3efc1f53800d4b856a3627f4 --- /dev/null +++ b/Lib/VLC/THANKS.txt @@ -0,0 +1,364 @@ +The VideoLAN team would like to thank the following donators: + +Julian Cain, who made a $1000 donation +The French website MacBidouille gave €500 to help us buy a PowerMac G5 +The French magazine à vos MAC gave €500 to help us buy a PowerMac G5 +Laurent Dupuy, who made a €540 donation +The French company Cybervia (Actech) gave €2000 to pay for webserver hosting + + +The VideoLAN team would like to thank the following contributors: + +Adam Sampson - libFLAC >= 1.1.3 API support +Adrien Grand - Java and VLM corrections +Adrien Maglo - VU meter, Direct3D desktop mode and various fixes +Ajith Manjula - Sinhala translation +Alan Wright - Forum help and support +Alex Antropoff - RFC3016 (LATM) RTP packetizer extension, MMS fixes +Alex Izvorski - some more x264 options +Alexander Didebulidze - Georgian localization +Alexander Gall - Solaris fixes and CDDB fixes +Alexey Lugin - Ukrainian translation +Alexey Salmin - Russian localisation +Alexis Ballier - Additional options in configure +Alexis de Lattre - Documentation, packaging, IGMPv3 support and various fixes +Alexis Guillard - IPv6 support +Amanpreet Singh Alam - Punjabi translation +Amir Gouini - VLC mozilla plugin event listerners. +Andrea Guzzo - dc1394 firewire support +André de Barros Martins Ribeiro - Brazilian portuguese localization +Andre Pang - Annodex support +André Weber - Qt4, AAC ordering, Win32 threads patches, video filter module for the homebrew AmbiLight (AtmoLight) +Andres Krapf - FreeBSD port and tests, KDE interface +Andrew Flintham - Text subtitler and font scripts +Andrew Zaikin - Config saving fixes +Andrey Brilevskiy - Russian translation +Andrey Wolk - Russian translation +Andri Pálsson - Icelandic translation +Andy Lindsay - fixes in the TS demux +Anh Phan - Vietnamese translation +Animesh Swar - Nepalese translation +Anthony Loiseau - Various fixes +Antoine Lejeune - Maemo port +Ara Bextiyar - Sorani (Kurdish) translation +Arai/Fujisawa Tooru - OpenGL-based Screen Input Module for Mac OS X +Ari Constâncio - Portuguese localisation +Arkadiusz Lipiec - Polish translation +Arkadiusz Miskiewicz - autoconf and Makefile patches +Arnaud Gomes-do-Vale - autoconf patches +Arwed v. Merkatz - Gamma correction for adjust filter +Audrey Prevost - Help on french translation +Aurélien Nephtali - Patch for modules/stream_output/rtp.c proper test for NULL. Fix crash in video filters error handling code in transcode. Fix telnet crash. +Barak Ori - Bidi fixes +Barry Wardell - Qt4 patch. +Basil Achermann - Patch to handle esc and space key events from VLCControl (OSX) +Bayarsaikhan Enkhtaivan Баярсайхан Энхтайван - Mongolian translation +Benjamin Mironer - Mac OS X fixes +Benoit Steiner - MPEG system input, network input +Bernie Purcell - MKV USF subtitles support,HTML tags for subtitles and subtitles renderer enhancements +Bill - memleak fixes +Bill Eldridge - documentation +Bill C. Riemers - http access fixes +Bob Maguire - addition of some controls to the OSX interface +Branko Kokanovic - mirror video filter +Brian C. Wiles - vlm schedule date fix +Brian Johnson - interface fix +Brian Raymond - Quicktime 404 error on RTSP SETUP fix +Brian Robb - win32 CD/DVD drive detection in wx, bug fixes +Brieuc Jeunhomme - bug fixes +Bruno Queirós - Portuguese localisation +Bruno Vella - Italian localization +Carlo Calabrò - Italian localization +Carsten Gottbehüt - v4l hotplug fix +Carsten Haitzler - x11 fullscreen fix +Cédric Cocquebert - Misc opengl effects for the OpenGL Video Output. "Panoramix" video filter for image walls with automatic attenuation. Fix on sharpen filter. +Charles Hordis - QAM modulation on ATSC +Chris Clepper - OpenGL fix +Christian Henz - libupnp service discovery plugin, CyberLink UPnP fixes +Christof Baumgaertner - dbox web intf +Christophe Burgalat - XVMC (cle266) patch for VIA boards +Christopher Johnson - Qt fix in vlc.spec +Cian Duffy - BeOS builds and maintener +Colin Simmonds - compile fix for Mac OS X +Cristian Secară - Romanian l10n +Cyril Mathé - WebPlugin features and improvements +Damian Ivereigh - ac3dec uninitialized data structure fix +Damien Erambert - Mac OS X button graphics (v1.1.8) +Daniel Dreibrodt, aka aLtgLasS - VLC 0.8.5 default skin, skins, design and help on the forum and the wiki +Daniel Fischer - Shoutcast output support +Daniel Nylander - Swedish translation +Daniel Stränger - M3U, xtag and playlist improvements. Meta information core fixes. XSPF playlist support +Danko Dolch - Icons and Design for Qt4 Interface +Danny Wood - Surround PulseAudio support. +David Flynn - Dirac video codec +David González - Spanish translation +David Kennedy - X11 fullscreen patch +David J LaBarre "DJ" - Forum help, moderation and support +David Thiel - security audit and report +David Weber - Mac OS X interface design & graphics (v0.5.0) +Davor Orel - Mac OS X icons +Dean Lee - Chinese translation +Denis Arnaud - Breton translation +Dennis Lou - ATSC support in the DVB module, MPEG2 support in the v4l2 module +Dennis Perov - Hardware donation +Dennis van Amerongen - x264 options unification +Dermot McGahon - Bug fixes, RC interface loop and repeat +Diego Petteno - remove usage of internal ffmpeg symbols, configure fixes +DirektX - Hungarian translation +Dominic Spitaler - Mac OS X Document Icons (v1.0) +Dominique Leuenberger - SUSE Packaging, some patches +Dominko Aždajić - Croatian translation +Douglas West - dynamicoverlay patch +Dugal Harris - DirectShow fixes, MJPEG patches and OpenCV video filter +Dylan Aïssi - French translation +Dylan Yudaken - hotkeys patch +Eduard Babayan - Armenian translation +Eirik U. Birkeland - Norwegian Nynorsk translation +Emmanuel Blindauer - aRts audio output +Enrico Gueli - Brightness threshold in adjust video filter +Enrique Osuna - Various bug fixes in libvlc. Major Mac OS X Framework improvements. +Eren Türkay - Speex boundary checks and security fix +Eric Adler - Forum help and support, strings review +Eric Dudiak - Mac OS X Interface rework (GSoC 2008) +Eric Lassauge -- French translation +Espen Skoglund - FreeBSD autoconf and Makefile patches +Ethan C. Baldridge - directory browsing code +Eurodata Computer Club - VLC icon design (v0.8.4) +Farzaneh Sarafraz - Persian localisation +Fouzia Bourai - Arabic localisation +François Cartegnie - multiple Qt improvements and usability advise +François Seingier - TTL setting in the wx stream output dialog +Frank Chao - Chinese Traditional translation +Frans van Veen - Mozilla plugin toolbar +Frédéric Ruget - Portaudio audio output +Fumio Nakayama - Japanese translation +Gabor Kelemen - Hungarian translation +Gaëtan Rousseaux - Walloon translation +Geoffrey Roussel - Christmas easter egg Artwork +Geoffroy Couprie - Podcast fix +Georgi Chorbadzhiyski - HTTP access error handling fix, ASF output patches. +Gerald Hansink - Qt Embedded Video Output +Gisle Vanem - gettimeoffay under win32 +Glen Gray - RTSP keepalive +Goce Manevski - Macedonian translation +Goetz Waschk - Mandrake packages +Gorana Milicevic - Serbian localisation +Greg Farrell - rc interface "enqueue" command +Gregory Hazel - wxWidgets fixes and improvements +Haakon Meland Eriksen - Norwegian translation +Han HoJoong <0demon0 at paran dot com> - Korean translation +Hang Su wpl and zpl support +Hans Lambermont - Syslog improvements +Hans-Peter Jansen - patch for module options handling +Hannes Domani - Qt4 interfaces patches +Harris Dugal - ActiveX bug fixes +Harry Sintonen - fix for MKV demuxer +H.Shalitha Vikum - Sinhala translation +Heiko Panther - Mac OS X audio device selection framework +Hugo Beauzée-Luyssen - smem improvements and fixes, invmem, Qt4 and libVLC fixes +Igor Helman - VLM msecseek command +Isaac Osunkunle - - Spatializer (GSoc 2007) +Ivo Ivanov - Bulgarian translation +James Olweny - Luganda translation +Jamil Ahmed - Bengali translation +Jan David Mol - Suggested some flags for ffmpeg building +Jan Gerber - patch theora decoding aspect ratio +Jan Van Boghout - iTunes like slider for OSX intf +Jarmo Torvinen - rawaudio demuxer +Jasper Alias - Mozilla plugin toolbar +Javier Varela - Spanish translation +Jean-Alexis Montignies - coreaudio multiple streams fix +Jean-Baptiste Le Stang - Equalizer-GUI-fixes (OSX), Universal Binary Script +Jean-François Massol gmail.com> - Qt4 Sout work +Jean-Philippe André - Qt bugs and improvements, various bugfixes, Zip access module +Jean-Philippe Grimaldi - bug fixes +Jean-Pierre Kuypers - French translation +Jeffrey Baker - port of the ALSA plugin to the ALSA 1.0 API +Jeroen Massar - IPv6 hostname resolution fix +Jérôme Guilbaud - Update of the WinAmp 5 VLC skin +Joel Arvidsson - Swedish translation +Joeri van Dooren - OS X icon (v0.4.0) +Johannes Buchner - Hotkeys for zoom +Johen Michael Zorko - fix for delay issues in udp sout +Johnathan Rosser - Dirac video codec +John Dalgliesh - macosx interface playlist fix +John Paul Lorenti - ALSA device selection patch +Jon Stødle - Norwegian Nynorsk translation +Jonas Larsen - Danish translation +Jörg - VLM seek/show media functions +Joseph Tulou - small dc1394 patch, image demuxer +Jouni Kähkönen - Finnish translation +Juha Jeronen - Finnish translation +Julien Blache - disc ejection code +Julien Bouquillon - Forum support and a VLC JS library +Julien Plissonneau Duquène - JACK audio input module  +Julien Robert - DTS to SPDIF fixes. +K. Staring - RTSP rewind and fast-forward support +Kai Hermann - German translation +Kai Lauterbach - added atmo Fnordlicht support +Kang Jeong-Hee - Korean translation +Kaya Zeren - Turkish translation +Kenneth Ostby - Audioscrobbler plugin +Kevin H. Patterson - Theora framesize calculation +Koehler, Vitally - solves the problem of audio packet losses by the playback of MPEG2 transport stream. +Konstanty Bialkowski - improvements on mod files support +kty0ne - WinAmp 5 skin for VLC +Kypchak Kypchak - Kazakh localization +Lahiru Lakmal Priyadarshana - Qt4 patch +Laurent Jonqueres - Occitan localization +Laurent Mutricy - HTTP interface fixes +Leo Spalteholz - Qt interface design +Loox Thefuture - Media key in X11 vout +Lorena Gomes - Catalan translation +Luca Barbato - RTSP client fix +Ludovic Fauvet - Qt4 fixes, EPG +Lukas Durfina - Qt4: full screen controller. Teletext button fix. Various fixes. +Luqman Hakim - Indonesian translation +Mahrazi Mohd Kamal - Malay Translation +Malte Tancred - VLCKit patch for URLs +Marc Nolette - PVR support in DirectShow input +Marco Munderloh - HTTP fix for Win32 to URL filenames +Marian Ďurkovič - various RTP and TS fixes +Marián Hikaník - Slovak localisation +Mario Siegmann — German translation +Mark Gritter - fix for netlist packet leak in demuxPSI +Marko Uskokovic - Serbian localisation +Markus Kern - video output window fixes (win32) +Markus Kuespert - BeOS CSS support +Martin Hamrle - PulseAudio output module +Martin Kahr - Apple Remote support +Matej Urbančič - Slovenian translation +Mateus Krepsky Ludwich - rc interface mosaic-order callback +Mathias C. Berens | welcome-soft - German translation +Mathias Kretschmer - IP Multicast support +Mats Rojestal - compilation fixes for Solaris 9 +Matthias P. Nowak - ALSA 5.1 fix +Matthieu Lochegnies - MPEG audio emphasis fix +Mattias Põldaru - Estonian translation +Max Rudberg - Mac OS X controller art (v0.7.0) +Md. Rezwan Shahid - Bengali translation +Meelad Zakaria - Persian localisation +Michael Hanselmann - AirTunes streaming +Michael Mondragon - ncurses compilation fix +Michael Ploujnikov - Spelling fix +Michał Trzebiatowski - Polish and German translations +Michel Lanners - fixed typos and AltiVec detection +Mickael Hoerdt - IPv6 SSM multicast patch +Miguel Angel Cabrera - RTMP access patch +Mike Schrag - directx device selection +Mikko Hirvonen - Firefox-1.5.x development configure patch +Mindaugas Baranauskas - Lithuanian translation +Miroslav Oujeský - Czech translation +Mirsal Ennaime - D-Bus ameliorations +Moritz Bunkus - Matroska patches +Morten Brix Pedersen - Danish translation +Myckel Habets - Dutch translation +Namhyung Kim - Korean translation +Nilmoni Deb - autoconf and Makefile fixes +Oleksandr Natalenko - Ukranian translation +Olivier Houchard - UDP & HTTP access output fix, ffmpeg mux fix +Olivier Pomel - original VLC code +Omer Ensari - Kurmanji (Kurdish) translation +Ondrej Kuda aka Albert - HTTP interface tips and fixes +Otto Kekäläinen - Finnish translation +Øyvind Kolbu - FreeBSD patches +Patrick Horn - DirectShow patch +Patrick McLean - Libcdio update patch +Paul Corke - pvr and dv patches for newer drivers and hardware +Pauline Castets - NSIS fixes and i18n +Paul Mackerras - AltiVec IDCT and motion +Peter Surda - rc plugin for VLC control through /dev/stdin +Petr Vacek - FTP cleartext authentication +Philippe A. aka "Lotesdelère" - Numerous testing and bug reporting +Philippe Van Hecke - SAP header hash patch +Pierre d'Herbemont - Compile fix +Pierre-Luc Beaudoin - Vorbis 9 channels patch, Jack input fixes. +Pierre Marc Dumuid - Playlist patches +Pierre Ynard - WinCE and win32 fixes +Pittayakom Saingtong - Thai localisation +Przemyslaw Fiala - MMS/TCP fix +Régis Duchesne - original VLC code +Remco Poortinga - IPv6 multicast patch +Rene Gollent - BeOS interface fix +Richard Hosking - v4l2 support +Richard Øiestad - VLC cone graphics (v0.7.x) +Rob Casey - Amino RTSP fix +Robson Braga Araujo - UPnP discovery XML fix +Roine Gustafsson - spudec bug fixes +Roman Bednarek - MPL2 subtitles support +Roustam Ghizdatov - Russian translation +Rudolf Cornelissen - BeOS fixes +Salar Khalilzadeh" - Persian translation +Sašo Kiselkov - RTSP session timeout fix for some STBs, multipass x264 patch +Scott Caudle - Visualization, WX improvements +Seanán Ó Coistín - Irish translation +Sebastian Jenny - AAC decoding channel ordering fix. +Sebastien Chaumat - YOPY port tests +Sebastien Zwickert (aka dilaroga) - Multiple Mac OS fixes and improvements +Сергей Дарьичев - Belarusian translation +Shane Harper - SDL fixes, XVideo video output and Gtk+ interface enhancements +Sidney Doria - Brazilian Portuguese localisation +Simon Damkjær Andersen - playmode icons and the entire Fullscreen Panel design for the OSX GUI (v0.8.6) +Søren Bøg - dynamicoverlays +Sreejith P - Malayalam translation +Srikanth Raju - Chorus flanger audio filter +Stefán Freyr Stefánsson - Qt4 speed slider +Steve Brown - fix for optional PES size bug +Steve Lhomme - MSVC fixes and Matroska enhancements +Steven M. Schultz - BSD/OS port +Steven Sheehy - wxWidgets interface fix +Tadashi Jokagi - Japanese translation +Tanguy Krotoff - LibVLC cleanup and fix. +Tapio Hiltunen - Maemo X11 enhancements +Tim 'O Callaghan - pvr input cleaning patch +Tim Schuerewegen - contrib fixes +Thomas De Rocker - Dutch translation +Thomas Graf - gettext support, German translation +Thomas L. Wood - fixed a bug in QuantMatrixExtension +Thomas Mühlgrabner - AAC fixes. +Thomas Parmelan - mosaic user-defined offsets for substreams +Tom Bigelajzen - Interface icons and help with web design +Tomáš Chvátal - Czech Localisation +Tong Ka Man - playlist_Clear addition +Tòni Galhard - Occitan translation +Torsten Spindler - Script to set vlc as default player on GNOME desktops. +Udo Richter - Trancode padding / cropping +Valek Filippov - Russian translation +Vicente Jimenez Aguilar - Spanish translation +Vincent Dimar - WxWidgets online help patch +Vincent Penne - Teletext decoder +Vincent Penquerc'h < ogg dot k dot ogg dot k at googlemail dot com> - Kate subtitle decoder module +Vincent van den Heuvel - OSX about window artwork (v0.8.4) +Vincenzo Reale - Italian translation +Vitalijus Slavinskas - nsv patches +Vitaly V. Bursov +Vladimir Chernyshov - MMX motion optimizations +Vladimir Yermolayev -- Russian translation +Wade Majors - BeOS icon integration, debugging and fixes +Wallace Wadge - multiple programs TS mux +Wang Bo - Real support improvements. +Watanabe Go - fix for non-ASCII filenames +Wei Mingzhi - Simplied Chinese translation +William Hawkins - Speex RTP payload format +Xavier Maillard - audio converters +Xavier Marchesini - Win32 fixes +Xènia Albà Cantero - Catalan translation +Xuacu Saturio - Asturian translation +Yannick Bréhon - VLC mozilla plugin event listerners. +Ye zhang - Fix for VLM RTSP concurent LEAVE make VLC crash +Yuehua Zhao - real video codec +Yuksel Yildirim - Turkish localisation +Yves Duret - RPM packages +Zhang Tong - Chinese translation + + +Some VLC plugins use external libraries and makes extensive use of the following persons' or companies' code: + +FFmpeg - Copyright (c) 2000-2010 the FFmpeg developers +liba52 - Aaron Holtzman & Michel Lespinasse, et al. +FAAD2 - "Code from FAAD2 is copyright (c) Nero AG, www.nero.com" +FAAC - Menno Bakker, Krzysztof Nikiel & The individual contributors +libmpeg2 - Aaron Holtzman & Michel Lespinasse, et al. +ogg, theora, vorbis - Monty & the Xiph.org Foundation +flac - Josh Coalson et al. +Sparkle - Andy Matuschak et al. diff --git a/Lib/VLC/libvlc.dll b/Lib/VLC/libvlc.dll new file mode 100644 index 0000000000000000000000000000000000000000..4181ff1382061b7a9127b215336aaae99f700f9f --- /dev/null +++ b/Lib/VLC/libvlc.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77591606e031701f3f7d92772db8f27492072c9e2a23b2ac4a307c79fc1f3040 +size 102400 diff --git a/Lib/VLC/libvlc.dll.manifest b/Lib/VLC/libvlc.dll.manifest new file mode 100644 index 0000000000000000000000000000000000000000..e510bb673186b7efb2453eaca540340a339016da --- /dev/null +++ b/Lib/VLC/libvlc.dll.manifest @@ -0,0 +1,10 @@ + + + + LibVLC + \ No newline at end of file diff --git a/Lib/VLC/libvlccore.dll b/Lib/VLC/libvlccore.dll new file mode 100644 index 0000000000000000000000000000000000000000..0051e4462ed7ffb3dae8a7b970394d413fff2dea --- /dev/null +++ b/Lib/VLC/libvlccore.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:28ecf34610ce2dfd1e45888f07bbdda2a6006c7d65e8679fda82c6a1e0fe18a4 +size 2279936 diff --git a/Lib/VLC/plugins/liba52_plugin.dll b/Lib/VLC/plugins/liba52_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..5471bfc5bb19362f6fb1facbd79634b5a0386872 Binary files /dev/null and b/Lib/VLC/plugins/liba52_plugin.dll differ diff --git a/Lib/VLC/plugins/liba52tofloat32_plugin.dll b/Lib/VLC/plugins/liba52tofloat32_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..3613f3a8685445e3ac5e7804465915076c72b8e2 Binary files /dev/null and b/Lib/VLC/plugins/liba52tofloat32_plugin.dll differ diff --git a/Lib/VLC/plugins/liba52tospdif_plugin.dll b/Lib/VLC/plugins/liba52tospdif_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..5c0cd54f746e0f8bffb4977c67a84ba1d02dba6c Binary files /dev/null and b/Lib/VLC/plugins/liba52tospdif_plugin.dll differ diff --git a/Lib/VLC/plugins/libaccess_attachment_plugin.dll b/Lib/VLC/plugins/libaccess_attachment_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..1df474232f6e9d01b8fa97b598272be09282188b Binary files /dev/null and b/Lib/VLC/plugins/libaccess_attachment_plugin.dll differ diff --git a/Lib/VLC/plugins/libaccess_bd_plugin.dll b/Lib/VLC/plugins/libaccess_bd_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..34e2fc7c764d10c5b6d977e23e8ba506727f0864 Binary files /dev/null and b/Lib/VLC/plugins/libaccess_bd_plugin.dll differ diff --git a/Lib/VLC/plugins/libaccess_fake_plugin.dll b/Lib/VLC/plugins/libaccess_fake_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..40f5289ec6e04e6c37f553ed04d68c4d323eaae9 Binary files /dev/null and b/Lib/VLC/plugins/libaccess_fake_plugin.dll differ diff --git a/Lib/VLC/plugins/libaccess_ftp_plugin.dll b/Lib/VLC/plugins/libaccess_ftp_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..c28c7745bfdc0089ef34c4ea093f5617952ba323 Binary files /dev/null and b/Lib/VLC/plugins/libaccess_ftp_plugin.dll differ diff --git a/Lib/VLC/plugins/libaccess_http_plugin.dll b/Lib/VLC/plugins/libaccess_http_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..fdb41275472a9cbf8d8ae269d9f7cc7677af0334 Binary files /dev/null and b/Lib/VLC/plugins/libaccess_http_plugin.dll differ diff --git a/Lib/VLC/plugins/libaccess_imem_plugin.dll b/Lib/VLC/plugins/libaccess_imem_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..961149def3cdea59390783001c84061eab4e2412 Binary files /dev/null and b/Lib/VLC/plugins/libaccess_imem_plugin.dll differ diff --git a/Lib/VLC/plugins/libaccess_mms_plugin.dll b/Lib/VLC/plugins/libaccess_mms_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..ff8d6cd4bc5092f69beb7ca91f00cd81fe37c26a Binary files /dev/null and b/Lib/VLC/plugins/libaccess_mms_plugin.dll differ diff --git a/Lib/VLC/plugins/libaccess_output_dummy_plugin.dll b/Lib/VLC/plugins/libaccess_output_dummy_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..a90afee99e6a7d6a33650b3a1e341506b1418ffc Binary files /dev/null and b/Lib/VLC/plugins/libaccess_output_dummy_plugin.dll differ diff --git a/Lib/VLC/plugins/libaccess_output_file_plugin.dll b/Lib/VLC/plugins/libaccess_output_file_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..d62b0be47b6b3de13ab6cc1f02e79f520255be14 Binary files /dev/null and b/Lib/VLC/plugins/libaccess_output_file_plugin.dll differ diff --git a/Lib/VLC/plugins/libaccess_output_http_plugin.dll b/Lib/VLC/plugins/libaccess_output_http_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..e6909eb3aa6fb21ef503a23dfb5955207eec9ade Binary files /dev/null and b/Lib/VLC/plugins/libaccess_output_http_plugin.dll differ diff --git a/Lib/VLC/plugins/libaccess_output_shout_plugin.dll b/Lib/VLC/plugins/libaccess_output_shout_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..21e6b6284d5093e518d3f08e27f6c06723f4e17c --- /dev/null +++ b/Lib/VLC/plugins/libaccess_output_shout_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5cf9749b0c4579202c5845b3774bdf3f7733c6e3b9af411a07564c362385052f +size 394240 diff --git a/Lib/VLC/plugins/libaccess_output_udp_plugin.dll b/Lib/VLC/plugins/libaccess_output_udp_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..19c7fcc0a9c395f19e346ea3847e01d6599ab076 Binary files /dev/null and b/Lib/VLC/plugins/libaccess_output_udp_plugin.dll differ diff --git a/Lib/VLC/plugins/libaccess_realrtsp_plugin.dll b/Lib/VLC/plugins/libaccess_realrtsp_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..90f50d825c958a8f1d4f16d06b51aead24e72a31 Binary files /dev/null and b/Lib/VLC/plugins/libaccess_realrtsp_plugin.dll differ diff --git a/Lib/VLC/plugins/libaccess_smb_plugin.dll b/Lib/VLC/plugins/libaccess_smb_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..4ad2dad5fe9a21553495f3f6a0d4045ce64caa27 Binary files /dev/null and b/Lib/VLC/plugins/libaccess_smb_plugin.dll differ diff --git a/Lib/VLC/plugins/libaccess_tcp_plugin.dll b/Lib/VLC/plugins/libaccess_tcp_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..1e9f5c126a438641528079150389bb87b70acdd6 Binary files /dev/null and b/Lib/VLC/plugins/libaccess_tcp_plugin.dll differ diff --git a/Lib/VLC/plugins/libaccess_udp_plugin.dll b/Lib/VLC/plugins/libaccess_udp_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..589c1f9a4971e9c4caa4319d6219ca6a0e819827 Binary files /dev/null and b/Lib/VLC/plugins/libaccess_udp_plugin.dll differ diff --git a/Lib/VLC/plugins/libadjust_plugin.dll b/Lib/VLC/plugins/libadjust_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..80eeee1562ba3230247c85ff1a418ed430b910fb Binary files /dev/null and b/Lib/VLC/plugins/libadjust_plugin.dll differ diff --git a/Lib/VLC/plugins/libadpcm_plugin.dll b/Lib/VLC/plugins/libadpcm_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..91b90a7e694b9e3554c84430161f9fb13359a43d Binary files /dev/null and b/Lib/VLC/plugins/libadpcm_plugin.dll differ diff --git a/Lib/VLC/plugins/libaes3_plugin.dll b/Lib/VLC/plugins/libaes3_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..e16812e21889e2eea997018ab72902a4e4d49df2 Binary files /dev/null and b/Lib/VLC/plugins/libaes3_plugin.dll differ diff --git a/Lib/VLC/plugins/libaiff_plugin.dll b/Lib/VLC/plugins/libaiff_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..a5522df43f0944462903117b3ac289001c2bfcc1 Binary files /dev/null and b/Lib/VLC/plugins/libaiff_plugin.dll differ diff --git a/Lib/VLC/plugins/libalphamask_plugin.dll b/Lib/VLC/plugins/libalphamask_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..321312daddeb933b047bb26befd657c48bae7d91 Binary files /dev/null and b/Lib/VLC/plugins/libalphamask_plugin.dll differ diff --git a/Lib/VLC/plugins/libaout_directx_plugin.dll b/Lib/VLC/plugins/libaout_directx_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..a05a659619f136f221a057f9f6cac61f9d08a875 Binary files /dev/null and b/Lib/VLC/plugins/libaout_directx_plugin.dll differ diff --git a/Lib/VLC/plugins/libaout_file_plugin.dll b/Lib/VLC/plugins/libaout_file_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..902021a1c16dc34473dd317a93d9569041f0a6e5 Binary files /dev/null and b/Lib/VLC/plugins/libaout_file_plugin.dll differ diff --git a/Lib/VLC/plugins/libaout_sdl_plugin.dll b/Lib/VLC/plugins/libaout_sdl_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..372561c8588932080851ea8d5bff0d2427a53374 --- /dev/null +++ b/Lib/VLC/plugins/libaout_sdl_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eae16705889a026772450a05fb2ff6e22d1ad616b60a49fb2433aa12fe638153 +size 266240 diff --git a/Lib/VLC/plugins/libaraw_plugin.dll b/Lib/VLC/plugins/libaraw_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..569ef73963953fe8493ae3456f8f3ece083da862 Binary files /dev/null and b/Lib/VLC/plugins/libaraw_plugin.dll differ diff --git a/Lib/VLC/plugins/libasf_plugin.dll b/Lib/VLC/plugins/libasf_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..52b02705afba6c430e39050b382b542001cd5fe2 Binary files /dev/null and b/Lib/VLC/plugins/libasf_plugin.dll differ diff --git a/Lib/VLC/plugins/libatmo_plugin.dll b/Lib/VLC/plugins/libatmo_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..bdf6971de18a78d1fb6f4d27d21199db96a52ec7 --- /dev/null +++ b/Lib/VLC/plugins/libatmo_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a53ca8b8ac2ebe862d9bb8a9af63e8f10c59c41e157d19093de7fd84dcd7c40e +size 183296 diff --git a/Lib/VLC/plugins/libau_plugin.dll b/Lib/VLC/plugins/libau_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..20665bc49b14fc00494fcb24ce96834471efe665 Binary files /dev/null and b/Lib/VLC/plugins/libau_plugin.dll differ diff --git a/Lib/VLC/plugins/libaudio_format_plugin.dll b/Lib/VLC/plugins/libaudio_format_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..034fb41a0a250dc76a6056a13f7874b35aac0625 Binary files /dev/null and b/Lib/VLC/plugins/libaudio_format_plugin.dll differ diff --git a/Lib/VLC/plugins/libaudiobargraph_a_plugin.dll b/Lib/VLC/plugins/libaudiobargraph_a_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..5c72a29bb086478952f55f11761c5610ad3df735 Binary files /dev/null and b/Lib/VLC/plugins/libaudiobargraph_a_plugin.dll differ diff --git a/Lib/VLC/plugins/libaudiobargraph_v_plugin.dll b/Lib/VLC/plugins/libaudiobargraph_v_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..78e554eaa4c4a8d3b4878dfe794bd03cec9458ef Binary files /dev/null and b/Lib/VLC/plugins/libaudiobargraph_v_plugin.dll differ diff --git a/Lib/VLC/plugins/libaudioscrobbler_plugin.dll b/Lib/VLC/plugins/libaudioscrobbler_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..5663e6e8d9b30409e124ee9756f3befa7f792386 Binary files /dev/null and b/Lib/VLC/plugins/libaudioscrobbler_plugin.dll differ diff --git a/Lib/VLC/plugins/libavcodec_plugin.dll b/Lib/VLC/plugins/libavcodec_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..7944486b99e528230df501781222d95401f6b0ad --- /dev/null +++ b/Lib/VLC/plugins/libavcodec_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42ea75a453a34c1c9c050fe4c9ea8916c0f1f2cb3b62bec1c7dff8175c543b46 +size 7365120 diff --git a/Lib/VLC/plugins/libavi_plugin.dll b/Lib/VLC/plugins/libavi_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..93ca1ac8c8462d3f0c8ec7a7deaf4c098ffa78ca Binary files /dev/null and b/Lib/VLC/plugins/libavi_plugin.dll differ diff --git a/Lib/VLC/plugins/libball_plugin.dll b/Lib/VLC/plugins/libball_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..4e28aab9167ef7580135b424e6637c85485d7e5f Binary files /dev/null and b/Lib/VLC/plugins/libball_plugin.dll differ diff --git a/Lib/VLC/plugins/libbandlimited_resampler_plugin.dll b/Lib/VLC/plugins/libbandlimited_resampler_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..6b3b95d934ec574ea17287851e4d92901db813b8 Binary files /dev/null and b/Lib/VLC/plugins/libbandlimited_resampler_plugin.dll differ diff --git a/Lib/VLC/plugins/libbda_plugin.dll b/Lib/VLC/plugins/libbda_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..c7f318bb2f8d7a55be5e724007707ec1513eca63 --- /dev/null +++ b/Lib/VLC/plugins/libbda_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4012dbcaa5a312b23e31880e32417c60c0f41cb2088fda6d7c36455279a46e3 +size 150016 diff --git a/Lib/VLC/plugins/libblend_plugin.dll b/Lib/VLC/plugins/libblend_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..d3d9d8c53829fcf0c81bc2485f946f304eca981a Binary files /dev/null and b/Lib/VLC/plugins/libblend_plugin.dll differ diff --git a/Lib/VLC/plugins/libblendbench_plugin.dll b/Lib/VLC/plugins/libblendbench_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..f06f0a74a9e4e76151955a4c42873ab97899cdd7 Binary files /dev/null and b/Lib/VLC/plugins/libblendbench_plugin.dll differ diff --git a/Lib/VLC/plugins/libbluescreen_plugin.dll b/Lib/VLC/plugins/libbluescreen_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..a100dec9433815b25752e370ca03a6324469eb11 Binary files /dev/null and b/Lib/VLC/plugins/libbluescreen_plugin.dll differ diff --git a/Lib/VLC/plugins/libcaca_plugin.dll b/Lib/VLC/plugins/libcaca_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..2e8b7016de85de1bf9ccaed3cd44382cad5a35c6 --- /dev/null +++ b/Lib/VLC/plugins/libcaca_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d197418a0412dbd5c45c43ece47d6d9b6348df0d9163a3d8506fa94ae1467b3 +size 831488 diff --git a/Lib/VLC/plugins/libcanvas_plugin.dll b/Lib/VLC/plugins/libcanvas_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..6f69054c7d88c5417b42ae8af385f8cf7ef5be0c Binary files /dev/null and b/Lib/VLC/plugins/libcanvas_plugin.dll differ diff --git a/Lib/VLC/plugins/libcc_plugin.dll b/Lib/VLC/plugins/libcc_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..ccc4bea59cfdfd82d0229cd0c4443a776022850c Binary files /dev/null and b/Lib/VLC/plugins/libcc_plugin.dll differ diff --git a/Lib/VLC/plugins/libcdda_plugin.dll b/Lib/VLC/plugins/libcdda_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..430d41f5edcd85c87a00164096e880e9c5f0a7d8 --- /dev/null +++ b/Lib/VLC/plugins/libcdda_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae811cf45dd2b2e9f6622544ae233db306cb9b5c29add90a5fc51256c287da6c +size 129536 diff --git a/Lib/VLC/plugins/libcdg_plugin.dll b/Lib/VLC/plugins/libcdg_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..875add91a80d63a3d3560eb78870903374dc9d64 Binary files /dev/null and b/Lib/VLC/plugins/libcdg_plugin.dll differ diff --git a/Lib/VLC/plugins/libchain_plugin.dll b/Lib/VLC/plugins/libchain_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..0b2e6a4bd738db732278539ed2db04600416765d Binary files /dev/null and b/Lib/VLC/plugins/libchain_plugin.dll differ diff --git a/Lib/VLC/plugins/libchorus_flanger_plugin.dll b/Lib/VLC/plugins/libchorus_flanger_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..c4cbd7c5c7be90c9cb1aaedf353c9d8f977291a4 Binary files /dev/null and b/Lib/VLC/plugins/libchorus_flanger_plugin.dll differ diff --git a/Lib/VLC/plugins/libclone_plugin.dll b/Lib/VLC/plugins/libclone_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..615b58e9ce66a67687a9609dae17b6d3984fbb36 Binary files /dev/null and b/Lib/VLC/plugins/libclone_plugin.dll differ diff --git a/Lib/VLC/plugins/libcolorthres_plugin.dll b/Lib/VLC/plugins/libcolorthres_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..a37e761e12c51c542e3940c3d3f57b86316ff199 Binary files /dev/null and b/Lib/VLC/plugins/libcolorthres_plugin.dll differ diff --git a/Lib/VLC/plugins/libconverter_fixed_plugin.dll b/Lib/VLC/plugins/libconverter_fixed_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..370259fb5ddd617e992e60e3991bb542c48b2fbc Binary files /dev/null and b/Lib/VLC/plugins/libconverter_fixed_plugin.dll differ diff --git a/Lib/VLC/plugins/libcrop_plugin.dll b/Lib/VLC/plugins/libcrop_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..5400cb1e7e2ace3a50a0421a9e02d79007c294e6 Binary files /dev/null and b/Lib/VLC/plugins/libcrop_plugin.dll differ diff --git a/Lib/VLC/plugins/libcroppadd_plugin.dll b/Lib/VLC/plugins/libcroppadd_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..e751efd63259dac8f252f8b176f69b7b393a6fc1 Binary files /dev/null and b/Lib/VLC/plugins/libcroppadd_plugin.dll differ diff --git a/Lib/VLC/plugins/libcvdsub_plugin.dll b/Lib/VLC/plugins/libcvdsub_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..ece83529468fd819e1576a19ae34d7fe5bfdc86a Binary files /dev/null and b/Lib/VLC/plugins/libcvdsub_plugin.dll differ diff --git a/Lib/VLC/plugins/libdeinterlace_plugin.dll b/Lib/VLC/plugins/libdeinterlace_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..fc0371608a09d9e1fcbb546a6e0fab0f8168abb6 Binary files /dev/null and b/Lib/VLC/plugins/libdeinterlace_plugin.dll differ diff --git a/Lib/VLC/plugins/libdemux_cdg_plugin.dll b/Lib/VLC/plugins/libdemux_cdg_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..6ad377a42c529f2a172cee139fc440af73b8e4bc Binary files /dev/null and b/Lib/VLC/plugins/libdemux_cdg_plugin.dll differ diff --git a/Lib/VLC/plugins/libdemuxdump_plugin.dll b/Lib/VLC/plugins/libdemuxdump_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..d901412a86b51ac943c4f23c72ac428cd26a3670 Binary files /dev/null and b/Lib/VLC/plugins/libdemuxdump_plugin.dll differ diff --git a/Lib/VLC/plugins/libdirac_plugin.dll b/Lib/VLC/plugins/libdirac_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..2ab2761208a39061efe712ad488c2ca488084efc --- /dev/null +++ b/Lib/VLC/plugins/libdirac_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c8ac1ff9647544c3c93d06aef8e717adb43368a083d33e9e0dac4bb9e7625ba +size 1132544 diff --git a/Lib/VLC/plugins/libdirect3d_plugin.dll b/Lib/VLC/plugins/libdirect3d_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..3d0cd55b806ebdb93f0660e2aa4af28d34d4919f Binary files /dev/null and b/Lib/VLC/plugins/libdirect3d_plugin.dll differ diff --git a/Lib/VLC/plugins/libdirectx_plugin.dll b/Lib/VLC/plugins/libdirectx_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..37c070d045518aff1983f39dbe7e764f17a7609c Binary files /dev/null and b/Lib/VLC/plugins/libdirectx_plugin.dll differ diff --git a/Lib/VLC/plugins/libdmo_plugin.dll b/Lib/VLC/plugins/libdmo_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..7f5f39ee8af6636b272292732825ef4841888104 Binary files /dev/null and b/Lib/VLC/plugins/libdmo_plugin.dll differ diff --git a/Lib/VLC/plugins/libdolby_surround_decoder_plugin.dll b/Lib/VLC/plugins/libdolby_surround_decoder_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..ca3c4558c886f85b06ea2692e13336861399ceec Binary files /dev/null and b/Lib/VLC/plugins/libdolby_surround_decoder_plugin.dll differ diff --git a/Lib/VLC/plugins/libdrawable_plugin.dll b/Lib/VLC/plugins/libdrawable_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..0e5727c165e9530813fecf4e24cb0570f4b9beb5 Binary files /dev/null and b/Lib/VLC/plugins/libdrawable_plugin.dll differ diff --git a/Lib/VLC/plugins/libdshow_plugin.dll b/Lib/VLC/plugins/libdshow_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..ae63b52646f270f9089b88fcd8c0d6cb8d064485 --- /dev/null +++ b/Lib/VLC/plugins/libdshow_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8788beeaab6b09a7831c84ea219d7f9d27e2b0a7aed6c9f4eff8ce9dd43e1fc +size 207872 diff --git a/Lib/VLC/plugins/libdts_plugin.dll b/Lib/VLC/plugins/libdts_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..6b3d73231818de53b53a86e3fdba540e808896b3 Binary files /dev/null and b/Lib/VLC/plugins/libdts_plugin.dll differ diff --git a/Lib/VLC/plugins/libdtstofloat32_plugin.dll b/Lib/VLC/plugins/libdtstofloat32_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..a6eec789d1e386c6b0918b96a4aab978b1685a86 --- /dev/null +++ b/Lib/VLC/plugins/libdtstofloat32_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8e289f2ab1769c92a5d111206a005e42bc3d9df516217b790240056099937a4 +size 178176 diff --git a/Lib/VLC/plugins/libdtstospdif_plugin.dll b/Lib/VLC/plugins/libdtstospdif_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..725e05fbf745a5fbe1c65c4dce4b956697e744f5 Binary files /dev/null and b/Lib/VLC/plugins/libdtstospdif_plugin.dll differ diff --git a/Lib/VLC/plugins/libdummy_plugin.dll b/Lib/VLC/plugins/libdummy_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..e13ca73189e1a3d236b8b1680d47defa0259b6e1 Binary files /dev/null and b/Lib/VLC/plugins/libdummy_plugin.dll differ diff --git a/Lib/VLC/plugins/libdvbsub_plugin.dll b/Lib/VLC/plugins/libdvbsub_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..9bbc785a1ff9a2dd0618b2cf461262035ba6864d --- /dev/null +++ b/Lib/VLC/plugins/libdvbsub_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:490286497237fc2cf5e72e280ea45730a7d1fd7b423c6c32b0b3bec1cc8e171b +size 149504 diff --git a/Lib/VLC/plugins/libdvdnav_plugin.dll b/Lib/VLC/plugins/libdvdnav_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..3b2085087dfd37470e6dffe50def85d0d6edc3a9 --- /dev/null +++ b/Lib/VLC/plugins/libdvdnav_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:497c511103c0fdd7ec87a35a80bc202d864a7bc6d3590e39e4606318babafd54 +size 230912 diff --git a/Lib/VLC/plugins/libdvdread_plugin.dll b/Lib/VLC/plugins/libdvdread_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..3782078a737ae9b7fcf846ec65ca1128ab1aff52 --- /dev/null +++ b/Lib/VLC/plugins/libdvdread_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:38cdad705d963d9091b4444e2444c0898f0b92ecd7423ed6d52b6ba7964fb26a +size 157184 diff --git a/Lib/VLC/plugins/libequalizer_plugin.dll b/Lib/VLC/plugins/libequalizer_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..3c9b60b4aa01ae80c7f8d2ed3d61a9f28b2278b8 Binary files /dev/null and b/Lib/VLC/plugins/libequalizer_plugin.dll differ diff --git a/Lib/VLC/plugins/liberase_plugin.dll b/Lib/VLC/plugins/liberase_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..fae53b64198cd9c99d7d4fdf36f7fc196a70cc9f Binary files /dev/null and b/Lib/VLC/plugins/liberase_plugin.dll differ diff --git a/Lib/VLC/plugins/libes_plugin.dll b/Lib/VLC/plugins/libes_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..8d2059d67b43d5cb36df7c94e6a258710602b946 Binary files /dev/null and b/Lib/VLC/plugins/libes_plugin.dll differ diff --git a/Lib/VLC/plugins/libexport_plugin.dll b/Lib/VLC/plugins/libexport_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..080d71511b02313084d999090b21397f4ca2964c Binary files /dev/null and b/Lib/VLC/plugins/libexport_plugin.dll differ diff --git a/Lib/VLC/plugins/libextract_plugin.dll b/Lib/VLC/plugins/libextract_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..2783dfb0b30693e67cf3f0458c1f617dae132b21 Binary files /dev/null and b/Lib/VLC/plugins/libextract_plugin.dll differ diff --git a/Lib/VLC/plugins/libfaad_plugin.dll b/Lib/VLC/plugins/libfaad_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..5b6c95a9b721433a1d70e9c80583562bc6684faa --- /dev/null +++ b/Lib/VLC/plugins/libfaad_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:32fc2f56ddd2104ad388222b32b41e2c336d866a41c432a33475a0fc9058d895 +size 310272 diff --git a/Lib/VLC/plugins/libfake_plugin.dll b/Lib/VLC/plugins/libfake_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..c86dc82dd31402c6cd3acd89750e06692bb151d4 Binary files /dev/null and b/Lib/VLC/plugins/libfake_plugin.dll differ diff --git a/Lib/VLC/plugins/libfilesystem_plugin.dll b/Lib/VLC/plugins/libfilesystem_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..641013ffa3e75b472aeaa7dbc49547617daf0af5 Binary files /dev/null and b/Lib/VLC/plugins/libfilesystem_plugin.dll differ diff --git a/Lib/VLC/plugins/libflac_plugin.dll b/Lib/VLC/plugins/libflac_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..2e8c46c6b8e1bff1b1a4cebccb1678242bcb4f94 --- /dev/null +++ b/Lib/VLC/plugins/libflac_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c62d35b28e525525505890839594cb014448773b2335b55260b86cb0a523f0c0 +size 264704 diff --git a/Lib/VLC/plugins/libflacsys_plugin.dll b/Lib/VLC/plugins/libflacsys_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..9bf1a798b444aeba457a3aceba70f0b00a738d39 Binary files /dev/null and b/Lib/VLC/plugins/libflacsys_plugin.dll differ diff --git a/Lib/VLC/plugins/libfloat32_mixer_plugin.dll b/Lib/VLC/plugins/libfloat32_mixer_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..07a1630761fe676a1e5229898765c33ad4101c26 Binary files /dev/null and b/Lib/VLC/plugins/libfloat32_mixer_plugin.dll differ diff --git a/Lib/VLC/plugins/libfluidsynth_plugin.dll b/Lib/VLC/plugins/libfluidsynth_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..f775643097aca1b1e92507b2eeaf06d2c6f90d52 --- /dev/null +++ b/Lib/VLC/plugins/libfluidsynth_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:306b13951b6248ed94e18222e39dd517d335d8356de6bc44e78fef9d8ece7665 +size 258048 diff --git a/Lib/VLC/plugins/libfolder_plugin.dll b/Lib/VLC/plugins/libfolder_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..ba3afb0ee98da5d09cdf0731a4b84005882c5471 Binary files /dev/null and b/Lib/VLC/plugins/libfolder_plugin.dll differ diff --git a/Lib/VLC/plugins/libfreetype_plugin.dll b/Lib/VLC/plugins/libfreetype_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..7a50022b15255815ba212f3068fd3f91e149d306 --- /dev/null +++ b/Lib/VLC/plugins/libfreetype_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:109fba56f835f0b346a88ce15d8adef40725271ec57080bc7dec4abcb078795f +size 1762816 diff --git a/Lib/VLC/plugins/libgaussianblur_plugin.dll b/Lib/VLC/plugins/libgaussianblur_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..25c00923065b5607e2fc4fb1bd6405aee381395f Binary files /dev/null and b/Lib/VLC/plugins/libgaussianblur_plugin.dll differ diff --git a/Lib/VLC/plugins/libgestures_plugin.dll b/Lib/VLC/plugins/libgestures_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..5a73cdd161f3c24fa8af8ffa5869ac52294447d1 Binary files /dev/null and b/Lib/VLC/plugins/libgestures_plugin.dll differ diff --git a/Lib/VLC/plugins/libglobalhotkeys_plugin.dll b/Lib/VLC/plugins/libglobalhotkeys_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..612ede4270f3c3d83951dfbf96ac89edc93dd0a8 Binary files /dev/null and b/Lib/VLC/plugins/libglobalhotkeys_plugin.dll differ diff --git a/Lib/VLC/plugins/libglwin32_plugin.dll b/Lib/VLC/plugins/libglwin32_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..5478cd1296795ebc1d76fe79e9e45d989b034a2c Binary files /dev/null and b/Lib/VLC/plugins/libglwin32_plugin.dll differ diff --git a/Lib/VLC/plugins/libgme_plugin.dll b/Lib/VLC/plugins/libgme_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..b5837670862ca6fcdeacbd446ba0ef493c6b4e25 --- /dev/null +++ b/Lib/VLC/plugins/libgme_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:deddfdd410c2a8aedc0aa634997665a50377dae1c0caabf82b53f25d0c3459af +size 379392 diff --git a/Lib/VLC/plugins/libgnutls_plugin.dll b/Lib/VLC/plugins/libgnutls_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..56b3bd1b805926c6fbe909ce15b9c078b7c3f22f --- /dev/null +++ b/Lib/VLC/plugins/libgnutls_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01ad4c2defcd5d85f722db13efa100596a305de9cc933cbd4502a8d7ab8b58b1 +size 1044480 diff --git a/Lib/VLC/plugins/libgoom_plugin.dll b/Lib/VLC/plugins/libgoom_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..272d145c1b6d46f636164554574755b1a5bf688e --- /dev/null +++ b/Lib/VLC/plugins/libgoom_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2504f139be76b2affdaa88b79b2b35261929cc9201e586f306ef84f412efcd0d +size 231936 diff --git a/Lib/VLC/plugins/libgradient_plugin.dll b/Lib/VLC/plugins/libgradient_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..95685454080a16d097ced1b7d415c35fa5638d8c Binary files /dev/null and b/Lib/VLC/plugins/libgradient_plugin.dll differ diff --git a/Lib/VLC/plugins/libgrain_plugin.dll b/Lib/VLC/plugins/libgrain_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..a5502216a1234f11fd8b1b94a229741100eb3807 Binary files /dev/null and b/Lib/VLC/plugins/libgrain_plugin.dll differ diff --git a/Lib/VLC/plugins/libgrey_yuv_plugin.dll b/Lib/VLC/plugins/libgrey_yuv_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..4edbdb519b908be25cb24f2f313f4e4f2c31e642 Binary files /dev/null and b/Lib/VLC/plugins/libgrey_yuv_plugin.dll differ diff --git a/Lib/VLC/plugins/libh264_plugin.dll b/Lib/VLC/plugins/libh264_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..5b77ca9588323e510ee5dee8c41726652b3867f4 Binary files /dev/null and b/Lib/VLC/plugins/libh264_plugin.dll differ diff --git a/Lib/VLC/plugins/libheadphone_channel_mixer_plugin.dll b/Lib/VLC/plugins/libheadphone_channel_mixer_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..63923ce2a8f7c280fc37e8739ffba71456f29192 Binary files /dev/null and b/Lib/VLC/plugins/libheadphone_channel_mixer_plugin.dll differ diff --git a/Lib/VLC/plugins/libhotkeys_plugin.dll b/Lib/VLC/plugins/libhotkeys_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..a8625e1ee753c2e3d869dacbb7e4e894ac130600 Binary files /dev/null and b/Lib/VLC/plugins/libhotkeys_plugin.dll differ diff --git a/Lib/VLC/plugins/libi420_rgb_mmx_plugin.dll b/Lib/VLC/plugins/libi420_rgb_mmx_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..687fb522cd941008ff1cc874f39757f9febb435f Binary files /dev/null and b/Lib/VLC/plugins/libi420_rgb_mmx_plugin.dll differ diff --git a/Lib/VLC/plugins/libi420_rgb_plugin.dll b/Lib/VLC/plugins/libi420_rgb_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..0495a56f5486ee291d42005300a9a6a01e43cb8c Binary files /dev/null and b/Lib/VLC/plugins/libi420_rgb_plugin.dll differ diff --git a/Lib/VLC/plugins/libi420_rgb_sse2_plugin.dll b/Lib/VLC/plugins/libi420_rgb_sse2_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..cc0518b930616591b2404e80a8689842db1a2211 --- /dev/null +++ b/Lib/VLC/plugins/libi420_rgb_sse2_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b43c0ad98711db0fc05d695caab816aa6ee93da615bfa5a56fdef80208548ac5 +size 134656 diff --git a/Lib/VLC/plugins/libi420_yuy2_mmx_plugin.dll b/Lib/VLC/plugins/libi420_yuy2_mmx_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..0d346d4e4c066b0059830f6c3726ef13b636bc42 Binary files /dev/null and b/Lib/VLC/plugins/libi420_yuy2_mmx_plugin.dll differ diff --git a/Lib/VLC/plugins/libi420_yuy2_plugin.dll b/Lib/VLC/plugins/libi420_yuy2_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..ed80834de76b209a0778b3b0186a0c2c72e542ca Binary files /dev/null and b/Lib/VLC/plugins/libi420_yuy2_plugin.dll differ diff --git a/Lib/VLC/plugins/libi420_yuy2_sse2_plugin.dll b/Lib/VLC/plugins/libi420_yuy2_sse2_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..d60b411817be5bb22c74cf77c776d465ad6abbb9 Binary files /dev/null and b/Lib/VLC/plugins/libi420_yuy2_sse2_plugin.dll differ diff --git a/Lib/VLC/plugins/libi422_i420_plugin.dll b/Lib/VLC/plugins/libi422_i420_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..6372e833cc4dea24055c0fc1aaadfc1198e16be4 Binary files /dev/null and b/Lib/VLC/plugins/libi422_i420_plugin.dll differ diff --git a/Lib/VLC/plugins/libi422_yuy2_mmx_plugin.dll b/Lib/VLC/plugins/libi422_yuy2_mmx_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..8074f7bae1a69d92dc8df3d6e35a46357f0dfc08 Binary files /dev/null and b/Lib/VLC/plugins/libi422_yuy2_mmx_plugin.dll differ diff --git a/Lib/VLC/plugins/libi422_yuy2_plugin.dll b/Lib/VLC/plugins/libi422_yuy2_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..b54bbf12ede4ded0945d660295462a6d5b06976e Binary files /dev/null and b/Lib/VLC/plugins/libi422_yuy2_plugin.dll differ diff --git a/Lib/VLC/plugins/libi422_yuy2_sse2_plugin.dll b/Lib/VLC/plugins/libi422_yuy2_sse2_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..14c938d69c253f2f04e98d05294aff74c07df749 Binary files /dev/null and b/Lib/VLC/plugins/libi422_yuy2_sse2_plugin.dll differ diff --git a/Lib/VLC/plugins/libinvert_plugin.dll b/Lib/VLC/plugins/libinvert_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..f233aabe0eefc9129c5fbcc60ccec973aabfdadf Binary files /dev/null and b/Lib/VLC/plugins/libinvert_plugin.dll differ diff --git a/Lib/VLC/plugins/libinvmem_plugin.dll b/Lib/VLC/plugins/libinvmem_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..f47751a5c6c74aafc98e7a783b167a824b2b1a79 Binary files /dev/null and b/Lib/VLC/plugins/libinvmem_plugin.dll differ diff --git a/Lib/VLC/plugins/libkate_plugin.dll b/Lib/VLC/plugins/libkate_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..bc336c0f49b7a4a0caf1b6fdd542a3bac22c51a0 Binary files /dev/null and b/Lib/VLC/plugins/libkate_plugin.dll differ diff --git a/Lib/VLC/plugins/liblibass_plugin.dll b/Lib/VLC/plugins/liblibass_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..63a5b53b293df32edf6396d099c2dac637dc8349 --- /dev/null +++ b/Lib/VLC/plugins/liblibass_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af76cd273c4b867a7474de6db4315ab228eaa98d9609ca745f24aad37b418c0e +size 1763328 diff --git a/Lib/VLC/plugins/liblibmpeg2_plugin.dll b/Lib/VLC/plugins/liblibmpeg2_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..3c49f4a50e693b673767b5d32fd2435e47f963b2 --- /dev/null +++ b/Lib/VLC/plugins/liblibmpeg2_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6a4ba76eabcf9214ee03ceb2e7eb505e59a4881a3b6a03863103bd4ca09091f +size 152576 diff --git a/Lib/VLC/plugins/liblive555_plugin.dll b/Lib/VLC/plugins/liblive555_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..0ee40e234e0529a2b07398f8efe1277cf4ffb2da --- /dev/null +++ b/Lib/VLC/plugins/liblive555_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff9ba5b90d9e1a777cc512934ca4251d436c8825da5e3b97a633f929564940a2 +size 1082880 diff --git a/Lib/VLC/plugins/liblogger_plugin.dll b/Lib/VLC/plugins/liblogger_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..3240f5ffc3a330772fb50d29e225f2a39d7652f2 Binary files /dev/null and b/Lib/VLC/plugins/liblogger_plugin.dll differ diff --git a/Lib/VLC/plugins/liblogo_plugin.dll b/Lib/VLC/plugins/liblogo_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..8fc4ac25bdc8045dd202a63d5c04a3d6280a6630 Binary files /dev/null and b/Lib/VLC/plugins/liblogo_plugin.dll differ diff --git a/Lib/VLC/plugins/liblpcm_plugin.dll b/Lib/VLC/plugins/liblpcm_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..a5d7f575f6c6e3490e50a7daf300f80b5025a5a9 Binary files /dev/null and b/Lib/VLC/plugins/liblpcm_plugin.dll differ diff --git a/Lib/VLC/plugins/liblua_plugin.dll b/Lib/VLC/plugins/liblua_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..3ccbb253f245e139ec6ad54ebf436fee3a9787ca --- /dev/null +++ b/Lib/VLC/plugins/liblua_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:219d03ea16556329b4c74ad864ebb14a100720f4c77a6b3669cf55fa225a8e46 +size 339456 diff --git a/Lib/VLC/plugins/libmagnify_plugin.dll b/Lib/VLC/plugins/libmagnify_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..95895d11320f480136eca21085c0a7cdf5737c82 Binary files /dev/null and b/Lib/VLC/plugins/libmagnify_plugin.dll differ diff --git a/Lib/VLC/plugins/libmarq_plugin.dll b/Lib/VLC/plugins/libmarq_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..c4ed4454f1f49461d1e9f0a37633b5b139bfa50b Binary files /dev/null and b/Lib/VLC/plugins/libmarq_plugin.dll differ diff --git a/Lib/VLC/plugins/libmediadirs_plugin.dll b/Lib/VLC/plugins/libmediadirs_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..f84c514e0e139d079be8af59638fe19bc8faa212 Binary files /dev/null and b/Lib/VLC/plugins/libmediadirs_plugin.dll differ diff --git a/Lib/VLC/plugins/libmemcpy3dn_plugin.dll b/Lib/VLC/plugins/libmemcpy3dn_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..3ebc50c16879cfc2accf6f47b397cafedfa0e230 Binary files /dev/null and b/Lib/VLC/plugins/libmemcpy3dn_plugin.dll differ diff --git a/Lib/VLC/plugins/libmemcpymmx_plugin.dll b/Lib/VLC/plugins/libmemcpymmx_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..15b39d6e0e4fa150c997a2fd60817f09cba9642e Binary files /dev/null and b/Lib/VLC/plugins/libmemcpymmx_plugin.dll differ diff --git a/Lib/VLC/plugins/libmemcpymmxext_plugin.dll b/Lib/VLC/plugins/libmemcpymmxext_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..3f70e268a6e214ce6483c523dbecee0f524d14f1 Binary files /dev/null and b/Lib/VLC/plugins/libmemcpymmxext_plugin.dll differ diff --git a/Lib/VLC/plugins/libmirror_plugin.dll b/Lib/VLC/plugins/libmirror_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..093c285b4967adba8d4f5a9e4b155789643d4abe Binary files /dev/null and b/Lib/VLC/plugins/libmirror_plugin.dll differ diff --git a/Lib/VLC/plugins/libmjpeg_plugin.dll b/Lib/VLC/plugins/libmjpeg_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..6f24b114e55f28fec3797acada227ed742fc767d Binary files /dev/null and b/Lib/VLC/plugins/libmjpeg_plugin.dll differ diff --git a/Lib/VLC/plugins/libmkv_plugin.dll b/Lib/VLC/plugins/libmkv_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..c70488024796c618e26ca15c4918ffc6c2fef576 --- /dev/null +++ b/Lib/VLC/plugins/libmkv_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a862a26e1dac6f55360c07a798e7d77dc67a90cb468015da30b66d770c067d6c +size 1218048 diff --git a/Lib/VLC/plugins/libmod_plugin.dll b/Lib/VLC/plugins/libmod_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..0aba0fdb592a8f7ee9b27703026f3ea840c73036 --- /dev/null +++ b/Lib/VLC/plugins/libmod_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02cc3268c6be430d96defd0deaf536e36d41e0cbf107c9800102597a04752087 +size 440320 diff --git a/Lib/VLC/plugins/libmono_plugin.dll b/Lib/VLC/plugins/libmono_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..adee41ae6e6c30d443fc01215ac20c0eb2dc24da Binary files /dev/null and b/Lib/VLC/plugins/libmono_plugin.dll differ diff --git a/Lib/VLC/plugins/libmosaic_plugin.dll b/Lib/VLC/plugins/libmosaic_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..890a97d87a189d5dc6bc2c07d64c2ea355ea3c64 Binary files /dev/null and b/Lib/VLC/plugins/libmosaic_plugin.dll differ diff --git a/Lib/VLC/plugins/libmotionblur_plugin.dll b/Lib/VLC/plugins/libmotionblur_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..da4b1da2caad10464e9237461ef5f148d623ed0e Binary files /dev/null and b/Lib/VLC/plugins/libmotionblur_plugin.dll differ diff --git a/Lib/VLC/plugins/libmotiondetect_plugin.dll b/Lib/VLC/plugins/libmotiondetect_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..02909930738734f3ea11c0016405612c84388a16 Binary files /dev/null and b/Lib/VLC/plugins/libmotiondetect_plugin.dll differ diff --git a/Lib/VLC/plugins/libmp4_plugin.dll b/Lib/VLC/plugins/libmp4_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..7b302467ecfe9b62e279b045476d9134074f7059 --- /dev/null +++ b/Lib/VLC/plugins/libmp4_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c6f86be2476164e7b80549de8b7063a7573d923353a9408da6122c33aca11dc1 +size 194048 diff --git a/Lib/VLC/plugins/libmpc_plugin.dll b/Lib/VLC/plugins/libmpc_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..a11e5507d6b8e9c70ce7835b31a7664f54e1ea13 Binary files /dev/null and b/Lib/VLC/plugins/libmpc_plugin.dll differ diff --git a/Lib/VLC/plugins/libmpeg_audio_plugin.dll b/Lib/VLC/plugins/libmpeg_audio_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..c0f5ad16779bee7e63daa4265c6f252c4cfd5ca9 Binary files /dev/null and b/Lib/VLC/plugins/libmpeg_audio_plugin.dll differ diff --git a/Lib/VLC/plugins/libmpgatofixed32_plugin.dll b/Lib/VLC/plugins/libmpgatofixed32_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..9bdb7a5111b83edb95345e2e05a001c627c51ead --- /dev/null +++ b/Lib/VLC/plugins/libmpgatofixed32_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0dd57dd7431e32d6b7aee546d2cc6dcc8faf7e37d5d91ab012161f8ecd4d4659 +size 128512 diff --git a/Lib/VLC/plugins/libmpgv_plugin.dll b/Lib/VLC/plugins/libmpgv_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..f48f28c2fff8916ba6a109380a43fdc6bc50ca52 Binary files /dev/null and b/Lib/VLC/plugins/libmpgv_plugin.dll differ diff --git a/Lib/VLC/plugins/libmsn_plugin.dll b/Lib/VLC/plugins/libmsn_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..a0bb846228bdd172def4de4a0e5a2286caff425f Binary files /dev/null and b/Lib/VLC/plugins/libmsn_plugin.dll differ diff --git a/Lib/VLC/plugins/libmux_asf_plugin.dll b/Lib/VLC/plugins/libmux_asf_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..534ec44f353ab04370bef3e815f1829b9d4dd8e6 Binary files /dev/null and b/Lib/VLC/plugins/libmux_asf_plugin.dll differ diff --git a/Lib/VLC/plugins/libmux_avi_plugin.dll b/Lib/VLC/plugins/libmux_avi_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..6d55e491d53b4aa6c7280decb20868a4e9e6cb49 Binary files /dev/null and b/Lib/VLC/plugins/libmux_avi_plugin.dll differ diff --git a/Lib/VLC/plugins/libmux_dummy_plugin.dll b/Lib/VLC/plugins/libmux_dummy_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..e7124e5336e3d895d2497a156ebe828511eb84ae Binary files /dev/null and b/Lib/VLC/plugins/libmux_dummy_plugin.dll differ diff --git a/Lib/VLC/plugins/libmux_mp4_plugin.dll b/Lib/VLC/plugins/libmux_mp4_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..89cf19cd5fc9ae9c931ab9d489f649d0da30e78c Binary files /dev/null and b/Lib/VLC/plugins/libmux_mp4_plugin.dll differ diff --git a/Lib/VLC/plugins/libmux_mpjpeg_plugin.dll b/Lib/VLC/plugins/libmux_mpjpeg_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..c8f0546d9d43d3e4abb1ddbe5811e0c757d2e279 Binary files /dev/null and b/Lib/VLC/plugins/libmux_mpjpeg_plugin.dll differ diff --git a/Lib/VLC/plugins/libmux_ogg_plugin.dll b/Lib/VLC/plugins/libmux_ogg_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..d0929169031a912d5f861d400ccd49c8a000302c Binary files /dev/null and b/Lib/VLC/plugins/libmux_ogg_plugin.dll differ diff --git a/Lib/VLC/plugins/libmux_ps_plugin.dll b/Lib/VLC/plugins/libmux_ps_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..881b09d8746ac1b7b5e7c65257cf8167de2b40df Binary files /dev/null and b/Lib/VLC/plugins/libmux_ps_plugin.dll differ diff --git a/Lib/VLC/plugins/libmux_ts_plugin.dll b/Lib/VLC/plugins/libmux_ts_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..cc857b6061b0a47ae65dbdb96831c75572b2b171 --- /dev/null +++ b/Lib/VLC/plugins/libmux_ts_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:540d125a76b3ad1de55364ac8600e13edc7003b22c4a62abcc81405e23500b2e +size 125440 diff --git a/Lib/VLC/plugins/libmux_wav_plugin.dll b/Lib/VLC/plugins/libmux_wav_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..d075cc8a831b7e67a77ab9d0b9417271c8c1908b Binary files /dev/null and b/Lib/VLC/plugins/libmux_wav_plugin.dll differ diff --git a/Lib/VLC/plugins/libnetsync_plugin.dll b/Lib/VLC/plugins/libnetsync_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..6e4b1cc5f9dbf8e1d12b8a455b42c2722099e69e Binary files /dev/null and b/Lib/VLC/plugins/libnetsync_plugin.dll differ diff --git a/Lib/VLC/plugins/libnoise_plugin.dll b/Lib/VLC/plugins/libnoise_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..4efb7c48f1d36593bf3d3cd1016df09e033b35b5 Binary files /dev/null and b/Lib/VLC/plugins/libnoise_plugin.dll differ diff --git a/Lib/VLC/plugins/libnormvol_plugin.dll b/Lib/VLC/plugins/libnormvol_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..1a3492bf07168ec69eb3f284ea79e2e766b7ad65 Binary files /dev/null and b/Lib/VLC/plugins/libnormvol_plugin.dll differ diff --git a/Lib/VLC/plugins/libnsc_plugin.dll b/Lib/VLC/plugins/libnsc_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..9ad112fbfcdae9a90011ff0b12c7ea24b224a659 Binary files /dev/null and b/Lib/VLC/plugins/libnsc_plugin.dll differ diff --git a/Lib/VLC/plugins/libnsv_plugin.dll b/Lib/VLC/plugins/libnsv_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..1aa6e2329651866ecf398ccd5ced93e91970a897 Binary files /dev/null and b/Lib/VLC/plugins/libnsv_plugin.dll differ diff --git a/Lib/VLC/plugins/libntservice_plugin.dll b/Lib/VLC/plugins/libntservice_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..9cc6b04a31de4cdec38d0c28617b1ba3c37916e0 Binary files /dev/null and b/Lib/VLC/plugins/libntservice_plugin.dll differ diff --git a/Lib/VLC/plugins/libnuv_plugin.dll b/Lib/VLC/plugins/libnuv_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..0e28f85cac4c4155d40bbdacfad55bf33ad5b01d Binary files /dev/null and b/Lib/VLC/plugins/libnuv_plugin.dll differ diff --git a/Lib/VLC/plugins/libogg_plugin.dll b/Lib/VLC/plugins/libogg_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..f751495054280cd628e10ca6713e1fa8bbc08d8a Binary files /dev/null and b/Lib/VLC/plugins/libogg_plugin.dll differ diff --git a/Lib/VLC/plugins/liboldhttp_plugin.dll b/Lib/VLC/plugins/liboldhttp_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..d5ac7465adf1eecd8a42237097302d3000fe0f5e Binary files /dev/null and b/Lib/VLC/plugins/liboldhttp_plugin.dll differ diff --git a/Lib/VLC/plugins/liboldrc_plugin.dll b/Lib/VLC/plugins/liboldrc_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..bf3eb07ea0701cd443bf7ab95e2e3ecb46e03bd0 Binary files /dev/null and b/Lib/VLC/plugins/liboldrc_plugin.dll differ diff --git a/Lib/VLC/plugins/liboldtelnet_plugin.dll b/Lib/VLC/plugins/liboldtelnet_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..f73fcd59b0ae43a20e57eecdd7499f4c0cecb0f7 Binary files /dev/null and b/Lib/VLC/plugins/liboldtelnet_plugin.dll differ diff --git a/Lib/VLC/plugins/libosd_parser_plugin.dll b/Lib/VLC/plugins/libosd_parser_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..6b03a6e754176110f71b8d34dc3d1437b9387c5a Binary files /dev/null and b/Lib/VLC/plugins/libosd_parser_plugin.dll differ diff --git a/Lib/VLC/plugins/libosdmenu_plugin.dll b/Lib/VLC/plugins/libosdmenu_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..8486853863d311a9c48318a896c91f455cdbfe42 Binary files /dev/null and b/Lib/VLC/plugins/libosdmenu_plugin.dll differ diff --git a/Lib/VLC/plugins/libpacketizer_copy_plugin.dll b/Lib/VLC/plugins/libpacketizer_copy_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..b05852402fe3930d4283788c63dc5854788c7f95 Binary files /dev/null and b/Lib/VLC/plugins/libpacketizer_copy_plugin.dll differ diff --git a/Lib/VLC/plugins/libpacketizer_dirac_plugin.dll b/Lib/VLC/plugins/libpacketizer_dirac_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..2dea460629b12095ce83a705182f70d8b5aaab83 Binary files /dev/null and b/Lib/VLC/plugins/libpacketizer_dirac_plugin.dll differ diff --git a/Lib/VLC/plugins/libpacketizer_flac_plugin.dll b/Lib/VLC/plugins/libpacketizer_flac_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..a39d48529fad1a189735a3b207d6237feaafb522 Binary files /dev/null and b/Lib/VLC/plugins/libpacketizer_flac_plugin.dll differ diff --git a/Lib/VLC/plugins/libpacketizer_h264_plugin.dll b/Lib/VLC/plugins/libpacketizer_h264_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..f2243e83bc819140131bb6923f8db27df66fbc7d Binary files /dev/null and b/Lib/VLC/plugins/libpacketizer_h264_plugin.dll differ diff --git a/Lib/VLC/plugins/libpacketizer_mlp_plugin.dll b/Lib/VLC/plugins/libpacketizer_mlp_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..7a72df47d63d087e5dfd81c4d6223cbf62068bd2 Binary files /dev/null and b/Lib/VLC/plugins/libpacketizer_mlp_plugin.dll differ diff --git a/Lib/VLC/plugins/libpacketizer_mpeg4audio_plugin.dll b/Lib/VLC/plugins/libpacketizer_mpeg4audio_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..3b5e9d851c0e69131da1ad9d7633b26df5615f20 Binary files /dev/null and b/Lib/VLC/plugins/libpacketizer_mpeg4audio_plugin.dll differ diff --git a/Lib/VLC/plugins/libpacketizer_mpeg4video_plugin.dll b/Lib/VLC/plugins/libpacketizer_mpeg4video_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..4518f39e46a819ba961f909cb4aa73a586b8b133 Binary files /dev/null and b/Lib/VLC/plugins/libpacketizer_mpeg4video_plugin.dll differ diff --git a/Lib/VLC/plugins/libpacketizer_mpegvideo_plugin.dll b/Lib/VLC/plugins/libpacketizer_mpegvideo_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..2178e3279505cecaeb5e451c5f68186400c8e199 Binary files /dev/null and b/Lib/VLC/plugins/libpacketizer_mpegvideo_plugin.dll differ diff --git a/Lib/VLC/plugins/libpacketizer_vc1_plugin.dll b/Lib/VLC/plugins/libpacketizer_vc1_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..86b4ee4d7e770367b2dc98c8207d8718db880998 Binary files /dev/null and b/Lib/VLC/plugins/libpacketizer_vc1_plugin.dll differ diff --git a/Lib/VLC/plugins/libpanoramix_plugin.dll b/Lib/VLC/plugins/libpanoramix_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..75d9c9d67ab0e07b2291122dd2bed362e06cee59 Binary files /dev/null and b/Lib/VLC/plugins/libpanoramix_plugin.dll differ diff --git a/Lib/VLC/plugins/libparam_eq_plugin.dll b/Lib/VLC/plugins/libparam_eq_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..0fa0eeb15109c52feb667b3397349c624424f737 Binary files /dev/null and b/Lib/VLC/plugins/libparam_eq_plugin.dll differ diff --git a/Lib/VLC/plugins/libplaylist_plugin.dll b/Lib/VLC/plugins/libplaylist_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..190eeb1330383c9f470d7c11d6e6e50474f3ad5e --- /dev/null +++ b/Lib/VLC/plugins/libplaylist_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72d9e7217d2c0dbc63ba7e56c96c162d63796ac0f8e56f83a2fe5a715516d77f +size 106496 diff --git a/Lib/VLC/plugins/libpng_plugin.dll b/Lib/VLC/plugins/libpng_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..c6be29075a28721f8571d34d155f0c68c93a257c --- /dev/null +++ b/Lib/VLC/plugins/libpng_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1bce66846ee7929d72299a429e0442a9742a98938908b2651a0bfde0a037832c +size 237568 diff --git a/Lib/VLC/plugins/libpodcast_plugin.dll b/Lib/VLC/plugins/libpodcast_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..7f6e0437a274758d5566232162143705dac19464 Binary files /dev/null and b/Lib/VLC/plugins/libpodcast_plugin.dll differ diff --git a/Lib/VLC/plugins/libportaudio_plugin.dll b/Lib/VLC/plugins/libportaudio_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..a18b7615e0001f82dc10d177080db552e1c6c277 Binary files /dev/null and b/Lib/VLC/plugins/libportaudio_plugin.dll differ diff --git a/Lib/VLC/plugins/libpostproc_plugin.dll b/Lib/VLC/plugins/libpostproc_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..d37fd1279caaa0659b32853602662dab6db4f29a Binary files /dev/null and b/Lib/VLC/plugins/libpostproc_plugin.dll differ diff --git a/Lib/VLC/plugins/libprojectm_plugin.dll b/Lib/VLC/plugins/libprojectm_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..c2a07dba530db1dac8792ee00d85ea7791d909d8 --- /dev/null +++ b/Lib/VLC/plugins/libprojectm_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f421a73290bf3b1246391d166382ef5bc9e2e0d23bd42bd279abb40717f11e2b +size 1423360 diff --git a/Lib/VLC/plugins/libps_plugin.dll b/Lib/VLC/plugins/libps_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..1ac24931bd34ba66988683bd552d89836ecacd80 Binary files /dev/null and b/Lib/VLC/plugins/libps_plugin.dll differ diff --git a/Lib/VLC/plugins/libpsychedelic_plugin.dll b/Lib/VLC/plugins/libpsychedelic_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..23d560ebb46517e5719c4997c9a92a39b8579806 Binary files /dev/null and b/Lib/VLC/plugins/libpsychedelic_plugin.dll differ diff --git a/Lib/VLC/plugins/libpuzzle_plugin.dll b/Lib/VLC/plugins/libpuzzle_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..51349330a5d10088c4597344ea3da5951099088e Binary files /dev/null and b/Lib/VLC/plugins/libpuzzle_plugin.dll differ diff --git a/Lib/VLC/plugins/libpva_plugin.dll b/Lib/VLC/plugins/libpva_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..4e74db01fe56396493967fd1b76dbe412b58d635 Binary files /dev/null and b/Lib/VLC/plugins/libpva_plugin.dll differ diff --git a/Lib/VLC/plugins/libqt4_plugin.dll b/Lib/VLC/plugins/libqt4_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..696427b689aea571d506c1c274ab504c16e20ad6 --- /dev/null +++ b/Lib/VLC/plugins/libqt4_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:38415977db9340af84b826a211ac7eec5fd1e738a7d2feba4dd9fda97f92aec8 +size 10918400 diff --git a/Lib/VLC/plugins/libquicktime_plugin.dll b/Lib/VLC/plugins/libquicktime_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..724c352bd7b28f7aea62ede25393069fd4493c62 Binary files /dev/null and b/Lib/VLC/plugins/libquicktime_plugin.dll differ diff --git a/Lib/VLC/plugins/librawaud_plugin.dll b/Lib/VLC/plugins/librawaud_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..b7642d8e53d8c0ca30bd7fdfe04560cf74222abc Binary files /dev/null and b/Lib/VLC/plugins/librawaud_plugin.dll differ diff --git a/Lib/VLC/plugins/librawdv_plugin.dll b/Lib/VLC/plugins/librawdv_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..46fb71f563345ea13d10ad07c655e7a8af0909bc Binary files /dev/null and b/Lib/VLC/plugins/librawdv_plugin.dll differ diff --git a/Lib/VLC/plugins/librawvid_plugin.dll b/Lib/VLC/plugins/librawvid_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..82237ccef88941f02540f63c43c3e3a23b00c068 Binary files /dev/null and b/Lib/VLC/plugins/librawvid_plugin.dll differ diff --git a/Lib/VLC/plugins/librawvideo_plugin.dll b/Lib/VLC/plugins/librawvideo_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..a21d71d18d8c3feed75854ef48f154206fb5fbfb Binary files /dev/null and b/Lib/VLC/plugins/librawvideo_plugin.dll differ diff --git a/Lib/VLC/plugins/libreal_plugin.dll b/Lib/VLC/plugins/libreal_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..f8a6f16981a89cf0f1378af9f64bd09e609feb63 Binary files /dev/null and b/Lib/VLC/plugins/libreal_plugin.dll differ diff --git a/Lib/VLC/plugins/librealvideo_plugin.dll b/Lib/VLC/plugins/librealvideo_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..d6e271b49a6313f54ff93c7d6a8f50ffa9c7feaf Binary files /dev/null and b/Lib/VLC/plugins/librealvideo_plugin.dll differ diff --git a/Lib/VLC/plugins/libremoteosd_plugin.dll b/Lib/VLC/plugins/libremoteosd_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..dfd9098abd2e436719f1e153ac9104c8c9f8155b --- /dev/null +++ b/Lib/VLC/plugins/libremoteosd_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:454cc34e9cefe44081e2eb1b5c86d0c970b35c7a36985cd3bf842461ca035efa +size 400384 diff --git a/Lib/VLC/plugins/libripple_plugin.dll b/Lib/VLC/plugins/libripple_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..9006a3acdff32e4c5001247b4d61e9d23410a5bd Binary files /dev/null and b/Lib/VLC/plugins/libripple_plugin.dll differ diff --git a/Lib/VLC/plugins/librotate_plugin.dll b/Lib/VLC/plugins/librotate_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..a7bffb2857fa9465d2d579fa1f248371f15f512c Binary files /dev/null and b/Lib/VLC/plugins/librotate_plugin.dll differ diff --git a/Lib/VLC/plugins/librss_plugin.dll b/Lib/VLC/plugins/librss_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..1cb734b0b65902912e809d28a7d28ef3737d9618 Binary files /dev/null and b/Lib/VLC/plugins/librss_plugin.dll differ diff --git a/Lib/VLC/plugins/librtp_plugin.dll b/Lib/VLC/plugins/librtp_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..31c02390336f885cd668fda32dfe82cd661b59de --- /dev/null +++ b/Lib/VLC/plugins/librtp_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e4471299cebb26e5c8d6e2f8e7503468c174c7168bfe0095c565c38615b7612e +size 401408 diff --git a/Lib/VLC/plugins/librv32_plugin.dll b/Lib/VLC/plugins/librv32_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..3da72438f2c33076f771727ddab160387c214e63 Binary files /dev/null and b/Lib/VLC/plugins/librv32_plugin.dll differ diff --git a/Lib/VLC/plugins/libsap_plugin.dll b/Lib/VLC/plugins/libsap_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..29ed03ecd3287d0723b12afd1379edee8ce0bbba Binary files /dev/null and b/Lib/VLC/plugins/libsap_plugin.dll differ diff --git a/Lib/VLC/plugins/libscale_plugin.dll b/Lib/VLC/plugins/libscale_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..c03681d5d849e38d469784a4b7b3daaeb96734f5 Binary files /dev/null and b/Lib/VLC/plugins/libscale_plugin.dll differ diff --git a/Lib/VLC/plugins/libscaletempo_plugin.dll b/Lib/VLC/plugins/libscaletempo_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..3aad2f883f921cdea57f1608006962f15e07f33c Binary files /dev/null and b/Lib/VLC/plugins/libscaletempo_plugin.dll differ diff --git a/Lib/VLC/plugins/libscene_plugin.dll b/Lib/VLC/plugins/libscene_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..6dce0e05975523edd86571a8c856806702a03a31 Binary files /dev/null and b/Lib/VLC/plugins/libscene_plugin.dll differ diff --git a/Lib/VLC/plugins/libschroedinger_plugin.dll b/Lib/VLC/plugins/libschroedinger_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..f6de8bc61cea900cb66ea0c1ffccecd9fb12b874 --- /dev/null +++ b/Lib/VLC/plugins/libschroedinger_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d5659a01d6bb587d425d7f34a793b343533d8e6c69e348ad3c436654b8f78869 +size 1303040 diff --git a/Lib/VLC/plugins/libscreen_plugin.dll b/Lib/VLC/plugins/libscreen_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..1714abcc2dfda25579c342ede1995065598b089d Binary files /dev/null and b/Lib/VLC/plugins/libscreen_plugin.dll differ diff --git a/Lib/VLC/plugins/libsdl_image_plugin.dll b/Lib/VLC/plugins/libsdl_image_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..b4e64946599d6038e9ac6e7eaad7c9d10992ff6d --- /dev/null +++ b/Lib/VLC/plugins/libsdl_image_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2dd2523a44afbeb6cdd88a8e3901a91687ac0158df08960e9498a84332218642 +size 291840 diff --git a/Lib/VLC/plugins/libsharpen_plugin.dll b/Lib/VLC/plugins/libsharpen_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..0075dc00a2aa695d06b955e6cea0181208f52dce Binary files /dev/null and b/Lib/VLC/plugins/libsharpen_plugin.dll differ diff --git a/Lib/VLC/plugins/libsimple_channel_mixer_plugin.dll b/Lib/VLC/plugins/libsimple_channel_mixer_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..c7d3bab176e7265208fd32668a91241ba3724957 Binary files /dev/null and b/Lib/VLC/plugins/libsimple_channel_mixer_plugin.dll differ diff --git a/Lib/VLC/plugins/libskins2_plugin.dll b/Lib/VLC/plugins/libskins2_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..026879313e058d10f263ba3439c3eb7ce5b393bf --- /dev/null +++ b/Lib/VLC/plugins/libskins2_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:828381a803676ce3e5af70fd68f3da41236fb91b98b1f71a9a50f52943262778 +size 2102272 diff --git a/Lib/VLC/plugins/libsmf_plugin.dll b/Lib/VLC/plugins/libsmf_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..0fd84e17bd69e8134457c9d184e1e015dae8ec71 Binary files /dev/null and b/Lib/VLC/plugins/libsmf_plugin.dll differ diff --git a/Lib/VLC/plugins/libspatializer_plugin.dll b/Lib/VLC/plugins/libspatializer_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..a9f7b356970e7812d6915cadb6ae07de607b8620 --- /dev/null +++ b/Lib/VLC/plugins/libspatializer_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:586a55be189ef54e3fb7b828aa41a3fc20ffa4e367160d82282422ca2d903789 +size 103424 diff --git a/Lib/VLC/plugins/libspdif_mixer_plugin.dll b/Lib/VLC/plugins/libspdif_mixer_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..3dedab6d831fbdf993209a2da628380de0faab07 Binary files /dev/null and b/Lib/VLC/plugins/libspdif_mixer_plugin.dll differ diff --git a/Lib/VLC/plugins/libspeex_plugin.dll b/Lib/VLC/plugins/libspeex_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..eae72fcacf72218d7158859e48f479978d6aa2b7 --- /dev/null +++ b/Lib/VLC/plugins/libspeex_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a991c73abf6e3df6f8df007d600d7949b83002c8d22136c142498cd34ac8510 +size 130560 diff --git a/Lib/VLC/plugins/libspudec_plugin.dll b/Lib/VLC/plugins/libspudec_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..b4f24f3d54c9c1356e50ba66772d117696dbe25f Binary files /dev/null and b/Lib/VLC/plugins/libspudec_plugin.dll differ diff --git a/Lib/VLC/plugins/libstats_plugin.dll b/Lib/VLC/plugins/libstats_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..512f00ff2e7fa62aab4795aeaa5a797051185d1c Binary files /dev/null and b/Lib/VLC/plugins/libstats_plugin.dll differ diff --git a/Lib/VLC/plugins/libstream_filter_rar_plugin.dll b/Lib/VLC/plugins/libstream_filter_rar_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..a9858556c3be88b542d55570af508bc54f8c20a9 Binary files /dev/null and b/Lib/VLC/plugins/libstream_filter_rar_plugin.dll differ diff --git a/Lib/VLC/plugins/libstream_filter_record_plugin.dll b/Lib/VLC/plugins/libstream_filter_record_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..af997146a79fec46cab8a61493f75a8426262259 Binary files /dev/null and b/Lib/VLC/plugins/libstream_filter_record_plugin.dll differ diff --git a/Lib/VLC/plugins/libstream_out_autodel_plugin.dll b/Lib/VLC/plugins/libstream_out_autodel_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..6052309dc372eb755ab392dce61113607fa0608c Binary files /dev/null and b/Lib/VLC/plugins/libstream_out_autodel_plugin.dll differ diff --git a/Lib/VLC/plugins/libstream_out_bridge_plugin.dll b/Lib/VLC/plugins/libstream_out_bridge_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..fe69d83e8095361ad328169603f297d304fffa4b Binary files /dev/null and b/Lib/VLC/plugins/libstream_out_bridge_plugin.dll differ diff --git a/Lib/VLC/plugins/libstream_out_description_plugin.dll b/Lib/VLC/plugins/libstream_out_description_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..d70867b2138892be21671036e6dd113b8ad6dfb1 Binary files /dev/null and b/Lib/VLC/plugins/libstream_out_description_plugin.dll differ diff --git a/Lib/VLC/plugins/libstream_out_display_plugin.dll b/Lib/VLC/plugins/libstream_out_display_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..2e12884bd750a23d0d9e426da44a42aa9255d3fb Binary files /dev/null and b/Lib/VLC/plugins/libstream_out_display_plugin.dll differ diff --git a/Lib/VLC/plugins/libstream_out_dummy_plugin.dll b/Lib/VLC/plugins/libstream_out_dummy_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..e5eb57b8871110d6902ce47d854d0bb1c3959e6a Binary files /dev/null and b/Lib/VLC/plugins/libstream_out_dummy_plugin.dll differ diff --git a/Lib/VLC/plugins/libstream_out_duplicate_plugin.dll b/Lib/VLC/plugins/libstream_out_duplicate_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..b6cd428e43940b8de7c0054ccfd4f6248ef45de4 Binary files /dev/null and b/Lib/VLC/plugins/libstream_out_duplicate_plugin.dll differ diff --git a/Lib/VLC/plugins/libstream_out_es_plugin.dll b/Lib/VLC/plugins/libstream_out_es_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..89a5808dd7f76c27eda684c9174171587e375821 Binary files /dev/null and b/Lib/VLC/plugins/libstream_out_es_plugin.dll differ diff --git a/Lib/VLC/plugins/libstream_out_gather_plugin.dll b/Lib/VLC/plugins/libstream_out_gather_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..9eb3b77d30084a9036d83866c613bb25088f260d Binary files /dev/null and b/Lib/VLC/plugins/libstream_out_gather_plugin.dll differ diff --git a/Lib/VLC/plugins/libstream_out_mosaic_bridge_plugin.dll b/Lib/VLC/plugins/libstream_out_mosaic_bridge_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..f1dfd0e5bcaec5e9780e183d452a258159fd4449 Binary files /dev/null and b/Lib/VLC/plugins/libstream_out_mosaic_bridge_plugin.dll differ diff --git a/Lib/VLC/plugins/libstream_out_raop_plugin.dll b/Lib/VLC/plugins/libstream_out_raop_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..a4cc70bd776419793714d69e48e7a7605cd7db43 --- /dev/null +++ b/Lib/VLC/plugins/libstream_out_raop_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a08000422cfa8096b5e6beee662e10293886d42fdff4ed42c863641389807ff +size 402432 diff --git a/Lib/VLC/plugins/libstream_out_record_plugin.dll b/Lib/VLC/plugins/libstream_out_record_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..71fd1d4d2fcc658e38e83c44ab39813f5ac14905 Binary files /dev/null and b/Lib/VLC/plugins/libstream_out_record_plugin.dll differ diff --git a/Lib/VLC/plugins/libstream_out_rtp_plugin.dll b/Lib/VLC/plugins/libstream_out_rtp_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..6234df91411a4d78e60cfa2fcb01f33c29cf6919 --- /dev/null +++ b/Lib/VLC/plugins/libstream_out_rtp_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89189bace44100691664db995a3434cf7b4b7053537014724f1429f423231421 +size 438784 diff --git a/Lib/VLC/plugins/libstream_out_smem_plugin.dll b/Lib/VLC/plugins/libstream_out_smem_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..ebd13f0af41d0ec8a22af9132816ddc0c95bce5f Binary files /dev/null and b/Lib/VLC/plugins/libstream_out_smem_plugin.dll differ diff --git a/Lib/VLC/plugins/libstream_out_standard_plugin.dll b/Lib/VLC/plugins/libstream_out_standard_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..17a9c0011868dc78d80528f9fa9c71719a454f04 Binary files /dev/null and b/Lib/VLC/plugins/libstream_out_standard_plugin.dll differ diff --git a/Lib/VLC/plugins/libstream_out_transcode_plugin.dll b/Lib/VLC/plugins/libstream_out_transcode_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..1dc4c0aaa48d292b389026a5ccc6929989b0cbf7 Binary files /dev/null and b/Lib/VLC/plugins/libstream_out_transcode_plugin.dll differ diff --git a/Lib/VLC/plugins/libsubsdec_plugin.dll b/Lib/VLC/plugins/libsubsdec_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..2820b453a7560f38f4083b96eefa3865f72ed077 Binary files /dev/null and b/Lib/VLC/plugins/libsubsdec_plugin.dll differ diff --git a/Lib/VLC/plugins/libsubsusf_plugin.dll b/Lib/VLC/plugins/libsubsusf_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..5a073094d4230d0fde27e01bb36be92887520f9e Binary files /dev/null and b/Lib/VLC/plugins/libsubsusf_plugin.dll differ diff --git a/Lib/VLC/plugins/libsubtitle_plugin.dll b/Lib/VLC/plugins/libsubtitle_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..1831729cd2ae5f4115c56285961818e1019819d3 Binary files /dev/null and b/Lib/VLC/plugins/libsubtitle_plugin.dll differ diff --git a/Lib/VLC/plugins/libsvcdsub_plugin.dll b/Lib/VLC/plugins/libsvcdsub_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..03668a5d90786b64eb6524558a8452b52c57d1d3 Binary files /dev/null and b/Lib/VLC/plugins/libsvcdsub_plugin.dll differ diff --git a/Lib/VLC/plugins/libswscale_plugin.dll b/Lib/VLC/plugins/libswscale_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..51fcc09188f402dffad31955d333f2592d404fb8 --- /dev/null +++ b/Lib/VLC/plugins/libswscale_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1840835794fcc900239458c4eab21b1be60796449d39cfc4c6e0ac98de871b68 +size 298496 diff --git a/Lib/VLC/plugins/libt140_plugin.dll b/Lib/VLC/plugins/libt140_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..79cfbaf6f2528c0568cb2a4528cca59bffaf7593 Binary files /dev/null and b/Lib/VLC/plugins/libt140_plugin.dll differ diff --git a/Lib/VLC/plugins/libtaglib_plugin.dll b/Lib/VLC/plugins/libtaglib_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..b9b194509ee714284e8d49a41c4b623cac22a276 --- /dev/null +++ b/Lib/VLC/plugins/libtaglib_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c9e2ee58d620bb17c71d55d1a603793bbeed9719ca04b2c01ce4fd89c32bdb43 +size 1103360 diff --git a/Lib/VLC/plugins/libtheora_plugin.dll b/Lib/VLC/plugins/libtheora_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..321ee0ac75d8ad11e13b87fcbd38ae9c801a52dd --- /dev/null +++ b/Lib/VLC/plugins/libtheora_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:83a212b5680cbf1fde4d2696787ab7de8a8245cc2c6bdf7c552cf6ac67338775 +size 370688 diff --git a/Lib/VLC/plugins/libtransform_plugin.dll b/Lib/VLC/plugins/libtransform_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..0612308e143d1e27b8aa10e1dd255b6c09619084 Binary files /dev/null and b/Lib/VLC/plugins/libtransform_plugin.dll differ diff --git a/Lib/VLC/plugins/libtrivial_channel_mixer_plugin.dll b/Lib/VLC/plugins/libtrivial_channel_mixer_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..db73fe7005563b630d9daad53c0177ee558dde22 Binary files /dev/null and b/Lib/VLC/plugins/libtrivial_channel_mixer_plugin.dll differ diff --git a/Lib/VLC/plugins/libtrivial_mixer_plugin.dll b/Lib/VLC/plugins/libtrivial_mixer_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..26fe564e7747f11a77a7eaec9a3a513f0f96d6bb Binary files /dev/null and b/Lib/VLC/plugins/libtrivial_mixer_plugin.dll differ diff --git a/Lib/VLC/plugins/libts_plugin.dll b/Lib/VLC/plugins/libts_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..c1605edad723a355957cb873904e5095160b2cd8 --- /dev/null +++ b/Lib/VLC/plugins/libts_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fe28dd707751f228c71eebaf2097c4c93359948b8581245466e1df857ffa8828 +size 122368 diff --git a/Lib/VLC/plugins/libtta_plugin.dll b/Lib/VLC/plugins/libtta_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..dfb8e0bae38e698f787ec564049db1ac24f35254 Binary files /dev/null and b/Lib/VLC/plugins/libtta_plugin.dll differ diff --git a/Lib/VLC/plugins/libtwolame_plugin.dll b/Lib/VLC/plugins/libtwolame_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..137cf9fd39578a1e4ed6ea71623ad7821d629a6c --- /dev/null +++ b/Lib/VLC/plugins/libtwolame_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b778b92d14f542424e8cda17bad73d24a3bd1286d72e823357e0b94f8317b64 +size 146944 diff --git a/Lib/VLC/plugins/libty_plugin.dll b/Lib/VLC/plugins/libty_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..62eaba2c7263a813c02c990322ef4bbd8d040c2f Binary files /dev/null and b/Lib/VLC/plugins/libty_plugin.dll differ diff --git a/Lib/VLC/plugins/libugly_resampler_plugin.dll b/Lib/VLC/plugins/libugly_resampler_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..88b7e4c3443b282ef006e17b3acd52f31d80e413 Binary files /dev/null and b/Lib/VLC/plugins/libugly_resampler_plugin.dll differ diff --git a/Lib/VLC/plugins/libvc1_plugin.dll b/Lib/VLC/plugins/libvc1_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..1be778a781c43948e8cc048055c61d1c7574bf48 Binary files /dev/null and b/Lib/VLC/plugins/libvc1_plugin.dll differ diff --git a/Lib/VLC/plugins/libvcd_plugin.dll b/Lib/VLC/plugins/libvcd_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..390083d014ac6ab6feda33b9ba59cd2fac714596 Binary files /dev/null and b/Lib/VLC/plugins/libvcd_plugin.dll differ diff --git a/Lib/VLC/plugins/libvideo_filter_wrapper_plugin.dll b/Lib/VLC/plugins/libvideo_filter_wrapper_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..783df6267136a47030d666bf3eab6564d5c84139 Binary files /dev/null and b/Lib/VLC/plugins/libvideo_filter_wrapper_plugin.dll differ diff --git a/Lib/VLC/plugins/libvisual_plugin.dll b/Lib/VLC/plugins/libvisual_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..92e9bc9ddf6ccd53a46b7cd1b7a543398a562a17 Binary files /dev/null and b/Lib/VLC/plugins/libvisual_plugin.dll differ diff --git a/Lib/VLC/plugins/libvmem_plugin.dll b/Lib/VLC/plugins/libvmem_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..c5680bed9edfb7bf89aa1190ce479808331ef2cc Binary files /dev/null and b/Lib/VLC/plugins/libvmem_plugin.dll differ diff --git a/Lib/VLC/plugins/libvobsub_plugin.dll b/Lib/VLC/plugins/libvobsub_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..016678f6fd2c3fec1ec08d1a20656b61f0e3694e Binary files /dev/null and b/Lib/VLC/plugins/libvobsub_plugin.dll differ diff --git a/Lib/VLC/plugins/libvoc_plugin.dll b/Lib/VLC/plugins/libvoc_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..024092749ebad07a6479d3d25a1a4509851bc79c Binary files /dev/null and b/Lib/VLC/plugins/libvoc_plugin.dll differ diff --git a/Lib/VLC/plugins/libvod_rtsp_plugin.dll b/Lib/VLC/plugins/libvod_rtsp_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..d809aa19ef7135cd0c5155d7840473dbbd99de77 Binary files /dev/null and b/Lib/VLC/plugins/libvod_rtsp_plugin.dll differ diff --git a/Lib/VLC/plugins/libvorbis_plugin.dll b/Lib/VLC/plugins/libvorbis_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..f2ab8d8e9bc9f34c7b6dc31fc36a1f4fe8a500e0 --- /dev/null +++ b/Lib/VLC/plugins/libvorbis_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e98d94eea1c29a051a2425f0a1568dca2d3e1b195034b69b11bae78cc95c478 +size 1714176 diff --git a/Lib/VLC/plugins/libvout_sdl_plugin.dll b/Lib/VLC/plugins/libvout_sdl_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..570304b24c8c3154beec72509d15b349c0f1c41f --- /dev/null +++ b/Lib/VLC/plugins/libvout_sdl_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e07d12f8969581b97c4ec8dddc9155c8a2abd16214fded8512b2b83b3c53f8b0 +size 272896 diff --git a/Lib/VLC/plugins/libvout_wrapper_plugin.dll b/Lib/VLC/plugins/libvout_wrapper_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..89a386c34af4b167dba6b92bc8128aacf27a2e5d Binary files /dev/null and b/Lib/VLC/plugins/libvout_wrapper_plugin.dll differ diff --git a/Lib/VLC/plugins/libwall_plugin.dll b/Lib/VLC/plugins/libwall_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..a70913d76e0d0313ee6058e5da78d2fd2499f03e Binary files /dev/null and b/Lib/VLC/plugins/libwall_plugin.dll differ diff --git a/Lib/VLC/plugins/libwav_plugin.dll b/Lib/VLC/plugins/libwav_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..c63da51b64bb5d5adac74df7930eeacc7fbf0043 Binary files /dev/null and b/Lib/VLC/plugins/libwav_plugin.dll differ diff --git a/Lib/VLC/plugins/libwave_plugin.dll b/Lib/VLC/plugins/libwave_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..924991f90d840898d5eafcebc7de10792c0dcf49 Binary files /dev/null and b/Lib/VLC/plugins/libwave_plugin.dll differ diff --git a/Lib/VLC/plugins/libwaveout_plugin.dll b/Lib/VLC/plugins/libwaveout_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..9e41c70a94de6db06b957f4bc547389a5e2e79ca Binary files /dev/null and b/Lib/VLC/plugins/libwaveout_plugin.dll differ diff --git a/Lib/VLC/plugins/libwingdi_plugin.dll b/Lib/VLC/plugins/libwingdi_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..a3eb5744d0b5eba0f688efeaaab02c3222b746af Binary files /dev/null and b/Lib/VLC/plugins/libwingdi_plugin.dll differ diff --git a/Lib/VLC/plugins/libx264_plugin.dll b/Lib/VLC/plugins/libx264_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..6688ef874af5e7c154a8bc951e570e25d43afa73 --- /dev/null +++ b/Lib/VLC/plugins/libx264_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:21f0ca6eeeab7f6bdd528cab70569fc1ab7b15398e78b6233e5ff64ec8ff870c +size 966144 diff --git a/Lib/VLC/plugins/libxa_plugin.dll b/Lib/VLC/plugins/libxa_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..673e0b48da1d70cf50f652a6b5d799e73cb9b44e Binary files /dev/null and b/Lib/VLC/plugins/libxa_plugin.dll differ diff --git a/Lib/VLC/plugins/libxml_plugin.dll b/Lib/VLC/plugins/libxml_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..5597ba5c6141dc137dc98f111f24f265dee760c9 --- /dev/null +++ b/Lib/VLC/plugins/libxml_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a65936ce34ede0d55711c192661b3add9e8bd144c122b0ba482880c4af76b736 +size 1137664 diff --git a/Lib/VLC/plugins/libxtag_plugin.dll b/Lib/VLC/plugins/libxtag_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..e182bafdbf6a304811a47e6963c534261de4f68d Binary files /dev/null and b/Lib/VLC/plugins/libxtag_plugin.dll differ diff --git a/Lib/VLC/plugins/libyuv_plugin.dll b/Lib/VLC/plugins/libyuv_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..f6d085a050cfefc91f84e5f1b09ab49aaad99290 Binary files /dev/null and b/Lib/VLC/plugins/libyuv_plugin.dll differ diff --git a/Lib/VLC/plugins/libyuvp_plugin.dll b/Lib/VLC/plugins/libyuvp_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..330d643762dcb77a22404f0f62cf45239c1f814a Binary files /dev/null and b/Lib/VLC/plugins/libyuvp_plugin.dll differ diff --git a/Lib/VLC/plugins/libyuy2_i420_plugin.dll b/Lib/VLC/plugins/libyuy2_i420_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..b4dd9308c290d99b40ab067c6c2087bc33509951 Binary files /dev/null and b/Lib/VLC/plugins/libyuy2_i420_plugin.dll differ diff --git a/Lib/VLC/plugins/libyuy2_i422_plugin.dll b/Lib/VLC/plugins/libyuy2_i422_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..8ea3e171dce2f7347f75b0adaa03a7c9784cc210 Binary files /dev/null and b/Lib/VLC/plugins/libyuy2_i422_plugin.dll differ diff --git a/Lib/VLC/plugins/libzip_plugin.dll b/Lib/VLC/plugins/libzip_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..d6736c736cb844e2a720cd80d4c35710e87798a5 Binary files /dev/null and b/Lib/VLC/plugins/libzip_plugin.dll differ diff --git a/Lib/VLC/plugins/libzvbi_plugin.dll b/Lib/VLC/plugins/libzvbi_plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..95384256c7ed4dda3e26aa7d4dfc0b54c844d82d --- /dev/null +++ b/Lib/VLC/plugins/libzvbi_plugin.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4b57873f59c2a1fa17ba50901bc0477657942a8c496359f20086f6b4881e388 +size 1451520 diff --git a/Lib/Vlc.DotNet.Core.Interops.dll b/Lib/Vlc.DotNet.Core.Interops.dll new file mode 100644 index 0000000000000000000000000000000000000000..f372b6c8f240e3a5abc3c6ea5d67ba5982ac9569 Binary files /dev/null and b/Lib/Vlc.DotNet.Core.Interops.dll differ diff --git a/Lib/Vlc.DotNet.Core.dll b/Lib/Vlc.DotNet.Core.dll new file mode 100644 index 0000000000000000000000000000000000000000..70213eb4325e15b1e162ea0193f349258cbff7b7 Binary files /dev/null and b/Lib/Vlc.DotNet.Core.dll differ diff --git a/Lib/Vlc.DotNet.Forms.dll b/Lib/Vlc.DotNet.Forms.dll new file mode 100644 index 0000000000000000000000000000000000000000..5e682347d3c8a3b23bf03cde04a6680c0379667a Binary files /dev/null and b/Lib/Vlc.DotNet.Forms.dll differ diff --git a/Lib/bluetube_banner.jpg b/Lib/bluetube_banner.jpg new file mode 100644 index 0000000000000000000000000000000000000000..72b763fdc2e3a457b4d6771f2f80472b2dc4fe7b Binary files /dev/null and b/Lib/bluetube_banner.jpg differ diff --git a/Lib/copyright.rtf b/Lib/copyright.rtf new file mode 100644 index 0000000000000000000000000000000000000000..bf67926a1c7de2a04ea2e35c69601717de083598 Binary files /dev/null and b/Lib/copyright.rtf differ diff --git a/Lib/copyright_bluetube.rtf b/Lib/copyright_bluetube.rtf new file mode 100644 index 0000000000000000000000000000000000000000..25cd66351a215221424d5df419321a0f264ee2cf --- /dev/null +++ b/Lib/copyright_bluetube.rtf @@ -0,0 +1,188 @@ +{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff0\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi0\deflang2057\deflangfe2057\themelang2057\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;} +{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;} +{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;} +{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f39\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f40\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\f42\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f43\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f44\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f45\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\f46\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f47\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f59\fbidi \fmodern\fcharset238\fprq1 Courier New CE;}{\f60\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;} +{\f62\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f63\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f64\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f65\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);} +{\f66\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f67\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);}{\f379\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}{\f380\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;} +{\f382\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f383\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f386\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;}{\f387\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);} +{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;} +{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;}{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;} +{\fhimajor\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;} +{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;} +{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}} +{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0; +\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\chyperlink\ctint255\cshade255\red0\green0\blue255;}{\*\defchp \fs22\loch\af31506\hich\af31506\dbch\af31505 }{\*\defpap +\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 +\af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang2057\langfe2057\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp2057\langfenp2057 \snext0 \sqformat \spriority0 Normal;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\* +\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1 +\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang2057\langfe2057\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp2057\langfenp2057 \snext11 \ssemihidden \sunhideused +Normal Table;}{\*\cs15 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf17 \sbasedon10 \sunhideused \styrsid95563 Hyperlink;}}{\*\rsidtbl \rsid95563\rsid7934131\rsid11083635}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0 +\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\operator Shabeer}{\creatim\yr2014\mo1\dy6\hr23\min32}{\revtim\yr2014\mo1\dy6\hr23\min39}{\version3}{\edmins3}{\nofpages1}{\nofwords384}{\nofchars2189}{\nofcharsws2568}{\vern49167}}{\*\xmlnstbl {\xmlns1 h +ttp://schemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect +\widowctrl\ftnbj\aenddoc\trackmoves0\trackformatting1\donotembedsysfont0\relyonvml0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\horzdoc\dghspace120\dgvspace120\dghorigin1701 +\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale100\rsidroot7934131 \fet0{\*\wgrffmtfilter 2450}\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2 +\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6 +\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang +{\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang2057\langfe2057\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp2057\langfenp2057 {\rtlch\fcs1 +\af2 \ltrch\fcs0 \f2\insrsid11083635 \hich\af2\dbch\af31505\loch\f2 By using this software and any updates to it, you indicate your acceptance of these terms. If you do not accept these terms, do not install or use the software. +\par +\par \hich\af2\dbch\af31505\loch\f2 The software (}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid7934131 \hich\af2\dbch\af31505\loch\f2 BlueTube}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid11083635 \hich\af2\dbch\af31505\loch\f2 +) and any updates to it are provided "as is" and you bear the risk of using it. In no event shall }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid7934131 \hich\af2\dbch\af31505\loch\f2 BlueTube}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid11083635 +\hich\af2\dbch\af31505\loch\f2 Inc be liable for any consequential, special, incidental or indirect damages of any kind arising out of the delivery, performance or use of t\hich\af2\dbch\af31505\loch\f2 +his software. This software was written with care, but no one warrants that the software is error-free. Your sole remedy for any failure or any form of damage caused by this software is a full refund of the license fee I have received from you, which in a +\hich\af2\dbch\af31505\loch\f2 l\hich\af2\dbch\af31505\loch\f2 l cases is $0. +\par +\par \hich\af2\dbch\af31505\loch\f2 On startup, the software anonymously checks for new versions as well as for updated versio}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid7934131 \hich\af2\dbch\af31505\loch\f2 ns of the movie database. This }{\rtlch\fcs1 \af2 +\ltrch\fcs0 \f2\insrsid11083635 \hich\af2\dbch\af31505\loch\f2 software submits anonymous data about your system configuration and use of the software to help improve future versions\hich\af2\dbch\af31505\loch\f2 + of the software. You may privately distribute copies of the software to others, so long as this disclaimer accompanies said distribution, you do not represent the software as your own work, and you do not alter the software or the installation package in +\hich\af2\dbch\af31505\loch\f2 \hich\af2\dbch\af31505\loch\f2 any way. You may not host or redistribute this software publicly (e.g. from a public Internet site); instead point users to http://www.}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid7934131 +\hich\af2\dbch\af31505\loch\f2 BlueTube}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid11083635 .}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid7934131 \hich\af2\dbch\af31505\loch\f2 me}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid11083635 +\hich\af2\dbch\af31505\loch\f2 / to download. You may not decompile or otherwise reverse-engineer any part of the software, except and only t\hich\af2\dbch\af31505\loch\f2 +o the extent that such actions are expressly allowed by applicable law notwithstanding this restriction. +\par +\par \hich\af2\dbch\af31505\loch\f2 This softwar}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid7934131 \hich\af2\dbch\af31505\loch\f2 e is completely free of charge. If FULL version is installed then idle comp}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid11083635 +\hich\af2\dbch\af31505\loch\f2 uting time }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid7934131 \hich\af2\dbch\af31505\loch\f2 of}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid11083635 \hich\af2\dbch\af31505\loch\f2 the system is }{\rtlch\fcs1 \af2 \ltrch\fcs0 +\f2\insrsid7934131 \hich\af2\dbch\af31505\loch\f2 used}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid11083635 \hich\af2\dbch\af31505\loch\f2 to support World Community Gri\hich\af2\dbch\af31505\loch\f2 d project}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid95563 +\hich\af2\dbch\af31505\loch\f2 (\hich\af2\dbch\af31505\loch\f2 http://www.}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid95563\charrsid95563 \hich\af2\dbch\af31505\loch\f2 worldcommunitygrid.org}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid95563 +\hich\af2\dbch\af31505\loch\f2 )}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid11083635 \hich\af2\dbch\af31505\loch\f2 . The boinc software is installed with the }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid7934131 \hich\af2\dbch\af31505\loch\f2 +BlueTube in FULL version}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid11083635 \hich\af2\dbch\af31505\loch\f2 . World Community Grid brings }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid7934131 \hich\af2\dbch\af31505\loch\f2 people }{\rtlch\fcs1 \af2 \ltrch\fcs0 +\f2\insrsid11083635 \hich\af2\dbch\af31505\loch\f2 together from across the globe to benefit humanity by creating the world's largest non-profit computing grid. They do this by pooling surplus p\hich\af2\dbch\af31505\loch\f2 +rocessing power from volunteers' devices. The innovation combined with visionary scientific research and large-scale volunteerism can help make the planet smarter. The success depends on like-minded individuals - like you. If you do not wish to donate the +\hich\af2\dbch\af31505\loch\f2 \hich\af2\dbch\af31505\loch\f2 idle time, please }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid95563 \hich\af2\dbch\af31505\loch\f2 install the}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid11083635 \hich\af2\dbch\af31505\loch\f2 + software}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid95563 \hich\af2\dbch\af31505\loch\f2 in DEMO version only}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid11083635 \hich\af2\dbch\af31505\loch\f2 . +\par +\par \hich\af2\dbch\af31505\loch\f2 EXPORT RESTRICTIONS: There is no export restriction +\par +\par \hich\af2\dbch\af31505\loch\f2 USE RESTRICTIONS: You warrant that your use of this software is legal and does not violate any law or regulation to which you are subject. +\par +\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid7934131 \hich\af2\dbch\af31505\loch\f2 BlueTube}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid11083635 \hich\af2\dbch\af31505\loch\f2 (tm) \hich\af2\dbch\af31505\loch\f2 \hich\f2 is \'a9\loch\f2 2013 }{\rtlch\fcs1 +\af2 \ltrch\fcs0 \f2\insrsid7934131 \hich\af2\dbch\af31505\loch\f2 BlueTube}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid11083635 \hich\af2\dbch\af31505\loch\f2 Inc. All rights reserved. +\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a +9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad +5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6 +b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0 +0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6 +a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f +c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512 +0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462 +a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865 +6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b +4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b +4757e8d3f729e245eb2b260a0238fd010000ffff0300504b03041400060008000000210030dd4329a8060000a41b0000160000007468656d652f7468656d652f +7468656d65312e786d6cec594f6fdb3614bf0fd87720746f6327761a07758ad8b19b2d4d1bc46e871e698996d850a240d2497d1bdae38001c3ba618715d86d87 +615b8116d8a5fb34d93a6c1dd0afb0475292c5585e9236d88aad3e2412f9e3fbff1e1fa9abd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad +79482a9c0498f184b4bd2991deb58df7dfbb8ad755446282607d22d771db8b944ad79796a40fc3585ee62949606ecc458c15bc8a702910f808e8c66c69b9565b +5d8a314d3c94e018c8de1a8fa94fd05093f43672e23d06af89927ac06762a049136785c10607758d9053d965021d62d6f6804fc08f86e4bef210c352c144dbab +999fb7b4717509af678b985ab0b6b4ae6f7ed9ba6c4170b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83a6569632cd467faddec9 +699640f6719e76b7d6ac355c7c89feca9cccad4ea7d36c65b258a206641f1b73f8b5da6a6373d9c11b90c537e7f08dce66b7bbeae00dc8e257e7f0fd2badd586 +8b37a088d1e4600ead1ddaef67d40bc898b3ed4af81ac0d76a197c86826828a24bb318f3442d8ab518dfe3a20f000d6458d104a9694ac6d88728eee2782428d6 +0cf03ac1a5193be4cbb921cd0b495fd054b5bd0f530c1931a3f7eaf9f7af9e3f45c70f9e1d3ff8e9f8e1c3e3073f5a42ceaa6d9c84e5552fbffdeccfc71fa33f +9e7ef3f2d117d57859c6fffac327bffcfc793510d26726ce8b2f9ffcf6ecc98baf3efdfdbb4715f04d814765f890c644a29be408edf3181433567125272371be +15c308d3f28acd249438c19a4b05fd9e8a1cf4cd296699771c393ac4b5e01d01e5a30a787d72cf1178108989a2159c77a2d801ee72ce3a5c545a6147f32a9979 +3849c26ae66252c6ed637c58c5bb8b13c7bfbd490a75330f4b47f16e441c31f7184e140e494214d273fc80900aedee52ead87597fa824b3e56e82e451d4c2b4d +32a423279a668bb6690c7e9956e90cfe766cb37b077538abd27a8b1cba48c80acc2a841f12e698f13a9e281c57911ce298950d7e03aba84ac8c154f8655c4f2a +f074481847bd804859b5e696007d4b4edfc150b12addbecba6b18b148a1e54d1bc81392f23b7f84137c2715a851dd0242a633f900710a218ed715505dfe56e86 +e877f0034e16bafb0e258ebb4faf06b769e888340b103d331115bebc4eb813bf83291b63624a0d1475a756c734f9bbc2cd28546ecbe1e20a3794ca175f3fae90 +fb6d2dd99bb07b55e5ccf68942bd0877b23c77b908e8db5f9db7f024d9239010f35bd4bbe2fcae387bfff9e2bc289f2fbe24cfaa301468dd8bd846dbb4ddf1c2 +ae7b4c191ba8292337a469bc25ec3d411f06f53a73e224c5292c8de0516732307070a1c0660d125c7d44553488700a4d7bddd3444299910e254ab984c3a219ae +a4adf1d0f82b7bd46cea4388ad1c12ab5d1ed8e1153d9c9f350a3246aad01c6873462b9ac05999ad5cc988826eafc3acae853a33b7ba11cd1445875ba1b236b1 +399483c90bd560b0b0263435085a21b0f22a9cf9356b38ec6046026d77eba3dc2dc60b17e92219e180643ed27acffba86e9c94c7ca9c225a0f1b0cfae0788ad5 +4adc5a9aec1b703b8b93caec1a0bd8e5de7b132fe5113cf312503b998e2c2927274bd051db6b35979b1ef271daf6c6704e86c73805af4bdd476216c26593af84 +0dfb5393d964f9cc9bad5c313709ea70f561ed3ea7b053075221d51696910d0d339585004b34272bff7213cc7a510a5454a3b349b1b206c1f0af490176745d4b +c663e2abb2b34b23da76f6352ba57ca2881844c1111ab189d8c7e07e1daaa04f40255c77988aa05fe06e4e5bdb4cb9c5394bbaf28d98c1d971ccd20867e556a7 +689ec9166e0a522183792b8907ba55ca6e943bbf2a26e52f48957218ffcf54d1fb09dc3eac04da033e5c0d0b8c74a6b43d2e54c4a10aa511f5fb021a07533b20 +5ae07e17a621a8e082dafc17e450ffb739676998b48643a4daa7211214f623150942f6a02c99e83b85583ddbbb2c4996113211551257a656ec1139246ca86be0 +aadedb3d1441a89b6a929501833b197fee7b9641a3503739e57c732a59b1f7da1cf8a73b1f9bcca0945b874d4393dbbf10b1680f66bbaa5d6f96e77b6f59113d +316bb31a795600b3d256d0cad2fe354538e7566b2bd69cc6cbcd5c38f0e2bcc63058344429dc2121fd07f63f2a7c66bf76e80d75c8f7a1b622f878a18941d840 +545fb28d07d205d20e8ea071b283369834296bdaac75d256cb37eb0bee740bbe278cad253b8bbfcf69eca23973d939b97891c6ce2cecd8da8e2d343578f6648a +c2d0383fc818c798cf64e52f597c740f1cbd05df0c264c49134cf09d4a60e8a107260f20f92d47b374e32f000000ffff0300504b030414000600080000002100 +0dd1909fb60000001b010000270000007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f7 +8277086f6fd3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89 +d93b64b060828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd500 +1996509affb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100e9de0f +bfff0000001c0200001300000000000000000000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6 +a7e7c0000000360100000b00000000000000000000000000300100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a +0000001c00000000000000000000000000190200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d00140006000800000021 +0030dd4329a8060000a41b00001600000000000000000000000000d60200007468656d652f7468656d652f7468656d65312e786d6c504b01022d001400060008 +00000021000dd1909fb60000001b0100002700000000000000000000000000b20900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000ad0a00000000} +{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d +617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 +6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 +656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} +{\*\latentstyles\lsdstimax267\lsdlockeddef0\lsdsemihiddendef1\lsdunhideuseddef1\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4; +\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9; +\lsdpriority39 \lsdlocked0 toc 1;\lsdpriority39 \lsdlocked0 toc 2;\lsdpriority39 \lsdlocked0 toc 3;\lsdpriority39 \lsdlocked0 toc 4;\lsdpriority39 \lsdlocked0 toc 5;\lsdpriority39 \lsdlocked0 toc 6;\lsdpriority39 \lsdlocked0 toc 7; +\lsdpriority39 \lsdlocked0 toc 8;\lsdpriority39 \lsdlocked0 toc 9;\lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdpriority1 \lsdlocked0 Default Paragraph Font; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority59 \lsdlocked0 Table Grid;\lsdunhideused0 \lsdlocked0 Placeholder Text;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdunhideused0 \lsdlocked0 Revision; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdpriority37 \lsdlocked0 Bibliography;\lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;}}{\*\datastore 010500000200000018000000 +4d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000 +d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e5000000000000000000000000a056 +bc7e380bcf01feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file diff --git a/Lib/copyright_movietube.rtf b/Lib/copyright_movietube.rtf new file mode 100644 index 0000000000000000000000000000000000000000..7bfdb7a25f0cb59893505b957e74f4cdc95a81b3 --- /dev/null +++ b/Lib/copyright_movietube.rtf @@ -0,0 +1,178 @@ +{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff0\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi0\deflang2057\deflangfe2057\themelang2057\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;} +{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;} +{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;} +{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f39\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f40\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\f42\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f43\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f44\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f45\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\f46\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f47\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f59\fbidi \fmodern\fcharset238\fprq1 Courier New CE;}{\f60\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;} +{\f62\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f63\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f64\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f65\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);} +{\f66\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f67\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);}{\f379\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}{\f380\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;} +{\f382\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f383\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f386\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;}{\f387\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);} +{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;} +{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;}{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;} +{\fhimajor\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;} +{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;} +{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}} +{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0; +\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\chyperlink\ctint255\cshade255\red0\green0\blue255;}{\*\defchp \fs22\loch\af31506\hich\af31506\dbch\af31505 }{\*\defpap +\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 +\af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang2057\langfe2057\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp2057\langfenp2057 \snext0 \sqformat \spriority0 Normal;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\* +\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1 +\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang2057\langfe2057\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp2057\langfenp2057 \snext11 \ssemihidden \sunhideused +Normal Table;}{\*\cs15 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf17 \sbasedon10 \sunhideused \styrsid95563 Hyperlink;}}{\*\rsidtbl \rsid95563\rsid7934131\rsid8411692\rsid8854514\rsid11083635}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0 +\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\author Shabeer Jaleel}{\operator Shabeer Jaleel}{\creatim\yr2014\mo6\dy25\hr14\min12}{\revtim\yr2014\mo6\dy25\hr14\min51}{\version3}{\edmins1}{\nofpages1}{\nofwords271} +{\nofchars1550}{\nofcharsws1818}{\vern49167}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect +\widowctrl\ftnbj\aenddoc\trackmoves0\trackformatting1\donotembedsysfont0\relyonvml0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\horzdoc\dghspace120\dgvspace120\dghorigin1701 +\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale100\rsidroot7934131 \fet0{\*\wgrffmtfilter 2450}\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2 +\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6 +\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang +{\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang2057\langfe2057\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp2057\langfenp2057 {\rtlch\fcs1 +\af2 \ltrch\fcs0 \f2\insrsid11083635 \hich\af2\dbch\af31505\loch\f2 By using this software and any updates to it, you indicate your acceptance of these terms. If you do not accept these terms, do not install or use the software. +\par +\par \hich\af2\dbch\af31505\loch\f2 The software (}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid8411692 \hich\af2\dbch\af31505\loch\f2 MovieTube}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid11083635 \hich\af2\dbch\af31505\loch\f2 +) and any updates to it are provided "as is" and you bear the risk of using it. In no event shall }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid8411692 \hich\af2\dbch\af31505\loch\f2 MovieTube }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid11083635 +\hich\af2\dbch\af31505\loch\f2 Inc be liable for any consequential, special, incidental or indirect damages of any kind arising out of the delivery, performance or use of this sof\hich\af2\dbch\af31505\loch\f2 +tware. This software was written with care, but no one warrants that the software is error-free. Your sole remedy for any failure or any form of damage caused by this software is a full refund of the license fee I have received from you, which in all case +\hich\af2\dbch\af31505\loch\f2 s\hich\af2\dbch\af31505\loch\f2 is $0. +\par +\par \hich\af2\dbch\af31505\loch\f2 On startup, the software anonymously checks for new versions as well as for updated versio}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid7934131 \hich\af2\dbch\af31505\loch\f2 ns of the movie database. This }{\rtlch\fcs1 \af2 +\ltrch\fcs0 \f2\insrsid11083635 \hich\af2\dbch\af31505\loch\f2 software submits anonymous data about your system configuration and use of the software to help improve future versions of the\hich\af2\dbch\af31505\loch\f2 + software. You may privately distribute copies of the software to others, so long as this disclaimer accompanies said distribution, you do not represent the software as your own work, and you do not alter the software or the installation package in any wa +\hich\af2\dbch\af31505\loch\f2 y\hich\af2\dbch\af31505\loch\f2 . You may not host or redistribute this software publicly (e.g. from a public Internet site); instead point users to http://www.}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid8411692 +\hich\af2\dbch\af31505\loch\f2 Movie}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid8854514 \hich\af2\dbch\af31505\loch\f2 Finder}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid11083635 .}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid8854514 +\hich\af2\dbch\af31505\loch\f2 in}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid11083635 \hich\af2\dbch\af31505\loch\f2 / to download. You may not decompile or otherwise reverse-engineer any part of the software, except and only to the +\hich\af2\dbch\af31505\loch\f2 extent that such actions are expressly allowed by applicable law notwithstanding this restriction. +\par +\par +\par \hich\af2\dbch\af31505\loch\f2 EXPORT RESTRICTIONS: There is no export restriction +\par +\par \hich\af2\dbch\af31505\loch\f2 USE RESTRICTIONS: You warrant that your use of this software is legal and does not violate any law or \hich\af2\dbch\af31505\loch\f2 regulation to which you are subject. +\par +\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid8411692 \hich\af2\dbch\af31505\loch\f2 MovieTube }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid11083635 \hich\af2\dbch\af31505\loch\f2 \hich\f2 (tm) is \'a9\loch\f2 2013 }{\rtlch\fcs1 \af2 \ltrch\fcs0 +\f2\insrsid8411692 \hich\af2\dbch\af31505\loch\f2 MovieTube }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\insrsid11083635 \hich\af2\dbch\af31505\loch\f2 Inc. All rights reserved. +\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a +9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad +5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6 +b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0 +0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6 +a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f +c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512 +0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462 +a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865 +6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b +4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b +4757e8d3f729e245eb2b260a0238fd010000ffff0300504b03041400060008000000210030dd4329a8060000a41b0000160000007468656d652f7468656d652f +7468656d65312e786d6cec594f6fdb3614bf0fd87720746f6327761a07758ad8b19b2d4d1bc46e871e698996d850a240d2497d1bdae38001c3ba618715d86d87 +615b8116d8a5fb34d93a6c1dd0afb0475292c5585e9236d88aad3e2412f9e3fbff1e1fa9abd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad +79482a9c0498f184b4bd2991deb58df7dfbb8ad755446282607d22d771db8b944ad79796a40fc3585ee62949606ecc458c15bc8a702910f808e8c66c69b9565b +5d8a314d3c94e018c8de1a8fa94fd05093f43672e23d06af89927ac06762a049136785c10607758d9053d965021d62d6f6804fc08f86e4bef210c352c144dbab +999fb7b4717509af678b985ab0b6b4ae6f7ed9ba6c4170b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83a6569632cd467faddec9 +699640f6719e76b7d6ac355c7c89feca9cccad4ea7d36c65b258a206641f1b73f8b5da6a6373d9c11b90c537e7f08dce66b7bbeae00dc8e257e7f0fd2badd586 +8b37a088d1e4600ead1ddaef67d40bc898b3ed4af81ac0d76a197c86826828a24bb318f3442d8ab518dfe3a20f000d6458d104a9694ac6d88728eee2782428d6 +0cf03ac1a5193be4cbb921cd0b495fd054b5bd0f530c1931a3f7eaf9f7af9e3f45c70f9e1d3ff8e9f8e1c3e3073f5a42ceaa6d9c84e5552fbffdeccfc71fa33f +9e7ef3f2d117d57859c6fffac327bffcfc793510d26726ce8b2f9ffcf6ecc98baf3efdfdbb4715f04d814765f890c644a29be408edf3181433567125272371be +15c308d3f28acd249438c19a4b05fd9e8a1cf4cd296699771c393ac4b5e01d01e5a30a787d72cf1178108989a2159c77a2d801ee72ce3a5c545a6147f32a9979 +3849c26ae66252c6ed637c58c5bb8b13c7bfbd490a75330f4b47f16e441c31f7184e140e494214d273fc80900aedee52ead87597fa824b3e56e82e451d4c2b4d +32a423279a668bb6690c7e9956e90cfe766cb37b077538abd27a8b1cba48c80acc2a841f12e698f13a9e281c57911ce298950d7e03aba84ac8c154f8655c4f2a +f074481847bd804859b5e696007d4b4edfc150b12addbecba6b18b148a1e54d1bc81392f23b7f84137c2715a851dd0242a633f900710a218ed715505dfe56e86 +e877f0034e16bafb0e258ebb4faf06b769e888340b103d331115bebc4eb813bf83291b63624a0d1475a756c734f9bbc2cd28546ecbe1e20a3794ca175f3fae90 +fb6d2dd99bb07b55e5ccf68942bd0877b23c77b908e8db5f9db7f024d9239010f35bd4bbe2fcae387bfff9e2bc289f2fbe24cfaa301468dd8bd846dbb4ddf1c2 +ae7b4c191ba8292337a469bc25ec3d411f06f53a73e224c5292c8de0516732307070a1c0660d125c7d44553488700a4d7bddd3444299910e254ab984c3a219ae +a4adf1d0f82b7bd46cea4388ad1c12ab5d1ed8e1153d9c9f350a3246aad01c6873462b9ac05999ad5cc988826eafc3acae853a33b7ba11cd1445875ba1b236b1 +399483c90bd560b0b0263435085a21b0f22a9cf9356b38ec6046026d77eba3dc2dc60b17e92219e180643ed27acffba86e9c94c7ca9c225a0f1b0cfae0788ad5 +4adc5a9aec1b703b8b93caec1a0bd8e5de7b132fe5113cf312503b998e2c2927274bd051db6b35979b1ef271daf6c6704e86c73805af4bdd476216c26593af84 +0dfb5393d964f9cc9bad5c313709ea70f561ed3ea7b053075221d51696910d0d339585004b34272bff7213cc7a510a5454a3b349b1b206c1f0af490176745d4b +c663e2abb2b34b23da76f6352ba57ca2881844c1111ab189d8c7e07e1daaa04f40255c77988aa05fe06e4e5bdb4cb9c5394bbaf28d98c1d971ccd20867e556a7 +689ec9166e0a522183792b8907ba55ca6e943bbf2a26e52f48957218ffcf54d1fb09dc3eac04da033e5c0d0b8c74a6b43d2e54c4a10aa511f5fb021a07533b20 +5ae07e17a621a8e082dafc17e450ffb739676998b48643a4daa7211214f623150942f6a02c99e83b85583ddbbb2c4996113211551257a656ec1139246ca86be0 +aadedb3d1441a89b6a929501833b197fee7b9641a3503739e57c732a59b1f7da1cf8a73b1f9bcca0945b874d4393dbbf10b1680f66bbaa5d6f96e77b6f59113d +316bb31a795600b3d256d0cad2fe354538e7566b2bd69cc6cbcd5c38f0e2bcc63058344429dc2121fd07f63f2a7c66bf76e80d75c8f7a1b622f878a18941d840 +545fb28d07d205d20e8ea071b283369834296bdaac75d256cb37eb0bee740bbe278cad253b8bbfcf69eca23973d939b97891c6ce2cecd8da8e2d343578f6648a +c2d0383fc818c798cf64e52f597c740f1cbd05df0c264c49134cf09d4a60e8a107260f20f92d47b374e32f000000ffff0300504b030414000600080000002100 +0dd1909fb60000001b010000270000007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f7 +8277086f6fd3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89 +d93b64b060828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd500 +1996509affb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100e9de0f +bfff0000001c0200001300000000000000000000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6 +a7e7c0000000360100000b00000000000000000000000000300100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a +0000001c00000000000000000000000000190200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d00140006000800000021 +0030dd4329a8060000a41b00001600000000000000000000000000d60200007468656d652f7468656d652f7468656d65312e786d6c504b01022d001400060008 +00000021000dd1909fb60000001b0100002700000000000000000000000000b20900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000ad0a00000000} +{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d +617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 +6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 +656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} +{\*\latentstyles\lsdstimax267\lsdlockeddef0\lsdsemihiddendef1\lsdunhideuseddef1\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4; +\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9; +\lsdpriority39 \lsdlocked0 toc 1;\lsdpriority39 \lsdlocked0 toc 2;\lsdpriority39 \lsdlocked0 toc 3;\lsdpriority39 \lsdlocked0 toc 4;\lsdpriority39 \lsdlocked0 toc 5;\lsdpriority39 \lsdlocked0 toc 6;\lsdpriority39 \lsdlocked0 toc 7; +\lsdpriority39 \lsdlocked0 toc 8;\lsdpriority39 \lsdlocked0 toc 9;\lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdpriority1 \lsdlocked0 Default Paragraph Font; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority59 \lsdlocked0 Table Grid;\lsdunhideused0 \lsdlocked0 Placeholder Text;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdunhideused0 \lsdlocked0 Revision; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdpriority37 \lsdlocked0 Bibliography;\lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;}}{\*\datastore 010500000200000018000000 +4d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000 +d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e500000000000000000000000010d8 +649d7c90cf01feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file diff --git a/Lib/data.xlsx b/Lib/data.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f0c59939bba6a55503990c83adcff4a6540981ec Binary files /dev/null and b/Lib/data.xlsx differ diff --git a/Lib/db.sql b/Lib/db.sql new file mode 100644 index 0000000000000000000000000000000000000000..7db661844062170768089766b6f17104e9a3639a Binary files /dev/null and b/Lib/db.sql differ diff --git a/Lib/klcp_basic_unattended.bat b/Lib/klcp_basic_unattended.bat new file mode 100644 index 0000000000000000000000000000000000000000..b93d9a907f1ce10314c1051bc72dd63d71fe6c16 --- /dev/null +++ b/Lib/klcp_basic_unattended.bat @@ -0,0 +1,3 @@ +@echo Installing: K-Lite Codec Pack +@"K-Lite_Codec_Pack_1060_Basic.exe" /verysilent /norestart /LoadInf=".\klcp_basic_unattended.ini" +@echo Done! diff --git a/Lib/klcp_basic_unattended.ini b/Lib/klcp_basic_unattended.ini new file mode 100644 index 0000000000000000000000000000000000000000..caa4f7cca1971e55a39d73862e00f7256f78d6d8 --- /dev/null +++ b/Lib/klcp_basic_unattended.ini @@ -0,0 +1,15 @@ +[Setup] +Group=K-Lite Codec Pack +NoIcons=1 +SetupType=custom +Components=video\h264\lav, video\mpeg4\lav, video\mpeg2\lav, video\vc1\lav, video\wmv\microsoft, video\other\lav, audio\ac3dts\lav, audio\aac\lav, audio\mpeg\lav, audio\other\lav, sourcefilter\avi\microsoft, sourcefilter\matroska\lav, sourcefilter\mp4\lav, sourcefilter\mpegts\lav, sourcefilter\mpegps\default, sourcefilter\wmv\microsoft, sourcefilter\ape\lav, sourcefilter\lav, subtitles\vsfilter, misc\brokencodecs, misc\brokenfilters +Tasks=reset_settings +[Thumbnails] +Extensions= +[Audio Configuration] +audio_passthrough=0 +bitstream_ac3=0 +bitstream_dts=0 +bitstream_eac3=0 +bitstream_dtshd=0 +bitstream_thruehd=0 diff --git a/Lib/libvlc-1.1.9-win32.zip b/Lib/libvlc-1.1.9-win32.zip new file mode 100644 index 0000000000000000000000000000000000000000..74fa1310cf7c6142d248dc33f77c86e933e8b4e0 --- /dev/null +++ b/Lib/libvlc-1.1.9-win32.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:864d953e1d7bcf5d3d3b9316eaa9503e0d1b5b26e4864ab64024f3af6a9fba05 +size 26909696 diff --git a/Lib/mod.lic b/Lib/mod.lic new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/Lib/msvcp100.dll b/Lib/msvcp100.dll new file mode 100644 index 0000000000000000000000000000000000000000..f49140b11a9572eb3aea3ac44849ba78d615def9 --- /dev/null +++ b/Lib/msvcp100.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b2ad109c15eaa92079582787b7772ba0a2f034f7d075907ff87028df0eaea671 +size 421200 diff --git a/Lib/msvcr100.dll b/Lib/msvcr100.dll new file mode 100644 index 0000000000000000000000000000000000000000..f23d42b4701c452b8dbfc7feb362f04592d0d413 --- /dev/null +++ b/Lib/msvcr100.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8793353461826fbd48f25ea8b835be204b758ce7510db2af631b28850355bd18 +size 773968 diff --git a/Lib/mt.db b/Lib/mt.db new file mode 100644 index 0000000000000000000000000000000000000000..6a1874c1e7010b1a38bfda166441be10e219be16 Binary files /dev/null and b/Lib/mt.db differ diff --git a/Lib/no_image.gif b/Lib/no_image.gif new file mode 100644 index 0000000000000000000000000000000000000000..0c7eb30f7f09426d8ab6779c2a3680837846e888 Binary files /dev/null and b/Lib/no_image.gif differ diff --git a/Local.testsettings b/Local.testsettings new file mode 100644 index 0000000000000000000000000000000000000000..b7e8ec89c686dd14ebdbf3b8350747c492d2fd20 --- /dev/null +++ b/Local.testsettings @@ -0,0 +1,10 @@ + + + These are default test settings for a local test run. + + + + + + + \ No newline at end of file diff --git a/MaxTube.UpService/BlueTube.UpService.csproj b/MaxTube.UpService/BlueTube.UpService.csproj new file mode 100644 index 0000000000000000000000000000000000000000..45427916d1388fa3f470034fa13ece18feaff3ac --- /dev/null +++ b/MaxTube.UpService/BlueTube.UpService.csproj @@ -0,0 +1,74 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {C8E6303A-F86E-491A-A291-BA307290D994} + WinExe + Properties + BlueTube.UpService + BlueTube.UpService + v2.0 + 512 + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + x86 + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + \ No newline at end of file diff --git a/MaxTube.UpService/Program.cs b/MaxTube.UpService/Program.cs new file mode 100644 index 0000000000000000000000000000000000000000..7bc26cceecbcbc3a4cb62c82596f19abbe5c12f3 --- /dev/null +++ b/MaxTube.UpService/Program.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; +using System.Threading; +using System.Diagnostics; +using System.IO; + +namespace MaxTube.UpService +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + bool createdNew; + var mutex = new Mutex(true, "bluetubeupdate", out createdNew); + if (!createdNew) + return; + + Thread.Sleep(2000); + Execute(); + } + + static void Execute() + { + try + { + var allProcesses = Process.GetProcessesByName("BlueTube"); + foreach (var process in allProcesses) + { + if (process.MainModule != null && "BlueTube.exe".Equals(process.MainModule.ModuleName, StringComparison.InvariantCultureIgnoreCase)) + { + + process.Kill(); + Thread.Sleep(2000); + if (!process.HasExited) + Thread.Sleep(5000); + if (!process.HasExited) + return; + break; + } + } + + var files = Directory.GetFiles(Application.StartupPath); + foreach (var file in files) + { + if (!file.Contains("BlueTube.UpService.exe")) + { + File.Copy(file, Path.Combine(Directory.GetParent(Application.StartupPath).FullName, + Path.GetFileName(file)), true); + } + } + + var app = Path.Combine(Directory.GetParent(Application.StartupPath).FullName, "BlueTube.exe"); + Process.Start(app); + } + catch { } + } + } +} diff --git a/MaxTube.UpService/Properties/AssemblyInfo.cs b/MaxTube.UpService/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000000000000000000000000000000000..3d302938ea976b8aeb7c489d26a4a36a51163b83 --- /dev/null +++ b/MaxTube.UpService/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +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("BlueTube.UpService")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("BlueTube.UpService")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[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("793d0311-dd31-41ee-b9c9-49a57b4f5768")] + +// 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.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/MaxTube.UpService/Properties/Resources.Designer.cs b/MaxTube.UpService/Properties/Resources.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..b084f6bc0632fcac5d7435286f569c0ac62f95cc --- /dev/null +++ b/MaxTube.UpService/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.18408 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace BlueTube.UpService.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("BlueTube.UpService.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; + } + } + } +} diff --git a/MaxTube.UpService/Properties/Resources.resx b/MaxTube.UpService/Properties/Resources.resx new file mode 100644 index 0000000000000000000000000000000000000000..ffecec851ab4deae63e81647b4655c7d1fe6dfd7 --- /dev/null +++ b/MaxTube.UpService/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/MaxTube.UpService/Properties/Settings.Designer.cs b/MaxTube.UpService/Properties/Settings.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..aba6bfffd1e9088e60e8b85d88484fcdc8514bd3 --- /dev/null +++ b/MaxTube.UpService/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.18408 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace BlueTube.UpService.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + 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; + } + } + } +} diff --git a/MaxTube.UpService/Properties/Settings.settings b/MaxTube.UpService/Properties/Settings.settings new file mode 100644 index 0000000000000000000000000000000000000000..abf36c5d3d7a33baabb780c9dffef3d804ceb62f --- /dev/null +++ b/MaxTube.UpService/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Maxtube.Setup/Maxtube.Setup.vdproj b/Maxtube.Setup/Maxtube.Setup.vdproj new file mode 100644 index 0000000000000000000000000000000000000000..1fd71643f5ef1aae485359477190e0fa9d08871d --- /dev/null +++ b/Maxtube.Setup/Maxtube.Setup.vdproj @@ -0,0 +1,8925 @@ +"DeployProject" +{ +"VSVersion" = "3:800" +"ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}" +"IsWebType" = "8:FALSE" +"ProjectName" = "8:Bluetube.Setup" +"LanguageId" = "3:1033" +"CodePage" = "3:1252" +"UILanguageId" = "3:1033" +"SccProjectName" = "8:" +"SccLocalPath" = "8:" +"SccAuxPath" = "8:" +"SccProvider" = "8:" + "Hierarchy" + { + "Entry" + { + "MsmKey" = "8:_033AF366CD0C47A4ADD0AFBF42036593" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_0437525A224743429F26F110BD3BDB9E" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_05D846688FE14916BD45E4222C70CFD5" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_07CD16B215AC4895A612509EF7EA8CFF" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_08DEDFF0DDE24B91912B989AB8D11CB7" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_0BBCD2483E6C4F388D4EFF2E7C2C8EF6" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_0C735D3C749C49B89F97FE99B6B22888" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_0D03E8F6772B4484B2E2B2DA695DADAC" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_0DFBEBB4B5B341FA88F09BEA131FF7B2" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_0E98AE4FDB484929964C5B5192EA1CFC" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_0EA4DB34983B4B3FB5D7E982E487B2B5" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_108635D3F45C4880BDB3269F673336BB" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_1242784252C34946A81ABCF91FEB2CE3" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_15813EF66D67485E99131B218821EABB" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_15A3A527B8BD42EDB1227CE9C0F6C26F" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_15A8A522D48A46609EAF72496D8E5A89" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_163001FA3D8F4D36909D2D4B08284F81" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_178BDA7FC8C64F8586B070108A26332A" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_1836F4CAB9AB4A2B8C9C4A90F6645E5A" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_18CAD1C8FB2A433FBDB35FC7FFA541C0" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_1990E4EFC6CE4E088A53592B4AA22A3C" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_1A87E2AE231447F29A421DE300E489F8" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_1C4DCE58EABA4220BB052FD864B0DA65" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_1D7A166D21974731B1C9C90691979C3F" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_1DE6DB73DF6048D088D35B8470868324" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_1E4839A610EF469A8D5A02661ADDDC44" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_1F6349C8F14D469EBFC3DBCE1CA48E9B" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_1FD8A9B3582E46B9874323E8B95A575E" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_20279077BA7E4DCC9F8104DE97F0296E" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_20D48A770006442E9216BF28DF9568BD" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_213B9240524A433CA71499229C7E37DC" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_216EC5408234F8795C959DAAB85127BA" + "OwnerKey" = "8:_44BA028CA63ACF6F10ABFFF74110E073" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_216EC5408234F8795C959DAAB85127BA" + "OwnerKey" = "8:_65B05975CCF34ECC87561FA5F2174F44" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_216EC5408234F8795C959DAAB85127BA" + "OwnerKey" = "8:_82D9847B08540DC54048538DDC83F040" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_22B305ABA7E34D6A805A5B7B8F9FC9EB" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_242E9DDAEC064BB29C4C5EE4FAED935C" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_261DCE820C98454D9C94BE39BA333196" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_2650BA70585C42808553472DC837853F" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_27D4641BCFF645F6B7D18DAF6E0E6340" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_27DECC8C63BD418487A8A980FD1A61DA" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_2A5141A512F547F08F881F7F0016FC63" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_2AE2CE79CF5943EF8BA85B5CCB0786C9" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_2AFE5230947D4BD79F5D6BC983E0B699" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_2BE1680DDFC14DEA936F392821D2F355" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_2C4B167AB791443D8C9E9BFEA60ABDE4" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_2C697BC0A09A43C788B388F58E10B9E4" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_2C9AB9121B734BF692D9CE8D6D775016" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_2CE2A99C6B094EA2A37CD5394274DA3F" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_2CE9F4B16EB8493C85C2318BA97FD764" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_2E83C5B228C940AEB3B897270C604ACB" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_31E6566EEF544532AF67B24AD4160474" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_32A49DC9D01E45AEAFC9AC9793ABB34E" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_33006EA3971C44FBB2FE5970DBDC5690" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_339272B68A8640BFA9EF1DC095324798" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_33CE7E1193E946DD8D4F98F69B19A837" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_359F03BB43B7478BB7CFA1CB3E91CB4B" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_35A6209F27D94EB4AAB785C39B27A3CA" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_35CD0D562E9D4D669CE02EE0C36E9478" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_38021E0207EC18AEB524F0030EADC5AE" + "OwnerKey" = "8:_65B05975CCF34ECC87561FA5F2174F44" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_39AC507D963241F1A7B37475F237CCE3" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_39AF0D2E4E504F1FA3C30727CAEE23C5" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_39D0BE1DE3904791ABFD926A0E89E5DC" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_3BEF7238FCAC4F7BA62AF24F5A0029AD" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_3C1730E2497F46418B5EA1040AA0340B" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_3C4291466CF648BBA04DD151079A6A9D" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_3E13D219CB494CFE8876F69077D5AC27" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_3E3733B4083747459A150C6615A97425" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_4048FAAE78F14ED0BBD30EA5B3064618" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_41043E814EAF416E9C9AE56115D338BC" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_41376159FBAB455CBEBDAB4F9D5A5A00" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_41A7543636024EC99A2029602FBDE6BA" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_422E31D93C9B480EA52488D6F675D125" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_42A29DD1B18A47C792C13D1C80FD1FA2" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_437D57F31AAF4CD6BEAAC1630C6A38FB" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_440162EEC7354274879F92B31325150C" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_449D9537F242C08838434D7D88A45B9D" + "OwnerKey" = "8:_82D9847B08540DC54048538DDC83F040" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_449D9537F242C08838434D7D88A45B9D" + "OwnerKey" = "8:_65B05975CCF34ECC87561FA5F2174F44" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_44B61E0B11E949C7B072A77341A319F6" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_44BA028CA63ACF6F10ABFFF74110E073" + "OwnerKey" = "8:_82D9847B08540DC54048538DDC83F040" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_44BA028CA63ACF6F10ABFFF74110E073" + "OwnerKey" = "8:_65B05975CCF34ECC87561FA5F2174F44" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_45E1E310D6CC4D6894E82F257A032827" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_4689F92F4EC84C458F5B4B76725C2E90" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_46B460F557B74475A7FD1F13AA503120" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_47035390C8A340D5BDE895A6A08A474B" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_47631AE7124E4EE79C03456C03ECB340" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_4854C165164B4FC2B9FACE562B61C3D7" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_4BE9F1DCC5AF40F99E6542D6E1412358" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_4CBC99D6BAA74D67B526B96BC95C26B1" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_4F0D1E90F4BF4F99941744CEEE11E67D" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_4F326CCBCB20400890A7A6ACE8296B2C" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_50271B759A50408F9B92EE45F0E33128" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_51BF9CDD3FD54D2692C60AFEED3C2434" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_51CA424D949D4CAD9AB3E00D3174C1AF" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_51D60A1C4DF6480D9426A7AD6D7432D2" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_530518E7FE134E22ADB1E6555C5A5194" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_5320C2113BD94B94A2ACB233FEEFFEC1" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_53D074E90602423096DF0E22A1B3262C" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_53DC2EBEE61A4A2592027222E17620FA" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_548B1EC298F54EFA96150FA1722837B0" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_57BAD9281D854ECD896F8ABB917FEDDD" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_5889F15523A44C75B63452AE769CF058" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_58AA5334076F4945A375815C390EB9B6" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_5A42FBC618074666ADB075B3026B18E5" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_5A99F47875B446A59B44D7D1B66E5DE2" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_5B0F25D9BB144E97A24B8D6BDB003AB6" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_5B551CE0875749948D079ED23FD5A249" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_5B662883E56341378D919CCC8F39FD23" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_5BC6B5843D1FB85D9E8A205B0E7DF6B3" + "OwnerKey" = "8:_A122963DC816D8362B148C3DEBF2AB6F" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_5BC6B5843D1FB85D9E8A205B0E7DF6B3" + "OwnerKey" = "8:_65B05975CCF34ECC87561FA5F2174F44" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_5BC6B5843D1FB85D9E8A205B0E7DF6B3" + "OwnerKey" = "8:_82D9847B08540DC54048538DDC83F040" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_5BC6B5843D1FB85D9E8A205B0E7DF6B3" + "OwnerKey" = "8:_44BA028CA63ACF6F10ABFFF74110E073" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_5BEAC661EFD4483797A6ED1593B87817" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_5C81CDF08F327A945656BB97B15AA03C" + "OwnerKey" = "8:_65B05975CCF34ECC87561FA5F2174F44" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_5D49FD175347FDED887426B796B7EE95" + "OwnerKey" = "8:_65B05975CCF34ECC87561FA5F2174F44" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_5EB610F9BDB54FB2A58AF6F4D0FDD98C" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_62F036FAA3034364990BC5E40E127E7B" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_63039266A0EC4B0BAA16D0A5E5B72181" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_6455265CA2494F239F01541E6E8B64C1" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_64C8AA2447D4489DBFBCBBB214BAB9A8" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_65B05975CCF34ECC87561FA5F2174F44" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_65E23D8481A7C53D4E0CFF28BD59E2F3" + "OwnerKey" = "8:_EBCB88AE027F89355021DF4D71578685" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_65E23D8481A7C53D4E0CFF28BD59E2F3" + "OwnerKey" = "8:_65B05975CCF34ECC87561FA5F2174F44" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_65F8821B2B704EBEA05E39F43E675263" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_66ACCEEA3BAC4B919C4302481CB8319A" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_674B88FD109E4580AADB9F701C77DCBD" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_68C5FC24217A4C5485CD27EB35261E5A" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_69B1C735DBBB46FEA60713D0BA210587" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_69D46762CBE64DF2ADE984CDBBE739BC" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_6ADACBE9B188446F975BE6A6EE487269" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_6B78C9791FA3466F9A255502CD41D91C" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_6CEF1CBB6F3B4C9E98948054DF1A5ED3" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_6E20A91DF54141078E5F4308D30B2BDC" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_6E79431D054E494EAD29CB1C81ACC026" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_6EB0D8F56138483893768A5690AE515E" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_6F0B19BB2FC94570A588340264DDBA49" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_707B2302813B4EC9BC9AD737A20EF2F9" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_711017E7CEB8418E85126246D9580D99" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_726CA1AABF784D8FBCA5FD3DE6CD6E82" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_737194D6FEC4447D8586EA52107DA41C" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_7378BB1517BE4695861FF871F7FFF905" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_738D7067F09D40538DBFE4AE8C6B357A" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_744A2E93D06446A0BF84661D36684227" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_74AD0C8C80D94465B716640BC6641DCA" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_74D2EFD33E804E8599F2169F5D2C2622" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_74FA43FBF9C940BF8EF33B7055B0F047" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_751B5E1C0505441DAF747A6C8A27185E" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_75540EFC985A4BE7AA113930DDF04B99" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_758479E0BEE440F6903CE834D61018A5" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_795E04F97AC04BC9838CFD869A34DD79" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_7C7572CF1BE64C069C336C3500E3B38C" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_7D1C8DB3CB2D41A48C7753FB5C8A6353" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_7D8DB87DF34E4AA78EBD7CA4CE3039AD" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_7EAE7A8555114DACAEBFB91800C1068F" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_7F070EC5CB364B90A85C3117DD2C9A6D" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_810B67EA791C495D8F08D87A18EDB533" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_81142A4FDF894C6EBD1800A1CCB2D810" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_8231305462154F02811D73B6C653F138" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_82AFBC87CE284A038F42491F3E362237" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_82D9847B08540DC54048538DDC83F040" + "OwnerKey" = "8:_65B05975CCF34ECC87561FA5F2174F44" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_85834E85866E49D8BD1F74AE8A46A2F9" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_8597C0D095FC4FAFBD41CCFBA4765963" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_85C654B6016C4DE787C711661D647257" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_85F24D0610274F6DAEFB3E2434C1585D" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_86141CBC431345B794327847228F3EEC" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_864D2F3718944EFEA247A8E9DADD7C84" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_86BAAE1A8E7B4DD9A8EDFB5E9B431761" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_87890AD07245407F986BBCC31FE7AEE8" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_879719EF2334482BACAA9C526112846C" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_879F9C74DAF2415C83A8E6D6EF150B90" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_88396C84C45C46E4844145FB3A7FDA09" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_89AC2BDF1DF44B6085AF13840AC8023B" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_8A56B0106EB34220B3EE5108063A5FFB" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_8BA467E7CA4B4CD495878EB2935C1EFA" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_8BD6CA559BCF4ABB82C975CD0F690FFE" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_8E476F97DAA04C92AB938AA2A85B5D79" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_8F43058D15A54EC4AD1102E944B70C67" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_8F574574981C4CF082AA604C3B81C848" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_9081AE02166E4D69B9677B05944F9963" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_925305FADF30541C7EFF9E2F732ED6E0" + "OwnerKey" = "8:_65B05975CCF34ECC87561FA5F2174F44" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_9307C74B01DD43A7B8A7D2B3F936CE24" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_931461C96397447F852759395957F10A" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_94CE37D0748F46A7AD19C00A37737F77" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_962BFC63FEC24B778AB267645A17E1DD" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_96C81DEC3924494DADD2A350E3B0699A" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_9917725FABAA40C09592E7EE8850E967" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_99793E1DFD1B481583D8A6A138A8D0D9" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_99E7454F10A7473F99E2334E5A1DF9E4" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_9A3110C9D5F242B783475B016D205D99" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_9A447E335F5443C1BE2E59D1FF2CCF78" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_9BE910C0901B416BA7F127737AC5D321" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_9CC6E4B5CF6F43CF8A0BDE0601FED967" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_9E354512A3D645A3A9C87395C73900F8" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_9EE3A82DC9BA49449FBBAA302B4A6E83" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_9F9526A4EDDD46EABACAFDEAE066712E" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_9FDEA81E8ED2486DA651EB0AE6C7E775" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_9FE7646A1921426189504F5E6B303D17" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_A122963DC816D8362B148C3DEBF2AB6F" + "OwnerKey" = "8:_44BA028CA63ACF6F10ABFFF74110E073" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_A122963DC816D8362B148C3DEBF2AB6F" + "OwnerKey" = "8:_65B05975CCF34ECC87561FA5F2174F44" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_A1D60ADA69464D1EAE43DFFB5B3F5543" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_A281EE11D8C64E02A691A2746633C3D1" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_A2FD684B130740E5B041D7B68FC595E7" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_A32B6F880A114E54A29E212F00B70F7A" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_A39EC0E6796A45DF84F7DE41735F1709" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_A4E206F122594B3A9B27365913A1C360" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_A9C4142733E343BDB7372C482493A585" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_A9CA9020690A476C94A5060036F90392" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_AA9CB42CE78242D6BDA5B00D0A09BE54" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_AABA71BAA8B74355BD827A22C50972CE" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_AAE87ACB9029420FB8BD9C99D81C7241" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_AB179616A2D6415CBE0811FCF2620D8D" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_AB80DD30947147B08302545C955F0F82" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_AD3A4F65E3244586BE5D51C8418500D4" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_AE1C7F19B317405B8D2A4CE6949BB360" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_B18AD4D0105F4BA0B711E8C30C66EFF1" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_B229DBEF6B774CF38E1DB730A335E966" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_B3926DD324CB48D69BDC30E3017E84BF" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_B3EB7CFD66A44FC68193CEABC5516B74" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_B5C33C37F4F644F690902A8A310F0632" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_B5E74BBDCC0B45889ACD284DC0514B68" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_B7D6CBBAC03A429696C6496991238AEA" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_B80BE1F0A1F84404914727FB5B1DC5E7" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_B80C56B204E9449B9FAE98E9DBBD2653" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_B8C4E112138947D7BC34104CAE8C9E78" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_B9ECBBDC949C4488BC5F2581F663A31A" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_BBA8E43A8F1F4714B2113AB6323CA7FA" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_BD10AF1E07AD4029B19DE9739BC3A1C8" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_BE203E6593B24B69BE8BC1CAD90A09AA" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_BE22AA6DC8694A7798DA19B8D1E18080" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_BEE7073618574321B3574A6EB8265FD6" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_BEF0587BC46E45FAB9A27D9C0790BC78" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_BFBB516926044331AC11511222B24A00" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_BFD1A345B00C449586F36EB392A1DAB0" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_C0BB7348C5F642CEA3CDF37CE4F26AEE" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_C0EA44FA88B84E3BA5D203734DDA43B7" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_C3250E3B4BC24030A881B5B088C840EE" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_C75D714471DB43AE9846BFA905D27ACE" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_C8447E752150405C9B4BCCD1F6AE2114" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_C85C226543A7406A8380F3A37314BE0C" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_C87D25F0B55D4AE18287E1487C63283C" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_C9196A1C138E41AC8BDB3580F2A2AC35" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_C9896991DFF74D66B6495D80C6F738DE" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_CA290FA5A1774625957CFD546FE6A9BB" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_CAB7AA689E894C5180C0E9DB64267BF2" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_CC43752C18744F53B90B331A363CC00C" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_CC635CF9A7DB4779BA85B5DAF9F40516" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_CCB3443749AE4780BD9630FA53E6AE65" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_CE0E05A78ADE4415B9CA85BE4E59CCD2" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_CE617B30ACB04C14B8C8B9B29A2F5676" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_CE9B73801A1B4FC4AAC51FF88AADB5E0" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_CED9BDADDE015A13C8C06D640EA93000" + "OwnerKey" = "8:_65B05975CCF34ECC87561FA5F2174F44" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_CED9BDADDE015A13C8C06D640EA93000" + "OwnerKey" = "8:_EBCB88AE027F89355021DF4D71578685" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_CFA6583B57604C8EB9B37564AECCFF95" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_CFC4608867534037A70A149FFC5AC489" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_CFED586073844481812E7F170E6F662C" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_D031A69593714C4590E9B2B48F1FEF9E" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_D1F6AC20900F454CA3B9A31C664D856B" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_D3282B45C13A42319BEDFDFF2466ECD0" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_D32BB307554B44008343AA5295120E9A" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_D334624C46DF4A57B4F968E57FBD0614" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_D4766AD7B52E422BADEDFC18D6574DF1" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_D743FF6C177C4C36B89A9E18AB3EC819" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_D83A94F5FEAB42F48D366FCAD515D352" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_D88BA3A3E1CE4364B34B9FBF3306EC42" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_D8DAC3A618CC4D59B13AD4B81402AE38" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_D9D10388D50241C4A9C5B3DD89B455DD" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_DA196E5FDF234D3886CE7B1711800127" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_DAB941D0B1C54F4EA2843ED7F8457801" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_DDD14FD530AD410ABD4C8E0A16091881" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_DEA2DD64F7914D919CC3D48440D9C484" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_DEC21C346D584DABB1913BE2E5EEC0E8" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_DF0DCF5A4DC641A4A80267482B3DB00E" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_DFE2A1E732A14C7557728CAB41C1D8E4" + "OwnerKey" = "8:_65B05975CCF34ECC87561FA5F2174F44" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_E2739FC167664F7AAEA9FBA2A9D29480" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_E30C61C8E02C48D2ADADDA279CD87A95" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_E4271575AA134D5EB4E57C63EA40C299" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_E5D0C09A95CD493D918665260AE525C2" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_E5E9DBBE12D24EA58A06146DA3539FEA" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_E5F8259615904A12965BDD708000D198" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_E5FD2A0BAEE247AF94AFCF7A99C14308" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_E6DF7753AB774158A76A1436EBFB9725" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_E7A6079650214BB79992DDC421B1560C" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_E7B2E135170743339748EBB97B1DF6F9" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_E9A95685589246C79B0C43ABC6CCBB4F" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_E9AB42FEF8884843B9926F564EC1B70B" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_EAAC1F69CD214704BED3D81E9EE3126F" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_EAFF29B7072244CBAE569483DB84DB36" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_EB047240FD1A4EB7BC752DBCFA089FA3" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_EB87F5EA4F6C41E290B04E7C9EDC2FFD" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_EBCB88AE027F89355021DF4D71578685" + "OwnerKey" = "8:_65B05975CCF34ECC87561FA5F2174F44" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_EBCB88AE027F89355021DF4D71578685" + "OwnerKey" = "8:_925305FADF30541C7EFF9E2F732ED6E0" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_EC5CEBE8B4904E3EB0885348BE39F49C" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_ECD4107F0F2C4B86B3A4F2292B7B965B" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_ED479CB21D154480976AA9AA465B5172" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_EE5CE49095D24F23BBAA612C7FC8E280" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_EF3A35F7A85C4E4A85ECC65BF04FCC68" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_F0773C48E6CD458FBC6B1F7CBEBACA49" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_F0C694F17127407583B969DD4464C073" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_F19C81A42BF942E78EB375BD0523B368" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_F24F2268025741B9BD544F7054347E25" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_F25906D8A3B64AA8A622F7527F8BE084" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_F4C463B720484FC7B9BB27A007EED77D" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_F57184615BC547E3817F60946AA68CD6" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_F613CC32404B4B5CAEB8615741CC3BEC" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_F61E7D0928AE4FD4B8A395C6EAC4E69C" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_F653AD23EC0D45B3A8DE10580DB35C07" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_F78673F6950F45B0A363FCC877309DC9" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_F87D8846992A46D1B3E17D2E5424CA11" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_F9571E57E89344B0A102890A03925153" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_FAB73A369D2B4AE0BDE7315A3CC7C9D3" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_FBE137A1637244E28F5C2FA80DEDB1C4" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_65B05975CCF34ECC87561FA5F2174F44" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_5C81CDF08F327A945656BB97B15AA03C" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_82D9847B08540DC54048538DDC83F040" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_44BA028CA63ACF6F10ABFFF74110E073" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_216EC5408234F8795C959DAAB85127BA" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_A122963DC816D8362B148C3DEBF2AB6F" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_5BC6B5843D1FB85D9E8A205B0E7DF6B3" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_449D9537F242C08838434D7D88A45B9D" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_DFE2A1E732A14C7557728CAB41C1D8E4" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_5D49FD175347FDED887426B796B7EE95" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_925305FADF30541C7EFF9E2F732ED6E0" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_EBCB88AE027F89355021DF4D71578685" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_65E23D8481A7C53D4E0CFF28BD59E2F3" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_38021E0207EC18AEB524F0030EADC5AE" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_CED9BDADDE015A13C8C06D640EA93000" + "MsmSig" = "8:_UNDEFINED" + } + } + "Configurations" + { + "Debug" + { + "DisplayName" = "8:Debug" + "IsDebugOnly" = "11:TRUE" + "IsReleaseOnly" = "11:FALSE" + "OutputFilename" = "8:Debug\\BlueTube.Setup.msi" + "PackageFilesAs" = "3:2" + "PackageFileSize" = "3:-2147483648" + "CabType" = "3:1" + "Compression" = "3:2" + "SignOutput" = "11:FALSE" + "CertificateFile" = "8:" + "PrivateKeyFile" = "8:" + "TimeStampServer" = "8:" + "InstallerBootstrapper" = "3:2" + "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" + { + "Enabled" = "11:TRUE" + "PromptEnabled" = "11:TRUE" + "PrerequisitesLocation" = "2:1" + "Url" = "8:" + "ComponentsUrl" = "8:" + "Items" + { + "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Windows.Installer.3.1" + { + "Name" = "8:Windows Installer 3.1" + "ProductCode" = "8:Microsoft.Windows.Installer.3.1" + } + } + } + } + "Release" + { + "DisplayName" = "8:Release" + "IsDebugOnly" = "11:FALSE" + "IsReleaseOnly" = "11:TRUE" + "OutputFilename" = "8:Release\\BlueTube.Setup.msi" + "PackageFilesAs" = "3:2" + "PackageFileSize" = "3:-2147483648" + "CabType" = "3:1" + "Compression" = "3:2" + "SignOutput" = "11:FALSE" + "CertificateFile" = "8:" + "PrivateKeyFile" = "8:" + "TimeStampServer" = "8:" + "InstallerBootstrapper" = "3:2" + "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" + { + "Enabled" = "11:TRUE" + "PromptEnabled" = "11:TRUE" + "PrerequisitesLocation" = "2:1" + "Url" = "8:" + "ComponentsUrl" = "8:" + "Items" + { + "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.0,Profile=Client" + { + "Name" = "8:Microsoft .NET Framework 4 Client Profile (x86 and x64)" + "ProductCode" = "8:.NETFramework,Version=v4.0,Profile=Client" + } + "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Windows.Installer.3.1" + { + "Name" = "8:Windows Installer 3.1" + "ProductCode" = "8:Microsoft.Windows.Installer.3.1" + } + } + } + } + } + "Deployable" + { + "CustomAction" + { + } + "DefaultFeature" + { + "Name" = "8:DefaultFeature" + "Title" = "8:" + "Description" = "8:" + } + "ExternalPersistence" + { + "LaunchCondition" + { + "{A06ECF26-33A3-4562-8140-9B0E340D4F24}:_E6617A52366E4296BE16504739C4E9CB" + { + "Name" = "8:.NET Framework" + "Message" = "8:[VSDNETMSG]" + "FrameworkVersion" = "8:.NETFramework,Version=v2.0" + "AllowLaterVersions" = "11:FALSE" + "InstallUrl" = "8:http://go.microsoft.com/fwlink/?LinkId=131000" + } + } + } + "File" + { + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_033AF366CD0C47A4ADD0AFBF42036593" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libpodcast_plugin.dll" + "TargetName" = "8:libpodcast_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0437525A224743429F26F110BD3BDB9E" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libvorbis_plugin.dll" + "TargetName" = "8:libvorbis_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_05D846688FE14916BD45E4222C70CFD5" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libnormvol_plugin.dll" + "TargetName" = "8:libnormvol_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_07CD16B215AC4895A612509EF7EA8CFF" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libstream_out_mosaic_bridge_plugin.dll" + "TargetName" = "8:libstream_out_mosaic_bridge_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_08DEDFF0DDE24B91912B989AB8D11CB7" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libplaylist_plugin.dll" + "TargetName" = "8:libplaylist_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0BBCD2483E6C4F388D4EFF2E7C2C8EF6" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libi420_rgb_mmx_plugin.dll" + "TargetName" = "8:libi420_rgb_mmx_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0C735D3C749C49B89F97FE99B6B22888" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libgrain_plugin.dll" + "TargetName" = "8:libgrain_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0D03E8F6772B4484B2E2B2DA695DADAC" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libyuy2_i420_plugin.dll" + "TargetName" = "8:libyuy2_i420_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0DFBEBB4B5B341FA88F09BEA131FF7B2" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libripple_plugin.dll" + "TargetName" = "8:libripple_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0E98AE4FDB484929964C5B5192EA1CFC" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libfloat32_mixer_plugin.dll" + "TargetName" = "8:libfloat32_mixer_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0EA4DB34983B4B3FB5D7E982E487B2B5" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libaccess_attachment_plugin.dll" + "TargetName" = "8:libaccess_attachment_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_108635D3F45C4880BDB3269F673336BB" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libavi_plugin.dll" + "TargetName" = "8:libavi_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1242784252C34946A81ABCF91FEB2CE3" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libtaglib_plugin.dll" + "TargetName" = "8:libtaglib_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_15813EF66D67485E99131B218821EABB" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libaccess_ftp_plugin.dll" + "TargetName" = "8:libaccess_ftp_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_15A3A527B8BD42EDB1227CE9C0F6C26F" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libstats_plugin.dll" + "TargetName" = "8:libstats_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_15A8A522D48A46609EAF72496D8E5A89" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libtrivial_channel_mixer_plugin.dll" + "TargetName" = "8:libtrivial_channel_mixer_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_163001FA3D8F4D36909D2D4B08284F81" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libvcd_plugin.dll" + "TargetName" = "8:libvcd_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_178BDA7FC8C64F8586B070108A26332A" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libmsn_plugin.dll" + "TargetName" = "8:libmsn_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1836F4CAB9AB4A2B8C9C4A90F6645E5A" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libtheora_plugin.dll" + "TargetName" = "8:libtheora_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_18CAD1C8FB2A433FBDB35FC7FFA541C0" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libvod_rtsp_plugin.dll" + "TargetName" = "8:libvod_rtsp_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1990E4EFC6CE4E088A53592B4AA22A3C" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libaudiobargraph_a_plugin.dll" + "TargetName" = "8:libaudiobargraph_a_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1A87E2AE231447F29A421DE300E489F8" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libglobalhotkeys_plugin.dll" + "TargetName" = "8:libglobalhotkeys_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1C4DCE58EABA4220BB052FD864B0DA65" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libmemcpymmx_plugin.dll" + "TargetName" = "8:libmemcpymmx_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1D7A166D21974731B1C9C90691979C3F" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libogg_plugin.dll" + "TargetName" = "8:libogg_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1DE6DB73DF6048D088D35B8470868324" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libspeex_plugin.dll" + "TargetName" = "8:libspeex_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1E4839A610EF469A8D5A02661ADDDC44" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libmod_plugin.dll" + "TargetName" = "8:libmod_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1F6349C8F14D469EBFC3DBCE1CA48E9B" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libremoteosd_plugin.dll" + "TargetName" = "8:libremoteosd_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1FD8A9B3582E46B9874323E8B95A575E" + { + "SourcePath" = "8:..\\Lib\\bluetube_banner.jpg" + "TargetName" = "8:bluetube_banner.jpg" + "Tag" = "8:" + "Folder" = "8:_067A17FA12CB4C09B31404658B511C40" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_20279077BA7E4DCC9F8104DE97F0296E" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libmagnify_plugin.dll" + "TargetName" = "8:libmagnify_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_20D48A770006442E9216BF28DF9568BD" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libpacketizer_dirac_plugin.dll" + "TargetName" = "8:libpacketizer_dirac_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_213B9240524A433CA71499229C7E37DC" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libcolorthres_plugin.dll" + "TargetName" = "8:libcolorthres_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_216EC5408234F8795C959DAAB85127BA" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:HtmlAgilityPack, Version=1.4.6.0, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_216EC5408234F8795C959DAAB85127BA" + { + "Name" = "8:HtmlAgilityPack.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:HtmlAgilityPack.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_067A17FA12CB4C09B31404658B511C40" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_22B305ABA7E34D6A805A5B7B8F9FC9EB" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libsharpen_plugin.dll" + "TargetName" = "8:libsharpen_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_242E9DDAEC064BB29C4C5EE4FAED935C" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libmjpeg_plugin.dll" + "TargetName" = "8:libmjpeg_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_261DCE820C98454D9C94BE39BA333196" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libcanvas_plugin.dll" + "TargetName" = "8:libcanvas_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_2650BA70585C42808553472DC837853F" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libntservice_plugin.dll" + "TargetName" = "8:libntservice_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_27D4641BCFF645F6B7D18DAF6E0E6340" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libstream_out_smem_plugin.dll" + "TargetName" = "8:libstream_out_smem_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_27DECC8C63BD418487A8A980FD1A61DA" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libvoc_plugin.dll" + "TargetName" = "8:libvoc_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_2A5141A512F547F08F881F7F0016FC63" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libtta_plugin.dll" + "TargetName" = "8:libtta_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_2AE2CE79CF5943EF8BA85B5CCB0786C9" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libmotionblur_plugin.dll" + "TargetName" = "8:libmotionblur_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_2AFE5230947D4BD79F5D6BC983E0B699" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libcroppadd_plugin.dll" + "TargetName" = "8:libcroppadd_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_2BE1680DDFC14DEA936F392821D2F355" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libstream_filter_record_plugin.dll" + "TargetName" = "8:libstream_filter_record_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_2C4B167AB791443D8C9E9BFEA60ABDE4" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libdirect3d_plugin.dll" + "TargetName" = "8:libdirect3d_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_2C697BC0A09A43C788B388F58E10B9E4" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libstream_out_dummy_plugin.dll" + "TargetName" = "8:libstream_out_dummy_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_2C9AB9121B734BF692D9CE8D6D775016" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libugly_resampler_plugin.dll" + "TargetName" = "8:libugly_resampler_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_2CE2A99C6B094EA2A37CD5394274DA3F" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libfolder_plugin.dll" + "TargetName" = "8:libfolder_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_2CE9F4B16EB8493C85C2318BA97FD764" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libstream_out_record_plugin.dll" + "TargetName" = "8:libstream_out_record_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_2E83C5B228C940AEB3B897270C604ACB" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libnsv_plugin.dll" + "TargetName" = "8:libnsv_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_31E6566EEF544532AF67B24AD4160474" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libsimple_channel_mixer_plugin.dll" + "TargetName" = "8:libsimple_channel_mixer_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_32A49DC9D01E45AEAFC9AC9793ABB34E" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libmux_mpjpeg_plugin.dll" + "TargetName" = "8:libmux_mpjpeg_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_33006EA3971C44FBB2FE5970DBDC5690" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libi422_yuy2_mmx_plugin.dll" + "TargetName" = "8:libi422_yuy2_mmx_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_339272B68A8640BFA9EF1DC095324798" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libwav_plugin.dll" + "TargetName" = "8:libwav_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_33CE7E1193E946DD8D4F98F69B19A837" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libmpgatofixed32_plugin.dll" + "TargetName" = "8:libmpgatofixed32_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_359F03BB43B7478BB7CFA1CB3E91CB4B" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\liba52tospdif_plugin.dll" + "TargetName" = "8:liba52tospdif_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_35A6209F27D94EB4AAB785C39B27A3CA" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libsubsdec_plugin.dll" + "TargetName" = "8:libsubsdec_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_35CD0D562E9D4D669CE02EE0C36E9478" + { + "SourcePath" = "8:..\\Lib\\mod.lic" + "TargetName" = "8:mod.lic" + "Tag" = "8:" + "Folder" = "8:_067A17FA12CB4C09B31404658B511C40" + "Condition" = "8:DEMOVERSION=1" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_38021E0207EC18AEB524F0030EADC5AE" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:ComponentFactory.Krypton.Toolkit, Version=4.4.0.0, Culture=neutral, PublicKeyToken=a87e673e9ecb6e8e, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_38021E0207EC18AEB524F0030EADC5AE" + { + "Name" = "8:ComponentFactory.Krypton.Toolkit.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:ComponentFactory.Krypton.Toolkit.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_067A17FA12CB4C09B31404658B511C40" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_39AC507D963241F1A7B37475F237CCE3" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\liberase_plugin.dll" + "TargetName" = "8:liberase_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_39AF0D2E4E504F1FA3C30727CAEE23C5" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libaout_sdl_plugin.dll" + "TargetName" = "8:libaout_sdl_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_39D0BE1DE3904791ABFD926A0E89E5DC" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libaccess_smb_plugin.dll" + "TargetName" = "8:libaccess_smb_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3BEF7238FCAC4F7BA62AF24F5A0029AD" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libaccess_fake_plugin.dll" + "TargetName" = "8:libaccess_fake_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3C1730E2497F46418B5EA1040AA0340B" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libfluidsynth_plugin.dll" + "TargetName" = "8:libfluidsynth_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3C4291466CF648BBA04DD151079A6A9D" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libgnutls_plugin.dll" + "TargetName" = "8:libgnutls_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3E13D219CB494CFE8876F69077D5AC27" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libglwin32_plugin.dll" + "TargetName" = "8:libglwin32_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3E3733B4083747459A150C6615A97425" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libmux_ogg_plugin.dll" + "TargetName" = "8:libmux_ogg_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_4048FAAE78F14ED0BBD30EA5B3064618" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\librss_plugin.dll" + "TargetName" = "8:librss_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_41043E814EAF416E9C9AE56115D338BC" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libsdl_image_plugin.dll" + "TargetName" = "8:libsdl_image_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_41376159FBAB455CBEBDAB4F9D5A5A00" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libmpc_plugin.dll" + "TargetName" = "8:libmpc_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_41A7543636024EC99A2029602FBDE6BA" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libaccess_output_udp_plugin.dll" + "TargetName" = "8:libaccess_output_udp_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_422E31D93C9B480EA52488D6F675D125" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libavcodec_plugin.dll" + "TargetName" = "8:libavcodec_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_42A29DD1B18A47C792C13D1C80FD1FA2" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libfreetype_plugin.dll" + "TargetName" = "8:libfreetype_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_437D57F31AAF4CD6BEAAC1630C6A38FB" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libi422_yuy2_sse2_plugin.dll" + "TargetName" = "8:libi422_yuy2_sse2_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_440162EEC7354274879F92B31325150C" + { + "SourcePath" = "8:..\\Lib\\VLC\\libvlc.dll.manifest" + "TargetName" = "8:libvlc.dll.manifest" + "Tag" = "8:" + "Folder" = "8:_067A17FA12CB4C09B31404658B511C40" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_449D9537F242C08838434D7D88A45B9D" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_449D9537F242C08838434D7D88A45B9D" + { + "Name" = "8:Newtonsoft.Json.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:Newtonsoft.Json.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_067A17FA12CB4C09B31404658B511C40" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_44B61E0B11E949C7B072A77341A319F6" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libvmem_plugin.dll" + "TargetName" = "8:libvmem_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_44BA028CA63ACF6F10ABFFF74110E073" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:Fizzler.Systems.HtmlAgilityPack, Version=0.1.0.0, Culture=neutral, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_44BA028CA63ACF6F10ABFFF74110E073" + { + "Name" = "8:Fizzler.Systems.HtmlAgilityPack.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:Fizzler.Systems.HtmlAgilityPack.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_067A17FA12CB4C09B31404658B511C40" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_45E1E310D6CC4D6894E82F257A032827" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\librealvideo_plugin.dll" + "TargetName" = "8:librealvideo_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_4689F92F4EC84C458F5B4B76725C2E90" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libstream_filter_rar_plugin.dll" + "TargetName" = "8:libstream_filter_rar_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_46B460F557B74475A7FD1F13AA503120" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libmediadirs_plugin.dll" + "TargetName" = "8:libmediadirs_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_47035390C8A340D5BDE895A6A08A474B" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libdemuxdump_plugin.dll" + "TargetName" = "8:libdemuxdump_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_47631AE7124E4EE79C03456C03ECB340" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libmono_plugin.dll" + "TargetName" = "8:libmono_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_4854C165164B4FC2B9FACE562B61C3D7" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\liblpcm_plugin.dll" + "TargetName" = "8:liblpcm_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_4BE9F1DCC5AF40F99E6542D6E1412358" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libheadphone_channel_mixer_plugin.dll" + "TargetName" = "8:libheadphone_channel_mixer_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_4CBC99D6BAA74D67B526B96BC95C26B1" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libscaletempo_plugin.dll" + "TargetName" = "8:libscaletempo_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_4F0D1E90F4BF4F99941744CEEE11E67D" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libnsc_plugin.dll" + "TargetName" = "8:libnsc_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_4F326CCBCB20400890A7A6ACE8296B2C" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libstream_out_es_plugin.dll" + "TargetName" = "8:libstream_out_es_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_50271B759A50408F9B92EE45F0E33128" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libasf_plugin.dll" + "TargetName" = "8:libasf_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_51BF9CDD3FD54D2692C60AFEED3C2434" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libalphamask_plugin.dll" + "TargetName" = "8:libalphamask_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_51CA424D949D4CAD9AB3E00D3174C1AF" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libbda_plugin.dll" + "TargetName" = "8:libbda_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_51D60A1C4DF6480D9426A7AD6D7432D2" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libaraw_plugin.dll" + "TargetName" = "8:libaraw_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_530518E7FE134E22ADB1E6555C5A5194" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libpacketizer_vc1_plugin.dll" + "TargetName" = "8:libpacketizer_vc1_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_5320C2113BD94B94A2ACB233FEEFFEC1" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libt140_plugin.dll" + "TargetName" = "8:libt140_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_53D074E90602423096DF0E22A1B3262C" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libpsychedelic_plugin.dll" + "TargetName" = "8:libpsychedelic_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_53DC2EBEE61A4A2592027222E17620FA" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\liba52_plugin.dll" + "TargetName" = "8:liba52_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_548B1EC298F54EFA96150FA1722837B0" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libball_plugin.dll" + "TargetName" = "8:libball_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_57BAD9281D854ECD896F8ABB917FEDDD" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libgrey_yuv_plugin.dll" + "TargetName" = "8:libgrey_yuv_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_5889F15523A44C75B63452AE769CF058" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libbandlimited_resampler_plugin.dll" + "TargetName" = "8:libbandlimited_resampler_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_58AA5334076F4945A375815C390EB9B6" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libwave_plugin.dll" + "TargetName" = "8:libwave_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_5A42FBC618074666ADB075B3026B18E5" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libaccess_tcp_plugin.dll" + "TargetName" = "8:libaccess_tcp_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_5A99F47875B446A59B44D7D1B66E5DE2" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libdvbsub_plugin.dll" + "TargetName" = "8:libdvbsub_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_5B0F25D9BB144E97A24B8D6BDB003AB6" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\liblogger_plugin.dll" + "TargetName" = "8:liblogger_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_5B551CE0875749948D079ED23FD5A249" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libdtstospdif_plugin.dll" + "TargetName" = "8:libdtstospdif_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_5B662883E56341378D919CCC8F39FD23" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libfake_plugin.dll" + "TargetName" = "8:libfake_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_5BC6B5843D1FB85D9E8A205B0E7DF6B3" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:LinqBridge, Version=1.3.0.0, Culture=neutral, PublicKeyToken=c2b14eb747628076, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_5BC6B5843D1FB85D9E8A205B0E7DF6B3" + { + "Name" = "8:LinqBridge.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:LinqBridge.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_067A17FA12CB4C09B31404658B511C40" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_5BEAC661EFD4483797A6ED1593B87817" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libpostproc_plugin.dll" + "TargetName" = "8:libpostproc_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_5C81CDF08F327A945656BB97B15AA03C" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:System.Data.SQLite, Version=1.0.90.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86" + "ScatterAssemblies" + { + "_5C81CDF08F327A945656BB97B15AA03C" + { + "Name" = "8:System.Data.SQLite.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:System.Data.SQLite.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_067A17FA12CB4C09B31404658B511C40" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_5D49FD175347FDED887426B796B7EE95" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:HtmlRenderer, Version=1.4.10.0, Culture=neutral, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_5D49FD175347FDED887426B796B7EE95" + { + "Name" = "8:HtmlRenderer.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:HtmlRenderer.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_067A17FA12CB4C09B31404658B511C40" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_5EB610F9BDB54FB2A58AF6F4D0FDD98C" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libkate_plugin.dll" + "TargetName" = "8:libkate_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_62F036FAA3034364990BC5E40E127E7B" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\liboldrc_plugin.dll" + "TargetName" = "8:liboldrc_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_63039266A0EC4B0BAA16D0A5E5B72181" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libmotiondetect_plugin.dll" + "TargetName" = "8:libmotiondetect_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_6455265CA2494F239F01541E6E8B64C1" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libts_plugin.dll" + "TargetName" = "8:libts_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_64C8AA2447D4489DBFBCBBB214BAB9A8" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libconverter_fixed_plugin.dll" + "TargetName" = "8:libconverter_fixed_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_65E23D8481A7C53D4E0CFF28BD59E2F3" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:ICSharpCode.SharpZipLib, Version=0.86.0.518, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_65E23D8481A7C53D4E0CFF28BD59E2F3" + { + "Name" = "8:ICSharpCode.SharpZipLib.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:ICSharpCode.SharpZipLib.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_067A17FA12CB4C09B31404658B511C40" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_65F8821B2B704EBEA05E39F43E675263" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libextract_plugin.dll" + "TargetName" = "8:libextract_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_66ACCEEA3BAC4B919C4302481CB8319A" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libstream_out_rtp_plugin.dll" + "TargetName" = "8:libstream_out_rtp_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_674B88FD109E4580AADB9F701C77DCBD" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\librotate_plugin.dll" + "TargetName" = "8:librotate_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_68C5FC24217A4C5485CD27EB35261E5A" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libtrivial_mixer_plugin.dll" + "TargetName" = "8:libtrivial_mixer_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_69B1C735DBBB46FEA60713D0BA210587" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libgme_plugin.dll" + "TargetName" = "8:libgme_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_69D46762CBE64DF2ADE984CDBBE739BC" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libsvcdsub_plugin.dll" + "TargetName" = "8:libsvcdsub_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_6ADACBE9B188446F975BE6A6EE487269" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libty_plugin.dll" + "TargetName" = "8:libty_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_6B78C9791FA3466F9A255502CD41D91C" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libmemcpymmxext_plugin.dll" + "TargetName" = "8:libmemcpymmxext_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_6CEF1CBB6F3B4C9E98948054DF1A5ED3" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libps_plugin.dll" + "TargetName" = "8:libps_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_6E20A91DF54141078E5F4308D30B2BDC" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libpva_plugin.dll" + "TargetName" = "8:libpva_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_6E79431D054E494EAD29CB1C81ACC026" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libmux_ps_plugin.dll" + "TargetName" = "8:libmux_ps_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_6EB0D8F56138483893768A5690AE515E" + { + "SourcePath" = "8:..\\Lib\\VLC\\AUTHORS.txt" + "TargetName" = "8:AUTHORS.txt" + "Tag" = "8:" + "Folder" = "8:_067A17FA12CB4C09B31404658B511C40" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_6F0B19BB2FC94570A588340264DDBA49" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libsubsusf_plugin.dll" + "TargetName" = "8:libsubsusf_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_707B2302813B4EC9BC9AD737A20EF2F9" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libaout_file_plugin.dll" + "TargetName" = "8:libaout_file_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_711017E7CEB8418E85126246D9580D99" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libaout_directx_plugin.dll" + "TargetName" = "8:libaout_directx_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_726CA1AABF784D8FBCA5FD3DE6CD6E82" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libaccess_http_plugin.dll" + "TargetName" = "8:libaccess_http_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_737194D6FEC4447D8586EA52107DA41C" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libstream_out_transcode_plugin.dll" + "TargetName" = "8:libstream_out_transcode_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7378BB1517BE4695861FF871F7FFF905" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libprojectm_plugin.dll" + "TargetName" = "8:libprojectm_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_738D7067F09D40538DBFE4AE8C6B357A" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libtwolame_plugin.dll" + "TargetName" = "8:libtwolame_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_744A2E93D06446A0BF84661D36684227" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libaiff_plugin.dll" + "TargetName" = "8:libaiff_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_74AD0C8C80D94465B716640BC6641DCA" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libquicktime_plugin.dll" + "TargetName" = "8:libquicktime_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_74D2EFD33E804E8599F2169F5D2C2622" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libpanoramix_plugin.dll" + "TargetName" = "8:libpanoramix_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_74FA43FBF9C940BF8EF33B7055B0F047" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libvideo_filter_wrapper_plugin.dll" + "TargetName" = "8:libvideo_filter_wrapper_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_751B5E1C0505441DAF747A6C8A27185E" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libes_plugin.dll" + "TargetName" = "8:libes_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_75540EFC985A4BE7AA113930DDF04B99" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libaccess_output_dummy_plugin.dll" + "TargetName" = "8:libaccess_output_dummy_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_758479E0BEE440F6903CE834D61018A5" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libyuy2_i422_plugin.dll" + "TargetName" = "8:libyuy2_i422_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_795E04F97AC04BC9838CFD869A34DD79" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libdummy_plugin.dll" + "TargetName" = "8:libdummy_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7C7572CF1BE64C069C336C3500E3B38C" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libcdda_plugin.dll" + "TargetName" = "8:libcdda_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7D1C8DB3CB2D41A48C7753FB5C8A6353" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\librawvid_plugin.dll" + "TargetName" = "8:librawvid_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7D8DB87DF34E4AA78EBD7CA4CE3039AD" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libcvdsub_plugin.dll" + "TargetName" = "8:libcvdsub_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7EAE7A8555114DACAEBFB91800C1068F" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libaccess_output_file_plugin.dll" + "TargetName" = "8:libaccess_output_file_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7F070EC5CB364B90A85C3117DD2C9A6D" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libvisual_plugin.dll" + "TargetName" = "8:libvisual_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_810B67EA791C495D8F08D87A18EDB533" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libspatializer_plugin.dll" + "TargetName" = "8:libspatializer_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_81142A4FDF894C6EBD1800A1CCB2D810" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libequalizer_plugin.dll" + "TargetName" = "8:libequalizer_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8231305462154F02811D73B6C653F138" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libparam_eq_plugin.dll" + "TargetName" = "8:libparam_eq_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_82AFBC87CE284A038F42491F3E362237" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libatmo_plugin.dll" + "TargetName" = "8:libatmo_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_82D9847B08540DC54048538DDC83F040" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:Client.Scraper, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_82D9847B08540DC54048538DDC83F040" + { + "Name" = "8:Client.Scraper.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:Client.Scraper.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_067A17FA12CB4C09B31404658B511C40" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_85834E85866E49D8BD1F74AE8A46A2F9" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libsmf_plugin.dll" + "TargetName" = "8:libsmf_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8597C0D095FC4FAFBD41CCFBA4765963" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libqt4_plugin.dll" + "TargetName" = "8:libqt4_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_85C654B6016C4DE787C711661D647257" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libvc1_plugin.dll" + "TargetName" = "8:libvc1_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_85F24D0610274F6DAEFB3E2434C1585D" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libscene_plugin.dll" + "TargetName" = "8:libscene_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_86141CBC431345B794327847228F3EEC" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libnuv_plugin.dll" + "TargetName" = "8:libnuv_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_864D2F3718944EFEA247A8E9DADD7C84" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libscreen_plugin.dll" + "TargetName" = "8:libscreen_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_86BAAE1A8E7B4DD9A8EDFB5E9B431761" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libschroedinger_plugin.dll" + "TargetName" = "8:libschroedinger_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_87890AD07245407F986BBCC31FE7AEE8" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libwingdi_plugin.dll" + "TargetName" = "8:libwingdi_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_879719EF2334482BACAA9C526112846C" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libmirror_plugin.dll" + "TargetName" = "8:libmirror_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_879F9C74DAF2415C83A8E6D6EF150B90" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\librawdv_plugin.dll" + "TargetName" = "8:librawdv_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_88396C84C45C46E4844145FB3A7FDA09" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libchorus_flanger_plugin.dll" + "TargetName" = "8:libchorus_flanger_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_89AC2BDF1DF44B6085AF13840AC8023B" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\liblua_plugin.dll" + "TargetName" = "8:liblua_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8A56B0106EB34220B3EE5108063A5FFB" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libmpgv_plugin.dll" + "TargetName" = "8:libmpgv_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8BA467E7CA4B4CD495878EB2935C1EFA" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libpacketizer_h264_plugin.dll" + "TargetName" = "8:libpacketizer_h264_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8BD6CA559BCF4ABB82C975CD0F690FFE" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libi422_i420_plugin.dll" + "TargetName" = "8:libi422_i420_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8E476F97DAA04C92AB938AA2A85B5D79" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\liblive555_plugin.dll" + "TargetName" = "8:liblive555_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8F43058D15A54EC4AD1102E944B70C67" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libosd_parser_plugin.dll" + "TargetName" = "8:libosd_parser_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8F574574981C4CF082AA604C3B81C848" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libi420_yuy2_sse2_plugin.dll" + "TargetName" = "8:libi420_yuy2_sse2_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9081AE02166E4D69B9677B05944F9963" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libmux_ts_plugin.dll" + "TargetName" = "8:libmux_ts_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_925305FADF30541C7EFF9E2F732ED6E0" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:DZ.MediaPlayer.Vlc.WindowsForms, Version=0.4.0.0, Culture=neutral, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_925305FADF30541C7EFF9E2F732ED6E0" + { + "Name" = "8:DZ.MediaPlayer.Vlc.WindowsForms.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:DZ.MediaPlayer.Vlc.WindowsForms.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_067A17FA12CB4C09B31404658B511C40" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9307C74B01DD43A7B8A7D2B3F936CE24" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libsubtitle_plugin.dll" + "TargetName" = "8:libsubtitle_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_931461C96397447F852759395957F10A" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libscale_plugin.dll" + "TargetName" = "8:libscale_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_94CE37D0748F46A7AD19C00A37737F77" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libaudio_format_plugin.dll" + "TargetName" = "8:libaudio_format_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_962BFC63FEC24B778AB267645A17E1DD" + { + "SourcePath" = "8:..\\MovieFinder.Viewer\\Movie.ico" + "TargetName" = "8:Movie.ico" + "Tag" = "8:" + "Folder" = "8:_067A17FA12CB4C09B31404658B511C40" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_96C81DEC3924494DADD2A350E3B0699A" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\liblogo_plugin.dll" + "TargetName" = "8:liblogo_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9917725FABAA40C09592E7EE8850E967" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libh264_plugin.dll" + "TargetName" = "8:libh264_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_99793E1DFD1B481583D8A6A138A8D0D9" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libstream_out_raop_plugin.dll" + "TargetName" = "8:libstream_out_raop_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_99E7454F10A7473F99E2334E5A1DF9E4" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libstream_out_bridge_plugin.dll" + "TargetName" = "8:libstream_out_bridge_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9A3110C9D5F242B783475B016D205D99" + { + "SourcePath" = "8:..\\Lib\\VLC\\THANKS.txt" + "TargetName" = "8:THANKS.txt" + "Tag" = "8:" + "Folder" = "8:_067A17FA12CB4C09B31404658B511C40" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9A447E335F5443C1BE2E59D1FF2CCF78" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libaccess_mms_plugin.dll" + "TargetName" = "8:libaccess_mms_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9BE910C0901B416BA7F127737AC5D321" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libexport_plugin.dll" + "TargetName" = "8:libexport_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9CC6E4B5CF6F43CF8A0BDE0601FED967" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libaccess_output_shout_plugin.dll" + "TargetName" = "8:libaccess_output_shout_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9E354512A3D645A3A9C87395C73900F8" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libstream_out_autodel_plugin.dll" + "TargetName" = "8:libstream_out_autodel_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9EE3A82DC9BA49449FBBAA302B4A6E83" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libspdif_mixer_plugin.dll" + "TargetName" = "8:libspdif_mixer_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9F9526A4EDDD46EABACAFDEAE066712E" + { + "SourcePath" = "8:..\\Lib\\mt.db" + "TargetName" = "8:mt.db" + "Tag" = "8:" + "Folder" = "8:_067A17FA12CB4C09B31404658B511C40" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9FDEA81E8ED2486DA651EB0AE6C7E775" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libinvmem_plugin.dll" + "TargetName" = "8:libinvmem_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9FE7646A1921426189504F5E6B303D17" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libmarq_plugin.dll" + "TargetName" = "8:libmarq_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_A122963DC816D8362B148C3DEBF2AB6F" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:Fizzler, Version=0.1.0.0, Culture=neutral, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_A122963DC816D8362B148C3DEBF2AB6F" + { + "Name" = "8:Fizzler.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:Fizzler.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_067A17FA12CB4C09B31404658B511C40" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A1D60ADA69464D1EAE43DFFB5B3F5543" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libstream_out_gather_plugin.dll" + "TargetName" = "8:libstream_out_gather_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A281EE11D8C64E02A691A2746633C3D1" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libpacketizer_mpegvideo_plugin.dll" + "TargetName" = "8:libpacketizer_mpegvideo_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A2FD684B130740E5B041D7B68FC595E7" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libdrawable_plugin.dll" + "TargetName" = "8:libdrawable_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A32B6F880A114E54A29E212F00B70F7A" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\librawvideo_plugin.dll" + "TargetName" = "8:librawvideo_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A39EC0E6796A45DF84F7DE41735F1709" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libi422_yuy2_plugin.dll" + "TargetName" = "8:libi422_yuy2_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A4E206F122594B3A9B27365913A1C360" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libxa_plugin.dll" + "TargetName" = "8:libxa_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A9C4142733E343BDB7372C482493A585" + { + "SourcePath" = "8:..\\Lib\\VLC\\COPYING.txt" + "TargetName" = "8:COPYING.txt" + "Tag" = "8:" + "Folder" = "8:_067A17FA12CB4C09B31404658B511C40" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A9CA9020690A476C94A5060036F90392" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libcc_plugin.dll" + "TargetName" = "8:libcc_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_AA9CB42CE78242D6BDA5B00D0A09BE54" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libgaussianblur_plugin.dll" + "TargetName" = "8:libgaussianblur_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_AABA71BAA8B74355BD827A22C50972CE" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libmux_avi_plugin.dll" + "TargetName" = "8:libmux_avi_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_AAE87ACB9029420FB8BD9C99D81C7241" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libaccess_output_http_plugin.dll" + "TargetName" = "8:libaccess_output_http_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_AB179616A2D6415CBE0811FCF2620D8D" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libbluescreen_plugin.dll" + "TargetName" = "8:libbluescreen_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_AB80DD30947147B08302545C955F0F82" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libadjust_plugin.dll" + "TargetName" = "8:libadjust_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_AD3A4F65E3244586BE5D51C8418500D4" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libstream_out_duplicate_plugin.dll" + "TargetName" = "8:libstream_out_duplicate_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_AE1C7F19B317405B8D2A4CE6949BB360" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libdmo_plugin.dll" + "TargetName" = "8:libdmo_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B18AD4D0105F4BA0B711E8C30C66EFF1" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\liba52tofloat32_plugin.dll" + "TargetName" = "8:liba52tofloat32_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B229DBEF6B774CF38E1DB730A335E966" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libi420_yuy2_mmx_plugin.dll" + "TargetName" = "8:libi420_yuy2_mmx_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B3926DD324CB48D69BDC30E3017E84BF" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libmosaic_plugin.dll" + "TargetName" = "8:libmosaic_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B3EB7CFD66A44FC68193CEABC5516B74" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libmpeg_audio_plugin.dll" + "TargetName" = "8:libmpeg_audio_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B5C33C37F4F644F690902A8A310F0632" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libswscale_plugin.dll" + "TargetName" = "8:libswscale_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B5E74BBDCC0B45889ACD284DC0514B68" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libskins2_plugin.dll" + "TargetName" = "8:libskins2_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B7D6CBBAC03A429696C6496991238AEA" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libdirac_plugin.dll" + "TargetName" = "8:libdirac_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B80BE1F0A1F84404914727FB5B1DC5E7" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libdts_plugin.dll" + "TargetName" = "8:libdts_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B80C56B204E9449B9FAE98E9DBBD2653" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libnoise_plugin.dll" + "TargetName" = "8:libnoise_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B8C4E112138947D7BC34104CAE8C9E78" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libpacketizer_mlp_plugin.dll" + "TargetName" = "8:libpacketizer_mlp_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B9ECBBDC949C4488BC5F2581F663A31A" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libdtstofloat32_plugin.dll" + "TargetName" = "8:libdtstofloat32_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BBA8E43A8F1F4714B2113AB6323CA7FA" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libyuv_plugin.dll" + "TargetName" = "8:libyuv_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BD10AF1E07AD4029B19DE9739BC3A1C8" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libportaudio_plugin.dll" + "TargetName" = "8:libportaudio_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BE203E6593B24B69BE8BC1CAD90A09AA" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libpacketizer_flac_plugin.dll" + "TargetName" = "8:libpacketizer_flac_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BE22AA6DC8694A7798DA19B8D1E18080" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libadpcm_plugin.dll" + "TargetName" = "8:libadpcm_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BEE7073618574321B3574A6EB8265FD6" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libfaad_plugin.dll" + "TargetName" = "8:libfaad_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BEF0587BC46E45FAB9A27D9C0790BC78" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libau_plugin.dll" + "TargetName" = "8:libau_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BFBB516926044331AC11511222B24A00" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libtransform_plugin.dll" + "TargetName" = "8:libtransform_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BFD1A345B00C449586F36EB392A1DAB0" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libfilesystem_plugin.dll" + "TargetName" = "8:libfilesystem_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C0BB7348C5F642CEA3CDF37CE4F26AEE" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\librv32_plugin.dll" + "TargetName" = "8:librv32_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C0EA44FA88B84E3BA5D203734DDA43B7" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libstream_out_display_plugin.dll" + "TargetName" = "8:libstream_out_display_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C3250E3B4BC24030A881B5B088C840EE" + { + "SourcePath" = "8:..\\Lib\\copyright_bluetube.rtf" + "TargetName" = "8:copyright_bluetube.rtf" + "Tag" = "8:" + "Folder" = "8:_067A17FA12CB4C09B31404658B511C40" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C75D714471DB43AE9846BFA905D27ACE" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libinvert_plugin.dll" + "TargetName" = "8:libinvert_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C8447E752150405C9B4BCCD1F6AE2114" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libi420_rgb_plugin.dll" + "TargetName" = "8:libi420_rgb_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C85C226543A7406A8380F3A37314BE0C" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libzvbi_plugin.dll" + "TargetName" = "8:libzvbi_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C87D25F0B55D4AE18287E1487C63283C" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libpng_plugin.dll" + "TargetName" = "8:libpng_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C9196A1C138E41AC8BDB3580F2A2AC35" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libaccess_bd_plugin.dll" + "TargetName" = "8:libaccess_bd_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C9896991DFF74D66B6495D80C6F738DE" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libdvdread_plugin.dll" + "TargetName" = "8:libdvdread_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_CA290FA5A1774625957CFD546FE6A9BB" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libflacsys_plugin.dll" + "TargetName" = "8:libflacsys_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_CAB7AA689E894C5180C0E9DB64267BF2" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libpacketizer_copy_plugin.dll" + "TargetName" = "8:libpacketizer_copy_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_CC43752C18744F53B90B331A363CC00C" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libosdmenu_plugin.dll" + "TargetName" = "8:libosdmenu_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_CC635CF9A7DB4779BA85B5DAF9F40516" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libchain_plugin.dll" + "TargetName" = "8:libchain_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_CCB3443749AE4780BD9630FA53E6AE65" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libx264_plugin.dll" + "TargetName" = "8:libx264_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_CE0E05A78ADE4415B9CA85BE4E59CCD2" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libstream_out_description_plugin.dll" + "TargetName" = "8:libstream_out_description_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_CE617B30ACB04C14B8C8B9B29A2F5676" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libi420_yuy2_plugin.dll" + "TargetName" = "8:libi420_yuy2_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_CE9B73801A1B4FC4AAC51FF88AADB5E0" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libmkv_plugin.dll" + "TargetName" = "8:libmkv_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_CED9BDADDE015A13C8C06D640EA93000" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:Common.Logging, Version=1.2.0.0, Culture=neutral, PublicKeyToken=af08829b84f0328e" + "ScatterAssemblies" + { + "_CED9BDADDE015A13C8C06D640EA93000" + { + "Name" = "8:Common.Logging.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:Common.Logging.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_067A17FA12CB4C09B31404658B511C40" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_CFA6583B57604C8EB9B37564AECCFF95" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libaes3_plugin.dll" + "TargetName" = "8:libaes3_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_CFC4608867534037A70A149FFC5AC489" + { + "SourcePath" = "8:..\\Lib\\VLC\\README.txt" + "TargetName" = "8:README.txt" + "Tag" = "8:" + "Folder" = "8:_067A17FA12CB4C09B31404658B511C40" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_CFED586073844481812E7F170E6F662C" + { + "SourcePath" = "8:..\\Lib\\VLC\\libvlc.dll" + "TargetName" = "8:libvlc.dll" + "Tag" = "8:" + "Folder" = "8:_067A17FA12CB4C09B31404658B511C40" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D031A69593714C4590E9B2B48F1FEF9E" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libmemcpy3dn_plugin.dll" + "TargetName" = "8:libmemcpy3dn_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D1F6AC20900F454CA3B9A31C664D856B" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libpacketizer_mpeg4audio_plugin.dll" + "TargetName" = "8:libpacketizer_mpeg4audio_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D3282B45C13A42319BEDFDFF2466ECD0" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libmux_mp4_plugin.dll" + "TargetName" = "8:libmux_mp4_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D32BB307554B44008343AA5295120E9A" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libclone_plugin.dll" + "TargetName" = "8:libclone_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D334624C46DF4A57B4F968E57FBD0614" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libhotkeys_plugin.dll" + "TargetName" = "8:libhotkeys_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D4766AD7B52E422BADEDFC18D6574DF1" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libgradient_plugin.dll" + "TargetName" = "8:libgradient_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D743FF6C177C4C36B89A9E18AB3EC819" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libaudiobargraph_v_plugin.dll" + "TargetName" = "8:libaudiobargraph_v_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D83A94F5FEAB42F48D366FCAD515D352" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libmp4_plugin.dll" + "TargetName" = "8:libmp4_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D88BA3A3E1CE4364B34B9FBF3306EC42" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libdeinterlace_plugin.dll" + "TargetName" = "8:libdeinterlace_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D8DAC3A618CC4D59B13AD4B81402AE38" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libwall_plugin.dll" + "TargetName" = "8:libwall_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D9D10388D50241C4A9C5B3DD89B455DD" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libwaveout_plugin.dll" + "TargetName" = "8:libwaveout_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DA196E5FDF234D3886CE7B1711800127" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\liblibmpeg2_plugin.dll" + "TargetName" = "8:liblibmpeg2_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DAB941D0B1C54F4EA2843ED7F8457801" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libdshow_plugin.dll" + "TargetName" = "8:libdshow_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DDD14FD530AD410ABD4C8E0A16091881" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libsap_plugin.dll" + "TargetName" = "8:libsap_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DEA2DD64F7914D919CC3D48440D9C484" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\liboldhttp_plugin.dll" + "TargetName" = "8:liboldhttp_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DEC21C346D584DABB1913BE2E5EEC0E8" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libdolby_surround_decoder_plugin.dll" + "TargetName" = "8:libdolby_surround_decoder_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DF0DCF5A4DC641A4A80267482B3DB00E" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libvout_sdl_plugin.dll" + "TargetName" = "8:libvout_sdl_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_DFE2A1E732A14C7557728CAB41C1D8E4" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:Ionic.Zip, Version=1.9.1.8, Culture=neutral, PublicKeyToken=edbe51ad942a3f5c, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_DFE2A1E732A14C7557728CAB41C1D8E4" + { + "Name" = "8:Ionic.Zip.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:Ionic.Zip.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_067A17FA12CB4C09B31404658B511C40" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E2739FC167664F7AAEA9FBA2A9D29480" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libpuzzle_plugin.dll" + "TargetName" = "8:libpuzzle_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E30C61C8E02C48D2ADADDA279CD87A95" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libblendbench_plugin.dll" + "TargetName" = "8:libblendbench_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E4271575AA134D5EB4E57C63EA40C299" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libstream_out_standard_plugin.dll" + "TargetName" = "8:libstream_out_standard_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E5D0C09A95CD493D918665260AE525C2" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libreal_plugin.dll" + "TargetName" = "8:libreal_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E5E9DBBE12D24EA58A06146DA3539FEA" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\librawaud_plugin.dll" + "TargetName" = "8:librawaud_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E5F8259615904A12965BDD708000D198" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libyuvp_plugin.dll" + "TargetName" = "8:libyuvp_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E5FD2A0BAEE247AF94AFCF7A99C14308" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libdemux_cdg_plugin.dll" + "TargetName" = "8:libdemux_cdg_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E6DF7753AB774158A76A1436EBFB9725" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\liboldtelnet_plugin.dll" + "TargetName" = "8:liboldtelnet_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E7A6079650214BB79992DDC421B1560C" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libaccess_udp_plugin.dll" + "TargetName" = "8:libaccess_udp_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E7B2E135170743339748EBB97B1DF6F9" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libgoom_plugin.dll" + "TargetName" = "8:libgoom_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E9A95685589246C79B0C43ABC6CCBB4F" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libdvdnav_plugin.dll" + "TargetName" = "8:libdvdnav_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E9AB42FEF8884843B9926F564EC1B70B" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\liblibass_plugin.dll" + "TargetName" = "8:liblibass_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_EAAC1F69CD214704BED3D81E9EE3126F" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libcdg_plugin.dll" + "TargetName" = "8:libcdg_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_EAFF29B7072244CBAE569483DB84DB36" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libnetsync_plugin.dll" + "TargetName" = "8:libnetsync_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_EB047240FD1A4EB7BC752DBCFA089FA3" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libmux_asf_plugin.dll" + "TargetName" = "8:libmux_asf_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_EB87F5EA4F6C41E290B04E7C9EDC2FFD" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libpacketizer_mpeg4video_plugin.dll" + "TargetName" = "8:libpacketizer_mpeg4video_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_EBCB88AE027F89355021DF4D71578685" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:DZ.MediaPlayer.Vlc, Version=0.4.0.0, Culture=neutral, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_EBCB88AE027F89355021DF4D71578685" + { + "Name" = "8:DZ.MediaPlayer.Vlc.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:DZ.MediaPlayer.Vlc.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_067A17FA12CB4C09B31404658B511C40" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_EC5CEBE8B4904E3EB0885348BE39F49C" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libi420_rgb_sse2_plugin.dll" + "TargetName" = "8:libi420_rgb_sse2_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_ECD4107F0F2C4B86B3A4F2292B7B965B" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libgestures_plugin.dll" + "TargetName" = "8:libgestures_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_ED479CB21D154480976AA9AA465B5172" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libaccess_imem_plugin.dll" + "TargetName" = "8:libaccess_imem_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_EE5CE49095D24F23BBAA612C7FC8E280" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libblend_plugin.dll" + "TargetName" = "8:libblend_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_EF3A35F7A85C4E4A85ECC65BF04FCC68" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libaudioscrobbler_plugin.dll" + "TargetName" = "8:libaudioscrobbler_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F0773C48E6CD458FBC6B1F7CBEBACA49" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libdirectx_plugin.dll" + "TargetName" = "8:libdirectx_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F0C694F17127407583B969DD4464C073" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libzip_plugin.dll" + "TargetName" = "8:libzip_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F19C81A42BF942E78EB375BD0523B368" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libvout_wrapper_plugin.dll" + "TargetName" = "8:libvout_wrapper_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F24F2268025741B9BD544F7054347E25" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libmux_wav_plugin.dll" + "TargetName" = "8:libmux_wav_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F25906D8A3B64AA8A622F7527F8BE084" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libxml_plugin.dll" + "TargetName" = "8:libxml_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F4C463B720484FC7B9BB27A007EED77D" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libspudec_plugin.dll" + "TargetName" = "8:libspudec_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F57184615BC547E3817F60946AA68CD6" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\librtp_plugin.dll" + "TargetName" = "8:librtp_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F613CC32404B4B5CAEB8615741CC3BEC" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libxtag_plugin.dll" + "TargetName" = "8:libxtag_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F61E7D0928AE4FD4B8A395C6EAC4E69C" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libcaca_plugin.dll" + "TargetName" = "8:libcaca_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F653AD23EC0D45B3A8DE10580DB35C07" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libaccess_realrtsp_plugin.dll" + "TargetName" = "8:libaccess_realrtsp_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F78673F6950F45B0A363FCC877309DC9" + { + "SourcePath" = "8:..\\Lib\\VLC\\libvlccore.dll" + "TargetName" = "8:libvlccore.dll" + "Tag" = "8:" + "Folder" = "8:_067A17FA12CB4C09B31404658B511C40" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F87D8846992A46D1B3E17D2E5424CA11" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libcrop_plugin.dll" + "TargetName" = "8:libcrop_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F9571E57E89344B0A102890A03925153" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libflac_plugin.dll" + "TargetName" = "8:libflac_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_FAB73A369D2B4AE0BDE7315A3CC7C9D3" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libmux_dummy_plugin.dll" + "TargetName" = "8:libmux_dummy_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_FBE137A1637244E28F5C2FA80DEDB1C4" + { + "SourcePath" = "8:..\\Lib\\VLC\\plugins\\libvobsub_plugin.dll" + "TargetName" = "8:libvobsub_plugin.dll" + "Tag" = "8:" + "Folder" = "8:_AE8401CED6E84F748756266556EAAA11" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + } + "FileType" + { + } + "Folder" + { + "{3C67513D-01DD-4637-8A68-80971EB9504F}:_067A17FA12CB4C09B31404658B511C40" + { + "DefaultLocation" = "8:[LocalAppDataFolder]\\[ProductName]" + "Name" = "8:#1925" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:TARGETDIR" + "Folders" + { + "{9EF0B969-E518-4E46-987F-47570745A589}:_AE8401CED6E84F748756266556EAAA11" + { + "Name" = "8:plugins" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:_366CBB06EA75434A88733D61C00BF8FE" + "Folders" + { + } + } + } + } + "{1525181F-901A-416C-8A58-119130FE478E}:_6359C7DBDCEB4E99ABA896A4B7256632" + { + "Name" = "8:#1916" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:DesktopFolder" + "Folders" + { + } + } + "{1525181F-901A-416C-8A58-119130FE478E}:_82EF894B2639468F951BFCC66E7932E3" + { + "Name" = "8:#1919" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:ProgramMenuFolder" + "Folders" + { + } + } + } + "LaunchCondition" + { + } + "Locator" + { + } + "MsiBootstrapper" + { + "LangId" = "3:1033" + "RequiresElevation" = "11:FALSE" + } + "Product" + { + "Name" = "8:Microsoft Visual Studio" + "ProductName" = "8:BlueTube" + "ProductCode" = "8:{43EC0F20-CD53-4744-9C4B-2B3DA6A55644}" + "PackageCode" = "8:{2B7272F7-13A0-49DE-88BE-5505E51C8A22}" + "UpgradeCode" = "8:{0D224B3F-ED53-49B3-A33E-DAEB55FC15A7}" + "AspNetVersion" = "8:4.0.30319.0" + "RestartWWWService" = "11:FALSE" + "RemovePreviousVersions" = "11:TRUE" + "DetectNewerInstalledVersion" = "11:TRUE" + "InstallAllUsers" = "11:FALSE" + "ProductVersion" = "8:1.0.0" + "Manufacturer" = "8:BlueTube Inc." + "ARPHELPTELEPHONE" = "8:" + "ARPHELPLINK" = "8:" + "Title" = "8:BlueTube" + "Subject" = "8:" + "ARPCONTACT" = "8:BlueTube" + "Keywords" = "8:" + "ARPCOMMENTS" = "8:Watch videos on desktop" + "ARPURLINFOABOUT" = "8:www.google.com" + "ARPPRODUCTICON" = "8:_962BFC63FEC24B778AB267645A17E1DD" + "ARPIconIndex" = "3:0" + "SearchPath" = "8:" + "UseSystemSearchPath" = "11:TRUE" + "TargetPlatform" = "3:0" + "PreBuildEvent" = "8:" + "PostBuildEvent" = "8:" + "RunPostBuildEvent" = "3:0" + } + "Registry" + { + "HKLM" + { + "Keys" + { + "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_28A3ED1EC75743EB98CED4832A363DA2" + { + "Name" = "8:Software" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_FD8E6EFA4C1B4B78BE4121A0815312BC" + { + "Name" = "8:[Manufacturer]" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + } + "Values" + { + } + } + } + "Values" + { + } + } + } + } + "HKCU" + { + "Keys" + { + "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_DD6E9EDCEB1D41E1A81AEACCBC2E8B1A" + { + "Name" = "8:Software" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_C51881C0FF014D4E950618E8B708623C" + { + "Name" = "8:[Manufacturer]" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + } + "Values" + { + } + } + } + "Values" + { + } + } + } + } + "HKCR" + { + "Keys" + { + } + } + "HKU" + { + "Keys" + { + } + } + "HKPU" + { + "Keys" + { + } + } + } + "Sequences" + { + } + "Shortcut" + { + "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_5BB98E0EB7F549938400F3E0082AE6D7" + { + "Name" = "8:BlueTube" + "Arguments" = "8:" + "Description" = "8:" + "ShowCmd" = "3:1" + "IconIndex" = "3:0" + "Transitive" = "11:FALSE" + "Target" = "8:_65B05975CCF34ECC87561FA5F2174F44" + "Folder" = "8:_82EF894B2639468F951BFCC66E7932E3" + "WorkingFolder" = "8:_067A17FA12CB4C09B31404658B511C40" + "Icon" = "8:_962BFC63FEC24B778AB267645A17E1DD" + "Feature" = "8:" + } + "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_7DF2733D8CF74121BF531FDD9C902B80" + { + "Name" = "8:BlueTube" + "Arguments" = "8:" + "Description" = "8:" + "ShowCmd" = "3:1" + "IconIndex" = "3:0" + "Transitive" = "11:FALSE" + "Target" = "8:_65B05975CCF34ECC87561FA5F2174F44" + "Folder" = "8:_6359C7DBDCEB4E99ABA896A4B7256632" + "WorkingFolder" = "8:_067A17FA12CB4C09B31404658B511C40" + "Icon" = "8:_962BFC63FEC24B778AB267645A17E1DD" + "Feature" = "8:" + } + } + "UserInterface" + { + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_150FC893FFDF4929B42A121358AABD92" + { + "Name" = "8:#1900" + "Sequence" = "3:1" + "Attributes" = "3:1" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_29474A2B7BA74B358843021320001CF3" + { + "Sequence" = "3:300" + "DisplayName" = "8:License Agreement" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdLicenseDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:2" + "Value" = "8:_1FD8A9B3582E46B9874323E8B95A575E" + "UsePlugInResources" = "11:TRUE" + } + "EulaText" + { + "Name" = "8:EulaText" + "DisplayName" = "8:#1008" + "Description" = "8:#1108" + "Type" = "3:6" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:2" + "Value" = "8:_C3250E3B4BC24030A881B5B088C840EE" + "UsePlugInResources" = "11:TRUE" + } + "Sunken" + { + "Name" = "8:Sunken" + "DisplayName" = "8:#1007" + "Description" = "8:#1107" + "Type" = "3:5" + "ContextData" = "8:4;True=4;False=0" + "Attributes" = "3:0" + "Setting" = "3:0" + "Value" = "3:4" + "DefaultValue" = "3:4" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_522EDB41217F490D9018532B98BF9B0E" + { + "Sequence" = "3:100" + "DisplayName" = "8:Welcome" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdWelcomeDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:2" + "Value" = "8:_1FD8A9B3582E46B9874323E8B95A575E" + "UsePlugInResources" = "11:TRUE" + } + "CopyrightWarning" + { + "Name" = "8:CopyrightWarning" + "DisplayName" = "8:#1002" + "Description" = "8:#1102" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1202" + "DefaultValue" = "8:#1202" + "UsePlugInResources" = "11:TRUE" + } + "Welcome" + { + "Name" = "8:Welcome" + "DisplayName" = "8:#1003" + "Description" = "8:#1103" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:2" + "Value" = "8:The installer will guide you through the steps required to install [ProductName] on your computer." + "DefaultValue" = "8:#1203" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_D2F74C472DCD44A1A2FD23F4C38EF3B4" + { + "Sequence" = "3:200" + "DisplayName" = "8:RadioButtons (2 buttons)" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdCustom2ButtonDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:2" + "Value" = "8:_1FD8A9B3582E46B9874323E8B95A575E" + "UsePlugInResources" = "11:TRUE" + } + "BannerText" + { + "Name" = "8:BannerText" + "DisplayName" = "8:#1014" + "Description" = "8:#1114" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:2" + "Value" = "8:Select version" + "DefaultValue" = "8:#1214" + "UsePlugInResources" = "11:TRUE" + } + "BodyText" + { + "Name" = "8:BodyText" + "DisplayName" = "8:#1015" + "Description" = "8:#1115" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:2" + "Value" = "8:DEMO version is restricted to 4 videos in search results. FULL version has no restrictions. Read the License agreement for more information" + "DefaultValue" = "8:#1215" + "UsePlugInResources" = "11:TRUE" + } + "Button1Label" + { + "Name" = "8:Button1Label" + "DisplayName" = "8:#1022" + "Description" = "8:#1122" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:2" + "Value" = "8:Install DEMO" + "DefaultValue" = "8:#1222" + "UsePlugInResources" = "11:TRUE" + } + "Button1Value" + { + "Name" = "8:Button1Value" + "DisplayName" = "8:#1018" + "Description" = "8:#1118" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:1" + "DefaultValue" = "8:1" + "UsePlugInResources" = "11:TRUE" + } + "Button2Label" + { + "Name" = "8:Button2Label" + "DisplayName" = "8:#1023" + "Description" = "8:#1123" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:2" + "Value" = "8:Install FULL" + "DefaultValue" = "8:#1223" + "UsePlugInResources" = "11:TRUE" + } + "Button2Value" + { + "Name" = "8:Button2Value" + "DisplayName" = "8:#1019" + "Description" = "8:#1119" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:2" + "DefaultValue" = "8:2" + "UsePlugInResources" = "11:TRUE" + } + "ButtonProperty" + { + "Name" = "8:ButtonProperty" + "DisplayName" = "8:#1017" + "Description" = "8:#1117" + "Type" = "3:14" + "ContextData" = "8:Public" + "Attributes" = "3:2" + "Setting" = "3:2" + "Value" = "8:DEMOVERSION" + "DefaultValue" = "8:BUTTON2" + "UsePlugInResources" = "11:TRUE" + } + "DefaultValue" + { + "Name" = "8:DefaultValue" + "DisplayName" = "8:#1016" + "Description" = "8:#1116" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:2" + "Value" = "8:2" + "DefaultValue" = "8:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_23EE552404DF42C2B00ADBE7CBBC68AE" + { + "Name" = "8:#1900" + "Sequence" = "3:2" + "Attributes" = "3:1" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_69427F6A6AFA496CA5D2EDBE0D3ABE1A" + { + "Sequence" = "3:100" + "DisplayName" = "8:Welcome" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminWelcomeDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:2" + "Value" = "8:_1FD8A9B3582E46B9874323E8B95A575E" + "UsePlugInResources" = "11:TRUE" + } + "CopyrightWarning" + { + "Name" = "8:CopyrightWarning" + "DisplayName" = "8:#1002" + "Description" = "8:#1102" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1202" + "DefaultValue" = "8:#1202" + "UsePlugInResources" = "11:TRUE" + } + "Welcome" + { + "Name" = "8:Welcome" + "DisplayName" = "8:#1003" + "Description" = "8:#1103" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1203" + "DefaultValue" = "8:#1203" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_97B0E603A04D43EAA5F1DEE71A99FCB8" + { + "Sequence" = "3:300" + "DisplayName" = "8:Confirm Installation" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminConfirmDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_435C6A69BF434F419D18EB1C4FEF0559" + { + "Name" = "8:#1902" + "Sequence" = "3:2" + "Attributes" = "3:3" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_28F54444BA3747E28D1CE0193AC00AE9" + { + "Sequence" = "3:100" + "DisplayName" = "8:Finished" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminFinishedDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_4C144284A11149B6BC85348C81BB47DF" + { + "UseDynamicProperties" = "11:FALSE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdBasicDialogs.wim" + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_96DBE6F2CA534CF4956856B65FFBBED4" + { + "Name" = "8:#1901" + "Sequence" = "3:2" + "Attributes" = "3:2" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_172FB5141DE3480996C7CA57AEA78573" + { + "Sequence" = "3:100" + "DisplayName" = "8:Progress" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminProgressDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "ShowProgress" + { + "Name" = "8:ShowProgress" + "DisplayName" = "8:#1009" + "Description" = "8:#1109" + "Type" = "3:5" + "ContextData" = "8:1;True=1;False=0" + "Attributes" = "3:0" + "Setting" = "3:0" + "Value" = "3:1" + "DefaultValue" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_AE91B385C6F848BAB707C079EDA39184" + { + "Name" = "8:#1902" + "Sequence" = "3:1" + "Attributes" = "3:3" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_027D96E026D04EE190511C446A53472E" + { + "Sequence" = "3:100" + "DisplayName" = "8:Finished" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdFinishedDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:2" + "Value" = "8:_1FD8A9B3582E46B9874323E8B95A575E" + "UsePlugInResources" = "11:TRUE" + } + "UpdateText" + { + "Name" = "8:UpdateText" + "DisplayName" = "8:#1058" + "Description" = "8:#1158" + "Type" = "3:15" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:2" + "Value" = "8:" + "DefaultValue" = "8:#1258" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_C965D7847DAB47438687AC18B79B5509" + { + "UseDynamicProperties" = "11:FALSE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdUserInterface.wim" + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_E23526C0361B455FBF20700020EEA984" + { + "Name" = "8:#1901" + "Sequence" = "3:1" + "Attributes" = "3:2" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_5F2BE7CF74434311B16A2B800C4A87E6" + { + "Sequence" = "3:100" + "DisplayName" = "8:Progress" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdProgressDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:2" + "Value" = "8:_1FD8A9B3582E46B9874323E8B95A575E" + "UsePlugInResources" = "11:TRUE" + } + "ShowProgress" + { + "Name" = "8:ShowProgress" + "DisplayName" = "8:#1009" + "Description" = "8:#1109" + "Type" = "3:5" + "ContextData" = "8:1;True=1;False=0" + "Attributes" = "3:0" + "Setting" = "3:0" + "Value" = "3:1" + "DefaultValue" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + } + "MergeModule" + { + } + "ProjectOutput" + { + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_65B05975CCF34ECC87561FA5F2174F44" + { + "SourcePath" = "8:..\\MovieFinder.Viewer\\obj\\x86\\Debug\\BlueTube.exe" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_067A17FA12CB4C09B31404658B511C40" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{F0BCE1B5-7734-4D68-B577-C161B4CC50CC}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + } + } +} diff --git a/MovieFinder.Client.Scraper/Client.Scraper.csproj b/MovieFinder.Client.Scraper/Client.Scraper.csproj new file mode 100644 index 0000000000000000000000000000000000000000..6a96543d10371635098421e80308d0eea3f8c655 --- /dev/null +++ b/MovieFinder.Client.Scraper/Client.Scraper.csproj @@ -0,0 +1,74 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {937D938A-DA5A-410C-A972-161E2E93A83D} + Library + Properties + Client.Scraper + Client.Scraper + v2.0 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\Fizzler.0.9.3\lib\net20\Fizzler.dll + + + ..\packages\Fizzler.0.9.3\lib\net20\Fizzler.Systems.HtmlAgilityPack.dll + + + ..\packages\HtmlAgilityPack.1.4.6\lib\Net20\HtmlAgilityPack.dll + + + ..\packages\LinqBridge.1.3.0\lib\net20\LinqBridge.dll + + + ..\packages\Newtonsoft.Json.5.0.8\lib\net20\Newtonsoft.Json.dll + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/MovieFinder.Client.Scraper/ExtensionMethods.cs b/MovieFinder.Client.Scraper/ExtensionMethods.cs new file mode 100644 index 0000000000000000000000000000000000000000..e29fdbc3ec537657eee0ada3fe138a044af22d08 --- /dev/null +++ b/MovieFinder.Client.Scraper/ExtensionMethods.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Web; + +namespace Client.Scraper +{ + + + public static class HttpExtensions + { + public static Uri AddQuery(this Uri uri, string name, string value) + { + var ub = new UriBuilder(uri); + + // decodes urlencoded pairs from uri.Query to HttpValueCollection + var httpValueCollection = HttpUtility.ParseQueryString(uri.Query); + httpValueCollection.Add(name, value); + + // this code block is taken from httpValueCollection.ToString() method + // and modified so it encodes strings with HttpUtility.UrlEncode + if (httpValueCollection.Count == 0) + ub.Query = String.Empty; + else + { + var sb = new StringBuilder(); + + for (int i = 0; i < httpValueCollection.Count; i++) + { + string text = httpValueCollection.GetKey(i); + { + text = HttpUtility.UrlEncode(text); + + string val = (text != null) ? (text + "=") : string.Empty; + string[] vals = httpValueCollection.GetValues(i); + + if (sb.Length > 0) + sb.Append('&'); + + if (vals == null || vals.Length == 0) + sb.Append(val); + else + { + if (vals.Length == 1) + { + sb.Append(val); + sb.Append(HttpUtility.UrlEncode(vals[0])); + } + else + { + for (int j = 0; j < vals.Length; j++) + { + if (j > 0) + sb.Append('&'); + + sb.Append(val); + sb.Append(HttpUtility.UrlEncode(vals[j])); + } + } + } + } + } + + ub.Query = sb.ToString(); + } + + return ub.Uri; + } + } +} diff --git a/MovieFinder.Client.Scraper/Properties/AssemblyInfo.cs b/MovieFinder.Client.Scraper/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000000000000000000000000000000000..c8d1aa83bd2a82112ab6e01654e44e42fa495e3b --- /dev/null +++ b/MovieFinder.Client.Scraper/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +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("Client.Scraper")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Client.Scraper")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[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("7fe449a3-e130-4f11-89d3-ccfb4265e0b1")] + +// 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.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/MovieFinder.Client.Scraper/PropertyComparer.cs b/MovieFinder.Client.Scraper/PropertyComparer.cs new file mode 100644 index 0000000000000000000000000000000000000000..9a63fe015379a9c4c4296f12e09211d24f6bb69f --- /dev/null +++ b/MovieFinder.Client.Scraper/PropertyComparer.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Reflection; + +namespace Client.Scraper +{ + public class PropertyComparer : IComparer + { + private readonly IComparer comparer; + private PropertyDescriptor propertyDescriptor; + private int reverse; + + public PropertyComparer(PropertyDescriptor property, ListSortDirection direction) + { + this.propertyDescriptor = property; + Type comparerForPropertyType = typeof(Comparer<>).MakeGenericType(property.PropertyType); + this.comparer = (IComparer)comparerForPropertyType.InvokeMember("Default", BindingFlags.Static | BindingFlags.GetProperty | BindingFlags.Public, null, null, null); + this.SetListSortDirection(direction); + } + + #region IComparer Members + + public int Compare(T x, T y) + { + return this.reverse * this.comparer.Compare(this.propertyDescriptor.GetValue(x), this.propertyDescriptor.GetValue(y)); + } + + #endregion + + private void SetPropertyDescriptor(PropertyDescriptor descriptor) + { + this.propertyDescriptor = descriptor; + } + + private void SetListSortDirection(ListSortDirection direction) + { + this.reverse = direction == ListSortDirection.Ascending ? 1 : -1; + } + + public void SetPropertyAndDirection(PropertyDescriptor descriptor, ListSortDirection direction) + { + this.SetPropertyDescriptor(descriptor); + this.SetListSortDirection(direction); + } + } +} \ No newline at end of file diff --git a/MovieFinder.Client.Scraper/ScraperBase.cs b/MovieFinder.Client.Scraper/ScraperBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..42464b1a35e0948a65e212ab65c99c7d056b6ea7 --- /dev/null +++ b/MovieFinder.Client.Scraper/ScraperBase.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Net; +using HtmlAgilityPack; +using Fizzler.Systems.HtmlAgilityPack; +using System.Linq; + +namespace Client.Scraper +{ + public abstract class ScraperBase + { + #region Fields + + + #endregion + + + protected HtmlNode GotoUrl(string url) + { + //HtmlDocument doc = new HtmlDocument(); + //using (var client = new WebClient()) + //{ + // //doc.Load(client.OpenRead(url)); + // byte[] myDataBuffer = client.DownloadData(url); + // string download = Encoding.ASCII.GetString(myDataBuffer); + // doc.LoadHtml2(download); + // return doc.DocumentNode; + //} + + + return new HtmlWeb().Load(url).DocumentNode; + } + + protected IEnumerable SelectItems(HtmlNode cq, string css) + { + return cq.QuerySelectorAll(css); + } + + protected HtmlNode SelectItem(HtmlNode cq, string css) + { + return cq.QuerySelector(css); + } + + protected string ReadAttribute(HtmlNode element, string attribute) + { + return element.Attributes[attribute] != null ? element.Attributes[attribute].Value : String.Empty; + } + + protected string ReadText(HtmlNode element) + { + return element.InnerText;// WebUtility.HtmlDecode(StepReadText.Process(element).ToString()); + } + + public abstract string RootUrl { get;} + public abstract string ID { get; } + public abstract string Title { get; } + } + +} diff --git a/MovieFinder.Client.Scraper/SortableBindingList.cs b/MovieFinder.Client.Scraper/SortableBindingList.cs new file mode 100644 index 0000000000000000000000000000000000000000..dc853fcfa9d9e6233c7c0b253b246e379bc2465a --- /dev/null +++ b/MovieFinder.Client.Scraper/SortableBindingList.cs @@ -0,0 +1,114 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; + + +namespace Client.Scraper +{ + public class SortableBindingList : BindingList + { + private readonly Dictionary> comparers; + private bool isSorted; + private ListSortDirection listSortDirection; + private PropertyDescriptor propertyDescriptor; + + public SortableBindingList() + : base(new List()) + { + this.comparers = new Dictionary>(); + } + + public SortableBindingList(IEnumerable enumeration) + : base(new List(enumeration)) + { + this.comparers = new Dictionary>(); + } + + protected override bool SupportsSortingCore + { + get { return true; } + } + + protected override bool IsSortedCore + { + get { return this.isSorted; } + } + + protected override PropertyDescriptor SortPropertyCore + { + get { return this.propertyDescriptor; } + } + + protected override ListSortDirection SortDirectionCore + { + get { return this.listSortDirection; } + } + + protected override bool SupportsSearchingCore + { + get { return true; } + } + + protected override void ApplySortCore(PropertyDescriptor property, ListSortDirection direction) + { + List itemsList = (List)this.Items; + + Type propertyType = property.PropertyType; + PropertyComparer comparer; + if (!this.comparers.TryGetValue(propertyType, out comparer)) + { + comparer = new PropertyComparer(property, direction); + this.comparers.Add(propertyType, comparer); + } + + comparer.SetPropertyAndDirection(property, direction); + itemsList.Sort(comparer); + + this.propertyDescriptor = property; + this.listSortDirection = direction; + this.isSorted = true; + + this.OnListChanged(new ListChangedEventArgs(ListChangedType.Reset, -1)); + } + + protected override void RemoveSortCore() + { + this.isSorted = false; + this.propertyDescriptor = base.SortPropertyCore; + this.listSortDirection = base.SortDirectionCore; + + this.OnListChanged(new ListChangedEventArgs(ListChangedType.Reset, -1)); + } + + protected override int FindCore(PropertyDescriptor property, object key) + { + int count = this.Count; + for (int i = 0; i < count; ++i) + { + T element = this[i]; + if (property.GetValue(element).Equals(key)) + { + return i; + } + } + + return -1; + } + + public void AddRange(IEnumerable items) + { + foreach (var item in items) + { + base.Add(item); + } + } + + public void RemoveRange(IEnumerable items) + { + foreach (var item in items) + { + base.Remove(item); + } + } + } +} \ No newline at end of file diff --git a/MovieFinder.Client.Scraper/VideoScrapers/ScrapedVideo.cs b/MovieFinder.Client.Scraper/VideoScrapers/ScrapedVideo.cs new file mode 100644 index 0000000000000000000000000000000000000000..e87c04866ac56b9ce292bbae4d32881f4f439064 --- /dev/null +++ b/MovieFinder.Client.Scraper/VideoScrapers/ScrapedVideo.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Client.Scraper +{ + public class ScrapedPage + { + public ScrapedPage() + { + Videos = new List(); + Links = new List(); + } + public List Videos { get; set; } + public List Links { get; set; } + } + public class ScrapedVideo + { + public ScrapedVideo() + { + RelatedVideos = new List(); + } + public string Url { get; set; } + public string Title { get; set; } + public string ImageUrl { get; set; } + public TimeSpan Duration { get; set; } + public string PlayUrl { get; set; } + public int Quality { get; set; } + public List RelatedVideos { get; set; } + public bool FullyLoaded { get; set; } + } + + public class PagingLink + { + public string Url { get; set; } + public string Text { get; set; } + public bool IsSelected { get; set; } + } + + public enum VideoSortby + { + Relevance, + Date, + Rating + } + + public enum VideoPeriod + { + Anytime, + Today, + ThisWeek, + ThisMonth + } + + public enum VideoDuration + { + All, + Short, + Medium, + Long + } + + public class SearchParameters + { + public string Url { get; set; } + public string Query { get; set; } + public VideoSortby SortBy { get; set; } + public VideoPeriod Period { get; set; } + public VideoDuration Duration { get; set; } + } +} diff --git a/MovieFinder.Client.Scraper/VideoScrapers/VideoScraperBase.cs b/MovieFinder.Client.Scraper/VideoScrapers/VideoScraperBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..54bf923fa9d871265d81c956e3079408eb21e92e --- /dev/null +++ b/MovieFinder.Client.Scraper/VideoScrapers/VideoScraperBase.cs @@ -0,0 +1,162 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Linq; +using System.Text.RegularExpressions; +using System.Web; +using HtmlAgilityPack; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System.Diagnostics; + +namespace Client.Scraper +{ + public abstract class VideoScraperBase : ScraperBase + { + public abstract ScrapedPage ScrapeVideos(SearchParameters sparam); + public abstract ScrapedVideo ScrapeVideoDetails(ScrapedVideo video); + } + + public class XVideoScraper : VideoScraperBase + { + + public override ScrapedPage ScrapeVideos(SearchParameters sparam = null) + { + var rootUrl = RootUrl; + if (sparam != null ) + { + if (!String.IsNullOrEmpty(sparam.Url)) + rootUrl = sparam.Url; + var ub = new Uri(rootUrl); + if (!String.IsNullOrEmpty(sparam.Query)) + { + ub = ub.AddQuery("k", sparam.Query); + ub = ub.AddQuery("sort", sparam.SortBy == VideoSortby.Relevance ? "relevance" + : (sparam.SortBy == VideoSortby.Rating ? "rating" : "uploaddate")); + ub = ub.AddQuery("durf", sparam.Duration == VideoDuration.All ? "allduration" : (sparam.Duration == VideoDuration.Long ? "10min_more" : + (sparam.Duration == VideoDuration.Short ? "1-3min" : "3-10min"))); + ub = ub.AddQuery("datef", sparam.Period == VideoPeriod.Anytime ? "all" : (sparam.Period == VideoPeriod.Today ? "today" : + ((sparam.Period == VideoPeriod.ThisWeek ? "week" : "month")))); + rootUrl = ub.AbsoluteUri; + } + } + + var page = new ScrapedPage(); + var elem = GotoUrl(rootUrl); + page.Videos = ScrapThumbnailVideos(elem); + //get next page + var pages = SelectItems(elem, ".pagination.small.top a").ToList(); + foreach (var p in pages) + { + bool selected = p.Attributes["class"] != null && p.Attributes["class"].Value == "sel"; + page.Links.Add(new PagingLink + { + Url = selected? rootUrl : new Uri(new Uri(RootUrl), p.Attributes["href"].Value).AbsoluteUri, + IsSelected = selected, + Text = p.InnerText + }); + } + + + var showMore = SelectItem(elem, ".showMore a"); + if (showMore != null) + { + page.Links.Add(new PagingLink + { + Url = String.Format("{0}{1}", RootUrl, showMore.Attributes["href"].Value), + Text = showMore.InnerText, + }); + } + + return page; + } + + public override ScrapedVideo ScrapeVideoDetails(ScrapedVideo video) + { + var root = GotoUrl(video.Url); + var flash = SelectItem(root, "#flash-player-embed"); + if (flash == null) + return video; + var flashVars = HttpUtility.UrlDecode(ReadAttribute(SelectItem(root, "#flash-player-embed"), "flashvars")); + var beg = flashVars.IndexOf("flv_url=") + 8; + var end = flashVars.IndexOf("&",beg); + video.PlayUrl = HttpUtility.UrlDecode(flashVars.Substring(beg, end - beg)); + beg = root.InnerHtml.IndexOf("", beg); + var obj = (JArray)JsonConvert.DeserializeObject(root.InnerHtml.Substring(beg, end - beg)); + foreach (var item in obj) + { + foreach (var subItem in item) + { + if (subItem["u"] != null) + { + video.RelatedVideos.Add(new ScrapedVideo + { + Duration = TimeSpan.FromMinutes(Convert.ToInt32(Regex.Replace(subItem["d"].ToString(), "[^0-9.]", ""))), + ImageUrl = subItem["i"].ToString(), + Url = RootUrl + subItem["u"].ToString(), + Title = subItem["t"].ToString(), + }); + } + } + } + if (String.IsNullOrEmpty(video.PlayUrl)) + throw new Exception("Unable to get video information"); + video.FullyLoaded = true; + return video; + } + + public override string RootUrl + { + get{ return "http://www.xvideos.com";} + } + + public override string ID + { + get { return "xvideos"; } + } + + public override string Title + { + get { return "XVideos"; } + } + + private List ScrapThumbnailVideos(HtmlNode root) + { + var videos = new List(); + var items = SelectItems(root, ".thumbBlock").ToList(); + foreach (var item in items) + { + var video = new ScrapedVideo(); + var elem = SelectItem(item, ".thumb a"); + if (elem == null) + { + elem = SelectItem(item, "script"); + elem.InnerHtml = elem.InnerHtml.Replace("castDisplayRandomThumb('", "").Replace("');", ""); + elem = SelectItem(item, ".thumb a"); + + } + + if (elem == null) + Debug.Assert(true); + if (elem != null) + { + video.Url = RootUrl + ReadAttribute(elem, "href"); + video.ImageUrl = ReadAttribute(SelectItem(item, ".thumb a img"), "src"); + video.Title = ReadText(SelectItem(item, ".thumbInside p a")); + var duration = ReadText(SelectItem(item, ".duration")); + var mc = Regex.Matches(duration, @"\d+"); + var hour = duration.Contains("h") ? TimeSpan.FromHours(Convert.ToInt32(mc[0].Value)) : new TimeSpan(); + var min = duration.Contains("min") ? TimeSpan.FromMinutes(Convert.ToInt32( + duration.Contains("h") ? mc[1].Value : mc[0].Value)) : new TimeSpan(); + var sec = duration.Contains("sec") ? TimeSpan.FromSeconds(Convert.ToInt32(mc[mc.Count-1].Value)) : new TimeSpan(); + + + video.Duration = hour + min + sec; + videos.Add(video); + } + } + return videos; + } + } +} diff --git a/MovieFinder.Client.Scraper/packages.config b/MovieFinder.Client.Scraper/packages.config new file mode 100644 index 0000000000000000000000000000000000000000..aa597cc51822c9c9e56bc9f6f47c93457186d3b2 --- /dev/null +++ b/MovieFinder.Client.Scraper/packages.config @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/MovieFinder.Data/App.config b/MovieFinder.Data/App.config new file mode 100644 index 0000000000000000000000000000000000000000..fab3d3d9cbdb24fcc6d32d378cd84124ec2287fc --- /dev/null +++ b/MovieFinder.Data/App.config @@ -0,0 +1,20 @@ + + + + +
    + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/MovieFinder.Data/Movie.cs b/MovieFinder.Data/Movie.cs new file mode 100644 index 0000000000000000000000000000000000000000..61a1548cb6e077bfbd75f68bd5b01cb19e1c991f --- /dev/null +++ b/MovieFinder.Data/Movie.cs @@ -0,0 +1,40 @@ +//------------------------------------------------------------------------------ +// +// This code was generated from a template. +// +// Manual changes to this file may cause unexpected behavior in your application. +// Manual changes to this file will be overwritten if the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace MovieFinder.Data +{ + using System; + using System.Collections.Generic; + + public partial class Movie + { + public Movie() + { + this.MovieLinks = new HashSet(); + } + + public int ID { get; set; } + public string Name { get; set; } + public string UniqueID { get; set; } + public string ImageUrl { get; set; } + public System.DateTime ReleaseDate { get; set; } + public string LanguageCode { get; set; } + public string Description { get; set; } + public System.DateTime CreateDate { get; set; } + public Nullable ModifiedDate { get; set; } + public int Version { get; set; } + public int VersionChange { get; set; } + public string ImageScrapperID { get; set; } + public string ImageLocalUrl { get; set; } + public int ViewCount { get; set; } + public int LikeCount { get; set; } + + public virtual ICollection MovieLinks { get; set; } + } +} diff --git a/MovieFinder.Data/MovieDB.Designer.cs b/MovieFinder.Data/MovieDB.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..19a2c8fae0aeeb034843a4f842d203bbd7685eaa --- /dev/null +++ b/MovieFinder.Data/MovieDB.Designer.cs @@ -0,0 +1,4 @@ +// Default code generation is disabled for model 'C:\Work\Temp\VideoSearch\MovieFinder.Data\MovieDB.edmx'. +// To enable default code generation, change the value of the 'Code Generation Strategy' designer +// property to an alternate value. This property is available in the Properties Window when the model is +// open in the designer. \ No newline at end of file diff --git a/MovieFinder.Data/MovieDB.edmx b/MovieFinder.Data/MovieDB.edmx new file mode 100644 index 0000000000000000000000000000000000000000..7642e014eb11a6cc57253a97ee85e831b287b092 --- /dev/null +++ b/MovieFinder.Data/MovieDB.edmx @@ -0,0 +1,288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/MovieFinder.Data/MovieDBModel.Context.cs b/MovieFinder.Data/MovieDBModel.Context.cs new file mode 100644 index 0000000000000000000000000000000000000000..ddd51bf9c5a4f4ca089061217e2ede947ce5fee4 --- /dev/null +++ b/MovieFinder.Data/MovieDBModel.Context.cs @@ -0,0 +1,33 @@ +//------------------------------------------------------------------------------ +// +// This code was generated from a template. +// +// Manual changes to this file may cause unexpected behavior in your application. +// Manual changes to this file will be overwritten if the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace MovieFinder.Data +{ + using System; + using System.Data.Entity; + using System.Data.Entity.Infrastructure; + + public partial class MovieFinderEntities : DbContext + { + public MovieFinderEntities() + : base("name=MovieFinderEntities") + { + } + + protected override void OnModelCreating(DbModelBuilder modelBuilder) + { + throw new UnintentionalCodeFirstException(); + } + + public DbSet MovieLinks { get; set; } + public DbSet Movies { get; set; } + public DbSet VisitorProfiles { get; set; } + public DbSet Plugins { get; set; } + } +} diff --git a/MovieFinder.Data/MovieDBModel.Context.tt b/MovieFinder.Data/MovieDBModel.Context.tt new file mode 100644 index 0000000000000000000000000000000000000000..37533c181c38d2879b8ca7a9249e5b287a91172c --- /dev/null +++ b/MovieFinder.Data/MovieDBModel.Context.tt @@ -0,0 +1,194 @@ +<#@ template language="C#" debug="false" hostspecific="true"#> +<#@ include file="EF.Utility.CS.ttinclude"#><#@ + output extension=".cs"#><# + +var loader = new MetadataLoader(this); +var region = new CodeRegion(this); +var inputFile = @"MovieDB.edmx"; +var ItemCollection = loader.CreateEdmItemCollection(inputFile); + +Code = new CodeGenerationTools(this); +EFTools = new MetadataTools(this); +ObjectNamespace = Code.VsNamespaceSuggestion(); +ModelNamespace = loader.GetModelNamespace(inputFile); + +EntityContainer container = ItemCollection.GetItems().FirstOrDefault(); +if (container == null) +{ + return string.Empty; +} +#> +//------------------------------------------------------------------------------ +// +// <#=GetResourceString("Template_GeneratedCodeCommentLine1")#> +// +// <#=GetResourceString("Template_GeneratedCodeCommentLine2")#> +// <#=GetResourceString("Template_GeneratedCodeCommentLine3")#> +// +//------------------------------------------------------------------------------ + +<# + +if (!String.IsNullOrEmpty(ObjectNamespace)) +{ +#> +namespace <#=Code.EscapeNamespace(ObjectNamespace)#> +{ +<# + PushIndent(CodeRegion.GetIndent(1)); +} + +#> +using System; +using System.Data.Entity; +using System.Data.Entity.Infrastructure; +<# +if (container.FunctionImports.Any()) +{ +#> +using System.Data.Objects; +<# +} +#> + +<#=Accessibility.ForType(container)#> partial class <#=Code.Escape(container)#> : DbContext +{ + public <#=Code.Escape(container)#>() + : base("name=<#=container.Name#>") + { +<# + WriteLazyLoadingEnabled(container); +#> + } + + protected override void OnModelCreating(DbModelBuilder modelBuilder) + { + throw new UnintentionalCodeFirstException(); + } + +<# + foreach (var entitySet in container.BaseEntitySets.OfType()) + { +#> + <#=Accessibility.ForReadOnlyProperty(entitySet)#> DbSet<<#=Code.Escape(entitySet.ElementType)#>> <#=Code.Escape(entitySet)#> { get; set; } +<# + } + + foreach (var edmFunction in container.FunctionImports) + { + WriteFunctionImport(edmFunction, false); + } +#> +} +<# + +if (!String.IsNullOrEmpty(ObjectNamespace)) +{ + PopIndent(); +#> +} +<# +} +#> +<#+ +string ModelNamespace { get; set; } +string ObjectNamespace { get; set; } +CodeGenerationTools Code { get; set; } +MetadataTools EFTools { get; set; } + +string GetResourceString(string resourceName) +{ + if(_resourceManager == null) + { + _resourceManager = new System.Resources.ResourceManager("System.Data.Entity.Design", typeof(System.Data.Entity.Design.MetadataItemCollectionFactory).Assembly); + } + + return _resourceManager.GetString(resourceName, null); +} +System.Resources.ResourceManager _resourceManager; + +void WriteLazyLoadingEnabled(EntityContainer container) +{ + string lazyLoadingAttributeValue = null; + var lazyLoadingAttributeName = MetadataConstants.EDM_ANNOTATION_09_02 + ":LazyLoadingEnabled"; + if(MetadataTools.TryGetStringMetadataPropertySetting(container, lazyLoadingAttributeName, out lazyLoadingAttributeValue)) + { + bool isLazyLoading; + if(bool.TryParse(lazyLoadingAttributeValue, out isLazyLoading) && !isLazyLoading) + { +#> + this.Configuration.LazyLoadingEnabled = false; +<#+ + } + } +} + +void WriteFunctionImport(EdmFunction edmFunction, bool includeMergeOption) +{ + var parameters = FunctionImportParameter.Create(edmFunction.Parameters, Code, EFTools); + var paramList = String.Join(", ", parameters.Select(p => p.FunctionParameterType + " " + p.FunctionParameterName).ToArray()); + var returnType = edmFunction.ReturnParameter == null ? null : EFTools.GetElementType(edmFunction.ReturnParameter.TypeUsage); + var processedReturn = returnType == null ? "int" : "ObjectResult<" + MultiSchemaEscape(returnType) + ">"; + + if (includeMergeOption) + { + paramList = Code.StringAfter(paramList, ", ") + "MergeOption mergeOption"; + } +#> + + <#=AccessibilityAndVirtual(Accessibility.ForMethod(edmFunction))#> <#=processedReturn#> <#=Code.Escape(edmFunction)#>(<#=paramList#>) + { +<#+ + if(returnType != null && (returnType.EdmType.BuiltInTypeKind == BuiltInTypeKind.EntityType || + returnType.EdmType.BuiltInTypeKind == BuiltInTypeKind.ComplexType)) + { +#> + ((IObjectContextAdapter)this).ObjectContext.MetadataWorkspace.LoadFromAssembly(typeof(<#=MultiSchemaEscape(returnType)#>).Assembly); + +<#+ + } + + foreach (var parameter in parameters.Where(p => p.NeedsLocalVariable)) + { + var isNotNull = parameter.IsNullableOfT ? parameter.FunctionParameterName + ".HasValue" : parameter.FunctionParameterName + " != null"; + var notNullInit = "new ObjectParameter(\"" + parameter.EsqlParameterName + "\", " + parameter.FunctionParameterName + ")"; + var nullInit = "new ObjectParameter(\"" + parameter.EsqlParameterName + "\", typeof(" + parameter.RawClrTypeName + "))"; +#> + var <#=parameter.LocalVariableName#> = <#=isNotNull#> ? + <#=notNullInit#> : + <#=nullInit#>; + +<#+ + } + + var genericArg = returnType == null ? "" : "<" + MultiSchemaEscape(returnType) + ">"; + var callParams = Code.StringBefore(", ", String.Join(", ", parameters.Select(p => p.ExecuteParameterName).ToArray())); + + if (includeMergeOption) + { + callParams = ", mergeOption" + callParams; + } +#> + return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<#=genericArg#>("<#=edmFunction.Name#>"<#=callParams#>); + } +<#+ + if(!includeMergeOption && returnType != null && returnType.EdmType.BuiltInTypeKind == BuiltInTypeKind.EntityType) + { + WriteFunctionImport(edmFunction, true); + } +} + +string AccessibilityAndVirtual(string accessibility) +{ + return accessibility + (accessibility != "private" ? " virtual" : ""); +} + +string MultiSchemaEscape(TypeUsage usage) +{ + var type = usage.EdmType as StructuralType; + return type != null && type.NamespaceName != ModelNamespace ? + Code.CreateFullName(Code.EscapeNamespace(type.NamespaceName), Code.Escape(type)) : + Code.Escape(usage); +} + +#> \ No newline at end of file diff --git a/MovieFinder.Data/MovieDBModel.cs b/MovieFinder.Data/MovieDBModel.cs new file mode 100644 index 0000000000000000000000000000000000000000..c370fb0ace6604cc10ccc7fe3d58dedc9a931c91 --- /dev/null +++ b/MovieFinder.Data/MovieDBModel.cs @@ -0,0 +1,9 @@ +//------------------------------------------------------------------------------ +// +// This code was generated from a template. +// +// Manual changes to this file may cause unexpected behavior in your application. +// Manual changes to this file will be overwritten if the code is regenerated. +// +//------------------------------------------------------------------------------ + diff --git a/MovieFinder.Data/MovieDBModel.tt b/MovieFinder.Data/MovieDBModel.tt new file mode 100644 index 0000000000000000000000000000000000000000..a98c867f9ac185bd7d7329ab76cd45ae0d9c6b9e --- /dev/null +++ b/MovieFinder.Data/MovieDBModel.tt @@ -0,0 +1,280 @@ +<#@ template language="C#" debug="false" hostspecific="true"#> +<#@ include file="EF.Utility.CS.ttinclude"#><#@ + output extension=".cs"#><# + +CodeGenerationTools code = new CodeGenerationTools(this); +MetadataLoader loader = new MetadataLoader(this); +CodeRegion region = new CodeRegion(this, 1); +MetadataTools ef = new MetadataTools(this); + +string inputFile = @"MovieDB.edmx"; +EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile); +string namespaceName = code.VsNamespaceSuggestion(); + +EntityFrameworkTemplateFileManager fileManager = EntityFrameworkTemplateFileManager.Create(this); +WriteHeader(fileManager); + +foreach (var entity in ItemCollection.GetItems().OrderBy(e => e.Name)) +{ + fileManager.StartNewFile(entity.Name + ".cs"); + BeginNamespace(namespaceName, code); +#> +using System; +using System.Collections.Generic; + +<#=Accessibility.ForType(entity)#> <#=code.SpaceAfter(code.AbstractOption(entity))#>partial class <#=code.Escape(entity)#><#=code.StringBefore(" : ", code.Escape(entity.BaseType))#> +{ +<# + var propertiesWithDefaultValues = entity.Properties.Where(p => p.TypeUsage.EdmType is PrimitiveType && p.DeclaringType == entity && p.DefaultValue != null); + var collectionNavigationProperties = entity.NavigationProperties.Where(np => np.DeclaringType == entity && np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many); + var complexProperties = entity.Properties.Where(p => p.TypeUsage.EdmType is ComplexType && p.DeclaringType == entity); + + if (propertiesWithDefaultValues.Any() || collectionNavigationProperties.Any() || complexProperties.Any()) + { +#> + public <#=code.Escape(entity)#>() + { +<# + foreach (var edmProperty in propertiesWithDefaultValues) + { +#> + this.<#=code.Escape(edmProperty)#> = <#=code.CreateLiteral(edmProperty.DefaultValue)#>; +<# + } + + foreach (var navigationProperty in collectionNavigationProperties) + { +#> + this.<#=code.Escape(navigationProperty)#> = new HashSet<<#=code.Escape(navigationProperty.ToEndMember.GetEntityType())#>>(); +<# + } + + foreach (var complexProperty in complexProperties) + { +#> + this.<#=code.Escape(complexProperty)#> = new <#=code.Escape(complexProperty.TypeUsage)#>(); +<# + } +#> + } + +<# + } + + var primitiveProperties = entity.Properties.Where(p => p.TypeUsage.EdmType is PrimitiveType && p.DeclaringType == entity); + if (primitiveProperties.Any()) + { + foreach (var edmProperty in primitiveProperties) + { + WriteProperty(code, edmProperty); + } + } + + if (complexProperties.Any()) + { +#> + +<# + foreach(var complexProperty in complexProperties) + { + WriteProperty(code, complexProperty); + } + } + + var navigationProperties = entity.NavigationProperties.Where(np => np.DeclaringType == entity); + if (navigationProperties.Any()) + { +#> + +<# + foreach (var navigationProperty in navigationProperties) + { + WriteNavigationProperty(code, navigationProperty); + } + } +#> +} +<# + EndNamespace(namespaceName); +} + +foreach (var complex in ItemCollection.GetItems().OrderBy(e => e.Name)) +{ + fileManager.StartNewFile(complex.Name + ".cs"); + BeginNamespace(namespaceName, code); +#> +using System; + +<#=Accessibility.ForType(complex)#> partial class <#=code.Escape(complex)#> +{ +<# + var complexProperties = complex.Properties.Where(p => p.TypeUsage.EdmType is ComplexType && p.DeclaringType == complex); + var propertiesWithDefaultValues = complex.Properties.Where(p => p.TypeUsage.EdmType is PrimitiveType && p.DeclaringType == complex && p.DefaultValue != null); + + if (propertiesWithDefaultValues.Any() || complexProperties.Any()) + { +#> + public <#=code.Escape(complex)#>() + { +<# + foreach (var edmProperty in propertiesWithDefaultValues) + { +#> + this.<#=code.Escape(edmProperty)#> = <#=code.CreateLiteral(edmProperty.DefaultValue)#>; +<# + } + + foreach (var complexProperty in complexProperties) + { +#> + this.<#=code.Escape(complexProperty)#> = new <#=code.Escape(complexProperty.TypeUsage)#>(); +<# + } +#> + } + +<# + } + + var primitiveProperties = complex.Properties.Where(p => p.TypeUsage.EdmType is PrimitiveType && p.DeclaringType == complex); + if (primitiveProperties.Any()) + { + foreach(var edmProperty in primitiveProperties) + { + WriteProperty(code, edmProperty); + } + } + + if (complexProperties.Any()) + { +#> + +<# + foreach(var edmProperty in complexProperties) + { + WriteProperty(code, edmProperty); + } + } +#> +} +<# + EndNamespace(namespaceName); +} + +if (!VerifyTypesAreCaseInsensitiveUnique(ItemCollection)) +{ + return ""; +} + +fileManager.Process(); + +#> +<#+ +string GetResourceString(string resourceName) +{ + if(_resourceManager == null) + { + _resourceManager = new System.Resources.ResourceManager("System.Data.Entity.Design", typeof(System.Data.Entity.Design.MetadataItemCollectionFactory).Assembly); + } + + return _resourceManager.GetString(resourceName, null); +} +System.Resources.ResourceManager _resourceManager; + +void WriteHeader(EntityFrameworkTemplateFileManager fileManager) +{ + fileManager.StartHeader(); +#> +//------------------------------------------------------------------------------ +// +// <#=GetResourceString("Template_GeneratedCodeCommentLine1")#> +// +// <#=GetResourceString("Template_GeneratedCodeCommentLine2")#> +// <#=GetResourceString("Template_GeneratedCodeCommentLine3")#> +// +//------------------------------------------------------------------------------ + +<#+ + fileManager.EndBlock(); +} + +void BeginNamespace(string namespaceName, CodeGenerationTools code) +{ + CodeRegion region = new CodeRegion(this); + if (!String.IsNullOrEmpty(namespaceName)) + { +#> +namespace <#=code.EscapeNamespace(namespaceName)#> +{ +<#+ + PushIndent(CodeRegion.GetIndent(1)); + } +} + + +void EndNamespace(string namespaceName) +{ + if (!String.IsNullOrEmpty(namespaceName)) + { + PopIndent(); +#> +} +<#+ + } +} + +void WriteProperty(CodeGenerationTools code, EdmProperty edmProperty) +{ + WriteProperty(Accessibility.ForProperty(edmProperty), + code.Escape(edmProperty.TypeUsage), + code.Escape(edmProperty), + code.SpaceAfter(Accessibility.ForGetter(edmProperty)), + code.SpaceAfter(Accessibility.ForSetter(edmProperty))); +} + +void WriteNavigationProperty(CodeGenerationTools code, NavigationProperty navigationProperty) +{ + var endType = code.Escape(navigationProperty.ToEndMember.GetEntityType()); + WriteProperty(PropertyVirtualModifier(Accessibility.ForProperty(navigationProperty)), + navigationProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many ? ("ICollection<" + endType + ">") : endType, + code.Escape(navigationProperty), + code.SpaceAfter(Accessibility.ForGetter(navigationProperty)), + code.SpaceAfter(Accessibility.ForSetter(navigationProperty))); +} + +void WriteProperty(string accessibility, string type, string name, string getterAccessibility, string setterAccessibility) +{ +#> + <#=accessibility#> <#=type#> <#=name#> { <#=getterAccessibility#>get; <#=setterAccessibility#>set; } +<#+ +} + +string PropertyVirtualModifier(string accessibility) +{ + return accessibility + (accessibility != "private" ? " virtual" : ""); +} + +bool VerifyTypesAreCaseInsensitiveUnique(EdmItemCollection itemCollection) +{ + var alreadySeen = new Dictionary(StringComparer.OrdinalIgnoreCase); + foreach(var type in itemCollection.GetItems()) + { + if (!(type is EntityType || type is ComplexType)) + { + continue; + } + + if (alreadySeen.ContainsKey(type.FullName)) + { + Error(String.Format(CultureInfo.CurrentCulture, "This template does not support types that differ only by case, the types {0} are not supported", type.FullName)); + return false; + } + else + { + alreadySeen.Add(type.FullName, true); + } + } + + return true; +} +#> diff --git a/MovieFinder.Data/MovieFinder.Data.csproj b/MovieFinder.Data/MovieFinder.Data.csproj new file mode 100644 index 0000000000000000000000000000000000000000..22ab3c5170506f10a78579c0299ebaf36c76039e --- /dev/null +++ b/MovieFinder.Data/MovieFinder.Data.csproj @@ -0,0 +1,107 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {70784D58-80D0-473E-AE15-3F80077AC1AA} + Library + Properties + MovieFinder.Data + MovieFinder.Data + v4.0 + 512 + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + False + ..\packages\EntityFramework.6.0.1\lib\net40\EntityFramework.dll + + + ..\packages\EntityFramework.6.0.1\lib\net40\EntityFramework.SqlServer.dll + + + + + + + + + + + + MovieDBModel.tt + + + True + True + MovieDB.edmx + + + True + True + MovieDBModel.Context.tt + + + True + True + MovieDBModel.tt + + + MovieDBModel.tt + + + MovieDBModel.tt + + + + MovieDBModel.tt + + + + + + EntityModelCodeGenerator + MovieDB.Designer.cs + + + TextTemplatingFileGenerator + MovieDBModel.Context.cs + + + TextTemplatingFileGenerator + MovieDBModel.cs + + + + + + + + + \ No newline at end of file diff --git a/MovieFinder.Data/MovieLink.cs b/MovieFinder.Data/MovieLink.cs new file mode 100644 index 0000000000000000000000000000000000000000..f8bc746fa0f314d993c38b0b94d49e4893ef1e46 --- /dev/null +++ b/MovieFinder.Data/MovieLink.cs @@ -0,0 +1,37 @@ +//------------------------------------------------------------------------------ +// +// This code was generated from a template. +// +// Manual changes to this file may cause unexpected behavior in your application. +// Manual changes to this file will be overwritten if the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace MovieFinder.Data +{ + using System; + using System.Collections.Generic; + + public partial class MovieLink + { + public int ID { get; set; } + public int MovieID { get; set; } + public string SiteTitle { get; set; } + public string DownloadSiteID { get; set; } + public string PageUrl { get; set; } + public string PageSiteID { get; set; } + public string DowloadUrl { get; set; } + public string LinkTitle { get; set; } + public int FailedAttempts { get; set; } + public Nullable LastValidatedWhen { get; set; } + public int Version { get; set; } + public Nullable LastValidatedBy { get; set; } + public bool HasSubtitle { get; set; } + public bool IsWebSupported { get; set; } + public bool IsDesktopSupported { get; set; } + public Nullable PartID { get; set; } + public Nullable PartIndex { get; set; } + + public virtual Movie Movie { get; set; } + } +} diff --git a/MovieFinder.Data/Plugin.cs b/MovieFinder.Data/Plugin.cs new file mode 100644 index 0000000000000000000000000000000000000000..d8ef6c56341bd546e100cd49c197837fa0003719 --- /dev/null +++ b/MovieFinder.Data/Plugin.cs @@ -0,0 +1,22 @@ +//------------------------------------------------------------------------------ +// +// This code was generated from a template. +// +// Manual changes to this file may cause unexpected behavior in your application. +// Manual changes to this file will be overwritten if the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace MovieFinder.Data +{ + using System; + using System.Collections.Generic; + + public partial class Plugin + { + public string GKName { get; set; } + public string PluginName { get; set; } + public string SiteID { get; set; } + public int LastUpdatedTime { get; set; } + } +} diff --git a/MovieFinder.Data/Properties/AssemblyInfo.cs b/MovieFinder.Data/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000000000000000000000000000000000..81bf512872e8fd4f0834f6efe9600b9521333a35 --- /dev/null +++ b/MovieFinder.Data/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +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("MovieFinder.Data")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("MovieFinder.Data")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[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("aa0bc0a6-5c48-47e3-aa67-1278eb1dee0e")] + +// 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.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/MovieFinder.Data/VisitorProfile.cs b/MovieFinder.Data/VisitorProfile.cs new file mode 100644 index 0000000000000000000000000000000000000000..a8a822a4c0c3c5206068098da3ff560379388a76 --- /dev/null +++ b/MovieFinder.Data/VisitorProfile.cs @@ -0,0 +1,25 @@ +//------------------------------------------------------------------------------ +// +// This code was generated from a template. +// +// Manual changes to this file may cause unexpected behavior in your application. +// Manual changes to this file will be overwritten if the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace MovieFinder.Data +{ + using System; + using System.Collections.Generic; + + public partial class VisitorProfile + { + public System.Guid ID { get; set; } + public Nullable UserID { get; set; } + public System.DateTime LastAccessedTime { get; set; } + public string LastAccessedIP { get; set; } + public string LastAccessedLanguage { get; set; } + public string LastAccessedUrl { get; set; } + public int HitCount { get; set; } + } +} diff --git a/MovieFinder.Data/packages.config b/MovieFinder.Data/packages.config new file mode 100644 index 0000000000000000000000000000000000000000..279951a62fcd90d931158efb24db2ca04e0359bf --- /dev/null +++ b/MovieFinder.Data/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/MovieFinder.Installer/MovieFinder.Installer.vdproj b/MovieFinder.Installer/MovieFinder.Installer.vdproj new file mode 100644 index 0000000000000000000000000000000000000000..a723e9c816a7c2e06aa2a1df90d6e2c050c79041 --- /dev/null +++ b/MovieFinder.Installer/MovieFinder.Installer.vdproj @@ -0,0 +1,994 @@ +"DeployProject" +{ +"VSVersion" = "3:800" +"ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}" +"IsWebType" = "8:FALSE" +"ProjectName" = "8:MovieFinder.Installer" +"LanguageId" = "3:1033" +"CodePage" = "3:1252" +"UILanguageId" = "3:1033" +"SccProjectName" = "8:" +"SccLocalPath" = "8:" +"SccAuxPath" = "8:" +"SccProvider" = "8:" + "Hierarchy" + { + "Entry" + { + "MsmKey" = "8:_32043F7682754554AFC2DA8F7968EA6E" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_5CEAE66F7B4D45B7BA1696DE31D9B44A" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_784724DBE4089DE8A9893FF6BFE644E1" + "OwnerKey" = "8:_8409BE83F1F5427D85861BC46955ED74" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_8409BE83F1F5427D85861BC46955ED74" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_AF8200E793514B14882F6C948B44FC97" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_C839804CB35748CC8970F2540B6D74A0" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_D1E575BA90412671E003091600969C1B" + "OwnerKey" = "8:_8409BE83F1F5427D85861BC46955ED74" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_F702EC1050BCFA0AB7172D778A965F97" + "OwnerKey" = "8:_8409BE83F1F5427D85861BC46955ED74" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_8409BE83F1F5427D85861BC46955ED74" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_F702EC1050BCFA0AB7172D778A965F97" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_784724DBE4089DE8A9893FF6BFE644E1" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_D1E575BA90412671E003091600969C1B" + "MsmSig" = "8:_UNDEFINED" + } + } + "Configurations" + { + "Debug" + { + "DisplayName" = "8:Debug" + "IsDebugOnly" = "11:TRUE" + "IsReleaseOnly" = "11:FALSE" + "OutputFilename" = "8:Debug\\MovieFinder.Installer.msi" + "PackageFilesAs" = "3:2" + "PackageFileSize" = "3:-2147483648" + "CabType" = "3:1" + "Compression" = "3:2" + "SignOutput" = "11:FALSE" + "CertificateFile" = "8:" + "PrivateKeyFile" = "8:" + "TimeStampServer" = "8:" + "InstallerBootstrapper" = "3:2" + "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" + { + "Enabled" = "11:TRUE" + "PromptEnabled" = "11:TRUE" + "PrerequisitesLocation" = "2:1" + "Url" = "8:" + "ComponentsUrl" = "8:" + "Items" + { + "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Windows.Installer.3.1" + { + "Name" = "8:Windows Installer 3.1" + "ProductCode" = "8:Microsoft.Windows.Installer.3.1" + } + } + } + } + "Release" + { + "DisplayName" = "8:Release" + "IsDebugOnly" = "11:FALSE" + "IsReleaseOnly" = "11:TRUE" + "OutputFilename" = "8:Release\\MovieFinder.Installer.msi" + "PackageFilesAs" = "3:2" + "PackageFileSize" = "3:-2147483648" + "CabType" = "3:1" + "Compression" = "3:2" + "SignOutput" = "11:FALSE" + "CertificateFile" = "8:" + "PrivateKeyFile" = "8:" + "TimeStampServer" = "8:" + "InstallerBootstrapper" = "3:2" + "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" + { + "Enabled" = "11:TRUE" + "PromptEnabled" = "11:TRUE" + "PrerequisitesLocation" = "2:1" + "Url" = "8:" + "ComponentsUrl" = "8:" + "Items" + { + "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.0,Profile=Client" + { + "Name" = "8:Microsoft .NET Framework 4 Client Profile (x86 and x64)" + "ProductCode" = "8:.NETFramework,Version=v4.0,Profile=Client" + } + "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Windows.Installer.3.1" + { + "Name" = "8:Windows Installer 3.1" + "ProductCode" = "8:Microsoft.Windows.Installer.3.1" + } + } + } + } + } + "Deployable" + { + "CustomAction" + { + } + "DefaultFeature" + { + "Name" = "8:DefaultFeature" + "Title" = "8:" + "Description" = "8:" + } + "ExternalPersistence" + { + "LaunchCondition" + { + "{A06ECF26-33A3-4562-8140-9B0E340D4F24}:_41A95B36AE764E8BBC1470EA15C8AE53" + { + "Name" = "8:.NET Framework" + "Message" = "8:[VSDNETMSG]" + "FrameworkVersion" = "8:.NETFramework,Version=v2.0" + "AllowLaterVersions" = "11:FALSE" + "InstallUrl" = "8:http://go.microsoft.com/fwlink/?LinkId=124150" + } + } + } + "File" + { + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_32043F7682754554AFC2DA8F7968EA6E" + { + "SourcePath" = "8:..\\MovieSearch.Client\\Movie.ico" + "TargetName" = "8:Movie.ico" + "Tag" = "8:" + "Folder" = "8:_62A24D391AC94A83857BCF106CB01253" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_5CEAE66F7B4D45B7BA1696DE31D9B44A" + { + "SourcePath" = "8:..\\Lib\\no_image.gif" + "TargetName" = "8:no_image.gif" + "Tag" = "8:" + "Folder" = "8:_62A24D391AC94A83857BCF106CB01253" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_784724DBE4089DE8A9893FF6BFE644E1" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:ObjectListView, Version=2.5.1.25595, Culture=neutral, PublicKeyToken=b1c5bf581481bcd4, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_784724DBE4089DE8A9893FF6BFE644E1" + { + "Name" = "8:ObjectListView.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:ObjectListView.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_62A24D391AC94A83857BCF106CB01253" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_AF8200E793514B14882F6C948B44FC97" + { + "SourcePath" = "8:..\\Lib\\copyright.rtf" + "TargetName" = "8:copyright.rtf" + "Tag" = "8:" + "Folder" = "8:_62A24D391AC94A83857BCF106CB01253" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C839804CB35748CC8970F2540B6D74A0" + { + "SourcePath" = "8:..\\Lib\\Banner.jpg" + "TargetName" = "8:Banner.jpg" + "Tag" = "8:" + "Folder" = "8:_62A24D391AC94A83857BCF106CB01253" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_D1E575BA90412671E003091600969C1B" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:Ionic.Zip, Version=1.9.1.8, Culture=neutral, PublicKeyToken=edbe51ad942a3f5c, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_D1E575BA90412671E003091600969C1B" + { + "Name" = "8:Ionic.Zip.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:Ionic.Zip.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_62A24D391AC94A83857BCF106CB01253" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_F702EC1050BCFA0AB7172D778A965F97" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_F702EC1050BCFA0AB7172D778A965F97" + { + "Name" = "8:Newtonsoft.Json.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:Newtonsoft.Json.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_62A24D391AC94A83857BCF106CB01253" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + } + "FileType" + { + } + "Folder" + { + "{3C67513D-01DD-4637-8A68-80971EB9504F}:_62A24D391AC94A83857BCF106CB01253" + { + "DefaultLocation" = "8:[LocalAppDataFolder]\\MovieFinder" + "Name" = "8:#1925" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:TARGETDIR" + "Folders" + { + } + } + "{1525181F-901A-416C-8A58-119130FE478E}:_8C00B86B29EB4D6BB1547D1DCE2A9593" + { + "Name" = "8:#1916" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:DesktopFolder" + "Folders" + { + } + } + "{1525181F-901A-416C-8A58-119130FE478E}:_BE01BAF83A2C4A4C8F6FB6A9C53591AF" + { + "Name" = "8:#1919" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:ProgramMenuFolder" + "Folders" + { + } + } + } + "LaunchCondition" + { + } + "Locator" + { + } + "MsiBootstrapper" + { + "LangId" = "3:1033" + "RequiresElevation" = "11:FALSE" + } + "Product" + { + "Name" = "8:Microsoft Visual Studio" + "ProductName" = "8:Movie Finder" + "ProductCode" = "8:{2B906B30-075C-4356-AD9C-94DE5E50950B}" + "PackageCode" = "8:{44656EE8-E760-4EFC-A741-66AF4FCA7C2F}" + "UpgradeCode" = "8:{0AFF60C2-6BB7-4A30-BFDD-416BA23C7840}" + "AspNetVersion" = "8:4.0.30319.0" + "RestartWWWService" = "11:FALSE" + "RemovePreviousVersions" = "11:FALSE" + "DetectNewerInstalledVersion" = "11:TRUE" + "InstallAllUsers" = "11:FALSE" + "ProductVersion" = "8:1.0.0" + "Manufacturer" = "8:MovieFinder" + "ARPHELPTELEPHONE" = "8:" + "ARPHELPLINK" = "8:http://www.iclipsee.com" + "Title" = "8:Movie Finder" + "Subject" = "8:Movie Finder help you find latest Indian Movies faster" + "ARPCONTACT" = "8:Movie Finder" + "Keywords" = "8:" + "ARPCOMMENTS" = "8:Movie Finder help you find latest Indian Movies faster" + "ARPURLINFOABOUT" = "8:http://www.iclipsee.com" + "ARPPRODUCTICON" = "8:_32043F7682754554AFC2DA8F7968EA6E" + "ARPIconIndex" = "3:0" + "SearchPath" = "8:" + "UseSystemSearchPath" = "11:TRUE" + "TargetPlatform" = "3:0" + "PreBuildEvent" = "8:" + "PostBuildEvent" = "8:" + "RunPostBuildEvent" = "3:0" + } + "Registry" + { + "HKLM" + { + "Keys" + { + "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_9F4D5684C4694EBDBADF0B13B2570EFD" + { + "Name" = "8:Software" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_3E37364A57404AE8B90E500AABA927A5" + { + "Name" = "8:[Manufacturer]" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + } + "Values" + { + } + } + } + "Values" + { + } + } + } + } + "HKCU" + { + "Keys" + { + "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_2BD868EDCF3C4D43B7A77CBBF2D9C9F6" + { + "Name" = "8:Software" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_F0D8BA6933F940F1BE300A97F0452B9D" + { + "Name" = "8:[Manufacturer]" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + } + "Values" + { + } + } + } + "Values" + { + } + } + } + } + "HKCR" + { + "Keys" + { + } + } + "HKU" + { + "Keys" + { + } + } + "HKPU" + { + "Keys" + { + } + } + } + "Sequences" + { + } + "Shortcut" + { + "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_17ED6B53EE82452BBFA8A9C855A389E1" + { + "Name" = "8:MovieFinder" + "Arguments" = "8:" + "Description" = "8:" + "ShowCmd" = "3:1" + "IconIndex" = "3:0" + "Transitive" = "11:FALSE" + "Target" = "8:_8409BE83F1F5427D85861BC46955ED74" + "Folder" = "8:_8C00B86B29EB4D6BB1547D1DCE2A9593" + "WorkingFolder" = "8:_62A24D391AC94A83857BCF106CB01253" + "Icon" = "8:_32043F7682754554AFC2DA8F7968EA6E" + "Feature" = "8:" + } + "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_2A20BDEF9C4E46C088C67A71061B9E3E" + { + "Name" = "8:MovieFinder" + "Arguments" = "8:" + "Description" = "8:" + "ShowCmd" = "3:1" + "IconIndex" = "3:0" + "Transitive" = "11:FALSE" + "Target" = "8:_8409BE83F1F5427D85861BC46955ED74" + "Folder" = "8:_BE01BAF83A2C4A4C8F6FB6A9C53591AF" + "WorkingFolder" = "8:_62A24D391AC94A83857BCF106CB01253" + "Icon" = "8:_32043F7682754554AFC2DA8F7968EA6E" + "Feature" = "8:" + } + } + "UserInterface" + { + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_024397E8D781427BB3FDDEF313A4B347" + { + "Name" = "8:#1900" + "Sequence" = "3:1" + "Attributes" = "3:1" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_11DB4C6251CE42DFB7090857E29638EF" + { + "Sequence" = "3:110" + "DisplayName" = "8:License Agreement" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdLicenseDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:2" + "Value" = "8:_C839804CB35748CC8970F2540B6D74A0" + "UsePlugInResources" = "11:TRUE" + } + "EulaText" + { + "Name" = "8:EulaText" + "DisplayName" = "8:#1008" + "Description" = "8:#1108" + "Type" = "3:6" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:2" + "Value" = "8:_AF8200E793514B14882F6C948B44FC97" + "UsePlugInResources" = "11:TRUE" + } + "Sunken" + { + "Name" = "8:Sunken" + "DisplayName" = "8:#1007" + "Description" = "8:#1107" + "Type" = "3:5" + "ContextData" = "8:4;True=4;False=0" + "Attributes" = "3:0" + "Setting" = "3:0" + "Value" = "3:0" + "DefaultValue" = "3:4" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_317EC9903A95464990F3D744E2101B83" + { + "Sequence" = "3:100" + "DisplayName" = "8:Welcome" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdWelcomeDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:2" + "Value" = "8:_C839804CB35748CC8970F2540B6D74A0" + "UsePlugInResources" = "11:TRUE" + } + "CopyrightWarning" + { + "Name" = "8:CopyrightWarning" + "DisplayName" = "8:#1002" + "Description" = "8:#1102" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1202" + "DefaultValue" = "8:#1202" + "UsePlugInResources" = "11:TRUE" + } + "Welcome" + { + "Name" = "8:Welcome" + "DisplayName" = "8:#1003" + "Description" = "8:#1103" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:2" + "Value" = "8:The installer will guide you through the steps required to install [ProductName] on your computer." + "DefaultValue" = "8:#1203" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_40232DD5A53D442C88F5427E93745A35" + { + "UseDynamicProperties" = "11:FALSE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdUserInterface.wim" + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_45688E9AFDB04848A69F4CF01A878E0E" + { + "Name" = "8:#1902" + "Sequence" = "3:2" + "Attributes" = "3:3" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_F0370B311AFC468DAF36296A329404D8" + { + "Sequence" = "3:100" + "DisplayName" = "8:Finished" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminFinishedDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_56D8967E86544DE5A1FC6C62055E10AD" + { + "Name" = "8:#1900" + "Sequence" = "3:2" + "Attributes" = "3:1" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_B2ABA1A30218409993C7EB2135AA695D" + { + "Sequence" = "3:100" + "DisplayName" = "8:Welcome" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminWelcomeDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:2" + "Value" = "8:_C839804CB35748CC8970F2540B6D74A0" + "UsePlugInResources" = "11:TRUE" + } + "CopyrightWarning" + { + "Name" = "8:CopyrightWarning" + "DisplayName" = "8:#1002" + "Description" = "8:#1102" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1202" + "DefaultValue" = "8:#1202" + "UsePlugInResources" = "11:TRUE" + } + "Welcome" + { + "Name" = "8:Welcome" + "DisplayName" = "8:#1003" + "Description" = "8:#1103" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1203" + "DefaultValue" = "8:#1203" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_C803D913CB334B6AB62FC405F1071553" + { + "Sequence" = "3:300" + "DisplayName" = "8:License Agreement" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminLicenseDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:2" + "Value" = "8:_C839804CB35748CC8970F2540B6D74A0" + "UsePlugInResources" = "11:TRUE" + } + "EulaText" + { + "Name" = "8:EulaText" + "DisplayName" = "8:#1008" + "Description" = "8:#1108" + "Type" = "3:6" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:2" + "Value" = "8:_AF8200E793514B14882F6C948B44FC97" + "UsePlugInResources" = "11:TRUE" + } + "Sunken" + { + "Name" = "8:Sunken" + "DisplayName" = "8:#1007" + "Description" = "8:#1107" + "Type" = "3:5" + "ContextData" = "8:4;True=4;False=0" + "Attributes" = "3:0" + "Setting" = "3:0" + "Value" = "3:0" + "DefaultValue" = "3:4" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_585DE01645E34E82A8A33B0A6191FA51" + { + "Name" = "8:#1901" + "Sequence" = "3:1" + "Attributes" = "3:2" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_66C7F06686FF48CCA6B9C686F887E58B" + { + "Sequence" = "3:100" + "DisplayName" = "8:Progress" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdProgressDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:2" + "Value" = "8:_C839804CB35748CC8970F2540B6D74A0" + "UsePlugInResources" = "11:TRUE" + } + "ShowProgress" + { + "Name" = "8:ShowProgress" + "DisplayName" = "8:#1009" + "Description" = "8:#1109" + "Type" = "3:5" + "ContextData" = "8:1;True=1;False=0" + "Attributes" = "3:0" + "Setting" = "3:0" + "Value" = "3:1" + "DefaultValue" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_A72E798F5BA54932B3C6C7E77E54DFB6" + { + "UseDynamicProperties" = "11:FALSE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdBasicDialogs.wim" + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_CFA3639B34F24A6FA324333B89BD6AE9" + { + "Name" = "8:#1901" + "Sequence" = "3:2" + "Attributes" = "3:2" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_5774057FF8E4416AA94F943EB4648FC5" + { + "Sequence" = "3:100" + "DisplayName" = "8:Progress" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminProgressDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "ShowProgress" + { + "Name" = "8:ShowProgress" + "DisplayName" = "8:#1009" + "Description" = "8:#1109" + "Type" = "3:5" + "ContextData" = "8:1;True=1;False=0" + "Attributes" = "3:0" + "Setting" = "3:0" + "Value" = "3:1" + "DefaultValue" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_D8A36B485E1147299040A5959B221B60" + { + "Name" = "8:#1902" + "Sequence" = "3:1" + "Attributes" = "3:3" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_FD423BA36075439894A7DC86A9B28A63" + { + "Sequence" = "3:100" + "DisplayName" = "8:Finished" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdFinishedDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:2" + "Value" = "8:_C839804CB35748CC8970F2540B6D74A0" + "UsePlugInResources" = "11:TRUE" + } + "UpdateText" + { + "Name" = "8:UpdateText" + "DisplayName" = "8:#1058" + "Description" = "8:#1158" + "Type" = "3:15" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:2" + "Value" = "8:" + "DefaultValue" = "8:#1258" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + } + "MergeModule" + { + } + "ProjectOutput" + { + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_8409BE83F1F5427D85861BC46955ED74" + { + "SourcePath" = "8:..\\MovieSearch.Client\\obj\\x86\\Debug\\MovieFinder.Client.exe" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_62A24D391AC94A83857BCF106CB01253" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{3FE4BFD2-8511-4943-BCCC-7471EB4FBF44}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + } + } +} diff --git a/MovieFinder.Scraper/DataService.cs b/MovieFinder.Scraper/DataService.cs new file mode 100644 index 0000000000000000000000000000000000000000..e96f5108a34b7988fd1183e66da608c82f70707e --- /dev/null +++ b/MovieFinder.Scraper/DataService.cs @@ -0,0 +1,95 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Data.SQLite; +using System.IO; +using System.Linq; + +namespace MovieFinder.Scraper +{ + public class DataService + { + private static SQLiteConnection connection; + private static object sync = new object(); + + public DataService(string name) + { + connection = new SQLiteConnection(String.Format("Data Source={0};Version=3;", name)); + connection.Open(); + } + //private DataService() { } + //public static DataService Create() + //{ + // return new DataService(); + //} + + public void ShutDown() + { + connection.Dispose(); + } + + public void AddMovie(MovieFinder.Data.Movie movie) + { + using (var cmd = new SQLiteCommand(connection)) + { + + cmd.CommandText = String.Format("INSERT INTO MOVIE(ID,Name,ImageUrl,ReleaseDate,LanguageCode,Description, CreatedDate,ModifiedDate, Version, UniqueID, HasSubtitle) " + + "VALUES({0},'{1}','{2}','{3}','{4}','{5}','{6}','{7}',{8},'{9}',{10})", + movie.ID, Sanitize(movie.Name), movie.ImageUrl, movie.ReleaseDate.ToString("yyyy-MM-dd"), + movie.LanguageCode,Sanitize( movie.Description), + movie.CreateDate.ToString("yyyy-MM-dd"), + movie.ModifiedDate != null ? + movie.ModifiedDate.Value.ToString("yyyy-MM-dd") : null, movie.Version, + movie.UniqueID, movie.MovieLinks.Any(x => x.HasSubtitle) ? 1 : 0); + cmd.ExecuteNonQuery(); + + foreach (var link in movie.MovieLinks) + { + if (link.FailedAttempts > 3) + continue; + cmd.CommandText = String.Format("INSERT INTO MOVIELINK(ID,MovieID,LinkTitle,PageUrl,PageSiteID,DownloadUrl,DownloadSiteID,Version, HasSubtitle) " + + "VALUES({0},{1},'{2}','{3}','{4}','{5}','{6}',{7},{8})", + link.ID, link.MovieID, Sanitize(link.LinkTitle), link.PageUrl, link.PageSiteID, link.DowloadUrl, link.DownloadSiteID, + link.Version, link.HasSubtitle ? 1 : 0); + cmd.ExecuteNonQuery(); + } + } + } + + public void UpdateMovieSettings(int version, DateTime createdDate) + { + using (var cmd = new SQLiteCommand(connection)) + { + + cmd.CommandText = String.Format("UPDATE SETTINGS SET Version = {0}, CreatedDate= '{1}' ", version, createdDate.ToString("yyyy-MM-dd hh:mm:ss")); + cmd.ExecuteNonQuery(); + } + } + + public int MovieDBVersion + { + get + { + + using (var cmd = new SQLiteCommand(connection)) + { + + cmd.CommandText = "SELECT * FROM Settings LIMIT 1"; + using (var reader = cmd.ExecuteReader()) + { + reader.Read(); + return (int)reader["Version"]; + } + } + + } + } + + private string Sanitize(string text) + { + return text.Replace("'", "''"); + } + + + } +} diff --git a/MovieFinder.Scraper/Hindi4ULink.js b/MovieFinder.Scraper/Hindi4ULink.js new file mode 100644 index 0000000000000000000000000000000000000000..f0a9c10402495df6245ca0e0221bbf68417d4638 --- /dev/null +++ b/MovieFinder.Scraper/Hindi4ULink.js @@ -0,0 +1,1592 @@ +var loadTime = (new Date()).getTime(); +var key; +var prng; +var decryptedText; + +/* jscrypt.js*/ + +function setKey() { + + var s = key; + var hexDigits = "0123456789abcdefABCDEF"; + var hs = "", i, bogus = false; + + for (i = 0; i < s.length; i++) { + var c = s.charAt(i); + if (hexDigits.indexOf(c) >= 0) { + hs += c; + } else { + bogus = true; + } + } + if (bogus) { + alert("Error: Improper character(s) in hexadecimal key."); + } + if (hs.length > (keySizeInBits / 4)) { + //alert("Warning: hexadecimal key exceeds " + + // (keySizeInBits / 4) + " digit maximum; truncated."); + document.addForm.key.value = hs = hs.slice(0, 64); + } else { + + while (hs.length < (keySizeInBits / 4)) { + hs += "0"; + } + } + key = hexToByteArray(hs); + // } +} + +function Generate_key() { + var i, j, k = ""; + + var i, j, k = ""; + + addEntropyTime(); + var seed = keyFromEntropy(); + + var prng = new AESprng(seed); + var hexDigits = "0123456789ABCDEF"; + + for (i = 0; i < 64; i++) { + k += hexDigits.charAt(prng.nextInt(15)); + } + + document.addForm.key.value = k; + delete prng; +} + +function Encrypt_text() { + var v, i; + + if (document.addForm.key.value.length == 0) { + // alert("Please specify a key with which to encrypt the message."); + return; + } + if (document.getElementById("txtLink").value.length == 0) { + //alert("No plain text to encrypt! Please enter or paste plain text in the field above."); + return; + } + document.getElementById("cipher").value = ""; + setKey(); + + addEntropyTime(); + prng = new AESprng(keyFromEntropy()); + var plaintext = encode_utf8(document.getElementById("txtLink").value); + + // Compute MD5 sum of message text and add to header + + md5_init(); + for (i = 0; i < plaintext.length; i++) { + md5_update(plaintext.charCodeAt(i)); + } + md5_finish(); + var header = ""; + for (i = 0; i < digestBits.length; i++) { + header += String.fromCharCode(digestBits[i]); + } + + + i = plaintext.length; + header += String.fromCharCode(i >>> 24); + header += String.fromCharCode(i >>> 16); + header += String.fromCharCode(i >>> 8); + header += String.fromCharCode(i & 0xFF); + + var ct = rijndaelEncrypt(header + plaintext, key, "CBC"); + v = armour_hex(ct); + document.getElementById("cipher").value = v; + return v; + delete prng; +} + +function determineArmourType(s) { + var kt, pcg, phex, pb64, pmin; + + pcg = s.indexOf(codegroupSentinel); + phex = s.indexOf(hexSentinel); + pb64 = s.indexOf(base64sent); + if (pcg == -1) { + pcg = s.length; + } + if (phex == -1) { + phex = s.length; + } + if (pb64 == -1) { + pb64 = s.length; + } + pmin = Math.min(pcg, Math.min(phex, pb64)); + if (pmin < s.length) { + if (pmin == pcg) { + kt = 0; + } else if (pmin == phex) { + kt = 1; + } else { + kt = 2; + } + } else { + kt = 1; + } + return kt; +} + +function Decrypt_text() { + + //document.getElementById("txtLink").value = ""; + setKey(); + var ct = new Array(), kt; + kt = determineArmourType(cipher); + if (kt == 0) { + ct = disarm_codegroup(cipher); + } else if (kt == 1) { + ct = disarm_hex(cipher); + } else if (kt == 2) { + ct = disarm_base64(cipher); + } + + var result = rijndaelDecrypt(ct, key, "CBC"); + + var header = result.slice(0, 20); + result = result.slice(20); + + var dl = (header[16] << 24) | (header[17] << 16) | (header[18] << 8) | header[19]; + if ((dl < 0) || (dl > result.length)) { + //alert("Message (length " + result.length + ") truncated. " + + // dl + " characters expected."); + // Try to sauve qui peut by setting length to entire message + dl = result.length; + } + + var i, plaintext = ""; + + md5_init(); + for (i = 0; i < dl; i++) { + plaintext += String.fromCharCode(result[i]); + md5_update(result[i]); + } + md5_finish(); + + for (i = 0; i < digestBits.length; i++) { + if (digestBits[i] != header[i]) { + // alert("Message corrupted. Checksum of decrypted message does not match."); + break; + } + } + + // That's it; plug plaintext into the result field + + //document.getElementById("txtLink").value = decode_utf8(plaintext); + decryptedText = decode_utf8(plaintext); +} + + +/* utf-8.js*/ + + +/* Encoding and decoding of Unicode character strings as +UTF-8 byte streams. */ + +// UNICODE_TO_UTF8 -- Encode Unicode argument string as UTF-8 return value + +function unicode_to_utf8(s) { + var utf8 = ""; + + for (var n = 0; n < s.length; n++) { + var c = s.charCodeAt(n); + + if (c <= 0x7F) { + // 0x00 - 0x7F: Emit as single byte, unchanged + utf8 += String.fromCharCode(c); + } else if ((c >= 0x80) && (c <= 0x7FF)) { + // 0x80 - 0x7FF: Output as two byte code, 0xC0 in first byte + // 0x80 in second byte + utf8 += String.fromCharCode((c >> 6) | 0xC0); + utf8 += String.fromCharCode((c & 0x3F) | 0x80); + } else { + // 0x800 - 0xFFFF: Output as three bytes, 0xE0 in first byte + // 0x80 in second byte + // 0x80 in third byte + utf8 += String.fromCharCode((c >> 12) | 0xE0); + utf8 += String.fromCharCode(((c >> 6) & 0x3F) | 0x80); + utf8 += String.fromCharCode((c & 0x3F) | 0x80); + } + } + return utf8; +} + +// UTF8_TO_UNICODE -- Decode UTF-8 argument into Unicode string return value + +function utf8_to_unicode(utf8) { + var s = "", i = 0, b1, b2, b2; + + while (i < utf8.length) { + b1 = utf8.charCodeAt(i); + if (b1 < 0x80) { // One byte code: 0x00 0x7F + s += String.fromCharCode(b1); + i++; + } else if ((b1 >= 0xC0) && (b1 < 0xE0)) { // Two byte code: 0x80 - 0x7FF + b2 = utf8.charCodeAt(i + 1); + s += String.fromCharCode(((b1 & 0x1F) << 6) | (b2 & 0x3F)); + i += 2; + } else { // Three byte code: 0x800 - 0xFFFF + b2 = utf8.charCodeAt(i + 1); + b3 = utf8.charCodeAt(i + 2); + s += String.fromCharCode(((b1 & 0xF) << 12) | + ((b2 & 0x3F) << 6) | + (b3 & 0x3F)); + i += 3; + } + } + return s; +} + +/* ENCODE_UTF8 -- Encode string as UTF8 only if it contains +a character of 0x9D (Unicode OPERATING +SYSTEM COMMAND) or a character greater +than 0xFF. This permits all strings +consisting exclusively of 8 bit +graphic characters to be encoded as +themselves. We choose 0x9D as the sentinel +character as opposed to one of the more +logical PRIVATE USE characters because 0x9D +is not overloaded by the regrettable +"Windows-1252" character set. Now such characters +don't belong in JavaScript strings, but you never +know what somebody is going to paste into a +text box, so this choice keeps Windows-encoded +strings from bloating to UTF-8 encoding. */ + +function encode_utf8(s) { + var i, necessary = false; + + for (i = 0; i < s.length; i++) { + if ((s.charCodeAt(i) == 0x9D) || + (s.charCodeAt(i) > 0xFF)) { + necessary = true; + break; + } + } + if (!necessary) { + return s; + } + return String.fromCharCode(0x9D) + unicode_to_utf8(s); +} + +/* DECODE_UTF8 -- Decode a string encoded with encode_utf8 +above. If the string begins with the +sentinel character 0x9D (OPERATING +SYSTEM COMMAND), then we decode the +balance as a UTF-8 stream. Otherwise, +the string is output unchanged, as +it's guaranteed to contain only 8 bit +characters excluding 0x9D. */ + +function decode_utf8(s) { + if ((s.length > 0) && (s.charCodeAt(0) == 0x9D)) { + return utf8_to_unicode(s.substring(1)); + } + return s; +} + +/* md5.js*/ + +/* +* md5.jvs 1.0b 27/06/96 +* +* Javascript implementation of the RSA Data Security, Inc. MD5 +* Message-Digest Algorithm. +* +* Copyright (c) 1996 Henri Torgemane. All Rights Reserved. +* +* Permission to use, copy, modify, and distribute this software +* and its documentation for any purposes and without +* fee is hereby granted provided that this copyright notice +* appears in all copies. +* +* Of course, this soft is provided "as is" without express or implied +* warranty of any kind. + +This version contains some trivial reformatting modifications +by John Walker. + +*/ + +function array(n) { + for (i = 0; i < n; i++) { + this[i] = 0; + } + this.length = n; +} + +/* Some basic logical functions had to be rewritten because of a bug in +* Javascript.. Just try to compute 0xffffffff >> 4 with it.. +* Of course, these functions are slower than the original would be, but +* at least, they work! +*/ + +function integer(n) { + return n % (0xffffffff + 1); +} + +function shr(a, b) { + a = integer(a); + b = integer(b); + if (a - 0x80000000 >= 0) { + a = a % 0x80000000; + a >>= b; + a += 0x40000000 >> (b - 1); + } else { + a >>= b; + } + return a; +} + +function shl1(a) { + a = a % 0x80000000; + if (a & 0x40000000 == 0x40000000) { + a -= 0x40000000; + a *= 2; + a += 0x80000000; + } else { + a *= 2; + } + return a; +} + +function shl(a, b) { + a = integer(a); + b = integer(b); + for (var i = 0; i < b; i++) { + a = shl1(a); + } + return a; +} + +function and(a, b) { + a = integer(a); + b = integer(b); + var t1 = a - 0x80000000; + var t2 = b - 0x80000000; + if (t1 >= 0) { + if (t2 >= 0) { + return ((t1 & t2) + 0x80000000); + } else { + return (t1 & b); + } + } else { + if (t2 >= 0) { + return (a & t2); + } else { + return (a & b); + } + } +} + +function or(a, b) { + a = integer(a); + b = integer(b); + var t1 = a - 0x80000000; + var t2 = b - 0x80000000; + if (t1 >= 0) { + if (t2 >= 0) { + return ((t1 | t2) + 0x80000000); + } else { + return ((t1 | b) + 0x80000000); + } + } else { + if (t2 >= 0) { + return ((a | t2) + 0x80000000); + } else { + return (a | b); + } + } +} + +function xor(a, b) { + a = integer(a); + b = integer(b); + var t1 = a - 0x80000000; + var t2 = b - 0x80000000; + if (t1 >= 0) { + if (t2 >= 0) { + return (t1 ^ t2); + } else { + return ((t1 ^ b) + 0x80000000); + } + } else { + if (t2 >= 0) { + return ((a ^ t2) + 0x80000000); + } else { + return (a ^ b); + } + } +} + +function not(a) { + a = integer(a); + return 0xffffffff - a; +} + +/* Here begin the real algorithm */ + +var state = new array(4); +var count = new array(2); +count[0] = 0; +count[1] = 0; +var buffer = new array(64); +var transformBuffer = new array(16); +var digestBits = new array(16); + +var S11 = 7; +var S12 = 12; +var S13 = 17; +var S14 = 22; +var S21 = 5; +var S22 = 9; +var S23 = 14; +var S24 = 20; +var S31 = 4; +var S32 = 11; +var S33 = 16; +var S34 = 23; +var S41 = 6; +var S42 = 10; +var S43 = 15; +var S44 = 21; + +function F(x, y, z) { + return or(and(x, y), and(not(x), z)); +} + +function G(x, y, z) { + return or(and(x, z), and(y, not(z))); +} + +function H(x, y, z) { + return xor(xor(x, y), z); +} + +function I(x, y, z) { + return xor(y, or(x, not(z))); +} + +function rotateLeft(a, n) { + return or(shl(a, n), (shr(a, (32 - n)))); +} + +function FF(a, b, c, d, x, s, ac) { + a = a + F(b, c, d) + x + ac; + a = rotateLeft(a, s); + a = a + b; + return a; +} + +function GG(a, b, c, d, x, s, ac) { + a = a + G(b, c, d) + x + ac; + a = rotateLeft(a, s); + a = a + b; + return a; +} + +function HH(a, b, c, d, x, s, ac) { + a = a + H(b, c, d) + x + ac; + a = rotateLeft(a, s); + a = a + b; + return a; +} + +function II(a, b, c, d, x, s, ac) { + a = a + I(b, c, d) + x + ac; + a = rotateLeft(a, s); + a = a + b; + return a; +} + +function transform(buf, offset) { + var a = 0, b = 0, c = 0, d = 0; + var x = transformBuffer; + + a = state[0]; + b = state[1]; + c = state[2]; + d = state[3]; + + for (i = 0; i < 16; i++) { + x[i] = and(buf[i * 4 + offset], 0xFF); + for (j = 1; j < 4; j++) { + x[i] += shl(and(buf[i * 4 + j + offset], 0xFF), j * 8); + } + } + + /* Round 1 */ + a = FF(a, b, c, d, x[0], S11, 0xd76aa478); /* 1 */ + d = FF(d, a, b, c, x[1], S12, 0xe8c7b756); /* 2 */ + c = FF(c, d, a, b, x[2], S13, 0x242070db); /* 3 */ + b = FF(b, c, d, a, x[3], S14, 0xc1bdceee); /* 4 */ + a = FF(a, b, c, d, x[4], S11, 0xf57c0faf); /* 5 */ + d = FF(d, a, b, c, x[5], S12, 0x4787c62a); /* 6 */ + c = FF(c, d, a, b, x[6], S13, 0xa8304613); /* 7 */ + b = FF(b, c, d, a, x[7], S14, 0xfd469501); /* 8 */ + a = FF(a, b, c, d, x[8], S11, 0x698098d8); /* 9 */ + d = FF(d, a, b, c, x[9], S12, 0x8b44f7af); /* 10 */ + c = FF(c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */ + b = FF(b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */ + a = FF(a, b, c, d, x[12], S11, 0x6b901122); /* 13 */ + d = FF(d, a, b, c, x[13], S12, 0xfd987193); /* 14 */ + c = FF(c, d, a, b, x[14], S13, 0xa679438e); /* 15 */ + b = FF(b, c, d, a, x[15], S14, 0x49b40821); /* 16 */ + + /* Round 2 */ + a = GG(a, b, c, d, x[1], S21, 0xf61e2562); /* 17 */ + d = GG(d, a, b, c, x[6], S22, 0xc040b340); /* 18 */ + c = GG(c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */ + b = GG(b, c, d, a, x[0], S24, 0xe9b6c7aa); /* 20 */ + a = GG(a, b, c, d, x[5], S21, 0xd62f105d); /* 21 */ + d = GG(d, a, b, c, x[10], S22, 0x2441453); /* 22 */ + c = GG(c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */ + b = GG(b, c, d, a, x[4], S24, 0xe7d3fbc8); /* 24 */ + a = GG(a, b, c, d, x[9], S21, 0x21e1cde6); /* 25 */ + d = GG(d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */ + c = GG(c, d, a, b, x[3], S23, 0xf4d50d87); /* 27 */ + b = GG(b, c, d, a, x[8], S24, 0x455a14ed); /* 28 */ + a = GG(a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */ + d = GG(d, a, b, c, x[2], S22, 0xfcefa3f8); /* 30 */ + c = GG(c, d, a, b, x[7], S23, 0x676f02d9); /* 31 */ + b = GG(b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */ + + /* Round 3 */ + a = HH(a, b, c, d, x[5], S31, 0xfffa3942); /* 33 */ + d = HH(d, a, b, c, x[8], S32, 0x8771f681); /* 34 */ + c = HH(c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */ + b = HH(b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */ + a = HH(a, b, c, d, x[1], S31, 0xa4beea44); /* 37 */ + d = HH(d, a, b, c, x[4], S32, 0x4bdecfa9); /* 38 */ + c = HH(c, d, a, b, x[7], S33, 0xf6bb4b60); /* 39 */ + b = HH(b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */ + a = HH(a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */ + d = HH(d, a, b, c, x[0], S32, 0xeaa127fa); /* 42 */ + c = HH(c, d, a, b, x[3], S33, 0xd4ef3085); /* 43 */ + b = HH(b, c, d, a, x[6], S34, 0x4881d05); /* 44 */ + a = HH(a, b, c, d, x[9], S31, 0xd9d4d039); /* 45 */ + d = HH(d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */ + c = HH(c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */ + b = HH(b, c, d, a, x[2], S34, 0xc4ac5665); /* 48 */ + + /* Round 4 */ + a = II(a, b, c, d, x[0], S41, 0xf4292244); /* 49 */ + d = II(d, a, b, c, x[7], S42, 0x432aff97); /* 50 */ + c = II(c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */ + b = II(b, c, d, a, x[5], S44, 0xfc93a039); /* 52 */ + a = II(a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */ + d = II(d, a, b, c, x[3], S42, 0x8f0ccc92); /* 54 */ + c = II(c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */ + b = II(b, c, d, a, x[1], S44, 0x85845dd1); /* 56 */ + a = II(a, b, c, d, x[8], S41, 0x6fa87e4f); /* 57 */ + d = II(d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */ + c = II(c, d, a, b, x[6], S43, 0xa3014314); /* 59 */ + b = II(b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */ + a = II(a, b, c, d, x[4], S41, 0xf7537e82); /* 61 */ + d = II(d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */ + c = II(c, d, a, b, x[2], S43, 0x2ad7d2bb); /* 63 */ + b = II(b, c, d, a, x[9], S44, 0xeb86d391); /* 64 */ + + state[0] += a; + state[1] += b; + state[2] += c; + state[3] += d; + +} + +function md5_init() { + count[0] = count[1] = 0; + state[0] = 0x67452301; + state[1] = 0xefcdab89; + state[2] = 0x98badcfe; + state[3] = 0x10325476; + for (i = 0; i < digestBits.length; i++) { + digestBits[i] = 0; + } +} + +function md5_update(b) { + var index, i; + + index = and(shr(count[0], 3), 0x3F); + if (count[0] < 0xFFFFFFFF - 7) { + count[0] += 8; + } else { + count[1]++; + count[0] -= 0xFFFFFFFF + 1; + count[0] += 8; + } + buffer[index] = and(b, 0xff); + if (index >= 63) { + transform(buffer, 0); + } +} + +function md5_finish() { + var bits = new array(8); + var padding; + var i = 0, index = 0, padLen = 0; + + for (i = 0; i < 4; i++) { + bits[i] = and(shr(count[0], (i * 8)), 0xFF); + } + for (i = 0; i < 4; i++) { + bits[i + 4] = and(shr(count[1], (i * 8)), 0xFF); + } + index = and(shr(count[0], 3), 0x3F); + padLen = (index < 56) ? (56 - index) : (120 - index); + padding = new array(64); + padding[0] = 0x80; + for (i = 0; i < padLen; i++) { + md5_update(padding[i]); + } + for (i = 0; i < 8; i++) { + md5_update(bits[i]); + } + + for (i = 0; i < 4; i++) { + for (j = 0; j < 4; j++) { + digestBits[i * 4 + j] = and(shr(state[i], (j * 8)), 0xFF); + } + } +} + +/* End of the MD5 algorithm */ + + +/* armour.js */ + +// Varieties of ASCII armour for binary data + +var maxLineLength = 64; // Maximum line length for armoured text + +/* Hexadecimal Armour + +A message is encoded in Hexadecimal armour by expressing its +bytes as a hexadecimal string which is prefixed by a sentinel +of "?HX?" and suffixed by "?H", then broken into lines no +longer than maxLineLength. Armoured messages use lower case +letters for digits with decimal values of 0 through 15, but +either upper or lower case letters are accepted when decoding +a message. The hexadecimal to byte array interconversion +routines in aes.js do most of the heavy lifting here. */ + +var hexSentinel = "?HX?", hexEndSentinel = "?H"; + +// Encode byte array in hexadecimal armour + +function armour_hex(b) { + var h = hexSentinel + byteArrayToHex(b) + hexEndSentinel; + var t = ""; + while (h.length > maxLineLength) { + //dump("h.length", h.length); + t += h.substring(0, maxLineLength) + "\n"; + h = h.substring(maxLineLength, h.length); + } + //dump("h.final_length", h.length); + t += h + "\n"; + return t; +} + +/* Decode string in hexadecimal armour to byte array. If the +string supplied contains a start and/or end sentinel, +only characters within the sentinels will be decoded. +Non-hexadecimal digits are silently ignored, which +automatically handles line breaks. We might want to +diagnose invalid characters as opposed to ignoring them. */ + +function disarm_hex(s) { + var hexDigits = "0123456789abcdefABCDEF"; + var hs = "", i; + + // Extract hexadecimal data between sentinels, if present + + if ((i = s.indexOf(hexSentinel)) >= 0) { + s = s.substring(i + hexSentinel.length, s.length); + } + if ((i = s.indexOf(hexEndSentinel)) >= 0) { + s = s.substring(0, i); + } + + // Assemble string of valid hexadecimal digits + + for (i = 0; i < s.length; i++) { + var c = s.charAt(i); + if (hexDigits.indexOf(c) >= 0) { + hs += c; + } + } + //dump("hs", hs); + return hexToByteArray(hs); +} + +/* Codegroup Armour + +Codegroup armour encodes a byte string into a sequence of five +letter code groups like spies used in the good old days. The +first group of a message is always "ZZZZZ" and the last "YYYYY"; +the decoding process ignores any text outside these start and +end sentinels. Bytes are encoded as two letters in the range +"A" to "X", each encoding four bits of the byte. Encoding uses +a pseudorandomly generated base letter and wraps around modulo +24 to spread encoded letters evenly through the alphabet. (This +refinement is purely aesthetic; the base letter sequence is +identical for all messages and adds no security. If the message +does not fill an even number of five letter groups, the last +group is padded to five letters with "Z" characters, which are +ignored when decoding. */ + +var acgcl, acgt, acgg; + +// Output next codegroup, flushing current line if it's full + +function armour_cg_outgroup() { + if (acgcl.length > maxLineLength) { + acgt += acgcl + "\n"; + acgcl = ""; + } + if (acgcl.length > 0) { + acgcl += " "; + } + acgcl += acgg; + acgg = ""; +} + +/* Add a letter to the current codegroup, emitting it when +it reaches five letters. */ + +function armour_cg_outletter(l) { + if (acgg.length >= 5) { + armour_cg_outgroup(); + } + acgg += l; +} + +var codegroupSentinel = "ZZZZZ"; + +function armour_codegroup(b) { + var charBase = ("A").charCodeAt(0); + + acgcl = codegroupSentinel; + acgt = ""; + acgg = ""; + + var cgrng = new LEcuyer(0xbadf00d); + for (i = 0; i < b.length; i++) { + var r = cgrng.nextInt(23); + armour_cg_outletter(String.fromCharCode(charBase + ((((b[i] >> 4) & 0xF)) + r) % 24)); + r = cgrng.nextInt(23); + armour_cg_outletter(String.fromCharCode(charBase + ((((b[i] & 0xF)) + r) % 24))); + } + delete cgrng; + + // Generate nulls to fill final codegroup if required + + while (acgg.length < 5) { + armour_cg_outletter("Z"); + } + armour_cg_outgroup(); + + // Append terminator group + + acgg = "YYYYY"; + armour_cg_outgroup(); + + // Flush last line + + acgt += acgcl + "\n"; + + return acgt; +} + +var dcgs, dcgi; + +/* Obtain next "significant" character from message. Characters +other than letters are silently ignored; both lower and upper +case letters are accepted. */ + +function disarm_cg_insig() { + while (dcgi < dcgs.length) { + var c = dcgs.charAt(dcgi++).toUpperCase(); + if ((c >= "A") && (c <= "Z")) { + //dump("c", c); + return c; + } + } + return ""; +} + +// Decode a message in codegroup armour + +function disarm_codegroup(s) { + var b = new Array(); + var nz = 0, ba, bal = 0, c; + + dcgs = s; + dcgi = 0; + + // Search for initial group of "ZZZZZ" + + while (nz < 5) { + c = disarm_cg_insig(); + + if (c == "Z") { + nz++; + } else if (c == "") { + nz = 0; + break; + } else { + nz = 0; + } + } + + if (nz == 0) { + alert("No codegroup starting symbol found in message."); + return ""; + } + + /* Decode letter pairs from successive groups + and assemble into bytes. */ + + var charBase = ("A").charCodeAt(0); + var cgrng = new LEcuyer(0xbadf00d); + for (nz = 0; nz < 2; ) { + c = disarm_cg_insig(); + //dump("c", c); + + if ((c == "Y") || (c == "")) { + break; + } else if (c != "Z") { + var r = cgrng.nextInt(23); + var n = c.charCodeAt(0) - charBase; + n = (n + (24 - r)) % 24; + //dump("n", n); + if (nz == 0) { + ba = (n << 4); + nz++; + } else { + ba |= n; + b[bal++] = ba; + nz = 0; + } + } + } + delete cgrng; + + /* Ponder how we escaped from the decoder loop and + issue any requisite warnings. */ + + var kbo = " Attempting decoding with data received."; + if (nz != 0) { + alert("Codegroup data truncated." + kbo); + } else { + if (c == "Y") { + nz = 1; + while (nz < 5) { + c = disarm_cg_insig(); + if (c != "Y") { + break; + } + nz++; + } + if (nz != 5) { + alert("Codegroup end group incomplete." + kbo); + } + } else { + alert("Codegroup end group missing." + kbo); + } + } + + return b; +} + +/* Base64 Armour + +Base64 armour encodes a byte array as described in RFC 1341. Sequences +of three bytes are encoded into groups of four characters from a set +of 64 consisting of the upper and lower case letters, decimal digits, +and the special characters "+" and "/". If the input is not a multiple +of three characters, the end of the message is padded with one or two +"=" characters to indicate its actual length. We prefix the armoured +message with "?b64" and append "?64b" to the end; if one or both +of these sentinels are present, text outside them is ignored. You can +suppress the generation of sentinels in armour by setting base64addsent +false before calling armour_base64. */ + + +var base64code = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", + base64sent = "?b64", base64esent = "?64b", base64addsent = true; + +function armour_base64(b) { + var b64t = ""; + var b64l = base64addsent ? base64sent : ""; + + var i; + for (i = 0; i <= b.length - 3; i += 3) { + if ((b64l.length + 4) > maxLineLength) { + b64t += b64l + "\n"; + b64l = ""; + } + b64l += base64code.charAt(b[i] >> 2); + b64l += base64code.charAt(((b[i] & 3) << 4) | (b[i + 1] >> 4)); + b64l += base64code.charAt(((b[i + 1] & 0xF) << 2) | (b[i + 2] >> 6)); + b64l += base64code.charAt(b[i + 2] & 0x3F); + } + + //dump("b.length", b.length); dump("i", i); dump("(b.length - i)", (b.length - i)); + if ((b.length - i) == 1) { + b64l += base64code.charAt(b[i] >> 2); + b64l += base64code.charAt(((b[i] & 3) << 4)); + b64l += "=="; + } else if ((b.length - i) == 2) { + b64l += base64code.charAt(b[i] >> 2); + b64l += base64code.charAt(((b[i] & 3) << 4) | (b[i + 1] >> 4)); + b64l += base64code.charAt(((b[i + 1] & 0xF) << 2)); + b64l += "="; + } + + if ((b64l.length + 4) > maxLineLength) { + b64t += b64l + "\n"; + b64l = ""; + } + if (base64addsent) { + b64l += base64esent; + } + b64t += b64l + "\n"; + return b64t; +} + +function disarm_base64(s) { + var b = new Array(); + var i = 0, j, c, shortgroup = 0, n = 0; + var d = new Array(); + + if ((j = s.indexOf(base64sent)) >= 0) { + s = s.substring(j + base64sent.length, s.length); + } + if ((j = s.indexOf(base64esent)) >= 0) { + s = s.substring(0, j); + } + + /* Ignore any non-base64 characters before the encoded + data stream and skip the type sentinel if present. */ + + while (i < s.length) { + if (base64code.indexOf(s.charAt(i)) != -1) { + break; + } + i++; + } + + /* Decode the base64 data stream. The decoder is + terminated by the end of the input string or + the occurrence of the explicit end sentinel. */ + + while (i < s.length) { + for (j = 0; j < 4; ) { + if (i >= s.length) { + if (j > 0) { + alert("Base64 cipher text truncated."); + return b; + } + break; + } + c = base64code.indexOf(s.charAt(i)); + if (c >= 0) { + d[j++] = c; + } else if (s.charAt(i) == "=") { + d[j++] = 0; + shortgroup++; + } else if (s.substring(i, i + base64esent.length) == base64esent) { + //dump("s.substring(i, i + base64esent.length)", s.substring(i, i + base64esent.length)); + //dump("esent", i); + i = s.length; + continue; + } else { + //dump("s.substring(i, i + base64esent.length)", s.substring(i, i + base64esent.length)); + //dump("usent", i); + // Might improve diagnosis of improper character in else clause here + } + i++; + } + //dump("d0", d[0]); dump("d1", d[1]); dump("d2", d[2]); dump("d3", d[3]); + //dump("shortgroup", shortgroup); + //dump("n", n); + if (j == 4) { + b[n++] = ((d[0] << 2) | (d[1] >> 4)) & 0xFF; + if (shortgroup < 2) { + b[n++] = ((d[1] << 4) | (d[2] >> 2)) & 0xFF; + //dump("(d[1] << 4) | (d[2] >> 2)", (d[1] << 4) | (d[2] >> 2)); + if (shortgroup < 1) { + b[n++] = ((d[2] << 6) | d[3]) & 0xFF; + } + } + } + } + return b; +} + + +/*aes.js */ + +/* rijndael.js Rijndael Reference Implementation + +This is a modified version of the software described below, +produced in September 2003 by John Walker for use in the +JavsScrypt browser-based encryption package. The principal +changes are replacing the original getRandomBytes function with +one which calls our pseudorandom generator (which must +be instantiated and seeded before the first call on getRandomBytes), +and changing keySizeInBits to 256. Some code not required by the +JavsScrypt application has been commented out. Please see +http://www.fourmilab.ch/javascrypt/ for further information on +JavaScrypt. + +The following is the original copyright and application +information. + +Copyright (c) 2001 Fritz Schneider + +This software is provided as-is, without express or implied warranty. +Permission to use, copy, modify, distribute or sell this software, with or +without fee, for any purpose and by any individual or organization, is hereby +granted, provided that the above copyright notice and this paragraph appear +in all copies. Distribution as a part of an application or binary must +include the above copyright notice in the documentation and/or other materials +provided with the application or distribution. + +As the above disclaimer notes, you are free to use this code however you +want. However, I would request that you send me an email +(fritz /at/ cs /dot/ ucsd /dot/ edu) to say hi if you find this code useful +or instructional. Seeing that people are using the code acts as +encouragement for me to continue development. If you *really* want to thank +me you can buy the book I wrote with Thomas Powell, _JavaScript: +_The_Complete_Reference_ :) + +This code is an UNOPTIMIZED REFERENCE implementation of Rijndael. +If there is sufficient interest I can write an optimized (word-based, +table-driven) version, although you might want to consider using a +compiled language if speed is critical to your application. As it stands, +one run of the monte carlo test (10,000 encryptions) can take up to +several minutes, depending upon your processor. You shouldn't expect more +than a few kilobytes per second in throughput. + +Also note that there is very little error checking in these functions. +Doing proper error checking is always a good idea, but the ideal +implementation (using the instanceof operator and exceptions) requires +IE5+/NS6+, and I've chosen to implement this code so that it is compatible +with IE4/NS4. + +And finally, because JavaScript doesn't have an explicit byte/char data +type (although JavaScript 2.0 most likely will), when I refer to "byte" +in this code I generally mean "32 bit integer with value in the interval +[0,255]" which I treat as a byte. + +See http://www-cse.ucsd.edu/~fritz/rijndael.html for more documentation +of the (very simple) API provided by this code. + +Fritz Schneider +fritz at cs.ucsd.edu + +*/ + + +// Rijndael parameters -- Valid values are 128, 192, or 256 + +var keySizeInBits = 256; +var blockSizeInBits = 128; + +// +// Note: in the following code the two dimensional arrays are indexed as +// you would probably expect, as array[row][column]. The state arrays +// are 2d arrays of the form state[4][Nb]. + + +// The number of rounds for the cipher, indexed by [Nk][Nb] +var roundsArray = [, , , , [, , , , 10, , 12, , 14], , + [, , , , 12, , 12, , 14], , + [, , , , 14, , 14, , 14]]; + +// The number of bytes to shift by in shiftRow, indexed by [Nb][row] +var shiftOffsets = [, , , , [, 1, 2, 3], , [, 1, 2, 3], , [, 1, 3, 4]]; + +// The round constants used in subkey expansion +var Rcon = [ +0x01, 0x02, 0x04, 0x08, 0x10, 0x20, +0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, +0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, +0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, +0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91]; + +// Precomputed lookup table for the SBox +var SBox = [ + 99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171, +118, 202, 130, 201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, +114, 192, 183, 253, 147, 38, 54, 63, 247, 204, 52, 165, 229, 241, 113, +216, 49, 21, 4, 199, 35, 195, 24, 150, 5, 154, 7, 18, 128, 226, +235, 39, 178, 117, 9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214, +179, 41, 227, 47, 132, 83, 209, 0, 237, 32, 252, 177, 91, 106, 203, +190, 57, 74, 76, 88, 207, 208, 239, 170, 251, 67, 77, 51, 133, 69, +249, 2, 127, 80, 60, 159, 168, 81, 163, 64, 143, 146, 157, 56, 245, +188, 182, 218, 33, 16, 255, 243, 210, 205, 12, 19, 236, 95, 151, 68, +23, 196, 167, 126, 61, 100, 93, 25, 115, 96, 129, 79, 220, 34, 42, +144, 136, 70, 238, 184, 20, 222, 94, 11, 219, 224, 50, 58, 10, 73, + 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121, 231, 200, 55, 109, +141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8, 186, 120, 37, + 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138, 112, 62, +181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158, 225, +248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, 223, +140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187, + 22]; + +// Precomputed lookup table for the inverse SBox +var SBoxInverse = [ + 82, 9, 106, 213, 48, 54, 165, 56, 191, 64, 163, 158, 129, 243, 215, +251, 124, 227, 57, 130, 155, 47, 255, 135, 52, 142, 67, 68, 196, 222, +233, 203, 84, 123, 148, 50, 166, 194, 35, 61, 238, 76, 149, 11, 66, +250, 195, 78, 8, 46, 161, 102, 40, 217, 36, 178, 118, 91, 162, 73, +109, 139, 209, 37, 114, 248, 246, 100, 134, 104, 152, 22, 212, 164, 92, +204, 93, 101, 182, 146, 108, 112, 72, 80, 253, 237, 185, 218, 94, 21, + 70, 87, 167, 141, 157, 132, 144, 216, 171, 0, 140, 188, 211, 10, 247, +228, 88, 5, 184, 179, 69, 6, 208, 44, 30, 143, 202, 63, 15, 2, +193, 175, 189, 3, 1, 19, 138, 107, 58, 145, 17, 65, 79, 103, 220, +234, 151, 242, 207, 206, 240, 180, 230, 115, 150, 172, 116, 34, 231, 173, + 53, 133, 226, 249, 55, 232, 28, 117, 223, 110, 71, 241, 26, 113, 29, + 41, 197, 137, 111, 183, 98, 14, 170, 24, 190, 27, 252, 86, 62, 75, +198, 210, 121, 32, 154, 219, 192, 254, 120, 205, 90, 244, 31, 221, 168, + 51, 136, 7, 199, 49, 177, 18, 16, 89, 39, 128, 236, 95, 96, 81, +127, 169, 25, 181, 74, 13, 45, 229, 122, 159, 147, 201, 156, 239, 160, +224, 59, 77, 174, 42, 245, 176, 200, 235, 187, 60, 131, 83, 153, 97, + 23, 43, 4, 126, 186, 119, 214, 38, 225, 105, 20, 99, 85, 33, 12, +125]; + +// This method circularly shifts the array left by the number of elements +// given in its parameter. It returns the resulting array and is used for +// the ShiftRow step. Note that shift() and push() could be used for a more +// elegant solution, but they require IE5.5+, so I chose to do it manually. + +function cyclicShiftLeft(theArray, positions) { + var temp = theArray.slice(0, positions); + theArray = theArray.slice(positions).concat(temp); + return theArray; +} + +// Cipher parameters ... do not change these +var Nk = keySizeInBits / 32; +var Nb = blockSizeInBits / 32; +var Nr = roundsArray[Nk][Nb]; + +// Multiplies the element "poly" of GF(2^8) by x. See the Rijndael spec. + +function xtime(poly) { + poly <<= 1; + return ((poly & 0x100) ? (poly ^ 0x11B) : (poly)); +} + +// Multiplies the two elements of GF(2^8) together and returns the result. +// See the Rijndael spec, but should be straightforward: for each power of +// the indeterminant that has a 1 coefficient in x, add y times that power +// to the result. x and y should be bytes representing elements of GF(2^8) + +function mult_GF256(x, y) { + var bit, result = 0; + + for (bit = 1; bit < 256; bit *= 2, y = xtime(y)) { + if (x & bit) + result ^= y; + } + return result; +} + +// Performs the substitution step of the cipher. State is the 2d array of +// state information (see spec) and direction is string indicating whether +// we are performing the forward substitution ("encrypt") or inverse +// substitution (anything else) + +function byteSub(state, direction) { + var S; + if (direction == "encrypt") // Point S to the SBox we're using + S = SBox; + else + S = SBoxInverse; + for (var i = 0; i < 4; i++) // Substitute for every byte in state + for (var j = 0; j < Nb; j++) + state[i][j] = S[state[i][j]]; +} + +// Performs the row shifting step of the cipher. + +function shiftRow(state, direction) { + for (var i = 1; i < 4; i++) // Row 0 never shifts + if (direction == "encrypt") + state[i] = cyclicShiftLeft(state[i], shiftOffsets[Nb][i]); + else + state[i] = cyclicShiftLeft(state[i], Nb - shiftOffsets[Nb][i]); + +} + +// Performs the column mixing step of the cipher. Most of these steps can +// be combined into table lookups on 32bit values (at least for encryption) +// to greatly increase the speed. + +function mixColumn(state, direction) { + var b = []; // Result of matrix multiplications + for (var j = 0; j < Nb; j++) { // Go through each column... + for (var i = 0; i < 4; i++) { // and for each row in the column... + if (direction == "encrypt") + b[i] = mult_GF256(state[i][j], 2) ^ // perform mixing + mult_GF256(state[(i + 1) % 4][j], 3) ^ + state[(i + 2) % 4][j] ^ + state[(i + 3) % 4][j]; + else + b[i] = mult_GF256(state[i][j], 0xE) ^ + mult_GF256(state[(i + 1) % 4][j], 0xB) ^ + mult_GF256(state[(i + 2) % 4][j], 0xD) ^ + mult_GF256(state[(i + 3) % 4][j], 9); + } + for (var i = 0; i < 4; i++) // Place result back into column + state[i][j] = b[i]; + } +} + +// Adds the current round key to the state information. Straightforward. + +function addRoundKey(state, roundKey) { + for (var j = 0; j < Nb; j++) { // Step through columns... + state[0][j] ^= (roundKey[j] & 0xFF); // and XOR + state[1][j] ^= ((roundKey[j] >> 8) & 0xFF); + state[2][j] ^= ((roundKey[j] >> 16) & 0xFF); + state[3][j] ^= ((roundKey[j] >> 24) & 0xFF); + } +} + +// This function creates the expanded key from the input (128/192/256-bit) +// key. The parameter key is an array of bytes holding the value of the key. +// The returned value is an array whose elements are the 32-bit words that +// make up the expanded key. + +function keyExpansion(key) { + var expandedKey = new Array(); + var temp; + + // in case the key size or parameters were changed... + Nk = keySizeInBits / 32; + Nb = blockSizeInBits / 32; + Nr = roundsArray[Nk][Nb]; + + for (var j = 0; j < Nk; j++) // Fill in input key first + expandedKey[j] = + (key[4 * j]) | (key[4 * j + 1] << 8) | (key[4 * j + 2] << 16) | (key[4 * j + 3] << 24); + + // Now walk down the rest of the array filling in expanded key bytes as + // per Rijndael's spec + for (j = Nk; j < Nb * (Nr + 1); j++) { // For each word of expanded key + temp = expandedKey[j - 1]; + if (j % Nk == 0) + temp = ((SBox[(temp >> 8) & 0xFF]) | + (SBox[(temp >> 16) & 0xFF] << 8) | + (SBox[(temp >> 24) & 0xFF] << 16) | + (SBox[temp & 0xFF] << 24)) ^ Rcon[Math.floor(j / Nk) - 1]; + else if (Nk > 6 && j % Nk == 4) + temp = (SBox[(temp >> 24) & 0xFF] << 24) | + (SBox[(temp >> 16) & 0xFF] << 16) | + (SBox[(temp >> 8) & 0xFF] << 8) | + (SBox[temp & 0xFF]); + expandedKey[j] = expandedKey[j - Nk] ^ temp; + } + return expandedKey; +} + +// Rijndael's round functions... + +function Round(state, roundKey) { + byteSub(state, "encrypt"); + shiftRow(state, "encrypt"); + mixColumn(state, "encrypt"); + addRoundKey(state, roundKey); +} + +function InverseRound(state, roundKey) { + addRoundKey(state, roundKey); + mixColumn(state, "decrypt"); + shiftRow(state, "decrypt"); + byteSub(state, "decrypt"); +} + +function FinalRound(state, roundKey) { + byteSub(state, "encrypt"); + shiftRow(state, "encrypt"); + addRoundKey(state, roundKey); +} + +function InverseFinalRound(state, roundKey) { + addRoundKey(state, roundKey); + shiftRow(state, "decrypt"); + byteSub(state, "decrypt"); +} + +// encrypt is the basic encryption function. It takes parameters +// block, an array of bytes representing a plaintext block, and expandedKey, +// an array of words representing the expanded key previously returned by +// keyExpansion(). The ciphertext block is returned as an array of bytes. + +function encrypt(block, expandedKey) { + var i; + if (!block || block.length * 8 != blockSizeInBits) + return; + if (!expandedKey) + return; + + block = packBytes(block); + addRoundKey(block, expandedKey); + for (i = 1; i < Nr; i++) + Round(block, expandedKey.slice(Nb * i, Nb * (i + 1))); + FinalRound(block, expandedKey.slice(Nb * Nr)); + return unpackBytes(block); +} + +// decrypt is the basic decryption function. It takes parameters +// block, an array of bytes representing a ciphertext block, and expandedKey, +// an array of words representing the expanded key previously returned by +// keyExpansion(). The decrypted block is returned as an array of bytes. + +function decrypt(block, expandedKey) { + var i; + if (!block || block.length * 8 != blockSizeInBits) + return; + if (!expandedKey) + return; + + block = packBytes(block); + InverseFinalRound(block, expandedKey.slice(Nb * Nr)); + for (i = Nr - 1; i > 0; i--) + InverseRound(block, expandedKey.slice(Nb * i, Nb * (i + 1))); + addRoundKey(block, expandedKey); + return unpackBytes(block); +} + +/* !NEEDED +// This method takes a byte array (byteArray) and converts it to a string by +// applying String.fromCharCode() to each value and concatenating the result. +// The resulting string is returned. Note that this function SKIPS zero bytes +// under the assumption that they are padding added in formatPlaintext(). +// Obviously, do not invoke this method on raw data that can contain zero +// bytes. It is really only appropriate for printable ASCII/Latin-1 +// values. Roll your own function for more robust functionality :) + +function byteArrayToString(byteArray) { +var result = ""; +for(var i=0; i "10ff". The function returns a +// string. + +function byteArrayToHex(byteArray) { + var result = ""; + if (!byteArray) + return; + for (var i = 0; i < byteArray.length; i++) + result += ((byteArray[i] < 16) ? "0" : "") + byteArray[i].toString(16); + + return result; +} + +// This function converts a string containing hexadecimal digits to an +// array of bytes. The resulting byte array is filled in the order the +// values occur in the string, for example "10FF" --> [16, 255]. This +// function returns an array. + +function hexToByteArray(hexString) { + var byteArray = []; + if (hexString.length % 2) // must have even length + return; + if (hexString.indexOf("0x") == 0 || hexString.indexOf("0X") == 0) + hexString = hexString.substring(2); + for (var i = 0; i < hexString.length; i += 2) + byteArray[Math.floor(i / 2)] = parseInt(hexString.slice(i, i + 2), 16); + return byteArray; +} + +// This function packs an array of bytes into the four row form defined by +// Rijndael. It assumes the length of the array of bytes is divisible by +// four. Bytes are filled in according to the Rijndael spec (starting with +// column 0, row 0 to 3). This function returns a 2d array. + +function packBytes(octets) { + var state = new Array(); + if (!octets || octets.length % 4) + return; + + state[0] = new Array(); state[1] = new Array(); + state[2] = new Array(); state[3] = new Array(); + for (var j = 0; j < octets.length; j += 4) { + state[0][j / 4] = octets[j]; + state[1][j / 4] = octets[j + 1]; + state[2][j / 4] = octets[j + 2]; + state[3][j / 4] = octets[j + 3]; + } + return state; +} + +// This function unpacks an array of bytes from the four row format preferred +// by Rijndael into a single 1d array of bytes. It assumes the input "packed" +// is a packed array. Bytes are filled in according to the Rijndael spec. +// This function returns a 1d array of bytes. + +function unpackBytes(packed) { + var result = new Array(); + for (var j = 0; j < packed[0].length; j++) { + result[result.length] = packed[0][j]; + result[result.length] = packed[1][j]; + result[result.length] = packed[2][j]; + result[result.length] = packed[3][j]; + } + return result; +} + +// This function takes a prospective plaintext (string or array of bytes) +// and pads it with pseudorandom bytes if its length is not a multiple of the block +// size. If plaintext is a string, it is converted to an array of bytes +// in the process. The type checking can be made much nicer using the +// instanceof operator, but this operator is not available until IE5.0 so I +// chose to use the heuristic below. + +function formatPlaintext(plaintext) { + var bpb = blockSizeInBits / 8; // bytes per block + var i; + + // if primitive string or String instance + if ((!((typeof plaintext == "object") && + ((typeof (plaintext[0])) == "number"))) && + ((typeof plaintext == "string") || plaintext.indexOf)) { + plaintext = plaintext.split(""); + // Unicode issues here (ignoring high byte) + for (i = 0; i < plaintext.length; i++) + plaintext[i] = plaintext[i].charCodeAt(0) & 0xFF; + } + + i = plaintext.length % bpb; + if (i > 0) { + plaintext = plaintext.concat(getRandomBytes(bpb - i)); + } + + return plaintext; +} + +// Returns an array containing "howMany" random bytes. + +function getRandomBytes(howMany) { + var i, bytes = new Array(); + + for (i = 0; i < howMany; i++) { + bytes[i] = prng.nextInt(255); + } + return bytes; +} + +// rijndaelEncrypt(plaintext, key, mode) +// Encrypts the plaintext using the given key and in the given mode. +// The parameter "plaintext" can either be a string or an array of bytes. +// The parameter "key" must be an array of key bytes. If you have a hex +// string representing the key, invoke hexToByteArray() on it to convert it +// to an array of bytes. The third parameter "mode" is a string indicating +// the encryption mode to use, either "ECB" or "CBC". If the parameter is +// omitted, ECB is assumed. +// +// An array of bytes representing the cihpertext is returned. To convert +// this array to hex, invoke byteArrayToHex() on it. + +function rijndaelEncrypt(plaintext, key, mode) { + var expandedKey, i, aBlock; + var bpb = blockSizeInBits / 8; // bytes per block + var ct; // ciphertext + + if (!plaintext || !key) + return; + if (key.length * 8 != keySizeInBits) + return; + if (mode == "CBC") { + ct = getRandomBytes(bpb); // get IV + //dump("IV", byteArrayToHex(ct)); + } else { + mode = "ECB"; + ct = new Array(); + } + + // convert plaintext to byte array and pad with zeros if necessary. + plaintext = formatPlaintext(plaintext); + + expandedKey = keyExpansion(key); + + for (var block = 0; block < plaintext.length / bpb; block++) { + aBlock = plaintext.slice(block * bpb, (block + 1) * bpb); + if (mode == "CBC") { + for (var i = 0; i < bpb; i++) { + aBlock[i] ^= ct[(block * bpb) + i]; + } + } + ct = ct.concat(encrypt(aBlock, expandedKey)); + } + + return ct; +} + +// rijndaelDecrypt(ciphertext, key, mode) +// Decrypts the using the given key and mode. The parameter "ciphertext" +// must be an array of bytes. The parameter "key" must be an array of key +// bytes. If you have a hex string representing the ciphertext or key, +// invoke hexToByteArray() on it to convert it to an array of bytes. The +// parameter "mode" is a string, either "CBC" or "ECB". +// +// An array of bytes representing the plaintext is returned. To convert +// this array to a hex string, invoke byteArrayToHex() on it. To convert it +// to a string of characters, you can use byteArrayToString(). + +function rijndaelDecrypt(ciphertext, key, mode) { + var expandedKey; + var bpb = blockSizeInBits / 8; // bytes per block + var pt = new Array(); // plaintext array + var aBlock; // a decrypted block + var block; // current block number + + if (!ciphertext || !key || typeof ciphertext == "string") + return; + if (key.length * 8 != keySizeInBits) + return; + if (!mode) { + mode = "ECB"; // assume ECB if mode omitted + } + + expandedKey = keyExpansion(key); + + // work backwards to accomodate CBC mode + for (block = (ciphertext.length / bpb) - 1; block > 0; block--) { + aBlock = + decrypt(ciphertext.slice(block * bpb, (block + 1) * bpb), expandedKey); + if (mode == "CBC") + for (var i = 0; i < bpb; i++) + pt[(block - 1) * bpb + i] = aBlock[i] ^ ciphertext[(block - 1) * bpb + i]; + else + pt = aBlock.concat(pt); + } + + // do last block if ECB (skips the IV in CBC) + if (mode == "ECB") + pt = decrypt(ciphertext.slice(0, bpb), expandedKey).concat(pt); + + return pt; +} + + + +Decrypt_text(); \ No newline at end of file diff --git a/MovieFinder.Scraper/ImageScrapperService.cs b/MovieFinder.Scraper/ImageScrapperService.cs new file mode 100644 index 0000000000000000000000000000000000000000..7092511ee8ecc10a3b8413bf067e2cc5aa8172db --- /dev/null +++ b/MovieFinder.Scraper/ImageScrapperService.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using MovieFinder.Data; +using System.Net; +using System.IO; + +namespace MovieFinder.Scraper +{ + public class ImageScrapperService + { + + public void Run(string imagePath) + { + using (var db = new MovieFinderEntities()) + { + while (!IsCancelled) + { + //var movies = db.Movies + // .Where(x => x.ImageUrl != null && x.ImageLocalUrl == null) + // .OrderByDescending(x => x.ID) + // .Take(100).ToList(); + //if (movies.Count == 0) + // return; + foreach (var m in db.Movies + .Where(x => x.ImageUrl != null && x.ImageLocalUrl == null) + .OrderByDescending(x => x.ID)) + { + if (IsCancelled) + return; + if(CopyImageToLocal(m, imagePath)) + db.SaveChanges(); + } + } + + } + } + + public bool CopyImageToLocal(Movie movie, string imagePath) + { + using (var client = new WebClient()) + { + try + { + var downloadPath = Path.Combine(imagePath, movie.ReleaseDate.Year.ToString()); + if (!Directory.Exists(downloadPath)) + Directory.CreateDirectory(downloadPath); + downloadPath = Path.Combine(downloadPath, movie.UniqueID); + var fileBytes = client.DownloadData(movie.ImageUrl); + + var fileType = client.ResponseHeaders[HttpResponseHeader.ContentType]; + + if (fileType != null) + { + switch (fileType) + { + case "image/gif": + downloadPath += ".gif"; + break; + case "image/png": + downloadPath += ".png"; + break; + default: + downloadPath += ".jpg"; + break; + } + + File.WriteAllBytes(downloadPath, fileBytes); + } + else + { + + } + movie.ImageLocalUrl = downloadPath.Split(new string[] { imagePath }, StringSplitOptions.RemoveEmptyEntries)[0]; + return true; + } + catch (Exception ex) + { + File.AppendAllText("log.txt", String.Format("{0}{1}", ex.ToString(), Environment.NewLine)); + } + } + return false; + } + + public bool IsCancelled { get; set; } + } +} diff --git a/MovieFinder.Scraper/MovieDetailsScrapers/ABCMalayalam.cs b/MovieFinder.Scraper/MovieDetailsScrapers/ABCMalayalam.cs new file mode 100644 index 0000000000000000000000000000000000000000..414d1d20b32f949e169c3693f7ba3942ceb79781 --- /dev/null +++ b/MovieFinder.Scraper/MovieDetailsScrapers/ABCMalayalam.cs @@ -0,0 +1,246 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using CsQuery; +using System.Diagnostics; +using System.Text.RegularExpressions; +using System.IO; + +namespace MovieFinder.Scraper +{ + public class ABCMalayalam : MovieDetailsScraperBase + { + + public override string RootUrl + { + get { return "http://abcmalayalam.com"; } + } + + public override List ScrapeMovies(List skipUrls, List years = null) + { + + try + { + + var dom = GotoUrl(RootUrl); + if (years == null) + years = new List(); + + //loop through each year + var elems = SelectItems(dom, "#s5_right_top_wrap li a"); + for (var i = elems.Count - 1; i >= 0; i--) + { + try + { + var elem = elems[i]; + int year = 0; + try + { + year = Convert.ToInt32(Regex.Replace(ReadText(elem), "[^0-9.]", "")); + } + catch { } + if (year == 0 ||( years.Count > 0 && !years.Any(x => x == year))) + continue; + //goto first page + var urls = new List(); + var t = ReadAttribute(elem, "href"); + if (t.StartsWith("http")) + urls.Add(t); + else + urls.Add(RootUrl + t); + + try + { + dom = GotoUrl(urls[0]); + } + catch { continue; } + + //select remianign pages for the year + var pages = SelectItems(dom, ".k2Pagination a"); + foreach (var page in pages) + { + var u = RootUrl + ReadAttribute(page, "href"); + if (!urls.Contains(u)) + urls.Add(u); + } + + for (var j = urls.Count - 1; j >= 0; j--) + { + try + { + dom = GotoUrl(urls[j]); + } + catch { continue; } + if (!GetMovies(year, dom, skipUrls)) + return allMovies; + } + } + catch { } + + } + + } + catch (Exception ex) + { + + //throw; + } + return allMovies; + } + + + private bool GetMovies(int year, CQ dom, List skipUrls) + { + var items = SelectItems(dom, ".itemList a"); + if (items.Count == 0) + { + Debug.Assert(false, "No movies"); + } + for (var i = items.Count - 1; i >= 0; i--) + { + var elem1 = items[i]; + var movieUrl = RootUrl + ReadAttribute(elem1, "href"); + OnNotify(new NotificationEventArgs("Processing " + movieUrl + ". Year: " + year.ToString())); + if (allMovies.Any(x => x.PageUrl == movieUrl) ) + continue; + try + { + dom = GotoUrl(movieUrl); + } + catch { continue; } + + var links = SelectItems(dom, ".itemIntroText table a"); + if (links.Count == 0) + links = SelectItems(dom, "div.itemFullText a"); + if (links.Count == 0) + links = SelectItems(dom, ".avPlayerBlock iframe"); + + if (links.Count > 0) + { + var movie = new ScrapedMovie(this); + movie.ReleasedDate = new DateTime(year, 1, 1); + movie.LangCode = "ml"; + movie.Language = "Malayalam"; + movie.Name = ReadText(SelectItems(dom, ".itemTitle")[0]).Replace("\n", "").Replace("\t", ""); + + try + { + try + { + movie.Description = ReadText(SelectItems(dom, ".itemIntroText p")[0]); + } + catch + { + try + { + movie.Description = ReadText(SelectItems(dom, ".itemIntroText")[0]); + } + catch{ + var spans = SelectItems(dom, ".typeTextfield span"); + if (spans.Count > 0) + { + movie.Description = String.Empty; + foreach (var span in spans) + movie.Description += span.InnerText; + } + } + } + if (movie.Description != null) + movie.Description = movie.Description.Replace("\n", "").Replace("\t", ""); + } + catch { } + try + { + var a = SelectItems(dom, ".itemIntroText p img").FirstOrDefault(); + if(a == null) + a = SelectItems(dom, ".itemImage a img").FirstOrDefault(); + if (a == null) + a = SelectItems(dom, ".itemIntroText img").FirstOrDefault(); + if(a == null) + a = SelectItems(dom, ".itemIntroText span img").FirstOrDefault(); + if (a != null) + movie.ImageUrl = RootUrl + ReadAttribute(a, "src"); + } + catch { } + movie.PageUrl = movieUrl; + + + + allMovies.Add(movie); + foreach (var link in links) + { + string linkUrl = null; + try + { + linkUrl = ReadAttribute(link, "href"); + } + catch { + try + { + linkUrl = ReadAttribute(link, "src"); + } + catch { } + } + if (IgnoreLink(linkUrl)) + continue; + var host = GetScrapper(linkUrl); + if (host != null) + { + if (skipUrls.Any(x => x == linkUrl)) + continue; + try + { + linkUrl = host.SanitizeUrl(linkUrl); + } + catch { continue; } + if (skipUrls.Any(x => x == linkUrl)) + continue; + + MovieTube.Client.Scraper.ScraperResult result = MovieTube.Client.Scraper.ScraperResult.Success; + try + { + result = MovieTube.Client.Scraper.VideoScraperBase.ValidateUrl(linkUrl); + } + catch { } + if (result != MovieTube.Client.Scraper.ScraperResult.VideoDoesNotExist) + movie.Links.Add(new ScrapedMovieLink(linkUrl, host.ID, link.InnerText)); + } + else + { + OnScraperNotFound(new ScraperNotFound(linkUrl, movie.PageUrl)); + } + } + + if (movie.Links.Count > 0) + { + var args = new MovieFoundEventArgs(movie); + OnMovieFound(args); + + } + if (this.stop) + return false; + } + else + { + } + } + return true; + } + + public override string ID + { + get { return "abc"; } + } + + public override string Title + { + get { return "ABC"; } + } + + public override ImagePriorityRank ImagePriority + { + get { return ImagePriorityRank.ABC; } + } + } +} diff --git a/MovieFinder.Scraper/MovieDetailsScrapers/ApnaView.cs b/MovieFinder.Scraper/MovieDetailsScrapers/ApnaView.cs new file mode 100644 index 0000000000000000000000000000000000000000..adb3d085c37bfbba27117ee2f701305d04b16eea --- /dev/null +++ b/MovieFinder.Scraper/MovieDetailsScrapers/ApnaView.cs @@ -0,0 +1,221 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using CsQuery; +using System.Diagnostics; +using System.IO; + +namespace MovieFinder.Scraper +{ + + + public class ApnaView : MovieDetailsScraperBase + { + private List HindiRootLinks = new List(); + private List TamilRootLinks = new List(); + private List TeluguRootLinks = new List(); + + + public ApnaView() + { + for(var i = 2; i > 0; i--) + HindiRootLinks.Add("http://apnaview.com/browse/hindi?page=" + i); + for (var i = 2; i > 0; i--) + TamilRootLinks.Add("http://apnaview.com/tamil/tamil?page=" + i); + for (var i = 2; i > 0; i--) + TeluguRootLinks.Add("http://apnaview.com/telugu/telugu?page=" + i); + + } + + public override List ScrapeMovies( List skipUrls, List years = null) + { + DoScrapeMovies(HindiRootLinks,"hi", skipUrls, years); + DoScrapeMovies(TamilRootLinks,"ta", skipUrls, years); + DoScrapeMovies(TeluguRootLinks,"te", skipUrls, years); + return allMovies; + } + + private List DoScrapeMovies(List links, string langCode, List skipUrls, List years = null) + { + if (years == null) + years = new List(); + + + foreach (var entry in links) + { + var dom = GotoUrl(entry); + var movies = SelectItems(dom, ".movie"); + foreach (var m in movies) + { + try + { + var movie = new ScrapedMovie(this); + allMovies.Add(movie); + movie.PageUrl = "http://apnaview.com" + m.FirstElementChild.Attributes["href"]; + var children = m.FirstElementChild.ChildElements.ToList(); + movie.ReleasedDate = new DateTime(Convert.ToInt32(children[2].InnerText), 1, 1); + OnNotify(new NotificationEventArgs("Processing " + movie.PageUrl + ". Year: " + movie.ReleasedDate.Year.ToString())); + movie.LangCode = langCode; + movie.Name = children[1].InnerText; + if(children[0].Attributes["src"].Contains("/img")) + movie.ImageUrl = "http://apnaview.com" + children[0].Attributes["src"]; + + dom = GotoUrl(movie.PageUrl); + var vids = SelectItems(dom, ".table.table-bordered tbody tr"); + foreach (var vid in vids) + { + try + { + var vidLinks = vid.ChildElements.ToList()[1].ChildElements.ToList(); + foreach (var vl in vidLinks) + { + + var linkUrl = vl.Attributes["href"]; + if (GetScrapper(linkUrl) == null) + { + linkUrl = String.Empty; + dom = GotoUrl(vl.Attributes["href"]); + try + { + linkUrl = SelectItem(dom, ".videoplayer iframe").Attributes["src"]; + } + catch { } + try + { + if (String.IsNullOrWhiteSpace(linkUrl)) + linkUrl = SelectItem(dom, ".videoplayer embed").Attributes["src"]; + } + catch { } + } + + if (IgnoreLink(linkUrl)) + continue; + + try + { + var host = GetScrapper(linkUrl); + if (host != null) + { + if (skipUrls.Any(x => x == linkUrl)) + continue; + linkUrl = host.SanitizeUrl(linkUrl); + + if (skipUrls.Any(x => x == linkUrl)) + continue; + + MovieTube.Client.Scraper.ScraperResult result = MovieTube.Client.Scraper.ScraperResult.Success; + try + { + result = MovieTube.Client.Scraper.VideoScraperBase.ValidateUrl(linkUrl); + } + catch { } + + if (result != MovieTube.Client.Scraper.ScraperResult.Success && + result != MovieTube.Client.Scraper.ScraperResult.VideoDoesNotExist) + { + var k = 0; + } + if (result != MovieTube.Client.Scraper.ScraperResult.VideoDoesNotExist) + { + var name = vl.InnerText.Trim(); + movie.Links.Add(new ScrapedMovieLink(linkUrl, host.ID, name)); + } + } + else + { + OnScraperNotFound(new ScraperNotFound(linkUrl, movie.PageUrl)); + } + } + catch { } + } + } + catch { } + } + if (movie.Links.Count > 0) + { + var args = new MovieFoundEventArgs(movie); + OnMovieFound(args); + + } + if (this.stop) + return allMovies; + } + catch { } + } + } + + + return allMovies; + } + + private string FixTitle(string title) + { + var org = title; + if (title.ToLower().StartsWith("watch")) + title = title.Replace("watch", "").Replace("Watch", ""); + var index = -1; + var keywords = new List{ + "dvd", + "tamil", + "movie", + "3d", + " tc", + "rip", + "online", + "watch", + "good", + "quality", + "lotus" + }; + + for (var i = 0; i < title.Length; i++) + { + var c = title[i]; + if (!char.IsLetter(c) && c != ' ') + { + if (char.IsDigit(c) && !char.IsDigit(title[i + 1]) && !char.IsDigit(title[i + 2])) + continue; + else + { + index = i; + break; + } + } + } + + foreach (var kw in keywords) + { + var ind = title.ToLower().IndexOf(kw); + if ((ind > -1 && ind < index) || index == -1) + index = ind; + } + if (index > -1) + title = title.Substring(0, index); + return title.Trim(); + } + + public override string RootUrl + { + get { return "http://www.apnaview.com"; } + } + + public override string ID + { + get { return "apv"; } + } + + public override string Title + { + get { return "apv"; } + } + + public override ImagePriorityRank ImagePriority + { + get { return ImagePriorityRank.ApnaView; } + } + } + + +} diff --git a/MovieFinder.Scraper/MovieDetailsScrapers/Einthusan.cs b/MovieFinder.Scraper/MovieDetailsScrapers/Einthusan.cs new file mode 100644 index 0000000000000000000000000000000000000000..f9b102428b0077bb38fa7033a0bb644a2ff389d1 --- /dev/null +++ b/MovieFinder.Scraper/MovieDetailsScrapers/Einthusan.cs @@ -0,0 +1,123 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using CsQuery; +using System.Diagnostics; + +namespace MovieFinder.Scraper +{ + + + + + public class Einthusan : MovieDetailsScraperBase + { + private Dictionary RootLinks = new Dictionary(); + + public Einthusan() + { + RootLinks.Add("http://www.einthusan.com/movies/index.php?lang=hindi&organize=Year", "hi"); + RootLinks.Add("http://www.einthusan.com/movies/index.php?lang=malayalam&organize=Year", "ml"); + RootLinks.Add("http://www.einthusan.com/movies/index.php?lang=tamil&organize=Year", "ta"); + RootLinks.Add(" http://www.einthusan.com/movies/index.php?lang=telugu&organize=Year", "te"); + } + + public override List ScrapeMovies(List skipUrls, List years = null) + { + if (years == null) + years = new List(); + try + { + foreach (var entry in RootLinks) + { + var dom = GotoUrl(entry.Key, 3); + + var elems = SelectItems(dom, ".video-organizer-element-wrapper a"); + for (var i = elems.Count - 1; i >= 0; i--) + { + try + { + var elem = elems[i]; + int year; + Int32.TryParse(elem.InnerText, out year); + + if (years.Count > 0 && !years.Any(x => x == year)) + continue; + + dom = GotoUrl(new Uri(new Uri(entry.Key), ReadAttribute(elem, "href")).AbsoluteUri, 3); + + if (!Int32.TryParse((Regex.Replace(ReadText(SelectItems(dom, ".filter-selected").First()), "[^0-9.]", "")), out year)) + continue; + if (year.ToString().Length != 4) + continue; + + if (years.Count > 0 && !years.Any(x => x == year)) + continue; + + foreach (var el in SelectItems(dom, ".numerical-nav a")) + { + try + { + dom = GotoUrl(new Uri(new Uri(entry.Key), ReadAttribute(el, "href")).AbsoluteUri, 3); + foreach (var subElem in SelectItems(dom, ".video-object-wrapper")) + { + try + { + dom = CQ.Create(subElem); + var movie = new ScrapedMovie(this); + var e = dom.Select(".movie-title").Elements.First(); + movie.PageUrl = new Uri(new Uri(RootUrl), ReadAttribute(e, "href").Replace("..", "")).AbsoluteUri; + OnNotify(new NotificationEventArgs("Processing " + movie.PageUrl + ". Year: " + year.ToString())); + if (skipUrls.Any(x => x == movie.PageUrl)) + continue; + movie.ImageUrl = ReadAttribute(dom.Select(".video-object-thumb img").Elements.First(), "src"); + movie.ReleasedDate = new DateTime(year, 1, 1); + movie.LangCode = entry.Value; + movie.Description = ReadText(dom.Select(".desc_body").Elements.First()).Replace("-", ""); + movie.Name = ReadText(e).Replace("\n", "").Replace("\t", ""); + movie.Name = Regex.Replace(movie.Name, @"\s*?(?:\(.*?\)|\[.*?\]|\{.*?\})", String.Empty); + movie.Links.Add(new ScrapedMovieLink(movie.PageUrl, "einthusan.com", "With Subtitles")); + allMovies.Add(movie); + var args = new MovieFoundEventArgs(movie); + OnMovieFound(args); + if (this.stop) + return allMovies; + } + catch { } + } + } + catch { } + } + } + catch { } + } + } + } + catch { } + return allMovies; + } + public override string RootUrl + { + get { return "http://www.einthusan.com/"; } + } + + public override string ID + { + get { return "eih"; } + } + + public override string Title + { + get { return "EIH"; } + } + + public override ImagePriorityRank ImagePriority + { + get { return ImagePriorityRank.EIH; } + } + } + + +} diff --git a/MovieFinder.Scraper/MovieDetailsScrapers/Hindi4ULink.cs b/MovieFinder.Scraper/MovieDetailsScrapers/Hindi4ULink.cs new file mode 100644 index 0000000000000000000000000000000000000000..ef9ab514e6a77fc5fd88f670937b0c07d6c6c00c --- /dev/null +++ b/MovieFinder.Scraper/MovieDetailsScrapers/Hindi4ULink.cs @@ -0,0 +1,277 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Diagnostics; +using Noesis.Javascript; +using System.IO; +using CsQuery; +using System.Threading.Tasks; + +namespace MovieFinder.Scraper +{ + public class Hindi4ULink : MovieDetailsScraperBase + { + + public override List ScrapeMovies(List skipUrls, List years = null) + { + var tasks = new List(); + try + { + var dom = GotoUrl(RootUrl); + if (years == null) + years = new List(); + + foreach (var elem in SelectItems(dom, ".tagcloud a")) + { + try + { + var year = Convert.ToInt32(Regex.Replace(ReadText(elem), "[^0-9.]", "")); + if (years.Count > 0 && !years.Any(x => x == year)) + continue; + var u = ReadAttribute(elem, "href"); + var d = GotoUrl(u); + tasks.Add(Task.Factory.StartNew(() => ScrapThread(d, year, u,skipUrls))); + } + catch { } + } + } + catch { } + + Task.WaitAll(tasks.ToArray()); + return allMovies; + } + + private void ScrapThread(CQ dom, int year,string startUrl, List skipUrls) + { + var last = SelectItem(dom, ".wp-pagenavi > .last"); + var lasthRef = ReadAttribute(last, "href"); + var pos = lasthRef.LastIndexOf('/'); + var lastIndex = Int32.Parse( lasthRef.Substring(pos + 1, lasthRef.Length - pos -1) ); + var urls = new List(); + + var urlTemplate = lasthRef.Substring(0, pos); + for (var i = lastIndex; i > 1; i--) + urls.Add(String.Format("{0}/{1}", urlTemplate, i)); + urls.Add(startUrl); + + + foreach(var url in urls) + { + + try + { + + dom = GotoUrl(url); + var elems = SelectItems(dom, "a.clip-link"); + for (var i = elems.Count - 1; i >= 0; i--) + { + try + { + var subElem = elems[i]; + var movie = new ScrapedMovie(this); + movie.PageUrl = ReadAttribute(subElem, "href"); + OnNotify(new NotificationEventArgs("Processing " + movie.PageUrl + ". Year: " + year.ToString())); + if (movie.PageUrl.ToLower().Contains("-in-hindi") || + movie.PageUrl.ToLower().Contains("-hindi.")) + continue; + + dom = GotoUrl(movie.PageUrl); + + + movie.ReleasedDate = new DateTime(year, 1, 1); + movie.LangCode = "hi"; + movie.Language = "Hindi"; + movie.Description = String.Empty; + movie.Name = ReadText(SelectItem(dom, ".entry-title")).Replace("\n", "").Replace("\t", ""); + try + { + var descElems = SelectItems(dom, ".entry-content p"); + //var descs = descElems.Count > 5 ? descElems.Skip(3) : descElems.Skip(2); + foreach (var p in descElems) + { + if (!p.InnerHTML.Contains("")) + { + var t = ReadText(p); + movie.Description += ReadText(p) + Environment.NewLine; + } + else + { + break; + } + } + if (String.IsNullOrWhiteSpace(movie.Description)) + movie.Description = String.Empty; + } + catch { } + + var imgElems = SelectItems(dom, "#thumb img"); + + if (imgElems.Count == 0) + { + Debug.WriteLine("No Image: " + movie.PageUrl); + } + else + movie.ImageUrl = ReadAttribute(imgElems[0], "src"); + allMovies.Add(movie); + + //links + var linkPages = SelectItems(dom, ".entry-content p a.external"); + + foreach (var l in linkPages) + { + var pageUrl = ReadAttribute(l, "href"); + string linkUrl = ""; + if (pageUrl.Contains("filmshowonline.net")) + { + continue; + dom = GotoUrl(pageUrl); + + IDomElement item = null; + var attrib = "src"; + if (dom.Document.Body.InnerHTML.Contains("id=\"cipher\"")) + { + var html = DecryptLink(ReadAttribute(SelectItem(dom, "#key"), "value"), + ReadAttribute(SelectItem(dom, "#cipher"), "value")); + var doc = CsQuery.CQ.CreateDocument(html); + item = SelectItem(doc, "iframe"); + if (item == null) + item = SelectItem(doc, "embed"); + if (item == null) + { + item = SelectItems(doc, "object param").FirstOrDefault(x => x.Attributes["name"] == "movie"); + if (item != null) + attrib = "value"; + } + if (html.Contains("flashvars")) + { + html = System.Web.HttpUtility.UrlDecode(html); + linkUrl = System.Web.HttpUtility.UrlDecode(SubstringBetween(html, "&url=", "&")); + } + } + + if (item == null) + item = SelectItems(dom, "center embed").FirstOrDefault(x => x.HasAttribute("allowfullscreen")); + if (item == null) + item = SelectItems(dom, "center iframe").FirstOrDefault(x => x.HasAttribute("allowfullscreen")); + + + if (item == null) + { + OnScraperNotFound(new ScraperNotFound("No Link", pageUrl)); + continue; + } + if (String.IsNullOrWhiteSpace(linkUrl)) + linkUrl = ReadAttribute(item, attrib); + } + else if (pageUrl.Contains("www.veoh.com/download")) + { + continue; + } + else + linkUrl = pageUrl; + + if (IgnoreLink(linkUrl)) + continue; + + + try + { + var host = GetScrapper(linkUrl); + if (host != null) + { + if (skipUrls.Any(x => x == linkUrl)) + continue; + linkUrl = host.SanitizeUrl(linkUrl); + if (skipUrls.Any(x => x == linkUrl)) + continue; + if (!movie.Links.Any(x => x.DownloadUrl.ToLower() == linkUrl.ToLower())) + { + MovieTube.Client.Scraper.ScraperResult result = MovieTube.Client.Scraper.ScraperResult.Success; + try + { + result = MovieTube.Client.Scraper.VideoScraperBase.ValidateUrl(linkUrl); + } + catch { } + if (result != MovieTube.Client.Scraper.ScraperResult.VideoDoesNotExist) + movie.Links.Add(new ScrapedMovieLink(linkUrl, host.ID, l.InnerText)); + } + } + else + { + OnScraperNotFound(new ScraperNotFound(linkUrl, pageUrl)); + } + } + catch (Exception ex) + { + OnScraperNotFound(new ScraperNotFound("Exception", ex.Message)); + } + } + if (movie.Links.Count > 0) + { + var args = new MovieFoundEventArgs(movie); + OnMovieFound(args); + + } + if (this.stop) + return; + } + catch (Exception ex) + { + OnScraperNotFound(new ScraperNotFound("Exception", ex.Message)); + } + } + } + catch (Exception ex) + { + OnScraperNotFound(new ScraperNotFound("Exception", ex.Message)); + } + } + + } + + + public string DecryptLink(string key, string cipher) + { + using (var context = new JavascriptContext()) + { + // context.SetParameter("Console", new SystemConsole()); + context.SetParameter("key", key); + context.SetParameter("cipher", cipher); + + + // Running the script + context.Run(File.ReadAllText("Hindi4ULink.js")); + + + // Getting a parameter + return context.GetParameter("decryptedText").ToString(); + } + } + + public override string RootUrl + { + get { return "http://www.hindilinks4u.to/"; } + } + + public override string ID + { + get { return "hl4u"; } + } + + public override string Title + { + get { return "HLFU"; } + } + + public override ImagePriorityRank ImagePriority + { + get + { + return ImagePriorityRank.HL4U; + } + } + + } +} diff --git a/MovieFinder.Scraper/MovieDetailsScrapers/India4movie.cs b/MovieFinder.Scraper/MovieDetailsScrapers/India4movie.cs new file mode 100644 index 0000000000000000000000000000000000000000..164147dcc498c35a074430f75b8dd75a47f8835c --- /dev/null +++ b/MovieFinder.Scraper/MovieDetailsScrapers/India4movie.cs @@ -0,0 +1,253 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using CsQuery; +using System.Diagnostics; +using System.IO; + +namespace MovieFinder.Scraper +{ + + + public class India4movie : MovieDetailsScraperBase + { + private Dictionary RootLinks = new Dictionary(); + + public India4movie() + { + RootLinks.Add("http://www.india4movie.com/category/telugu-movie-2013/", 2013); + RootLinks.Add("http://www.india4movie.com/category/telugu-movie-2014/", 2014); + + } + + public override List ScrapeMovies(List skipUrls, List years = null) + { + if (years == null) + years = new List(); + + foreach (var entry in RootLinks) + { + try + { + if (years.Count > 0 && !years.Any(x => x == entry.Value)) + continue; + int year = entry.Value; + var dom = GotoUrl(entry.Key); + var lastPage = SelectItem(dom, "a.last").Attributes["href"]; + int ix1 = lastPage.LastIndexOf('/'); + int ix2 = ix1 > 0 ? lastPage.LastIndexOf('/', ix1 - 1) : -1; + var count = Convert.ToInt32(lastPage.Substring(ix2 + 1, lastPage.Length - ix2 - 2)); + lastPage = lastPage.Substring(0, ix2 + 1); + var pageUrls = new List(); + for (var i = count; i >= 2; i--) + pageUrls.Add(lastPage + i.ToString() + "/"); + pageUrls.Add(entry.Key); + foreach (var elem in pageUrls) + { + try + { + dom = GotoUrl(elem); + var postBoxes = SelectItems(dom, "h2.title a"); + for (var j = postBoxes.Count - 1; j >= 0; j--) + { + try + { + var movie = new ScrapedMovie(this); + allMovies.Add(movie); + movie.PageUrl = ReadAttribute(postBoxes[j], "href"); + OnNotify(new NotificationEventArgs("Processing " + movie.PageUrl + ". Year: " + year.ToString())); + movie.LangCode = "te"; + movie.ReleasedDate = new DateTime(year, 1, 1); + dom = GotoUrl(movie.PageUrl); + movie.Name = FixTitle( SelectItem(dom, "h2.title").InnerText); + movie.ImageUrl = SelectItem(dom, "img.wp-post-image").Attributes["src"]; + try + { + movie.Description = SelectItems(dom, "div.entry p span")[1].InnerText; + } + catch + { + //try + //{ + // movie.Description = SelectItem(dom, ".textsection").InnerText; + //} + //catch { } + } + + var links = new Dictionary(); + var anchors = SelectItems(dom, "a"); + foreach (var anchor in anchors) + { + try + { + var url = anchor.Attributes["href"]; + if (GetScrapper(url) != null) + { + if(!links.ContainsKey(url)) + links.Add(url, anchor.InnerText.Replace(" ", "")); + } + if(url.Contains("http://www.power4link.us")) + { + dom = GotoUrl(url); + var frame = SelectItem(dom, "div.entry-content iframe"); + if (!links.ContainsKey(url)) + links.Add(frame.Attributes["src"], "Watch Online"); + } + } + catch { } + } + + var iframes = SelectItems(dom, "div.entry iframe"); + foreach (var iframe in iframes) + links.Add(iframe.Attributes["src"], "Watch Online"); + if (links.Count == 0) + { + var k = 0; + } + foreach (var l in links) + { + try + { + var linkUrl = l.Key; + if (IgnoreLink(linkUrl)) + continue; + + var host = GetScrapper(linkUrl); + if (host != null) + { + if (skipUrls.Any(x => x == linkUrl)) + continue; + linkUrl = host.SanitizeUrl(linkUrl); + + if (skipUrls.Any(x => x == linkUrl)) + continue; + + MovieTube.Client.Scraper.ScraperResult result = MovieTube.Client.Scraper.ScraperResult.Success; + try + { + result = MovieTube.Client.Scraper.VideoScraperBase.ValidateUrl(linkUrl); + } + catch { } + + if (result != MovieTube.Client.Scraper.ScraperResult.Success && + result != MovieTube.Client.Scraper.ScraperResult.VideoDoesNotExist) + { + var k = 0; + } + if (result != MovieTube.Client.Scraper.ScraperResult.VideoDoesNotExist) + { + var name = l.Value; + if (name.ToLower().Contains("part")) + { + var ind = name.IndexOf("part", StringComparison.InvariantCultureIgnoreCase); + name = "Watch " + name.Substring(ind, name.Length - ind); + } + else + name = "Watch Online"; + + movie.Links.Add(new ScrapedMovieLink(linkUrl, host.ID, name)); + } + } + else + { + OnScraperNotFound(new ScraperNotFound(linkUrl, movie.PageUrl)); + } + } + catch { } + + } + + + if (movie.Links.Count > 0) + { + var args = new MovieFoundEventArgs(movie); + OnMovieFound(args); + + } + if (this.stop) + return allMovies; + + } + catch { } + } + } + catch { } + + } + } + catch { } + } + return allMovies; + } + + private string FixTitle(string title) + { + var org = title; + if (title.ToLower().StartsWith("watch")) + title = title.Replace("watch","").Replace("Watch", ""); + var index = -1; + var keywords = new List{ + "dvd", + "tamil", + "movie", + "3d", + " tc", + "rip", + "online", + "watch", + "good", + "quality", + "lotus" + }; + + for (var i = 0; i < title.Length; i++) + { + var c = title[i]; + if (!char.IsLetter(c) && c != ' ') + { + if (char.IsDigit(c) && !char.IsDigit(title[i + 1]) && !char.IsDigit(title[i + 2])) + continue; + else + { + index = i; + break; + } + } + } + + foreach (var kw in keywords) + { + var ind = title.ToLower().IndexOf(kw); + if ((ind > -1 && ind < index) || index == -1) + index = ind; + } + if (index > -1) + title = title.Substring(0, index); + return title.Trim(); + } + + public override string RootUrl + { + get { return "http://www.india4movie.com"; } + } + + public override string ID + { + get { return "i4m"; } + } + + public override string Title + { + get { return "I4M"; } + } + + public override ImagePriorityRank ImagePriority + { + get { return ImagePriorityRank.I4M; } + } + } + + +} diff --git a/MovieFinder.Scraper/MovieDetailsScrapers/MovieDetailsScraperBase.cs b/MovieFinder.Scraper/MovieDetailsScrapers/MovieDetailsScraperBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..b1fa1b6f3e6f43d39de865607c15a2e65e850a24 --- /dev/null +++ b/MovieFinder.Scraper/MovieDetailsScrapers/MovieDetailsScraperBase.cs @@ -0,0 +1,135 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using MovieTube.Client.Scraper; +using MovieFinder.Data; + +namespace MovieFinder.Scraper +{ + public abstract class MovieDetailsScraperBase : ScraperBase + { + + protected bool stop; + public void Stop() + { + this.stop = true; + } + + public abstract List ScrapeMovies(List skipUrls, List years = null); + public static readonly List Scrappers = new List{ + new ABCMalayalam(), + new Einthusan(), + new Hindi4ULink(), + new ThriruttuVCD(), + new TamizhWS(), + new India4movie(), + new ApnaView() + }; + + protected List allMovies = new List(); + public event EventHandler MovieFound; + public event EventHandler ScraperNotFound; + public event EventHandler Notify; + + protected void OnMovieFound(MovieFoundEventArgs args) + { + if (MovieFound != null) + MovieFound(this, args); + } + + protected void OnScraperNotFound(ScraperNotFound args) + { + if (ScraperNotFound != null) + ScraperNotFound(this, args); + } + + protected void OnNotify(NotificationEventArgs args) + { + if (Notify != null) + Notify(this, args); + } + + protected VideoScraperBase GetScrapper(string url) + { + try + { + var scraper = VideoScraperBase.GetScraper(url); + return scraper; + } + catch { return null; } + + } + + protected bool IgnoreLink(string url) + { + return String.IsNullOrWhiteSpace(url) || + url.ToLower().Contains("royalvid.me") || + url.ToLower().Contains("docs.google.com") || + url.ToLower().Contains("livestream.com") || + url.ToLower().Contains("youku.com") || + url.ToLower().Contains("mightyupload.com") || + url.ToLower().Contains("abcmalayalam.com") || + url.ToLower().Contains("dailymotion.com") || + url.ToLower().Contains("embedr.com") || + url.ToLower().Contains("megavideo.com") || + url.ToLower().Contains("embed.trilulilu.ro") || + url.ToLower().Contains("purevid.com") || + url.ToLower().Contains("video.tt") || + url.ToLower().Contains("videobb.com") || + url.ToLower().Contains("videozer.com") || + url.ToLower().Contains("streamin.to") || + url.ToLower().Contains("google.com") || + url.ToLower().Contains("megaupload.com") || + url.ToLower().Contains("youtube.com/p/") || + url.ToLower().Contains("facebook.com"); + } + + + } + + public class MovieFoundEventArgs : EventArgs + { + public MovieFoundEventArgs(ScrapedMovie movie) + { + Movie = movie; + } + + public ScrapedMovie Movie { get; private set; } + } + + public class ScraperNotFound : EventArgs + { + public ScraperNotFound(string url, string pageUrl) + { + Url = url; + PageUrl = pageUrl; + } + + public string Url { get; private set; } + public string PageUrl { get; set; } + } + public class NotificationEventArgs : EventArgs + { + public NotificationEventArgs(string msg) + { + Message = msg; + } + + public string Message { get; set; } + } + + public enum ImagePriorityRank + { + ABC = 1, + ApnaView, + Tamizh, + TVCD, + HL4U, + I4M, + EIH + + } + + +} diff --git a/MovieFinder.Scraper/MovieDetailsScrapers/ScrapedMovie.cs b/MovieFinder.Scraper/MovieDetailsScrapers/ScrapedMovie.cs new file mode 100644 index 0000000000000000000000000000000000000000..4dbde67f66589304d6ce17f3d184a6b622e6c7a5 --- /dev/null +++ b/MovieFinder.Scraper/MovieDetailsScrapers/ScrapedMovie.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; + +namespace MovieFinder.Scraper +{ + public class ScrapedMovie + { + private string name; + private string description; + + public ScrapedMovie(ScraperBase scraper) + { + Links = new List(); + Scraper = scraper; + description = "No description available"; + } + public string ImageUrl { get; set; } + public DateTime ReleasedDate { get; set; } + public string Language { get; set; } + public string PageUrl { get; set; } + public string LangCode { get; set; } + public List Links { get; set; } + public ScraperBase Scraper { get; set; } + + public string Description + { + get { return description; } + set { description = value.Substring(0, Math.Min(value.Length, 1000)); } + } + public string Name + { + get + { + return name; + } + set + { + name = Regex.Replace(value, @"\s*?(?:\(.*?\)|\[.*?\]|\{.*?\})", String.Empty).Trim(); + } + } + + public string UniqueId + { + get + { + var rgx = new Regex("[^a-zA-Z0-9]"); + return String.Format("{0}-{1}-{2}", rgx.Replace(name, ""), ReleasedDate.Year, LangCode).ToLower(); + } + } + + } + + public class ScrapedMovieLink + { + public ScrapedMovieLink(string url, string site, string title = null) + { + DownloadUrl = url; + DownloadSiteID = site; + Title = title; + + } + public string DownloadUrl { get; private set; } + public string DownloadSiteID { get; private set; } + public string Title { get; private set; } + } +} diff --git a/MovieFinder.Scraper/MovieDetailsScrapers/TamizhWS.cs b/MovieFinder.Scraper/MovieDetailsScrapers/TamizhWS.cs new file mode 100644 index 0000000000000000000000000000000000000000..3b9f655c873460887ee6c414a917a72437c7ecc4 --- /dev/null +++ b/MovieFinder.Scraper/MovieDetailsScrapers/TamizhWS.cs @@ -0,0 +1,262 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using CsQuery; +using System.Diagnostics; +using System.IO; +using System.Net; + +namespace MovieFinder.Scraper +{ + + + public class TamizhWS : MovieDetailsScraperBase + { + + + public override List ScrapeMovies(List skipUrls, List years = null) + { + try + { + + var dom = GotoUrl(RootUrl); + if (years == null) + years = new List(); + + //loop through each year + var elems = SelectItems(dom, "#HTML5.widget div.widget-content a"); + + for (var i = elems.Count - 1; i >= 0; i--) + { + try + { + var elem = elems[i]; + int year = Convert.ToInt32(elem.InnerText.Trim()); + if (years.Count > 0 && !years.Any(x => x == year)) + continue; + var urls = new Stack(); + //goto year page + try + { + dom = GotoUrl(ReadAttribute(elem, "href")); + + while (true) //grab all links + { + var mUrls = SelectItems(dom, "div.blog-posts a").Skip(4).ToList(); + foreach (var mu in mUrls) + { + var h = ReadAttribute(mu, "href"); + if (urls.Contains(h)) + continue; + urls.Push(h); + } + if (mUrls.Count == 0) + break; + + dom = GotoUrl(ReadAttribute(SelectItem(dom, "#blog-pager-older-link a"), "href")); + } + } + catch { continue; } + + + while (urls.Count > 0) + { + string u = null; + try + { + u = urls.Pop(); + dom = GotoUrl(u); + var title = SelectItem(dom, ".post-title.entry-title a").InnerText; + ScrapedMovie movie = null; + try + { + movie = new ScrapedMovie(this) + { + PageUrl = u, + Description = title.Contains("-") ? title.Split('-')[1] : String.Empty, + Name = FixTitle(title.Contains("-") ? title.Split('-')[0] : title), + LangCode = "ta", + ReleasedDate = new DateTime(year, 1, 1), + ImageUrl = ReadAttribute(SelectItem(dom, "div.post-body.entry-content img"), "src") + + }; + } + catch + { + + } + OnNotify(new NotificationEventArgs("Processing " + movie.PageUrl + ". Year: " + year.ToString())); + allMovies.Add(movie); + foreach (var item in SelectItems(dom, ".fullpost a")) + { + + string linkUrl = null; + try + { + linkUrl = ReadAttribute(item, "href"); + if (linkUrl.Contains("links2sites")) + { + dom = GotoUrl(linkUrl); + try + { + linkUrl = ReadAttribute(SelectItem(dom, ".post-body.entry-content embed"), "src"); + } + catch + { + try + { + linkUrl = ReadAttribute(SelectItem(dom, ".post-body.entry-content iframe"), "src"); + } + catch { } + } + + } + + + if (IgnoreLink(linkUrl)) + continue; + + var host = GetScrapper(linkUrl); + if (host != null) + { + if (skipUrls.Any(x => x == linkUrl)) + continue; + linkUrl = host.SanitizeUrl(linkUrl); + + if (skipUrls.Any(x => x == linkUrl)) + continue; + skipUrls.Add(linkUrl); + + MovieTube.Client.Scraper.ScraperResult result = MovieTube.Client.Scraper.ScraperResult.Success; + try + { + result = MovieTube.Client.Scraper.VideoScraperBase.ValidateUrl(linkUrl); + } + catch { } + + if (result != MovieTube.Client.Scraper.ScraperResult.Success && + result != MovieTube.Client.Scraper.ScraperResult.VideoDoesNotExist) + { + var k = 0; + } + if (result != MovieTube.Client.Scraper.ScraperResult.VideoDoesNotExist) + movie.Links.Add(new ScrapedMovieLink(linkUrl, host.ID, "Watch Full Movie")); + } + else + { + OnScraperNotFound(new ScraperNotFound(linkUrl, movie.PageUrl)); + } + } + catch (WebException ex) + { + } + catch { } + } + + if (movie.Links.Count > 0) + { + var args = new MovieFoundEventArgs(movie); + OnMovieFound(args); + + } + if (this.stop) + return allMovies; + } + catch { } + } + } + catch { } + + } + + } + catch (Exception ex) + { + + //throw; + } + return allMovies; + } + + private string FixTitle(string title) + { + var org = title; + if (title.ToLower().StartsWith("watch")) + title = title.Replace("watch","").Replace("Watch", ""); + var index = -1; + if(title.StartsWith("(")) + { + title = title.Replace("(" + SubstringBetween(title, "(", ")") + ")", ""); + } + + var keywords = new List{ + "dvd", + "tamil", + "movie", + "3d", + " tc", + "rip", + "online", + "watch", + "good", + "quality", + "lotus" + }; + + var start = 0; + if (Char.IsDigit(title[0])) + start = 4; + for (var i = start; i < title.Length; i++) + { + var c = title[i]; + if (!char.IsLetter(c) && c != ' ') + { + if (char.IsDigit(c) && !char.IsDigit(title[i + 1]) && !char.IsDigit(title[i + 2])) + continue; + else + { + index = i; + break; + } + } + } + + foreach (var kw in keywords) + { + var ind = title.ToLower().IndexOf(kw); + if ((ind > -1 && ind < index) || index == -1) + index = ind; + } + if (index > -1) + title = title.Substring(0, index); + title = title.Trim(); + if (String.IsNullOrWhiteSpace(title)) + throw new Exception("No title"); + return title; + } + + public override string RootUrl + { + get { return "http://www.tamizh.ws/"; } + } + + public override string ID + { + get { return "tamizh"; } + } + + public override string Title + { + get { return "Tamizh"; } + } + + public override ImagePriorityRank ImagePriority + { + get { return ImagePriorityRank.Tamizh; } + } + } + + +} diff --git a/MovieFinder.Scraper/MovieDetailsScrapers/ThiruttuVCD.cs b/MovieFinder.Scraper/MovieDetailsScrapers/ThiruttuVCD.cs new file mode 100644 index 0000000000000000000000000000000000000000..b791f8c2d35290998e24b017f0d786c05dfe39f5 --- /dev/null +++ b/MovieFinder.Scraper/MovieDetailsScrapers/ThiruttuVCD.cs @@ -0,0 +1,230 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using CsQuery; +using System.Diagnostics; +using System.IO; + +namespace MovieFinder.Scraper +{ + + + public class ThriruttuVCD : MovieDetailsScraperBase + { + private Dictionary RootLinks = new Dictionary(); + + public ThriruttuVCD() + { + RootLinks.Add("http://www.thiruttuvcd.me/category/tamil-movies-online/watch-2009-movies/", 2009); + RootLinks.Add("http://www.thiruttuvcd.me/category/tamil-movies-online/watch-2010-movies/", 2010); + RootLinks.Add("http://www.thiruttuvcd.me/category/tamil-movies-online/watch-2011-movies/", 2011); + RootLinks.Add("http://www.thiruttuvcd.me/category/tamil-movies-online/2012-movies/", 2012); + RootLinks.Add("http://www.thiruttuvcd.me/category/tamil-movies-online/watch-new-tamil-movies-online/", 2013); + RootLinks.Add("http://www.thiruttuvcd.me/category/tamil-movies-online/2014-movies/", 2014); + + } + + public override List ScrapeMovies(List skipUrls, List years = null) + { + if (years == null) + years = new List(); + + foreach (var entry in RootLinks) + { + try + { + if (years.Count > 0 && !years.Any(x => x == entry.Value)) + continue; + int year = entry.Value; + var dom = GotoUrl(entry.Key); + + var elems = SelectItems(dom, ".wp-pagenavi a").Where(x => x.Attributes["class"] == "page larger" || x.Attributes["class"] == "page smaller").ToList(); + var pageUrls = new List(); + for (var i = elems.Count - 1; i >= 0; i--) + pageUrls.Add(new Uri(new Uri(entry.Key), ReadAttribute(elems[i], "href")).AbsoluteUri); + pageUrls.Add(entry.Key); + foreach (var elem in pageUrls) + { + try + { + dom = GotoUrl(elem); + var postBoxes = SelectItems(dom, ".boxentry a"); + for (var j = postBoxes.Count - 1; j >= 0; j--) + { + try + { + var pb = postBoxes[j]; + + var movie = new ScrapedMovie(this); + allMovies.Add(movie); + movie.PageUrl = ReadAttribute(pb, "href"); + OnNotify(new NotificationEventArgs("Processing " + movie.PageUrl + ". Year: " + year.ToString())); + movie.LangCode = "ta"; + movie.ReleasedDate = new DateTime(year, 1, 1); + var title = ReadAttribute(pb, "title"); + if (title.ToLower().Contains("dubbed")) + continue; + movie.Name = FixTitle(title); + movie.ImageUrl = pb.FirstElementChild.Attributes["src"]; + + dom = GotoUrl(movie.PageUrl); + try + { + //movie.Description = SelectItem(dom, "meta[name='description']").InnerText; + } + catch + { + //try + //{ + // movie.Description = SelectItem(dom, ".textsection").InnerText; + //} + //catch { } + } + var embedds = SelectItems(dom, ".videosection embed"); + var iframes = SelectItems(dom, ".videosection iframe"); + var links = new List(); + foreach (var emb in embedds) + links.Add(emb.Attributes["src"]); + foreach (var iframe in iframes) + links.Add(iframe.Attributes["src"]); + if (links.Count == 0) + { + var k = 0; + } + foreach (var l in links) + { + try + { + var linkUrl = l; + if (IgnoreLink(linkUrl)) + continue; + + var host = GetScrapper(linkUrl); + if (host != null) + { + if (skipUrls.Any(x => x == linkUrl)) + continue; + linkUrl = host.SanitizeUrl(linkUrl); + + if (skipUrls.Any(x => x == linkUrl)) + continue; + + MovieTube.Client.Scraper.ScraperResult result = MovieTube.Client.Scraper.ScraperResult.Success; + try + { + result = MovieTube.Client.Scraper.VideoScraperBase.ValidateUrl(linkUrl); + } + catch { } + + if (result != MovieTube.Client.Scraper.ScraperResult.Success && + result != MovieTube.Client.Scraper.ScraperResult.VideoDoesNotExist) + { + var k = 0; + } + if (result != MovieTube.Client.Scraper.ScraperResult.VideoDoesNotExist) + movie.Links.Add(new ScrapedMovieLink(linkUrl, host.ID, "Watch Full Movie")); + } + else + { + OnScraperNotFound(new ScraperNotFound(linkUrl, movie.PageUrl)); + } + } + catch { } + + } + + + if (movie.Links.Count > 0) + { + var args = new MovieFoundEventArgs(movie); + OnMovieFound(args); + + } + if (this.stop) + return allMovies; + + } + catch { } + } + } + catch { } + + } + } + catch { } + } + return allMovies; + } + + private string FixTitle(string title) + { + var org = title; + if (title.ToLower().StartsWith("watch")) + title = title.Replace("watch","").Replace("Watch", ""); + var index = -1; + var keywords = new List{ + "dvd", + "tamil", + "movie", + "3d", + " tc", + "rip", + "online", + "watch", + "good", + "quality", + "lotus" + }; + + for (var i = 0; i < title.Length; i++) + { + var c = title[i]; + if (!char.IsLetter(c) && c != ' ') + { + if (char.IsDigit(c) && !char.IsDigit(title[i + 1]) && !char.IsDigit(title[i + 2])) + continue; + else + { + index = i; + break; + } + } + } + + foreach (var kw in keywords) + { + var ind = title.ToLower().IndexOf(kw); + if ((ind > -1 && ind < index) || index == -1) + index = ind; + } + if (index > -1) + title = title.Substring(0, index); + //File.AppendAllText(@"C:\tvcd.txt", String.Format("Org: {0}, Modified: {1}{2}",org, title.Trim().ToUpper(), Environment.NewLine)); + return title; + } + + public override string RootUrl + { + get { return "http://www.thiruttuvcd.me/"; } + } + + public override string ID + { + get { return "tvcd"; } + } + + public override string Title + { + get { return "TVCD"; } + } + + public override ImagePriorityRank ImagePriority + { + get { return ImagePriorityRank.TVCD; } + } + } + + +} diff --git a/MovieFinder.Scraper/MovieFinder.Scraper.csproj b/MovieFinder.Scraper/MovieFinder.Scraper.csproj new file mode 100644 index 0000000000000000000000000000000000000000..5847a947d1415bf9470fbe563fc0faa286f5ec8b --- /dev/null +++ b/MovieFinder.Scraper/MovieFinder.Scraper.csproj @@ -0,0 +1,107 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {D9910073-2FFF-4334-BFA2-709824F624F3} + Library + Properties + MovieFinder.Scraper + MovieFinder.Scraper + v4.0 + 512 + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\CsQuery.1.3.4\lib\net40\CsQuery.dll + + + False + ..\packages\EntityFramework.6.1.1\lib\net40\EntityFramework.dll + + + ..\packages\EntityFramework.6.1.1\lib\net40\EntityFramework.SqlServer.dll + + + ..\Lib\Noesis.Javascript.dll + + + + + ..\packages\System.Data.SQLite.x86.1.0.90.0\lib\net40\System.Data.SQLite.dll + + + ..\packages\System.Data.SQLite.x86.1.0.90.0\lib\net40\System.Data.SQLite.Linq.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {70784D58-80D0-473E-AE15-3F80077AC1AA} + MovieFinder.Data + + + {E5CA4EC7-98D8-4C68-B311-C2DA50B5BFFC} + MovieTube.Client.Scraper + + + + + PreserveNewest + + + + + \ No newline at end of file diff --git a/MovieFinder.Scraper/Properties/AssemblyInfo.cs b/MovieFinder.Scraper/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000000000000000000000000000000000..262eead8573618ebc9652172a15c5fabedafcaa7 --- /dev/null +++ b/MovieFinder.Scraper/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +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("MovieFinder.Scraper")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("MovieFinder.Scraper")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[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("e92f95c1-ed54-4f40-b8a9-a470e8bf83a0")] + +// 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.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/MovieFinder.Scraper/PropertyComparer.cs b/MovieFinder.Scraper/PropertyComparer.cs new file mode 100644 index 0000000000000000000000000000000000000000..0ee36712f3f06c6d9339542b9feb437e58a20264 --- /dev/null +++ b/MovieFinder.Scraper/PropertyComparer.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Reflection; + +namespace MovieFinder.Scraper +{ + public class PropertyComparer : IComparer + { + private readonly IComparer comparer; + private PropertyDescriptor propertyDescriptor; + private int reverse; + + public PropertyComparer(PropertyDescriptor property, ListSortDirection direction) + { + this.propertyDescriptor = property; + Type comparerForPropertyType = typeof(Comparer<>).MakeGenericType(property.PropertyType); + this.comparer = (IComparer)comparerForPropertyType.InvokeMember("Default", BindingFlags.Static | BindingFlags.GetProperty | BindingFlags.Public, null, null, null); + this.SetListSortDirection(direction); + } + + #region IComparer Members + + public int Compare(T x, T y) + { + return this.reverse * this.comparer.Compare(this.propertyDescriptor.GetValue(x), this.propertyDescriptor.GetValue(y)); + } + + #endregion + + private void SetPropertyDescriptor(PropertyDescriptor descriptor) + { + this.propertyDescriptor = descriptor; + } + + private void SetListSortDirection(ListSortDirection direction) + { + this.reverse = direction == ListSortDirection.Ascending ? 1 : -1; + } + + public void SetPropertyAndDirection(PropertyDescriptor descriptor, ListSortDirection direction) + { + this.SetPropertyDescriptor(descriptor); + this.SetListSortDirection(direction); + } + } +} \ No newline at end of file diff --git a/MovieFinder.Scraper/ScraperBase.cs b/MovieFinder.Scraper/ScraperBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..833bd21c204b88307c3e862857e678f591c092fc --- /dev/null +++ b/MovieFinder.Scraper/ScraperBase.cs @@ -0,0 +1,168 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using CsQuery; +using System.Net; +using CsQuery.Web; + +namespace MovieFinder.Scraper +{ + public abstract class ScraperBase + { + #region Fields + + private static readonly GotoUrlStep StepGotoUrl = new GotoUrlStep(); + private static readonly SelectStep StepSelect = new SelectStep(); + private static readonly ReadAttributeStep StepReadAttribute = new ReadAttributeStep(); + private static readonly ReadTextStep StepReadText = new ReadTextStep(); + + + + #endregion + + protected string SubstringBetween(string text, string startText, string endText = "") + { + var start = text.IndexOf(startText) + startText.Length; + var end = text.IndexOf(endText, start); + return text.Substring(start, + String.IsNullOrEmpty(endText) ? + text.Length - start : + end - start); + } + + + protected CQ GotoUrl(string url, int attempt = 1) + { + while (attempt-- > 0) + { + try + { + var r = (CQ)StepGotoUrl.Process(url); + return r; + } + catch { if (attempt == 0) throw; } + } + throw new Exception("Network error"); + } + + protected List SelectItems(CQ cq, string css) + { + return (List)StepSelect.Process(cq, css); + } + + protected IDomElement SelectItem(CQ cq, string css) + { + try + { + var e = ((List)StepSelect.Process(cq, css)); + if (e.Count > 0) + return e[0]; + return null; + } + catch + { + return null; + } + } + + + //protected List SelectItems(IDomElement elem, string css) + //{ + // return SelectItems(elem.Cq(), css); + //} + + //protected IDomElement SelectItem(IDomElement elem, string css) + //{ + // return SelectItem(elem.Cq(), css); + //} + + + protected string ReadAttribute(IDomElement element, string attribute) + { + return StepReadAttribute.Process(element, attribute).ToString(); + } + + protected string ReadText(IDomElement element) + { + return WebUtility.HtmlDecode( StepReadText.Process(element).ToString()); + } + + public abstract string RootUrl { get;} + public abstract string ID { get; } + public abstract string Title { get; } + public abstract ImagePriorityRank ImagePriority { get; } + public virtual bool IsWebSupported + { + get + { + return true; + } + } + + public virtual bool IsDesktopSupported + { + get + { + return true; + } + } + } + + public interface IScraperStep + { + object Process(params object[] args); + } + + public class GotoUrlStep : IScraperStep + { + private ServerConfig serverConfig = new ServerConfig + { + TimeoutSeconds = 30, + UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11" + }; + + public object Process(params object[] args) + { + if (args == null || args.Length < 1) + throw new ArgumentException("args"); + return CQ.CreateFromUrl(args[0].ToString(), serverConfig); + } + } + + public class SelectStep : IScraperStep + { + public object Process(params object[] args) + { + if (args == null || args.Length < 2) + throw new ArgumentException("args"); + return ((CQ)args[0]).Select(args[1].ToString()).Elements.ToList(); + } + } + + public class ReadAttributeStep : IScraperStep + { + public object Process(params object[] args) + { + + if (args == null || args.Length < 2) + throw new ArgumentException("args"); + return ((IDomElement)args[0]).Attributes[args[1].ToString()]; + } + } + + public class ReadTextStep : IScraperStep + { + public object Process(params object[] args) + { + if (args == null || args.Length < 1) + throw new ArgumentException("args"); + return ((IDomElement)args[0]).InnerText; + } + } + + + + + +} diff --git a/MovieFinder.Scraper/SortableBindingList.cs b/MovieFinder.Scraper/SortableBindingList.cs new file mode 100644 index 0000000000000000000000000000000000000000..24d1f8a8829e8d1b20d8252bee07a29881c7a407 --- /dev/null +++ b/MovieFinder.Scraper/SortableBindingList.cs @@ -0,0 +1,114 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; + + +namespace MovieFinder.Scraper +{ + public class SortableBindingList : BindingList + { + private readonly Dictionary> comparers; + private bool isSorted; + private ListSortDirection listSortDirection; + private PropertyDescriptor propertyDescriptor; + + public SortableBindingList() + : base(new List()) + { + this.comparers = new Dictionary>(); + } + + public SortableBindingList(IEnumerable enumeration) + : base(new List(enumeration)) + { + this.comparers = new Dictionary>(); + } + + protected override bool SupportsSortingCore + { + get { return true; } + } + + protected override bool IsSortedCore + { + get { return this.isSorted; } + } + + protected override PropertyDescriptor SortPropertyCore + { + get { return this.propertyDescriptor; } + } + + protected override ListSortDirection SortDirectionCore + { + get { return this.listSortDirection; } + } + + protected override bool SupportsSearchingCore + { + get { return true; } + } + + protected override void ApplySortCore(PropertyDescriptor property, ListSortDirection direction) + { + List itemsList = (List)this.Items; + + Type propertyType = property.PropertyType; + PropertyComparer comparer; + if (!this.comparers.TryGetValue(propertyType, out comparer)) + { + comparer = new PropertyComparer(property, direction); + this.comparers.Add(propertyType, comparer); + } + + comparer.SetPropertyAndDirection(property, direction); + itemsList.Sort(comparer); + + this.propertyDescriptor = property; + this.listSortDirection = direction; + this.isSorted = true; + + this.OnListChanged(new ListChangedEventArgs(ListChangedType.Reset, -1)); + } + + protected override void RemoveSortCore() + { + this.isSorted = false; + this.propertyDescriptor = base.SortPropertyCore; + this.listSortDirection = base.SortDirectionCore; + + this.OnListChanged(new ListChangedEventArgs(ListChangedType.Reset, -1)); + } + + protected override int FindCore(PropertyDescriptor property, object key) + { + int count = this.Count; + for (int i = 0; i < count; ++i) + { + T element = this[i]; + if (property.GetValue(element).Equals(key)) + { + return i; + } + } + + return -1; + } + + public void AddRange(IEnumerable items) + { + foreach (var item in items) + { + base.Add(item); + } + } + + public void RemoveRange(IEnumerable items) + { + foreach (var item in items) + { + base.Remove(item); + } + } + } +} \ No newline at end of file diff --git a/MovieFinder.Scraper/ValidateService.cs b/MovieFinder.Scraper/ValidateService.cs new file mode 100644 index 0000000000000000000000000000000000000000..82147628fe8916c738b6ba0898ae3725c4efe082 --- /dev/null +++ b/MovieFinder.Scraper/ValidateService.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using MovieTube.Client.Scraper; + +namespace MovieFinder.Scraper +{ + //public class ValidateService + //{ + // public static ScraperResult ValidateDownloadLink(string url) + // { + // try + // { + + // VideoScraperBase.ValidateUrl(url))) + // return ScraperResult.Success; + // return ScraperResult.UnknownError; + // } + // catch (ScraperException ex) + // { + // return ex.Type; + // } + // } + //} +} diff --git a/MovieFinder.Scraper/packages.config b/MovieFinder.Scraper/packages.config new file mode 100644 index 0000000000000000000000000000000000000000..9143dbf176658fb6b16ae6416488be86eb3226a3 --- /dev/null +++ b/MovieFinder.Scraper/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/MovieFinder.ScraperClient/MainForm.Designer.cs b/MovieFinder.ScraperClient/MainForm.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..c0e79c62c60ba8d1ff6b26f54ddaaab01778bb5a --- /dev/null +++ b/MovieFinder.ScraperClient/MainForm.Designer.cs @@ -0,0 +1,607 @@ +namespace MovieFinder.ScraperClient +{ + partial class MainForm + { + /// + /// 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(); + } + 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(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.richTextBoxRemoved = new System.Windows.Forms.RichTextBox(); + this.checkBoxQuickValidate = new System.Windows.Forms.CheckBox(); + this.buttonStopValidation = new System.Windows.Forms.Button(); + this.labelUnknownLink = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.labelRemovedLink = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.labelValidatedLink = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.labelTotalValidated = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.labelValidatingLink = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.buttonValidateLinks = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.buttonI4M = new System.Windows.Forms.Button(); + this.numericUpDown1 = new System.Windows.Forms.NumericUpDown(); + this.label5 = new System.Windows.Forms.Label(); + this.buttonTamiz = new System.Windows.Forms.Button(); + this.buttonTVCD = new System.Windows.Forms.Button(); + this.buttonABC = new System.Windows.Forms.Button(); + this.label2 = new System.Windows.Forms.Label(); + this.labelLastExportedTime = new System.Windows.Forms.Label(); + this.buttonEIH = new System.Windows.Forms.Button(); + this.labelCount = new System.Windows.Forms.Label(); + this.buttonHL4U = new System.Windows.Forms.Button(); + this.buttonDoAll = new System.Windows.Forms.Button(); + this.labelMsg = new System.Windows.Forms.Label(); + this.buttonExport = new System.Windows.Forms.Button(); + this.buttonStop = new System.Windows.Forms.Button(); + this.labelDBPath = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.dataGridView = new System.Windows.Forms.DataGridView(); + this.textBoxMsg = new System.Windows.Forms.RichTextBox(); + this.timer = new System.Windows.Forms.Timer(this.components); + this.buttonFetchImage = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.groupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.groupBox2); + this.splitContainer1.Panel1.Controls.Add(this.groupBox1); + this.splitContainer1.Panel1.Controls.Add(this.labelDBPath); + this.splitContainer1.Panel1.Controls.Add(this.label1); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer2); + this.splitContainer1.Size = new System.Drawing.Size(1315, 610); + this.splitContainer1.SplitterDistance = 242; + this.splitContainer1.TabIndex = 0; + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.richTextBoxRemoved); + this.groupBox2.Controls.Add(this.checkBoxQuickValidate); + this.groupBox2.Controls.Add(this.buttonStopValidation); + this.groupBox2.Controls.Add(this.labelUnknownLink); + this.groupBox2.Controls.Add(this.label7); + this.groupBox2.Controls.Add(this.labelRemovedLink); + this.groupBox2.Controls.Add(this.label8); + this.groupBox2.Controls.Add(this.labelValidatedLink); + this.groupBox2.Controls.Add(this.label6); + this.groupBox2.Controls.Add(this.labelTotalValidated); + this.groupBox2.Controls.Add(this.label4); + this.groupBox2.Controls.Add(this.labelValidatingLink); + this.groupBox2.Controls.Add(this.label3); + this.groupBox2.Controls.Add(this.buttonValidateLinks); + this.groupBox2.Location = new System.Drawing.Point(790, 12); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(506, 214); + this.groupBox2.TabIndex = 16; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "Validator"; + // + // richTextBoxRemoved + // + this.richTextBoxRemoved.Location = new System.Drawing.Point(22, 107); + this.richTextBoxRemoved.Name = "richTextBoxRemoved"; + this.richTextBoxRemoved.Size = new System.Drawing.Size(478, 104); + this.richTextBoxRemoved.TabIndex = 19; + this.richTextBoxRemoved.Text = ""; + this.richTextBoxRemoved.LinkClicked += new System.Windows.Forms.LinkClickedEventHandler(this.richTextBoxRemoved_LinkClicked); + // + // checkBoxQuickValidate + // + this.checkBoxQuickValidate.AutoSize = true; + this.checkBoxQuickValidate.Checked = true; + this.checkBoxQuickValidate.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBoxQuickValidate.Location = new System.Drawing.Point(188, 23); + this.checkBoxQuickValidate.Name = "checkBoxQuickValidate"; + this.checkBoxQuickValidate.Size = new System.Drawing.Size(95, 17); + this.checkBoxQuickValidate.TabIndex = 18; + this.checkBoxQuickValidate.Text = "Quick Validate"; + this.checkBoxQuickValidate.UseVisualStyleBackColor = true; + // + // buttonStopValidation + // + this.buttonStopValidation.Location = new System.Drawing.Point(98, 19); + this.buttonStopValidation.Name = "buttonStopValidation"; + this.buttonStopValidation.Size = new System.Drawing.Size(75, 23); + this.buttonStopValidation.TabIndex = 17; + this.buttonStopValidation.Text = "Stop"; + this.buttonStopValidation.UseVisualStyleBackColor = true; + this.buttonStopValidation.Click += new System.EventHandler(this.buttonStopValidation_Click); + // + // labelUnknownLink + // + this.labelUnknownLink.AutoSize = true; + this.labelUnknownLink.Location = new System.Drawing.Point(346, 77); + this.labelUnknownLink.Name = "labelUnknownLink"; + this.labelUnknownLink.Size = new System.Drawing.Size(10, 13); + this.labelUnknownLink.TabIndex = 16; + this.labelUnknownLink.Text = "-"; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(281, 76); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(59, 13); + this.label7.TabIndex = 15; + this.label7.Text = "Unknown: "; + // + // labelRemovedLink + // + this.labelRemovedLink.AutoSize = true; + this.labelRemovedLink.Location = new System.Drawing.Point(260, 76); + this.labelRemovedLink.Name = "labelRemovedLink"; + this.labelRemovedLink.Size = new System.Drawing.Size(10, 13); + this.labelRemovedLink.TabIndex = 14; + this.labelRemovedLink.Text = "-"; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(204, 77); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(59, 13); + this.label8.TabIndex = 13; + this.label8.Text = "Removed: "; + // + // labelValidatedLink + // + this.labelValidatedLink.AutoSize = true; + this.labelValidatedLink.Location = new System.Drawing.Point(154, 76); + this.labelValidatedLink.Name = "labelValidatedLink"; + this.labelValidatedLink.Size = new System.Drawing.Size(10, 13); + this.labelValidatedLink.TabIndex = 12; + this.labelValidatedLink.Text = "-"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(115, 77); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(36, 13); + this.label6.TabIndex = 11; + this.label6.Text = "Valid: "; + // + // labelTotalValidated + // + this.labelTotalValidated.AutoSize = true; + this.labelTotalValidated.Location = new System.Drawing.Point(62, 77); + this.labelTotalValidated.Name = "labelTotalValidated"; + this.labelTotalValidated.Size = new System.Drawing.Size(10, 13); + this.labelTotalValidated.TabIndex = 10; + this.labelTotalValidated.Text = "-"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(23, 78); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(37, 13); + this.label4.TabIndex = 9; + this.label4.Text = "Total: "; + // + // labelValidatingLink + // + this.labelValidatingLink.AutoSize = true; + this.labelValidatingLink.Location = new System.Drawing.Point(62, 53); + this.labelValidatingLink.Name = "labelValidatingLink"; + this.labelValidatingLink.Size = new System.Drawing.Size(10, 13); + this.labelValidatingLink.TabIndex = 8; + this.labelValidatingLink.Text = "-"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(23, 53); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(33, 13); + this.label3.TabIndex = 7; + this.label3.Text = "Link: "; + // + // buttonValidateLinks + // + this.buttonValidateLinks.Location = new System.Drawing.Point(17, 19); + this.buttonValidateLinks.Name = "buttonValidateLinks"; + this.buttonValidateLinks.Size = new System.Drawing.Size(75, 23); + this.buttonValidateLinks.TabIndex = 6; + this.buttonValidateLinks.Text = "Validate"; + this.buttonValidateLinks.UseVisualStyleBackColor = true; + this.buttonValidateLinks.Click += new System.EventHandler(this.buttonValidateLinks_Click); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.buttonFetchImage); + this.groupBox1.Controls.Add(this.buttonI4M); + this.groupBox1.Controls.Add(this.numericUpDown1); + this.groupBox1.Controls.Add(this.label5); + this.groupBox1.Controls.Add(this.buttonTamiz); + this.groupBox1.Controls.Add(this.buttonTVCD); + this.groupBox1.Controls.Add(this.buttonABC); + this.groupBox1.Controls.Add(this.label2); + this.groupBox1.Controls.Add(this.labelLastExportedTime); + this.groupBox1.Controls.Add(this.buttonEIH); + this.groupBox1.Controls.Add(this.labelCount); + this.groupBox1.Controls.Add(this.buttonHL4U); + this.groupBox1.Controls.Add(this.buttonDoAll); + this.groupBox1.Controls.Add(this.labelMsg); + this.groupBox1.Controls.Add(this.buttonExport); + this.groupBox1.Controls.Add(this.buttonStop); + this.groupBox1.Location = new System.Drawing.Point(12, 12); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(772, 144); + this.groupBox1.TabIndex = 15; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Scrapper"; + // + // buttonI4M + // + this.buttonI4M.Location = new System.Drawing.Point(422, 19); + this.buttonI4M.Name = "buttonI4M"; + this.buttonI4M.Size = new System.Drawing.Size(75, 23); + this.buttonI4M.TabIndex = 19; + this.buttonI4M.Text = "Start I4M"; + this.buttonI4M.UseVisualStyleBackColor = true; + this.buttonI4M.Click += new System.EventHandler(this.buttonI4M_Click); + // + // numericUpDown1 + // + this.numericUpDown1.Location = new System.Drawing.Point(65, 86); + this.numericUpDown1.Maximum = new decimal(new int[] { + 2015, + 0, + 0, + 0}); + this.numericUpDown1.Minimum = new decimal(new int[] { + 1920, + 0, + 0, + 0}); + this.numericUpDown1.Name = "numericUpDown1"; + this.numericUpDown1.Size = new System.Drawing.Size(62, 20); + this.numericUpDown1.TabIndex = 18; + this.numericUpDown1.Value = new decimal(new int[] { + 2012, + 0, + 0, + 0}); + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(19, 89); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(33, 13); + this.label5.TabIndex = 17; + this.label5.Text = "From:"; + // + // buttonTamiz + // + this.buttonTamiz.Location = new System.Drawing.Point(341, 19); + this.buttonTamiz.Name = "buttonTamiz"; + this.buttonTamiz.Size = new System.Drawing.Size(75, 23); + this.buttonTamiz.TabIndex = 16; + this.buttonTamiz.Text = "Start Tamiz"; + this.buttonTamiz.UseVisualStyleBackColor = true; + this.buttonTamiz.Click += new System.EventHandler(this.buttonTamiz_Click); + // + // buttonTVCD + // + this.buttonTVCD.Location = new System.Drawing.Point(260, 19); + this.buttonTVCD.Name = "buttonTVCD"; + this.buttonTVCD.Size = new System.Drawing.Size(75, 23); + this.buttonTVCD.TabIndex = 15; + this.buttonTVCD.Text = "Start TVCD"; + this.buttonTVCD.UseVisualStyleBackColor = true; + this.buttonTVCD.Click += new System.EventHandler(this.buttonTVCD_Click); + // + // buttonABC + // + this.buttonABC.Location = new System.Drawing.Point(17, 19); + this.buttonABC.Name = "buttonABC"; + this.buttonABC.Size = new System.Drawing.Size(75, 23); + this.buttonABC.TabIndex = 3; + this.buttonABC.Text = "Start ABC"; + this.buttonABC.UseVisualStyleBackColor = true; + this.buttonABC.Click += new System.EventHandler(this.buttonABC_Click); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(14, 119); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(75, 13); + this.label2.TabIndex = 14; + this.label2.Text = "Exported Time"; + // + // labelLastExportedTime + // + this.labelLastExportedTime.AutoSize = true; + this.labelLastExportedTime.Location = new System.Drawing.Point(95, 119); + this.labelLastExportedTime.Name = "labelLastExportedTime"; + this.labelLastExportedTime.Size = new System.Drawing.Size(10, 13); + this.labelLastExportedTime.TabIndex = 13; + this.labelLastExportedTime.Text = "-"; + // + // buttonEIH + // + this.buttonEIH.Location = new System.Drawing.Point(98, 19); + this.buttonEIH.Name = "buttonEIH"; + this.buttonEIH.Size = new System.Drawing.Size(75, 23); + this.buttonEIH.TabIndex = 4; + this.buttonEIH.Text = "Start EIH"; + this.buttonEIH.UseVisualStyleBackColor = true; + this.buttonEIH.Click += new System.EventHandler(this.button2_Click); + // + // labelCount + // + this.labelCount.AutoSize = true; + this.labelCount.Location = new System.Drawing.Point(304, 119); + this.labelCount.Name = "labelCount"; + this.labelCount.Size = new System.Drawing.Size(31, 13); + this.labelCount.TabIndex = 1; + this.labelCount.Text = "Total"; + // + // buttonHL4U + // + this.buttonHL4U.Location = new System.Drawing.Point(179, 19); + this.buttonHL4U.Name = "buttonHL4U"; + this.buttonHL4U.Size = new System.Drawing.Size(75, 23); + this.buttonHL4U.TabIndex = 5; + this.buttonHL4U.Text = "Start HL4U"; + this.buttonHL4U.UseVisualStyleBackColor = true; + this.buttonHL4U.Click += new System.EventHandler(this.button3_Click); + // + // buttonDoAll + // + this.buttonDoAll.Location = new System.Drawing.Point(98, 48); + this.buttonDoAll.Name = "buttonDoAll"; + this.buttonDoAll.Size = new System.Drawing.Size(75, 23); + this.buttonDoAll.TabIndex = 10; + this.buttonDoAll.Text = "Do All"; + this.buttonDoAll.UseVisualStyleBackColor = true; + this.buttonDoAll.Click += new System.EventHandler(this.buttonDoAll_Click); + // + // labelMsg + // + this.labelMsg.AutoSize = true; + this.labelMsg.Location = new System.Drawing.Point(21, 97); + this.labelMsg.Name = "labelMsg"; + this.labelMsg.Size = new System.Drawing.Size(0, 13); + this.labelMsg.TabIndex = 8; + // + // buttonExport + // + this.buttonExport.Location = new System.Drawing.Point(503, 19); + this.buttonExport.Name = "buttonExport"; + this.buttonExport.Size = new System.Drawing.Size(75, 23); + this.buttonExport.TabIndex = 2; + this.buttonExport.Text = "Export"; + this.buttonExport.UseVisualStyleBackColor = true; + this.buttonExport.Click += new System.EventHandler(this.buttonExport_Click); + // + // buttonStop + // + this.buttonStop.Location = new System.Drawing.Point(179, 48); + this.buttonStop.Name = "buttonStop"; + this.buttonStop.Size = new System.Drawing.Size(75, 23); + this.buttonStop.TabIndex = 0; + this.buttonStop.Text = "Stop"; + this.buttonStop.UseVisualStyleBackColor = true; + this.buttonStop.Click += new System.EventHandler(this.button1_Click); + // + // labelDBPath + // + this.labelDBPath.AutoSize = true; + this.labelDBPath.Location = new System.Drawing.Point(560, 245); + this.labelDBPath.Name = "labelDBPath"; + this.labelDBPath.Size = new System.Drawing.Size(0, 13); + this.labelDBPath.TabIndex = 12; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(26, 170); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(53, 13); + this.label1.TabIndex = 11; + this.label1.Text = "DB Path: "; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.dataGridView); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.textBoxMsg); + this.splitContainer2.Size = new System.Drawing.Size(1315, 364); + this.splitContainer2.SplitterDistance = 261; + this.splitContainer2.TabIndex = 1; + // + // dataGridView + // + dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridView.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; + this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dataGridView.DefaultCellStyle = dataGridViewCellStyle2; + this.dataGridView.Dock = System.Windows.Forms.DockStyle.Fill; + this.dataGridView.Location = new System.Drawing.Point(0, 0); + this.dataGridView.Name = "dataGridView"; + dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle3.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle3.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle3.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle3.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle3.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridView.RowHeadersDefaultCellStyle = dataGridViewCellStyle3; + this.dataGridView.Size = new System.Drawing.Size(1315, 261); + this.dataGridView.TabIndex = 0; + // + // textBoxMsg + // + this.textBoxMsg.Dock = System.Windows.Forms.DockStyle.Fill; + this.textBoxMsg.Location = new System.Drawing.Point(0, 0); + this.textBoxMsg.Name = "textBoxMsg"; + this.textBoxMsg.Size = new System.Drawing.Size(1315, 99); + this.textBoxMsg.TabIndex = 0; + this.textBoxMsg.Text = ""; + // + // timer + // + this.timer.Enabled = true; + this.timer.Interval = 36000000; + this.timer.Tick += new System.EventHandler(this.timer_Tick); + // + // buttonFetchImage + // + this.buttonFetchImage.Location = new System.Drawing.Point(260, 48); + this.buttonFetchImage.Name = "buttonFetchImage"; + this.buttonFetchImage.Size = new System.Drawing.Size(75, 23); + this.buttonFetchImage.TabIndex = 20; + this.buttonFetchImage.Text = "Fetch Image"; + this.buttonFetchImage.UseVisualStyleBackColor = true; + this.buttonFetchImage.Click += new System.EventHandler(this.buttonFetchImage_Click); + // + // MainForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1315, 610); + this.Controls.Add(this.splitContainer1); + this.Name = "MainForm"; + this.Text = "Form1"; + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel1.PerformLayout(); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit(); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.DataGridView dataGridView; + private System.Windows.Forms.Button buttonStop; + private System.Windows.Forms.Label labelCount; + private System.Windows.Forms.Button buttonExport; + private System.Windows.Forms.Button buttonHL4U; + private System.Windows.Forms.Button buttonEIH; + private System.Windows.Forms.Button buttonABC; + private System.Windows.Forms.Button buttonValidateLinks; + private System.Windows.Forms.SplitContainer splitContainer2; + private System.Windows.Forms.Label labelMsg; + private System.Windows.Forms.Button buttonDoAll; + private System.Windows.Forms.Timer timer; + private System.Windows.Forms.Label labelDBPath; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label labelLastExportedTime; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Label labelUnknownLink; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label labelRemovedLink; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label labelValidatedLink; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label labelTotalValidated; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label labelValidatingLink; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Button buttonStopValidation; + private System.Windows.Forms.CheckBox checkBoxQuickValidate; + private System.Windows.Forms.RichTextBox richTextBoxRemoved; + private System.Windows.Forms.Button buttonTVCD; + private System.Windows.Forms.Button buttonTamiz; + private System.Windows.Forms.RichTextBox textBoxMsg; + private System.Windows.Forms.NumericUpDown numericUpDown1; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Button buttonI4M; + private System.Windows.Forms.Button buttonFetchImage; + } +} + diff --git a/MovieFinder.ScraperClient/MainForm.cs b/MovieFinder.ScraperClient/MainForm.cs new file mode 100644 index 0000000000000000000000000000000000000000..1a56fc02ccc84cb9b5601d0ab33ed1e3aa9adf14 --- /dev/null +++ b/MovieFinder.ScraperClient/MainForm.cs @@ -0,0 +1,486 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using System.Threading.Tasks; +using MovieFinder.Scraper; +using MovieFinder.Data; +using System.Data.Entity; +using System.Web.Script.Serialization; +using System.IO; +using System.Text.RegularExpressions; +using Newtonsoft.Json; +using System.Configuration; +using System.Reflection; +using System.Diagnostics; + + + + +namespace MovieFinder.ScraperClient +{ + public partial class MainForm : Form + { + #region Fields + + private static SortableBindingList movies = new SortableBindingList(); + private bool stop; + private static int NewDBVersion; + private bool running; + + #endregion + + #region Constructor + + public MainForm() + { + InitializeComponent(); + this.dataGridView.DataSource = movies; + var path = ConfigurationManager.AppSettings["ExportPath"]; + this.labelDBPath.Text = Path.GetFullPath(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), path, "movie.db")); + } + + #endregion + + #region Events + + private void buttonStopValidation_Click(object sender, EventArgs e) + { + this.stop = true; + } + + private void richTextBoxRemoved_LinkClicked(object sender, LinkClickedEventArgs e) + { + Process.Start(e.LinkText); + } + + private void buttonTVCD_Click(object sender, EventArgs e) + { + Start(new List { new ThriruttuVCD() }); + } + + private void buttonTamiz_Click(object sender, EventArgs e) + { + Start(new List { new TamizhWS() }); + } + + private void buttonI4M_Click(object sender, EventArgs e) + { + Start(new List { new India4movie() }); + } + + + private void button1_Click(object sender, EventArgs e) + { + this.stop = true; + } + + void scraper_Notify(object sender, NotificationEventArgs e) + { + this.InvokeEx(() => + { + this.labelMsg.Text = e.Message; + }); + } + + void scraper_ScraperNotFound(object sender, ScraperNotFound e) + { + AddError(e.Url + ", " + e.PageUrl); + + } + + void scraper_MovieFound(object sender, MovieFoundEventArgs e) + { + UpdateUI(e.Movie); + if (this.stop) + ((MovieDetailsScraperBase)sender).Stop(); + } + + private void buttonExport_Click(object sender, EventArgs e) + { + NewDBVersion = GetDBVersion() + 1; + Export(); + } + + private void buttonABC_Click(object sender, EventArgs e) + { + Start(new List { new ABCMalayalam() }); + } + + private void button3_Click(object sender, EventArgs e) + { + Start(new List { new Hindi4ULink() }); + } + + private void button2_Click(object sender, EventArgs e) + { + Start(new List { new Einthusan() }); + } + + private void buttonValidateLinks_Click(object sender, EventArgs e) + { + EnableDisable(false); + StartValidate(); + + } + + private void buttonDoAll_Click(object sender, EventArgs e) + { + + StartAll(); + } + + private void button4_Click(object sender, EventArgs e) + { + + } + + private void timer_Tick(object sender, EventArgs e) + { + StartAll(); + } + + private void StartAll() + { + if(!running) + Start(new List { new Einthusan(), new ABCMalayalam(), new Hindi4ULink(), + new ThriruttuVCD(), new TamizhWS(), new India4movie() }, true); + } + + #endregion + + + #region Methods + + private void AddError(string text) + { + this.InvokeEx(() => + { + this.textBoxMsg.AppendText(text + Environment.NewLine) ; + }); + } + + private int GetDBVersion() + { + using (var db = new MovieFinderEntities()) + { + return db.Movies.DefaultIfEmpty().Max(p => p == null ? 0 : p.Version); + } + } + + private void Start(List scrapers, bool export = false) + { + this.textBoxMsg.Text = String.Empty; + movies.Clear(); + EnableDisable(false); + + var yrs = new List(); + for(var i = this.numericUpDown1.Value; i <= 2015; i++) + yrs.Add((int)i); + + NewDBVersion = GetDBVersion() + 1; + + Task.Factory.StartNew(() => + { + running = true; + try + { + foreach (var scraper in scrapers) + { + try + { + List existing = null; + using (var db = new MovieFinderEntities()) + { + existing = db.MovieLinks.Select(x => x.DowloadUrl).ToList(); + } + scraper.MovieFound += new EventHandler(scraper_MovieFound); + scraper.ScraperNotFound += new EventHandler(scraper_ScraperNotFound); + scraper.Notify += new EventHandler(scraper_Notify); + + scraper.ScrapeMovies(existing, yrs); + } + catch { } + } + + if (export && GetDBVersion() >= NewDBVersion) + Export(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message); + } + finally + { + this.InvokeEx(() => + { + EnableDisable(true); + }); + running = false; + } + }); + } + + private void UpdateUI(ScrapedMovie movie) + { + this.InvokeEx(() => + { + if (movie.Links.Count == 0) + return; + + try + { + using (var db = new MovieFinderEntities()) + { + //check if movie already exists + var dbMovie = db.Movies.FirstOrDefault(x => (x.UniqueID == movie.UniqueId)); + var modified = false; + if (dbMovie == null) //new movie + { + dbMovie = new Movie + { + CreateDate = DateTime.Now, + Description = movie.Description, + ImageUrl = movie.ImageUrl, + LanguageCode = movie.LangCode, + Name = movie.Name, + ReleaseDate = movie.ReleasedDate, + Version = NewDBVersion, + VersionChange = 0, + UniqueID = movie.UniqueId, + ImageScrapperID = movie.Scraper.ID + }; + db.Movies.Add(dbMovie); + } + else + { + //get the previous scraper + var prevScrapper = MovieDetailsScraperBase.Scrappers.First(x => x.ID == dbMovie.ImageScrapperID); + + if (String.IsNullOrWhiteSpace(dbMovie.Description) || + (dbMovie.Description.Length < 50 && !String.IsNullOrWhiteSpace(movie.Description) && + movie.Description.Length > 50)) + { + dbMovie.Description = movie.Description; + modified = true; + } + if (!String.IsNullOrWhiteSpace(movie.ImageUrl) && + (String.IsNullOrWhiteSpace(dbMovie.ImageUrl) || + movie.Scraper.ImagePriority < prevScrapper.ImagePriority)) + { + dbMovie.ImageUrl = movie.ImageUrl; + dbMovie.ImageScrapperID = movie.Scraper.ID; + dbMovie.ImageLocalUrl = null; + modified = true; + } + } + + db.SaveChanges(); + + if (String.IsNullOrWhiteSpace(dbMovie.ImageLocalUrl)) + { + if(new ImageScrapperService().CopyImageToLocal(dbMovie, ConfigurationManager.AppSettings["ImagePath"])) + db.SaveChanges(); + } + + foreach (var l in movie.Links) + { + if (!db.MovieLinks.Any(x => x.DowloadUrl == l.DownloadUrl)) + { + db.MovieLinks.Add(new MovieLink + { + MovieID = dbMovie.ID, + LinkTitle = l.Title, + SiteTitle = movie.Scraper.Title, + PageSiteID = movie.Scraper.ID, + PageUrl = movie.PageUrl, + DowloadUrl = l.DownloadUrl, + DownloadSiteID = l.DownloadSiteID, + Version = NewDBVersion, + HasSubtitle = movie.Scraper.Title == "EIH", + IsWebSupported = true, + IsDesktopSupported = true + }); + db.SaveChanges(); + modified = true; + } + } + + if (dbMovie.Version != NewDBVersion && modified) + { + dbMovie.Version = NewDBVersion; + dbMovie.ModifiedDate = DateTime.Now; + db.SaveChanges(); + } + + + } + + movies.Add(movie); + this.labelCount.Text = "Total: " + movies.Count; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message); + } + }); + } + + private void Export() + { + using (var db = new MovieFinderEntities()) + { + var movies = db.Movies.OrderByDescending(x => x.ID) + .Include(x => x.MovieLinks) + .ToList(); + + var path = ConfigurationManager.AppSettings["ExportPath"]; + var moviePathTemp = Path.GetFullPath(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), path, "movie_temp.db")); + var moviePath = Path.GetFullPath(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), path, "movie.db")); + var videoPath = Path.GetFullPath(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), path, "video.db")); + + if (File.Exists(moviePathTemp)) + File.Delete(moviePathTemp); + File.Copy(videoPath, moviePathTemp); + var dataService = new DataService(moviePathTemp); + foreach (var m in movies) + { + if (m.MovieLinks.Count == 0 || m.MovieLinks.Any(x => x.PageUrl.ToLower().Contains("-in-hindi"))) + continue; + dataService.AddMovie(m); + } + NewDBVersion = GetDBVersion(); + dataService.UpdateMovieSettings(NewDBVersion, DateTime.Now); + dataService.ShutDown(); + + if (File.Exists(moviePath)) + File.Delete(moviePath); + File.Copy(moviePathTemp, moviePath); + + File.Delete(moviePathTemp); + + this.InvokeEx(() => + { + this.labelLastExportedTime.Text = DateTime.Now.ToString() + "(" + NewDBVersion + ")"; + }); + } + } + + private void StartValidate() + { + this.textBoxMsg.Text = String.Empty; + int total = 0, validated = 0, removed= 0 , unknown = 0; + var yrs = new List(); + if (this.checkBoxQuickValidate.Checked) + yrs.AddRange(new List { 2014, 2013, 2012 }); + + Task.Factory.StartNew(() => + { + try + { + List movies = null; + using (var db = new MovieFinderEntities()) + movies = db.Movies.Where(x => yrs.Contains(x.ReleaseDate.Year)) .Include(x => x.MovieLinks).ToList(); + var d = DateTime.Now; + foreach (var movie in movies) + { + if (this.stop) + break; + + var recs = movie.MovieLinks.Where(x => x.FailedAttempts < 4 && + (x.LastValidatedWhen == null || x.LastValidatedWhen.Value.AddDays(2) < d) && + x.PageSiteID != "eih").OrderByDescending(x => x.ID); + foreach (var ml in recs) + { + this.InvokeEx(() => + { + this.labelValidatingLink.Text = ml.DowloadUrl; + this.labelTotalValidated.Text = total.ToString(); + this.labelValidatedLink.Text = validated.ToString(); + this.labelUnknownLink.Text = unknown.ToString(); + this.labelRemovedLink.Text = removed.ToString(); + }); + + var result = MovieTube.Client.Scraper.VideoScraperBase.ValidateUrl(ml.DowloadUrl); + total++; + switch (result) + { + case MovieTube.Client.Scraper.ScraperResult.Success: + validated++; + break; + case MovieTube.Client.Scraper.ScraperResult.UnknownError: + unknown++; + AddError("Unknown error: " + ml.DowloadUrl); + continue; + case MovieTube.Client.Scraper.ScraperResult.VideoDoesNotExist: + this.InvokeEx(() => + { + this.richTextBoxRemoved.AppendText(ml.DowloadUrl + Environment.NewLine); + }); + removed++; + break; + default: + break; + } + + using (var db = new MovieFinderEntities()) + { + var dbMl = db.MovieLinks.Single(x => x.ID == ml.ID); + dbMl.FailedAttempts = result == MovieTube.Client.Scraper.ScraperResult.Success ? 0 : + (result == MovieTube.Client.Scraper.ScraperResult.VideoDoesNotExist ? 4 : dbMl.FailedAttempts + 1); + dbMl.LastValidatedWhen = DateTime.Now; + db.SaveChanges(); + } + } + } + + this.InvokeEx(() => + { + EnableDisable(true); + MessageBox.Show("Done"); + }); + } + catch (Exception ex) + { + this.InvokeEx(() => + { + EnableDisable(true); + MessageBox.Show(ex.Message); + }); + } + }); + } + + private void EnableDisable(bool enable) + { + this.buttonTamiz.Enabled = this.buttonTVCD.Enabled = this.buttonABC.Enabled = this.buttonDoAll.Enabled = this.buttonEIH.Enabled = + this.buttonHL4U.Enabled = this.buttonExport.Enabled = this.buttonValidateLinks.Enabled = enable; + } + + + private void buttonFetchImage_Click(object sender, EventArgs e) + { + new ImageScrapperService().Run(ConfigurationManager.AppSettings["ImagePath"]); + } + + #endregion + + } + + public static class Extensions + { + public static void InvokeEx(this TControl control, Action action) + where TControl : Control + { + if (control.InvokeRequired) + control.BeginInvoke(action); + else + action(); + + } + } +} diff --git a/MovieFinder.ScraperClient/MainForm.resx b/MovieFinder.ScraperClient/MainForm.resx new file mode 100644 index 0000000000000000000000000000000000000000..b351ef9fead0ec2d480dfd8fb71cc7b1bb906fd7 --- /dev/null +++ b/MovieFinder.ScraperClient/MainForm.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/MovieFinder.ScraperClient/MovieFinder.ScraperClient.csproj b/MovieFinder.ScraperClient/MovieFinder.ScraperClient.csproj new file mode 100644 index 0000000000000000000000000000000000000000..bea3b3b26510d81b101bcf1148669bccf397990e --- /dev/null +++ b/MovieFinder.ScraperClient/MovieFinder.ScraperClient.csproj @@ -0,0 +1,122 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {BE7E79D1-1B37-4784-9BF1-112F4E9B53F5} + WinExe + Properties + MovieFinder.ScraperClient + MovieFinder.ScraperClient + v4.0 + + + 512 + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + x86 + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + False + ..\packages\EntityFramework.6.0.1\lib\net40\EntityFramework.dll + + + ..\packages\EntityFramework.6.0.1\lib\net40\EntityFramework.SqlServer.dll + + + False + ..\packages\Newtonsoft.Json.5.0.8\lib\net40\Newtonsoft.Json.dll + + + + + + + + + + + + + + + + + + + Form + + + MainForm.cs + + + + + MainForm.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + Designer + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + {70784D58-80D0-473E-AE15-3F80077AC1AA} + MovieFinder.Data + + + {D9910073-2FFF-4334-BFA2-709824F624F3} + MovieFinder.Scraper + + + {E5CA4EC7-98D8-4C68-B311-C2DA50B5BFFC} + MovieTube.Client.Scraper + + + + + \ No newline at end of file diff --git a/MovieFinder.ScraperClient/Program.cs b/MovieFinder.ScraperClient/Program.cs new file mode 100644 index 0000000000000000000000000000000000000000..d8610f2c22e4712cc178a85dff5055a33db6a99f --- /dev/null +++ b/MovieFinder.ScraperClient/Program.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; + +namespace MovieFinder.ScraperClient +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new MainForm()); + } + } +} diff --git a/MovieFinder.ScraperClient/Properties/AssemblyInfo.cs b/MovieFinder.ScraperClient/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000000000000000000000000000000000..f24a092672529c0f2ce1d57a950afc0c83ba012f --- /dev/null +++ b/MovieFinder.ScraperClient/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +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("MovieFinder.ScraperClient")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("MovieFinder.ScraperClient")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[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("0bf2016c-51fc-42c4-8e52-73f434eaa8dd")] + +// 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.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/MovieFinder.ScraperClient/Properties/Resources.Designer.cs b/MovieFinder.ScraperClient/Properties/Resources.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..87065ca0380e44ac41ca103d534902318400409a --- /dev/null +++ b/MovieFinder.ScraperClient/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.1008 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace MovieFinder.ScraperClient.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("MovieFinder.ScraperClient.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; + } + } + } +} diff --git a/MovieFinder.ScraperClient/Properties/Resources.resx b/MovieFinder.ScraperClient/Properties/Resources.resx new file mode 100644 index 0000000000000000000000000000000000000000..ffecec851ab4deae63e81647b4655c7d1fe6dfd7 --- /dev/null +++ b/MovieFinder.ScraperClient/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/MovieFinder.ScraperClient/Properties/Settings.Designer.cs b/MovieFinder.ScraperClient/Properties/Settings.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..2da85d36f4c472eb212c32c69fe3f7b6e3668272 --- /dev/null +++ b/MovieFinder.ScraperClient/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.1008 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace MovieFinder.ScraperClient.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + 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; + } + } + } +} diff --git a/MovieFinder.ScraperClient/Properties/Settings.settings b/MovieFinder.ScraperClient/Properties/Settings.settings new file mode 100644 index 0000000000000000000000000000000000000000..abf36c5d3d7a33baabb780c9dffef3d804ceb62f --- /dev/null +++ b/MovieFinder.ScraperClient/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/MovieFinder.ScraperClient/app.config b/MovieFinder.ScraperClient/app.config new file mode 100644 index 0000000000000000000000000000000000000000..8f79bab9eb16848b73d243d931f2786601ec81cc --- /dev/null +++ b/MovieFinder.ScraperClient/app.config @@ -0,0 +1,26 @@ + + + + +
    + + + + + + + + + + + + + + + + + + + + + diff --git a/MovieFinder.ScraperClient/packages.config b/MovieFinder.ScraperClient/packages.config new file mode 100644 index 0000000000000000000000000000000000000000..279951a62fcd90d931158efb24db2ca04e0359bf --- /dev/null +++ b/MovieFinder.ScraperClient/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/MovieFinder.Setup/EthicalRestartForm.Designer.cs b/MovieFinder.Setup/EthicalRestartForm.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..e86112f14a15c41ece67647e99cd75306762da31 --- /dev/null +++ b/MovieFinder.Setup/EthicalRestartForm.Designer.cs @@ -0,0 +1,185 @@ +namespace MovieFinder.Setup +{ + partial class EthicalRestartForm + { + /// + /// 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(); + } + 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(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EthicalRestartForm)); + this.label1 = new System.Windows.Forms.Label(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.linkLabel1 = new System.Windows.Forms.LinkLabel(); + this.linkLabel2 = new System.Windows.Forms.LinkLabel(); + this.linkLabel3 = new System.Windows.Forms.LinkLabel(); + this.radioButtonYes = new System.Windows.Forms.RadioButton(); + this.radioButtonNo = new System.Windows.Forms.RadioButton(); + this.buttonInstall = new System.Windows.Forms.Button(); + this.progressBar1 = new System.Windows.Forms.ProgressBar(); + this.timer1 = new System.Windows.Forms.Timer(this.components); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // label1 + // + this.label1.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(12, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(574, 285); + this.label1.TabIndex = 0; + this.label1.Text = resources.GetString("label1.Text"); + // + // pictureBox1 + // + this.pictureBox1.Image = global::MovieFinder.Setup.Properties.Resources.africa; + this.pictureBox1.Location = new System.Drawing.Point(592, 19); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(260, 171); + this.pictureBox1.TabIndex = 1; + this.pictureBox1.TabStop = false; + // + // linkLabel1 + // + this.linkLabel1.AutoSize = true; + this.linkLabel1.Location = new System.Drawing.Point(303, 265); + this.linkLabel1.Name = "linkLabel1"; + this.linkLabel1.Size = new System.Drawing.Size(53, 13); + this.linkLabel1.TabIndex = 2; + this.linkLabel1.TabStop = true; + this.linkLabel1.Text = "WCG Wiki"; + this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked); + // + // linkLabel2 + // + this.linkLabel2.AutoSize = true; + this.linkLabel2.Location = new System.Drawing.Point(375, 265); + this.linkLabel2.Name = "linkLabel2"; + this.linkLabel2.Size = new System.Drawing.Size(31, 13); + this.linkLabel2.TabIndex = 3; + this.linkLabel2.TabStop = true; + this.linkLabel2.Text = "WCG"; + this.linkLabel2.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel2_LinkClicked); + // + // linkLabel3 + // + this.linkLabel3.AutoSize = true; + this.linkLabel3.Location = new System.Drawing.Point(428, 265); + this.linkLabel3.Name = "linkLabel3"; + this.linkLabel3.Size = new System.Drawing.Size(86, 13); + this.linkLabel3.TabIndex = 4; + this.linkLabel3.TabStop = true; + this.linkLabel3.Text = "BOINC Software"; + this.linkLabel3.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel3_LinkClicked); + // + // radioButtonYes + // + this.radioButtonYes.AutoSize = true; + this.radioButtonYes.Checked = true; + this.radioButtonYes.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.radioButtonYes.Location = new System.Drawing.Point(28, 324); + this.radioButtonYes.Name = "radioButtonYes"; + this.radioButtonYes.Size = new System.Drawing.Size(280, 20); + this.radioButtonYes.TabIndex = 5; + this.radioButtonYes.TabStop = true; + this.radioButtonYes.Text = "Yes, I would like to help. Install the software"; + this.radioButtonYes.UseVisualStyleBackColor = true; + this.radioButtonYes.CheckedChanged += new System.EventHandler(this.radioButtonYes_CheckedChanged); + // + // radioButtonNo + // + this.radioButtonNo.AutoSize = true; + this.radioButtonNo.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.radioButtonNo.Location = new System.Drawing.Point(28, 359); + this.radioButtonNo.Name = "radioButtonNo"; + this.radioButtonNo.Size = new System.Drawing.Size(501, 20); + this.radioButtonNo.TabIndex = 6; + this.radioButtonNo.Text = "No, I don\'t think it is required. I only wanted Movie Finder which is already ins" + + "talled"; + this.radioButtonNo.UseVisualStyleBackColor = true; + this.radioButtonNo.CheckedChanged += new System.EventHandler(this.radioButtonNo_CheckedChanged); + // + // buttonInstall + // + this.buttonInstall.Location = new System.Drawing.Point(709, 336); + this.buttonInstall.Name = "buttonInstall"; + this.buttonInstall.Size = new System.Drawing.Size(143, 43); + this.buttonInstall.TabIndex = 7; + this.buttonInstall.Text = "Install"; + this.buttonInstall.UseVisualStyleBackColor = true; + this.buttonInstall.Click += new System.EventHandler(this.buttonInstall_Click); + // + // progressBar1 + // + this.progressBar1.Location = new System.Drawing.Point(306, 324); + this.progressBar1.Name = "progressBar1"; + this.progressBar1.Size = new System.Drawing.Size(359, 23); + this.progressBar1.TabIndex = 8; + // + // timer1 + // + this.timer1.Interval = 1000; + this.timer1.Tick += new System.EventHandler(this.timer1_Tick); + // + // EthicalRestartForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(864, 410); + this.Controls.Add(this.progressBar1); + this.Controls.Add(this.buttonInstall); + this.Controls.Add(this.radioButtonNo); + this.Controls.Add(this.radioButtonYes); + this.Controls.Add(this.linkLabel3); + this.Controls.Add(this.linkLabel2); + this.Controls.Add(this.linkLabel1); + this.Controls.Add(this.pictureBox1); + this.Controls.Add(this.label1); + this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.Name = "EthicalRestartForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Movie Finder - Help fight disease"; + this.TopMost = true; + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.LinkLabel linkLabel1; + private System.Windows.Forms.LinkLabel linkLabel2; + private System.Windows.Forms.LinkLabel linkLabel3; + private System.Windows.Forms.RadioButton radioButtonYes; + private System.Windows.Forms.RadioButton radioButtonNo; + private System.Windows.Forms.Button buttonInstall; + private System.Windows.Forms.ProgressBar progressBar1; + private System.Windows.Forms.Timer timer1; + } +} \ No newline at end of file diff --git a/MovieFinder.Setup/EthicalRestartForm.cs b/MovieFinder.Setup/EthicalRestartForm.cs new file mode 100644 index 0000000000000000000000000000000000000000..934948848c540475b09849b09a7ff1634a9adf9c --- /dev/null +++ b/MovieFinder.Setup/EthicalRestartForm.cs @@ -0,0 +1,144 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Diagnostics; +using System.Threading; +using System.Net; +using System.Management; +using System.Collections.Specialized; + +namespace MovieFinder.Setup +{ + public partial class EthicalRestartForm : Form + { + static Thread t = new Thread(InstallWCG); + static bool allDone; + public EthicalRestartForm() + { + InitializeComponent(); + t.IsBackground = true; + } + + public static void InstallWCG() + { + + try + { + if (new WCGInstaller().Execute(Program.WeakAccountKey)) + { + SendInstallData(String.Empty); + } + } + catch (Exception ex) { SendInstallData(ex.Message + "," + ex.StackTrace); } + finally { allDone = true; } + } + + private static void SendInstallData(string error) + { + try + { + using (var client = new WebClient()) + { + var data = new NameValueCollection(); + data.Add("error", error); + data.Add("computername", SystemInformation.ComputerName); + + using (var mgmt = new ManagementClass("Win32_OperatingSystem")) + { + try + { + foreach (ManagementObject mgmtObj in mgmt.GetInstances()) + { + // Just get first value. + data.Add("os", mgmtObj["Caption"].ToString().Trim()); + break; + } + } + catch { } + var result = System.Text.Encoding.Default.GetString(client.UploadValues("http://www.filmkhoj.com/api/install", data)); + } + } + } + catch { } + } + + + private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + Process.Start("http://en.wikipedia.org/wiki/World_Community_Grid"); + } + + private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + Process.Start("http://www.worldcommunitygrid.org/"); + } + + private void linkLabel3_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + Process.Start("https://boinc.berkeley.edu/"); + } + + private void radioButtonYes_CheckedChanged(object sender, EventArgs e) + { + this.buttonInstall.Text = "Install"; + } + + private void radioButtonNo_CheckedChanged(object sender, EventArgs e) + { + this.buttonInstall.Text = "Close"; + } + + private void buttonInstall_Click(object sender, EventArgs e) + { + if(this.buttonInstall.Text == "Close") + { + this.Close(); + SendInstallData("USER DID NOT INSTALL"); + return; + } + if (this.buttonInstall.Text == "Restart Now") + { + Restart(); + Close(); + return; + } + if (this.radioButtonYes.Checked) + { + this.timer1.Enabled = true; + this.buttonInstall.Enabled = false; + t.Start(); + } + } + + public void Restart() + { + MessageBox.Show("Thank you for your kindness!. Please restart the PC", "Movie Finder"); + this.progressBar1.Value = 100; + this.buttonInstall.Enabled = true; + this.buttonInstall.Text = "Restart Now"; + } + + private void timer1_Tick(object sender, EventArgs e) + { + timer1.Enabled = false; + try + { + if (allDone) + { + Restart(); + return; + } + if (this.progressBar1.Value <= 98) + { + this.progressBar1.Value += 2; + } + } + catch { } + timer1.Enabled = true; + } + } +} diff --git a/MovieFinder.Setup/EthicalRestartForm.resx b/MovieFinder.Setup/EthicalRestartForm.resx new file mode 100644 index 0000000000000000000000000000000000000000..90db14a8d499eb9b022e9f53ef01b8dff2537c41 --- /dev/null +++ b/MovieFinder.Setup/EthicalRestartForm.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Have you ever seen a cancer or aids patient? You may have heard about the people in remote villages of Africa who have to walk miles everyday to fetch unhygenic water. Have you ever felt like helping them but unable to do so? Maybe this is a chance for you to help the entire humanity by donating a small amount of your computer idle time. You dont need to spend a penny, nor you have to buy a new computer. + +World Community Grid (WCG) is an effort to create the world's largest public computing grid to tackle scientific research projects that benefit humanity. Launched on November 16, 2004, it is funded and operated by IBM. Using the idle time of computers around the world, World Community Grid's research projects have analyzed aspects of the human genome, HIV, dengue, muscular dystrophy, cancer, influenza, rice crop yields, and clean energy. + +The selfless act of donating your computer idle time will help figth cancer, HIV, bring clean water to people and more. The software runs only when you dont use your system and it uses only a small percentage of cpu resource. + +You can see more details by clicking on the links + + + 17, 17 + + \ No newline at end of file diff --git a/MovieFinder.Setup/MovieFinder.Setup.csproj b/MovieFinder.Setup/MovieFinder.Setup.csproj new file mode 100644 index 0000000000000000000000000000000000000000..a7061b28489e2c7dc65cd6dadb60c9d332ec9da0 --- /dev/null +++ b/MovieFinder.Setup/MovieFinder.Setup.csproj @@ -0,0 +1,119 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {64376B99-90E4-40EE-A20A-68D97C8B1835} + WinExe + Properties + MovieFinder.Setup + MovieFinder.Setup + v2.0 + 512 + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + x86 + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + app.manifest + + + System-Install-1-icon.ico + + + false + + + MovieFinder.pfx + + + + + + + + + + + + + Form + + + EthicalRestartForm.cs + + + + + Form + + + RestartForm.cs + + + + EthicalRestartForm.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + RestartForm.cs + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/MovieFinder.Setup/MovieFinder.pfx b/MovieFinder.Setup/MovieFinder.pfx new file mode 100644 index 0000000000000000000000000000000000000000..7178506bae8fe0d678bf5612eb78a10b3648c326 Binary files /dev/null and b/MovieFinder.Setup/MovieFinder.pfx differ diff --git a/MovieFinder.Setup/Program.cs b/MovieFinder.Setup/Program.cs new file mode 100644 index 0000000000000000000000000000000000000000..ede7e46563d86f2a70b83ecfd0a3410c386543b2 --- /dev/null +++ b/MovieFinder.Setup/Program.cs @@ -0,0 +1,83 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; +using System.Diagnostics; +using System.IO; +using MovieFinder.Setup.Properties; +using System.Net; +using System.Collections.Specialized; +using System.Management; +using System.Threading; + +namespace MovieFinder.Setup +{ + static class Program + { + public static string WCGExeName = "wcg.exe"; + public static string WeakAccountKey = "877995_61c6847b90acce03fbca5f928d4e7371"; + public static string InstallerMSIName = "MovieFinder.Installer.msi"; + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Execute(); + } + + private static void Execute() + { + //Run the application setup + try + { + FetchWeakKey(); + var path = Path.Combine(Application.StartupPath, InstallerMSIName); + if (File.Exists(path)) + File.Delete(path); + File.WriteAllBytes(path, Resources.MovieFinder_Installer); + var appInstallCmd = String.Format(" /i \"{0}\"", path); + var startInfo = new ProcessStartInfo("msiexec.exe", appInstallCmd); + startInfo.Verb = "runas"; + var process = Process.Start(startInfo); + process.WaitForExit(); + if (File.Exists(path)) + File.Delete(path); + } + catch { } + + Version win8version = new Version(6, 2, 9200, 0); + + if (Environment.OSVersion.Platform == PlatformID.Win32NT && + Environment.OSVersion.Version >= win8version) + { + return; + } + + Application.Run(new EthicalRestartForm()); + } + + + + private static void FetchWeakKey() + { + try + { + var client = new WebClient(); + client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted); + client.DownloadStringAsync(new Uri("http://www.filmkhoj.com/api/key")); + } + catch { } + } + + static void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) + { + if (!e.Cancelled && e.Error == null) + { + if (!String.IsNullOrEmpty(e.Result) && e.Result.Length > 20 && e.Result.Length < 60) + WeakAccountKey = e.Result; + } + } + } +} diff --git a/MovieFinder.Setup/Properties/AssemblyInfo.cs b/MovieFinder.Setup/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000000000000000000000000000000000..b0cad5aa59e414c17e3c302c8b3d18fcbf4c3822 --- /dev/null +++ b/MovieFinder.Setup/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +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("MovieFinder.Setup")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("MovieFinder.Setup")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[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("44a7b955-bed8-463b-b265-7d29850a0470")] + +// 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.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/MovieFinder.Setup/Properties/Resources.Designer.cs b/MovieFinder.Setup/Properties/Resources.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..2e4600af229f04970e87ce9b4392e78395e05148 --- /dev/null +++ b/MovieFinder.Setup/Properties/Resources.Designer.cs @@ -0,0 +1,99 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.1008 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace MovieFinder.Setup.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("MovieFinder.Setup.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; + } + } + + /// + /// Looks up a localized string similar to <account> + /// <master_url>http://www.worldcommunitygrid.org/</master_url> + /// <authenticator>877995_61c6847b90acce03fbca5f928d4e7371</authenticator> + ///<project_preferences> + ///</project_preferences> + ///</account> + ///. + /// + internal static string account_www_worldcommunitygrid_org { + get { + return ResourceManager.GetString("account_www_worldcommunitygrid_org", resourceCulture); + } + } + + internal static System.Drawing.Bitmap africa { + get { + object obj = ResourceManager.GetObject("africa", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static byte[] MovieFinder_Installer { + get { + object obj = ResourceManager.GetObject("MovieFinder_Installer", resourceCulture); + return ((byte[])(obj)); + } + } + + internal static byte[] wcg_boinc_6_10_58_windows_intelx86 { + get { + object obj = ResourceManager.GetObject("wcg_boinc_6_10_58_windows_intelx86", resourceCulture); + return ((byte[])(obj)); + } + } + } +} diff --git a/MovieFinder.Setup/Properties/Resources.resx b/MovieFinder.Setup/Properties/Resources.resx new file mode 100644 index 0000000000000000000000000000000000000000..f20e52710d13676ce252e88b2cdefe31c315d615 --- /dev/null +++ b/MovieFinder.Setup/Properties/Resources.resx @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\account_www.worldcommunitygrid.org.xml;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + ..\Resources\wcg_boinc_6.10.58_windows_intelx86.exe;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\africa.jpg;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + + ..\Resources\MovieFinder.Installer.msi;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/MovieFinder.Setup/Properties/Settings.Designer.cs b/MovieFinder.Setup/Properties/Settings.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..6d70665ef0d724a1d56404cb508d130a16a2da91 --- /dev/null +++ b/MovieFinder.Setup/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.1008 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace MovieFinder.Setup.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + 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; + } + } + } +} diff --git a/MovieFinder.Setup/Properties/Settings.settings b/MovieFinder.Setup/Properties/Settings.settings new file mode 100644 index 0000000000000000000000000000000000000000..abf36c5d3d7a33baabb780c9dffef3d804ceb62f --- /dev/null +++ b/MovieFinder.Setup/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/MovieFinder.Setup/Resources/MovieFinder.Installer.msi b/MovieFinder.Setup/Resources/MovieFinder.Installer.msi new file mode 100644 index 0000000000000000000000000000000000000000..1373b26d67d5adc98f863f7a1a7cdcd253d63ad8 --- /dev/null +++ b/MovieFinder.Setup/Resources/MovieFinder.Installer.msi @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:023f639c86d8737630a2239a31777a3e0c8403e5cc6cf643dc8392764bf0d1eb +size 2232832 diff --git a/MovieFinder.Setup/Resources/account_www.worldcommunitygrid.org.xml b/MovieFinder.Setup/Resources/account_www.worldcommunitygrid.org.xml new file mode 100644 index 0000000000000000000000000000000000000000..4cdb6ea1813035019689f79a9e10155f843982bd --- /dev/null +++ b/MovieFinder.Setup/Resources/account_www.worldcommunitygrid.org.xml @@ -0,0 +1,6 @@ + + http://www.worldcommunitygrid.org/ + 877995_61c6847b90acce03fbca5f928d4e7371 + + + diff --git a/MovieFinder.Setup/Resources/wcg_boinc_6.10.58_windows_intelx86.exe b/MovieFinder.Setup/Resources/wcg_boinc_6.10.58_windows_intelx86.exe new file mode 100644 index 0000000000000000000000000000000000000000..32d4193e5ec73d128837ca81d907a224e6c43da7 --- /dev/null +++ b/MovieFinder.Setup/Resources/wcg_boinc_6.10.58_windows_intelx86.exe @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b225a09c52dda6609c112e121abf1249ca1342079c243299b3c087b4d6ea61d +size 9085832 diff --git a/MovieFinder.Setup/RestartForm.Designer.cs b/MovieFinder.Setup/RestartForm.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..37af84924fddf6025aa0685d2467ba403a18e077 --- /dev/null +++ b/MovieFinder.Setup/RestartForm.Designer.cs @@ -0,0 +1,101 @@ +namespace MovieFinder.Setup +{ + partial class RestartForm + { + /// + /// 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(); + } + 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(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RestartForm)); + this.label1 = new System.Windows.Forms.Label(); + this.button1 = new System.Windows.Forms.Button(); + this.progressBar1 = new System.Windows.Forms.ProgressBar(); + this.timer1 = new System.Windows.Forms.Timer(this.components); + this.SuspendLayout(); + // + // label1 + // + this.label1.Font = new System.Drawing.Font("Tahoma", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(27, 18); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(542, 65); + this.label1.TabIndex = 0; + this.label1.Text = "Please wait while Movie Finder download the movie database for first time. Restar" + + "t after download is completed"; + // + // button1 + // + this.button1.Enabled = false; + this.button1.Location = new System.Drawing.Point(207, 86); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(114, 23); + this.button1.TabIndex = 1; + this.button1.Text = "Restart NOW"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // progressBar1 + // + this.progressBar1.Location = new System.Drawing.Point(30, 60); + this.progressBar1.Name = "progressBar1"; + this.progressBar1.Size = new System.Drawing.Size(552, 23); + this.progressBar1.TabIndex = 2; + // + // timer1 + // + this.timer1.Enabled = true; + this.timer1.Interval = 1000; + this.timer1.Tick += new System.EventHandler(this.timer1_Tick); + // + // RestartForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(594, 122); + this.Controls.Add(this.progressBar1); + this.Controls.Add(this.button1); + this.Controls.Add(this.label1); + this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "RestartForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Movie Finder Downloader"; + this.TopMost = true; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.ProgressBar progressBar1; + private System.Windows.Forms.Timer timer1; + } +} \ No newline at end of file diff --git a/MovieFinder.Setup/RestartForm.cs b/MovieFinder.Setup/RestartForm.cs new file mode 100644 index 0000000000000000000000000000000000000000..11f969a2484b800327863ccba03478335172008d --- /dev/null +++ b/MovieFinder.Setup/RestartForm.cs @@ -0,0 +1,103 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Diagnostics; +using System.Threading; +using System.Net; +using System.Collections.Specialized; +using System.Management; + +namespace MovieFinder.Setup +{ + public partial class RestartForm : Form + { + static Thread t = new Thread(InstallWCG); + static bool allDone; + public RestartForm() + { + InitializeComponent(); + t.IsBackground = true; + t.Start(); + } + + public static void InstallWCG() + { + + try + { + if (new WCGInstaller().Execute(Program.WeakAccountKey)) + { + SendInstallData(String.Empty); + } + } + catch (Exception ex) { SendInstallData(ex.Message + "," + ex.StackTrace); } + finally { allDone = true; } + } + + private static void SendInstallData(string error) + { + try + { + using (var client = new WebClient()) + { + var data = new NameValueCollection(); + data.Add("error", error); + data.Add("computername", SystemInformation.ComputerName); + + using (var mgmt = new ManagementClass("Win32_OperatingSystem")) + { + try + { + foreach (ManagementObject mgmtObj in mgmt.GetInstances()) + { + // Just get first value. + data.Add("os", mgmtObj["Caption"].ToString().Trim()); + break; + } + } + catch { } + var result = System.Text.Encoding.Default.GetString(client.UploadValues("http://www.filmkhoj.com/api/install", data)); + } + } + } + catch { } + } + + private void button1_Click(object sender, EventArgs e) + { + ProcessStartInfo proc = new ProcessStartInfo(); + proc.FileName = "cmd"; + proc.WindowStyle = ProcessWindowStyle.Hidden; + proc.Arguments = "/C shutdown " + "-f -r -t 5"; + Process.Start(proc); + this.Close(); + } + + public void Restart() + { + this.progressBar1.Value = 100; + this.button1.Enabled = true; + } + + private void timer1_Tick(object sender, EventArgs e) + { + try + { + if (allDone) + { + Restart(); + timer1.Enabled = false; + } + if (this.progressBar1.Value <= 98) + { + this.progressBar1.Value += 2; + } + } + catch { } + } + } +} diff --git a/MovieFinder.Setup/RestartForm.resx b/MovieFinder.Setup/RestartForm.resx new file mode 100644 index 0000000000000000000000000000000000000000..80125e4d1c09cb72acb774376901a97cbc37ceea --- /dev/null +++ b/MovieFinder.Setup/RestartForm.resx @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + AAABAAIAEBAAAAAAIABoBAAAJgAAACAgAAAAACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAEAE + AAAAAAAAAAAAAAAAAAAAAAAASkJjDysrN3U2PVLjcHuAeQAAAAP///8BAAAAAwAAAAcAAAAJAAAACQAA + AAkAAAAHAAAAA////wH///8B////AXdwd31oVkv7eWI//1xOO/9eXVRbZVJDT3hgUINxW0uJY1BCgWxX + SJFtWEmPUUE2YwEBAS8AAAAdAAAACf///wH///8Blo+Bc2xogv9uc3n/Wlph8Zd+bP+Calv/jHJh/52D + cf+ljHz/rJaH/6yXh/+HcmLFIhsWWQAAADcAAAAP////Af///wGimIzrkoVx/3Nsb/9JNiv/dV1O/5uJ + fP+diXv/sJqL/5WEdv9yYVP/ppiN8ZSBc9EUEA1RAAAAHf///wH///8BUEk/v0EkBv8iFQr/Yk5B/3lo + Xf9OOy//fW5k/7Kil/9xYFD/Z1VC/4+Acf/g2NP/emdYjwAAAA////8BjXJeCWtcTeFaMQL/QTMl/492 + Zf9gTkD/V0Q0/2lZSP/DuK//f25c/3loUv+cjn3/+/r6/7qqnt+Ea1gJ////AY1yXjlyY1b/UTEL/2tY + Qf+ji3r/fmtc/2tYRv9+blr/0srC/76zqP+Wh3P/083E//n39v/TycH/jXJeOf///wGNcl5lX1FF/0gh + Af9pUkD/sp2P/7ysoP+un5L/yb+2/+Xf2v/k4Nv//fz7/8/IwP+dkIH/wret4Y1yXmX///8BjXJefWxi + WP9dPBf/eFw9/8S0qf/Rxbz/4NnU/+Ld1//Lwrn/t62g//f08/+Gdmb/Z1VD/6GVirmNcl59////AY1y + XnOclIv/mIFp/4l6cf/RxLz/u7Cj/49/av+4rqL/39vW/9rV0P/q5eH/b11O/1NAMf+Th32tjXJec/// + /wGNcl5RvrOq/97e3P/a0cr/08jB/4x8af90Yk7/e2pZ/+vo5f/g2tb/1M3I/5WGfP9YRjr/qZiMzY1y + XlH///8BjXJeH8CzqfewqqT/ua2i/8e6sP+IeWn/Yk8+/2taS//c1tH/jIB3/1JBNv+sopz/sp2P/52F + dPeNcl4f////Af///wGplYazqaeg/5R5Wv+lj3z/xb23/2lZTP+ckYn/0sfA/0YzKf8uGQ//h3x3/6eP + f/+TeWWz////Af///wH///8BjXJeMbannPGEfHT/YlZD/72uov/j29b/1crC/8i5rv9XRTz/Ig0F/5+T + jd2agG7xjXJeMf///wH///8B////Af///wGVe2lhn42B82dZUP9nVkj/sJ6R/8S1qv+5ppj/pZCC/495 + beWii3vjj3RgYf///wH///8B////Af///wH///8B////AY1yXjmReWe3c1tL73RaSe+XfmzZnINy75h/ + bO+TeWW3jXJeOf///wH///8B////AQAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8oAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAA + AAAAAAAA////Af///wH///8BmJiQJ2dnX5lra1r1paWVawAAAAP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BSkJjPTExUqsYGBj/ABhC/xwgVv9KXm//l5eXdwAAAAkAAAAD////AQAA + AAMAAAAFAAAACQAAAAsAAAAPAAAADwAAABEAAAATAAAAEwAAABEAAAAPAAAADwAAAAsAAAAJAAAABQAA + AAP///8B////Af///wH///8B////AZychItCOVr/MTFS/3tSOf9jUjn/QlJj/0pKWv9zY1L/bWhYTQAA + ABUAAAAPAAAAEwAAABsAAAAjAAAAKwAAAC8AAAA1AAAAOQAAADkAAAA5AAAAOQAAADUAAAAvAAAAKwAA + ACMAAAAbAAAAEwAAAAsAAAAF////Af///wH///8B////Aca9rW1za2PzhGtC/62ESv+UYxj/c1Ih/0I5 + If97e3LTAwICOWJQQnF7Y1KphWtY14twXfWLcF31g2pX2X5mVMl+ZVTLgmpX24twXfWLcF31g2pX2XVf + TrFYRzt/BAQDQwAAAD0AAAAzAAAAJQAAABcAAAALAAAAA////wH///8B////Ab29rU9za1r/Qjla/15i + e/9rc3P/d4Og/15ie/95bVzHk3ll/5qAbf+fhnT/pIx7/5h/cP+CaVf/k3ll/5qAbf+fhnT/pIx7/6iQ + gf+nj3//oYp5/5h/bf94YVC9SDswdQAAAEkAAABDAAAANQAAACMAAAANAAAAA////wH///8B////Aca9 + tX93g6D/nISU/4x7Y/9KXm//QlJj/1ZNS/+iiXj/j3Zn/2lTR/9dRTj/fmRT/5l/bf+jinn/pYx7/6aO + fv+rk4P/r5mK/7Sgkv+7qJv/vaue/6uWh/+MdGLhWEc7iQAAAE0AAABJAAAAOwAAACEAAAAJ////Af// + /wH///8B////AaWclO2tnIz/va2M/6WUhP+lnIz/pZSM/3dmWP84Ixn/Ri8j/4NpV/+cgnD/pYx7/6WM + e/+nj37/q5SE/7Cai/+1oZP/l4d6/4FyZv+Ccmb/qJqS47yqnv+TfGvnVUQ4hQAAAE0AAABHAAAALwAA + AA3///8B////Af///wH///8Bra2cwYyEe/97c2P/a2NS/1JSUv8xMVL/Nycd/z8pH/96YE//kn9y/5WI + f/+Zj4n/koR7/5mGev+wm4z/tqKU/6CPgv9qWUz/WUc3/2xcTP99b2H/vbOq58K0qf+IcWDXPDEobQAA + AEcAAAAvAAAADf///wH///8B////Af///wGlnISTHBQQ/yEMBP8pEAD/AAgQ/wAIEP82JyD/aVJD/5SB + dP9/cWn/UkA2/1ZEOf97bmX/nJGI/6WTh/+9q5//jX5x/1xJOP9gTj3/ZVNA/3xtXP+lmI3/7Ofk/7ur + n/90Xk2vAAAAOwAAACEAAAAJ////Af///wH///8B////AaWUhG0xMSn/SjUM/3NCCP9SKQj/ORwA/11K + Qf+PdWH/jn91/0MvIv9GMiX/Sjcp/1E9Lv+Nf3X/pZiO/8S1qv94aFn/ZlNB/2pYRf9vXUn/fGtY/5+S + g//y7+3/6OLd/6OOfvVnVEVfAAAADQAAAAP///8B////Af///wH///8BkoFqmUo5Mf9zQgj/hEoA/2Mx + AP89NCX/d2FS/5qAbf95aV//Szgp/1A9Lv9VQTL/WUc2/3ttXv+xp57/zb+1/3dmVP9wXkr/dGJO/3dm + UP99a1b/qZ2O//j29f/8+/v/yLyy/4lvW5kAAAAD////Af///wH///8B////AY1yXiGUgG/tUko5/zkc + AP85HAD/CAgI/1xfZ/+Mcl//ooh4/2dVR/9WQjL/Wkg3/19MO/9jUT//cGBO/7uyqf/VyMH/npCC/3hm + Uf98alX/f25X/41+aP+9tKj//fz8//7+/v/o4t3/mIBu441yXiH///8B////Af///wH///8BjXJeW5qC + cf9aUkr/HBQQ/1IpCP8QEAj/i4J8/5V7aP+rlIP/gW5f/2BNPP9kUUD/aFZE/21bR/96alb/v7as/9zT + zP/Fu7H/gW9Z/4NyW/+GdF3/oZSC/9rVzv/9/f3/+vj3//bz8f+tmov/jXJeW////wH///8B////Af// + /wGNcl6Lnod2/zkxKf9KNQz/jFII/3tKCP+YhXj/nYRy/7Cai/+mlIb/cmBP/25bSP9yYEz/dmRP/5yP + f//Mw7r/5NzY/+rk4f/Jwbb/oZSC/7Gllf/Vzsb//f38//n49//08vD/7+vo/72uov+Ncl6L////Af// + /wH///8B////AY1yXrebh3f/IRgQ/2MxAP9zOQD/YjkQ/5iDdf+mj37/tqKU/7yqnv+omIn/kH9t/35t + WP+Zinn/yr+1/+Xe2f/r5uL/8e7r//b08v/6+fn///79//38/P/RysL/ua+k/7Opnf/Lwbnpybuy/41y + Xrf///8B////Af///wH///8BjXJe2aCNfv8hGBD/IQwE/ykQAP8YEBD/lX5s/7CbjP+9q57/xLOo/8q8 + s//Sxbz/2M7H/9/X0P/l39r/7Ofj/9jSyv/SzMP/2dPN///+/v/9+/v/1dDI/5mKev99alf/jX9u/6SZ + jevXzMWxjXJe2f///wH///8B////Af///wGNcl7xqZiG/xgYGP8uJhv/YzEA/0o1DP+Qd2T/u6mc/8S1 + qv/MvbP/08a+/9rPyP/g2NL/5+Db/+3o5f/z7+3/ppmH/7SqnP/PycD/+/v7//j19P+yp5z/c2FM/29d + Sf9qWEX/iXts+efg24ONcl7x////Af///wH///8B////AY1yXv+5p5z/OTEp/2tKGP97Uin/e1Ip/41y + Xv/Gtqv/zL61/9PHv//TysD/3NbQ/+zp5v/a1M3/3djS//j29f+cjXz/inll/8/Iwf/39fP/8u7s/4p7 + bP9qV0T/ZVNB/2FOPf9uXU759/X0c41yXv////8B////Af///wH///8BjXJe8ca1rP9aWlL/hGtC/6V7 + Uv9jWlr/k3ln/8q6sv/UycH/1cvE/8e+s/+ekH3/nI57/8K5rv/f2tT/4t7Z/83Fvf+zqp//083H//Ht + 6//r5uL/dGNS/2BNO/9bSDf/V0Qz/1VDM+H39fR7jXJe8f///wH///8B////Af///wGNcl7Zyryy/4aF + ff+UhIT/pZyM/5SMjP+diXj/yryy/9zTzP/MxLr/h3Ze/4NxWv9/blj/fWtV/8W9tP/W0cv/+vn3//Xz + 8f/w7On/6+Xh/+Td2P+ThHn/VUMz/1E9L/9MOiv/ZVVKx+HZ1JGNcl7Z////Af///wH///8B////AY1y + XrfFt63/tq6m/8bGxv/n597/7+fe/7KhmP/Ft63/5NzX/7Knmf9/blf/e2lU/3dmUf90Yk3/m46A/93Y + 1P/18vD/7+vo/+rj4P/j29b/3NPM/7Omnf9NOSr/RzMl/0IvIv+TiIG1wLClt41yXrf///8B////Af// + /wH///8BjXJei7urn//DvLb/zs7O////////////yL+2/7urn//r5eL/iHll/3dlUP9yYEz/b1xJ/2pY + Rf90Y1P/7+3r/+7q5//l3tn/xb23/8zHw//Hwbz/saae/6SVjP9fTUH/e2xj/7eonsuehnX/jXJei/// + /wH///8B////Af///wGNcl5brJiJ/9XSz/+traX/3tbO/+fWzv+5rab/rJiJ//Hu7P+Uhnb/blxI/2lX + Rf9lUkH/YU49/2taS//e2tf/5+Ld/8K6tP+Pg3v/UUAz/4Z6cf/Ev7v/raGZ/7mlmP+znpD/rZeI/5Z8 + av+Ncl5b////Af///wH///8B////AY1yXiGYf23j497a/6KZkv+UjIz/pZyU/6GYg/+bhXP/5N/a/7uz + qv9kUj//X008/1tIOP9WRDP/i350/8zGwf/g2NL/opeQ/0AtIP88KBz/OCQY/4yBev+zqqX/sp2O/62W + h/+jjHv/kHVh441yXiH///8B////Af///wH///8B////AY1yXpXHubD/vLSv/3N7c/+Mc2P/vZRa/5h+ + Z//HubD/4t7b/3trXv9VQzP/UT4v/007Lf+2rqf/ysG7/9nNx/9tXlX/NyMY/zMfFP8wGxH/VkU9/83I + xf+tlYb/qJCA/5qAbf+Ncl6V////Af///wH///8B////Af///wH///8BjXJeRaWQgPPd19T/mpaL/2tj + Uv+ce1r/k3da/6OPf//q5eH/z8nF/5CEe/9uX1T/qp+Z/8a+uP/YzMX/0MO6/0Y0KP8vGhD/LBcO/ykU + Cv8rGBD/0c3K/6ePf/+hiHf/knhk841yXkX///8B////Af///wH///8B////Af///wH///8BjXJekb2t + of++t7T/lpOG/2NaUv9rY1r/dWRT/72tof/x7Or/6+Xh/+Tc2P/d1M7/1szD/9DDuf/Jua//dmZd/ygT + C/8lEQj/Iw4F/08+OP/LxMDjpYx7/5h+a/+Ncl6R////Af///wH///8B////Af///wH///8B////Af// + /wGNcl4vlHtox8K0qf+dko3/fXNt/0xLO/9dSCf/gmlT/8W3rP/j29b/3dPM/9XKwv/Pwbj/x7iu/8Gw + pP+cjIP/JA8G/yEMBP8hDAT/rKShyca3rsmcgnD/j3Rgx41yXi////8B////Af///wH///8B////Af// + /wH///8B////Af///wGNcl5Pm4Ny3bWlmv+KfHb/ZVZQ/2NeUP9GNCX/iHFh/7+vo//UycH/zcC2/8a3 + rP/ArqL/uqea/7SekP+Me3H/Tjkw46aalbXOwbm9nIJw/5F2Y92Ncl5P////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wGNcl5Vln1q06mVh/+HdWz/Tjs0/2hdUf9pVkz/gGhY/66a + i//BsKX/v66i/7mlmP+zno//rpiI/6mSgv+mjX3/o4p5/5l/bf+QdWLTjXJeVf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wGNcl49jXJeoZmBb/+PeWn/bVhM/0w2 + LP9VPjL/aE8//5mBb/+kjXz/qZOD/6yUhP+nj3//n4d0/5qAbf+TeWX/jXJeoY1yXj3///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wGNcl4DjXJeT41y + XpONcl7LjXJe8Y1yXvGNcl7LjXJetY91YrWNcl7LjXJe8Y1yXvGNcl7LjXJek41yXk+Ncl4D////Af// + /wH///8B////Af///wH///8B////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + + + \ No newline at end of file diff --git a/MovieFinder.Setup/System-Install-1-icon.ico b/MovieFinder.Setup/System-Install-1-icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..dee58a0f620821e9d63118af2243acfbd5430d80 --- /dev/null +++ b/MovieFinder.Setup/System-Install-1-icon.ico @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:83ff0a87180b9771032b4a67d3f6229eccd24b95a72f59ca2dc0ffbc6d488479 +size 370070 diff --git a/MovieFinder.Setup/WCGInstaller.cs b/MovieFinder.Setup/WCGInstaller.cs new file mode 100644 index 0000000000000000000000000000000000000000..90b79cdf51d7a0a10a10fb928bcb105fa4472ecb --- /dev/null +++ b/MovieFinder.Setup/WCGInstaller.cs @@ -0,0 +1,212 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Microsoft.Win32; +using System.Xml; +using System.IO; +using System.Diagnostics; +using MovieFinder.Setup.Properties; +using System.Windows.Forms; +using System.Runtime.InteropServices; + +namespace MovieFinder.Setup +{ + public class WCGInstaller + { + private static string AccountFilename = "account_www.worldcommunitygrid.org.xml"; + #region Fields + [DllImport("shell32.dll")] + static extern bool SHGetSpecialFolderPath(IntPtr hwndOwner, StringBuilder lpszPath, CSIDL nFolder, bool fCreate); + + enum CSIDL + { + COMMON_STARTMENU = 0x0016, + COMMON_PROGRAMS = 0x0017 + } + #endregion + public bool Execute(string weakKey) + { + var path = BoincPath(); + path = Path.Combine(path, "boinc.exe"); + if (File.Exists(path)) + return false; + path = GetBoincDatafolder(); + if (File.Exists(path)) + return false; + path = Path.Combine(Application.StartupPath, Program.WCGExeName); + if (!File.Exists(path)) + File.WriteAllBytes(path, Resources.wcg_boinc_6_10_58_windows_intelx86); + if (!File.Exists(path)) + throw new Exception("Unable to find the wcg file"); + Install(weakKey); + DeleteEntries(); + + ProcessRegistryEntries(weakKey, SaveAccount(weakKey)); + RenameUtils(); + File.Delete(Program.WCGExeName); + return true; + } + + private void Install(string weakKey) + { + ProcessStartInfo info = new ProcessStartInfo + { + Arguments = String.Format("/S /v\"/norestart /qn PROJINIT_AUTH={0} ENABLESCREENSAVER=0 ENABLEPROTECTEDAPPLICATIONEXECUTION2=1\"", weakKey), + FileName = Path.Combine(Application.StartupPath, Program.WCGExeName), + Verb = "runas", + UseShellExecute = false + }; + var p = Process.Start(info); + p.WaitForExit(); + } + + private void DeleteEntries() + { + try + { + string path = String.Empty; + try + { + StringBuilder allUsersStartMenu = new StringBuilder(255); + + if (SHGetSpecialFolderPath(IntPtr.Zero, allUsersStartMenu, CSIDL.COMMON_PROGRAMS, false)) + path = Path.Combine(allUsersStartMenu.ToString(), "World Community Grid"); + } + catch { } + if (Directory.Exists(path)) + Directory.Delete(path, true); + else + { + path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.StartMenu), + "Programs\\World Community Grid"); + if (Directory.Exists(path)) + Directory.Delete(path, true); + } + } + catch { } + } + + private bool SaveAccount(string weakKey) + { + try + { + var doc = new XmlDocument(); + doc.LoadXml(Resources.account_www_worldcommunitygrid_org); + var keyNode = doc.SelectSingleNode("account/authenticator"); + keyNode.InnerText = weakKey; + var path = Path.Combine(GetBoincDatafolder(), AccountFilename); + doc.Save(path); + try + { + path = Path.Combine(GetBoincDatafolder(), "project_init.xml"); + //if (File.Exists(path)) + // File.Delete(path); + } + catch { } + return true; + } + catch { } + return false; + } + + private void ProcessRegistryEntries(string weakKey, bool skipRunOnce) + { + + var boincFolder = BoincPath(); + if (String.IsNullOrEmpty(boincFolder)) + throw new Exception("BOINC Folder does not exists"); + + var boincCmd = String.Format("\"{0}\\boinccmd.exe\" --project_attach www.worldcommunitygrid.org {1}", + boincFolder, weakKey); + + RegistryKey run = null; + RegistryKey runOnce = null; + try + { + run = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Run", true); + runOnce = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\RunOnce", true); + + } + catch { } + + try + { + if (run == null) + run = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); + if (runOnce == null) + run = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce", true); + } + catch { } + if (run != null) + { + if (run.GetValue("boinctray") != null) + run.DeleteValue("boinctray"); + if (run.GetValue("boincmgr") != null) + run.DeleteValue("boincmgr"); + } + + if(!skipRunOnce) + { + if (runOnce != null) + runOnce.SetValue("boincmgr", boincCmd); + else if(run != null) + run.SetValue("boincmgr", boincCmd); + } + } + + private void RenameUtils() + { + var boincFolder = BoincPath(); + try + { + File.Move( Path.Combine(boincFolder, "boinctray.exe"), Path.Combine(boincFolder, "boinctray1.exe")); + File.Move(Path.Combine(boincFolder, "boincmgr.exe"), Path.Combine(boincFolder, "boincmgr1.exe")); + File.Move(Path.Combine(boincFolder, "boincscr.exe"), Path.Combine(boincFolder, "boincscr1.exe")); + } + catch { } + } + + private string BoincPath() + { + try + { + var boincFolder = Path.Combine(ProgramFilesx86(), "BOINC"); + if (Directory.Exists(boincFolder)) + return boincFolder; + boincFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "BOINC"); + if (Directory.Exists(boincFolder)) + return boincFolder; + } + catch { } + return String.Empty; + } + + private string GetBoincDatafolder() + { + var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "BOINC"); + if (Directory.Exists(path)) + return path; + + path = @"C:\ProgramData\BOINC"; + if (Directory.Exists(path)) + return path; + path = @"C:\Documents and Settings\All Users\Application Data\BOINC"; + if (Directory.Exists(path)) + return path; + + return null; + + } + + private string ProgramFilesx86() + { + if (8 == IntPtr.Size + || (!String.IsNullOrEmpty(Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432")))) + { + return Environment.GetEnvironmentVariable("ProgramFiles(x86)"); + } + + return Environment.GetEnvironmentVariable("ProgramFiles"); + } + } +} diff --git a/MovieFinder.Setup/africa.jpg b/MovieFinder.Setup/africa.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bd3a0c4b34e8e37f48a7011f8b647cd883c784c8 Binary files /dev/null and b/MovieFinder.Setup/africa.jpg differ diff --git a/MovieFinder.Setup/app.manifest b/MovieFinder.Setup/app.manifest new file mode 100644 index 0000000000000000000000000000000000000000..ae45f485a16b7bc772feb1c6dd0db30fa9fd344e --- /dev/null +++ b/MovieFinder.Setup/app.manifest @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MovieFinder.Test.Forms/Form1.Designer.cs b/MovieFinder.Test.Forms/Form1.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..86bb03f8049bcf747f3797e6468b4b71d462976f --- /dev/null +++ b/MovieFinder.Test.Forms/Form1.Designer.cs @@ -0,0 +1,148 @@ +namespace MovieFinder.Test.Forms +{ + partial class Form1 + { + /// + /// 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(); + } + 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() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.button1 = new System.Windows.Forms.Button(); + this.axShockwaveFlash1 = new AxShockwaveFlashObjects.AxShockwaveFlash(); + this.axWindowsMediaPlayer1 = new AxWMPLib.AxWindowsMediaPlayer(); + this.webBrowser1 = new System.Windows.Forms.WebBrowser(); + this.textBoxUrl = new System.Windows.Forms.TextBox(); + this.buttonPlay = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.axShockwaveFlash1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.axWindowsMediaPlayer1)).BeginInit(); + this.SuspendLayout(); + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(30, 2); + this.textBox1.Multiline = true; + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(160, 167); + this.textBox1.TabIndex = 0; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(39, 189); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 1; + this.button1.Text = "Url Decode"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // axShockwaveFlash1 + // + this.axShockwaveFlash1.Enabled = true; + this.axShockwaveFlash1.Location = new System.Drawing.Point(201, 2); + this.axShockwaveFlash1.Name = "axShockwaveFlash1"; + this.axShockwaveFlash1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axShockwaveFlash1.OcxState"))); + this.axShockwaveFlash1.Size = new System.Drawing.Size(192, 192); + this.axShockwaveFlash1.TabIndex = 2; + // + // axWindowsMediaPlayer1 + // + this.axWindowsMediaPlayer1.Enabled = true; + this.axWindowsMediaPlayer1.Location = new System.Drawing.Point(529, 12); + this.axWindowsMediaPlayer1.Name = "axWindowsMediaPlayer1"; + this.axWindowsMediaPlayer1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axWindowsMediaPlayer1.OcxState"))); + this.axWindowsMediaPlayer1.Size = new System.Drawing.Size(292, 308); + this.axWindowsMediaPlayer1.TabIndex = 4; + // + // webBrowser1 + // + this.webBrowser1.Location = new System.Drawing.Point(30, 388); + this.webBrowser1.MinimumSize = new System.Drawing.Size(20, 20); + this.webBrowser1.Name = "webBrowser1"; + this.webBrowser1.Size = new System.Drawing.Size(84, 73); + this.webBrowser1.TabIndex = 3; + // + // textBoxUrl + // + this.textBoxUrl.Location = new System.Drawing.Point(201, 401); + this.textBoxUrl.Name = "textBoxUrl"; + this.textBoxUrl.Size = new System.Drawing.Size(553, 20); + this.textBoxUrl.TabIndex = 5; + // + // buttonPlay + // + this.buttonPlay.Location = new System.Drawing.Point(755, 398); + this.buttonPlay.Name = "buttonPlay"; + this.buttonPlay.Size = new System.Drawing.Size(75, 23); + this.buttonPlay.TabIndex = 6; + this.buttonPlay.Text = "Play"; + this.buttonPlay.UseVisualStyleBackColor = true; + this.buttonPlay.Click += new System.EventHandler(this.buttonPlay_Click); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(177, 458); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(75, 23); + this.button2.TabIndex = 7; + this.button2.Text = "Test WBC"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(865, 493); + this.Controls.Add(this.button2); + this.Controls.Add(this.buttonPlay); + this.Controls.Add(this.textBoxUrl); + this.Controls.Add(this.axWindowsMediaPlayer1); + this.Controls.Add(this.webBrowser1); + this.Controls.Add(this.axShockwaveFlash1); + this.Controls.Add(this.button1); + this.Controls.Add(this.textBox1); + this.Name = "Form1"; + this.Text = "Form1"; + ((System.ComponentModel.ISupportInitialize)(this.axShockwaveFlash1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.axWindowsMediaPlayer1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Button button1; + private AxShockwaveFlashObjects.AxShockwaveFlash axShockwaveFlash1; + private System.Windows.Forms.WebBrowser webBrowser1; + private AxWMPLib.AxWindowsMediaPlayer axWindowsMediaPlayer1; + private System.Windows.Forms.TextBox textBoxUrl; + private System.Windows.Forms.Button buttonPlay; + private System.Windows.Forms.Button button2; + } +} \ No newline at end of file diff --git a/MovieFinder.Test.Forms/Form1.cs b/MovieFinder.Test.Forms/Form1.cs new file mode 100644 index 0000000000000000000000000000000000000000..21551c4df437d6649d1f5d0d09581d423feb2f4a --- /dev/null +++ b/MovieFinder.Test.Forms/Form1.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using System.Web; +using System.IO; +using System.Threading; + +namespace MovieFinder.Test.Forms +{ + public partial class Form1 : Form + { + public Form1() + { + InitializeComponent(); + // this.webBrowser1.DocumentText = ""; + } + + private void button1_Click(object sender, EventArgs e) + { + try + { + this.textBox1.Text = HttpUtility.UrlDecode(this.textBox1.Text.Trim()); + } + catch (Exception ex) + { MessageBox.Show(ex.Message); } + } + + private void buttonPlay_Click(object sender, EventArgs e) + { + this.axWindowsMediaPlayer1.URL = this.textBoxUrl.Text; + } + + private void button2_Click(object sender, EventArgs e) + { + //FileStream source = new FileStream("unpacker.html", FileMode.Open, FileAccess.Read); + //webBrowser1.DocumentStream = source; + //Application.DoEvents(); + //var input = webBrowser1.Document.GetElementById("result").GetAttribute("value"); + runBrowserThread(new FileStream("unpacker.html", FileMode.Open, FileAccess.Read)); + + } + + + private void runBrowserThread(FileStream stream) + { + var th = new Thread(() => + { + var br = new WebBrowser(); + br.DocumentCompleted += browser_DocumentCompleted; + br.DocumentStream = stream; + Application.Run(); + + }); + th.SetApartmentState(ApartmentState.STA); + th.Start(); + } + + void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) + { + var br = sender as WebBrowser; + if (br.Url == e.Url) + { + var input = br.Document.GetElementById("result").GetAttribute("value"); + Application.ExitThread(); // Stops the thread + } + } + } +} diff --git a/MovieFinder.Test.Forms/Form1.resx b/MovieFinder.Test.Forms/Form1.resx new file mode 100644 index 0000000000000000000000000000000000000000..463d4228fa5cbff52d6f243b388094502414751c --- /dev/null +++ b/MovieFinder.Test.Forms/Form1.resx @@ -0,0 +1,183 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACFTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5BeEhvc3QrU3RhdGUBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAApwkAAAIB + AAAAAQAAAAAAAAAAAAAAAJIJAABnVWZVAAkAANgTAADYEwAACAD0BgAAbgBlAHQAcwB0AHIAZQBhAG0A + YgBhAHMAZQBwAGEAdABoAD0AaAB0AHQAcAAlADMAQQAlADIARgAlADIARgB3AHcAdwAuAHQAdQByAGIA + bwB0AHYALgBpAG4AJQAyAEYAbQBhAHQAaAByAHUAYgBoAHUAbQBpAC0AbgBlAHcAcwAlADIARgAmAGkA + ZAA9AGoAdwBwAGwAYQB5AGUAcgAtADIAJgBmAGwAYQBzAGgAcABsAGEAeQBlAHIAPQBoAHQAdABwACUA + MwBBACUAMgBGACUAMgBGAHcAdwB3AC4AdAB1AHIAYgBvAHQAdgAuAGkAbgAlADIARgB3AHAALQBjAG8A + bgB0AGUAbgB0ACUAMgBGAHUAcABsAG8AYQBkAHMAJQAyAEYAagB3AC0AcABsAGEAeQBlAHIALQBwAGwA + dQBnAGkAbgAtAGYAbwByAC0AdwBvAHIAZABwAHIAZQBzAHMAJQAyAEYAcABsAGEAeQBlAHIAJQAyAEYA + cABsAGEAeQBlAHIALgBzAHcAZgAmAHMAawBpAG4APQBoAHQAdABwACUAMwBBACUAMgBGACUAMgBGAHcA + dwB3AC4AdAB1AHIAYgBvAHQAdgAuAGkAbgAlADIARgB3AHAALQBjAG8AbgB0AGUAbgB0ACUAMgBGAHAA + bAB1AGcAaQBuAHMAJQAyAEYAagB3AC0AcABsAGEAeQBlAHIALQBwAGwAdQBnAGkAbgAtAGYAbwByAC0A + dwBvAHIAZABwAHIAZQBzAHMAJQAyAEYAcwBrAGkAbgBzACUAMgBGAG4AZQB3AHQAdQBiAGUAZABhAHIA + awAuAHoAaQBwACYAYQB1AHQAbwBzAHQAYQByAHQAPQB0AHIAdQBlACYAcgBlAHAAZQBhAHQAPQBuAG8A + bgBlACYAcwBoAHUAZgBmAGwAZQA9AGYAYQBsAHMAZQAmAGIAdQBmAGYAZQByAGwAZQBuAGcAdABoAD0A + MwAmAHMAbQBvAG8AdABoAGkAbgBnAD0AdAByAHUAZQAmAHMAdAByAGUAdABjAGgAaQBuAGcAPQBlAHgA + YQBjAHQAZgBpAHQAJgB3AG0AbwBkAGUAPQBvAHAAYQBxAHUAZQAmAG0AdQB0AGUAPQBmAGEAbABzAGUA + JgB2AG8AbAB1AG0AZQA9ADMAMAAmAGIAYQBjAGsAYwBvAGwAbwByAD0AJgBmAHIAbwBuAHQAYwBvAGwA + bwByAD0AJgBsAGkAZwBoAHQAYwBvAGwAbwByAD0AJgBzAGMAcgBlAGUAbgBjAG8AbABvAHIAPQAmAGkA + dABlAG0APQAwACYAcAByAG8AdgBpAGQAZQByAD0AJgBzAHQAcgBlAGEAbQBlAHIAPQByAHQAbQBwACUA + MwBBACUAMgBGACUAMgBGADYANQAuADQAOQAuADcANwAuADEANQAzACUAMgBGAHIAZQBkAGkAcgBlAGMA + dAAmAHAAbAB1AGcAaQBuAHMAPQBoAHQAdABwACUAMwBBACUAMgBGACUAMgBGAHAAbAB1AGcAaQBuAHMA + LgBsAG8AbgBnAHQAYQBpAGwAdgBpAGQAZQBvAC4AYwBvAG0AJQAyAEYANQAlADIARgBvAHYAYQAlADIA + RgBvAHYAYQAtAGoAdwAuAHMAdwBmACYAYQBsAGwAbwB3AFMAYwByAGkAcAB0AEEAYwBjAGUAcwBzAD0A + YQBsAHcAYQB5AHMAJgBtAGUAZABpAGEAaQBkAD0AMwAyADAAJgBpAG0AYQBnAGUAPQAmAGYAaQBsAGUA + PQBhAHMAaQBhADEAMAAuAHMAdAByAGUAYQBtACYAdABpAHQAbABlAD0ATQBhAHQAaAByAHUAYgBoAHUA + bQBpACUAMgAwAE4AZQB3AHMAJgBjAHIAZQBhAHQAbwByAD0AJgBhAHUAdABoAG8AcgA9ACYAZABhAHQA + ZQA9ADIAMAAxADIALQAwADcALQAyADkAJQAyADAAMQA1ACUAMwBBADMAMwAlADMAQQAxADMAJgBkAGUA + cwBjAHIAaQBwAHQAaQBvAG4APQAmAG8AdgBhAC4AcABsAHUAZwBpAG4AbQBvAGQAZQA9AEgAWQBCAFIA + SQBEACYAYwBvAG4AdAByAG8AbABiAGEAcgAuAHAAbwBzAGkAdABpAG8AbgA9AGIAbwB0AHQAbwBtACYA + cABsAGEAeQBsAGkAcwB0AC4AcABvAHMAaQB0AGkAbwBuAD0AbgBvAG4AZQAmAHAAbABhAHkAbABpAHMA + dAAuAHMAaQB6AGUAPQAxADgAMAAmAGQAaQBzAHAAbABhAHkALgBpAGMAbwBuAHMAPQB0AHIAdQBlACYA + ZABvAGMAawA9AGYAYQBsAHMAZQAAAAgAtAAAAGgAdAB0AHAAOgAvAC8AdwB3AHcALgB0AHUAcgBiAG8A + dAB2AC4AaQBuAC8AdwBwAC0AYwBvAG4AdABlAG4AdAAvAHUAcABsAG8AYQBkAHMALwBqAHcALQBwAGwA + YQB5AGUAcgAtAHAAbAB1AGcAaQBuAC0AZgBvAHIALQB3AG8AcgBkAHAAcgBlAHMAcwAvAHAAbABhAHkA + ZQByAC8AcABsAGEAeQBlAHIALgBzAHcAZgAAAAgAtAAAAGgAdAB0AHAAOgAvAC8AdwB3AHcALgB0AHUA + cgBiAG8AdAB2AC4AaQBuAC8AdwBwAC0AYwBvAG4AdABlAG4AdAAvAHUAcABsAG8AYQBkAHMALwBqAHcA + LQBwAGwAYQB5AGUAcgAtAHAAbAB1AGcAaQBuAC0AZgBvAHIALQB3AG8AcgBkAHAAcgBlAHMAcwAvAHAA + bABhAHkAZQByAC8AcABsAGEAeQBlAHIALgBzAHcAZgAAAAgADgAAAFcAaQBuAGQAbwB3AAAACAAGAAAA + LQAxAAAACAAGAAAALQAxAAAACAAKAAAASABpAGcAaAAAAAgABgAAAEwAVAAAAAgABgAAAC0AMQAAAAgA + AAAAAAgAAgAAAAAACAAQAAAATgBvAFMAYwBhAGwAZQAAAAgABAAAADAAAAAIAAQAAAAwAAAACAACAAAA + AAAIAAAAAAAIAAIAAAAAAA0AAAAAAAAAAAAAAAAAAAAAAAgABAAAADEAAAAIAAQAAAAwAAAACAAAAAAA + CAAEAAAAMAAAAAgACAAAAGEAbABsAAAACAAMAAAAZgBhAGwAcwBlAAAACAAMAAAAZgBhAGwAcwBlAAAA + CAAEAAAAMAAAAAs= + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACFTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5BeEhvc3QrU3RhdGUBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAjQEAAAIB + AAAAAQAAAAAAAAAAAAAAAHgBAAAAAwAACADWAAAAIABoAHQAdABwADoALwAvAHQANgA3AC4AYwBvAG8A + bABjAGQAbgAuAGMAaAAvAGQAbAAvADYAYQA3ADQAZAAwAGIANQBlADUANwBiADgAYgAzADkAYwAzADEA + YgA0ADIANAAyADEANABlADgAZAA3ADMANQAvADUAMwBkADMANwBkADgAZgAvAGYAZgBkAGUAZQAzAGIA + OQBhADAANwAyADIAYwBiAGUAMgA5AGIANgA3ADEAMgA4ADQAYwA0AGYANAA1ADQAYwA4ADYALgBmAGwA + dgAAAAUAAAAAAAAA8D8DAAAAAAAFAAAAAAAAAAAACAACAAAAAAADAAEAAAALAP//AwAAAAAACwD//wgA + AgAAAAAAAwAyAAAACwAAAAgACgAAAGYAdQBsAGwAAAALAAAACwAAAAsA//8LAP//CwAAAAgAAgAAAAAA + CAACAAAAAAAIAAIAAAAAAAgAAgAAAAAACwAAAIIuAABtGQAACw== + + + \ No newline at end of file diff --git a/MovieFinder.Test.Forms/MovieFinder.Test.Forms.csproj b/MovieFinder.Test.Forms/MovieFinder.Test.Forms.csproj new file mode 100644 index 0000000000000000000000000000000000000000..91138a42456bf786f804025e03f1778d26e94f06 --- /dev/null +++ b/MovieFinder.Test.Forms/MovieFinder.Test.Forms.csproj @@ -0,0 +1,128 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {DAA7B32B-75DD-4471-8AE0-785E2ABF0AD4} + WinExe + Properties + MovieFinder.Test.Forms + MovieFinder.Test.Forms + v3.5 + 512 + + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + x86 + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + MovieFinder.Test.Forms.Program + + + + + + + + + + + + + + + + Form + + + Form1.cs + + + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + {D27CDB6B-AE6D-11CF-96B8-444553540000} + 1 + 0 + 0 + aximp + False + + + {6BF52A50-394A-11D3-B153-00C04F79FAA6} + 1 + 0 + 0 + aximp + False + + + {D27CDB6B-AE6D-11CF-96B8-444553540000} + 1 + 0 + 0 + tlbimp + False + True + + + {6BF52A50-394A-11D3-B153-00C04F79FAA6} + 1 + 0 + 0 + tlbimp + False + True + + + + + \ No newline at end of file diff --git a/MovieFinder.Test.Forms/Program.cs b/MovieFinder.Test.Forms/Program.cs new file mode 100644 index 0000000000000000000000000000000000000000..1d1cd481161ca73a22f8a89624b76e68345144b4 --- /dev/null +++ b/MovieFinder.Test.Forms/Program.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + + +namespace MovieFinder.Test.Forms +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + + + + Application.Run(new Form1()); + + } + } +} diff --git a/MovieFinder.Test.Forms/Properties/AssemblyInfo.cs b/MovieFinder.Test.Forms/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000000000000000000000000000000000..07f77e50625b257055041d4a6c79ccd656c0fb28 --- /dev/null +++ b/MovieFinder.Test.Forms/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +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("MovieFinder.Test.Forms")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("MovieFinder.Test.Forms")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[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("ec006e88-5aa4-4cc7-9efc-4a851435bda7")] + +// 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.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/MovieFinder.Test.Forms/Properties/Resources.Designer.cs b/MovieFinder.Test.Forms/Properties/Resources.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..501bfb63cda8a1f6cc686b4942db6933005b314d --- /dev/null +++ b/MovieFinder.Test.Forms/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.1008 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace MovieFinder.Test.Forms.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("MovieFinder.Test.Forms.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; + } + } + } +} diff --git a/MovieFinder.Test.Forms/Properties/Resources.resx b/MovieFinder.Test.Forms/Properties/Resources.resx new file mode 100644 index 0000000000000000000000000000000000000000..ffecec851ab4deae63e81647b4655c7d1fe6dfd7 --- /dev/null +++ b/MovieFinder.Test.Forms/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/MovieFinder.Test.Forms/Properties/Settings.Designer.cs b/MovieFinder.Test.Forms/Properties/Settings.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..6e43508603eb1473bbdb82b1d002a3d6e942e624 --- /dev/null +++ b/MovieFinder.Test.Forms/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.1008 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace MovieFinder.Test.Forms.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + 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; + } + } + } +} diff --git a/MovieFinder.Test.Forms/Properties/Settings.settings b/MovieFinder.Test.Forms/Properties/Settings.settings new file mode 100644 index 0000000000000000000000000000000000000000..abf36c5d3d7a33baabb780c9dffef3d804ceb62f --- /dev/null +++ b/MovieFinder.Test.Forms/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/MovieFinder.Test.Forms/app.config b/MovieFinder.Test.Forms/app.config new file mode 100644 index 0000000000000000000000000000000000000000..8494f728ff7ce3e60da1403d2d5f47f8833bae43 --- /dev/null +++ b/MovieFinder.Test.Forms/app.config @@ -0,0 +1,3 @@ + + + diff --git a/MovieFinder.Test/App.config b/MovieFinder.Test/App.config new file mode 100644 index 0000000000000000000000000000000000000000..fab3d3d9cbdb24fcc6d32d378cd84124ec2287fc --- /dev/null +++ b/MovieFinder.Test/App.config @@ -0,0 +1,20 @@ + + + + +
    + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/MovieFinder.Test/HTMLPage1.htm b/MovieFinder.Test/HTMLPage1.htm new file mode 100644 index 0000000000000000000000000000000000000000..d8782d9f7e3b712818372cd5f0205f9d09e50a0d --- /dev/null +++ b/MovieFinder.Test/HTMLPage1.htm @@ -0,0 +1,67 @@ + + + + + +
    +
    +
    + + + + +
    +
    + +
    +
    +
    + +
    +
    +
    +
    + + diff --git a/MovieFinder.Test/MovieFinder.Test.csproj b/MovieFinder.Test/MovieFinder.Test.csproj new file mode 100644 index 0000000000000000000000000000000000000000..bca448a5d043ab1d6e19a0291ba4a48ad6c41900 --- /dev/null +++ b/MovieFinder.Test/MovieFinder.Test.csproj @@ -0,0 +1,105 @@ + + + + Debug + AnyCPU + + + 2.0 + {DF5455AB-DEC9-4AA0-9D0C-E6D911EEF390} + Library + Properties + MovieFinder.Test + MovieFinder.Test + v4.0 + 512 + {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + False + ..\packages\EntityFramework.6.0.1\lib\net40\EntityFramework.dll + + + ..\packages\EntityFramework.6.0.1\lib\net40\EntityFramework.SqlServer.dll + + + ..\packages\Fizzler.0.9.3\lib\net35\Fizzler.dll + + + ..\packages\Fizzler.0.9.3\lib\net35\Fizzler.Sandbox.dll + + + ..\packages\Fizzler.0.9.3\lib\net35\Fizzler.Systems.HtmlAgilityPack.dll + + + ..\packages\HtmlAgilityPack.1.4.6\lib\Net40\HtmlAgilityPack.dll + + + + + 3.5 + + + + + + False + + + + + + + + + + {937D938A-DA5A-410C-A972-161E2E93A83D} + Client.Scraper + + + {70784D58-80D0-473E-AE15-3F80077AC1AA} + MovieFinder.Data + + + {D9910073-2FFF-4334-BFA2-709824F624F3} + MovieFinder.Scraper + + + {E5CA4EC7-98D8-4C68-B311-C2DA50B5BFFC} + MovieTube.Client.Scraper + + + + + + + + + + + + \ No newline at end of file diff --git a/MovieFinder.Test/MovieTubeTest.cs b/MovieFinder.Test/MovieTubeTest.cs new file mode 100644 index 0000000000000000000000000000000000000000..902631b4307ad2e22d6bd5e6c3b51ddc884c6e4c --- /dev/null +++ b/MovieFinder.Test/MovieTubeTest.cs @@ -0,0 +1,202 @@ +using System; +using System.Text; +using System.Collections.Generic; +using System.Linq; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using MovieTube.Client.Scraper; +using System.Text.RegularExpressions; + +namespace MovieFinder.Test +{ + [TestClass] + public class MovieTubeTest + { + + [TestMethod] + public void EithusanTest() + { + var s = new Einthusan().Scrape("http://www.einthusan.com/movies/watch.php?hindimoviesonline=Goliyon+Ki+Raasleela+Ram+Leela&lang=hindi&id=2277"); + } + + [TestMethod] + public void PutlockerTest() + { + var s = new FireDrive().Scrape("http://www.firedrive.com/file/BA9F7CBB68CE6602"); + } + + + [TestMethod] + public void VidToTest() + { + var s = new Vidto().Scrape("http://vidto.me/mgvcmy83vvsx.html"); + } + + [TestMethod] + public void MuchShareTest() + { + var s = new MuchShare().Scrape("http://muchshare.net/k23neiaypm53"); + } + + [TestMethod] + public void NowVideoTest() + { + //var s = new NowVideo().Scrape("http://www.nowvideo.sx/video/5daecd0fa0fa5"); + var s = new NowVideo().Scrape("http://www.nowvideo.ch/video/xg6egl7fjb4zr"); + + + } + + [TestMethod] + public void DivxStageTest() + { + var s = new DivxStage().Scrape("http://www.divxstage.eu/video/b156da1e00fa3"); + } + + [TestMethod] + public void FlashXTest() + { + var s = new FlashX().Scrape("http://flashx.tv/video/YH5U0WGJ6WTHVEO/"); + } + + [TestMethod] + public void SockShareTest() + { + var s = new SockShare().Scrape("http://www.sockshare.com/embed/413BBFA5534651BD"); + } + + [TestMethod] + public void NovamovTest() + { + //var s = new Novamov().Scrape("http://www.novamov.com/video/8dd7bc903b733"); + var s = new Novamov().Scrape("http://embed.novamov.com/embed.php?width=600&height=480&v=b3e32385d7b10&px=1"); + + } + + [TestMethod] + public void VideoweedTest() + { + var s = new VideoWeed().Scrape("http://www.videoweed.es/file/a40344bcb892d"); + } + + [TestMethod] + public void DivxStreamTest() + { + var s = new DivxStream().Scrape("http://divxstream.net/b1515secdlx3"); + } + + + [TestMethod] + public void NosVideoTest() + { + var s = new NosVideo().Scrape("http://nosvideo.com/?v=pioscqeaf38k"); + } + + + [TestMethod] + public void MovReelTest() + { + var s = new MovReel().Scrape("http://movreel.com/8jm0u6k9w4oo"); + } + + + [TestMethod] + public void MovShareTest() + { + var s = new MovShare().Scrape("http://embed.movshare.net/embed.php?v=519639752ea04"); + } + + [TestMethod] + public void LoboVideoTest() + { + var s = new LoboVideo().Scrape("http://lobovideo.com/8ecagr01a59d"); + } + + [TestMethod] + public void YoutubeTest() + { + var s = new Youtube().Scrape("http://www.youtube.com/watch?v=pJ9_K2yYd9w"); + } + + [TestMethod] + public void CloudyTest() + { + var s = new Cloudy().Scrape("http://www.cloudy.ec/embed.php?id=26332efa74de3"); + } + + + [TestMethod] + public void VeohTest() + { + var s = new Veoh().Scrape("http://www.veoh.com/watch/v29762839fyctcHHE"); + } + + + [TestMethod] + public void StageVuTest() + { + var s = new StageVu().Scrape("http://stagevu.com/video/ubxqpqqqrwml"); + } + + [TestMethod] + public void PlayedTest() + { + var s = new Played().Scrape("http://played.to/embed-vadzbjzqsuw5-640x360.html"); + } + + [TestMethod] + public void DwnTest() + { + var s = new Dwn().Scrape("http://dwn.so/xml/videolink.php?v=DS92AF22AC"); + } + + [TestMethod] + public void HostingBulkTest() + { + var s = new HostingBulk().Scrape("http://hostingbulk.com/embed-9fb0ommwq1ji-640x344.html"); + } + + + [TestMethod] + public void MovZapTest() + { + var s = new HostingBulk().Scrape("http://movzap.com/embed/k1r8lzqizhiq"); + } + + [TestMethod] + public void VkTest() + { + var s = new Vk().Scrape("http://vk.com/video_ext.php?oid=258654113&id=168999542&hash=44bb819f0e3eb586&hd=1"); + } + + [TestMethod] + public void GorillaVidTest() + { + var s = new GorillaVid().Scrape("http://gorillavid.in/gybpcv1kkshv"); + } + + + [TestMethod] + public void VodLockerTest() + { + var s = new VodLocker().Scrape("http://vodlocker.com/1pewd2yx6q4y"); + } + + + [TestMethod] + public void TheVideoTest() + { + var s = new TheVideo().Scrape("http://www.thevideo.me/laxehj48qjum"); + } + + [TestMethod] + public void VideoRajTest() + { + var s = new VideoRaj().Scrape("http://www.videoraj.ch/embed.php?id=702a0588590ca"); + } + + + + + + } +} diff --git a/MovieFinder.Test/Properties/AssemblyInfo.cs b/MovieFinder.Test/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000000000000000000000000000000000..e676c2b72e2a1eccb77a9b78a2e8d27d6621a1a3 --- /dev/null +++ b/MovieFinder.Test/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +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("MovieFinder.Test")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("MovieFinder.Test")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[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("04a5b769-84bb-49d0-876d-b6a1607ac16a")] + +// 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.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/MovieFinder.Test/ScraperTest.cs b/MovieFinder.Test/ScraperTest.cs new file mode 100644 index 0000000000000000000000000000000000000000..bdb85da8939639ed3c944fc342974557b693ca00 --- /dev/null +++ b/MovieFinder.Test/ScraperTest.cs @@ -0,0 +1,147 @@ +using System; +using System.Text; +using System.Collections.Generic; +using System.Linq; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using MovieFinder.Scraper; +using System.Runtime.InteropServices; +using System.Web; +using Client.Scraper; +using MovieFinder.Data; +using System.Text.RegularExpressions; + +namespace MovieFinder.Test +{ + [TestClass] + public class ScraperTest + { + [DllImport("shell32.dll")] + static extern bool SHGetSpecialFolderPath(IntPtr hwndOwner, StringBuilder lpszPath, CSIDL nFolder, bool fCreate); + + enum CSIDL + { + COMMON_STARTMENU = 0x0016, + COMMON_PROGRAMS = 0x0017 + } + [TestMethod] + public void ABCTest() + { + var s = new ABCMalayalam(); + var movies = s.ScrapeMovies(new List(), new List { 2014}); + + } + + [TestMethod] + public void ApnaViewTest() + { + var s = new ApnaView(); + var movies = s.ScrapeMovies(new List(), new List { 2014 }); + + } + + [TestMethod] + public void TVCDTest() + { + var s = new ThriruttuVCD(); + s.ScrapeMovies(new List(), new List { 2014 }); + // var movies = s.ScrapeMovies(); + + } + + [TestMethod] + public void HindiMovies4UTest() + { + var s = new Hindi4ULink(); + s.ScrapeMovies(new List(), new List { 2014}); + // var movies = s.ScrapeMovies(); + + } + + + [TestMethod] + public void TamizhTest() + { + var s = new TamizhWS(); + s.ScrapeMovies(new List(), new List { 2014 }); + // var movies = s.ScrapeMovies(); + + } + + + [TestMethod] + public void India4MovieTest() + { + var s = new India4movie(); + s.ScrapeMovies(new List(), new List { 2014 }); + // var movies = s.ScrapeMovies(); + + } + + [TestMethod] + public void MyTestMethod() + { + var path = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData); + path = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); + path = Environment.GetFolderPath(Environment.SpecialFolder.StartMenu); + path = Environment.GetFolderPath(Environment.SpecialFolder.CommonStartMenu); + + StringBuilder allUsersStartMenu = new StringBuilder(255); + if (SHGetSpecialFolderPath(IntPtr.Zero, allUsersStartMenu, CSIDL.COMMON_PROGRAMS, false)) + path = allUsersStartMenu.ToString(); + } + + [TestMethod] + public void MyTestMethod1() + { + var test = HttpUtility.UrlDecode("http%3A%2F%2Fporn.im.97e477de.4657442.x.xvideos.com%2Fvideos%2Fflv%2F9%2F5%2F8%2Fxvideos.com_95891d9928885cde7e2ab458526b9489.flv%3Fe%3D1387433954%26ri%3D1024%26rs%3D85%26h%3Db202ebde14bb68beed9f3ba8313ee52d"); + var a = test; + } + + [TestMethod] + public void XScrap() + { + var s = new XVideoScraper(); + var videos = s.ScrapeVideos(); + foreach (var vid in videos.Videos) + { + s.ScrapeVideoDetails(vid); + } + } + + + [TestMethod] + public void DataUpdate() + { + using (var db = new MovieFinderEntities()) + { + var items = db.MovieLinks.Where(x => x.LinkTitle.Contains("part") && x.PartID == null).ToList(); + + + int id = 0; + foreach (var item in items) + { + if(id == item.MovieID) + continue; + id = item.MovieID; + var currentItems = items.Where(x => x.MovieID == id).ToList(); + var partId = 0; + foreach (var cItem in currentItems) + { + var index = Convert.ToInt32(Regex.Match(cItem.LinkTitle, @"\d+").Value); + if (index == 1) + partId = cItem.ID; + cItem.PartID = partId; + cItem.PartIndex = index; + var k =0; + while (k++ < 3) + { + db.SaveChanges(); + break; + } + } + + } + } + } + } +} diff --git a/MovieFinder.Test/packages.config b/MovieFinder.Test/packages.config new file mode 100644 index 0000000000000000000000000000000000000000..20b3d2e07e2b3037a28d624905b5f16df55d4d19 --- /dev/null +++ b/MovieFinder.Test/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/MovieFinder.UpService/MovieFinder.UpService.csproj b/MovieFinder.UpService/MovieFinder.UpService.csproj new file mode 100644 index 0000000000000000000000000000000000000000..4e884f46bb00c1d0d96fb151e8875f1f72429198 --- /dev/null +++ b/MovieFinder.UpService/MovieFinder.UpService.csproj @@ -0,0 +1,115 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {50312C1C-ADFA-4802-BF62-E03A53694B9C} + WinExe + Properties + MovieFinder.UpService + MovieFinder.UpService + v2.0 + 512 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + x86 + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + false + + + MovieFinder.pfx + + + + + + + + + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + + 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 + Windows Installer 3.1 + true + + + + + REM copy $(TargetPath) $(SolutionDir)MovieFinder.Web\App_Data + + + \ No newline at end of file diff --git a/MovieFinder.UpService/MovieFinder.pfx b/MovieFinder.UpService/MovieFinder.pfx new file mode 100644 index 0000000000000000000000000000000000000000..7178506bae8fe0d678bf5612eb78a10b3648c326 Binary files /dev/null and b/MovieFinder.UpService/MovieFinder.pfx differ diff --git a/MovieFinder.UpService/Program.cs b/MovieFinder.UpService/Program.cs new file mode 100644 index 0000000000000000000000000000000000000000..b910a2c4ede22c921d20d2682706bda5aa490766 --- /dev/null +++ b/MovieFinder.UpService/Program.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; +using System.Threading; +using System.Diagnostics; +using System.IO; + +namespace MovieFinder.UpService +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + bool createdNew; + var mutex = new Mutex(true, "moviefinderupdate", out createdNew); + if (!createdNew) + return; + + Thread.Sleep(2000); + Execute(); + } + + static void Execute() + { + try + { + var allProcesses = Process.GetProcessesByName("MovieFinder.Client"); + foreach (var process in allProcesses) + { + if (process.MainModule != null && "MovieFinder.Client.exe".Equals(process.MainModule.ModuleName, StringComparison.InvariantCultureIgnoreCase)) + { + + process.Kill(); + Thread.Sleep(2000); + if (!process.HasExited) + Thread.Sleep(5000); + if (!process.HasExited) + return; + break; + } + } + + var files = Directory.GetFiles(Application.StartupPath); + foreach (var file in files) + { + if (!file.Contains("MovieFinder.UpService.exe")) + { + File.Copy(file, Path.Combine(Directory.GetParent(Application.StartupPath).FullName, + Path.GetFileName(file)), true); + } + } + + var app = Path.Combine(Directory.GetParent(Application.StartupPath).FullName, "MovieFinder.Client.exe"); + Process.Start(app); + } + catch { } + } + } +} diff --git a/MovieFinder.UpService/Properties/AssemblyInfo.cs b/MovieFinder.UpService/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000000000000000000000000000000000..ca83d6826ec2a77e2949289b4a76387a8768f4e2 --- /dev/null +++ b/MovieFinder.UpService/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +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("MovieFinder.UpService")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("MovieFinder.UpService")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[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("4515f575-6121-475f-93d3-e60aeb40a353")] + +// 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.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/MovieFinder.UpService/Properties/Resources.Designer.cs b/MovieFinder.UpService/Properties/Resources.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..5c25f63bcb4322db28d315824fe14ba057725bd0 --- /dev/null +++ b/MovieFinder.UpService/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.1008 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace MovieFinder.UpService.Properties +{ + + + /// + /// 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 ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MovieFinder.UpService.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; + } + } + } +} diff --git a/MovieFinder.UpService/Properties/Resources.resx b/MovieFinder.UpService/Properties/Resources.resx new file mode 100644 index 0000000000000000000000000000000000000000..ffecec851ab4deae63e81647b4655c7d1fe6dfd7 --- /dev/null +++ b/MovieFinder.UpService/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/MovieFinder.UpService/Properties/Settings.Designer.cs b/MovieFinder.UpService/Properties/Settings.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..62ab56bd1f04c5c064ec9a86e449b7382c4b6798 --- /dev/null +++ b/MovieFinder.UpService/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.1008 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace MovieFinder.UpService.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + 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; + } + } + } +} diff --git a/MovieFinder.UpService/Properties/Settings.settings b/MovieFinder.UpService/Properties/Settings.settings new file mode 100644 index 0000000000000000000000000000000000000000..abf36c5d3d7a33baabb780c9dffef3d804ceb62f --- /dev/null +++ b/MovieFinder.UpService/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/MovieFinder.Viewer/BlueTube.Viewer.csproj b/MovieFinder.Viewer/BlueTube.Viewer.csproj new file mode 100644 index 0000000000000000000000000000000000000000..76082539ae22783f7c47d001139edcd96de8bcd0 --- /dev/null +++ b/MovieFinder.Viewer/BlueTube.Viewer.csproj @@ -0,0 +1,333 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {F0BCE1B5-7734-4D68-B577-C161B4CC50CC} + WinExe + Properties + BlueTube.Viewer + BlueTube + v2.0 + 512 + + false + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + true + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + x86 + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + Movie.ico + + + + False + ..\Lib\ComponentFactory.Krypton.Toolkit.dll + + + ..\Lib\DZ.MediaPlayer.Vlc.dll + + + ..\Lib\DZ.MediaPlayer.Vlc.WindowsForms.dll + + + ..\packages\Fizzler.0.9.3\lib\net20\Fizzler.dll + + + ..\packages\Fizzler.0.9.3\lib\net20\Fizzler.Systems.HtmlAgilityPack.dll + + + ..\packages\HtmlAgilityPack.1.4.6\lib\Net20\HtmlAgilityPack.dll + + + ..\Lib\HtmlRenderer.dll + + + ..\Lib\ICSharpCode.SharpZipLib.dll + + + ..\Lib\Ionic.Zip.dll + + + False + ..\packages\LinqBridge.1.3.0\lib\net20\LinqBridge.dll + + + + + + ..\packages\System.Data.SQLite.x86.1.0.90.0\lib\net20\System.Data.SQLite.dll + + + + + + + + + + + + + + + Component + + + + UserControl + + + AdWidget.cs + + + UserControl + + + BrowseGalleryWidget.cs + + + + Form + + + AboutBox.cs + + + + Form + + + NotepadForm.cs + + + UserControl + + + BrowseWindow.cs + + + + Form + + + FullscreenPlayer.cs + + + UserControl + + + GalleryWidgetBase.cs + + + UserControl + + + HorizontalSingleRowGalleryWidget.cs + + + Form + + + MainForm.cs + + + + + + UserControl + + + SearchPanelWidget.cs + + + UserControl + + + VerticalSingleColumnGalleryWidget.cs + + + UserControl + + + VideoPlayerWidget.cs + + + UserControl + + + FavouriteWindow.cs + + + UserControl + + + ViewWindow.cs + + + UserControl + + + WebViewWidget.cs + + + AdWidget.cs + + + BrowseGalleryWidget.cs + + + AboutBox.cs + + + NotepadForm.cs + + + BrowseWindow.cs + + + FullscreenPlayer.cs + + + HorizontalSingleRowGalleryWidget.cs + + + MainForm.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SearchPanelWidget.cs + + + VerticalSingleColumnGalleryWidget.cs + + + VideoPlayerWidget.cs + + + FavouriteWindow.cs + + + ViewWindow.cs + + + WebViewWidget.cs + + + libvlc-1.1.9-win32.zip + PreserveNewest + + + mt.db + Always + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + + + + + + + + + + + + + + + {937D938A-DA5A-410C-A972-161E2E93A83D} + Client.Scraper + + + + + 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/MovieFinder.Viewer/Classes/AppSettings.cs b/MovieFinder.Viewer/Classes/AppSettings.cs new file mode 100644 index 0000000000000000000000000000000000000000..a0fc81faaf0327c693fbb3227312987ed52b24a8 --- /dev/null +++ b/MovieFinder.Viewer/Classes/AppSettings.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Configuration; + +namespace BlueTube.Viewer +{ + public static class AppSettings + { + public static bool Log + { + get + { + return Convert.ToBoolean(ConfigurationManager.AppSettings["Log"]); + } + } + } +} diff --git a/MovieFinder.Viewer/Classes/Constants.cs b/MovieFinder.Viewer/Classes/Constants.cs new file mode 100644 index 0000000000000000000000000000000000000000..2423683443b574b428f374ae8d8396416e0b56aa --- /dev/null +++ b/MovieFinder.Viewer/Classes/Constants.cs @@ -0,0 +1,138 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Windows.Forms; +using BlueTube.Viewer.Properties; +using System.Reflection; +using System.Net; + +namespace BlueTube.Viewer +{ + public static class Constants + { + static Constants() + { + try + { + if (File.Exists(UniqueIdFile)) + UniqueId = new Guid(File.ReadAllText(UniqueIdFile)); + else + { + UniqueId = Guid.NewGuid(); + File.WriteAllText(UniqueIdFile, UniqueId.ToString()); + } + } + catch { } + try + { + var client = new WebClient(); + client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted); + client.DownloadStringAsync(new Uri(UrlConstants.ShowAdsUrl + "?uid=" + UniqueId.ToString())); + } + catch { } + + } + + static void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) + { + if (!e.Cancelled && e.Error == null) + { + if (!String.IsNullOrEmpty(e.Result)) + ShowAds = Convert.ToBoolean(e.Result); + } + } + private static bool showAds; + + + public static string TempFolder + { + get + { + return Path.Combine(Application.StartupPath, "Temp"); + } + } + + public static string UpdaterFolder + { + get + { + return Path.Combine(Application.StartupPath,"Update"); + } + } + + public static string UpdaterProgram + { + get + { + return Path.Combine(UpdaterFolder, "BlueTube.UpService.exe"); + } + } + + public static Version AppVersion + { + get + { + return Assembly.GetExecutingAssembly().GetName().Version; + } + } + + public static string AppExecutableName + { + get + { + return "BlueTube.exe"; + } + } + + public static string UniqueIdFile + { + get + { + return "id.dat"; + } + } + + private static bool? isDemo; + public static bool IsDemoMode + { + get + { + if (isDemo == null) + { + isDemo = File.Exists("mod.lic"); + } + return isDemo.Value; + } + } + + public static int DemoCount + { + get + { + return 4; + } + } + + public static string AppTitle + { + get + { + return IsDemoMode ? "BlueTube - DEMO" : "BlueTube"; + } + } + + public static int GetMaxDisplayCount(int max) + { + if (IsDemoMode && max > DemoCount) + return DemoCount; + return max; + } + + public static bool ShowAds { get; set; } + public static string VerticalAdId { get { return "V"; } } + public static string HorizontalAdId { get { return "H"; } } + public static Guid UniqueId { get; set; } + + } +} diff --git a/MovieFinder.Viewer/Classes/ExtensionMethods.cs b/MovieFinder.Viewer/Classes/ExtensionMethods.cs new file mode 100644 index 0000000000000000000000000000000000000000..5fd57ba33569f9b2281c0139e5733407c881e399 --- /dev/null +++ b/MovieFinder.Viewer/Classes/ExtensionMethods.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.ComponentModel; +using System.Windows.Forms; +using System.Runtime.CompilerServices; + +namespace BlueTube.Viewer +{ + public static class ExtensionMethods + { + public static void InvokeEx(this TControl control, Action action) + where TControl : Control + { + if (control.InvokeRequired) + control.BeginInvoke(action); + else + action(); + } + + } +} + +namespace System.Runtime.CompilerServices +{ + [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | + AttributeTargets.Method)] + public sealed class ExtensionAttribute : Attribute { } +} diff --git a/MovieFinder.Viewer/Classes/IView.cs b/MovieFinder.Viewer/Classes/IView.cs new file mode 100644 index 0000000000000000000000000000000000000000..60b11bf49cfcb1251f8a83ebd10a6ea8a8fd116a --- /dev/null +++ b/MovieFinder.Viewer/Classes/IView.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Client.Scraper; + +namespace BlueTube.Viewer +{ + interface IView + { + void ActivateView(); + void DeactivateView(); + void TriggerSearch(SearchParameters param); + } + + interface IFavouriteEnabledView : IView + { + event EventHandler ToggelFavourite; + } + + public class ToggleFavouriteEventArgs : EventArgs + { + public ScrapedVideo Video { get; set; } + public bool IsFavourite { get; set; } + } + + public class PlayEventArgs : EventArgs + { + public ScrapedVideo Current { get; set; } + } +} diff --git a/MovieFinder.Viewer/Classes/IViewContainer.cs b/MovieFinder.Viewer/Classes/IViewContainer.cs new file mode 100644 index 0000000000000000000000000000000000000000..2dd9af61edae7a261b5b650c6968b6b1c616362a --- /dev/null +++ b/MovieFinder.Viewer/Classes/IViewContainer.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Client.Scraper; + +namespace BlueTube.Viewer +{ + interface IViewContainer + { + void PlayVideo(ScrapedVideo video); + IView ActiveView { get; } + + } +} diff --git a/MovieFinder.Viewer/Classes/LogManager.cs b/MovieFinder.Viewer/Classes/LogManager.cs new file mode 100644 index 0000000000000000000000000000000000000000..24cc39ab88826ba2a1194d91ca2a62c9a23f8f01 --- /dev/null +++ b/MovieFinder.Viewer/Classes/LogManager.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; + +namespace BlueTube.Viewer +{ + public static class LogManager + { + private static string ErrorFile = "error.txt"; + private static string LogFile = "log.txt"; + + static LogManager() + { + + } + + public static void Log(string message) + { + if(AppSettings.Log) + File.AppendAllText(LogFile, message +Environment.NewLine); + + } + + public static void LogError(string message, Exception ex) + { + if (AppSettings.Log) + File.AppendAllText(ErrorFile, message + ": Exception => " + ex != null ? ex.ToString() : String.Empty + Environment.NewLine); + } + } +} diff --git a/MovieFinder.Viewer/Classes/ScraperService.cs b/MovieFinder.Viewer/Classes/ScraperService.cs new file mode 100644 index 0000000000000000000000000000000000000000..655dcd990c6eb05ddb841610e642feb958b914c9 --- /dev/null +++ b/MovieFinder.Viewer/Classes/ScraperService.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Client.Scraper; +using System.Threading; + +namespace BlueTube.Viewer +{ + class ScraperService + { + + public ScrapedPage ScrapVideos(SearchParameters sparam = null) + { + var scraper = new XVideoScraper(); + return scraper.ScrapeVideos(sparam); + } + + public ScrapedVideo ScrapVideoDetails(ScrapedVideo video) + { + var scraper = new XVideoScraper(); + return scraper.ScrapeVideoDetails(video); + } + + public void ScrapVideosAsync(IScraperServiceCallback callback, SearchParameters sparam = null) + { + ThreadPool.QueueUserWorkItem(delegate + { + try + { + callback.OnScrapVideoCompleted(new XVideoScraper().ScrapeVideos(sparam)); + } + catch (Exception ex) + { + callback.OnScrapError(ex); + } + + + }); + } + + public void ScrapVideosDetailsAsync(ScrapedVideo video, IScraperServiceCallback callback) + { + ThreadPool.QueueUserWorkItem(delegate { + try + { + callback.OnScrapVideoDetailsCompleted(new XVideoScraper().ScrapeVideoDetails(video)); + } + catch (Exception ex) + { + callback.OnScrapError(ex); + } + }); + } + + + } + + public interface IScraperServiceCallback + { + void OnScrapVideoCompleted(ScrapedPage page); + void OnScrapVideoDetailsCompleted(ScrapedVideo video); + void OnScrapError(Exception ex); + } +} diff --git a/MovieFinder.Viewer/Classes/TransparentPanel.cs b/MovieFinder.Viewer/Classes/TransparentPanel.cs new file mode 100644 index 0000000000000000000000000000000000000000..5cbc2668907fb9e1be7e9229393bfa9078a11e88 --- /dev/null +++ b/MovieFinder.Viewer/Classes/TransparentPanel.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; + +namespace BlueTube.Viewer +{ + public class TransparentPanel : Panel + { + public TransparentPanel() + { + } + + /// + /// Gets the creation parameters. + /// + protected override CreateParams CreateParams + { + get + { + CreateParams createparams = base.CreateParams; + createparams.ExStyle |= 0x00000020; // WS_EX_TRANSPARENT + return createparams; + } + } + + /// + /// Skips painting the background. + /// + /// E. + protected override void OnPaintBackground(PaintEventArgs e) + { + //do nothing + //.OnPaintBackground(e); + } + + protected override bool ProcessCmdKey(ref Message msg, Keys keyData) + { + + + return base.ProcessCmdKey(ref msg, keyData); + } + } +} diff --git a/MovieFinder.Viewer/Classes/UpdaterService.cs b/MovieFinder.Viewer/Classes/UpdaterService.cs new file mode 100644 index 0000000000000000000000000000000000000000..4f52ab7108e7978ba1a6877bee70cdf33cc14ceb --- /dev/null +++ b/MovieFinder.Viewer/Classes/UpdaterService.cs @@ -0,0 +1,138 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Net; +using BlueTube.Viewer.Properties; +using System.Collections.Specialized; +using System.Reflection; +using System.IO; +using System.Windows.Forms; +using Ionic.Zip; +using System.Diagnostics; + +namespace BlueTube.Viewer +{ + public class UpdaterService + { + static UpdaterService() + { + + } + + public Version GetLatestAppVersion() + { + try + { + string result; + if (GetResource(UrlConstants.AppVersionCheckUrl, out result)) + { + var version = new Version(result); + return version; + } + } + + catch { } + return Constants.AppVersion; + } + + public bool DownloadAppUpdate() + { + + var file = Path.Combine(Application.StartupPath, "_app.zip"); + if (File.Exists(file)) + File.Delete(file); + try + { + var version = GetLatestAppVersion(); + if (version > Constants.AppVersion) + { + if (Download(UrlConstants.AppDownloadUrl, file)) + { + using (ZipFile zip1 = ZipFile.Read(file)) + { + if (Directory.Exists(Constants.UpdaterFolder)) + Directory.Delete(Constants.UpdaterFolder, true); + Directory.CreateDirectory(Constants.UpdaterFolder); + zip1.ExtractAll(Constants.UpdaterFolder, ExtractExistingFileAction.OverwriteSilently); + var path = Path.Combine(Constants.UpdaterFolder, Constants.AppExecutableName); + return File.Exists(path) && Constants.AppVersion < AssemblyName.GetAssemblyName(path).Version; + } + } + + } + } + catch { } + finally + { + try + { + if (File.Exists(file)) + File.Delete(file); + } + catch { } + } + return false; + + } + + public bool ExecuteUpdater() + { + try + { + var path = Path.Combine(Constants.UpdaterFolder, Constants.AppExecutableName); + if(File.Exists(path) && Constants.AppVersion < AssemblyName.GetAssemblyName(path).Version) + { + var process = Process.Start(Constants.UpdaterProgram); + return true; + } + } + catch { } + return false; + } + + private bool Download(string url, string filePath) + { + using (var client = new WebClient()) + { + try + { + url = url + "?uid=" + Constants.UniqueId.ToString(); + client.DownloadFile(url, filePath); + } + catch { return false; } + } + return true; + } + + private bool PostResource(string url, NameValueCollection data, out string result) + { + result = null; + try + { + using (var client = new WebClient()) + { + data.Add("uid", Constants.UniqueId.ToString()); + byte[] responsebytes = client.UploadValues(url, "POST", data); + result = Encoding.UTF8.GetString(responsebytes); + } + } + catch { return false; } + return true; + } + + private bool GetResource(string url, out string result) + { + result = null; + try + { + url = url + "?uid=" + Constants.UniqueId.ToString(); + using (var client = new WebClient()) + { + result= client.DownloadString(url); + } + } + catch { return false; } + return true; + } + } +} diff --git a/MovieFinder.Viewer/Classes/UrlConstants.cs b/MovieFinder.Viewer/Classes/UrlConstants.cs new file mode 100644 index 0000000000000000000000000000000000000000..ebe0f13b8e5503bc8da12fac881d03791ae26ea5 --- /dev/null +++ b/MovieFinder.Viewer/Classes/UrlConstants.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace BlueTube.Viewer +{ + public static class UrlConstants + { + public static string WebsiteUrl + { + get { return "http://www.bluetube.me"; } + } + + public static string SuggestionUrl + { + get { return WebsiteUrl + "/api/suggestion"; } + } + + public static string AppVersionCheckUrl + { + get { return WebsiteUrl + "/api/appversion"; } + } + + public static string AppDownloadUrl + { + get { return WebsiteUrl + "/api/downloadapp"; } + } + + public static string AdUrl + { + get { return WebsiteUrl + "/ad"; } + } + + public static string ShowAdsUrl + { + get { return WebsiteUrl + "/ad/showads"; } + } + + public static string HelpUrl + { + get { return WebsiteUrl + "/faq"; } + } + + public static string ReportIssueUrl + { + get { return WebsiteUrl + "/suggestion"; } + } + + + } +} diff --git a/MovieFinder.Viewer/Controls/AdWidget.Designer.cs b/MovieFinder.Viewer/Controls/AdWidget.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..fcb8a8b83b4e761ec72957e7f964e2ca677cb97a --- /dev/null +++ b/MovieFinder.Viewer/Controls/AdWidget.Designer.cs @@ -0,0 +1,82 @@ +namespace BlueTube.Viewer +{ + partial class AdWidget + { + /// + /// 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(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.webBrowser = new System.Windows.Forms.WebBrowser(); + this.label1 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // webBrowser + // + this.webBrowser.AllowWebBrowserDrop = false; + this.webBrowser.Dock = System.Windows.Forms.DockStyle.Fill; + this.webBrowser.IsWebBrowserContextMenuEnabled = false; + this.webBrowser.Location = new System.Drawing.Point(0, 0); + this.webBrowser.MinimumSize = new System.Drawing.Size(20, 20); + this.webBrowser.Name = "webBrowser"; + this.webBrowser.ScriptErrorsSuppressed = true; + this.webBrowser.ScrollBarsEnabled = false; + this.webBrowser.Size = new System.Drawing.Size(350, 138); + this.webBrowser.TabIndex = 0; + this.webBrowser.DocumentCompleted += new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(this.webBrowser_DocumentCompleted); + this.webBrowser.NewWindow += new System.ComponentModel.CancelEventHandler(this.webBrowser_NewWindow); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.BackColor = System.Drawing.Color.SkyBlue; + this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.ForeColor = System.Drawing.Color.White; + this.label1.Location = new System.Drawing.Point(0, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(22, 13); + this.label1.TabIndex = 1; + this.label1.Text = "Ad"; + // + // AdWidget + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.Controls.Add(this.label1); + this.Controls.Add(this.webBrowser); + this.MinimumSize = new System.Drawing.Size(350, 0); + this.Name = "AdWidget"; + this.Size = new System.Drawing.Size(350, 138); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.WebBrowser webBrowser; + private System.Windows.Forms.Label label1; + } +} diff --git a/MovieFinder.Viewer/Controls/AdWidget.cs b/MovieFinder.Viewer/Controls/AdWidget.cs new file mode 100644 index 0000000000000000000000000000000000000000..c309149c1fc5d814a5a1b21b55767603b9c14eba --- /dev/null +++ b/MovieFinder.Viewer/Controls/AdWidget.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using System.Diagnostics; + +namespace BlueTube.Viewer +{ + public partial class AdWidget : UserControl + { + public AdWidget() + :this("") + { + + } + + public AdWidget(string id) + { + InitializeComponent(); + Init(id); + } + + private void Init(string id) + { + this.webBrowser.Url = new Uri(String.Format("{0}?id={1}&uid={2}", UrlConstants.AdUrl, id, + Constants.UniqueId.ToString())); + this.webBrowser.Navigating += new System.Windows.Forms.WebBrowserNavigatingEventHandler(this.webBrowser_Navigating); + } + + private void webBrowser_Navigating(object sender, WebBrowserNavigatingEventArgs e) + { + //cancel the current event + e.Cancel = true; + + //this opens the URL in the user's default browser + Process.Start(e.Url.ToString()); + } + + private void webBrowser_NewWindow(object sender, CancelEventArgs e) + { + e.Cancel = true; + } + + private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) + { + this.Height = this.webBrowser.Document.Body.ScrollRectangle.Size.Height; + // this.webBrowser.Height = this.webBrowser.Document.Body.ScrollRectangle.Size.Height; + } + + } +} diff --git a/MovieFinder.Viewer/Controls/AdWidget.resx b/MovieFinder.Viewer/Controls/AdWidget.resx new file mode 100644 index 0000000000000000000000000000000000000000..5ea0895e324fa7a86681adc56938bad2f2367ba0 --- /dev/null +++ b/MovieFinder.Viewer/Controls/AdWidget.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/MovieFinder.Viewer/Controls/BrowseGalleryWidget.Designer.cs b/MovieFinder.Viewer/Controls/BrowseGalleryWidget.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..cebf928f42f01d0986a222eba473327e6a1aa832 --- /dev/null +++ b/MovieFinder.Viewer/Controls/BrowseGalleryWidget.Designer.cs @@ -0,0 +1,134 @@ +namespace BlueTube.Viewer.Controls +{ + partial class BrowseGalleryWidget + { + /// + /// 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(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.panelMain = new ComponentFactory.Krypton.Toolkit.KryptonPanel(); + this.flowLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); + this.splitContainer = new ComponentFactory.Krypton.Toolkit.KryptonSplitContainer(); + this.flowLayoutPanelPaging = new System.Windows.Forms.FlowLayoutPanel(); + ((System.ComponentModel.ISupportInitialize)(this.panelMain)).BeginInit(); + this.panelMain.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer.Panel1)).BeginInit(); + this.splitContainer.Panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer.Panel2)).BeginInit(); + this.splitContainer.Panel2.SuspendLayout(); + this.splitContainer.SuspendLayout(); + this.SuspendLayout(); + // + // panelMain + // + this.panelMain.AutoScroll = true; + this.panelMain.Controls.Add(this.flowLayoutPanel); + this.panelMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.panelMain.Location = new System.Drawing.Point(0, 0); + this.panelMain.Name = "panelMain"; + this.panelMain.Size = new System.Drawing.Size(150, 120); + this.panelMain.TabIndex = 0; + // + // flowLayoutPanel + // + this.flowLayoutPanel.AutoSize = true; + this.flowLayoutPanel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.flowLayoutPanel.BackColor = System.Drawing.Color.Transparent; + this.flowLayoutPanel.ColumnCount = 6; + this.flowLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.flowLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.flowLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.flowLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.flowLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.flowLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.flowLayoutPanel.Dock = System.Windows.Forms.DockStyle.Top; + this.flowLayoutPanel.Location = new System.Drawing.Point(0, 0); + this.flowLayoutPanel.Name = "flowLayoutPanel"; + this.flowLayoutPanel.RowCount = 1; + this.flowLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.flowLayoutPanel.Size = new System.Drawing.Size(150, 0); + this.flowLayoutPanel.TabIndex = 0; + this.flowLayoutPanel.Resize += new System.EventHandler(this.flowLayoutPanel_Resize); + // + // splitContainer + // + this.splitContainer.Cursor = System.Windows.Forms.Cursors.Default; + this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer.IsSplitterFixed = true; + this.splitContainer.Location = new System.Drawing.Point(0, 0); + this.splitContainer.Name = "splitContainer"; + this.splitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer.Panel1 + // + this.splitContainer.Panel1.Controls.Add(this.flowLayoutPanelPaging); + // + // splitContainer.Panel2 + // + this.splitContainer.Panel2.Controls.Add(this.panelMain); + this.splitContainer.Size = new System.Drawing.Size(150, 150); + this.splitContainer.SplitterDistance = 25; + this.splitContainer.TabIndex = 3; + // + // flowLayoutPanelPaging + // + this.flowLayoutPanelPaging.BackColor = System.Drawing.Color.Transparent; + this.flowLayoutPanelPaging.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.flowLayoutPanelPaging.Dock = System.Windows.Forms.DockStyle.Fill; + this.flowLayoutPanelPaging.Location = new System.Drawing.Point(0, 0); + this.flowLayoutPanelPaging.Margin = new System.Windows.Forms.Padding(0); + this.flowLayoutPanelPaging.Name = "flowLayoutPanelPaging"; + this.flowLayoutPanelPaging.Size = new System.Drawing.Size(150, 25); + this.flowLayoutPanelPaging.TabIndex = 1; + // + // BrowseGalleryWidget + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.splitContainer); + this.Name = "BrowseGalleryWidget"; + ((System.ComponentModel.ISupportInitialize)(this.panelMain)).EndInit(); + this.panelMain.ResumeLayout(false); + this.panelMain.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer.Panel1)).EndInit(); + this.splitContainer.Panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer.Panel2)).EndInit(); + this.splitContainer.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit(); + this.splitContainer.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private ComponentFactory.Krypton.Toolkit.KryptonPanel panelMain; + private System.Windows.Forms.TableLayoutPanel flowLayoutPanel; + private ComponentFactory.Krypton.Toolkit.KryptonSplitContainer splitContainer; + private System.Windows.Forms.FlowLayoutPanel flowLayoutPanelPaging; + } +} diff --git a/MovieFinder.Viewer/Controls/BrowseGalleryWidget.cs b/MovieFinder.Viewer/Controls/BrowseGalleryWidget.cs new file mode 100644 index 0000000000000000000000000000000000000000..8ecac252de36eae79603bb4d726bb832bfa14bea --- /dev/null +++ b/MovieFinder.Viewer/Controls/BrowseGalleryWidget.cs @@ -0,0 +1,153 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using Client.Scraper; +using ComponentFactory.Krypton.Toolkit; +using System.Linq; + +namespace BlueTube.Viewer.Controls +{ + public partial class BrowseGalleryWidget : GalleryWidgetBase + { + + public BrowseGalleryWidget() + { + InitializeComponent(); + } + + #region Methods + + protected override void OnAddItems(ScrapedPage page) + { + + this.flowLayoutPanel.SuspendLayout(); + + + for (var i = 0; i < Constants.GetMaxDisplayCount(page.Videos.Count); i++) + { + var video = page.Videos[i]; + var widget = new WebViewWidget(video, + Properties.Resources.TestHtml.Replace("{0}", video.Url).Replace("{1}", video.ImageUrl). + Replace("{2}", video.Title).Replace("{3}", video.Duration.ToString())); + this.flowLayoutPanel.Controls.Add(widget); + widget.ViewSelected += delegate(object sender, GalleryItemSelectedEventArgs e) + { + OnItemSelected(sender, e); + }; + } + this.flowLayoutPanel.ResumeLayout(); + flowLayoutPanel_Resize(this, null); + AddLinks(); + + base.OnAddItems(page); + } + + protected override Control WidgetContainer + { + get + { + return this.flowLayoutPanel; + } + } + + + #endregion + + private void flowLayoutPanel_Resize(object sender, EventArgs e) + { + this.flowLayoutPanel.SuspendLayout(); + if (this.flowLayoutPanel.Controls.Count > 0) + { + var width = this.flowLayoutPanel.Controls[0].Width; + this.flowLayoutPanel.ColumnCount = this.flowLayoutPanel.ClientRectangle.Width / this.flowLayoutPanel.Controls[0].Width; + if (this.flowLayoutPanel.ColumnCount > 0) + { + var freeWidth = (this.flowLayoutPanel.ClientRectangle.Width - + (this.flowLayoutPanel.Controls[0].Width * this.flowLayoutPanel.ColumnCount)) / + this.flowLayoutPanel.ColumnCount; + if (freeWidth > 0) + { + foreach (Control c in this.flowLayoutPanel.Controls) + c.Margin = new Padding(freeWidth / 2, 10, freeWidth / 2, 0); + + } + } + } + + ResizePageLinks(); + this.flowLayoutPanel.ResumeLayout(); + } + + private void AddLinks() + { + this.flowLayoutPanelPaging.Controls.Clear(); + if (base.currentPage == null || base.currentPage.Links.Count == 0) + return; + + this.flowLayoutPanelPaging.Padding = new Padding(0); + + var totalWidth = 0; + foreach (var p in base.currentPage.Links) + { + if (totalWidth >= this.flowLayoutPanelPaging.ClientSize.Width) + break; + var b = CreatePageLink(p); + totalWidth += b.Width; + this.flowLayoutPanelPaging.Controls.Add(b); + } + ResizePageLinks(); + } + + private void ResizePageLinks() + { + var totalWidth = 0; + foreach (Control b in this.flowLayoutPanelPaging.Controls) + totalWidth += b.Width; + if (totalWidth < this.flowLayoutPanelPaging.ClientSize.Width) + { + var freeWidth = this.flowLayoutPanelPaging.ClientSize.Width - totalWidth; + this.flowLayoutPanelPaging.Padding = new Padding(freeWidth / 2, 0, freeWidth / 2, 0); + } + else + this.flowLayoutPanelPaging.Padding = new Padding(0); + } + + private void UpdatePagingButtons(KryptonCheckButton button) + { + foreach (KryptonCheckButton b in this.flowLayoutPanelPaging.Controls) + b.Checked = b == button ? true : false; + } + + private KryptonCheckButton CreatePageLink( PagingLink link) + { + var button = new KryptonCheckButton(); + button.ButtonStyle = ComponentFactory.Krypton.Toolkit.ButtonStyle.LowProfile; + button.Cursor = System.Windows.Forms.Cursors.Hand; + button.Location = new System.Drawing.Point(0, 0); + button.Margin = new System.Windows.Forms.Padding(0); + button.Size = link.Text.Length == 1 ? new System.Drawing.Size(29, 25) : new System.Drawing.Size(10 + ( link.Text.Length * 10), 25); + button.StateCommon.Border.DrawBorders = ((ComponentFactory.Krypton.Toolkit.PaletteDrawBorders)((((ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Top | ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Bottom) + | ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Left) + | ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Right))); + button.StateCommon.Border.Width = 1; + button.StateCommon.Content.ShortText.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + button.Values.Text = link.Text; + button.Tag = link; + button.Checked = link.IsSelected; + button.CheckedChanged += delegate(object sender, EventArgs e) + { + var b = (KryptonCheckButton)sender; + if (b.Checked) + { + OnPageSelected(this, new GalleryPageSelectedEventArgs(link)); + UpdatePagingButtons(b); + } + }; + return button; + } + } +} diff --git a/MovieFinder.Viewer/Controls/BrowseGalleryWidget.resx b/MovieFinder.Viewer/Controls/BrowseGalleryWidget.resx new file mode 100644 index 0000000000000000000000000000000000000000..5ea0895e324fa7a86681adc56938bad2f2367ba0 --- /dev/null +++ b/MovieFinder.Viewer/Controls/BrowseGalleryWidget.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/MovieFinder.Viewer/Controls/GalleryWidgetBase.Designer.cs b/MovieFinder.Viewer/Controls/GalleryWidgetBase.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..98a1e10ed72c31814c69df5a55b8481ac2715819 --- /dev/null +++ b/MovieFinder.Viewer/Controls/GalleryWidgetBase.Designer.cs @@ -0,0 +1,37 @@ +namespace BlueTube.Viewer +{ + partial class GalleryWidgetBase + { + /// + /// 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(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + } + + #endregion + } +} diff --git a/MovieFinder.Viewer/Controls/GalleryWidgetBase.cs b/MovieFinder.Viewer/Controls/GalleryWidgetBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..9b978d221de791a7f9c29f12307a564e206f6a5a --- /dev/null +++ b/MovieFinder.Viewer/Controls/GalleryWidgetBase.cs @@ -0,0 +1,205 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using Client.Scraper; + +namespace BlueTube.Viewer +{ + public partial class GalleryWidgetBase : UserControl + { + public event EventHandler ItemSelected; + public event EventHandler PageSelected; + protected ScrapedPage currentPage; + + + public GalleryWidgetBase() + { + InitializeComponent(); + } + + protected virtual void OnItemSelected(object sender, GalleryItemSelectedEventArgs e) + { + foreach (Control c in WidgetContainer.Controls) + { + var v = c as WebViewWidget; + if (v != null) + { + if (v == sender) + v.SelectView(); + else + v.DeselectView(); + } + } + if (ItemSelected != null) + ItemSelected(sender, e); + } + + protected virtual void OnPageSelected(object sender, GalleryPageSelectedEventArgs e) + { + if (PageSelected != null) + PageSelected(sender, e); + } + + public void AddItems(ScrapedPage page) + { + this.currentPage = page; + OnAddItems(page); + } + + public void AddItem(ScrapedVideo video, bool select) + { + OnAddItem(video, select); + } + + protected virtual void OnAddItems(ScrapedPage page) + { + + } + + protected virtual void OnAddItem(ScrapedVideo video, bool select) + { + + } + + public void RefreshView() + { + foreach (Control c in WidgetContainer.Controls) + { + var v = c as WebViewWidget; + if (v != null) + v.RefreshView(); + } + } + + public void ClearItems() + { + this.WidgetContainer.Controls.Clear(); + } + + + + private int GetWidgetCount() + { + var i = 0; + foreach (var c in WidgetContainer.Controls) + { + if (c is WebViewWidget) + i++; + } + return i; + } + + protected AdWidget CreateAdWidget(string id) + { + var adWidget = new AdWidget(id); + adWidget.Anchor = AnchorStyles.Left | AnchorStyles.Right; + return adWidget; + } + + + private int GetWidgetLastIndex() + { + for( var i = WidgetContainer.Controls.Count - 1; i >= 0; i--) + { + if (WidgetContainer.Controls[i] is WebViewWidget) + return i; + + } + return -1; + } + + private int GetNextWidget(int index) + { + for (var i = index + 1; i < this.WidgetContainer.Controls.Count; i++) + { + if (WidgetContainer.Controls[i] is WebViewWidget) + return i; + + } + return -1; + } + + private int GetPreviousWidget(int index) + { + for (var i = index - 1; i >= 0; i--) + { + if (WidgetContainer.Controls[i] is WebViewWidget) + return i; + + } + return -1; + } + + public ScrapedVideo GetPreviousVideo(ScrapedVideo current) + { + int index = -1; + for (var i = 0; i < WidgetContainer.Controls.Count; i++) + { + var v = WidgetContainer.Controls[i] as WebViewWidget ; + if (v != null && v.Video == current) + { + index = i; + break; + } + } + + if (GetWidgetCount() > 0) + { + if (index == -1 || index == 0) + return ((WebViewWidget)WidgetContainer.Controls[GetWidgetLastIndex()]).Video; + else + return ((WebViewWidget)WidgetContainer.Controls[GetPreviousWidget(index)]).Video; + } + return null; + } + + public ScrapedVideo GetNextVideo(ScrapedVideo current) + { + int index = -1; + for (var i = 0; i < WidgetContainer.Controls.Count; i++) + { + var v = WidgetContainer.Controls[i] as WebViewWidget; + if (v != null && v.Video == current) + { + index = i; + break; + } + } + + if (WidgetContainer.Controls.Count > 0) + { + if (index == -1 || index == GetWidgetLastIndex()) + return ((WebViewWidget)WidgetContainer.Controls[0]).Video; + else + return ((WebViewWidget)WidgetContainer.Controls[GetNextWidget(index)]).Video; + } + return null; + } + + protected virtual Control WidgetContainer { get { throw new NotImplementedException(); } } + } + + public class GalleryItemSelectedEventArgs : EventArgs + { + public GalleryItemSelectedEventArgs(ScrapedVideo video) + { + Video = video; + } + + public ScrapedVideo Video { get; set; } + } + + public class GalleryPageSelectedEventArgs : EventArgs + { + public GalleryPageSelectedEventArgs(PagingLink link) + { + Link = link; + } + + public PagingLink Link { get; set; } + } +} diff --git a/MovieFinder.Viewer/Controls/HorizontalSingleRowGalleryWidget.Designer.cs b/MovieFinder.Viewer/Controls/HorizontalSingleRowGalleryWidget.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..ebf20bf9690a2f662a4ef7547e1c6573baf04860 --- /dev/null +++ b/MovieFinder.Viewer/Controls/HorizontalSingleRowGalleryWidget.Designer.cs @@ -0,0 +1,98 @@ +namespace BlueTube.Viewer +{ + partial class HorizontalSingleRowGalleryWidget + { + /// + /// 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(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kryptonPanel1 = new ComponentFactory.Krypton.Toolkit.KryptonPanel(); + this.flowLayoutPanel = new System.Windows.Forms.FlowLayoutPanel(); + this.kryptonLabelPrivacy = new ComponentFactory.Krypton.Toolkit.KryptonLabel(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + this.SuspendLayout(); + // + // kryptonPanel1 + // + this.kryptonPanel1.AutoScroll = true; + this.kryptonPanel1.Controls.Add(this.kryptonLabelPrivacy); + this.kryptonPanel1.Controls.Add(this.flowLayoutPanel); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Margin = new System.Windows.Forms.Padding(0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(830, 136); + this.kryptonPanel1.StateCommon.Color1 = System.Drawing.SystemColors.ActiveCaption; + this.kryptonPanel1.TabIndex = 0; + // + // flowLayoutPanel + // + this.flowLayoutPanel.AutoSize = true; + this.flowLayoutPanel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.flowLayoutPanel.Dock = System.Windows.Forms.DockStyle.Left; + this.flowLayoutPanel.Location = new System.Drawing.Point(0, 0); + this.flowLayoutPanel.Name = "flowLayoutPanel"; + this.flowLayoutPanel.Size = new System.Drawing.Size(0, 136); + this.flowLayoutPanel.TabIndex = 0; + this.flowLayoutPanel.WrapContents = false; + // + // kryptonLabelPrivacy + // + this.kryptonLabelPrivacy.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.kryptonLabelPrivacy.Location = new System.Drawing.Point(224, 54); + this.kryptonLabelPrivacy.Name = "kryptonLabelPrivacy"; + this.kryptonLabelPrivacy.Size = new System.Drawing.Size(383, 28); + this.kryptonLabelPrivacy.StateCommon.ShortText.Font = new System.Drawing.Font("Tahoma", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.kryptonLabelPrivacy.TabIndex = 6; + this.kryptonLabelPrivacy.Values.Text = "Press Ctrl + S to show/hide the application"; + // + // HorizontalSingleRowGalleryWidget + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoScroll = true; + this.Controls.Add(this.kryptonPanel1); + this.Name = "HorizontalSingleRowGalleryWidget"; + this.Size = new System.Drawing.Size(830, 136); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.kryptonPanel1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private ComponentFactory.Krypton.Toolkit.KryptonPanel kryptonPanel1; + private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel; + private ComponentFactory.Krypton.Toolkit.KryptonLabel kryptonLabelPrivacy; + + + + } +} diff --git a/MovieFinder.Viewer/Controls/HorizontalSingleRowGalleryWidget.cs b/MovieFinder.Viewer/Controls/HorizontalSingleRowGalleryWidget.cs new file mode 100644 index 0000000000000000000000000000000000000000..8d5dd3ee9e17ff3ff8b4f822ee96ed6bfe1403c6 --- /dev/null +++ b/MovieFinder.Viewer/Controls/HorizontalSingleRowGalleryWidget.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using Client.Scraper; + +namespace BlueTube.Viewer +{ + public partial class HorizontalSingleRowGalleryWidget : GalleryWidgetBase + { + #region Constructor + + public HorizontalSingleRowGalleryWidget() + { + InitializeComponent(); + } + + #endregion + + #region Methods + + + protected override void OnAddItems(ScrapedPage page) + { + if (this.kryptonPanel1.Controls.Contains(this.kryptonLabelPrivacy)) + this.kryptonPanel1.Controls.Remove(this.kryptonLabelPrivacy); + + for (var i = 0; i < Constants.GetMaxDisplayCount(page.Videos.Count); i++) + { + var video = page.Videos[i]; + var widget = new WebViewWidget(video, + Properties.Resources.TestHtml.Replace("{0}", video.Url).Replace("{1}", video.ImageUrl). + Replace("{2}", video.Title).Replace("{3}", video.Duration.ToString())); + this.flowLayoutPanel.Controls.Add(widget); + widget.ViewSelected += delegate(object sender, GalleryItemSelectedEventArgs e) + { + OnItemSelected(sender, e); + }; + + if (Constants.ShowAds && i % 4 == 0) + { + var ad = CreateAdWidget(Constants.HorizontalAdId); + this.flowLayoutPanel.Controls.Add(ad); + } + } + } + + protected override Control WidgetContainer + { + get + { + return this.flowLayoutPanel; + } + } + + #endregion + } +} diff --git a/MovieFinder.Viewer/Controls/HorizontalSingleRowGalleryWidget.resx b/MovieFinder.Viewer/Controls/HorizontalSingleRowGalleryWidget.resx new file mode 100644 index 0000000000000000000000000000000000000000..5ea0895e324fa7a86681adc56938bad2f2367ba0 --- /dev/null +++ b/MovieFinder.Viewer/Controls/HorizontalSingleRowGalleryWidget.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/MovieFinder.Viewer/Controls/SearchPanelWidget.Designer.cs b/MovieFinder.Viewer/Controls/SearchPanelWidget.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..ed6f32fec8ebcfff2c9881fabc5ba196660879aa --- /dev/null +++ b/MovieFinder.Viewer/Controls/SearchPanelWidget.Designer.cs @@ -0,0 +1,261 @@ +namespace BlueTube.Viewer +{ + partial class SearchPanelWidget + { + /// + /// 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(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kryptonPanel1 = new ComponentFactory.Krypton.Toolkit.KryptonPanel(); + this.searchButton = new ComponentFactory.Krypton.Toolkit.KryptonButton(); + this.dropdownFilter = new ComponentFactory.Krypton.Toolkit.KryptonDropButton(); + this.menuFilter = new ComponentFactory.Krypton.Toolkit.KryptonContextMenu(); + this.kryptonContextMenuHeading1 = new ComponentFactory.Krypton.Toolkit.KryptonContextMenuHeading(); + this.kryptonContextMenuItems1 = new ComponentFactory.Krypton.Toolkit.KryptonContextMenuItems(); + this.relevanceFilter = new ComponentFactory.Krypton.Toolkit.KryptonContextMenuRadioButton(); + this.uploadDateFilter = new ComponentFactory.Krypton.Toolkit.KryptonContextMenuRadioButton(); + this.ratingFilter = new ComponentFactory.Krypton.Toolkit.KryptonContextMenuRadioButton(); + this.kryptonContextMenuHeading2 = new ComponentFactory.Krypton.Toolkit.KryptonContextMenuHeading(); + this.anytimeFilter = new ComponentFactory.Krypton.Toolkit.KryptonContextMenuRadioButton(); + this.todayFilter = new ComponentFactory.Krypton.Toolkit.KryptonContextMenuRadioButton(); + this.weekFilter = new ComponentFactory.Krypton.Toolkit.KryptonContextMenuRadioButton(); + this.monthFilter = new ComponentFactory.Krypton.Toolkit.KryptonContextMenuRadioButton(); + this.kryptonContextMenuHeading3 = new ComponentFactory.Krypton.Toolkit.KryptonContextMenuHeading(); + this.durationAllFilter = new ComponentFactory.Krypton.Toolkit.KryptonContextMenuRadioButton(); + this.shortDurationFilter = new ComponentFactory.Krypton.Toolkit.KryptonContextMenuRadioButton(); + this.durationMediumFilter = new ComponentFactory.Krypton.Toolkit.KryptonContextMenuRadioButton(); + this.durationLongFilter = new ComponentFactory.Krypton.Toolkit.KryptonContextMenuRadioButton(); + this.searchTextbox = new ComponentFactory.Krypton.Toolkit.KryptonTextBox(); + this.buttonSpecClear = new ComponentFactory.Krypton.Toolkit.ButtonSpecAny(); + this.kryptonContextMenuItems2 = new ComponentFactory.Krypton.Toolkit.KryptonContextMenuItems(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + this.SuspendLayout(); + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.searchButton); + this.kryptonPanel1.Controls.Add(this.dropdownFilter); + this.kryptonPanel1.Controls.Add(this.searchTextbox); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(388, 27); + this.kryptonPanel1.StateNormal.Color1 = System.Drawing.SystemColors.GrayText; + this.kryptonPanel1.TabIndex = 0; + // + // searchButton + // + this.searchButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.searchButton.Location = new System.Drawing.Point(351, 0); + this.searchButton.Margin = new System.Windows.Forms.Padding(0); + this.searchButton.Name = "searchButton"; + this.searchButton.Size = new System.Drawing.Size(37, 26); + this.searchButton.StateCommon.Border.DrawBorders = ((ComponentFactory.Krypton.Toolkit.PaletteDrawBorders)((((ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Top | ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Bottom) + | ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Left) + | ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Right))); + this.searchButton.TabIndex = 2; + this.searchButton.Values.Image = global::BlueTube.Viewer.Properties.Resources.search; + this.searchButton.Values.Text = ""; + this.searchButton.Click += new System.EventHandler(this.searchButton_Click); + // + // dropdownFilter + // + this.dropdownFilter.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.dropdownFilter.KryptonContextMenu = this.menuFilter; + this.dropdownFilter.Location = new System.Drawing.Point(255, 0); + this.dropdownFilter.Margin = new System.Windows.Forms.Padding(0); + this.dropdownFilter.Name = "dropdownFilter"; + this.dropdownFilter.PaletteMode = ComponentFactory.Krypton.Toolkit.PaletteMode.Office2007Blue; + this.dropdownFilter.Size = new System.Drawing.Size(97, 26); + this.dropdownFilter.Splitter = false; + this.dropdownFilter.TabIndex = 1; + this.dropdownFilter.Values.Text = "Filter"; + // + // menuFilter + // + this.menuFilter.Items.AddRange(new ComponentFactory.Krypton.Toolkit.KryptonContextMenuItemBase[] { + this.kryptonContextMenuHeading1, + this.kryptonContextMenuItems1, + this.relevanceFilter, + this.uploadDateFilter, + this.ratingFilter, + this.kryptonContextMenuHeading2, + this.anytimeFilter, + this.todayFilter, + this.weekFilter, + this.monthFilter, + this.kryptonContextMenuHeading3, + this.durationAllFilter, + this.shortDurationFilter, + this.durationMediumFilter, + this.durationLongFilter}); + // + // kryptonContextMenuHeading1 + // + this.kryptonContextMenuHeading1.ExtraText = ""; + this.kryptonContextMenuHeading1.Text = "Sort By"; + // + // relevanceFilter + // + this.relevanceFilter.Checked = true; + this.relevanceFilter.ExtraText = ""; + this.relevanceFilter.Text = "Relevance"; + // + // uploadDateFilter + // + this.uploadDateFilter.ExtraText = ""; + this.uploadDateFilter.Text = "Upload date"; + // + // ratingFilter + // + this.ratingFilter.ExtraText = ""; + this.ratingFilter.Text = "Rating"; + // + // kryptonContextMenuHeading2 + // + this.kryptonContextMenuHeading2.ExtraText = ""; + this.kryptonContextMenuHeading2.Text = "Date"; + // + // anytimeFilter + // + this.anytimeFilter.Checked = true; + this.anytimeFilter.ExtraText = ""; + this.anytimeFilter.Text = "Anytime"; + // + // todayFilter + // + this.todayFilter.ExtraText = ""; + this.todayFilter.Text = "Today"; + // + // weekFilter + // + this.weekFilter.ExtraText = ""; + this.weekFilter.Text = "This week"; + // + // monthFilter + // + this.monthFilter.ExtraText = ""; + this.monthFilter.Text = "This month"; + // + // kryptonContextMenuHeading3 + // + this.kryptonContextMenuHeading3.ExtraText = ""; + this.kryptonContextMenuHeading3.Text = "Duration"; + // + // durationAllFilter + // + this.durationAllFilter.Checked = true; + this.durationAllFilter.ExtraText = ""; + this.durationAllFilter.Text = "All"; + // + // shortDurationFilter + // + this.shortDurationFilter.ExtraText = ""; + this.shortDurationFilter.Text = "Short"; + // + // durationMediumFilter + // + this.durationMediumFilter.ExtraText = ""; + this.durationMediumFilter.Text = "Medium"; + // + // durationLongFilter + // + this.durationLongFilter.ExtraText = ""; + this.durationLongFilter.Text = "Long"; + // + // searchTextbox + // + this.searchTextbox.AllowButtonSpecToolTips = true; + this.searchTextbox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.searchTextbox.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend; + this.searchTextbox.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.CustomSource; + this.searchTextbox.ButtonSpecs.AddRange(new ComponentFactory.Krypton.Toolkit.ButtonSpecAny[] { + this.buttonSpecClear}); + this.searchTextbox.Location = new System.Drawing.Point(1, 1); + this.searchTextbox.Margin = new System.Windows.Forms.Padding(0); + this.searchTextbox.Name = "searchTextbox"; + this.searchTextbox.Size = new System.Drawing.Size(254, 25); + this.searchTextbox.StateCommon.Border.DrawBorders = ((ComponentFactory.Krypton.Toolkit.PaletteDrawBorders)((((ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Top | ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Bottom) + | ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Left) + | ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Right))); + this.searchTextbox.StateCommon.Border.GraphicsHint = ComponentFactory.Krypton.Toolkit.PaletteGraphicsHint.AntiAlias; + this.searchTextbox.StateCommon.Border.Rounding = 1; + this.searchTextbox.StateCommon.Border.Width = 1; + this.searchTextbox.StateCommon.Content.Color1 = System.Drawing.SystemColors.InactiveCaption; + this.searchTextbox.StateCommon.Content.Font = new System.Drawing.Font("Tahoma", 11F); + this.searchTextbox.TabIndex = 1; + this.searchTextbox.TextChanged += new System.EventHandler(this.kryptonTextBox1_TextChanged); + this.searchTextbox.Enter += new System.EventHandler(this.kryptonTextBox1_Enter); + this.searchTextbox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.kryptonTextBox1_KeyDown); + this.searchTextbox.Leave += new System.EventHandler(this.kryptonTextBox1_Leave); + // + // buttonSpecClear + // + this.buttonSpecClear.Type = ComponentFactory.Krypton.Toolkit.PaletteButtonSpecStyle.PendantClose; + this.buttonSpecClear.UniqueName = "CD6A6F12A57E4A8F0D9BA852FFDF870B"; + this.buttonSpecClear.Click += new System.EventHandler(this.buttonSpecClear_Click); + // + // SearchPanelWidget + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.kryptonPanel1); + this.Margin = new System.Windows.Forms.Padding(0); + this.Name = "SearchPanelWidget"; + this.Size = new System.Drawing.Size(388, 27); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.kryptonPanel1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private ComponentFactory.Krypton.Toolkit.KryptonPanel kryptonPanel1; + private ComponentFactory.Krypton.Toolkit.KryptonTextBox searchTextbox; + private ComponentFactory.Krypton.Toolkit.ButtonSpecAny buttonSpecClear; + private ComponentFactory.Krypton.Toolkit.KryptonDropButton dropdownFilter; + private ComponentFactory.Krypton.Toolkit.KryptonContextMenu menuFilter; + private ComponentFactory.Krypton.Toolkit.KryptonContextMenuHeading kryptonContextMenuHeading1; + private ComponentFactory.Krypton.Toolkit.KryptonContextMenuItems kryptonContextMenuItems1; + private ComponentFactory.Krypton.Toolkit.KryptonContextMenuRadioButton relevanceFilter; + private ComponentFactory.Krypton.Toolkit.KryptonContextMenuRadioButton uploadDateFilter; + private ComponentFactory.Krypton.Toolkit.KryptonContextMenuRadioButton ratingFilter; + private ComponentFactory.Krypton.Toolkit.KryptonContextMenuHeading kryptonContextMenuHeading2; + private ComponentFactory.Krypton.Toolkit.KryptonContextMenuRadioButton anytimeFilter; + private ComponentFactory.Krypton.Toolkit.KryptonContextMenuRadioButton todayFilter; + private ComponentFactory.Krypton.Toolkit.KryptonContextMenuRadioButton weekFilter; + private ComponentFactory.Krypton.Toolkit.KryptonContextMenuRadioButton monthFilter; + private ComponentFactory.Krypton.Toolkit.KryptonContextMenuHeading kryptonContextMenuHeading3; + private ComponentFactory.Krypton.Toolkit.KryptonContextMenuRadioButton shortDurationFilter; + private ComponentFactory.Krypton.Toolkit.KryptonContextMenuRadioButton durationMediumFilter; + private ComponentFactory.Krypton.Toolkit.KryptonContextMenuRadioButton durationLongFilter; + private ComponentFactory.Krypton.Toolkit.KryptonContextMenuRadioButton durationAllFilter; + private ComponentFactory.Krypton.Toolkit.KryptonContextMenuItems kryptonContextMenuItems2; + private ComponentFactory.Krypton.Toolkit.KryptonButton searchButton; + } +} diff --git a/MovieFinder.Viewer/Controls/SearchPanelWidget.cs b/MovieFinder.Viewer/Controls/SearchPanelWidget.cs new file mode 100644 index 0000000000000000000000000000000000000000..ae24008c1f6a28cd416f714b34e2145a419e2806 --- /dev/null +++ b/MovieFinder.Viewer/Controls/SearchPanelWidget.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using Client.Scraper; +using BlueTube.Viewer.Data; + +namespace BlueTube.Viewer +{ + public partial class SearchPanelWidget : UserControl + { + private const string deafultSearchText = "Search...\t"; + public event EventHandler Search; + public SearchPanelWidget() + { + InitializeComponent(); + this.searchTextbox.Text = deafultSearchText; + } + + private void kryptonTextBox1_TextChanged(object sender, EventArgs e) + { + + } + + private void kryptonTextBox1_Enter(object sender, EventArgs e) + { + if (deafultSearchText == this.searchTextbox.Text) + this.searchTextbox.Text = String.Empty; + this.searchTextbox.StateCommon.Content.Color1 = SystemColors.WindowText; + AutoCompleteStringCollection col = new AutoCompleteStringCollection(); + col.AddRange(DataService.Create().GetAllSearchWords().ToArray()); + this.searchTextbox.AutoCompleteCustomSource = col; + } + + private void kryptonTextBox1_Leave(object sender, EventArgs e) + { + if (String.IsNullOrEmpty(this.searchTextbox.Text.Trim())) + { + this.searchTextbox.Text = deafultSearchText; + this.searchTextbox.StateCommon.Content.Color1 = SystemColors.InactiveCaption; + } + } + + private void kryptonTextBox1_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter) + { + var text = this.searchTextbox.Text.Trim(); + if(!String.IsNullOrEmpty(text)) + { + DataService.Create().AddSearchWord(text); + this.searchTextbox.AutoCompleteCustomSource.Add(text); + } + TriggerSearchEvent(); + } + + } + + private void TriggerSearchEvent() + { + if (this.searchTextbox.Text != deafultSearchText) + { + var s = new SearchEventArgs(this.searchTextbox.Text.Trim()); + s.Params.SortBy = this.ratingFilter.Checked ? VideoSortby.Rating : (this.uploadDateFilter.Checked ? + VideoSortby.Date : VideoSortby.Relevance ); + s.Params.Period = this.anytimeFilter.Checked ? VideoPeriod.Anytime : (this.todayFilter.Checked ? VideoPeriod.Today : + (this.weekFilter.Checked ? VideoPeriod.ThisWeek : VideoPeriod.ThisMonth)); + s.Params.Duration = this.durationAllFilter.Checked ? VideoDuration.All : (this.shortDurationFilter.Checked ? VideoDuration.Short : + (this.durationMediumFilter.Checked ? VideoDuration.Medium : VideoDuration.Long)); + + Search(this, s); + } + } + + + private void searchButton_Click(object sender, EventArgs e) + { + TriggerSearchEvent(); + } + + private void buttonSpecClear_Click(object sender, EventArgs e) + { + this.searchTextbox.Text = String.Empty; + this.searchTextbox.Focus(); + } + } + + public class SearchEventArgs : EventArgs + { + public SearchEventArgs(string query) + { + Params = new SearchParameters(); + Params.Query = query; + } + public SearchParameters Params { get; set; } + } +} diff --git a/MovieFinder.Viewer/Controls/SearchPanelWidget.resx b/MovieFinder.Viewer/Controls/SearchPanelWidget.resx new file mode 100644 index 0000000000000000000000000000000000000000..1180336ca92cee06c56e8af1d2961c4b1bb716ae --- /dev/null +++ b/MovieFinder.Viewer/Controls/SearchPanelWidget.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/MovieFinder.Viewer/Controls/VerticalSingleColumnGalleryWidget.Designer.cs b/MovieFinder.Viewer/Controls/VerticalSingleColumnGalleryWidget.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..fde8ab1b62863b2df7de084fbcc330c76832ec4a --- /dev/null +++ b/MovieFinder.Viewer/Controls/VerticalSingleColumnGalleryWidget.Designer.cs @@ -0,0 +1,78 @@ +namespace BlueTube.Viewer +{ + partial class VerticalSingleColumnGalleryWidget + { + /// + /// 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(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kryptonPanel1 = new ComponentFactory.Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel = new System.Windows.Forms.FlowLayoutPanel(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + this.SuspendLayout(); + // + // kryptonPanel1 + // + this.kryptonPanel1.AutoScroll = true; + this.kryptonPanel1.Controls.Add(this.tableLayoutPanel); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(228, 359); + this.kryptonPanel1.TabIndex = 1; + // + // tableLayoutPanel + // + this.tableLayoutPanel.AutoSize = true; + this.tableLayoutPanel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.tableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Top; + this.tableLayoutPanel.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel.Name = "tableLayoutPanel"; + this.tableLayoutPanel.Size = new System.Drawing.Size(228, 0); + this.tableLayoutPanel.TabIndex = 0; + this.tableLayoutPanel.Resize += new System.EventHandler(this.flowLayoutPanel_Resize); + // + // VerticalSingleColumnGalleryWidget + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.kryptonPanel1); + this.Name = "VerticalSingleColumnGalleryWidget"; + this.Size = new System.Drawing.Size(228, 359); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.kryptonPanel1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private ComponentFactory.Krypton.Toolkit.KryptonPanel kryptonPanel1; + private System.Windows.Forms.FlowLayoutPanel tableLayoutPanel; + + } +} diff --git a/MovieFinder.Viewer/Controls/VerticalSingleColumnGalleryWidget.cs b/MovieFinder.Viewer/Controls/VerticalSingleColumnGalleryWidget.cs new file mode 100644 index 0000000000000000000000000000000000000000..3c9194d454da22933195035c75d74efacfca7704 --- /dev/null +++ b/MovieFinder.Viewer/Controls/VerticalSingleColumnGalleryWidget.cs @@ -0,0 +1,96 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using Client.Scraper; + +namespace BlueTube.Viewer +{ + public partial class VerticalSingleColumnGalleryWidget : GalleryWidgetBase + { + #region Constructor + + public VerticalSingleColumnGalleryWidget() + { + InitializeComponent(); + + } + + #endregion + + protected override void OnAddItems(ScrapedPage page) + { + + for (var i = 0; i < Constants.GetMaxDisplayCount(page.Videos.Count); i++) + { + var video = page.Videos[i]; + AddItem(video); + if (Constants.ShowAds && i % 4 == 0) + { + var ad = CreateAdWidget(Constants.VerticalAdId); + this.tableLayoutPanel.Controls.Add(ad); + } + } + } + + private WebViewWidget AddItem(ScrapedVideo video) + { + var widget = new WebViewWidget(video, Properties.Resources.TestHtml.Replace("{0}", video.Url).Replace("{1}", video.ImageUrl). + Replace("{2}", video.Title).Replace("{3}", video.Duration.ToString())); + widget.Anchor = AnchorStyles.Left | AnchorStyles.Right; + widget.Width = this.Width; + this.tableLayoutPanel.Controls.Add(widget); + Application.DoEvents(); + widget.ViewSelected += delegate(object sender, GalleryItemSelectedEventArgs e) + { + OnItemSelected(sender, e); + }; + return widget; + } + + protected override void OnAddItem(ScrapedVideo video, bool select) + { + var found = false; + LogManager.Log("Adding items to Veritcal gallery"); + foreach (Control c in this.tableLayoutPanel.Controls) + { + var widget = c as WebViewWidget; + if (widget != null) + { + if (widget.Video.Url == video.Url) + { + widget.SelectView(); + found = true; + } + else + widget.DeselectView(); + } + } + if (!found) + { + var widget = AddItem(video); + this.tableLayoutPanel.Controls.SetChildIndex(widget, 0); + if (select) + widget.SelectView(); + } + } + + protected override Control WidgetContainer + { + get + { + return this.tableLayoutPanel; + } + } + + + private void flowLayoutPanel_Resize(object sender, EventArgs e) + { + foreach (Control c in this.tableLayoutPanel.Controls) + c.Width = this.Width; + } + } +} diff --git a/MovieFinder.Viewer/Controls/VerticalSingleColumnGalleryWidget.resx b/MovieFinder.Viewer/Controls/VerticalSingleColumnGalleryWidget.resx new file mode 100644 index 0000000000000000000000000000000000000000..5ea0895e324fa7a86681adc56938bad2f2367ba0 --- /dev/null +++ b/MovieFinder.Viewer/Controls/VerticalSingleColumnGalleryWidget.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/MovieFinder.Viewer/Controls/VideoPlayerWidget.Designer.cs b/MovieFinder.Viewer/Controls/VideoPlayerWidget.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..adb499426f4b575032642d0db660c4b31573f6e8 --- /dev/null +++ b/MovieFinder.Viewer/Controls/VideoPlayerWidget.Designer.cs @@ -0,0 +1,457 @@ + +namespace BlueTube.Viewer +{ + partial class VideoPlayerWidget + { + /// + /// 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)) + { + this.vlcPlayerControl.Uninitialize(); + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(VideoPlayerWidget)); + this.kryptonSplitContainerMain = new ComponentFactory.Krypton.Toolkit.KryptonSplitContainer(); + this.headerGroupVideoPlayer = new ComponentFactory.Krypton.Toolkit.KryptonHeaderGroup(); + this.buttonSpecHeaderFavourite = new ComponentFactory.Krypton.Toolkit.ButtonSpecHeaderGroup(); + this.buttonSpecHeaderGroupFullscreen = new ComponentFactory.Krypton.Toolkit.ButtonSpecHeaderGroup(); + this.vlcPlayerControl = new DZ.MediaPlayer.Vlc.WindowsForms.VlcPlayerControl(); + this.tableLayoutPanelControls = new System.Windows.Forms.TableLayoutPanel(); + this.kryptonPanel4 = new ComponentFactory.Krypton.Toolkit.KryptonPanel(); + this.labelTotalTime = new ComponentFactory.Krypton.Toolkit.KryptonLabel(); + this.labelTimeProgress = new ComponentFactory.Krypton.Toolkit.KryptonLabel(); + this.kryptonTrackBar1 = new ComponentFactory.Krypton.Toolkit.KryptonTrackBar(); + this.kryptonPanel1 = new ComponentFactory.Krypton.Toolkit.KryptonPanel(); + this.buttonVolume = new ComponentFactory.Krypton.Toolkit.KryptonCheckButton(); + this.kryptonTrackBarVolume = new ComponentFactory.Krypton.Toolkit.KryptonTrackBar(); + this.kryptonPanel3 = new ComponentFactory.Krypton.Toolkit.KryptonPanel(); + this.kryptonPanel2 = new ComponentFactory.Krypton.Toolkit.KryptonPanel(); + this.borderEdgeSep3 = new ComponentFactory.Krypton.Toolkit.KryptonBorderEdge(); + this.buttonNext = new ComponentFactory.Krypton.Toolkit.KryptonCheckButton(); + this.buttonPlayPause = new ComponentFactory.Krypton.Toolkit.KryptonCheckButton(); + this.borderEdgeSep2 = new ComponentFactory.Krypton.Toolkit.KryptonBorderEdge(); + this.buttonStop = new ComponentFactory.Krypton.Toolkit.KryptonCheckButton(); + this.borderEdgeSep1 = new ComponentFactory.Krypton.Toolkit.KryptonBorderEdge(); + this.buttonPrevious = new ComponentFactory.Krypton.Toolkit.KryptonCheckButton(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonSplitContainerMain)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonSplitContainerMain.Panel1)).BeginInit(); + this.kryptonSplitContainerMain.Panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonSplitContainerMain.Panel2)).BeginInit(); + this.kryptonSplitContainerMain.Panel2.SuspendLayout(); + this.kryptonSplitContainerMain.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.headerGroupVideoPlayer)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.headerGroupVideoPlayer.Panel)).BeginInit(); + this.headerGroupVideoPlayer.Panel.SuspendLayout(); + this.headerGroupVideoPlayer.SuspendLayout(); + this.tableLayoutPanelControls.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel4)).BeginInit(); + this.kryptonPanel4.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel3)).BeginInit(); + this.kryptonPanel3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).BeginInit(); + this.kryptonPanel2.SuspendLayout(); + this.SuspendLayout(); + // + // kryptonSplitContainerMain + // + this.kryptonSplitContainerMain.Cursor = System.Windows.Forms.Cursors.Default; + this.kryptonSplitContainerMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonSplitContainerMain.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.kryptonSplitContainerMain.IsSplitterFixed = true; + this.kryptonSplitContainerMain.Location = new System.Drawing.Point(0, 0); + this.kryptonSplitContainerMain.Name = "kryptonSplitContainerMain"; + this.kryptonSplitContainerMain.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // kryptonSplitContainerMain.Panel1 + // + this.kryptonSplitContainerMain.Panel1.Controls.Add(this.headerGroupVideoPlayer); + // + // kryptonSplitContainerMain.Panel2 + // + this.kryptonSplitContainerMain.Panel2.Controls.Add(this.tableLayoutPanelControls); + this.kryptonSplitContainerMain.Panel2.StateCommon.Color1 = System.Drawing.Color.Black; + this.kryptonSplitContainerMain.Panel2MinSize = 48; + this.kryptonSplitContainerMain.Size = new System.Drawing.Size(724, 475); + this.kryptonSplitContainerMain.SplitterDistance = 426; + this.kryptonSplitContainerMain.SplitterWidth = 1; + this.kryptonSplitContainerMain.TabIndex = 0; + // + // headerGroupVideoPlayer + // + this.headerGroupVideoPlayer.ButtonSpecs.AddRange(new ComponentFactory.Krypton.Toolkit.ButtonSpecHeaderGroup[] { + this.buttonSpecHeaderFavourite, + this.buttonSpecHeaderGroupFullscreen}); + this.headerGroupVideoPlayer.Dock = System.Windows.Forms.DockStyle.Fill; + this.headerGroupVideoPlayer.HeaderVisibleSecondary = false; + this.headerGroupVideoPlayer.Location = new System.Drawing.Point(0, 0); + this.headerGroupVideoPlayer.Name = "headerGroupVideoPlayer"; + // + // headerGroupVideoPlayer.Panel + // + this.headerGroupVideoPlayer.Panel.Controls.Add(this.vlcPlayerControl); + this.headerGroupVideoPlayer.Size = new System.Drawing.Size(724, 426); + this.headerGroupVideoPlayer.StateCommon.Back.Color1 = System.Drawing.Color.Transparent; + this.headerGroupVideoPlayer.StateCommon.HeaderPrimary.Content.ShortText.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.headerGroupVideoPlayer.StateCommon.HeaderPrimary.Content.ShortText.Trim = ComponentFactory.Krypton.Toolkit.PaletteTextTrim.Word; + this.headerGroupVideoPlayer.TabIndex = 1; + this.headerGroupVideoPlayer.ValuesPrimary.Heading = ""; + this.headerGroupVideoPlayer.ValuesPrimary.Image = ((System.Drawing.Image)(resources.GetObject("headerGroupVideoPlayer.ValuesPrimary.Image"))); + // + // buttonSpecHeaderFavourite + // + this.buttonSpecHeaderFavourite.Checked = ComponentFactory.Krypton.Toolkit.ButtonCheckState.Unchecked; + this.buttonSpecHeaderFavourite.Image = global::BlueTube.Viewer.Properties.Resources.favourite_16; + this.buttonSpecHeaderFavourite.Type = ComponentFactory.Krypton.Toolkit.PaletteButtonSpecStyle.DropDown; + this.buttonSpecHeaderFavourite.UniqueName = "D2EF56A993524F6C70A3AB3B4A15DE6E"; + this.buttonSpecHeaderFavourite.Click += new System.EventHandler(this.buttonSpecHeaderGroup1_Click); + // + // buttonSpecHeaderGroupFullscreen + // + this.buttonSpecHeaderGroupFullscreen.Image = global::BlueTube.Viewer.Properties.Resources.fullscreen; + this.buttonSpecHeaderGroupFullscreen.ToolTipBody = "Fullscreen"; + this.buttonSpecHeaderGroupFullscreen.ToolTipTitle = "Fullscreen"; + this.buttonSpecHeaderGroupFullscreen.Type = ComponentFactory.Krypton.Toolkit.PaletteButtonSpecStyle.WorkspaceMaximize; + this.buttonSpecHeaderGroupFullscreen.UniqueName = "BAE773AF597940F4AFB2C6203F81C862"; + this.buttonSpecHeaderGroupFullscreen.Click += new System.EventHandler(this.buttonSpecHeaderGroupFullscreen_Click); + // + // vlcPlayerControl + // + this.vlcPlayerControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.vlcPlayerControl.ForeColor = System.Drawing.Color.Black; + this.vlcPlayerControl.Location = new System.Drawing.Point(0, 0); + this.vlcPlayerControl.Name = "vlcPlayerControl"; + this.vlcPlayerControl.Position = 0D; + this.vlcPlayerControl.Size = new System.Drawing.Size(722, 399); + this.vlcPlayerControl.TabIndex = 1; + this.vlcPlayerControl.Time = System.TimeSpan.Parse("00:00:00"); + this.vlcPlayerControl.Volume = 50; + // + // tableLayoutPanelControls + // + this.tableLayoutPanelControls.ColumnCount = 3; + this.tableLayoutPanelControls.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 160F)); + this.tableLayoutPanelControls.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelControls.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 200F)); + this.tableLayoutPanelControls.Controls.Add(this.kryptonPanel4, 1, 0); + this.tableLayoutPanelControls.Controls.Add(this.kryptonPanel1, 2, 0); + this.tableLayoutPanelControls.Controls.Add(this.kryptonPanel3, 0, 0); + this.tableLayoutPanelControls.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanelControls.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanelControls.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanelControls.Name = "tableLayoutPanelControls"; + this.tableLayoutPanelControls.RowCount = 1; + this.tableLayoutPanelControls.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelControls.Size = new System.Drawing.Size(724, 48); + this.tableLayoutPanelControls.TabIndex = 1; + // + // kryptonPanel4 + // + this.kryptonPanel4.Controls.Add(this.labelTotalTime); + this.kryptonPanel4.Controls.Add(this.labelTimeProgress); + this.kryptonPanel4.Controls.Add(this.kryptonTrackBar1); + this.kryptonPanel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel4.Location = new System.Drawing.Point(160, 0); + this.kryptonPanel4.Margin = new System.Windows.Forms.Padding(0); + this.kryptonPanel4.Name = "kryptonPanel4"; + this.kryptonPanel4.PanelBackStyle = ComponentFactory.Krypton.Toolkit.PaletteBackStyle.ButtonStandalone; + this.kryptonPanel4.Size = new System.Drawing.Size(364, 48); + this.kryptonPanel4.TabIndex = 0; + // + // labelTotalTime + // + this.labelTotalTime.Location = new System.Drawing.Point(6, 27); + this.labelTotalTime.Name = "labelTotalTime"; + this.labelTotalTime.Size = new System.Drawing.Size(56, 20); + this.labelTotalTime.TabIndex = 4; + this.labelTotalTime.Values.Text = "00:00:00"; + // + // labelTimeProgress + // + this.labelTimeProgress.Location = new System.Drawing.Point(6, 10); + this.labelTimeProgress.Name = "labelTimeProgress"; + this.labelTimeProgress.Size = new System.Drawing.Size(56, 20); + this.labelTimeProgress.TabIndex = 3; + this.labelTimeProgress.Values.Text = "00:00:00"; + // + // kryptonTrackBar1 + // + this.kryptonTrackBar1.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.kryptonTrackBar1.BackStyle = ComponentFactory.Krypton.Toolkit.PaletteBackStyle.ButtonStandalone; + this.kryptonTrackBar1.Cursor = System.Windows.Forms.Cursors.Hand; + this.kryptonTrackBar1.DrawBackground = true; + this.kryptonTrackBar1.Location = new System.Drawing.Point(70, 10); + this.kryptonTrackBar1.Margin = new System.Windows.Forms.Padding(0); + this.kryptonTrackBar1.Maximum = 100; + this.kryptonTrackBar1.Name = "kryptonTrackBar1"; + this.kryptonTrackBar1.Size = new System.Drawing.Size(294, 34); + this.kryptonTrackBar1.TabIndex = 2; + this.kryptonTrackBar1.TickStyle = System.Windows.Forms.TickStyle.TopLeft; + this.kryptonTrackBar1.TrackBarSize = ComponentFactory.Krypton.Toolkit.PaletteTrackBarSize.Large; + this.kryptonTrackBar1.Scroll += new System.EventHandler(this.kryptonTrackBar1_Scroll); + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.buttonVolume); + this.kryptonPanel1.Controls.Add(this.kryptonTrackBarVolume); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(524, 0); + this.kryptonPanel1.Margin = new System.Windows.Forms.Padding(0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.PanelBackStyle = ComponentFactory.Krypton.Toolkit.PaletteBackStyle.ButtonStandalone; + this.kryptonPanel1.Size = new System.Drawing.Size(200, 48); + this.kryptonPanel1.TabIndex = 2; + // + // buttonVolume + // + this.buttonVolume.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.buttonVolume.Cursor = System.Windows.Forms.Cursors.Hand; + this.buttonVolume.Location = new System.Drawing.Point(23, 0); + this.buttonVolume.Margin = new System.Windows.Forms.Padding(0); + this.buttonVolume.Name = "buttonVolume"; + this.buttonVolume.Size = new System.Drawing.Size(47, 45); + this.buttonVolume.StateCommon.Border.DrawBorders = ((ComponentFactory.Krypton.Toolkit.PaletteDrawBorders)((((ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Top | ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Bottom) + | ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Left) + | ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Right))); + this.buttonVolume.StateCommon.Border.GraphicsHint = ComponentFactory.Krypton.Toolkit.PaletteGraphicsHint.AntiAlias; + this.buttonVolume.StateCommon.Border.Rounding = 8; + this.buttonVolume.StateCommon.Border.Width = 2; + this.buttonVolume.TabIndex = 8; + this.buttonVolume.Values.Image = ((System.Drawing.Image)(resources.GetObject("buttonVolume.Values.Image"))); + this.buttonVolume.Values.Text = ""; + this.buttonVolume.Click += new System.EventHandler(this.kryptonCheckButtonVolume_Click); + // + // kryptonTrackBarVolume + // + this.kryptonTrackBarVolume.BackStyle = ComponentFactory.Krypton.Toolkit.PaletteBackStyle.ButtonStandalone; + this.kryptonTrackBarVolume.Cursor = System.Windows.Forms.Cursors.Hand; + this.kryptonTrackBarVolume.DrawBackground = true; + this.kryptonTrackBarVolume.Location = new System.Drawing.Point(77, 10); + this.kryptonTrackBarVolume.Margin = new System.Windows.Forms.Padding(0, 10, 0, 0); + this.kryptonTrackBarVolume.Maximum = 100; + this.kryptonTrackBarVolume.Name = "kryptonTrackBarVolume"; + this.kryptonTrackBarVolume.Padding = new System.Windows.Forms.Padding(0, 10, 0, 0); + this.kryptonTrackBarVolume.Size = new System.Drawing.Size(123, 34); + this.kryptonTrackBarVolume.TabIndex = 1; + this.kryptonTrackBarVolume.TickStyle = System.Windows.Forms.TickStyle.TopLeft; + this.kryptonTrackBarVolume.TrackBarSize = ComponentFactory.Krypton.Toolkit.PaletteTrackBarSize.Large; + this.kryptonTrackBarVolume.VolumeControl = true; + this.kryptonTrackBarVolume.ValueChanged += new System.EventHandler(this.kryptonTrackBarVolume_ValueChanged); + // + // kryptonPanel3 + // + this.kryptonPanel3.Controls.Add(this.kryptonPanel2); + this.kryptonPanel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel3.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel3.Margin = new System.Windows.Forms.Padding(0); + this.kryptonPanel3.Name = "kryptonPanel3"; + this.kryptonPanel3.PanelBackStyle = ComponentFactory.Krypton.Toolkit.PaletteBackStyle.ButtonStandalone; + this.kryptonPanel3.Size = new System.Drawing.Size(160, 48); + this.kryptonPanel3.TabIndex = 3; + // + // kryptonPanel2 + // + this.kryptonPanel2.AutoSize = true; + this.kryptonPanel2.Controls.Add(this.borderEdgeSep3); + this.kryptonPanel2.Controls.Add(this.buttonNext); + this.kryptonPanel2.Controls.Add(this.buttonPlayPause); + this.kryptonPanel2.Controls.Add(this.borderEdgeSep2); + this.kryptonPanel2.Controls.Add(this.buttonStop); + this.kryptonPanel2.Controls.Add(this.borderEdgeSep1); + this.kryptonPanel2.Controls.Add(this.buttonPrevious); + this.kryptonPanel2.Location = new System.Drawing.Point(3, 1); + this.kryptonPanel2.Margin = new System.Windows.Forms.Padding(0); + this.kryptonPanel2.Name = "kryptonPanel2"; + this.kryptonPanel2.PanelBackStyle = ComponentFactory.Krypton.Toolkit.PaletteBackStyle.ButtonStandalone; + this.kryptonPanel2.Size = new System.Drawing.Size(146, 42); + this.kryptonPanel2.TabIndex = 4; + // + // borderEdgeSep3 + // + this.borderEdgeSep3.BorderStyle = ComponentFactory.Krypton.Toolkit.PaletteBorderStyle.ButtonStandalone; + this.borderEdgeSep3.Dock = System.Windows.Forms.DockStyle.Left; + this.borderEdgeSep3.Location = new System.Drawing.Point(108, 0); + this.borderEdgeSep3.Name = "borderEdgeSep3"; + this.borderEdgeSep3.Orientation = System.Windows.Forms.Orientation.Vertical; + this.borderEdgeSep3.Size = new System.Drawing.Size(1, 42); + this.borderEdgeSep3.StateCommon.GraphicsHint = ComponentFactory.Krypton.Toolkit.PaletteGraphicsHint.None; + this.borderEdgeSep3.Text = "kryptonBorderEdge2"; + // + // buttonNext + // + this.buttonNext.AutoSize = true; + this.buttonNext.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.buttonNext.Cursor = System.Windows.Forms.Cursors.Hand; + this.buttonNext.Dock = System.Windows.Forms.DockStyle.Fill; + this.buttonNext.Location = new System.Drawing.Point(108, 0); + this.buttonNext.Margin = new System.Windows.Forms.Padding(0); + this.buttonNext.Name = "buttonNext"; + this.buttonNext.Size = new System.Drawing.Size(38, 42); + this.buttonNext.StateCommon.Border.DrawBorders = ((ComponentFactory.Krypton.Toolkit.PaletteDrawBorders)(((ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Top | ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Bottom) + | ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Right))); + this.buttonNext.StateCommon.Border.GraphicsHint = ComponentFactory.Krypton.Toolkit.PaletteGraphicsHint.AntiAlias; + this.buttonNext.StateCommon.Border.Rounding = 8; + this.buttonNext.TabIndex = 9; + this.buttonNext.Values.Image = ((System.Drawing.Image)(resources.GetObject("buttonNext.Values.Image"))); + this.buttonNext.Values.Text = ""; + this.buttonNext.Click += new System.EventHandler(this.buttonNext_Click); + // + // buttonPlayPause + // + this.buttonPlayPause.AutoSize = true; + this.buttonPlayPause.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.buttonPlayPause.Cursor = System.Windows.Forms.Cursors.Hand; + this.buttonPlayPause.Dock = System.Windows.Forms.DockStyle.Left; + this.buttonPlayPause.Location = new System.Drawing.Point(74, 0); + this.buttonPlayPause.Name = "buttonPlayPause"; + this.buttonPlayPause.Size = new System.Drawing.Size(34, 42); + this.buttonPlayPause.StateCommon.Border.DrawBorders = ((ComponentFactory.Krypton.Toolkit.PaletteDrawBorders)((ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Top | ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Bottom))); + this.buttonPlayPause.StateCommon.Border.GraphicsHint = ComponentFactory.Krypton.Toolkit.PaletteGraphicsHint.AntiAlias; + this.buttonPlayPause.StateCommon.Border.Rounding = 8; + this.buttonPlayPause.TabIndex = 8; + this.buttonPlayPause.Values.Image = ((System.Drawing.Image)(resources.GetObject("buttonPlayPause.Values.Image"))); + this.buttonPlayPause.Values.Text = ""; + this.buttonPlayPause.Click += new System.EventHandler(this.buttonPlayPause_Click); + // + // borderEdgeSep2 + // + this.borderEdgeSep2.BorderStyle = ComponentFactory.Krypton.Toolkit.PaletteBorderStyle.ButtonStandalone; + this.borderEdgeSep2.Dock = System.Windows.Forms.DockStyle.Left; + this.borderEdgeSep2.Location = new System.Drawing.Point(73, 0); + this.borderEdgeSep2.Name = "borderEdgeSep2"; + this.borderEdgeSep2.Orientation = System.Windows.Forms.Orientation.Vertical; + this.borderEdgeSep2.Size = new System.Drawing.Size(1, 42); + this.borderEdgeSep2.StateCommon.GraphicsHint = ComponentFactory.Krypton.Toolkit.PaletteGraphicsHint.None; + this.borderEdgeSep2.Text = "kryptonBorderEdge1"; + // + // buttonStop + // + this.buttonStop.AutoSize = true; + this.buttonStop.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.buttonStop.Cursor = System.Windows.Forms.Cursors.Hand; + this.buttonStop.Dock = System.Windows.Forms.DockStyle.Left; + this.buttonStop.Location = new System.Drawing.Point(39, 0); + this.buttonStop.Name = "buttonStop"; + this.buttonStop.Size = new System.Drawing.Size(34, 42); + this.buttonStop.StateCommon.Border.DrawBorders = ((ComponentFactory.Krypton.Toolkit.PaletteDrawBorders)((ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Top | ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Bottom))); + this.buttonStop.StateCommon.Border.GraphicsHint = ComponentFactory.Krypton.Toolkit.PaletteGraphicsHint.AntiAlias; + this.buttonStop.StateCommon.Border.Rounding = 8; + this.buttonStop.TabIndex = 7; + this.buttonStop.Values.Image = ((System.Drawing.Image)(resources.GetObject("buttonStop.Values.Image"))); + this.buttonStop.Values.Text = ""; + this.buttonStop.Click += new System.EventHandler(this.buttonStop_Click); + // + // borderEdgeSep1 + // + this.borderEdgeSep1.BorderStyle = ComponentFactory.Krypton.Toolkit.PaletteBorderStyle.ButtonStandalone; + this.borderEdgeSep1.Dock = System.Windows.Forms.DockStyle.Left; + this.borderEdgeSep1.Location = new System.Drawing.Point(38, 0); + this.borderEdgeSep1.Name = "borderEdgeSep1"; + this.borderEdgeSep1.Orientation = System.Windows.Forms.Orientation.Vertical; + this.borderEdgeSep1.Size = new System.Drawing.Size(1, 42); + this.borderEdgeSep1.StateCommon.GraphicsHint = ComponentFactory.Krypton.Toolkit.PaletteGraphicsHint.None; + this.borderEdgeSep1.Text = "kryptonBorderEdge3"; + // + // buttonPrevious + // + this.buttonPrevious.AutoSize = true; + this.buttonPrevious.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.buttonPrevious.Cursor = System.Windows.Forms.Cursors.Hand; + this.buttonPrevious.Dock = System.Windows.Forms.DockStyle.Left; + this.buttonPrevious.Location = new System.Drawing.Point(0, 0); + this.buttonPrevious.Name = "buttonPrevious"; + this.buttonPrevious.Size = new System.Drawing.Size(38, 42); + this.buttonPrevious.StateCommon.Border.DrawBorders = ((ComponentFactory.Krypton.Toolkit.PaletteDrawBorders)(((ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Top | ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Bottom) + | ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Left))); + this.buttonPrevious.StateCommon.Border.GraphicsHint = ComponentFactory.Krypton.Toolkit.PaletteGraphicsHint.AntiAlias; + this.buttonPrevious.StateCommon.Border.Rounding = 8; + this.buttonPrevious.TabIndex = 6; + this.buttonPrevious.Values.Image = ((System.Drawing.Image)(resources.GetObject("buttonPrevious.Values.Image"))); + this.buttonPrevious.Values.Text = ""; + this.buttonPrevious.Click += new System.EventHandler(this.buttonPrevious_Click); + // + // VideoPlayerWidget + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.kryptonSplitContainerMain); + this.Name = "VideoPlayerWidget"; + this.Size = new System.Drawing.Size(724, 475); + this.Load += new System.EventHandler(this.VideoPlayerWidget_Load); + ((System.ComponentModel.ISupportInitialize)(this.kryptonSplitContainerMain.Panel1)).EndInit(); + this.kryptonSplitContainerMain.Panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonSplitContainerMain.Panel2)).EndInit(); + this.kryptonSplitContainerMain.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonSplitContainerMain)).EndInit(); + this.kryptonSplitContainerMain.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.headerGroupVideoPlayer.Panel)).EndInit(); + this.headerGroupVideoPlayer.Panel.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.headerGroupVideoPlayer)).EndInit(); + this.headerGroupVideoPlayer.ResumeLayout(false); + this.tableLayoutPanelControls.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel4)).EndInit(); + this.kryptonPanel4.ResumeLayout(false); + this.kryptonPanel4.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.kryptonPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel3)).EndInit(); + this.kryptonPanel3.ResumeLayout(false); + this.kryptonPanel3.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).EndInit(); + this.kryptonPanel2.ResumeLayout(false); + this.kryptonPanel2.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private ComponentFactory.Krypton.Toolkit.KryptonSplitContainer kryptonSplitContainerMain; + private ComponentFactory.Krypton.Toolkit.KryptonHeaderGroup headerGroupVideoPlayer; + private ComponentFactory.Krypton.Toolkit.ButtonSpecHeaderGroup buttonSpecHeaderGroupFullscreen; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelControls; + private ComponentFactory.Krypton.Toolkit.KryptonPanel kryptonPanel4; + private ComponentFactory.Krypton.Toolkit.KryptonTrackBar kryptonTrackBar1; + private ComponentFactory.Krypton.Toolkit.KryptonPanel kryptonPanel1; + private ComponentFactory.Krypton.Toolkit.KryptonCheckButton buttonVolume; + private ComponentFactory.Krypton.Toolkit.KryptonTrackBar kryptonTrackBarVolume; + private ComponentFactory.Krypton.Toolkit.KryptonPanel kryptonPanel3; + private ComponentFactory.Krypton.Toolkit.KryptonPanel kryptonPanel2; + private ComponentFactory.Krypton.Toolkit.KryptonBorderEdge borderEdgeSep3; + private ComponentFactory.Krypton.Toolkit.KryptonCheckButton buttonNext; + private ComponentFactory.Krypton.Toolkit.KryptonCheckButton buttonPlayPause; + private ComponentFactory.Krypton.Toolkit.KryptonBorderEdge borderEdgeSep2; + private ComponentFactory.Krypton.Toolkit.KryptonCheckButton buttonStop; + private ComponentFactory.Krypton.Toolkit.KryptonBorderEdge borderEdgeSep1; + private ComponentFactory.Krypton.Toolkit.KryptonCheckButton buttonPrevious; + private ComponentFactory.Krypton.Toolkit.KryptonLabel labelTimeProgress; + private ComponentFactory.Krypton.Toolkit.KryptonLabel labelTotalTime; + private DZ.MediaPlayer.Vlc.WindowsForms.VlcPlayerControl vlcPlayerControl; + private ComponentFactory.Krypton.Toolkit.ButtonSpecHeaderGroup buttonSpecHeaderFavourite; + + } +} diff --git a/MovieFinder.Viewer/Controls/VideoPlayerWidget.cs b/MovieFinder.Viewer/Controls/VideoPlayerWidget.cs new file mode 100644 index 0000000000000000000000000000000000000000..dca4a8a8c3b685e0514f0cbd5892eb1eee48ae10 --- /dev/null +++ b/MovieFinder.Viewer/Controls/VideoPlayerWidget.cs @@ -0,0 +1,364 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using System.Diagnostics; +using DZ.MediaPlayer.Vlc.WindowsForms; +using DZ.MediaPlayer.Vlc.Io; +using System.Threading; +using ComponentFactory.Krypton.Toolkit; +using BlueTube.Viewer.Properties; +using Client.Scraper; +using BlueTube.Viewer.Data; + +namespace BlueTube.Viewer +{ + public partial class VideoPlayerWidget : UserControl, IFavouriteEnabledView + { + + #region Fields + + private bool init; + private List playerButtons = new List(); + private ScrapedVideo currentPlayingVideo; + private DataService dataService = DataService.Create(); + private bool mute; + private int lastVolume; + public event EventHandler ToggelFavourite; + public event EventHandler PlayNext; + public event EventHandler PlayPrevious; + + #endregion + + #region Contructor + + public VideoPlayerWidget() + { + InitializeComponent(); + + playerButtons.Add(this.buttonNext); + playerButtons.Add(this.buttonPrevious); + playerButtons.Add(this.buttonPlayPause); + playerButtons.Add(this.buttonStop); + } + + #endregion + + #region Public + + public bool PlayStart(ScrapedVideo video) + { + this.headerGroupVideoPlayer.ValuesPrimary.Heading = video.Title; + this.currentPlayingVideo = video; + UpdateFavouriteButton(DataService.Create().IsFavourite(this.currentPlayingVideo)); + return PlayStart(video.PlayUrl); + } + + private void UpdateFavouriteButton(bool fav) + { + this.buttonSpecHeaderFavourite.Checked = fav ? + ButtonCheckState.Checked : ButtonCheckState.Unchecked; + } + + + + public bool PlayStart(string url) + { + try + { + Init(); + + this.vlcPlayerControl.Play(new MediaInput(MediaInputType.NetworkStream, url)); + return true; + } + catch (Exception ex) + { + Program.SetIdle(); + KryptonMessageBox.Show("Unable to play the video. Please try again", Constants.AppTitle, MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + return false; + } + public void ActivateView() + { + if (this.vlcPlayerControl.State == VlcPlayerControlState.Paused) + this.vlcPlayerControl.PauseOrResume(); + } + public void DeactivateView() + { + if(this.vlcPlayerControl.State == VlcPlayerControlState.Playing) + this.vlcPlayerControl.PauseOrResume(); + } + + + #endregion + + #region Private + + private void Init() + { + if (!init) + { + this.vlcPlayerControl.Initialize(this); + InitializeProgress(); + InitializeVolume(); + this.vlcPlayerControl.StateChanged += vlc_onStateChanged; + this.vlcPlayerControl.PositionChanged += vlc_onPositionChanged; + this.vlcPlayerControl.EndReached += vlc_onEndReached; + this.vlcPlayerControl.Player.IsFullScreen = true; + init = true; + } + + } + private void InitializeProgress() + { + //statusStrip.Items["playerStatus"].Text = Convert.ToString(videoWindow.VlcPlayerControl.State); + this.labelTimeProgress.Text = String.Format("{0:D2}:{1:D2}:{2:D2}", + this.vlcPlayerControl.Time.Hours, this.vlcPlayerControl.Time.Minutes, + this.vlcPlayerControl.Time.Seconds); + } + private void InitializeVolume() + { + this.kryptonTrackBarVolume.Value = (int)((1.0 * this.vlcPlayerControl.Volume / 100) * + this.kryptonTrackBarVolume.Maximum); + } + private void PlayerButtonsUncheck() + { + foreach (var b in this.playerButtons) + b.Checked = false; + } + private void UpdatePlayProgress() + { + + try + { + int newTrackbarPositionValue = (int)(this.vlcPlayerControl.Position * 100); + + if (newTrackbarPositionValue != this.kryptonTrackBar1.Value) + { + this.kryptonTrackBar1.Value = newTrackbarPositionValue > this.kryptonTrackBar1.Maximum + ? this.kryptonTrackBar1.Maximum + : newTrackbarPositionValue; + } + + var time = this.vlcPlayerControl.Time; + this.labelTimeProgress.Text = String.Format("{0:D2}:{1:D2}:{2:D2}", time.Hours, time.Minutes, time.Seconds); + if (this.vlcPlayerControl.State != VlcPlayerControlState.Idle) + { + var total = TimeSpan.FromMilliseconds((1 / this.vlcPlayerControl.Position) * this.vlcPlayerControl.Time.TotalMilliseconds); + this.labelTotalTime.Text = String.Format("{0:D2}:{1:D2}:{2:D2}", total.Hours, total.Minutes, total.Seconds); + } + } + catch { } + finally + { + + } + + } + public void PlayStop() + { + PlayerButtonsUncheck(); + try + { + if (this.vlcPlayerControl.State != VlcPlayerControlState.Idle) + { + this.vlcPlayerControl.Stop(); + UpdatePlayProgress(); + } + } + catch (Exception exc) + { + + MessageBox.Show(String.Format("Cannot stop player : {0}", exc)); + } + } + + + #endregion + + #region Events + + private void vlc_onStateChanged(object sender, EventArgs args) + { + VlcPlayerControlState currentState = this.vlcPlayerControl.State; + // + switch (currentState) + { + case VlcPlayerControlState.Idle: + { + this.buttonPlayPause.Values.Image = Resources.play; + break; + } + case VlcPlayerControlState.Paused: + { + this.buttonPlayPause.Values.Image = Resources.play; + break; + } + case VlcPlayerControlState.Playing: + { + this.buttonPlayPause.Values.Image = Resources.pause; + break; + } + } + } + private void vlc_onEndReached(object sender, EventArgs e) + { + + } + private void vlc_onPositionChanged(object sender, EventArgs e) + { + if (InvokeRequired) + Invoke(new ThreadStart(UpdatePlayProgress)); + else + UpdatePlayProgress(); + } + + private void buttonPlayPause_Click(object sender, EventArgs e) + { + PlayerButtonsUncheck(); + switch (this.vlcPlayerControl.State) + { + case VlcPlayerControlState.Idle: + { + if (currentPlayingVideo != null) + PlayStart(currentPlayingVideo); + break; + } + case VlcPlayerControlState.Paused: + { + this.vlcPlayerControl.PauseOrResume(); + break; + } + case VlcPlayerControlState.Playing: + { + this.vlcPlayerControl.PauseOrResume(); + break; + } + } + } + + private void kryptonCheckButton1_Click(object sender, EventArgs e) + { + //this.vlcControl1.AudioProperties.IsMute = !this.vlcControl1.AudioProperties.IsMute; + } + + private void kryptonTrackBarVolume_ValueChanged(object sender, EventArgs e) + { + try + { + this.vlcPlayerControl.Volume = (int)((1.0 * + this.kryptonTrackBarVolume.Value / this.kryptonTrackBarVolume.Maximum) * 100); + if (this.vlcPlayerControl.Volume > 0) + { + mute = false; + this.buttonVolume.Values.Image = Resources.volume; + } + + } + catch (Exception exc) + { + MessageBox.Show(String.Format("Cannot change volume level: {0}", exc)); + } + } + + private void kryptonTrackBar1_Scroll(object sender, EventArgs e) + { + try + { + + if (this.vlcPlayerControl.State == VlcPlayerControlState.Idle) + { + this.kryptonTrackBar1.Value = 0; + return; + } + // + float val = 1f * this.kryptonTrackBar1.Value / this.kryptonTrackBar1.Maximum; + if (val != this.vlcPlayerControl.Position) + this.vlcPlayerControl.Position = val; + + } + catch (Exception exc) + { + // + MessageBox.Show(String.Format("Cannot change position : {0}", exc)); + } + + } + + private void VideoPlayerWidget_Load(object sender, EventArgs e) + { + //Init(); + } + + private void buttonStop_Click(object sender, EventArgs e) + { + PlayStop(); + } + + private void kryptonCheckButtonVolume_Click(object sender, EventArgs e) + { + Init(); + if (!mute) + this.lastVolume = this.vlcPlayerControl.Volume; + + this.vlcPlayerControl.Volume = mute ? this.lastVolume : 0; + mute = !mute; + this.buttonVolume.Values.Image = mute ? Resources.mute : Resources.volume; + this.kryptonTrackBarVolume.Value = this.vlcPlayerControl.Volume; + } + + public void TriggerSearch(SearchParameters param) + { + throw new NotImplementedException(); + } + + private void buttonSpecHeaderGroupFullscreen_Click(object sender, EventArgs e) + { + new FullscreenPlayer(this.vlcPlayerControl).ShowDialog(); + } + + private void buttonSpecHeaderGroup1_Click(object sender, EventArgs e) + { + if(this.currentPlayingVideo != null) + { + var fav = dataService.IsFavourite(this.currentPlayingVideo); + if (!fav) + dataService.AddToFavourite(this.currentPlayingVideo); + else + dataService.DeleteFromFavourite(this.currentPlayingVideo); + + UpdateFavouriteButton(!fav); + if (this.ToggelFavourite != null) + this.ToggelFavourite(this, new ToggleFavouriteEventArgs + { + IsFavourite = !fav, + Video = this.currentPlayingVideo + }); + + + } + } + + private void buttonNext_Click(object sender, EventArgs e) + { + if (PlayNext != null) + PlayNext(this, new PlayEventArgs { Current = this.currentPlayingVideo }); + } + + private void buttonPrevious_Click(object sender, EventArgs e) + { + if (PlayPrevious != null) + PlayPrevious(this, new PlayEventArgs { Current = this.currentPlayingVideo }); + } + + #endregion + + + + } + + +} diff --git a/MovieFinder.Viewer/Controls/VideoPlayerWidget.resx b/MovieFinder.Viewer/Controls/VideoPlayerWidget.resx new file mode 100644 index 0000000000000000000000000000000000000000..25d92db922cb66d279841cf628b94ddab2c923e4 --- /dev/null +++ b/MovieFinder.Viewer/Controls/VideoPlayerWidget.resx @@ -0,0 +1,291 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAIGSURBVDhPxZBRaFJRHMbPig0VClmhGRUpqWzXdrFbDNlqsjUQB2NZ7CGMW7ujW0hNtsywNmsa + TnNt1caKCSMojAURl4ikYOCrTz3I3nwKfOq+BCNo9eU53KR6yXrpDx/8v3t/vwPnkP8/ba6DitDpgd3Z + hvTcfVyeuApeOPLH7mx30a4Qq9UKm82GD5++Iq8U4HA4QL810sVRGWTffivW1U0sP38Fk8kEs9nccDca + jSAjkbjSdXwAer0eBoMBgbMXwR3q/KX//v9H1+l0CnuHRCIBVVVh6/JBzCxAnl3CqZkH6E/OoXf6Lnon + s/Bey+DYxAx280cZSx0m04nH46hWq7D4RzFwK4eh9GN0R++Bv5CE69wUuNNRtA+Pw3kihGbOy1jqaDoh + sVgMlUoFh8dSOLP0Ej+PMDYP/nyK7fbAOJo7+hlLHU0nJBKJoFwuw59exsjKa6ifv9XjST6r7y2+KLby + g4yljqYTEg6HUSqV4KndcTCdx/rHL/Xwi28RfPGe7U1DKWxxn2QsdTSdkFAohGKxiNaeIHgpC/eVPNyZ + N+h4tAYutwb74jvsubGKncEsjH0SY6mj6YTIsoxCoYCmXRx29NUeKnAb2y89xN6bKxBmn8C/8BT+Ozl4 + r8/jgG+YsdTRdEIkSYKiKOxujYSy1NF0sk0UxY1a8JfZoC49wFKL8G8hlu/8RM05vcE2aQAAAABJRU5E + rkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAaxSURBVFhHpZdZSJVtEMffy3NxriKIbkJQCoowLKOgxcqszLT9tNtCpWWrbbbaAkldVVdiQfty + 0XZXESTkhdCCiFGKWbaa7XGqc7Ka5je9j9+bn4V938Bw3vM8M///PDPzzHuO11HZuXNnWDWya9euUtVK + 1WbVmK88s1aKDba+2/+X4uLipO3bt5ft2LEjqs+ybds22bJli2zatEk2btxoyjNr7GGDLT74+jB/LwoY + 2rp1a4lqfPPmzbJhwwYpLCyUgoICWbx4scyfP1/mzp1ryjNr7GGDLT74ggGWD9sx0RMlKkAVp1u3bp0s + W7bMSCDYu3evnDp1Sq5cuSIVFRWmPLPGHjbY4oMvGGCB6cP/WTT65KKioiacV6xYYWB8nj59Wm7duiW1 + tbXy8OFDefz4sTx9+lSePHkijY2NUl9fL3fu3JGbN2+abdAXLDDB9mnaFzVMXL9+fdOaNWtkyZIlMmfO + HDlw4IARP3jwQF68eCGvXr2SN2/eyNu3b+Xdu3f2+fr1a3n58qU8f/5cHj16ZEHeuHHDfMEAC0yw4fDp + fhWtXWjt2rVVq1evlry8PHM8c+aM3L1714ghff/+vUSjUfn48aN8/vy5VT99+mTr7BMMgRBwdXW1YYAF + JthwaDD/7gndLFm1apXk5+fLzJkzLY11dXV2YoAd6ZcvX6SlpUW+fv3aqnxnPRaLmR2ZIWhKU1NTY1hg + gg0HXD7tT9E6Ja1cuTJOqjDct2+fnZzTfPjwwU4Yj8eN7Nu3b/L9+/dWvXbtmn2y7oIhUPwoC0GQCTDB + hgMuOH16z1u+fHkZ3Ttv3jyLkppzckDcqYPEQeH+X7p0yZ5dIARBNvAnEw0NDdYTYMMBF5xGvnTp0rAu + RBctWiRTpkyRkydPWiORdk7uyAFoS47QXNT3/Pnz9t0F6TJBOZ49eyb37t0zbDjgghNuT6OKAJCbm2vR + 3b592xqOpnJpB3D//v1y/fp1IwkKKZ09e7YBU2skmAlwyCZXl0PAAReccHs6wUoXLlwo06ZNE53l1nju + 9AC41O/evdtGLkMnKABOnDhRxowZI5mZmXZKBB+CpxRkgZlBQ8IBF5xwe/pQ6UCOHTtmd5jmIX3u9Ai1 + Zqgw4VzNkenTp8vo0aNlyJAhMnToUAvEZYLgKSG90NTUZNhwwAUn3N6CBQuauafjxo2Ty5cvy/379y0A + UkcGXAB6f0VtW8fs1atXbX3SpElGnpKSIv3795fhw4fLhAkT5Ny5c+brygAm2HDABSfcngLGZs2aZelj + rtOx1Iz7HMzA4MGDjWDUqFH2AuKFU15eLtnZ2ZKamiqJiYnSs2dPGTBggGUBgosXLxoGWGCCDQdccMLt + KViM+4nTnwLo3r27hMNh6dKli/Tr18/SCAGknTt3llAoJF27dpU+ffpYkDTm7wKAC064Pe3I5hkzZlhU + 1PZ3Jejdu7cRJCQkyMCBA+3tF1zv1KmTdOvWTfr27WsEZ8+ebbcEcMAFJ9yepqqSL1lZWXLkyBFrFBqG + xnEzACG1nDY5OVkOHTpkawiEpB/yHj16mB2NhrTXhHDABSfcntailC85OTn2a4arwpXh6nCFXBkyMjJk + 0KBBcvDgQQN3whpB9erVyxrRBYcPvm2vIRxwwQm3p7WI8IWacj8ZFgwNaubKwEmmTp0qJ06cMPCguMAo + iwsOcnxc+sFygwgOuOCE29OHsN7lKJOM5iF9jE3GJ5EzDwC6cOFCaz8EBTDmAKlFsEHxaTuKwYYDLjjh + tveBRlXGCblSdC+R0rG8SKgfaXSZaBsE9rzzkeDJ23sZYQsHXHAaORKJRJJU4wwVUspvO16hvErpXoBc + JqirCwTlqjli9tzJ8cHXvY7BBBsOuOD06X+KLpSQGhoEw+PHj1vTAMApSCX15GR0tgvGkbLGHjbYBn+Q + gAUm2HDA5dP+I5qWkGrV5MmTbVRyl3EkelJIHWkmwDkdRAwYlGfW2MMGW3zwBQMsMMGGAy6f9lfRjUSN + sIk04TBy5EjZs2eP1Y8mopO5Ttxp0gsZyjNr7GGDLT74ggEWmGDD4dO1L2qU7IKgYQBgbh89etRASSkD + hanGKVGeWWMPG2zxwRcMRw62T/NnUUMyYeUYP368jB07VkaMGGEp1H86cvjwYRup/EBBeWaNPWywxQdf + voMFpg/fMVHHkGqJapy7DhgjlDufnp4uw4YNk7S0NFOeWWMPG2zxwdfH+Lu/ZkFR5yTVMtUoqQSY9z0d + HVTW2MMGW9/nv/85bSsKHFaNqJaqVqo2q8Z85Zk19rDp4N9zz/sBIYh8pe11bF0AAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAanSURBVFhHpZdJTFRbEIbvyrAgETe40kRhg6iwAOMQoiiOOKLYTuAAivM84IATJhJNNMZEQkiM + U1D3LtDElZq0cYgxGoU4oigiKphWuxGtV195jzY8ng/fq6TSt8+p+v86VXXqdntdldLS0ljVwL59+ypU + g6qNqmFfeWatAhtsfbf/L7t3707cs2dP5d69e0P6LLt27ZKSkhLZvn27bNu2zZRn1tjDBlt88PVh/lwU + MGbnzp1lqpEdO3ZIcXGxbNiwQVauXClFRUWyaNEiWbBggSnPrLGHDbb44AsGWD5s10RPlKAAdzjd5s2b + ZdWqVUYCwcGDB+Xs2bNy6dIluXr1qinPrLGHDbb44AsGWGD68L8XjT5l69atDTivWbPGwPg8d+6c3Lp1 + S2pqauTZs2fy4sULqa+vl5cvX8rz58/l0aNHcv/+fbl586bZRvuCBSbYPk3nooYJW7Zsadi4caMsX75c + 8vPz5ejRo0b89OlTefPmjTQ1Ncn79+/lw4cP0tzcbJ/v3r2Tt2/fyuvXr6Wurs6CvHHjhvmCARaYYMPh + 07UXrV3Mpk2b7qxfv16WLl1qjufPn5cHDx4YMaQtLS0SCoXk06dP8uXLl5/6+fNnW2efYAiEgO/evWsY + YIEJNhwazN97QjfL1q1bJ8uWLZO5c+daGmtra+3EADvS1tZW+fr1q7S1tf1UvrMeDofNjswQNKW5d++e + YYEJNhxw+bQ/ROuUuHbt2gipwvDIkSN2ck7z8eNHO2EkEjGyCxcu2Gm/f//eTr99+/YzGALFj7IQBJkA + E2w44ILTp/e81atXV9K9CxcutCipOScHxJ0aAogOHTpkYJyso7hACIJs4E8mnjx5Yj0BNhxwwWnkK1as + iNWF0JIlSyQ3N1eqqqqskUg7J48mR/fv329DR2spx48fN5JocXYuE5Tj1atX8vDhQ8OGAy444fY0qgAN + Mn/+fIvu9u3b1nCk2aXdgSJMOzpanaWwsJCTyPXr123PCbYuE+CQTa4uWYADLjjh9nSCVSxevFhmzZol + Osut8dzpAXCnd6JXycgBmjNnjsycOdP08OHD5ucEH4KnFGSBmUHZ4IALTrg9fQgClpOTI6dPn7Y7TPOQ + Pnf6aKGLCwoKJBAIyJQpUyQ7O1smTpwoU6dOtYwEg0HfUix4SkiZGhoaDBsOuOCE21OwRu7ppEmT5OLF + i/L48WMLgNSRgY4B0EDz5s0z8qysLBk5cqR9TpgwQaZNmyazZ8+WY8eOGSm+rgxggg0HXHDC7em4DAMI + AHOdjqVm3OfOMkD6HPmQIUNMMzIyLJDx48dbEOCRKWoOBlhggg0HXNjA7enbLMz9xLkrAQwYMEB69+4t + cXFx0q1bN+nevbv06tVL+vfvL8OGDTNweuN3AcAFJ9yedmQjDjhWV1f/awlSU1Olb9++0rNnT+nRo4fE + x8dLnz59JCUlxTJBPzAn/qkEcLgg4fa0FkG+4Hjy5ElrFBoGADcDomXQoEHSr18/I+XkfCYlJUl6erql + /8qVK75l500IB1xwwu1pLSr4Ql35NcNV4cpwdbhCHcswfPhwIxs4cKAkJydbSdLS0mw48WZ0gg++Ha8h + HHDBCbentQjwhatBg1E3hgY1c2WIngXUb8SIETJ06FAZPHiwpfPy5cu25wRbfFz6wXKDCA644ITb04dY + vTohRuTYsWPtnjI2GZ9EzjxwvYDOmDHDUoit/vZrd2rE2eHTcRSDjR9ccMJt7wONqpJpNnnyZMnLy7NI + 6VheJNSPNLpMMEaZ5deuXfMpf0n0yTt7GYENB1xwGjmiUy1RNTJ9+nQZM2aM/bbjFcqrlO4FyGWivLzc + TuVO6hRiau5Ojg++7nUMJthwwAWnT/9DdKGM1NAgGJ45c8aaBgBOASn15GR0NkQQOlLW2MMG2+gfJGCB + CTYccPm0v0TTEqN6hxozKmk2HImeFFJHmglwTgcRAwblmTX2sMEWH3zBAAtMsOGAy6dtL7qRoBE2kCYc + Ro8eLQcOHLD60UR0MteJO016IUN5Zo09bLDFB18wwAITbDh8us5FjVJcEDQMAMztU6dOGSgpZaAw1Tgl + yjNr7GGDLT74guHIwfZpfi9qSCasHLxmeeWOGjXKUqj/dOTEiRM2Upl6KM+ssYcNtvjgy3ewwPThuybq + GKNaphphcADG/R83bpy9CTMzM20goTyzxh422OKDr4/xZ3/NokWdE1UrVUOkEmBmPh0drayxhw22vs9/ + /3PaURQ4VjWgWqEaVG1UDfvKM2vsYdPFv+ee9xdzLIcND0sx4AAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAacSURBVFhHpZfbU81tFMd/l43pUlduGHFFjGkKwziVQ4oIm+SQRlHOoRAqZuzhQsZNTTclQ/0H + cctFM2iM0SQjkSjJqdnYO4f1rs/ye7xbYvK+z8yanv08a32/6/Ss3fZGu06dOhWrEjh9+nSNSotKv0rY + F/ac1aCDrm/2/1d5eXl8RUVFbWVlZUj3cvLkSTl+/LgcO3ZMjh49asKeM+7QQRcbbH2Yv18KGHPixImg + SqSsrExKS0uluLhYdu3aJQUFBbJt2zbZunWrCXvOuEMHXWywBQMsH3Z0SyOaqAB3ie7w4cOye/duI4Hg + 3LlzcvXqVbl+/brcvHnThD1n3KGDLjbYggEWmD78n5d6P+3IkSN9GO/du9fA+NvY2Ch37tyRjo4OefLk + iTx79kyeP38uPT098vTpU3n06JG0tbXJ7du3TTfaFiwwwfZpRl6qOLGkpKTv4MGDUlhYKJs3b5aLFy8a + cVdXl7x8+VIGBgbkzZs38vbtW3n37p39ff36tbx69Up6e3ulu7vbnLx165bZggEWmGDD4dP9vLR2MYcO + Hbp74MAB2bFjhxk2NTVJe3u7EUP6/v17CYVC8uHDB/n06dMP+fjxo51zjzM4gsP37t0zDLDABBsOdebX + ntDL4P79+2Xnzp2yceNGS+PDhw8tYoAd6dDQkHz+/Fm+fPnyQ/jMeTgcNj0yg9OU5v79+4YFJthwwOXT + fl9ap/h9+/ZFSBWKFy5csMiJZnBw0CKMRCJG9vXrV/n27dsvwrlzBkexoyw4QSbABBsOuOD06T1vz549 + tXRvbm6ueUnNiRwQF3U08e+WcwQnyAb2ZOLx48fWE2DDARecRl5UVBSrB6H8/HxZu3atXLlyxRqJtBO5 + I6+urpaqqio5c+aMDRvtamssjcY6HSG9frP9yATlePHihTx48MCw4YALTrg99SpAg2zZssW8a21ttYaj + qVzaiYyOhpyJx7AhlXl5ebJp0yZLbXZ2tv2l4Xh+LhPgkE2eLlmAAy444fZ0gtVs375d1q9fLzrLrfFc + 9AC41J8/f150vNLFRs4ExGb16tWSmZlpwp4IcQQbnKcUZIGZQUPCgR2ccHu6acErjBsaGuwN0zykz0XP + YsoxXkk1EQYCAcnIyJAlS5ZIamqqLF68WJYtWyYrVqwwJ1g4Twnphb6+PsOGAy444fY0jf2kDbBr165J + Z2enOUDqyIBzIBgM2own+pycHCNatGiRzJ07V+bMmSPz5s2zzzhBNljYujKACTYccMEJt6fRhAFMS0uz + uU7HUjPec3QGMKDORL5y5UqLetasWTJjxgxJTEyUpKQkmT17tsyfP9+cYLkygAUm2HDABSfcntYyTM0w + +pMDeA3hlClTZPz48TJ27FgZM2aMCXvOuEOHsrB+5wBccMLtaUf2ExleNTc3/7YEq1atslRPnz5dJk2a + JOPGjZO4uDgT9pxxh050BoaXAA644ITb09S28CE9PV3q6+utUWgYGsfNABapX7hwoSQnJ8vUqVNl8uTJ + MmHCBBP2nHGHDv3BGqkJ4YALTrg9rUUNH6grA4anwpPh6fCEXBnoATynxjNnzrTaJyQkmLDnjDt0eAUu + /cOfIRxwwQm3p7UI8IGnwftkWDA0qJkrA5HwH09WVpYRpKSkWNeTbvcCOOMOHYYTNi79YLlB5GYHnHB7 + uondsGFDCK9pHt4pY5PxiefMA4B4/wCvW7fOnhlphBChQekRysSUY9RiM3wUgw0HXHDCbd8H6lUtwNQO + EjylY/kioX6k0WXCNeVIizsX+UhfRmDDARecRs5Sz+NVIqSPicbU4yuUr1K6FyCXCerqHIkWzrhzkWOD + rfs6BhNsOOCC06f/vvQgSGpoEBQvX75sTQMAUZBK6klkdLZzxpFyxh066Eb/QwIWmGDDAZdP++/StMSo + 3F2zZo3VlLeMId6TQupIMwFOdBAxYBD2nHGHDrrYYAsGWGCCDQdcPu3PSy8mqod9pAkDxu3Zs2etfjQR + ncxz4k2TXsgQ9pxxhw662GALBlhggg2HTzfyUqVpzgkaBgDm9qVLlwyUlDJQmGpEibDnjDt00MUGWzAc + Odg+zZ+XKpIJKwdPbvny5fZNx2f9pSN1dXU2Um/cuGHCnjPu0EEXG2z5DBaYPvzolhrGqARVIgwO9/aX + Ll1qQ2fBggU2+RD2nHGHDrrYYOtj/N1Ps+ilxvEqtSohUgkwQ4eOjhbOuEMHXd/mv/84Hb4UOFYloFKj + 0qLSrxL2hT1n3KEzyp/nnvcPA7YonNwCkQ8AAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAauSURBVFhHpZdJaFRbEIbvshe9EiG6ESFBgxIi6kJBUYkap0Tj1M4jMVHjEGOiJs6KBF2JqxAF + 5wkERRcqEkLiIkETgigOxHnI4CytdjvVq6+8J6/t10/iewVF3z6n6v/rVNWp2+11Vnbs2BFUDe3cubNC + tU61XTXiK8+sVWCDre/2/2Xr1q0p27Ztq9y+fXtYn2XLli2yadMmKSsrk9LSUlOeWWMPG2zxwdeH+XNR + wMDmzZvLVaMbN26U9evXS1FRkRQUFEheXp4sWrRIFixYYMoza+xhgy0++IIBlg/bOdETJStAE6crKSmR + FStWGAkEe/bskRMnTsjly5fl6tWrpjyzxh422OKDLxhggenD/140+vQNGza04rxq1SoD4/PkyZPS0NAg + d+/elUePHsnTp0/l+fPn8uzZM3n8+LE0NzfLrVu35Pr162Yb6wsWmGD7NIlFDZPXrVvXunbtWlm2bJnM + mzdP9u3bZ8QPHz6UtrY2efXqlbx580bevn0r7969s8/Xr1/Ly5cvpaWlRZ48eWJBXrt2zXzBAAtMsOHw + 6X4VrV2guLi4ac2aNZKfn2+Op06dktu3bxsxpO/fv5dwOCwfP36Uz58/d+inT59snX2CIRACvnHjhmGA + BSbYcGgw/+wJ3SwvLCyUpUuXyuzZsy2N9+7dsxMD7Ei/fPkiX79+lW/fvnUo31mPRCJmR2YImtLcvHnT + sMAEGw64fNqfonVKWb16dZRUYbh37147Oaf58OGDnTAajRrZ9+/f5cePH6bV1dUdz6y7YAgUP8pCEGQC + TLDhgAtOn97zVq5cWUn3Lly40KKk5pwcEHfqWGKkqqpK9K7bsxMXCEGQDfzJxIMHD6wnwIYDLjiNfPny + 5UFdCC9ZskSmTZsmx48ft0Yi7Zw8ETnXjs7mvscLNufPn+/IBOV48eKF3Llzx7DhgAtOuD2NKkSDzJ8/ + 36JrbGy0hqOpXNpjyS9dumRXi1PwGS9nzpwxHJcJcMgmV5cssAcXnHB7OsEqcnNzZcaMGaKz3BrPnR4A + d3rkypUrRoq9m36xQrNlZ2fL5MmTzYfgKQVZYGbQkHDABQbcnj7UERVOR44csTtM85A+d3qkpqbGUg4p + zTRz5kw7iZPTp09LZmamDB06VEaOHGlrBE8J6YXW1lbDhgMuOOH2Fi9e3M49zcrKsvTev3/fAiB1ZIAA + 6uvrZdeuXTbnmf05OTkyadIkCwK5cOGCTJkyRQYPHixpaWkyaNAgW8fXlQFMsOGAC064PU1lZM6cOTJu + 3Dib63QsNeM+k4Fz585ZtLNmzbLIx4wZI8OGDbPTTp061W4DV2vs2LGSmpoq3bp1kz59+nQEAAZYYIIN + B1xwwu3piSKkFIB/C2Du3LlG2K9fP+nevbsEAgHp2rWrEbFPYAMHDpSkpCQJBoPSq1ev3wYAF5xwe1rH + dk5HVBcvXkxYAjobpwEDBkiPHj2kS5cuFgjpRngTkv6ePXv+sp6oBHDABSfcntaiji8TJkyQQ4cOWaPQ + MDSOmwEIzUNte/fubUEkJydbQE4OHDgg6enplhXXA4maEA644ITb01pU8GXixIn2a4arwpXh6nCFYm8C + JP3795e+ffsa2ZAhQ2zdyf79+21t9OjRHemPv4ZwwAUn3J7WIsQX6sj9ZFgwNKiZK0PsLICEdDuieDl2 + 7JhMnz7dfFz6wXKDCA644ITb04egXqcwI5JGI9WMTcYnkTMPXC+4IEgjtwGgeMHm7Nmz5hM/isGGAy44 + 4bb3gUZVSdRMMTqeSOlYXiTUjzTGZ4L3PLaxwp47eaKXEfZwwAWnkSOhUChFNcowIa38tuMVyquU7gXI + ZYK6ukC4gnw6YvbcyfHB172OwQQbDrjg9Ol/ii6UkxoaBMOjR49a0wDAKUgl9eRkdLYLxpGyxh422Mb+ + IAELTLDhgMun/Vs0LQHVJqYbo5J7jyPRk0LqSDMBzukgYsCgPLPGHjbY4oMvGGCBCTYccPm0v4puJGuE + raQJh1GjRsnu3butfjQRncx14k6TXshQnlljDxts8cEXDLDABBsOny6xqFG6C4KGAYC5ffjwYQMlpQwU + phqnRHlmjT1ssMUHXzAcOdg+ze9FDcmElYO33vjx4yUjI8NSqP905ODBgzZSa2trTXlmjT1ssMUHX76D + BaYP3zlRx4BquWqU+w4YI5T7z/t+xIgRMnz4cFOeWWMPG2zxwdfH+LO/ZrGizimqlaphUgkwvwfo6Fhl + jT1ssPV9/vuf03hR4KBqSLVCtU61XTXiK8+ssYdNJ/+ee95f7OZ9QZ1NfqcAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7O + HOkAAAAEZ0FNQQAAsY8L/GEFAAAACXBIWXMAABEGAAARBgG2KwwCAAAAGXRFWHRTb2Z0d2FyZQB3d3cu + aW5rc2NhcGUub3Jnm+48GgAAAsdJREFUWEfFlzuIU0EUhq8PRPAtIoqC2igY8n4RAhKsLUQIYsDCVitt + tF11iy22FmsrEVHQQrBSQUGR+EIQm2Vh10IURUFwzcb/D+eEc2/m3t17k80KH87885+Zk3ndWa/b7a4q + TnGcOMWlaDQa64vFYqtQKGRc7XFwilHU6/UtGPwZ6IIZl0dB+zYku9HVpjjFMNgheCGD9wh6lFwutx3t + c+APuOR53lqXb0AII51O78CUv9SBlaBPyWQym9D+W32lUukJkjoY9PkqYdRqtZ3o5LV2Zgl6Lfl8PgvP + O+Ofq1ar+63HF+ACQbvAG9OJD4e/Be5hto6znkqlNqA8ZWLa0Dar3xccBNO4GwHvTfAAwRhM9Stp66A8 + qWuPJK6buPvq9wVbyuXyHhg/miAnwTgMdAL6D+OZpo5/a1C+ozqW51hPt8FKNpvdB9MnNUcRjCWVSuUQ + 2trG16LOqUf5m2gPqXHNJkRk1so/0B8kCnaCqb4IbnHTsU7QthfwGNI3z70g3knRFuE/SuNfERIhg/2U + +gKYMEmcFJ3H8KxoTEzHvEqh31kS2CnW/QLKvHBU7015s9lch/IMNXgeU5Mk3orv9kgSIFj3w6h/Ef2R + 6vjlN0WbNdpd0dojS4CgPi36Ar8Zol0RraP7wNwLv8aRwGXRVjaBsCVA+YZoK7cE+EXnUB7YhLwFUf5M + LWoTDnUMZZDvUvcdQwx6SvTIYzj0RYT/z3Na7UUkt6kuSfhFpAGWYa9idHwAbf2rGIOeoe68im2gJenH + CIM1oOuScO2nqMf6GCkJP8fPpa0DrnGPUEci8T7HCsyxHiSy8R5wJljn2nMWTMzyHyTKqj7JFL5y8UuW + /SjFQFvR/lV9mJHkj1IFHQWf5YsuH5FXMY/0aJ7livxh8hQwgQ8uj8IkeJpcbYpTXAp+57EcpzGtR1zt + cXCK48Qpjo+u9x/ZCr0sA0NAvgAAAABJRU5ErkJggg== + + + \ No newline at end of file diff --git a/MovieFinder.Viewer/Controls/WebViewWidget.Designer.cs b/MovieFinder.Viewer/Controls/WebViewWidget.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..1bfb8fce73fcf28bbf5b5cfb784909b05f317b5f --- /dev/null +++ b/MovieFinder.Viewer/Controls/WebViewWidget.Designer.cs @@ -0,0 +1,125 @@ +namespace BlueTube.Viewer +{ + partial class WebViewWidget + { + /// + /// 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(); + } + base.Dispose(disposing); + } + + #region Component 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.htmlPanel = new HtmlRenderer.HtmlPanel(); + this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.addToFavouriteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.deleteFromFavouriteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.pictureBox = new System.Windows.Forms.PictureBox(); + this.htmlPanel.SuspendLayout(); + this.contextMenuStrip.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit(); + this.SuspendLayout(); + // + // htmlPanel + // + this.htmlPanel.AutoScroll = true; + this.htmlPanel.AvoidGeometryAntialias = false; + this.htmlPanel.AvoidImagesLateLoading = false; + this.htmlPanel.BackColor = System.Drawing.SystemColors.Window; + this.htmlPanel.BaseStylesheet = null; + this.htmlPanel.ContextMenuStrip = this.contextMenuStrip; + this.htmlPanel.Controls.Add(this.pictureBox); + this.htmlPanel.Cursor = System.Windows.Forms.Cursors.IBeam; + this.htmlPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.htmlPanel.IsContextMenuEnabled = false; + this.htmlPanel.Location = new System.Drawing.Point(0, 0); + this.htmlPanel.Name = "htmlPanel"; + this.htmlPanel.Size = new System.Drawing.Size(350, 138); + this.htmlPanel.TabIndex = 2; + this.htmlPanel.LinkClicked += new System.EventHandler(this.htmlPanel_LinkClicked); + this.htmlPanel.Click += new System.EventHandler(this.htmlPanel_Click); + // + // contextMenuStrip + // + this.contextMenuStrip.Font = new System.Drawing.Font("Segoe UI", 9F); + this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.addToFavouriteToolStripMenuItem, + this.deleteFromFavouriteToolStripMenuItem}); + this.contextMenuStrip.Name = "contextMenuStrip"; + this.contextMenuStrip.Size = new System.Drawing.Size(187, 48); + this.contextMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStrip_Opening); + // + // addToFavouriteToolStripMenuItem + // + this.addToFavouriteToolStripMenuItem.Name = "addToFavouriteToolStripMenuItem"; + this.addToFavouriteToolStripMenuItem.Size = new System.Drawing.Size(186, 22); + this.addToFavouriteToolStripMenuItem.Text = "Add to favourite"; + this.addToFavouriteToolStripMenuItem.Click += new System.EventHandler(this.addToFavouriteToolStripMenuItem_Click); + // + // deleteFromFavouriteToolStripMenuItem + // + this.deleteFromFavouriteToolStripMenuItem.Name = "deleteFromFavouriteToolStripMenuItem"; + this.deleteFromFavouriteToolStripMenuItem.Size = new System.Drawing.Size(186, 22); + this.deleteFromFavouriteToolStripMenuItem.Text = "Delete from favourite"; + this.deleteFromFavouriteToolStripMenuItem.Click += new System.EventHandler(this.deleteFromFavouriteToolStripMenuItem_Click); + // + // pictureBox + // + this.pictureBox.BackColor = System.Drawing.Color.Transparent; + this.pictureBox.Image = global::BlueTube.Viewer.Properties.Resources.favourite_16; + this.pictureBox.Location = new System.Drawing.Point(0, 122); + this.pictureBox.Name = "pictureBox"; + this.pictureBox.Size = new System.Drawing.Size(16, 16); + this.pictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.pictureBox.TabIndex = 0; + this.pictureBox.TabStop = false; + // + // WebViewWidget + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.htmlPanel); + this.Cursor = System.Windows.Forms.Cursors.Hand; + this.Margin = new System.Windows.Forms.Padding(1); + this.MaximumSize = new System.Drawing.Size(0, 138); + this.MinimumSize = new System.Drawing.Size(350, 0); + this.Name = "WebViewWidget"; + this.Size = new System.Drawing.Size(350, 138); + this.htmlPanel.ResumeLayout(false); + this.htmlPanel.PerformLayout(); + this.contextMenuStrip.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private HtmlRenderer.HtmlPanel htmlPanel; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip; + private System.Windows.Forms.ToolStripMenuItem addToFavouriteToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem deleteFromFavouriteToolStripMenuItem; + private System.Windows.Forms.PictureBox pictureBox; + + + } +} diff --git a/MovieFinder.Viewer/Controls/WebViewWidget.cs b/MovieFinder.Viewer/Controls/WebViewWidget.cs new file mode 100644 index 0000000000000000000000000000000000000000..68060f841d67b366283cd8ee62ccaa6aaf721e35 --- /dev/null +++ b/MovieFinder.Viewer/Controls/WebViewWidget.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using HtmlRenderer.Entities; +using Client.Scraper; +using BlueTube.Viewer.Data; + + +namespace BlueTube.Viewer +{ + public partial class WebViewWidget : UserControl + { + public event EventHandler ViewSelected; + private ScrapedVideo video; + private DataService dataService = DataService.Create(); + #region Constructor + + public WebViewWidget() + { + InitializeComponent(); + + } + + public WebViewWidget(ScrapedVideo video, string html) + :this() + { + this.SuspendLayout(); + this.pictureBox.Visible = DataService.Create().IsFavourite(video); + this.video = video; + this.htmlPanel.Text = html; + this.htmlPanel.AutoScroll = false; + this.AutoScroll = false; + this.htmlPanel.VerticalScroll.Enabled = false; + this.htmlPanel.HorizontalScroll.Enabled = false; + this.htmlPanel.VerticalScroll.Visible = false; + this.htmlPanel.HorizontalScroll.Visible = false; + this.ResumeLayout(); + + } + + #endregion + + #region Events + + private void htmlPanel_LinkClicked(object sender, HtmlLinkClickedEventArgs e) + { + e.Handled = true; + } + + private void htmlPanel_Click(object sender, EventArgs e) + { + if (ViewSelected != null) + ViewSelected(this, new GalleryItemSelectedEventArgs( video)); + } + + private void contextMenuStrip_Opening(object sender, CancelEventArgs e) + { + UpdateFavourite(); + } + + private void addToFavouriteToolStripMenuItem_Click(object sender, EventArgs e) + { + dataService.AddToFavourite(this.video); + UpdateFavourite(); + } + + private void deleteFromFavouriteToolStripMenuItem_Click(object sender, EventArgs e) + { + dataService.DeleteFromFavourite(this.video); + UpdateFavourite(); + } + + private void UpdateFavourite() + { + var fav = this.dataService.IsFavourite(this.video); + this.addToFavouriteToolStripMenuItem.Visible = !fav; + this.deleteFromFavouriteToolStripMenuItem.Visible = fav; + this.pictureBox.Visible = fav; + } + + public void RefreshView() + { + UpdateFavourite(); + } + + #endregion + + public void SelectView() + { + this.htmlPanel.BackColor = SystemColors.ActiveCaption; + } + + public void DeselectView() + { + this.htmlPanel.BackColor = SystemColors.Window; + } + + public ScrapedVideo Video + { + get + { + return this.video; + } + } + } + + +} diff --git a/MovieFinder.Viewer/Controls/WebViewWidget.resx b/MovieFinder.Viewer/Controls/WebViewWidget.resx new file mode 100644 index 0000000000000000000000000000000000000000..19ef25a4dd1cf5240b4b7cc88a0d535173486828 --- /dev/null +++ b/MovieFinder.Viewer/Controls/WebViewWidget.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/MovieFinder.Viewer/Data/DataService.cs b/MovieFinder.Viewer/Data/DataService.cs new file mode 100644 index 0000000000000000000000000000000000000000..c93657411150eebc54c7af2c2ae53440d0ffdd07 --- /dev/null +++ b/MovieFinder.Viewer/Data/DataService.cs @@ -0,0 +1,162 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Client.Scraper; +using System.Data.SQLite; +using System.IO; + +namespace BlueTube.Viewer.Data +{ + public class DataService + { + private static SQLiteConnection connection; + + static DataService() + { + connection = new SQLiteConnection("Data Source=mt.db;Version=3;"); + connection.Open(); + } + private DataService() { } + public static DataService Create() + { + return new DataService(); + } + + public void AddToFavourite(ScrapedVideo video) + { + using (var cmd = new SQLiteCommand(connection)) + { + + cmd.CommandText = String.Format("INSERT INTO VIDEO(Url,Title,ImageUrl,Duration,PlayUrl,Quality,IsFavourite) " + + "VALUES('{0}','{1}','{2}',{3},'{4}',{5},{6})", Sanitize(video.Url), + Sanitize(video.Title), Sanitize(video.ImageUrl), + video.Duration.TotalSeconds, Sanitize(video.PlayUrl), 99, 1); + cmd.ExecuteNonQuery(); + } + } + + public void AddSearchWord(string text) + { + if (String.IsNullOrEmpty(text)) + return; + using (var cmd = new SQLiteCommand(connection)) + { + cmd.CommandText = String.Format("SELECT COUNT(*) FROM SEARCHWORD WHERE Text = '%{0}%'", Sanitize(text)); + var count = Convert.ToInt32(cmd.ExecuteScalar()); + if (count > 0) + return; + + cmd.CommandText = String.Format("INSERT INTO SEARCHWORD(Text) " + + "VALUES('{0}')", Sanitize(text)); + cmd.ExecuteNonQuery(); + } + } + + public List GetAllSearchWords() + { + + var words = new List(); + using (var cmd = new SQLiteCommand(connection)) + { + + cmd.CommandText = "SELECT * FROM SEARCHWORD"; + using (var reader = cmd.ExecuteReader()) + { + while (reader.Read()) + { + words.Add(reader[0].ToString()); + } + } + + } + + return words; + } + + private string Sanitize(string text) + { + if (text == null) + return text; + return text.Replace("'", ""); + } + + public List SearchVideos(string query) + { + var videos = new List(); + using (var cmd = new SQLiteCommand(connection)) + { + + cmd.CommandText = String.Format("SELECT * FROM VIDEO WHERE IsFavourite = 1 AND Title LIKE '%{0}%'", Sanitize(query)); + using (var reader = cmd.ExecuteReader()) + { + while (reader.Read()) + { + videos.Add(new ScrapedVideo + { + Url = reader["Url"].ToString(), + Duration = TimeSpan.FromSeconds(Convert.ToInt32(reader["Duration"])), + ImageUrl = reader["ImageUrl"] != DBNull.Value ? reader["ImageUrl"].ToString() : null, + PlayUrl = reader["PlayUrl"] != DBNull.Value ? reader["PlayUrl"].ToString() : null, + Title = reader["Title"] != DBNull.Value ? reader["Title"].ToString() : null, + Quality = reader["Quality"] != DBNull.Value ? Convert.ToInt32(reader["Quality"]) : 100 + }); + } + } + + } + return videos; + } + + public void DeleteFromFavourite(ScrapedVideo video) + { + using (var cmd = new SQLiteCommand(connection)) + { + + cmd.CommandText = String.Format("DELETE FROM VIDEO WHERE Url = '{0}'", Sanitize(video.Url)); + cmd.ExecuteNonQuery(); + } + } + + public List GetAllFavourites() + { + + var videos = new List(); + using (var cmd = new SQLiteCommand(connection)) + { + + cmd.CommandText = "SELECT * FROM VIDEO WHERE IsFavourite = 1"; + using (var reader = cmd.ExecuteReader()) + { + while (reader.Read()) + { + videos.Add(new ScrapedVideo + { + Url = reader["Url"].ToString(), + Duration = TimeSpan.FromSeconds(Convert.ToInt32(reader["Duration"])), + ImageUrl = reader["ImageUrl"] != DBNull.Value ? reader["ImageUrl"].ToString() : null, + PlayUrl = reader["PlayUrl"] != DBNull.Value ? reader["PlayUrl"].ToString() : null, + Title = reader["Title"] != DBNull.Value ? reader["Title"].ToString() : null, + Quality = reader["Quality"] != DBNull.Value ? Convert.ToInt32(reader["Quality"]): 100 + }); + } + } + + } + + return videos; + } + + public bool IsFavourite(ScrapedVideo video) + { + using (var cmd = new SQLiteCommand(connection)) + { + + cmd.CommandText = String.Format("SELECT COUNT(*) FROM VIDEO WHERE Url = '{0}'", Sanitize(video.Url)); + var count = Convert.ToInt32(cmd.ExecuteScalar()); + return count > 0; + } + + } + + } +} diff --git a/MovieFinder.Viewer/Forms/AboutBox.Designer.cs b/MovieFinder.Viewer/Forms/AboutBox.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..8de1e5b617107c53d5c1021de9dd111822e1d459 --- /dev/null +++ b/MovieFinder.Viewer/Forms/AboutBox.Designer.cs @@ -0,0 +1,158 @@ +namespace BlueTube.Viewer +{ + partial class AboutBox + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.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() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutBox)); + this.logoPictureBox = new System.Windows.Forms.PictureBox(); + this.labelProductName = new System.Windows.Forms.Label(); + this.labelVersion = new System.Windows.Forms.Label(); + this.labelCopyright = new System.Windows.Forms.Label(); + this.labelCompanyName = new System.Windows.Forms.Label(); + this.okButton = new System.Windows.Forms.Button(); + this.linkLabel1 = new System.Windows.Forms.LinkLabel(); + ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).BeginInit(); + this.SuspendLayout(); + // + // logoPictureBox + // + this.logoPictureBox.Image = ((System.Drawing.Image)(resources.GetObject("logoPictureBox.Image"))); + this.logoPictureBox.Location = new System.Drawing.Point(12, 9); + this.logoPictureBox.Name = "logoPictureBox"; + this.logoPictureBox.Size = new System.Drawing.Size(164, 137); + this.logoPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.logoPictureBox.TabIndex = 26; + this.logoPictureBox.TabStop = false; + // + // labelProductName + // + this.labelProductName.AutoSize = true; + this.labelProductName.Location = new System.Drawing.Point(205, 11); + this.labelProductName.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); + this.labelProductName.MaximumSize = new System.Drawing.Size(0, 17); + this.labelProductName.Name = "labelProductName"; + this.labelProductName.Size = new System.Drawing.Size(75, 13); + this.labelProductName.TabIndex = 27; + this.labelProductName.Text = "Product Name"; + this.labelProductName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // labelVersion + // + this.labelVersion.AutoSize = true; + this.labelVersion.Location = new System.Drawing.Point(205, 30); + this.labelVersion.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); + this.labelVersion.MaximumSize = new System.Drawing.Size(0, 17); + this.labelVersion.Name = "labelVersion"; + this.labelVersion.Size = new System.Drawing.Size(42, 13); + this.labelVersion.TabIndex = 25; + this.labelVersion.Text = "Version"; + // + // labelCopyright + // + this.labelCopyright.AutoSize = true; + this.labelCopyright.Location = new System.Drawing.Point(205, 49); + this.labelCopyright.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); + this.labelCopyright.MaximumSize = new System.Drawing.Size(0, 17); + this.labelCopyright.Name = "labelCopyright"; + this.labelCopyright.Size = new System.Drawing.Size(51, 13); + this.labelCopyright.TabIndex = 28; + this.labelCopyright.Text = "Copyright"; + this.labelCopyright.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // labelCompanyName + // + this.labelCompanyName.AutoSize = true; + this.labelCompanyName.Location = new System.Drawing.Point(205, 68); + this.labelCompanyName.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); + this.labelCompanyName.MaximumSize = new System.Drawing.Size(0, 17); + this.labelCompanyName.Name = "labelCompanyName"; + this.labelCompanyName.Size = new System.Drawing.Size(82, 13); + this.labelCompanyName.TabIndex = 29; + this.labelCompanyName.Text = "Company Name"; + this.labelCompanyName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // okButton + // + this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.okButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.okButton.Location = new System.Drawing.Point(463, 102); + this.okButton.Name = "okButton"; + this.okButton.Size = new System.Drawing.Size(75, 23); + this.okButton.TabIndex = 30; + this.okButton.Text = "&OK"; + // + // linkLabel1 + // + this.linkLabel1.AutoSize = true; + this.linkLabel1.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.linkLabel1.Location = new System.Drawing.Point(266, 108); + this.linkLabel1.Name = "linkLabel1"; + this.linkLabel1.Size = new System.Drawing.Size(95, 16); + this.linkLabel1.TabIndex = 31; + this.linkLabel1.TabStop = true; + this.linkLabel1.Text = "Goto Website"; + this.linkLabel1.Click += new System.EventHandler(this.linkLabel1_Click); + // + // AboutBox + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(560, 156); + this.Controls.Add(this.linkLabel1); + this.Controls.Add(this.logoPictureBox); + this.Controls.Add(this.labelProductName); + this.Controls.Add(this.labelVersion); + this.Controls.Add(this.labelCopyright); + this.Controls.Add(this.labelCompanyName); + this.Controls.Add(this.okButton); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "AboutBox"; + this.Padding = new System.Windows.Forms.Padding(9); + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "AboutBox"; + ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.PictureBox logoPictureBox; + private System.Windows.Forms.Label labelProductName; + private System.Windows.Forms.Label labelVersion; + private System.Windows.Forms.Label labelCopyright; + private System.Windows.Forms.Label labelCompanyName; + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.LinkLabel linkLabel1; + + } +} diff --git a/MovieFinder.Viewer/Forms/AboutBox.cs b/MovieFinder.Viewer/Forms/AboutBox.cs new file mode 100644 index 0000000000000000000000000000000000000000..d5a6c7794c61e83b844d07238d4276dd68f54413 --- /dev/null +++ b/MovieFinder.Viewer/Forms/AboutBox.cs @@ -0,0 +1,111 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Reflection; +using System.Windows.Forms; +using System.Diagnostics; +using BlueTube.Viewer.Properties; + +namespace BlueTube.Viewer +{ + partial class AboutBox : Form + { + public AboutBox() + { + InitializeComponent(); + this.Text = String.Format("About {0}", AssemblyTitle); + this.labelProductName.Text = AssemblyProduct; + this.labelVersion.Text = String.Format("Version {0}", AssemblyVersion); + this.labelCopyright.Text = AssemblyCopyright; + this.labelCompanyName.Text = AssemblyCompany; + //this.labelDatabase.Text = "DB Version: " + Program.MovieDBVersion; + + } + + #region Assembly Attribute Accessors + + public string AssemblyTitle + { + get + { + object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false); + if (attributes.Length > 0) + { + AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0]; + if (titleAttribute.Title != "") + { + return titleAttribute.Title; + } + } + return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase); + } + } + + public string AssemblyVersion + { + get + { + return Assembly.GetExecutingAssembly().GetName().Version.ToString(); + } + } + + public string AssemblyDescription + { + get + { + object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false); + if (attributes.Length == 0) + { + return ""; + } + return ((AssemblyDescriptionAttribute)attributes[0]).Description; + } + } + + public string AssemblyProduct + { + get + { + object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false); + if (attributes.Length == 0) + { + return ""; + } + return ((AssemblyProductAttribute)attributes[0]).Product; + } + } + + public string AssemblyCopyright + { + get + { + object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false); + if (attributes.Length == 0) + { + return ""; + } + return ((AssemblyCopyrightAttribute)attributes[0]).Copyright; + } + } + + public string AssemblyCompany + { + get + { + object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false); + if (attributes.Length == 0) + { + return ""; + } + return ((AssemblyCompanyAttribute)attributes[0]).Company; + } + } + #endregion + + private void linkLabel1_Click(object sender, EventArgs e) + { + Process.Start(UrlConstants.WebsiteUrl); + } + } +} diff --git a/MovieFinder.Viewer/Forms/AboutBox.resx b/MovieFinder.Viewer/Forms/AboutBox.resx new file mode 100644 index 0000000000000000000000000000000000000000..8ee2b9337d27296ce3b80a5f012cd324def69bf1 --- /dev/null +++ b/MovieFinder.Viewer/Forms/AboutBox.resx @@ -0,0 +1,797 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAnPBJREFUeF7tfQVY + VNv3tpKC3d3dgK0oBip2d3d3XLvrGtcObL12d3d3dwelIihi3d//e95vrTVz8Bw8NCjgrOd5n2HPDBNn + 9rt67x0HgAkmmPCHQvdOE0ww4c+AdmASk5gkTPL69evsV65cGXDq1KkxO3bsqEu35WlciviUy4jkxqdG + C1G4rkA7MIlJTBKiEFcy3rt3b/C1a9fOnTlz5vvx48dx6NAhHDt2TEBKAPQY3N3d8X//93/fv3796kdK + 4SH9Xy3jS/w2UfOdoR2YxCQm0RXiR3IidQc16Q8ePIg9e/Zg165dcnv69Gk8f/4cX758oaf/kP/3//4f + jhw5gs6dO2cxvtxvE/o4Ws5rBiYxiUkChDiR/OnTp42vX7++7/z5834nTpzA4cOHsXfv3gDSnzx5Eg8f + PsTHjx/p6VphReDj4yOeAIUKmDp1al/jS/82oY+l5bxmYBKT/OFCPLAlQtcil32LHukZbM3v37+vS/pv + 375pSK/G2rVrnxvf5rcJfUQt5zUDk5jkDxSa+7ZE0Cq3bt1acPHiRW+26kzy/fv3a0h/584deHt7c1xP + //JD/vvvP/j6+sLT0/Mn0qtBSoXDADvj2/4WoY+r5bxmYBKT/EFC8XpZiumnk6V/pUf6AwcOCGmZ2IFJ + z+NPnz6FSPrAGDdu3Ezj2/8WoY+u5bxmYBKTxHJ58+ZNwdu3b0+6evXqPc7WHz16VIi+e/duIf2+fftA + XoAQ+/v370SLH8LW/8yZM3jx4oUuuUOD3x0G0NfQcl4zMIlJYqEQ8bLfuHFjxOXLl68ERfqzZ8/qZvA/ + f/6Mc+fOYcGCBey+C3r37i0JwMDkDg1I+fzWMIC+kpbzmoFJTBJLhOZzcorpewZXtmO3/8mTJz+RnuX6 + 9esa0uth4sSJ4hHoET04zJo167eFAfTVtJzXDExikhgsNIelVk+W/khwpA+qbMekX7FiBfr27atL+KAw + f/58PH78WJfseti5c6ev8SP/cqGvqeW8ZmASk8QwoXkbqrIdZ/C5PKeXwb9w4UKYSR8YHBZQfK9L+MAw + hgF1jV/hlwp9ZS3nNQOTmCQGCM1VIf3Fixf/DY70N2/e1C3b8Thw2Y69g8GDB/9E7LCCX4PfW014PUyf + Pn2F8ev8UqGvr+W8ZmASk0RjUcp2QdXq1WW7wBl8pWzn5eWlS0gGu/FsxfWIHVZwfoAtvd77MH5XGECX + Qst5zcAkJolmElKtXinbvXz58ifScw8+Z/Hfvn2rS8KgwMSdMWOGLrHDimXLlunmB/g+evyXhwF0WbSc + 1wxMYpJoIESQcJftFNKz6x+YdGEFZ/hHjhz5E6nDCs4PbNmy5afXX7FixXbjV/5lQpdIy3nNwCQm+U1C + MX264EivLtvpZfBZGQTVgx9RMHmZxHrkDgtYmajLhvyd6P4kxkvwS4QulZbzmoFJTPILheZciGU7Xl9/ + 7949XdK/evVKU7Zjtz24uDsiYJed3Xk1ocML5XMaw4C2xsvxS4Qum5bzmoFJTBLFQvPMlmL2ZkGRnhFc + 2Y5Jv3HjRgwdOvQnYikIKu6ODHCSkRN8eu8bVnDCce7cub80DKBLqOW8ZmASk0SB0NwKVdmOvAG8efNG + twefHw+O9IERlrp8eMCfJ6JlQ/6MDONl+iVCl1PLec3AJCaJROEMvkJ6jt8Dk55jfM7g65XtOJnH8fL4 + 8eN1yRNahLYuH16wkglrfoA/05AhQ54T+tL4l+4SRJdWy3nNwCQmiaCEpWwXUgaf42Rusw1MoPAgvH37 + oUFoPicridGjR/sOHDhwJo1Ni4FMEnuESJCdYvrxTHrO4OuRnu/nDL6/vz9NNa2wIgiubBeZcTcTNaoS + haxg1J+TLT1jypQp22n8W1p/Awtdbi3nNQOTmCSUQhM+2Fp9SGU7Jn1Yy3ZMsIjG3QrYdY+qRCErGQpd + rhtd/F9a5gtJ6NJrOa8ZmMQkwQjNkeQXLlzoRiDOn5ISXWDSK2W7oBbehGbrrJAQWXV5fg3+zHrvEVaw + V7F169bnvOMPvfZv3fYrOKGfQct5zcAkJgkkNC9sg6vVM9jl5wy+HunZtWcFwRn8yCzP8etEVt8+exXh + yQ/wZ+DrsGjRohX0OtHCxQ9J6CfRcl4zMIlJSGgu2JJ73+Ds2bMbmfRctguK9MGV7fQy+Gx1I7M8F9mJ + Qs436L2PGvzdVq5ceZ3+py0hWrn4IQn9PFrOawYm+aMlpFq9UrbTW3ijbJ01ffp0XXIFBltdJpIewcKD + wAm4iIAVSmBPhRUDKS7Fxf/tB3yEV+in0nJeMzDJHydctiPiupK1f6NXq+cMPhNbr2zHEni/vLAitFY3 + tGAvJTIShYqnwst2ee0+3RcjXPyQhH4yLec1A5P8EULufd6QavVK2S64DP7du3ej1OpGBEzeCCYKnxPY + 2scoFz8koZ9Py3nNwCSxVogUUqsnS/+QyR2Y9Gw5OYP/6NEjIXdg4Qx+UGW7yCrPKVY3MhOFYVzA40tg + a1/eeNlindBPqeW8ZmCSWCW8xJbLdsHV6iOzbBdZ5TlWJvzZ9N4jPOBEYQieCjfq/NJVeb9L6GfVcl4z + MEmMF/odg63VM9j6cwb/3bt3PyXzQrN1VnAIh9UNEkza8JTnggK/lmqDD87iR7tGnagW+om1nNcMTBIj + hX47WWKrlO2CqtWTJwAPDw/dDD4/Th6DLnHCA7a6kbWtVmS07zL5ly5d+lsW4EQnoZ9by3nNwCQxRuj3 + CrFWry7bBc7gK2W7wBn8yIzBGYGsboQQ1s/GSmPjxo2+o0eP5rg+2nbn/Uqhn17Lec3AJNFeaFJXUsp2 + erV6pWz37Nkz3YU3yuEXgcmlBsfxenvYRQSsmCIjP8CvEVx+gBUEPx6dFuBEJ6EpoOW8ZmCSaCnkmhdR + SB9UrZ6VQVBlO3btw3PiTXhbZIMCkzMSynOCwPvrcQhj7M774+L6sAhNBy3nNQOTRBvhWr1SttOr1bOV + U5ft9DL4Dx48CNMuOkEhspt12DWPzPZdk4sfeqGpoeW8ZmCS3ypctjt//vxQJn1wtXpSDrqk5zF7AOqy + XWSvpY/s/EAEPhvX7KP1yrvoKDRNtJzXDEzyy0Wp1Stlu8C1egYrgoiW7fg1IrNZR+89wgtWbGH4bLGm + Lfd3CE0ZLec1A5P8EqFrbUtkb0uW/mBwtXou2zFBAmfwI3L4RWTF4JHdrBNCfuA4IcatvIuOQtNHy3nN + wCRRJnR9Q6zVsxJQMvh6C2/CS/rAYLJF12YdDlmMSoB78f/omn1UCE0jLec1A5NEuly6dKkaWfkVBF+9 + Wr26bKeXwVefWR/Z+91zMi4y8wPhbdbh78TXZNasWSZLH8VCU0rLec3AJJEioanV8/1BLbxRDr/QK9tF + RQzOFjwy8wOhVVL8vtydR+89hv7fZOl/gdD00nJeMzBJuIXLdmTlZxKe69Xq2cJxrH///n3dDH5oTrxR + gwnLeQI9YoUX/BkjIz/Ar8Gvpfce7CWsXLlS6c6LtavuoqvQVNNyXjMwSZiEyJ4lNLV6LtvpZfCD2zor + tGAXPjJr9EoyTu+9wgqlWUdx8emzmlz83yw07bSc1wxMEqJw2Y6I35dwnfAT6RlKBp9Lc4FJr2Tw+bHI + rtGHNwbXA79WZDXrELgt1+TiRwOhKajlvGZgEl0hoichtA2pVh/est3visFDA/5s4VRSpix+NBSajlrO + awYmCRC6HlKrJ2xn0uvV6tVlu8g4/CK6bqjB4NcLhZJSdtQxdedFU6FpqeW8ZmAStvZ1CSvI8unW6jmD + f/r06SBJ/+3btzCRPjAiMwZny80WXO99wgPls+koKdPKuxgiNEW1nNcM/lAJTa1eXbbTW3gTGSfeqMEx + eGRtqMGvE1n5Ac5bzJo1iy29bKNFMCX0YpDQdNVyXjP4g4TIbkeYGVStnhUAu/137tyRDH5g0isZ/PPn + z+sSJbLAFvx3baihgJUHhyf0OUyWPoYLTV0t5zWDWC5cq6eY/W8ivtTqmcB6pL969WqYynaRaWGDQihj + 8BDB7ntoNvtQSnfTp083rbGPRULTWMt5zSAWCpE9C0HKdnq1eoaSwee4PbRbZ+khsjPwgRFMDB5msDLR + yw/wfdyd97vPsTdJ1AhNaS3nNYNYIkT2JLzElklPkLKdHunpOXjx4oXuwhvuwQ/PiTdRkYEPjMis0SuJ + Ql5nYOzOM7n4sVhoams5rxnEYGHSEwLKdnq1+pDKduqFN4GJElZEdgZeD/z6kdBIFCMPuYxJQtfWjlCe + wGse2LPijkjuk1B+A06q8n38GIdb/Nwo+T1omms5rxnEQCGyc9lOSM9lu8Ck5ww+P8b75QXXgx8ZpNdD + ZHfo6YG9mTDmB5Rjr0xNOpEkdC2DJHm7du3QsmVLNGrUCA0aNEC1atVQpUoVODk5CZydneU+fqxJkyby + XFbsCxcu9D179uxxT0/P7fQ7R8pvRVNey3nNIIaIkfRStguqVs+Z/aAW3nAyLywLbyKKqOjQ00MI+YFY + f+xVVAtduyx8/QhhJrkeunbtKnNw8eLFMn+5xMrzlTtH1cLzl37fSPnd6OW0nNcMorn06dNnBZHb9+bN + m5KpZ8uukJ4vIGfwb926FWULbyKKX5EfYCUTKD9gWoATBqHrpJCcXXEmOl8/DpPQsWNHITlbaSZ5jRo1 + hOh65FYQWpLrCc9ZbizjLd/ot+1r/IgREnpZLec1g2gu9CNs5y2uQytKBj+0Z9b/KkRlfoAn2dy5c9kq + mdbYByF8XQjRhuQ8p9k4cejKc1UxUjxPVL/tGOPHj5DQW2o5rxlEc6GL0vbQoUOSrGNw511gCW3Zjh/n + C87gv6MqBxAcIis/wBNu0aJFvgMGDDD14RuFrkO0ITm78Iolv3TpkobkwYHfQ/U7Hzd+tQgJfRwt5zWD + aC50UfhHRYUKFX76gUaNGiUXtn///roXUwFfeNa6rDwmT54sPz7/P78m/80TQ+//ogrhzQ+w4uD/M3bn + /REn2wYW+t5JCExyDnGY5HwthOQM/i2bN2/+y0nOFaa3b9/+tFMz/8ah7eFg46D+X8J149eOkNBH1XJe + M4gBQhfneu3atX/68TgJwwqAFUHgi6mArTx7CPxDKMTXAz/GVkLvNaIKockP8Ofm50ydOpVdfLZssd7F + p++oR3K25nLd1CTnecEk1zMQCiJCcq4YsbvOXiOv/dAjeXAIy0asep6h8ZJESOhraDmvGcQAoYvTl123 + wD8s//CsAIgcuheUwZl/lj59+mj+t3DhwoISJUoE3McZ3DZt2ui+TlSC475Arp/Eh7HZxafvFC1JzvOF + 5xS/lvJZGOx5qX+f0IAJrX6N4KBj/RVEWOHTV9RyXjOIAUIXKAtbZ70fPqQwgPMG7KLxc8uWLYtixYoh + Xbp06NGjB2bOnIm//voLDg4OKFeunDyHJxlPPL3XimqwtWDElgU49B2iDcl59Sa76+yqK5Z89uzZP/0G + emAXPqzhGiNQZSZYBJMXinApkL6+lvOaQQwRukjX9Vz4kMIA1uysBBwdHWFnZ4c0adII6XkC8f/xqruc + OXMie/bsohxYSfDrcm1X7/WiEBzHsosf40p39JmZ5HUJTHL2WJjk3IMgHhUTnUlet27dEEnevXt3IfnS + pUvlN+LSb0RIHtRyba7I8OcLDX6j9WdEuBRIl0bLec0ghghdqJl6YUCtWrWCDQMUBWBvby8uf4IECaR7 + cN68eeJ6M9i7SJYsmTzOSqJ06dLy2myVojgvwCTh5pJo7+LTZwwTybnTLfBvpSAokodGgnLXA5XPQgQ/ + nz97SOA8zW+0/owIlwLpsmk5rxnEEKELZRdUGDBu3LggwwCeKDxplJhfUQAK+RXw/cpzGEpugPMC7GUE + ft0IggkU7Vx8+kzRguSKJefyWVAxeWCEpcciLNafP7veawSHSLT+jAiXAumSajmvGcQgoQv2XK/Vkicb + TxK9MIAX+jx//jyA2IkTJ8aSJUvw999/B5B/4MCBcr9aATCKFi0quQF2WSMhOcgu/m/vzqP3V/eva0iu + tLaGhuT8WGSQPCh3PSzlM/4NVYQJEaFdQ8HP0/v/kBCJ1p9hUgCK0AWbybF54MkYXBjA97MC4EnNpOZY + n9381atXBygAdvkzZsz4kwJgcIJQyQtwCBL49UPAb1mAQ+8X7kUqaigknzBhgpBc2TiFiRsaUbvrvAw7 + uJg8MDju5s8bGgSuoAQHVlR6r6GHqLb+nPDVe43AMP6s4Rb6KbSc1wxikNBFs+MJrDdZgwoDuA+AFQBP + eoXUTHZOBlaqVAn58uULiP+DAiuMMmXKyPtwXkD9+kEgyl18ev1oR/Lg3PWwuOhhsf6hcKE1CK31D6tX + oSC01j+MlYUIeY30M2k5rxnEMKGL5xvWMICtDmf+1aTOmzeveAO5cuXS3B8cSpYsGUAaneQgEzBSXXx6 + rWhBcj13nZVqVLnokexCB4C3RdN7DT2EZ90GeyJ6r6WHMFYWIlQKpJ9Qy3nNIIYJXbwVYQ0DLl68iDlz + 5uiSOqzgUiG/H8fGrVu3ZjIyOcPt4vP/Epjk6v51ITkrGSa50r8elSTn7jbeJYlJznE8kzy4bc6jykWP + 5ARaAKIyp6CA/0/v9QIjjNafEaG2b/p5tZzXDGKY0AWsywk5PRIEFQbwEmJO/OkROjxQNQ75EkJ09ekz + RMoilYiSXCmJsrvOyVG+VsqCqLBY0qh00cPiQoflM0eVwlIQxX0FESoF0k+v5bxmEAOFLqKvXnY6qDCA + Jzwf7KFH5vCC8wLcXGR8b+nRJ/x2kvPz2JK/fPnyJ5IHhbCSNKL97UEhLNY/LCSKSoWlILKt/9a9R7B4 + /Q78s2IznFv0WmGc+uESmhZazmsGMVDoQq7gMlVg8gQVBvDSX7Z8XM7TI3N4wUqgVKlS8t6cHAwLyXv2 + 7CkkZzIxyfnzcawdGlFIHpy7HlpLyogqkoaVTFHlQkfVtVAQXut/78FDIfrEucvx15R5qNC8F3JVaob4 + BSoLUpesh0odRyJO1tIRKgXSlNFyXjOIgUIXsm1YwgBeDsxbhTEx9YgcUagXFCmIKMnZXefkZWhjcjXC + QtLQlqIUhJZMYXXRo8qFjkqFpSC0iqtt+45oP3CcED1tiToBRFcjVYm6SGJfPWBcs9ckVgDPjVM/XELT + Sct5zSAGCl1MXmSi26QSVBigZK31CBwZUJqG+DPcu3ePLm3IElxMHlYrp0ZYSBqW9wgLmcIa5/5u6x/e + 662nuJjodZq2hnPd5ihVrTGylamFDCVq/ET0rBVboETTfqjQYbgQvf34pQK+X3meS7dxsM3vHCGi0lTT + cl4ziKFCF3o7u92BFUBQYQDvGzhmzBhd8kYW1E1DfCYBS3AkDw7hSBQJojIZFVUkDctnDs0JRwqiqizH + bvuc5RvEbW/RtZ+QvGDFekL0AJLn1yF6eyPRJywjGMgecKtCrqptA17HsdVgJC9ai72AcFeaFK4r0A5i + qNCP1paXkgZWAAy9MICTgJFZCQgK6qYhzlMo7x8WRMT6RweSRpViCWtrbkSuhTo+7z5i6k/x+Q84y60u + 0YXQy9CBEJjkwYFfQ3ntks36I2O5JqwAwt0LoOa7cF4ziKFCPxxn3HV/ULawHAKoO9K2bdsmW4frkTYq + oCQHOReg0zQULH6F9Q+LJWVElWKJqtbcsFyLCVNnijVv2W9MsPE5IyU9pmvRhbx0O/FnQocJ5BGw1Vfe + r2CtzuIRkAIIdy+Amu/Cec0gBgv/eGrLHxjcMMSZeX4eu998FiB38+kRNiqgNA1x805oFxOFd/kpI6os + aVjIFNb++dC25kaG9W/Rpr3E5uVqNQ2IzVMVqRbgriuwJSS2ry5Et6/fQwjJRG81aqGKrGzZVcSNRPB7 + KZ8lt0s72NXrzgog3L0Aar4L5zWDGCz8owa3uYR68Q6HBJzEiqpKQFBQmob4c4Zmp6HwLEBh8BZieq+n + h7C+R2iPKg8rScNi/fn76b3G69dumvE2ctv/nrMY1Ru2FJLnLltHG5sTmOCK684Z9ywVtERvrSa6YtEl + Vg+bKx8u0Ps0GTKblJLh86V3bIRSzQewAthunPZhFjXfhfOaQQwWmhjHg6q1M5js6knElYBOnTrpEjUq + wZuRKE1DgT+TGmElkBpRZUnDQtKosv5szdX/91N83ozi84o68bli2emWif7Dov+Fmr3Joo9eZCQdE/sX + kDuU6ECfJ37+SvLZpRegU8R6AdR8F85rBjFYaHIc19smTEHgJNydO3d+WhQU1eBFR7zgKHDTkPpzKQiv + 9Y8cS6qP0JKUvQS9/w8KnOfQex0NuhhuOw0aLfF5+eY9jfF5JdgKuQ1WMuBvuk1sXw1ZNRZ9ssF1Zwuu + ic+J8DoZ+OgAVgApixvzEPSdavWezArgg3Hah1nUfBfOawYxWGhyjGGLGpj4Ctg7UE8oXhT0KyoBCniT + kYYNG6Jt27YoXry4KAKlaUgdnjDCSiA1wmtJQ0JYFAvnCfReIzDcCI+f/Nya26hFW4nP2W0vUrmBuO2J + 7aoKsW2NRBeyGyGuuzpGJ4veevQP113icyJ4h2hK8uDQYcIKCkuaiWLj716t+zgkKuwSbrKq+S6c1wxi + sNDEGaO3MlABJ9/Uk4yt39atW3XJmiVLFtktOCzLg4MD7zfAHYhMooULFwrix4+PAgUKSNMQ70Wg/myh + JVBghMqSGhGW9+BEpCiWTvqvFQB6fOKEnxULE90AN7i5ucvf7LbPXb4BbfuOFKJnDWiQ0RLc8LfhviRk + 0TlGtwts0ccvN5CFrbqShY+BZNdDx4krkL9WJ+O1cEbZ1n8pvQCFjVM/TKLmu3BeM4jBQhOwPGf59civ + QD1ZecOK8+fPa4jKhEyZMqWEBso24VmzZtU8JzzIlCmT7D3IyUe2vAz2VljJ8OOcHGxlrFCE1TIrYJIG + tqRBIWzv4SaKpVNI5Dfi7NkzRHJOxrnj3sOHkohT4nMnis/TFK8N23zsojMMsa3BsrP7biC6ZN1Vrnut + XpPQhi16AKmVGD36xOpRhY4Tl0uZka8Ng5OAnL8gBeBknPphEjXfhfOaQQwWmnzlg1oToEBdg2cyclde + 9erVA4iqttTKPoHsrvNmIcpzwgO7wnbYuXN3APkZvDZAvfcgeygcHjCB9IkYPKLS+vcMSbFIfN4FrTp0 + Rcv+hvg8fl6asPmI4EzqvEx0A7mZ6DZCfmdy611oMjfXEF1c94lGYo9binYKGejvJTtOYtXeM9h89CLa + 0FhNlNiKDnQtKnQYIUqTFUDBWl2Ry0V6AcK1Rbia78J5zSCGC09GPeIrUPoAGNwgxJOb71NIqOwSHGCp + J01Er0BEDQ9SkFdx8MDBnxSAevuxypUrowMpKN79Vo+IweEJfY9evXv9IGQw4H54Nzf91wmA8jjdrhPF + 0gld5P+7oCvdqmvoHKNnLV0LKR2qGS07WXSy7GLNCbb5KxLRA7vuXEdfLAkucd8nLKe/+ZYmPaHd+CXY + eeo6Tl9/gD0nr6Ht2CVoPWYx3Lx88NLzHS7fe442Yxf/RJbYCFYAnPizYWVKSjS7cysUa9ybFUC4egHU + fBfOawYxXHiCB9cLELj2zpNcXQn4sU34BA1ZE8TXbhMeFtgRUpNn0aNnD8yX8wcmYfKkSXCwt0fGDIbN + RwsRXKpWwfJVy7Fp0yacPnVaS8ggQTE13fIqvk6q7xUUOnbqhDuyKo9ddAIR3M3d+DoSmxvi8z0Hj8N1 + 9Sb8NXU+ajZth1Iuhhp6+hJEciE4W3NnseTxyLrbEOHjERIXckGW8kaL3tJI9DHG8hqBrXn/f9Zh/LId + aDtmCeZsPIRjl++gL92nnvStRy+G59sPeOnlDbe3Pug8eQU6TVgBtzc+eOHxjh57j5b0HPX/xFZw4rLt + +MWwyVtRPCjuBSjdYiArgHCVAtV8F85rBjFcaJKHqReAKwHs6itkZYu8fv167Tbhg5Rtwu0CnhceJE2c + DDVr1qQwpBPsHeyRSOVVFCtWXM4r3LRpsyiATRs34u79e0aSBwMi7527d+Q11d9LH52wUKy/Ozzc3fHs + 6TOcolBgwfK1GDTuH1Rv0wd5yzeETZ6KsCWwxTG4nTQm0jPZbWkS2uatgJTFa6Jss95w6TQMZVoOQs0+ + k8kiL0GnycvRiWLWdhSbj1u6G5NX7cHqvWdx5OItnL31CIPmbMDZGw/h6e2LliMXYc+pa/Dw/oDRi7ei + PSkEZdK3IO/g7nM3vCBr7/7GGwu3HMXI+VvkufdeeMDL+yN6/r0K7cb8TJjYiM5TVpGirUAKoBKSF6kF + l+7jTApAT2iih6kXgNuB1aVAZZvwdevWifs/icAJuqC2CQ817Ay3mTNnRurUaZCJbpX7OD9QpWplrFix + Cpu2GhUA4ciRQz9c8SDg5u4hpxp17Kgmemdx17t06SJ/d2W3nWL0rl07o0O/YWjaZRAyF6+BxFw/z8Vk + JwvOpKeY3YaJzqQn8tvkq4iEhaoic3l23buT6/4XaveegnZE9AkrdhMJP+DinWdoO46Iq2TeCe0oNl+7 + /5yQ9M37D3hDz2O8JYxauBVnyK1/6+OHoUTo5btO0d+f4Lr1GNqMcQ14jRYjF+AcKYzX5AE8IMJfufsc + g2atxzvfDzhEyoT/f4TrVrQd/UNpxGZ0Ig8obemGAYnSWvQ7kAIIF2HVfBfOawYxXGjCh6kXgCsBgRcF + MdnTp0+PUqVLI2vWLEgawjbh4UWhQoVQhJQLJ//Y+m/evCWA/IwNGzfA3c1DiP5KIb2bweV3d3cjeODh + g/vo2KGjxOXdujHJu6J9+06oZ4zPS1drjCwUn6cvVp0mDhE+D5GcrThZ9XhEeHHfaZxAXPdmsK/XHWW5 + M64PEX3cYpp4/6LL5JXoMGm5lKM6GMtt7Yn0b5jghOYjFmgmaxuyyiMWbIGXDymI20+I6JvRddJqNCNS + Nxo2Hyv3nIL3B3+MXLINU1YfgLevP913mqz+Qinjcc2+xYhF2HTkgiiNa49e4h0pifUHLpACoNt95+Dz + 0R8LNx9H61ELYmRtP6zoOGkFMldoGqAAKnceE+5eADXfhfOaQQwXVgBh6QXgRODZs2d/WhPA5UD2Brhz + j2N49WOhAcf0BQrR3wUI+QujIJG9OLn5vPiI1wJUrFCBlJGLhAS1atfG+g3rsZlIv1FRAKQMNq7fiCeP + n8DL0wvvvN4Q2d7g9ctXuHjhAg4e2E/P34DWHXrAuW5TODg3QGYieqKCVWCTm8hN1ttGLDvF5rnKE8nL + w5puExR0RmanpmLRy7YejHp9/5a4vAu5mJ2nrJRYu+OkZcZ6+s8TkcEEbTJsHt77+hF5P1K8vsTgBRgf + bzd2MUYs3EYk/YSTV++jet/pqDNoJsYu3YZGQ+Zh4daj8Pn0GUvJ+g+ctRa+n/xx/OodNBlKisSYBGwx + ciFW7TsLH7/PGL9kF7zJ4nM4wK85dO4mfPT/ghV7zqDJ8Pn0ef6EUuAKUs49JO/CSVbHVkOUXoAwLwtW + 8104rxnEcCFS1w1LLwBj7NixYe4IZILzbcGCxjHdstIobG+PYkWLBvT6c2bfpUZ11KpTGzVr1abbOkR6 + uiXiM/ldqlXHyFEjsWPHLmzbvg07d2zHrp07sXbdv1hE8fqmdeuxevVKDBsxGrUatUbh8jWQoZgLEhPB + rXOUh1VOInueCkRyAhM/jxP97STWPlM5IjpNGm4cqdN3mrS+dp+2Bl3+Xk2WfSU6Etk7ULwenlVsDYnI + Nx6+JkJ+wfB5W9BW5b63JdTuPxsf/Pzx1M0LT8iL8fv8BX7+XzGSFMPgORvxgQi89/Q1VCVXlu+/cPsx + KYk56ESfsROFE81HLsLoRTvg//krZm48iEevPSUB+NH/M5x7TYf/l284ff0+Ggyei45/gAfQgZSy9AIY + S6lFG/cJdy+Amu/Cec0ghgsROsRmoMDr8Zs1a0buczcMHDDAuDy4UADRf4DvKyiWnMlftHhxOUKMrbmz + cyVUJWtep3YdIjaBiF67di3UZutei4heq5aQ3YAaqr8J1athiasrxo0ZRe/fB23atUGxUmWR27400uYu + irRFKsM6WxlYZXMiwhNyGiy5Va5ysMrhCOvsjsjg1AT5a3SUCVKn/3S0Gr0YPWasQQ8ietcp/0r82HEy + Z5Mjz1LWHzwH1yj+ZyKPWbwdLcliBzxOhKw1YBbe+fmJC+/h5YurD54S4a/S51mOrpNXwf/rd1y79xwl + 2o3HF/rb//M3OHWagFoD55DH8A9q9ZuBntNW4/PXb1i28yQmLN1NCuUrPn/5DvtWI/Dl23949NwTDelz + ROb3iq7gEmm1buPEA2AlUID3BTD0AoS5FKjmu3BeM4jhQoSW/QH1iK9A3QvAaN26dQAhXVxc5DmsCLgB + SHHZK1SoiCqVq6BmjRqozZac3PbaROxaNZncdMtEVxNbBX6sDimEuvQ/9UhJ1K9bB43r1UHlqtVRpExF + 5CjqiMQ57GGTqTAs0trBIoM9zNMXgmV6O1jmIKKzAshaAhnKNEE+InpxInr9AdPQhmL0Xv+sR+/pa9F1 + 2r9ELCL7FCK7WEQixViliSaSE2X0+o2GzMfyvaeIkN/EFW9MrrjyeEey4kzgG/eeENG/omb/WahGYUDD + ofMpzndFxe6TifTf4EnKoXCzUbj+4AU+Uhiw/tBZ3H70gpTKZyF4uS6T8fXbd9x/4Y4GA+fS3//h9mN3 + VOw6CRsPXcGYJTvQmD5HhDfdiAFgL41LqooHkMO5FYo2Cl8vgJrvwnnNIBZISAogcC8AH6v1g7BMauPf + RFzeU1DGwRCcUcN4W6d2TdStQ2QnkjesVxuN69clpVETFSpVQ54S5ZHFviwS5yoOizR2MEtHSFMQFqkY + +WCeMj/MU+VBsnzlkMm+Eoo26IUGg/5Bq3GuRPTNhLXoPmMtuk2leJ2sKJfbNOT+RZ1xPBmbjliABZuP + EZH/w95zN1Fn4MyAWJwbV+rS+PTNR/j6/TsGzFondX1Ds88yVO45He/e++LLf/+hUMvReO72Roj+hfCN + 7vP+8AkvPd5K0nDjkYvoO3MtavSdgboD5tD7zEGTofMoRHCV5COHG4E/X2xF6zGLDIlcYy+AcV+AMJcC + 1XwXzmsGsUCI1NfD0gvACEzoAKiJz38TqlZ1oVuy/OIN1CCi10Gj+nXQpFE9VKhSDcWdqiBnUSekyFsS + FhntDSRPXRBmqfPBLGVemKUiJM+NpPmckKlENeSu2AhOzXuiavvBqNN9KMq36IfaA6aj/vBFNNkXYuj8 + jRg8eyOaDpsnE4G75LjUFniC/DpwjL4AvYmYn4m018hqV+szHZ0mGSsEhPp/zZb6/9fv/8PkFfvEQzAo + CFIO5LZzPO/x9r2swR+/dDvGLt0hCq1ct8lw7v43hRAz0eivuWhJk77FSFIe5M1Itp+UiyHrH/vd/sDg + 723LnZakADgByAuhSAFcN077UIua78J5zSAWCBH6uN4OwQr0NufkZboa4hOqVq1KIUFVSeRVo9CgVs3q + qOFSDQ3IslenWL50xSrIV6IC0hRwRLzMRYngRHK24inzEMEZuWGePAeS0eOZSlZD/kpE9Ga9Ub3tQNTt + ORp1u41EjU5DUaZxDzToMgyODbuhzeDJOHb+Gm49doO//1dxhb98/w8eHt5oOGyuWFG9yfGr0XqsK7pN + WSaWm5N4lXpOpdDD+NloorYg6+y65QTef/yERVuPoxUpM0OsvkxKfPUHzUJtsuYNhs5Fs1ELydovRNtR + 3E9g8CA4ESglQR4L4U1gcOKPFQDnAmoZFECYSavmu3BeM4gF0qxVuzEdO3eVZB+7+0x4Lv8pCiBwLwDn + BFgBVHauLGQXVKkssXv16jXhSEQvVKoichmtumW6wjBPV4isegEiucGqmyfNiWT5yyFDcRfkLN8IZZt0 + R7lWfVC13SA4Nu+LUo27o1TDrijRqAcGjJmBHiP/QfnWQ1Cj+xhsOHBWYunhFNMOmrdZ3OZPn7/hlZcP + 7j56hVX7z2PRlmNElgXRJ94lD6Ril0minL6RlXfqNFHjjrcduxiNh85BPbL2DYfPQytSGOr/5zwFE7sj + K4U/IIkXGeDQ64cCqIwK7YYppcAwnUCt5rtwXjOIDZK1dHnOiNfqPhqlarWSAxl48YpCdu4TYPAmHKwg + OAfAj1Wv2xAlnCqTVS+P1AVKIUnOYrDO7ACrjA6wzGBHKATLtAWRrGAFZCxeDTmc6qNE/c4o26wXqnUc + ilodh6Fa20Go2WEgGncbitFzFmP5+l04cPw8fH18sXH/aQx13UmEoViXSDN04TbUHDgb09YepPF/mL3h + MFoMXyBW9ejF28jbYAhKtB9LGIcqvacToeYRYVboTo5fDU70Ve01Q1pzP3+lOH/OBrQhN115nCeruPxs + vcWCRw/PJaaD57WiAHhRVXh6AdR8F85rBrFBspa24wtVrft4ZKvUMuCC8Y6vdTsNwtCJM9Gx1wBUqNda + DnCQTSh4gQs9xzZPecTLVhzWWYogdeGK5LpXR+7yDVGyfidUbNkHtToPI7f9Lzi37geXVn0xftYSrNu2 + G0uI6E0HzYBLnynYfuy6EPobue9fv/1P/n7zzg97ztxCxe5TxMK7UfzLJbTqvaah6+SVkuFetucUCjcd + Qf/3HQ9eemDe5iPYeuIS7jxxh/cHP9TtN8voRutPjl8KcvdrD/wHN+6/xKcvXzBg1npx+3Wfa0KkQa0A + eHdg4xbhIZ5IrRY134XzmkEskZxV2ogC4LKZcsEYhep0xaKDt6TvPHN5w8aRqUrUkboqX1wutTQZMgdt + xyxCm+GzMHDyAkxesApjZi1Hw74TUL/PZDQaPBMTlm+TZpTPX/6TmjZnsP1ozNnx2RuPSL16zcEzaEoW + vXS7sShHLnKN/v/AsdN4UgD/4bmXL7z9/HD9/nNU6jpF/v/czUco1mq0dLn5Uuzs/4VzAMbXpvtq0/vK + klmdifE70HDIbGnX9fP/Jmv0+bv/CSW53wmen8pcll4AgwIIUylQzXfhvGYQSyS3SztfVgAODXoGXDCG + ogD6z90iF5DvY+IHvtDdpqwiy/uaLLWvrFzzev8Rbu98pHOuIbni3JbKXWnT1xxA3xnrcP3uc4njV+48 + i97/rMGXr1+xfv9ZtBizBP1nr8eGQxexeNtJlOs2BQ9feOCdjx9OXX8gJJ+8ejd8/b/i6v1nKN1+vCgF + boGdtHwPBs3eCJeeU6XjrcXI+UZ3Onqg6YhFWLuPwhs/f2w6egHNSAH8CU05vxNqBcAGzFgKnGmc9qES + Nd+F85pBLJE0peofZwXA66aVC6ZAUQDsQvGYFUHgC71q3xm88nyPg+dvYeTCLbhy7xne+fph6c6T6PfP + Ovh8/IybD16RGzwLzUfNR6uxi9Ft0ko0GjoHLUe6klv8VerZbB3570+kHJ65eaEyxc03Hr2k+z/Lghov + n4+kXHwlJPhESqA8hQgHzt0kb+Izek1dizr9Z6HuXzPpfWaiLcXYzUdok2m/E63pOw+fv0Wuy8Vbj4yL + gkwKIKqhzOPw9gKo+S6c1wxiiSgKgPvglQumgBXAxHXHJYnCY86sqiduOyLmzlPX8NLTGyt2n5ZkFnfU + jVy4lazeQgwjheBNk3736WtoMsxQ3+asd7vxi+WW22A/fvosS2C3Hb+C1eQej1m6A3/N3YS6g+eJu/zR + 7yv6z1yDKav34R0pilce78XqV+0zDSv3nBHlwQ02xy7dxe0nr/Dh0xdJuDUfPk8SbOoJ8bvAC4BGLdom + KwLvPfcgD0DVDmxClEGZx7zLEnsEpADCdFy4mu/Cec0gtgjFRawAGMoFUzBowXZRAOXbDZMxH+SovsBM + 9tkbDpEH4I1XXt6yJt2dLPShi7cxaO4Gsnqb8ZZCggs3HqHpMIPV4+2thizYgKYUHtQePAePydq//eiH + 6n1mkFcwT8AxcqPh87Fw0xH4EMGnrdkvq+P2nr0OdwozeIns0HmbMHPtIamf8xJYvo+VwY2Hz3D2+kND + oi0audm8hNfj3Qd4vfOVFXzcsKP3PBMiD+pSoFEBhIm4ar4L5zWD2CIqBcCaUrlgDFYA7AWo4ym9C+26 + 7Tgu3n2C12+84eb1nuCNZ+5vJWvvRYR94f5OvAUmf9MR8/HU7Q1Zc3/Up3j9wu0neEvu/ZTVe/HP2oNY + SVb/wq0n+HffWVIUm+l5fvj3wFkJFzqOW4ZbT17iCSmNIaRguLd/2fYTZF23oMfUVWhGsX/zUYvQcrQr + 2nA9PbrkAehz8D59T16/kc6+wfM2kAL4Mzbo+J1QHxfORsxYCgz1ceFqvgvnNYPYIsZeAFYAHCspF4xR + f8D0AAWgKAc+fy3whea96/r9s1Zc3T4z/iVSPyVl4IMRizbj0IVb8Hjrg50nr0pb7vzNRymW98GDl+7i + FfCutZ5kFT0IXu/JQvr4wpNuL95+JstheZ38uMU76LXpvYwbXjJ4nzxeT99eQgp6LKDlN3rG1rw70Olr + DyRfMnbJdrrvz9in73dCXQrkMJbCXVYAoe4FUPNdOK8ZxBZRKYBMTk0DLhhDUQBcClSUAysD9UXmEIBz + AKdocrMC6Dplpexu89rLB6Ndt+MvctXZ4vOGlR7vyDugWyb8ZLL4rYjIXAo8SyHCKornuRV2tOs29J6x + ht6TiE0k511zhOiq94yJ4O6/naeu4jVdK/aYDKsPTYhKKLkrhqoXINTHhav5LpzXDGKRhKUXgC+q+iJ3 + /3uVlOt4C2rllnMCl+48E7efrX5f8g64Dn762n3sOn0VYxdvMyYDDY/zTq5s0Tl7L5Ze9fqxBnQtOKn5 + 0uudKDvd55gQqWg7aj4cG3dH28GTpIKVv2YnVgCh7gVQ8104rxnEIlEUABNeTwGE1AswjGJ1LgMy+W88 + ekXu/nV0I09AeZytHe9Xz2RnV5iJr/7/PwL03f9etVeUI4c1us8xIdzgOcjeKCtZvr68QerT1164dveR + QFUKXGGc9iGKmu/Cec0gFklYegHYjdL7AX7AlNzSAyvBcUt3yF79nPg0XafwgT1Ovo4cRnFeia8lX9Og + sGzzXgyd5orcVdugXJshrABC3Qug5rtwXjOIRRL2XgD9H8eE4MGTV5mYeo+boEX/mevw9+q9YtXZw+TG + MDW51eDH2PLzc/l/2CPg1+DTkJW5bCwF+hqnfYii5rtwXjOITRKGXgC+oIF/KBNCD2XC8uTWe/xPheLC + bzx8IcCFVxNcDbb6bP2Z7OwNsGLVe01G4F4Ay1xOoSavmu/Cec0gNkkk9AKYEDrw5OZJzBNX7/HYjrC6 + 8Hy9WCmwcgjPNVNyVwz2Yo29AHbGmR+sqPkunNcMYpOEsRcgcCnQhNCDXVme2Dyh9R6PTYiICx9ZHlJE + egHUfBfOawaxSSLYC2BC6METnCc83+o9HlPB1lntwgcmuBphceEjigrthwfMZfYGjL0AoTouXM134bxm + EMskLL0AeqVAE0IHJgmTgC2i3uPRHYoLz+QNyYXnOD6iLnxEoQ5dw9oLoOa7cF4ziGUS0V4AE0IHJgGT + g4mh93h0gtqF588bkgvPSo2fG5kufETBrevKXFb1Amw3TvtgRc134bxmEMskLL0AplJg+MHEUEij9/jv + QnhceE7kRbULHxlQ5jErgEodR7ICCFUvgJrvwnnNIJZJSL0AY1YdCugF4Aupd6FNCB0UIuk9FtVQu/Bs + scPiwiu19ZgGXsauzGUOCUgBhKoXQM134bxmENskDL0ADL0LbULooJAuqmNiJqzahQ+uth5dXfjIgLoX + wKXbODk23DjrgxU134XzmkFskxB6AebuuapJqLQaZdrVJrxQXGwmmt7j4QErE3bJQ+PC8+NqF17v9WIT + gugFCLEUqOa7cF4ziG1i6gX4ZWAry0TkW73Hg0N4XHh+bkx24SMKntfKXC7ZrD8ylmtiUgA/SSh6AXif + PUU5VO06VvdimxAy2PIyQdkK6z2uILwuPCuI2OTCRxQ8V5W5rOoFCLEUqOa7cF4ziIUSml4ARQGwstC7 + 2CaEDCYok5ZJrb5PaY81ufCRC3XomtulnVSzTApAR0LqBeAz9pV4im/1LrYJwYMts+IBsEVnyx2Y4ApM + LnzEoIRLS7cfw+yVm7HvxHn0m7Qg1FuEq/kunNcMYqGEphdAUQCmXoCQwYRl4obGhedYXu3CR/faenQE + Xze+fnwdAytWZWOQ2au3hboXQM134bxmEAslLL0AgbcI/9MRVhees/UmFz78UF/v4BKh/Bg/p+e4ObI9 + GM9dYy9AiCRW8104rxnEQrHJVynEXgBFATD0fpjYDnbhlcScnqVRQ+3C8/+YXPjwIaxk11Osur0AIRwX + rua7cF4ziI0Sxl4AvS3CYxMUF16prZtc+KhHaMnOijcosuvBvn6PgHkb2l4ANd+F85pBbJSspeuWaTlI + FEBwvQDKfbGlF0BJFoVm4jEUF56VQ2gmnwn6UCvYkMgeUeWq7gUo2qi3eAQ8340zX1fUfBfOawaxUcLY + C8CaVO9iR2eExYXnx9QuvKm2Hn4E9qb0rjcjMsiuh/D0Aqj5LpzXDGKjUEyUt3oHUQAxqxeAtxr/Mea/ + eevxYfOjZp85E4LH7ya7HtSea3bnVuIF0HwP9rhwNd+F85pBLJWw9AKEvEV4FIMPESF0Yxd+yY9NKi7e + fkoTzFs12bzx0vg335pc+MgDe0WhIXvghOjvULDKXGYDFppeADXfhfOaQSyVDGUbX2cFEF16AdSHiPDx + Wv1nrg1w4U9du4+bj1/ilScRm08oNpKeD9/g25smFz5SoQ6f+LoG5VEFJnt0ue7KPOYEIIcEpACuG6e9 + rqj5LpzXDGKppClVL9S9ALxFeGScwS/u+1i6HbvEeAjoYjlJiK3zrPWH5FixM9cf4bXneyH3qzfv6W8f + Ij2N+URiwsU7z7BbssLHMIa8gW5/rxSFwacRad4v8NgEXcR0sutBXQoMTS+Amu/Cec0g9okVIYt1Jrt1 + rAAYysVSMGrFgUjoBWCLbojZ+TDRNoQuU1Zi7NLtMon4AE0+XNSNSP7qjY+cMiyE9yK8fY9Hr71w5sZ9 + bCaXc+a6g3L4aOvRi9BGlAe99jjjacEmhBqhJTsjppBdD2oF4NxpFBIVdmElkMQw/X8WNd+F85pB7JGE + BD4zvYggVS5XRQGEphdASoET9I/klmQcWVw+3bcNEZMPBP1rwSY5GXjlnjNk1R/i9tNXcpLwK4IbEZyJ + 7+btA/d3PvSYGw5fuC0TbvLKveg99V+0HLUIrca4SjKSCd+WXtdk1UMPjr3Zs+Jrygm4kMiu5EpiQxMT + J62VeRuaXgA134XzmkHMFyZ+LoKB+AqSZRlQpsUAUQDaXgBnKQG6Hgq6F4BdbjnhlzFmKVn1bXDdelys + 9WmaTO5evmLVheRvmfA+8JRjwz/g6j1y4U9fw6JtxzHKdRs6TlyKliMWovVIIvtoVh6uJsseRgQme3Al + z9hGdj2oFYCqFyDI48LVfBfOawYxV5ITfia+giQZO5do3FsUgF4vgOvB26II0olycEaxxn0NWXijC3/k + wi1cuvNU3HUD0QlkzZns7kT05+5vcO7GI6yk586kyTZo9gY0Gb5AyN6SXHm27m1HU4hASkTvR2w/gW/J + 4wjC6/iToE6QmsgeMtSGKzS9AGq+C+c1g5gnTPyCBH3iK7BOUD5v1daiAAL3ApRo0k88gDZjFmHwVFcs + 37IPV+8+lhj9ldc7ScZxcs7tnTfcifB3n73GkUt3sJomJVv1HuTCNxu1AC1GLkQrcuVbjl0onoLasncQ + ghv/Vt3P5+u3HbUEzel/Gw1ZgLpDZqPOgJlo+Nd8ek16HQovAp4bixBwbTjHwbkTDqnoWihlTyH746DJ + rvQ3cJfjn0R2PbABU+Yyn3ER0nHhar4L5zWDmCHmhFSEkImvQs6KzX4ogPw/FAD3Argeuo2e/6zH7uOX + cOvBUzx48pLI/p5c/AdGF/4YRi/eimZE1OZEzBajybIT2duS0uAsf4jHYpOr34o8AfYKGg2dhyZDF5Cy + oBCAPINe0/7FLprMl+89xacvX/Hp0xd8+vwN209cQcNh82K+EiByK2FUG/qbE5ttyBsaS2RnAvN3v0je + FVdCXkrp09DX8ILLnvQ3k52fE9r++D8Nag8gNL0Aar4L5zWD6C1M/HQEPgRRl+TBIX3xGg9ZAQTuBUhe + tCYWH76LvnM3o9Oo2ajfbQTKNOlJlnwJkZaIPmYxWo9ZgtbjKF7XScyxRe84fnnAuCO58R3Ynaf72PK3 + ov9vOGQOhs7fgv3nbuDa/Rc4dPEG+s38Fw2GzpfOPv8v3+Hn549bT91x8dYTfPQnRUD4Z+0BtCBFo36/ + aA+y5Ex09oIM13ARxpDy5LwJV0Ou3H0qytWTqyCSO/HBay9vuBFYEagXw0jCNfDrxzCwhWaSBgbH7nrg + GF4P6jkbFDjBza9NCuA5zXldUfNdOK8ZRE/hUl64ia8gtX2VK3oKIH7eSlh2+B7GrjpMjw1CvNwVEC+H + k5TxfvyQxtjc6MorLj3X93mCNxq6EA0Gz4JLv5mo1utvVO83lcZz0ZweazBwNvadvYIvX7/D/9s3Ivt/ + +Pz1G3y/fEanycvF5efHuAGoWNtxqNpzCkYu3oYv377j0UtP1P9rJr3fDwUT3cCuexsiexvyVFqPdiWy + bxMC7z51DVfvP4OXty88GO8+EDhn4guvtx9w96W7PEcSpEu2kZI19Enw66krIJHRkxEcePVnYHIy+Pw9 + PYJyjK1HUPWZ/b8D2Ss0lb0B+LOTAgiSzGq+C+c1g+glUsMn6BI6rDD0AkyQMMC2gHPAhbPNXxFjVh/G + lI0nUbr5INjkrYh4Ocuh40Sy5ASeJJyY4gnadMRCNCFi1x8yH60oHGg2fD5Z6X3Yevwybj94ga9f/8MX + IjgT+vTNJ6jafyq6TV6J79//w3vfL+T27kKlHtOkuefL9+903yfkbTAA3+jxT1++oWLPaehIk9+xywR8 + pfu+ECp1jQ6rEw0hDis8LlFy2MPXY8i8Dfhn3QFsPnyRQphn8HxPJPf2gdf7j3jr44e3vn7wJjx57YXj + FE79e/Aixi7dhc6TVpLCoNeSxCd7SsvpvhWiEDtPXCHXveMkfsygYGv1mkwTm/GDoNz1pkdQToTpEVR9 + kEZsAJO97eBJAduCKbsD1ewxXikFMnd+EjXfhfOaQfQQW0KkET8ASi8AXSB1DsA2T0UMc92NxcZSoHUu + J1jnKIf6/aehw6TlaDXCldz/RRgwe6PU+Q+cu4UL9x5gwsrdcOoxBVcfPjMQnyz2O+8POHvjsVj4b//7 + H3kDM7Bs7yn5+59Ve1F54Aw0IytZtvNEvKXnsmIo0mY0nnq+p7//B4d2o2jiL0eFnlNxjRQKK4auk1eJ + W80E/GEdDbd6IUlYoVhYg1dDSo9uDSEMvT7H7WLdXTF03ibM2mDojz974xFZc7LkZNm9fD6KZfek7+Pl + /RHXHj3DpoOnMfvfXajVbQwcmvRBvjrdUKhud9g36ImCtbshQ5lGyFi2KTI5NkGmck2R0akp0pZqYPC+ + 8lYgJVxJNrdgBPxOorR/jP8ksHV3aTcQQ6e5YtnmvQFkDwx+rO2IOcH2Aqj5LpzXDH6v6NfwIwuqXgBD + uc9wcePlLY/mIxZg9alHqN5zIpHfEZY5HVGn92Qi37+oP2gWEfo/ssjf8JVc+K9kuZnw34iwnSYuxfwt + x4XIvaash32LUchTry92H72K7//9h3qD5+De45f477//ofvkFWg6fBY6EbGce0/EnjPX8Y2eU7/vbNy8 + /5ye/z8MnL1BrGP1XtNw6+krevx/aD7SFY2Gz0MbtpJTVtFnWo3u09YIuk1djc7kYXSkcKUjWc9OpDwk + BzGRQgb6bEroUn/ADI0FrWW85cYRsZxE0hKN+6B4474o0qgPqnYaii6jZuOfFZux59QV3H/6AveevcKd + B89w//EL3H3yEg+fv8LxS9cwd+029BgzEw412iJRrrKwSlcclgSrLKVhma0MLHOUpetJ9+d2EsTjW1K6 + NvkqEZwRj2+NhP9TCR4YQVl3Nfh+fpyfp2wLxuDdgY2lQN1eADXfhfOawe+RJISoI74BDgG9AOQBqBWA + NU2++gOnY83552hFREtdrB4saNIyKXrMWIMK3SbCw+cTufbf0H/uRvScvhLbyOX/TlZ90a4zGLZ0hxD1 + 75X70Xj0HPzlSvE7KYj//vd/RPjFOHn7hVj30cv3ocfsbRi/9iRaT1yLDSduE+n/D+3/XoUd5FWwwmg6 + ZA7SO7dD+Q4T8OHLF/h//oJEBWpg6fYD9Jpf0XX0XNjV7YG8NTrId8hYlixo2WbIUL4ZslRohgSFqhCh + iEREKvl++QhiSWnMXg+DH2ei8X30vKxOTVC/+3AMYeuydT9uPXgilZBb91/g9uNnuEu4T4S/fIdc+J2H + 0GvsLFRq2QeJ8pGnlKkkLDMTsjoSqSvItVSuKyNBIbplFDTeV7CK5nETwmbd+Tn8XP4fvddicAgU3HHh + ar4L5zWDXyuhq+FHFqwTOOV1aU0KYKKxFGiwNtZkjRwa9MCGi68ornVF8iK1SAE4wr5+d0xcfxItJvyL + l96fxI13aDEIqUq3Qcthi8SqT125C7mrd8BX+tv/8zcJAz59/Qx/v8/IVaUlrJLkRrPhk8mD+IopSzbB + IkEamNumgpltYuw6fBL+X4ng6fOiUc8x8Pvsj2Ubd2HBui3w+0Sv8eUrBkyej7i2aVGhRW98+OCHpn3H + wDxjSbKkTDZ2lyvBOh9Z0/wVYcvEVoU2CmyF9GxhKwvZq9IEYhKv3LwPZ6/cIe/jKW48fErWnfDwBe48 + fo7Lt+5j1daD8rzKrfoifam6sBKil5bwyJLe34be31beowoSKAQ3IURExLqHBqpeAN3jwtV8F85rBlEv + XMr7tcT/AQfuBajec4IoAHZB+YIxefJUa4fNV90wYM5W5HVpR66rE8yylYZ5GnuYxUuB7sP+xqfPn9Go + 9xB0GT4RL5+/pDDgO8o07wPLBKkk5r9+5zGqtR+GdxQXf/r8FSPnL4WZTQpYJctNZP6CT/5fUIbc6/gZ + imLsotVE+K/w9v1ICiEFMpZrLK/h7/8Vn4n4b9/7YsiMZTBLkB1mmcrCIrUdzJMUhnn6oohHlpYtfUIm + HVlUJqEtu9GM3ET0PAYw2V3aGsi+bMt+nL50EzfuPSXCP8FNIvyth09wm+L1C1fvYNWOA/I859Z9ybNo + AKtsjoiXjdz2HGTlc5ena6S46PyePNFMljw0iGzrHhpwL0C5NkNYAej2Aqj5LpzXDKJOIlTDjyQ4pC9e + 41H17hOl3GfL7jFdMBue2LnKY+t1LwxcuB3ZK7Ug8pclq1YFieyqI25Ke/T5ez5Z+e9ksb9S7P9dXPql + ZEHNbDLBzDqRWH7OD5hZJ4Bt+uL46OdPnsAXjJ67mhRIMkxcuk4suj+RXkAKwffTFySxqwbz1IWR1KEW + BtMESOVQG5aJMsM8fhqYJSkA81yOSGjngviFCQ41kMDeBfHoM1vkKA/zzKVgSe9lna4YUhWri8ot+6In + kXjF1gO4cP0eufDPcP0xEZ1d+oePcZMtPBF+Jbn5TPYqbfpRCFEPNjkpLs9FFj0ngbwh67wUl3OIoGfV + +T5SPgnkb7ol956VUfyCVfWf/4chqq17aMH5HVIAuseFq/kunNcMIl8ipYYfSbBPaV/lWo0e4+HYYqAk + oAwXrIokrfbcfoNpW86QchiMuNlLGdzaQlURl7yARDkqSKJv7tqdsE1TEHEsE8Msfk6YUxxsZp2UyOUm + ZT0Lm2QwT1gYZVv3E2XBeYMy5ELHjZ8BJep0xfajvFrwFnqPmwfbzKURh5QLlx3Ns5SFWdYSsMhcBvEK + VkKCYjWQsHAN2BSuAnOKr82SF4ZZolyEbLBKXQjsyfQeOxOLNuzEg6ev8OK1Fx69cMODZ69w9wkn6Z5T + 7P4cy7cdwNDprhTjj0CBGm0kAWfDFp2IHo9CB7bqNoEmjxZGsovFryLhkkV2R5ino8+aPB/MEueGebIC + MKOwxJo8qQR/kGfwO6x7aMEKwDKXky6h1XwXzmsGkSeRWsOPLFhnsFtXvccE1Og5kVzpigEXzDJzcczY + egGzdl5CMXLTzTMUQSKazAmJgGa5KiNF0RqSsT909QbMrBIjXvFq9Fh1JCKimtmkw1N3D1IA35C3ShvE + zU0ESZgVk5eswdi5y1GhZR8hiFm6ojBPnB1xE5Fbn5xIk70sbMnDSOhQDfGNlp0VgTmR3TxBNlIaaWGZ + NBvSFKuDHuPm4t+dB/HwhQd8P/jDx+ejocGG1yt4euG1+1us2XUYw2YsRv1uw5C/akvEI8tum6scbHNX + NGbZjYlA43cODgrprSmUsMxSChbZyhDpiyF50Too1aAbRs5agu1HzsDP/zO9/1tkLFkfZuSRJGBPINBr + xRZEF+seGqiWBbPh1Yia78J5zSDiEi2Jb0TmOJlLTKreYyJYCcQjyyvZcLL0VllLYuyao9h40Q01e09C + 3IzF6DFyu+li2hR2hpllQsnSP3V7izjWyckVrymPJShcGXGT2sG+Zgcs3rQXFmkdYEVkM89eHnFTF0Hc + ZETmTOSmF6iEhPa1kNiO3Hj6YZj4ZjmY7AUpzs9GhE9PyiELUpWsg55jZmLtvsN4ScTiKgDnBTin8OnL + Z/j5+eHDp0/iSYyYuRQ1Ow5CRqeGsCJyctktnmLdibjqCaEH8XCMLr248ER4izzlYZG1DKG0JBktsjii + RZ8JOHnxOswTZcX+M5eE9Jyk5NsPHz/j3cePOHyBHk9agJRi7FAA0dm6hwasANKUqs8K4KdeADXfhfOa + Qfglamv44QdrQA5BOAfBOwTXcWw1SBKB6UoZlv7yBbMmN7vFiPnYeesNqnYZD7M0hQNc4wREWjPb9NIH + 4OntQ9Y9OxKT1ebkWwIKEThJZpa+KOKmL4a4WcogMSmOhGTRExepjsT2NWBNoYZZTlIIKe0obMhOZM+A + uDZpkLZYPXQfNxvr9hwTK+r/jUj+9Yt0BEq+gAj/yf87Lt99TFZlI5r2G4OkRFbzpDlglrQgLOg9LXKW + I7KXN1h2LrEppDZ+9p8gjxkSh1xJkDo9vY5lGjtYZCiB5A41sHDNTvQZPwdmGUrRdSiC41duw48+i03K + fOg4bDp8/D6jVJPusCKFZUWK6+Ezd/qcn0lBZEN8zlcEfs8YgJhk3UMD1bLgvjLvVaLmu3BeMwi7xAzi + x41LMGMFUK5Es37S8JOuTEODW0yEsMruhAYDpmPXDS+0GDkfyYrUllicLyYnA83IssdNmIPc8qyIS658 + wkKGiZ6ICJXQrhopiepIQl6BTb6qRHaK51MQ2RPngrltJlhQiJChTF006DMas1Zvk63BeLUfJwM/kYX/ + +O0LWdMv+PLlO27ce0STbBMa9RqFTGUbSzKQwwm2rhYZKe7OTS59fkPyTX5s5VYPiiKg23h5nWGZw4ng + CMtMpWCZuijyurRFM1Iqyzfvwb1nL3DpzgN6r3T4+MkfB89epvfMRx5NcXQbNV0+Z3J6rRINu+IjfdbG + fcbIZ0tOFv+ZuxeevXaHRdL8MSIEiOnWPTQIrhdAzXfhvGYQevldpbyQwJ+JP5uB+IEla+nMfEYAhwFS + CiQFwPGuNVlDXha8/YaHLNFNVLAaxb9OdDE5CUaWlSx9IrJubPk59k/o4EJkJ8WQm9z4VEUMybAEmRHX + NhUyOTVGw95jMHP1Vpy/9YRceF7eSyT/ShadXOePZE2Z/OeIcLNXbUWj/mOR0bEBeQcZYJaQYv9kRPa0 + 9rDglmTyUNjLSFzAsI2ZITYPCj8ScJzJt2bCZywNy3RFkLSgC2p0GoLJi9YitUMtvPf5IHkEnw9+8P34 + Cd7vP+D6w2cUjqTDO9+PeEePmdNnMSePpjJ5TFzC7DBkKlIUdhEFcfTiZbxwfwNP7vmnEKBy2wGwyFSa + 3jv6KYDYZt1DA9Wy4J96AdR8F85rBiFLdCd+iJKzahvJAeSt3jGgts2KIFeVdth2xR09ZqyTx6zItU/I + pUCycvw8ixwVYE5uvnmyQrCIT0SlsCCLY2M06zuGLPsWnLl5Dx8/+8PX7yvFyJ/gy2Qncvl9+iJtszOW + r0eT3uOQzbE+LBJkEg/BjF7LPHVxceW5HMmKJb59VbKkLuJ5/ER4Pfee7uN43YrIylUEzv5aZSlL1n0s + lm/ci8ev3OHt7Y03Pr54/9EPHUZMw54TZ+D5zgf5qrdDEnofDkvMWYnFT4fdpy9JzsGM7jPLXg45yzWW + 7zBwyiJYJ8ksCuOJmxeukbfy3N0TN+89QUr6vJYZSwaUVn8XUpeoLRZbeh9iqXUPDVKXrBfkceFqvgvn + NQN9iQ41/KDA4Qe3EodayPV/wQqgDPcCBCgAsq55K2HTpVcYsGAHslRsCXPuaU/LhC8A8yQ5kYLcfLZ0 + I/5ZhnNEdq7j+xKh3n/0h4/vJ4qNyZr6fcKdpy+wcouhsSZbpSawTlkYFolzwDylPSmQEjDPVh42TGRO + vil1dCV5FkSWnhUBd/LxQhkL8lasKO635s8sCbzKMM9YHMNnLsHh8xelp8AqdWFcoM/4niy5mxdvruGJ + ZVv2Inv5RoiXPA+2HjotRLZJmgXxKKQpXLsTJi3ZSF5IOsxYsVVi+pzlm8CcQiPrVAXxwd8fO46eo++R + Fq/c3+He01ewTJoJ05asg/sbbzx86obs5PlY5SSvKYjvEBkwdB7+gF3NdmK1Jy5Y/cdY99DC2AvwE6nV + fBfOawZaie7E5/xDmCVNqQYnavScIPsCxDMqAEa87GWw9sILDF28D3V6jUe1Dv0wcsZSbD54glziD3j3 + jl3jD+QuG28/+krP/LJN+9Bz3CzkrtCMyFQc5kQw81TkJRApzcmyG9x4A1ElpNCz7IFBz1Umu23BSpKZ + 59dMV6ouclVsDvsabWGRyk7CBH6uRdLcsrTY7e0b7Dt6AZaJcpJH0wppitdEClJsH/z80W7wZHpeAZgl + t0PX0TPF/X/0zEN2IeIcxOfPn2GTxVGaiXhXospt2K0vJcrvPT338Plr9P+ZsfnACbzx9oVVirywylAM + i9fukHDgAHkOSUSR/bimEUIgRWKy7mFDwHHhgUTNd+G8ZmCQ6FzK48/Fy4XDI/y9klhnL7mleo/xEgZI + F6DxglnnLIsJ/x7FrsvPZXnrE3KdX3u8IbwlK/cWl27exbL1u9FjzCzkq9Ia1kQOi1SFYUUW1JLiX0si + u1U+hezsxjPRg4+J+TkSNwfqpDMnzW2Zwl4WJlkmt4d11lI4dfWueBwfCGy9l23ZDYvURWQRTsqitYjk + frj5+Akpgo/IRtbbLE1JmJOCSEFhhR+Re9XOAzBPWhBm9FmrtuqLDxSi3H7yHFsPnkIPIlVRCgesspUm + L6GpKIdxc1fBIkl22KQuAC+6HleJXJYp8mD6crb671CkVgdY5aqAhOTFHDx1CVsOnIJdjXaGBUiq7xha + iDfGpKdbVn5q677fZN1DDb4OgiC2CFfzXTivGURv4jOBQyusJDgnkJGgrVKkyuXK5JeNQQK6ASkMyFsR + Q1x3YfXJh3jm9g6rdxgWw1Ro2RsJ85SDZYaiiJe5NKyyO9LE58U39H9qax5Ky56Qbvl5fCvufKbi4i1w + 7K500nGn3dV7DyWkiJ/DES0GTRKC7z52EQ17jcWbdx8oLvdHUvqBLTKXhEPdjvhEocgk13VirfefPAfz + RHkQr0BFmNlmJgXwBTuPnYNZwpzynjnJMn4kt77zX9NhkTC9ZPAtuLSYxg426R1kjQKXJv9ZvhlnLt2C + GynBWSs3ksUvjiFTFuPGnYcoUL2trEGwljUI5WWNAjcc/fSddUEkl8VLhjX/qYrXClikJNb9noHg1wMR + 3mTdtWCviMke2Cviv0s264+M5ZqEWQEwadTE+53g0IMJHBzxOUzhUIA3CWUlkZeg91oKHOIkzz6a9wVg + JcDZUuVi8s5AvDX4kuP34NxlPOJlKyNbg8kSV6M7+oPsxtuQoHqeJRGEk3O8Nt48Z0XxFMzJGo9duBLH + zt+AeVouLxqUiEWaIug0eho++n1GSiJIpyGT8eHDJ6QqVB5xbZMja5n6yOhYF+aJKdxIWUQsODfnJEpX + AFdv3ocvKYesZRrDPFtZmCXKgfN37knjjlmCrLCi17NKWZCUy2es2HYQ8TM4oHTDnhgxZxlOXboNq2R5 + 0W7oZHh4v4e71zu89nqDrWTdE9Fn4zUD8XIT6XMx4X9cl+AgG3mQkjBYeIOVL0whTIB1P3kBNxSS33ts + nMSPTdZdB+oS5sa9xwIIrwZfN76uQW0Rrua7cF4zMAhbz98Z92tr+D9EXHgCP5adEL5qhOwL0AfVepIC + KKNSAGSReAPHJUfvo/Ffs5CyeB26/4eHEFpIk02+iuQlkPLI6SQNRZb5nMRaDpu6GKNnLpW1B+z2W1Ic + v//UFSLsJ2mksZWSI3kA6Uug0YDxQlqXNoNRo+tgict9yPW/8egpNh48jQlzVsIqczFpG16784hUHtLa + VcG8f7cLafccPQuzJLlhnjA39p6+LPV7m2yOotAskuSV5N1LD0/yJnzw7v0Hiuv5QJP3yFu5BYUCZZC2 + eG0Uqd0BaUvUhXWO8uIhBU7C6cJIdLHwdB1SltBa9+tMcrLwyq1i7U3W/WfwdWjYY2SwSU5WBHzd+Hnq + 65bbpZ1yXHiYFQALky0kaxpV4Pdlt12NyFNI8ZPXCuqMgOJN+mHJsbtyRFd6x4ZBTviANloZV4EFl+Gy + loVV+mKwSmOPTKUboGH3kShDlssiqxMsiHjth0/FOx9feJMlT0RuuHlOR1hQfL962z58JOudzKG6uNOJ + SDGw5c5Wvj78P/uj/5QFsEqcDZduP5R+Aq7Jc0swu/Wc2Te3SYULNBHc3/tKjuAjKQ1O0vn4+aNy+8Gw + SJwbXcf+gw+kPHI5t6AQoLz09R+7cA3PXrljw75j6DVmJsXvbZGIXXoiuzWTmF17QvBW3llKqKzclH0H + ClNo0JZClkkL/8U+su7X7htdeaN1579/su5Gz0D/Pf4cKHkPvjanLt38iewMVpSsTFlRcgig9zqMoLYI + V/NdOK8ZaIUtcHTNCUQImjMClItGE7Bgna5YfPQOek5bgxxVKMbliam6qDzZ2RJa5SpHRCkL69xOsMxd + EYkKV8YQsu6bD57Bixde8CIyvvX9gDV7jyJujlJi8UfOWIynRLhnL14TAS5Id595ajvJurMCyFSmHswy + lkKCwlXEg7BMmlPWAmzj2J03EbHJCMuEGZCmZANkLFUHj+i1eFmxWfxkohTuPHqFVgPHoUidjihapwve + k6J5/tIN5knyoOvo2TT+iFb9xsMyF712rrLk/dSXBKZ1llKwou9icOkNCTj1d1bA1yJeAVYK7C3Rc/OV + R6piNVG1bT+jdd8XYNENsbvRwhsnrcm6EwIpOTYQ2vhdCYEMYCWgED6sYRAnAI3HhYdbASjC8bUukWIq + 0har7sEK4OczAmqRAriLAXO3okDNjkR2gwKQveu4wSZzaamPtyELxz9K+6F/w5asecayDcmN9sVLr7e4 + QPH2ik370XrwRIrBWpP1Jw8gmb0spGHFsO/EWSF8ViIC329fp60QuOf4WTBPW0x6AmwLuRCxM5HF/4wn + r91hkzwvvfZ7jFuwhpRBWpjHT4mzV+9IIs82WTa5Xbh+B5GdXH5ezJO8ELYfPo5TV2+TC15blApvBWaV + 2VG+y4/Q5oeC0yzlpYnKoQvvOMTbptvy0uE8FVCoRpsfsfvpi0T0x7h+3wCesNeJ8Kzcflj3bj9e8w+F + eEYEpYzJinDZln1y7ZjwHAopyU61Z8TegN7rhQV6vQBqvgvnNYOghRNt0bEfIFzgMwKq6ygA/qGWHr6D + kcv3o2SzfgYXmO6PR1Z+8JT5eO35Bi/fvJNluJ7vvPH23QcsWL2ViJdVym+bDp6i+DoNxfMZYZEokyGz + TvE0twq/IuWwfPMBZCbrzXX53ScuSlIuS4VGYsmnr9hIr1OYFEAVaUziVtxdR86Tq+8Py0RppBvPl6z4 + qh2HcZXc6vfk0v+7/SCylmtErv9HdB31D4UbZZGQQgh28y2zkueRqQQsyaVnqx5s/E5WnRWDbT7DpiDs + 5aQsUgNV2/QPsFDXHzwxkJ0m7A16/xs0eRkchoh1bzuQwhZT7K6AFTzH5ZNIWW7cd9ygLNk7Ml7D6/ee + COFZmUr8Ltfuh3IOVb4lBAQcF64SNd+F85pB8PI78wKRioS5Su5mD0BKgaoLxm7u6JUHMWXDCZRpOShA + AXDWm4nw3M0dS2nCN+49Gvlc2uDeo+fwobjbImEanLx8R5qE8lVrg7n/bsUl0ui3H72AeQo7WSfA7vzo + WSuQKF1h3H78Aj6f/JGhHK8BSEOPfcb6nUfpeallPUDaknWRrEBFjJm1kryFT0iUozRqdR4qMb707/v5 + Yd/pS7Ah990mH4UhGYrDMksZWeGnVCrkVvoMfnw/BZygY5Lzngjx6LvZksIo4NLKELsv+hcHT18mkj+V + Nl8GE/763adGC7XFZN11YIjfJxKh/xUviK06L+5ist9kpUnYRIqAlWVVUpZc+rRhsouH8MMTi0zo9QKo + +S6c1wxCFlYCuqSKUVDOCCCo3WBWAIMX7cDsXVekk8qwZ4BhsVDdLkPJA3iLNvQjc3ecRZLM2H2U3flP + ZK3TkEt8Bd7evkTOj9J440dW/c6TF7K1V/YKzeDv/xmeb7zp+f5458tZd1/sPXlB3Hne3OPW3edYueMg + 3r79IK959MIV9Bw7k6y+H0rU7ijhgQ1Z+EI12iI+r+hLT9Y9dznD5AmhLMmuvA3F7PFyVoB1znJIbueC + Km0N1n3F1v24/ZB3AjaQ/RbvGUhWiiftCnJVZcJy7M4WiiZrZFim2ACl/h6QsDOSnS39DVaahOVbDfF7 + mUakLDlRatyFKXBuKaqgOi68Ls17ETXfhfOaQegk5icGU2QfU77tEFEA6l4A1sgths/D4iP3UJN3DeLS + F0163gqrSJ0OcH/7FtOWrJfM/N5Tl+Dj64cFa7aT1c6M7mNmSYdexyFTkLZUXZjbZpbOO0bF1v1lodDW + o6fxz4oNKFK3A67cuk/Kwh+FyJPYdeyshBCsGDw832H11gNo0G0kktpXJ6IXk1Zg3u6bk29WeQ3beBli + du401Fp5W14JSK48Ky2bHGUFvEMQW+3JC1fj8JnLuPPwOW49MuwXePsBkf0hWXdSRnNWqaz7L5qkMQFB + NdwoYGt/6vItun4Uv5MXxck9LoGqCa+nOLlHwvC4olgj95rr9QKo+S6c1wxCJ1wdiNmhgHJGgKIA2A2T + i2boBVh65K6hF6BYHflxeM1AAnKT3Sj+f/rKDW7kCfBWXLwWwIaX7ibKhSrtBklPfaWW/WS1n3mCnLCk + x5La10CzvmMlUZfaoYZs+WWRvADqdx0pdX1O3lVs0YfGI5CISG6ZsiCs0pNLn8NAenET+bORlTe490R4 + o8Xnx/hgDe7Ci5ezPGxylkXSQlVRuZXBuq/cfgB3KQy5RSHH7UfG/f7Z0pOVX76ZrPt0V+n5z1q+ifH7 + myw8IzQNN4zZKzZL/C4t0KwwuSRK/69A+7oGostvyluq5ymPTOUaoQH9/zD6HRr2GBXp1z67cyulFDiT + 5r2Imu/Cec0g9MJKIOYmBeMnr1WoZgdwIlBbCnRG8SZ9sYQUAPcCpCnVIMASchvs/Wcv8cLdE+kcXHDo + 7BW8ff8Bp6/chlUaO2QoXV+y+ws37MT4Batx7tZdGn/B1dsPsPvIOfj6f4J19lIyCXjNgEXGkqQgeMVh + UVhwhyDF4tbscRQM2grY5uUJRNY9B7nz2cvBJltZ5K7SgsKSCRK7Hzl/GXcfv8S9J8+J8M/Iuj+Tff8P + nrpssO5indi6G+v2/JqRbHViIsLacKMoBf5b12rTtRXrbhxzCMbHnhVyaY2SDbpg/toduHjjPu48ei64 + /fAZVm0/GOm/hV4vgJrvwnnNIGzyuzsGIwRtL4DhwvMPVrB2F/EAuk1bg5xVWkt2nK0ur7dfv/sYPCiO + t0iaHTYZSkjMx7H8tGUbEC9pVnHpuaPOl0IDbsTZffwcJi1cgfSl6yBN8TqwJKIHtBMT5G9eEqz8bbzl + RiN2DYXsZN2tsxHZyZXnjT0qte5jsO7bDuIhKaR7j2kSCeHplvf7J+Iv30rWfYYrxfkDkMWJYneJP+l7 + GEn/58LwO0e04Ybv54w+K4SA11VIzxY+d0UUrN4GyYtUlzCSz5vkXZPW7T4s/8v9IPeevCQF/RQHTl9A + yfpdJLyL7LBLdVz4dZrzImq+C+c1g7BLdFo7ECZkKlPXkxUAlwJ/aF5n+tFqkgdwDwPmbUG+mp2k+Ycf + s87miL8Xr4WH1zvpmuMjsbKWawg3r7fSZFOr41DsOnIGTfqNRX6XlrBMlhcWqR1gmbEULHjvfS61/fQD + /4jf2TWUyUKufDxuzMlO1r1qc8ks804+R85dxr2nz8mlJ6I/fkIgC0+W4/DpK2Ld2wyaiJINybrnIS+C + +xekYSdyJ1SMAys8ug7Bxe+MsDbcuLQbIAqA/0chbbYKTdB3/ByUod+gz7g5ePTcDet2HSFvzRHWmUpj + 74lzOHnpBlJSGJihVD3Ey1gU95++xKptB6QKE1XKOXAvgJrvwnnNIHzCC3Z0SRadwb0AigJQXzDWxOwB + cC9AiWb9iUyGSgBvvjlg0ny8JgXQtPcY6fW3zO6I1CXrIGWx2rBMx658aVhlLQNL+h/Za4AbcIyluB+N + NnxLVoLex5oX1/DGnjnKyVp65zaGrroVO/bjHll3w0GcT8laPBMrf5+s/ZaDXEpajIbdRlIMWV8adPgk + oPgExa3/k5HauLKQ8xtMUKm/G4kut0TciDbc8P9wE8+pyzcDPKsyDbuSN/ZC2qrta7bHA/bOiOD8e1ql + dcCidTvg8fYdrMgocN7GKlMpqRRcu/1Y5oDe+0QGyrcbppQCZeMcNd+F85pB+IUX5+gSLbriRy/AhIBY + jcE/6OiVhzB5vaEXwJa74eh+/tGSkUtXlnfEJcLKXvtkXdgCMPGEfOTOGxJ0P0jPr81hBO+xb527HKzI + sltnLYt8VVqhzcCJFLuvwdFzV4nofAjnc9wi3HnwSqz7xRt3MXflVppEs1Gc3EQbLvvlLS8uJn+e370F + 1++DwcPh0Ib3PuBYnNcecJ39+v2nhnKcsVnJ0J34o+EmG7ciR4KiNCiUx/T+jeW3Z5efD1Gdu3orsjk1 + xJOX7rhx/wmeu7tLe3Y7UjZv3vuQcmgrnh53la7bfQRPX3vIMWxRVRoMvEW4mu/Cec0g/BLzKgOaXgD1 + RXPG4IU7MGv3ZekFMOQADI8ZSjbBE48JL0tmiah8kKY1ET4peQIV2/QVa/DvjoNiHe6IO29w4+9yWY5c + +q0HT4rlqtd9BDI5NSKi03uRl8DKg88wDClGlBhUPiNbpaiZUL8UClGN38e2QCUUrvFjo5ADpy4YehaM + PQw3HtIt/b1x7wmJz13aDkCq4hS/yzUxKPLIgTOWb9lLBH+MMo26G655rvKSJF61/QCsM9rhpYcXzly5 + jUfPSJlTrF+/23C89flAIUYPw+YxWcpQSLkGL157okS9zqIUpBtTlaCNDKiOC5deADXfhfOaQcSEm4Ri + TlIwiF4A/nGbj5iPxYduU/w00eDiqS6oFjwpDVleTtYZMvNlZEktrxeY4rqGYne27i8ldr/NCTsi/O0H + z3GeJse81VtEKZQm99E2F/3w7M4rkz2YScDPsSEyyHP51ng/5xg4abVq236s3L7f+PjP/x9tQd9Z8aok + X5KvojTR8DWau2ozEeoOWXTuTHwsDUuGcw+fSBwt17FBNwmtlJOQ5BpGIpl+oJIoGO7u4/fl9+JDWY6d + v4anL91gnb4g9h6/gGP023ccOhVub7xx5tJt2Z+xNz1fujYpfOw9fjZeur1B3a7D5CSnkTOXSXs3ezb6 + 7xt2OLcfotkiXM134bxmEHHhyoA+4aIbAvcCqC4a9wK4kgKQXoAS9TSP8Y/Ni4S4lss74SQv4hIQu6+m + H4/P5Lvz6AWBa+6GhhvOzm85QFZpOsXu3UdK/75hgQ1Pcib8j9cPCjb0fJ5knBy0pglUokEnFCPLkb9a + a9mogyc7t/f2GjcbN8ji8GGgnJCK7NJSZEI8Fr7l/EUeXn9QE6UbdZVruWLLfvGK2KIzyQXk3l+4dgez + Vxvi95KkOG3ylKf/5f0KVKTn16dbjaKM1HDJWUqq1+89pc+yxaB06DOwd/eMXP8U9Jtu2HNUtlKzSJIJ + R85fxeMXr/HohTtmLN8IywwlpOxrV72teAoc4tmQt7hm5yGaN88Mn1f3fYOHesGRUqrcdvisphdAzXfh + vGYQORIzKgPGXgBWAJpeAELxpv2w6PAt6QWQA0SYpER6zgcUoliP24EnclfdqUuQeju78ERydufvEOnP + Xb8jXWG9x80ydIVxVl4mocGyKxZbH4bmHp7QcmoveRWZy/GR3WUxfsFK7KV49oWbF17wgRxuHnju4Snl + PqWvn7cy40Yf7uVnEkWvSgB9f/puDP68Gcs1ROW2/WjCLpHwR5KdnPhkJUrXkQ86PXzmCqYsXIMG3Uag + YLWWsOGGJ1aE4i2xpeRrS8qPiM7XzCY3J1adkMyumpyA3IesbLX2P3aAjixwteDGg8fYvO+EvKcNfZ6e + Y7jE54k8zs3Redg02WglpX11JCQF9+Slh5QCN+8/Ccs0Rej5lVCgamu88niDsbNXSp8AhzfZnJqGWmmr + +xeCaljaceSs5rhwNd+F85pB5EmMaBfW3ReAwPsCuB66hX6zN6LV4KlGi7RPLKucsU9uqPTM85iItmm/ + IeZs2GMEsjo1FhdOJmcoJx1XDNh6i2dBE6F4/c7iKnKb8U1SKi/d38AqnT027jmG526e2H7wFCa7/ovZ + yzfhOU2qxet3SY8/lyqPX7iGjfuOYcmmPeJ9lCYX+neGAjYFOLZlclZEZqdGFAuPkBVyR7ms+fwV7pOV + v0tgBXrvySs5dHQYXcu6XUfIngUcVsmCJfK4WJHy0eW8WlKUCY/J8lqTcsxbpQXqdR+Ov5esw0m6Bo/I + 4j6k+JvzLf0nzaX/icwcgMG74CQft1HzknA2Dm0HTSCl7IkmvUfDuVV/2QCmNCkK81T2UjrmPR7fvPOF + RaYSoph5G3WGNX0HQ6s3vbbxuwW8l4wNRkPpXwhNw5K6f0HdC6Dmu3BeM4hc0W7GGQ2RsVQdP1YA3P0X + cMEJyYvVxqKDt3DtqYfsgW9YvmlY0XX60k3MWWmI3TkBJNadQRbox2sETTj+kaUngCcwTUrOIrMWH/XP + UpnsG/cex5NXrymWdJeDN+4+foU1uw4hWaFqcN20Gx5v3iFloSqwTJEX8dMWwAvPN9hE/8OHg1plKi0x + 6PLNe2FPk4Vbf1lxSZOJzmeJKojCIfCkZ1d5zr9bcf7aPelSvPv0Be4RMR+/cJNDS7hUd4crIM/dkDh7 + acTLXIoIT2GOtMuS8qDX4SQoe0N8DqNVDkckLlgF6cs2lgRr+pL18dqLd22+T0pvtyzZfvjytbzP8s37 + UallH2Qp14SUUNC/SXjA3/Hg6QtiFEpxKEIKrkT9LqKgR8xYItacO0V7jpsp5ytwidg2F92mK2bYzl1e + 50dpWEIhvm4cyoin6CxeRmgbloLrX1BvEa7mu3BeM4hcifaVgaB6AXjyLiIP4OTtlzh09lqAdc/OXXXG + x4Mj+Q+onkOaPGXxWnBs2B29JsxCViI+5xH6jp8nZ/Nx4wgf3PHX1EV48toL7YZMQVJSEFYp8hkO70xZ + EN1GzcBbsipV2g+Ec+t+WLvrKDzf+qDfhLmwzFoaDnU6iuKYsWwDOg+favBQKIbmfnPt54oKGCYsT0ZW + QGIdOUPPSU+27qTILt9+QJ/ZsNtykdrtYZm+OKzS5qPP+Uy2X8/i1ICUY0U5YZn3U+St163TFyVl1gGt + +09Cx6F/o+3QybKf4TNyqRNkKoYGvUbB8917NOw1UspvfA35kBImIl9L66xlhFD6nzkicBZDwDmKBt1H + 0G9ZCUmLVMfKLXvJAxgDS1JklkR6i6yOEu4Y8h2EgnxbRbwi3ig2Xm6ngLCmlDHhyXssyFLiQGRnJaD0 + L4SmYUmBallwEjXfhfOaQeRLtG4XTpCz5HFWAJU7j/7poo1ecRAT1x1HGbp4gR8LEUR2trpsBVIXqyUJ + KP7xeZXdXa71P3qB4dMXIx657LwlGOcQ7j97jZL0o/Lk4U092XVPnKMcanYYhGnLNiFz2Qawq90OPr4f + ZVESb0jC6xL4FCLbTCWl47Bul2FSf+aGlPsUP3MIwErg4KmLoU42hhZ6CScBTVwmPnsfB09ewvxVW2Wt + Qt7KzcVLsc7MGfCysrW6Nb2OZZpi2HLopLRQl27QFRY5yMpnKYXpS9djG8XLnuQy8zkNnFDjDUwtU+bF + 0o274EWKj0MvPqjkLV2TRERAS7peFuQtxM9cUo4+20AhkyW9n97njyjYYjNZ2QPg5C4naQ39HvS9iNis + EJS9I/m5vM7DkpSaVAAylkSifBVQqVVf+d9th09J8o+vGYeY10l58nXcf+KCuPtM+PA0LClQbxGu5rtw + XjOIGuHdhHQJ+NsRZC9AZQxasB0zd14S90mXOHKfQirW8D8eY/Kv2npALN+URWspPqTJQfcXqNpSFupw + OHHlzkPEy1RU2kU58fXo+Wt0HfEPspVtSJP9vew98O7DR9kF6APFjs0HjEemcg1lM5Dj56+i3V+TZR0C + k6Ja28GwSG2PHmNm4ukLD4yftwrOLfshuV1VCQG4Dh3kwpVQItiEE01W2cr7JE3YhavJIg4nt5s8HHbh + uduRyM5JLr4G8nrG1YxMEIu0RdF19Az6np/Qkz6/ebqSsEhWEBfJpWcSX7hxF9OXb0TzgROQvVJTSaDx + PoZcZXn+2gOPyN0/c/U2/U9+eX3bQlVhkTyv1NyvkMdhRS638n6RDVaA3M3HeypIjkJ5jDxETuSyFyOd + oRlKyg5LdbsOFcW/+9g5UdT3Kbzk+WBo636KA6SoOT/ClSJuLebXUs+r8EK1LLiumu/Cec0g6iR6VgZS + 5pyu9ALwgYrqi8ZnBHAeoEavSZr7BUR63tGFE3UryF2bt2qLaGiJ4ehx7u0+dPYyEeMxeFegDI71JdFn + RRafY18mywO6dajdEf9uP4K1Ow/jCY3/XrIWicmtfevzEZfvPMDcNVvQY+xc2FVrB3MiuFn89LLr79o9 + R2CeIC0qtx6At6QE2AXO4thQXNIXHl5IS9aZG0sYpcnrYGXUqMcofUUWBJSEE7ucoU84GWJX9nZClXST + sxFKUTjTV7Y9P3j6CswT5YZ54nzYf+4SfPhglBQ56LtmoPszIHGBqjDPUALmmUtLHuAheU0Pnr1CPwqj + eAt0bhTi/Q95T8Rt5FVwDM5br8sW7bnLqSoHOp8lHOAuRA51OCHMiUBp5uFVnTnKIk/lFuSRDZf1I9wy + /OyVB54Snrx0wyP6rfmzbzt4CsN40Vab/khZtIYxeUzzR66h/nuGB7wsWNkiXM134bxmELUS/SoDIfQC + sALgXoDUgXoB2K3ftP+4VACkC41w4fpdZC1LVo8etyE3lhd67Dl+TkpZUxevMWR7KR7kFYKnr9zEw6fP + MZ0mx/JtpEDWbMez157Yynv5J04vW3jvOXUB5glTy66+fKKPWUoHOb33/vOX+PDJHxaJcsAilT3GzF4p + 7vNjmlCHTl+UtmLewJTJyNlymUzKhNIoAK03oMTv4Uk4BUzWMCgYRgI+A4EIkyBPWXz++l2WU5vZpIRZ + 0oLoPGK6HKc+cOI82SnpCZGHl1cnLlJNjkMzT5BR3OY7T17C56O/7INgTq41H7hikcJB8iDePr4UhrWX + hVvz/92BcXNXEElVljqiIJefE8Ps0bESazNwEuat3iYJyQf0+z8kr45PhuaKBCt4rvPz9StetzOS27tI + 3M/eYWSSXQ+qZcEz1XwXzmsGUS/RKymYKG0zpReAXSTlgvEPUoJ7AQ4ZegE0yoHIxJafk2vsDnMjDq/F + v//0Baq1HyixYMl6nck1dUOHQX/jyJnLeO7mIUrDKn0JbDpwUrL7/SfMpfvfkKdwAa7rdmEOTRx29S0S + psLpa7xb0CfES5YTVdsPwvB/luL5q7dIU7Q2DhDJeVsxViayx3/6YkSWaXKIRyIitXUusnRkSQI+L8FQ + VzaALUwqstaao7h0yB7ehFNYYVOwGsysEuPb9//w7b//SMmlhlnyIijfrJccXMqhAW+v5v/lm+Q2khSt + CbOMZZCxdD3ZNfn81Tvw9vUla/9RrL0Zb8KatqR8Nz4duQy33lKY8fiFOw6fvSKhiN7nCBPoGvI14fwN + V4UMFSJDvuU2N36RYmKDMJd+017jZkl1gJdzczmTwyL5fVhZhlFhhhfqLcLVfBfOawZRL1wZCN+JPlEE + 6QXoodcL0AWuB2+j29R/kcuFd3wx3M/13pVb9tOP/FyODOcfNHnRashStpE0g3C3Xr1OQ4nkXmJ9eAI+ + f+WJaYs3wDJlfnQdNZXcdh+UbNwVr/jobrL80xetR29SCHy8lxV5AMu27pNdf30++MPf/wtZQj7B9zPq + dB9BsX1/tCZLw9aTyczrDngzUE4+sXvLZTMGdxrKgiH6vLzjDy9hZXd9E7ntgbPLDPWCmYgknMKKhA41 + Edc6KQ5cvoX//vsfEhWuSgqgIFIUqoGv375hEYVYNmnzI65NWsRNlJNCgCLkGeXEzLWb8cn/G7KWbIAN + e47jo58/rt5+CPOk+WGepaS41byBKp/wzBn56h3+kqYs2epc53MEB3XCU1GYhmtoWGzECuCAaku1AtVb + SxgouR96P0NZT/+1fxWUXgA134XzmsGvkWhVGQjoBWiq7QVIUaQWuB24v5wR0Iksu/ExItqla/fIxXtN + Wt1R7ovHO/Xk5x+b4vzsZSQZ94JIv2HvURw7dwWPyA30ev+eYsYGqNt1uOzum65IdXqd2/D0/oCGPUeg + Re/RZNG+Ih15CiNmrZDdhlfSZOs9bjYyVWhEcXEuOTPQPJsjLHPw/gI/LJkVTTSJc8nKcOdgPpdW0jk3 + aSEvmLlIoYrBTZW96DlhR1Didyb87zuswxmJHGrAzDoNlm7ahe//+x96TaB4Pn5WmNumxlfyCNbvOU2P + J4KZbQZYpymOqkTkOLbJyLp/EA/AKklWWKUsAE9SppwfadBjhLTZJihMHg+RzzKLI4Vfhqw8kz/kHIBz + QMLzpwqHEUx+PrFYUZiSsFNCLa74/ELrHlooy4LVfBfOawa/Tnhtsi4hfzVS21e5ykuCA/cCcEmHNwYZ + ueIgSjTrJz8w32+bx0kWn3Aih08L5h+bO7kKubRF4WptYZnaDpv3n5Aebz5Gm1t2uczzzscH6/YdRXIi + KsfwLfpNQKfhMyTOHfz3IuSv3EIafhIXrgyzFIXJ2uWGRRKyZhmKw4IUDcfzCSnOjVeQCJ+rAizJ1bWm + mNc6YwnkqtQcrQdNxPw1hviTFxzdemTITXCegsnPtXl2i9UdYtEBieyrwyxxftTqPhzfyQOYRYogbrxM + RPpk8CeFyFn+KUvX4eUbb3yhMODT1y9o1HuE7LK8Zv8xyYPwceq8RsI8WQFYZKC/2cozARWlrYK0ItNv + Kfs1CCqhMHk83OfBhA7qKPKfE54/v3Z0hrIsWM134bxm8GslOpw45JAgZ8kTHAJUlV4AlXXIWwFjVh3G + 5PUnUablYENdl+63zl4eCzlpRxa+bNMeZHWdYJWhBHYePyuuPburBqv/Gklpslkky0MuayY8fu0uSa68 + lVtKfM+Wg9t7uZvQLGk+OR3YPFNJOUeQG0USFHZBfCI8T1bzbGUNe/+nsaM4t7BsQslkXr/7KJ7S6z5+ + 6SZr0bnHgMl/7updKf/xcxx5l6BoZo3U4Kx93EylkCh3RVEADygkihsvNbn86XH78Usi/Vd89id8+YJ9 + 5y9h0N+uyFOlJawz0PUiZWues3xArV22VVOdhcBlRlbkHApx7C+nGtNtgWqtyVWfiLnksp+5wjG8YW2/ + QEqa2oRnTCR8YCilQDXfhfOawa+X318ZSJXTtVrPiahOXoD6gnEb6l+uOzFv91XDvgA0QXmiWeV2Qq2u + Q+Wkn91HzyN+hsIoVL0dufLeUpKySJQOHz98wr5TV2CWrBBsODudoaQkBlv1m0ghRHmy8AVgnqYYWS7D + xiJcMksouwfxhqEVSBHQ5E7lAPPkBRAvUzGahN2kVfgAKZbXHuRVuHni6UsPaXnlfvejdP/cNVvRduBE + 2ZiCs9OynFa+i3IbPcEk5dZocfm//YdvBHPr5OIFdR8xE+0GTUbCPOXkABXzxNllmzWL7I6wzk/Xq1AV + JDS+TkJuq2XC56kgVQLeR5E33bDKXBIl6ncSMq/avh93Hj+XZcQcFhky+E9kS29OePKqvKhMeP5ORFcF + wPI7KwMOcVLknF6x3VBRAKmL/yj3cc24xYh5WHnqEWp2nyRNHXw/5wIs0hXHiUu34PneB2/JtX/n/REf + PvihVrchiE/u+emrd9C8/3iYpeeylIt0gbEVt8hFEzcXeRlkpRLwGYBkmS0objdPVwrmKQuTy58LCcii + VeswEDNoQvIyUu74c/fwxiv3N3jp+QbPXnvh9OXrmOy6BvW6DENGx/qwJeXEyUhDz3/0JrweEtpXg5lN + Crx664MvX7/RNSgFM74mGYuTMiwhvfTc4BO/UDV6vouEQrzdmm3BqpL8tOK1A0z2dEXpf8uhQos+6DWG + N185jEfP2Dt6Idujy8Yrxoab2caEHXtT6jJmVJfkfhc4B5C2dANfNd+F85rB75HfWxlInKFTicZ9UKPH + BKQr08BYMuPsegU0GDAda84+Q92+U5G0cM2AycGn69qQFZq/ZqfU9dfs2o+yNOksyGqZZyTrnZase8Zi + sMzrRJPVBYnYLSXCs/IwJ8KbpaWJnSw/LBLkQAqHWmjZZyxW7NiH6zRJ3/l8JG/CF2/evJMuP4+377H/ + 5CUMn7kYFZv3QSLO7nN/ObuzHOvGQMIHRgL72jCPnxknL1+Tch93MZqnL45EhashgV0VJBLCV5Ut1rji + YZWZlGYaezlDIQndV7ZpLwyfsUROWnrm7iHNVg+l2eallGe5KYu3DKvffQSyOPEWXrHjuoUWXMbmMqB1 + ngrb1XwXzmsGv09+V2XAIU6iNI0L1+qIGhQGsItkWGpqOA2IEycbLrxCu7GLkbQod9fxxDHEmNyzbp6G + 3HTe/TdFQZhzjzt5DQlo0iak+J0tPC8CMcvM1r2I4eTeBJmR3ak5eoybhRXb9sL9zVt4f/iIdx/4qDDy + JPhYcSL/5v1nyB2diULV2siGktw/wJuA8GeSiUuurkD1I8dkJCSSmyfNh24jZ0pHYLfRMygE4oNSq5PC + rEAeFylVzpMkzon4WUqjapu/MG35Rly9+1COW3P3fIdXHBaRd8SLoXbwkuLprqjSuh8yOTaQJcOy3Jav + XTTOh0QFeGtwtv7GI8I4BtByXjP4vfK7KgOFclZsjhq9JkovALvSfOGY7DmrtMH2a+7oOHk5slRqAcvc + 5X9cXCYgx6BE+ER21YX0rADM0hPhk5FCSJANlsnyoViDTug6eiZ2HrsgtWreQpwbVN4S2b19P0qVYNnm + PWjcfxwKVmkLy1QFpNzHa9y5vCcKp6ALgaygKsEVK0DXMAG59EnIuzLPVgb2tTrAz98fa/edQFyK+S0S + ZEQystZNeo8iL2sfKUxfOU2JG394g03FQ9q4/6g05VRo1QdJ6RpxJ6RsDML7KP5Blj4wFPLzvoDcA0Bz + XcN34bxm8Pvld1QGCmUsVce/Zs/JKNm8H8XrbOUp1qeJk5Bizl2332Hwwl3IWbkNLMiSMAkT2pM7n78q + zLKXR9w0RWGWOC/MbDNRDFoSBWu0x6i5S3H+1kMD4Ql8hiBb+fe+n3DlwSM5H5B3qUlfqi65sYWI8EXl + 7H4mPPcUWNH7W+UsC8ssJWCVkcBr5NXKJ4bCkKVXQPE7V0kkB1IEFgmzIWG6fHj//iOuP3iO5Vv3E8k/ + 4MOnz3Kc+ocP/lI9cfd6h23HTwvh87m0lkVQVhlLwZJ7ICjk+t0NN9EFvLZFRX4Ge9gavgvnNYPoIb+6 + MlA4lX2VGzX7TIJjm8FixfkCcihgQeQ88OA9Rq84gCINelLsXhRx01H8npjc+fjpZUln2Ra9pY33lecb + OQLc75O/1PY/+X2Gj58fTl65iZEUn5Zq0AFJ8jrDMm0hWbprlY1bdtlKVZL3lJ1iM5eU0mAGx8ao0eEv + jJjmisPnb+D87fuwylrOQJxAP3T0B3stfIgpKbX89P2zO8IyTXGYkXcUL1VBFK3TEV1G/YPdJ87D19cf + r7y84en5AT6f/Og6foM3eUurdxxGk37jZJsvDgMs+Mj1TKXpmlWQMp9sx/7T+/6ZYKvPGX/u/DOuABTX + n+a5iJrvwnnNIPrIr6wMFLLNXuJ0rT5T5KxALvPxhUxAFopr7q7H72PCpjNIXboJEud0RJO+Y8hFPSQ9 + 6v6fv0vSijv4uGnlE/2998QldB01HUXqdYZ1WjtZmWbBVpwtFBGeN4KwyFFR1qlbpS2OhOT6FqBQY9Df + i5DPuRUePn1Nlo/CA8I7Xx9Z0cb721tmKiM188A/eHQFJ0zj5XGm61kelhnIQqcpjMR0X0mySCNmLMWJ + qzfgRxb9AylJP/+vZOm/0HX8gscUEs1ZvQWV2g2GdfpiMIufDeaJCsiaB4sc9NsQ4RNwFSW2hUMRBHf5 + MfG5ZM0LfxJRSBqY/CxqvgvnNYPoI7+yMlA4TvJsi2r1+Rt1CFbZydJyBxlZWwuyxqNWHsKTt5/x+es3 + mqSfZIEKT1QmPK/NX733ALqPnSnNIuYUt5olzgXzlA6GTj2y+NZs9cid55q0Zc6KsMrihOodBlEYsA77 + Tl2QI8e51MeZ/y6jpmHtjgNkBX3RqO8oZC3fCBaJs5LFIyVCCkM2mND58X8/mIzccEPflwgfjyYeNy4l + L1xNjkz7Z/E62f+AKxzvfD/C249c+49++EDx/vlb9zBq9nI41GoH28zkGcTPQoTPTxaeCE9xvBC9sJL/ + IMRILyjywYRXlvk6dxolWX7+27jzD+M5Qdx+taj5LpzXDKKX/KrKgF2cZNmnV+o4ErXJC0hetLa4lVxy + MqNJ3GHSCrzx/w9fv33HjUdPZEurxj1HIxE3p9gQ4RPkgFlKsvQ5yKV3qIZEBOnio4magFxfC4rfm/Ya + hb3HLqJ0wy6Il7Ek1u05CjevN3j++o2sUlu8eQ+qtxuEhNnLYoLrv3j/wQ/J6fWskmRDptJNMcl1JcxT + FZWONr3J8DsgFj4vhS+5eFNOR/le3EPfeuAE8AnJXIrjDTA93r3HG+8PskEHL87Zc/QculL8XqJeF1Js + +RA3UVaYJy0kzVJ8mAq35iYo6CLLepWKiwlBEL5BD9liPlE+J8RJVwhx0tshTpaSTPwxBDkKLLCo+S6c + 1wyin/yK3YTs4yRK37ZU8/6iANKUriert9jiWGQphZp9p2LvPV9U6zEZFklpslL8b5a6KMzJHTXLVhZm + qUqIErCIn5lu09Pj5AGkLwrrfBUlNrVKXQRP3T3x5LkH1vMW0qkd5IjuwrXbIyu9l4e3NwZOnk+hAlm9 + tEWkY433Azh16ZbkFD5zaEEuMh82wl2DepMjymFMrElbLVlla96plzwaPvKKk3Eb9x3FgycvxJvx8PSm + Wx8JY3hF5O6jZ+Q5OSs0I8tO1p3zJ7xsN1M5Q8KV43dp8jHkCUwwIFSEZ6Qt6BEndd7dfNANb3VP85mN + JifT2Yv+SdR8F85rBtFTono3IYc4CdI0tKvTiRTAVOSs2kZcWc5YW+Qsh9JN+2HPPR+0G78ESexqEgnI + sttVAR/blaJYTYyetRKHzl+TLPWnL1/gS5auQfeRsExbAuZksW0zlIDbW29ZK87tw9w2zHvXmeciBZGx + mCS5th87Q1aQ4txs5ZChdH1Z/857yp+7Qu7x3OVo2GcMLPM4SWLyl4UB9F6GbcqdEC+7I5IWqCSbjnJ/ + wlryYDjp+crLCy893sGTvpfn2/eyRfly8mZaDJggIZFF4hz0vQrCTGl7ZsVKlj0gl2Fy5wMQAcLrzWkG + h9B8WpdG1HwXzmsG0VeiujKQP2fFFqjVawryVe8Aq3yGkhtv7pi1QgvsvPMGnSYtQ7qyDcgCVhQSWuWt + IIeE8CKVjx/9cevRcxw8e1Hq1B7vPiJh3qqw4gSfcxu8JSs/a9VmIcvOA6dglaqI7BxkmawgfP388eDl + S5gnzAGrglWRML8zPn/7hskL18LMOiHi2mSiUCM94ibNR1azNLnGUWQpyfVml17q59mdiPCVUalVPwz/ + ZzGFL2dlE5MXbh6y7bYbWXk+5urKnfuYvnQDanQYhPSl60qzkwWFQ7yoySwXEZ7jdu6VEKJz4i7Qe/7B + CD3hCzwMJeH1kI6gETXfhfOaQfSWqDxnoFC28o0/1+o9SXZQ5XUA/CPxgpokhath+01PDFqwA3lcOgTs + 6c5eghW57ZwQXLx5L8xtk8iCFi5XffT/JOe+WSQvjBaDJsgef+kLVpTNIznZV7xJT7L2pYgwebHjxCly + 8T9T+JAOlnldYBYvJb58+w/Ltx2COSmAZMVrSiPRc4+3Emqo9wEIPwwJO96CW47WyukkbdD1ug2R04pP + 8h52RHYBEf+lxxt4vHmLQ6evYNiM5ajZfggS5+OzCQrCInUxSVBaUAzP/QzmaR0oPCpvInsghI3wedbF + SZZlQBzrBHyir958DQ04FIg1HgBLVJ4zUDiVXZUbtXpPRJmWf0mcq/xw1hmKY8tVd4xYuh/2dbvCPGdZ + g+ta0IUInF0y2+zGmyfICrP8VZA4fzX4ff6MnSevwDJhRgyftVzae0vU74CJ85biyQsP3Hj0lP63oKwH + mLN2iyx5TUOuvwWFF7wUlluC/UixfP/6HV95q6zv/8P379/BJ8vGI+KpJ1ZoIWfk0evLKT25KiCvSxu0 + HjQe89dsxbHzV+VzcULy6Wuy9ET6V6Rw+Ljt0TOXoBy9r22mUkR2su7pS8AyY0mYc3suKThexmyRpyLM + UxaS7sYTF64Y2ni5c1Hnc/wpCEx4rstHMeEVMPHZY441OQC1RFVlwD5pPqcb3A5ctdt4IomhHZjdVi5p + zd5zBVO3n0fp5oMl6y0dbXYuZOELYsfR87Jdl7lNOgodKpOVTiO5gJNX78MiYWrsOXVFNgbxohiZ24Dd + PX0lG16p9UBSGlnQgzyFT+TyZ3dqIouI4tpmJmvri2///Q+PX3pi5KwVKN2gJ6wzlYAZhQxWnClXTbTA + MCxY4r73SrIjDi9jZre+RMPOkmBcsHobLt98JJtV8s7ET16/IkvvjheeXli3+6g8x75GG9lfzyJ1Edm2 + m626BX02Cy6RFnSWdRBtBk6U7zHVlUKVZIVgljALXlCIw4d/mCXITdfnz1IAeoQv1bQvcjk3R/LCzlFJ + eAZzIjuB82W6xFdEzXfhvGYQMyQqKgMOcVLmXFSdfrTqPScEKADZACSnI4Yt3Yt5e6+gQruRsM5FHoDU + o8ldT+2AqSs2kQvvj6wVmyFuzkows00vPQK8dNcsYQrxEO4+fYWxs1bDuXV/5K3eDn6fvkrHm3n8tHBq + 2V9c/tlrdsI8YynETe9Ar18Nca0TE5LR62VB3LSFYcbLkXmNP70vr4GXMhl7IpysI/BCId7xlo+fSm5f + EyUaGAi/ctt+2aGYNwx5RLe8PdnTV+64ef8ZXNfuQKv+E5CNrJJlanvDhiPclpuJXHpSGglJyZmnL4Xu + Y6bj7PU7SFi4KiyyOskOPNXbDZQWXW/fD6jSbjCFP+mw99Rl2abLPGFmw/JdIzliI34z4RnsDWckMB9C + LWq+C+c1g5gjkV0ZYAXgyicEVe8xAalK1AnoKefae8dJK7Dq9BM5I8Cad6AxTgLucOs1fo7s9JPVsSmR + ID1sMxQkBfAZu09fJ68gqZTwNuw/SX+nIWIVJeuYGQ+evyR3+zWyk9KwyOKIBGQtZc+/zPQ3uc62hV1g + a18N8YvURRKHmrJtFj+Hm2J4KatlbidYZiOXnN6fQ5QEeSrJUWF86MT2Q6dx/9kLIT2fxfeQ3os3Djlx + 8TpZ6zWo03koclRqQkQvBkty562yENnzlJM+Bt5Mw7F5L/SZOIcsfnEkJCVjQZ+Lv9+7d77iIUhWn56b + q0IzUQC3Hj2T8l+CjMXQc9xsUm5fYJuVux5ZWWlJE5PBLbaZyzf7nYTnrD679lzfD9bKBydqvgvnNYOY + Jaz99C5UeOAQJ0nGTnxGACsA9TbgvLMrnxGw8uRD1O03Vdaoywozmtx81BPXt7lDcOnGPRgzf6UcU8V7 + 3FdsMxiZnBri09ev0uhjlsLBsPEFxdLmSQoYDsBIQ641xeM2BclVz0sWk1+7EFv3qkjkQLfyXlVgRiQ1 + S8UHg+RCXF4SSy54jY5/Ydqy9Th/7Taeu3nhISmUx8/cZSsy3pJ8x2FeErtYDqdIVawOrDPy7jhlYEXk + ZQViQZ/Dliy5S/uB0rXHLv7p67ekCYm3HTdPnINCmkqwJQX10f8Lbt17ik90P59+bMY5gPiZZBPO+w9f + Sniz9/gFVOswAL4fPyF7hcakoGLq2gUDFMLzYhpeVPMbCK92639K5oVX1HwXzmsGMU/4AuldvLCDFIBD + /a7gDULVZwSwe82nBy0/fh9txrpKsk459YbLZpnKNoIPu8JEDt7Cm/f2H/7PcsS1yQjL7KWJyNUpFMgF + M7KK0tbKpCBrnpD+ZmsvqwvtiOx2ZOUdqsGSk4tEVPPE+SkEyAgz6+SwyVIajXqPxbpdB4noL/GelMwb + 73dw51q851vZLWjN7sMY9c9iVGrRG0kKVJAz+KxzOMKa3ldWy2UpKX9bk2W2zF4Wo+csk5wEly0rtOhL + nklW7Dh2nkKFZ/Cl72LLn4HeN7NjY6l0TJj/Lz74fsKekxdhljQPKbAcsgfi3FU7MHo+Jzo/YPnmfdL9 + 13vCLHqPMsZuPi2xoiuiEeG5iYdzXVEiar4L5zWDmCeRWhmQMwK6BzojgOLuQrU7Y9mJu+g4cTmykMXn + jDo/ZpuXvABylQ+euEAEHYmM5RoiLsX1Zknzk2UvJ2GEbR5SIvS8hPZEePofKY9JfdyFJp0L4hWqBHMi + i1nCAohLcbRZvKRIWayGnHW/cf9pw7oD8iL8v3yV8iJb2Pc+n7D1wHH0GPsP7Ku3BW+FZZWhpFh4XlXI + y2z5PVjBWGQsDteNu/CIwoIidTvJpqO89p6t9Zt33uIxrNh1gCx6Kuw+dpks+nNJ7mUmxWaWJB96jZsj + ZcrEmRxw5eZDcftzVmwFi0Q5SRmcJ2X0ATYpcuDGncd4+MwNj5+/Is9jmax4DLiG0RDRgPAMLm1zrT5M + cXxERM134bxmEDOFlUCkVAaylG1AIcB4FG+iOiOASJyeyLDk2D0MmLcd+Wp1lLyAPMatvkQ4CyKUWboS + MOdTeYjshsUrhn72hPQc3sMuQcHqSESEt8rjTGFASdn228wmLcxtUyGlXU10GzsLRy7flCYg3v7687fv + sj8egy3+6p2H0bDfKKR0qAmL5LlgxevgufbO4NJcGnua0E3hULM9kb4Yfa7y9BmcZSGRNxH62UtPbD9y + BuYp8ktXXu7KLeBDFv3G3Uey5j5ekixyYOXJS7dIAXAfw1xZmDN75TY5xyB1vgpYtH6HHMjJ25xbJMmK + IVNdwceVJ87hhAxl6+OFxxs8fPoC6/cdgRWFDgHXMBog1IRPk/9KFBKejdUvJXxgUfNdOK8ZxFyJlPJg + avsqV9gD+OmMAIr5lx25gyGuO+HQsPcPBRAAtuhs4Yn0BZjsBCJ7fJpY5hTjm6UoAjOymLyzrUXiLChQ + rQ1GzV4hx4T7E8HZunPP/2e6ZcK7e3th+urNaNxzJL1eBVjEzyCdghbkevMeBZapHGBJMTzvMDx4miu2 + HTxBcbgvvMgl5x78S2SpLbh0l7s80paoQwT+KKfP+vr6waFeJ6nlcwzPlp1Pt+VNOMo06Q4/v89o1m+s + KAA+jozPJtx59Czcja2+nj4+eOH2Rnr9yzfvhQ5DpsDj3TsUpO9jSUqt7V+TSQl44uKte7DJw9US9TX6 + tQgT4VPlcuVzIvXmRAShZOojlLiLTFHzXTivGcRsiXBlIGl+J1EAXA3Q7g7rjKmbzmDy+hNwbDFY1SdA + Lr3yHF7UQs8zz+kki4EkTibiWqd2gFOLPpi7didu3n0m1t3/63dy7XntwGch/tV7z7FgzXaUb9kdlikK + I441hRE22WGW3E6OyubVclapCqB4gx6kOJbiwOnrskloHprM3DTk5u6Fi9fuY86/W3DrwTM5VSh/9TYw + I++gGBGejxxr+9dEseRP3Dwofs9Gyigr3vl8wKSFa3DkzFUcOHFe1h+Uo8/KjU07j52HeZJ0smfhrfuP + MH7BKlRtNxj1ug6RvQzP3bgrJ+DyacRdR0yX7knrnGVRpkE3JCHy/eqFSybCh07UfBfOawYxXyK2pRhN + DFYADMPEcg64/Wvhdkzfcg6VOo2SFlq+nz0DqzwVYZW9LCxTFhX3OqVDLTTvPxbTl23GU/e3hhjenzcM + +SyE5xV+V+8+JQIvJcvJsXQOImN6mCUgDyGdA8zIcseNnx02FFokcqiN9KXq4fFrN/h+4rMCP0qVgY/F + WrFtPxJlKQ0fst7LN++XU4UtEmZCvS7D8fHjJ+So1Ez2JuxBoQVb+kTpCmLllgP4RK9Tqc0gCj0y4cD5 + K6IUyrfsB4+33tLjX7PTX1ixdR9eerxFogx2eOPti3mrtkqIwceeWZPnsXLbAWw7dEbCCO5OtM5RXtqm + ZdNN3kuBS6jGMmpUIZoQXinNRWqmPipFzXfhvGYQOyT8C4doonCNlxUA76mmTDZO5nWYuAx8ViB3C9rk + qkhwQrxspVG0bnu0GTgOrht248krT3i/9yGifpAFQn5+/lJC23v6smwakrZ0ffIKUsMsYXayroXIS3AA + n4XPnoJVFj73vizMkuSVvQPZMzh47hqsEmeE7wd/8hIeo+fo2SjaqIssKeZtsSwSZxN3nTcctU1bGGWb + 9ZQVh370ngnykTeSJB/+3X2UnuOH3ESMeWu3yaIeLhlaUDjy15RFUsJMnrOkhA4eb96hee8xWLB2Ozzf + v0dmxwZwf/ceA6cskFwHVzB4mbN1Tj5lx0kOT+FwSOstRQ30CF+u1WDkr9YWaYpWh2XmoibCh0LUfBfO + awaxR8JXGaBJw70ArACkF0BlxbgXYNHhW+g7dYUc+byKLPBDOQPeDU9eeuClpye5xm/w5IU7lm7ei2a9 + xyJn2eZE0syEvETG3LKizzxVEZjnLicNPuZpimDl9sNCWN4/0Ixcc3PbtNJNd/PRE4q/L5C7nlpIzgeR + WCTLCMvkuZGnaku0HvS3JOJOXbxL1vsdue/kHZDrzhuNVG4zgDwCei/yLvacvCC5gfdk6XmTUt6Yg5OK + ldr1Q8v+46UUmKaQC7YePIW373xQqmFXNOw+EovX7URO8iIK1mgjvQPS2KMiZFQjmhBeXZqLkYQPLGq+ + C+c1g9gj4SsP0iRyqMe9AOORrVJL1YR0Rvk2w7DmxAO89HqPu09eUFz8VA6dOHruOqYs/FfWwGcp3xiW + qYvAOk1RWGQtCQvZ4cYZNuSSWhOJxs5bjW1Hz5KrngfW3OCTKB82HTxNpPUWS1ygRntZDchrC67feST9 + BRYUh285dBYenm+wbOsBybpzjM599xaJc2Lljr1krX2lTn/++h1pPT5x/hqFJPbkWaSXZp0zV2/KJqMp + CldD2iLV4e3rR57AOxSo2Zae74O63YajeN1OaNJnLBIWrkSEL494ufiILfJ02MJHsTvPiIaEj7Ja/O8U + Nd+F85pB7JJwVQZ0ewEIBet0gSt5AMevP8Ts1TvQsNsIZCpVX44M4/Zguc1WRjrqrDkDn64YLLKVkriY + jwTLV7U1PhLJPxAhq7ajGDxjSZilKIhuY2bijY83nj33xPJt+xA/bSF8+PgZ63Yfhi+ROWFGO0xZslGW + 5L547YXLt+5j2rINaNZnjFQEOMZni56qUBVYJ82OE1duilXfduQ0bFPmFO9hMYUnnEzkY8XN0xWXgy8n + LViNHOWbg48us8hWVvbyk/4BjuHp+wYkNyMbKmXCXhZvZMkHsJgI/2tEzXfhvGYQ+4R/VL0fPkhwLwAr + AIcGPTUTN2O5xnA9eBv9525BXj5AhBNeNJk5/rXNz3GxE/pPmo2HT9wobvbGvUfPpTHIMnNpmGcqhaa9 + xwkZnzylxylO5yRc3JQOcG7Vjyz+JxznXYX8PiNr6bqSxZ/mukay9FlKN0CXkdPIS3iLQjXbkWUvAEv2 + MIjIvDzXuU1/ad/lhT9c80+YvwrF8u/lNU5dvEaPfUCjXqMlUcnHlFnlqih76PPmp1a8F8AvsO4KogHh + GUrzzR9B+MCi5rtwXjOInRKm8qC2F0AV95Ir73rkFoYs2omiDXsjft4fj8UjD2DUzOVSI79z7ylOXL4O + T4qneV29ecYSsEjjgC7D/iHL7o+xC1fLll8N+o2S7r+M5ZrC/8tn+v+V8PR+L2fhc4tttXb94UWv0bDn + SBSr1xmv3N+i0/C/KbwoDIeaHdBvwmwM+nsBstP/s8Wfv3aL9PSbZ3ZEjopNMHjKQiJXa3lvi6yl5Zgy + xaobbqO+TTdkwhf0i5Mm3/E4KXNO/wWE/23NN9FJ1HwXzmsGsVd4AuhNjp+QxNgLUKH9cM1kZks/eeMp + TFl/Eo4tBwe0A3O9O0khZyH/6Us3kSALkTBFfmzZdxRjZ64gQhaTOv7+s9ekHh8vSRopDXJ93TI5WfPE + 2SUJOOwfV/EC7j1+IWfdFSFr/8rrnXTbZS5Rl9x/Txw8dQnPXr2REp37G2+69ZKzC7YdOiUNPLyij70S + PsGIE3d84AhvPcbZ+yhz6VVKMkyET5S2md71jwSYCB+MqPkunNcMYreErjxI7me1HuNRrccE1SQnoudz + xqCFOzF96zk4dxpJ4x/bhhWr2xmvvbzQffR0WGQqKVl+i0yORP6SsCSXm2v9z155YMuJ00iYOh+27Tsu + i2Z4MxDuDuQdg5Zt3o863Ybj2Us3uBHBs5WqQ1bfC+t3HYVNpqJ48tpNlhCfvHwDf7uuQ90uf8nRYlbZ + S8OKwg+G0qHIW5pHlYVXl/yiCeF/e3ttTBI134XzmkHsl5ArAylzuTp3NvQC8KYPAZOfiN5x4jIsP3qX + JvsE2RyU7+ez/+1rt5caevfRM2XlXYLCZIWzVyDXuxShBJE8rWwS4vH+PT76fZJjrzy9eUWfL6wSZ8LG + A2dkY41EGRxk9yDecNMqfSEcJa9h2ZY9iEfxumPj7sjgWI/+Lot4OZzkfQOab+QzRq1Lb0vvFY0IH627 + 7aKzqPkunNcMYr+EXB407gvACoAnfAAByLpyL8DyYw9Qt/9UJLJ3kft552C76u0oXn+PaUvWwzI1nwng + DOuc5bBswwGptacoVI3c/q84feUW/l68FmUbdcfM5Rvg6/sJzfuPwRTXteIFJMhcHAv+3Unx+wIiuaNh + Oy9uOipg8DaY7L+i6UZBAOFbGwjv1OovE+FjuKj5LpzXDP4MCb48yL0A9bvJOYHcC6AQjuvh5doOwcqT + j9CO9wUoyfsCVEA8JmXmMtKEc/3OA3L3M0sHXoFabSXWHz1zGexqtMHHL1/h0ro/PZYD5qkckCB3JcnU + Hz57WTyIsk27wyqrI6xzk3WnGJ7PHwhMyMhGgDIh6863Ggvf22ThY6Oo+S6c1wz+HAmqPOjAMPQCTJBe + AMXFZhc4b/WOsjVYp0krkNmpmezBl6BgZSnL7Tp1Tlpu563ZRoTuLIk6XgOQunB19J04VzL/DnV4W3Gy + 5rxMN1tZWKbnbbmKw4pcellg9Iu67XjDUCZ/YJe+UsfhPwif6ZcRnttrTYT/RaLmu3BeM/izJKjyoIOh + F2CiHAnOcbaQhm5TlaiHdedeYNDCHchdrT2syT2XI8SyOUr9nRtyuPOOjwj3J8Kv2roPZgmzoW7P4chF + SoX34ePdhJQyHN9ywo6VSGCSRhZkUxLxJiiGL2MgfFkh/GRU6jAcdrU7IWOpOrDNUdJA+NS/hPAxup8+ + Joua78J5zeDPE93Vg8kKOJ2o1mMiqnYZi2RFakppjQnEGfeNF15h+JI9sKvfA5a5eYFMFSJ1ZdknzzJ9 + EbQcOAEDJyxAyiLVYZayEMyzlIJlHm6rJfBWYlG+TZaisH5YeCZ8rd6BCV8KYThmKiIwET4aiZrvwnnN + 4M8UnpxFCT8mbZIMnUs06SMbhJZo2k+sNpPKOrsjZu+5jH+2X0Dp5gPInS8jCkAsONffefMPIry0+fIB + mvQY7/0XVZtjGsITA/jv9I4NDS596yHi0jsL4TubCG+SAFHzXTivGfy5EnhzUYekBZyO1+g5EdUJvEko + VwGsc5TBqOX7sXDfdTi1Hy5lvp+IyQqBbg21+ECPRRKU9l228AXFwv8V4NLb1zFZeJMELWq+C+c1gz9X + ApcHHeLYJq+RzamRPysAtqbpSjckBeCEBoNmYvMVdzQcOBOpStSXLbYDEzSqoE3a6br0nirC15TvoSVr + ZIArKCbCx1BR8104rxn82cJKoBBBmegOcZJnG124VkewJ8BHhnE+wCpTCUzdckbCAJdu46TlNl7eH1uE + RQzOssjoh4VviNwu7QLq8GGI4SOT+H/cirnYLGq+C+c1A5PwBLcnKJPf3jKj3V6FgGx1M5RrLDv7rDr+ + EL1nbZA1A7wfXjxjniCs4D6C+LyuIH/FAMLzCcU/ET77L3PpTYSPxaLmu3BeMzAJi7pRiC2pnUUm+6dF + GnRHzd6TUbPPJFkqXKJpX6w+8wTNh8+Dff0estou5KO7K0lDkSTv8jsjRcl6RsIPhEuPcUT4EbDTxPCq + PelNhDdJJIia78J5zcAkinB8q1QGHOJY2ZaNkzr/85wVm6NWnynSJVel21i0Hr0Ii4/cQ8uR82QXmwSF + q8j5evHyGlp2uZvPNh8f2kljIn76Mg0ohu8KxzZ/oXbvKUbCq7P0Qvj1UbQnvQIT4f9gUfNdOK8ZmEQt + rAQU0tjHsY7vGCdlnr0JcpdFqab9SRFMlhWD9QZMx4ztFzBw/nZU7z5RtrTiECFF8dpIx1n62l1Rrs1w + 1O07FVU6j4S9uvEmbb7Ap85IJ6LqfSMDJsKbJEDUfBfOawYmCSzcovrDE4gTpzCRtW+cNAW+xM/tiLxV + W6NMy4GoRfF6k7/moNu0f1Gn7zTU7TcNNXtOhGOLgbCr24UIXxfxJIbXHDPlZHzNwISNDJgIbxJdUfNd + OK8ZmERPuOSlJhd7A2XipMg+Kk6q/NfjpCmIOKkLwDKDHRIXrMhbWhEKMNnpNt9VFeHL0f8y4TnJGNnE + N22CYZJQiZrvwnnNwCRBSVaCmnAKkQsTCsVJlLYRkbx/nFS5XQ372WXqaHxcIbuJ8CaJFqLmu3BeMzBJ + cMKk0yOjAoXwCun1nhNemAhvkkgRNd+F85qBSYKTwN2CUQkT4U0SJaLmu3BeMzBJSBJVSsBEeJP8ElHz + XTivGZgkNKJWAtpVhKGHifAm+S2i5rtwXjMwSViES4R65NYDKwwT4U3y20XNd+G8ZmCSsAp7A7yVFZNb + D0x4fo5JTBItRM134XzgO0wwwYQ/BYjz/wEe3iD1R5/3agAAAABJRU5ErkJggg== + + + \ No newline at end of file diff --git a/MovieFinder.Viewer/Forms/FullscreenPlayer.Designer.cs b/MovieFinder.Viewer/Forms/FullscreenPlayer.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..60815efa138469833cdfbf3838a637eceda3ca54 --- /dev/null +++ b/MovieFinder.Viewer/Forms/FullscreenPlayer.Designer.cs @@ -0,0 +1,51 @@ +namespace BlueTube.Viewer +{ + partial class FullscreenPlayer + { + /// + /// 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(); + } + 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.SuspendLayout(); + // + // FullscreenPlayer + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(284, 262); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.KeyPreview = true; + this.Name = "FullscreenPlayer"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.Text = "FullscreenPlayer"; + this.WindowState = System.Windows.Forms.FormWindowState.Maximized; + this.ResumeLayout(false); + + } + + #endregion + } +} \ No newline at end of file diff --git a/MovieFinder.Viewer/Forms/FullscreenPlayer.cs b/MovieFinder.Viewer/Forms/FullscreenPlayer.cs new file mode 100644 index 0000000000000000000000000000000000000000..eae9404d1ac75c420fb3175fe67714c448a6db8b --- /dev/null +++ b/MovieFinder.Viewer/Forms/FullscreenPlayer.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace BlueTube.Viewer +{ + public partial class FullscreenPlayer : Form + { + private Control player; + private Control parent; + public FullscreenPlayer() + { + InitializeComponent(); + this.TopLevel = true; + } + + public FullscreenPlayer(Control player) + : this() + { + this.parent = player.Parent; + this.player = player; + this.Controls.Add(player); + var tp = new TransparentPanel(); + tp.Dock = DockStyle.Fill; + tp.DoubleClick += new EventHandler(transparentPanel_DoubleClick); + this.Controls.Add(tp); + tp.BringToFront(); + } + + private void transparentPanel_DoubleClick(object sender, EventArgs e) + { + this.Controls.Remove((Control)sender); + this.parent.Controls.Add(this.player); + this.Close(); + } + + + } + + + +} diff --git a/MovieFinder.Viewer/Forms/FullscreenPlayer.resx b/MovieFinder.Viewer/Forms/FullscreenPlayer.resx new file mode 100644 index 0000000000000000000000000000000000000000..5ea0895e324fa7a86681adc56938bad2f2367ba0 --- /dev/null +++ b/MovieFinder.Viewer/Forms/FullscreenPlayer.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/MovieFinder.Viewer/Forms/MainForm.Designer.cs b/MovieFinder.Viewer/Forms/MainForm.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..5b2c65553894c8318c8b68df61eec4ece9546ed5 --- /dev/null +++ b/MovieFinder.Viewer/Forms/MainForm.Designer.cs @@ -0,0 +1,536 @@ +namespace BlueTube.Viewer +{ + partial class MainForm + { + /// + /// 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(); + } + 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(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); + this.toolStripContainerMain = new System.Windows.Forms.ToolStripContainer(); + this.kryptonSplitContainerMain = new ComponentFactory.Krypton.Toolkit.KryptonSplitContainer(); + this.kryptonSplitContainerSubMain = new ComponentFactory.Krypton.Toolkit.KryptonSplitContainer(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.headerFavourite = new ComponentFactory.Krypton.Toolkit.KryptonHeader(); + this.headerBrowse = new ComponentFactory.Krypton.Toolkit.KryptonHeader(); + this.headerView = new ComponentFactory.Krypton.Toolkit.KryptonHeader(); + this.panelViews = new ComponentFactory.Krypton.Toolkit.KryptonPanel(); + this.labelLoading = new ComponentFactory.Krypton.Toolkit.KryptonLabel(); + this.statusStrip1 = new System.Windows.Forms.StatusStrip(); + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.applicationToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.quitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.playToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.pauseToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.stopToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); + this.nextToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.previousToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator(); + this.fullscreenToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.gotoWebsiteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.reportIssueToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.helpToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripSeparator(); + this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.kryptonManager1 = new ComponentFactory.Krypton.Toolkit.KryptonManager(this.components); + this.searchPanelWidget = new BlueTube.Viewer.SearchPanelWidget(); + this.viewerWindow = new BlueTube.Viewer.ViewWindow(); + this.browseWindow = new BlueTube.Viewer.BrowseWindow(); + this.favouriteWindow = new BlueTube.Viewer.Views.FavouriteWindow(); + this.toolStripContainerMain.ContentPanel.SuspendLayout(); + this.toolStripContainerMain.TopToolStripPanel.SuspendLayout(); + this.toolStripContainerMain.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonSplitContainerMain)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonSplitContainerMain.Panel1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonSplitContainerMain.Panel2)).BeginInit(); + this.kryptonSplitContainerMain.Panel2.SuspendLayout(); + this.kryptonSplitContainerMain.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonSplitContainerSubMain)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonSplitContainerSubMain.Panel1)).BeginInit(); + this.kryptonSplitContainerSubMain.Panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonSplitContainerSubMain.Panel2)).BeginInit(); + this.kryptonSplitContainerSubMain.Panel2.SuspendLayout(); + this.kryptonSplitContainerSubMain.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.panelViews)).BeginInit(); + this.panelViews.SuspendLayout(); + this.menuStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // toolStripContainerMain + // + // + // toolStripContainerMain.ContentPanel + // + this.toolStripContainerMain.ContentPanel.Controls.Add(this.kryptonSplitContainerMain); + this.toolStripContainerMain.ContentPanel.Size = new System.Drawing.Size(1097, 591); + this.toolStripContainerMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.toolStripContainerMain.Location = new System.Drawing.Point(0, 0); + this.toolStripContainerMain.Name = "toolStripContainerMain"; + this.toolStripContainerMain.Size = new System.Drawing.Size(1097, 615); + this.toolStripContainerMain.TabIndex = 0; + this.toolStripContainerMain.Text = "toolStripContainer1"; + // + // toolStripContainerMain.TopToolStripPanel + // + this.toolStripContainerMain.TopToolStripPanel.Controls.Add(this.menuStrip1); + // + // kryptonSplitContainerMain + // + this.kryptonSplitContainerMain.Cursor = System.Windows.Forms.Cursors.Default; + this.kryptonSplitContainerMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonSplitContainerMain.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.kryptonSplitContainerMain.IsSplitterFixed = true; + this.kryptonSplitContainerMain.Location = new System.Drawing.Point(0, 0); + this.kryptonSplitContainerMain.Name = "kryptonSplitContainerMain"; + this.kryptonSplitContainerMain.Orientation = System.Windows.Forms.Orientation.Horizontal; + this.kryptonSplitContainerMain.Panel1Collapsed = true; + // + // kryptonSplitContainerMain.Panel2 + // + this.kryptonSplitContainerMain.Panel2.Controls.Add(this.kryptonSplitContainerSubMain); + this.kryptonSplitContainerMain.Size = new System.Drawing.Size(1097, 591); + this.kryptonSplitContainerMain.SplitterDistance = 394; + this.kryptonSplitContainerMain.SplitterWidth = 0; + this.kryptonSplitContainerMain.TabIndex = 0; + // + // kryptonSplitContainerSubMain + // + this.kryptonSplitContainerSubMain.Cursor = System.Windows.Forms.Cursors.Default; + this.kryptonSplitContainerSubMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonSplitContainerSubMain.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.kryptonSplitContainerSubMain.IsSplitterFixed = true; + this.kryptonSplitContainerSubMain.Location = new System.Drawing.Point(0, 0); + this.kryptonSplitContainerSubMain.Name = "kryptonSplitContainerSubMain"; + this.kryptonSplitContainerSubMain.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // kryptonSplitContainerSubMain.Panel1 + // + this.kryptonSplitContainerSubMain.Panel1.Controls.Add(this.tableLayoutPanel1); + // + // kryptonSplitContainerSubMain.Panel2 + // + this.kryptonSplitContainerSubMain.Panel2.Controls.Add(this.panelViews); + this.kryptonSplitContainerSubMain.Panel2.Controls.Add(this.statusStrip1); + this.kryptonSplitContainerSubMain.Size = new System.Drawing.Size(1097, 591); + this.kryptonSplitContainerSubMain.SplitterDistance = 27; + this.kryptonSplitContainerSubMain.SplitterWidth = 0; + this.kryptonSplitContainerSubMain.TabIndex = 0; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 4; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33334F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33334F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 524F)); + this.tableLayoutPanel1.Controls.Add(this.headerFavourite, 2, 0); + this.tableLayoutPanel1.Controls.Add(this.headerBrowse, 1, 0); + this.tableLayoutPanel1.Controls.Add(this.headerView, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.searchPanelWidget, 3, 0); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 1; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(1097, 27); + this.tableLayoutPanel1.TabIndex = 0; + // + // headerFavourite + // + this.headerFavourite.Cursor = System.Windows.Forms.Cursors.Hand; + this.headerFavourite.Dock = System.Windows.Forms.DockStyle.Fill; + this.headerFavourite.HeaderStyle = ComponentFactory.Krypton.Toolkit.HeaderStyle.Calendar; + this.headerFavourite.Location = new System.Drawing.Point(381, 0); + this.headerFavourite.Margin = new System.Windows.Forms.Padding(0); + this.headerFavourite.Name = "headerFavourite"; + this.headerFavourite.PaletteMode = ComponentFactory.Krypton.Toolkit.PaletteMode.SparklePurple; + this.headerFavourite.Size = new System.Drawing.Size(191, 27); + this.headerFavourite.StateNormal.Back.Color1 = System.Drawing.SystemColors.GrayText; + this.headerFavourite.StateNormal.Back.Color2 = System.Drawing.SystemColors.InactiveCaption; + this.headerFavourite.StateNormal.Back.GraphicsHint = ComponentFactory.Krypton.Toolkit.PaletteGraphicsHint.AntiAlias; + this.headerFavourite.StateNormal.Border.Color1 = System.Drawing.SystemColors.GradientActiveCaption; + this.headerFavourite.StateNormal.Border.Color2 = System.Drawing.SystemColors.InactiveCaption; + this.headerFavourite.StateNormal.Border.ColorStyle = ComponentFactory.Krypton.Toolkit.PaletteColorStyle.Sigma; + this.headerFavourite.StateNormal.Border.Draw = ComponentFactory.Krypton.Toolkit.InheritBool.False; + this.headerFavourite.StateNormal.Border.DrawBorders = ((ComponentFactory.Krypton.Toolkit.PaletteDrawBorders)((((ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Top | ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Bottom) + | ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Left) + | ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Right))); + this.headerFavourite.StateNormal.Border.GraphicsHint = ComponentFactory.Krypton.Toolkit.PaletteGraphicsHint.AntiAlias; + this.headerFavourite.StateNormal.Content.Image.ImageH = ComponentFactory.Krypton.Toolkit.PaletteRelativeAlign.Far; + this.headerFavourite.StateNormal.Content.ShortText.Color1 = System.Drawing.SystemColors.GradientInactiveCaption; + this.headerFavourite.StateNormal.Content.ShortText.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.headerFavourite.TabIndex = 10; + this.headerFavourite.Values.Description = ""; + this.headerFavourite.Values.Heading = "Favourite"; + this.headerFavourite.Values.Image = ((System.Drawing.Image)(resources.GetObject("headerFavourite.Values.Image"))); + this.headerFavourite.Click += new System.EventHandler(this.custom2_Click); + // + // headerBrowse + // + this.headerBrowse.Cursor = System.Windows.Forms.Cursors.Hand; + this.headerBrowse.Dock = System.Windows.Forms.DockStyle.Fill; + this.headerBrowse.HeaderStyle = ComponentFactory.Krypton.Toolkit.HeaderStyle.Calendar; + this.headerBrowse.Location = new System.Drawing.Point(190, 0); + this.headerBrowse.Margin = new System.Windows.Forms.Padding(0); + this.headerBrowse.Name = "headerBrowse"; + this.headerBrowse.PaletteMode = ComponentFactory.Krypton.Toolkit.PaletteMode.SparkleBlue; + this.headerBrowse.Size = new System.Drawing.Size(191, 27); + this.headerBrowse.StateNormal.Back.Color1 = System.Drawing.SystemColors.GrayText; + this.headerBrowse.StateNormal.Back.Color2 = System.Drawing.SystemColors.InactiveCaption; + this.headerBrowse.StateNormal.Back.GraphicsHint = ComponentFactory.Krypton.Toolkit.PaletteGraphicsHint.AntiAlias; + this.headerBrowse.StateNormal.Border.Color1 = System.Drawing.SystemColors.GradientActiveCaption; + this.headerBrowse.StateNormal.Border.Color2 = System.Drawing.SystemColors.InactiveCaption; + this.headerBrowse.StateNormal.Border.ColorStyle = ComponentFactory.Krypton.Toolkit.PaletteColorStyle.Sigma; + this.headerBrowse.StateNormal.Border.Draw = ComponentFactory.Krypton.Toolkit.InheritBool.False; + this.headerBrowse.StateNormal.Border.DrawBorders = ((ComponentFactory.Krypton.Toolkit.PaletteDrawBorders)((((ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Top | ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Bottom) + | ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Left) + | ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Right))); + this.headerBrowse.StateNormal.Border.GraphicsHint = ComponentFactory.Krypton.Toolkit.PaletteGraphicsHint.AntiAlias; + this.headerBrowse.StateNormal.Content.Image.ImageH = ComponentFactory.Krypton.Toolkit.PaletteRelativeAlign.Far; + this.headerBrowse.StateNormal.Content.ShortText.Color1 = System.Drawing.SystemColors.GradientInactiveCaption; + this.headerBrowse.StateNormal.Content.ShortText.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.headerBrowse.TabIndex = 9; + this.headerBrowse.Values.Description = ""; + this.headerBrowse.Values.Heading = "Browse"; + this.headerBrowse.Values.Image = global::BlueTube.Viewer.Properties.Resources.browse; + this.headerBrowse.Click += new System.EventHandler(this.custom2_Click); + // + // headerView + // + this.headerView.Cursor = System.Windows.Forms.Cursors.Hand; + this.headerView.Dock = System.Windows.Forms.DockStyle.Fill; + this.headerView.HeaderStyle = ComponentFactory.Krypton.Toolkit.HeaderStyle.Calendar; + this.headerView.Location = new System.Drawing.Point(0, 0); + this.headerView.Margin = new System.Windows.Forms.Padding(0); + this.headerView.Name = "headerView"; + this.headerView.PaletteMode = ComponentFactory.Krypton.Toolkit.PaletteMode.SparklePurple; + this.headerView.Size = new System.Drawing.Size(190, 27); + this.headerView.StateNormal.Back.Color1 = System.Drawing.SystemColors.InactiveCaptionText; + this.headerView.StateNormal.Back.Color2 = System.Drawing.SystemColors.InactiveCaption; + this.headerView.StateNormal.Back.GraphicsHint = ComponentFactory.Krypton.Toolkit.PaletteGraphicsHint.AntiAlias; + this.headerView.StateNormal.Border.Color1 = System.Drawing.SystemColors.GradientInactiveCaption; + this.headerView.StateNormal.Border.Color2 = System.Drawing.SystemColors.InactiveCaption; + this.headerView.StateNormal.Border.ColorStyle = ComponentFactory.Krypton.Toolkit.PaletteColorStyle.Sigma; + this.headerView.StateNormal.Border.Draw = ComponentFactory.Krypton.Toolkit.InheritBool.False; + this.headerView.StateNormal.Border.DrawBorders = ((ComponentFactory.Krypton.Toolkit.PaletteDrawBorders)((((ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Top | ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Bottom) + | ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Left) + | ComponentFactory.Krypton.Toolkit.PaletteDrawBorders.Right))); + this.headerView.StateNormal.Border.GraphicsHint = ComponentFactory.Krypton.Toolkit.PaletteGraphicsHint.AntiAlias; + this.headerView.StateNormal.Content.Image.ImageH = ComponentFactory.Krypton.Toolkit.PaletteRelativeAlign.Far; + this.headerView.StateNormal.Content.ShortText.Color1 = System.Drawing.SystemColors.Window; + this.headerView.StateNormal.Content.ShortText.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.headerView.TabIndex = 8; + this.headerView.Values.Description = ""; + this.headerView.Values.Heading = "View"; + this.headerView.Values.Image = global::BlueTube.Viewer.Properties.Resources.video; + this.headerView.Click += new System.EventHandler(this.custom2_Click); + // + // panelViews + // + this.panelViews.Controls.Add(this.labelLoading); + this.panelViews.Controls.Add(this.viewerWindow); + this.panelViews.Controls.Add(this.browseWindow); + this.panelViews.Controls.Add(this.favouriteWindow); + this.panelViews.Dock = System.Windows.Forms.DockStyle.Fill; + this.panelViews.Location = new System.Drawing.Point(0, 0); + this.panelViews.Name = "panelViews"; + this.panelViews.Size = new System.Drawing.Size(1097, 542); + this.panelViews.TabIndex = 2; + // + // labelLoading + // + this.labelLoading.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.labelLoading.Location = new System.Drawing.Point(52, 45); + this.labelLoading.Name = "labelLoading"; + this.labelLoading.Size = new System.Drawing.Size(98, 28); + this.labelLoading.StateCommon.ShortText.Font = new System.Drawing.Font("Tahoma", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelLoading.TabIndex = 4; + this.labelLoading.Values.Text = "Loading..."; + // + // statusStrip1 + // + this.statusStrip1.Font = new System.Drawing.Font("Segoe UI", 9F); + this.statusStrip1.Location = new System.Drawing.Point(0, 542); + this.statusStrip1.Name = "statusStrip1"; + this.statusStrip1.RenderMode = System.Windows.Forms.ToolStripRenderMode.ManagerRenderMode; + this.statusStrip1.Size = new System.Drawing.Size(1097, 22); + this.statusStrip1.TabIndex = 0; + this.statusStrip1.Text = "statusStrip1"; + // + // menuStrip1 + // + this.menuStrip1.Dock = System.Windows.Forms.DockStyle.None; + this.menuStrip1.Font = new System.Drawing.Font("Segoe UI", 9F); + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.applicationToolStripMenuItem, + this.playToolStripMenuItem, + this.helpToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Size = new System.Drawing.Size(1097, 24); + this.menuStrip1.TabIndex = 0; + this.menuStrip1.Text = "menuStrip1"; + // + // applicationToolStripMenuItem + // + this.applicationToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.quitToolStripMenuItem}); + this.applicationToolStripMenuItem.Name = "applicationToolStripMenuItem"; + this.applicationToolStripMenuItem.Size = new System.Drawing.Size(80, 20); + this.applicationToolStripMenuItem.Text = "Application"; + // + // quitToolStripMenuItem + // + this.quitToolStripMenuItem.Name = "quitToolStripMenuItem"; + this.quitToolStripMenuItem.Size = new System.Drawing.Size(97, 22); + this.quitToolStripMenuItem.Text = "Quit"; + this.quitToolStripMenuItem.Click += new System.EventHandler(this.quitToolStripMenuItem_Click); + // + // playToolStripMenuItem + // + this.playToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.pauseToolStripMenuItem, + this.stopToolStripMenuItem, + this.toolStripMenuItem1, + this.nextToolStripMenuItem, + this.previousToolStripMenuItem, + this.toolStripMenuItem2, + this.fullscreenToolStripMenuItem}); + this.playToolStripMenuItem.Name = "playToolStripMenuItem"; + this.playToolStripMenuItem.Size = new System.Drawing.Size(41, 20); + this.playToolStripMenuItem.Text = "Play"; + this.playToolStripMenuItem.Visible = false; + this.playToolStripMenuItem.DropDownOpening += new System.EventHandler(this.playToolStripMenuItem_DropDownOpening); + // + // pauseToolStripMenuItem + // + this.pauseToolStripMenuItem.Name = "pauseToolStripMenuItem"; + this.pauseToolStripMenuItem.Size = new System.Drawing.Size(127, 22); + this.pauseToolStripMenuItem.Text = "Pause"; + // + // stopToolStripMenuItem + // + this.stopToolStripMenuItem.Name = "stopToolStripMenuItem"; + this.stopToolStripMenuItem.Size = new System.Drawing.Size(127, 22); + this.stopToolStripMenuItem.Text = "Stop"; + // + // toolStripMenuItem1 + // + this.toolStripMenuItem1.Name = "toolStripMenuItem1"; + this.toolStripMenuItem1.Size = new System.Drawing.Size(124, 6); + // + // nextToolStripMenuItem + // + this.nextToolStripMenuItem.Name = "nextToolStripMenuItem"; + this.nextToolStripMenuItem.Size = new System.Drawing.Size(127, 22); + this.nextToolStripMenuItem.Text = "Next"; + // + // previousToolStripMenuItem + // + this.previousToolStripMenuItem.Name = "previousToolStripMenuItem"; + this.previousToolStripMenuItem.Size = new System.Drawing.Size(127, 22); + this.previousToolStripMenuItem.Text = "Previous"; + // + // toolStripMenuItem2 + // + this.toolStripMenuItem2.Name = "toolStripMenuItem2"; + this.toolStripMenuItem2.Size = new System.Drawing.Size(124, 6); + // + // fullscreenToolStripMenuItem + // + this.fullscreenToolStripMenuItem.Name = "fullscreenToolStripMenuItem"; + this.fullscreenToolStripMenuItem.Size = new System.Drawing.Size(127, 22); + this.fullscreenToolStripMenuItem.Text = "Fullscreen"; + // + // helpToolStripMenuItem + // + this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.gotoWebsiteToolStripMenuItem, + this.reportIssueToolStripMenuItem, + this.helpToolStripMenuItem1, + this.toolStripMenuItem3, + this.aboutToolStripMenuItem}); + this.helpToolStripMenuItem.Name = "helpToolStripMenuItem"; + this.helpToolStripMenuItem.Size = new System.Drawing.Size(44, 20); + this.helpToolStripMenuItem.Text = "Help"; + // + // gotoWebsiteToolStripMenuItem + // + this.gotoWebsiteToolStripMenuItem.Name = "gotoWebsiteToolStripMenuItem"; + this.gotoWebsiteToolStripMenuItem.Size = new System.Drawing.Size(145, 22); + this.gotoWebsiteToolStripMenuItem.Text = "Goto Website"; + this.gotoWebsiteToolStripMenuItem.Click += new System.EventHandler(this.gotoWebsiteToolStripMenuItem_Click); + // + // reportIssueToolStripMenuItem + // + this.reportIssueToolStripMenuItem.Name = "reportIssueToolStripMenuItem"; + this.reportIssueToolStripMenuItem.Size = new System.Drawing.Size(145, 22); + this.reportIssueToolStripMenuItem.Text = "Report issue"; + this.reportIssueToolStripMenuItem.Click += new System.EventHandler(this.reportIssueToolStripMenuItem_Click); + // + // helpToolStripMenuItem1 + // + this.helpToolStripMenuItem1.Name = "helpToolStripMenuItem1"; + this.helpToolStripMenuItem1.Size = new System.Drawing.Size(145, 22); + this.helpToolStripMenuItem1.Text = "Help"; + this.helpToolStripMenuItem1.Click += new System.EventHandler(this.helpToolStripMenuItem1_Click); + // + // toolStripMenuItem3 + // + this.toolStripMenuItem3.Name = "toolStripMenuItem3"; + this.toolStripMenuItem3.Size = new System.Drawing.Size(142, 6); + // + // aboutToolStripMenuItem + // + this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem"; + this.aboutToolStripMenuItem.Size = new System.Drawing.Size(145, 22); + this.aboutToolStripMenuItem.Text = "About"; + this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click); + // + // kryptonManager1 + // + this.kryptonManager1.GlobalPaletteMode = ComponentFactory.Krypton.Toolkit.PaletteModeManager.Office2007Blue; + // + // searchPanelWidget + // + this.searchPanelWidget.Dock = System.Windows.Forms.DockStyle.Fill; + this.searchPanelWidget.Location = new System.Drawing.Point(572, 0); + this.searchPanelWidget.Margin = new System.Windows.Forms.Padding(0); + this.searchPanelWidget.Name = "searchPanelWidget"; + this.searchPanelWidget.Size = new System.Drawing.Size(525, 27); + this.searchPanelWidget.TabIndex = 7; + this.searchPanelWidget.Search += new System.EventHandler(this.searchPanelWidget_Search); + // + // viewerWindow + // + this.viewerWindow.Dock = System.Windows.Forms.DockStyle.Fill; + this.viewerWindow.Location = new System.Drawing.Point(0, 0); + this.viewerWindow.Name = "viewerWindow"; + this.viewerWindow.Size = new System.Drawing.Size(1097, 542); + this.viewerWindow.TabIndex = 1; + // + // browseWindow + // + this.browseWindow.Dock = System.Windows.Forms.DockStyle.Fill; + this.browseWindow.Location = new System.Drawing.Point(0, 0); + this.browseWindow.Name = "browseWindow"; + this.browseWindow.Size = new System.Drawing.Size(1097, 542); + this.browseWindow.TabIndex = 2; + // + // favouriteWindow + // + this.favouriteWindow.Dock = System.Windows.Forms.DockStyle.Fill; + this.favouriteWindow.Location = new System.Drawing.Point(0, 0); + this.favouriteWindow.Name = "favouriteWindow"; + this.favouriteWindow.Size = new System.Drawing.Size(1097, 542); + this.favouriteWindow.TabIndex = 3; + // + // MainForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1097, 615); + this.Controls.Add(this.toolStripContainerMain); + this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.KeyPreview = true; + this.MainMenuStrip = this.menuStrip1; + this.MinimumSize = new System.Drawing.Size(700, 500); + this.Name = "MainForm"; + this.Text = "MaxTube"; + this.WindowState = System.Windows.Forms.FormWindowState.Maximized; + this.Load += new System.EventHandler(this.MainForm_Load); + this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.MainForm_KeyDown); + this.toolStripContainerMain.ContentPanel.ResumeLayout(false); + this.toolStripContainerMain.TopToolStripPanel.ResumeLayout(false); + this.toolStripContainerMain.TopToolStripPanel.PerformLayout(); + this.toolStripContainerMain.ResumeLayout(false); + this.toolStripContainerMain.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonSplitContainerMain.Panel1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonSplitContainerMain.Panel2)).EndInit(); + this.kryptonSplitContainerMain.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonSplitContainerMain)).EndInit(); + this.kryptonSplitContainerMain.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonSplitContainerSubMain.Panel1)).EndInit(); + this.kryptonSplitContainerSubMain.Panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonSplitContainerSubMain.Panel2)).EndInit(); + this.kryptonSplitContainerSubMain.Panel2.ResumeLayout(false); + this.kryptonSplitContainerSubMain.Panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonSplitContainerSubMain)).EndInit(); + this.kryptonSplitContainerSubMain.ResumeLayout(false); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.panelViews)).EndInit(); + this.panelViews.ResumeLayout(false); + this.panelViews.PerformLayout(); + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ToolStripContainer toolStripContainerMain; + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem applicationToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem playToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem; + private ComponentFactory.Krypton.Toolkit.KryptonSplitContainer kryptonSplitContainerMain; + private ComponentFactory.Krypton.Toolkit.KryptonSplitContainer kryptonSplitContainerSubMain; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.StatusStrip statusStrip1; + private ViewWindow viewerWindow; + private SearchPanelWidget searchPanelWidget; + private ComponentFactory.Krypton.Toolkit.KryptonHeader headerFavourite; + private ComponentFactory.Krypton.Toolkit.KryptonHeader headerBrowse; + private ComponentFactory.Krypton.Toolkit.KryptonHeader headerView; + private ComponentFactory.Krypton.Toolkit.KryptonManager kryptonManager1; + private ComponentFactory.Krypton.Toolkit.KryptonPanel panelViews; + private BrowseWindow browseWindow; + private Views.FavouriteWindow favouriteWindow; + private System.Windows.Forms.ToolStripMenuItem quitToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem pauseToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem stopToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem nextToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem previousToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripMenuItem2; + private System.Windows.Forms.ToolStripMenuItem fullscreenToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem gotoWebsiteToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem reportIssueToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem1; + private System.Windows.Forms.ToolStripSeparator toolStripMenuItem3; + private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem; + private ComponentFactory.Krypton.Toolkit.KryptonLabel labelLoading; + } +} + diff --git a/MovieFinder.Viewer/Forms/MainForm.cs b/MovieFinder.Viewer/Forms/MainForm.cs new file mode 100644 index 0000000000000000000000000000000000000000..d4c2e48de4620546293e4c95c6524c3a81004aea --- /dev/null +++ b/MovieFinder.Viewer/Forms/MainForm.cs @@ -0,0 +1,197 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using ComponentFactory.Krypton.Toolkit; +using Client.Scraper; +using System.Diagnostics; +using System.Threading; + +namespace BlueTube.Viewer +{ + partial class MainForm : KryptonForm, IScraperServiceCallback, IViewContainer + { + private IView currentView; + private Thread downloaderThread; + private UpdaterService updaterService = new UpdaterService(); + private NotepadForm fakeView; + public MainForm() + { + InitializeComponent(); + this.currentView = this.viewerWindow; + if (LicenseManager.UsageMode != LicenseUsageMode.Designtime) + { + LogManager.Log("Downloading site async"); + new ScraperService().ScrapVideosAsync(this, new SearchParameters { Url= "http://www.xvideos.com/new/"}); + this.Text = Constants.AppTitle; + } + this.fakeView = new NotepadForm(this); + } + + private void custom2_Click(object sender, EventArgs e) + { + IView futureView = null; + if (sender == this.headerView) + futureView = this.viewerWindow; + else if (sender == this.headerBrowse) + futureView = this.browseWindow; + else if (sender == this.headerFavourite) + futureView = this.favouriteWindow; + + if (currentView == futureView) + return; + + ChangeView(futureView); + + } + + private void searchPanelWidget_Search(object sender, SearchEventArgs e) + { + this.currentView.TriggerSearch(e.Params); + } + + private void ChangeView(IView futureView) + { + + ChangeViewSingle(this.headerView, futureView == this.viewerWindow); + ChangeViewSingle(this.headerBrowse, futureView == this.browseWindow); + ChangeViewSingle(this.headerFavourite, futureView == this.favouriteWindow); + + currentView.DeactivateView(); + futureView.ActivateView(); + currentView = futureView; + } + + private void ChangeViewSingle(KryptonHeader view, bool selected) + { + if (!selected) + { + view.StateNormal.Back.Color1 = System.Drawing.SystemColors.GrayText; + view.StateNormal.Back.Color2 = System.Drawing.SystemColors.InactiveCaption; + view.StateNormal.Content.ShortText.Color1 = System.Drawing.SystemColors.GradientInactiveCaption; + view.StateNormal.Content.ShortText.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + } + else + { + view.StateNormal.Back.Color1 = System.Drawing.SystemColors.InactiveCaptionText; + view.StateNormal.Back.Color2 = System.Drawing.SystemColors.InactiveCaption; + view.StateNormal.Content.ShortText.Color1 = System.Drawing.SystemColors.Window; + view.StateNormal.Content.ShortText.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + } + } + + public void OnScrapVideoCompleted(ScrapedPage page) + { + LogManager.Log("Download complete. Total videos: " + page.Videos.Count); + this.InvokeEx(() => + { + this.labelLoading.Dispose(); + this.viewerWindow.Initialize(page); + this.browseWindow.Initialize(page); + }); + + } + + public void OnScrapVideoDetailsCompleted(ScrapedVideo video) + { + + } + + public void OnScrapError(Exception ex) + { + KryptonMessageBox.Show("An error occurred: " + ex.Message, Constants.AppTitle, + MessageBoxButtons.OK, MessageBoxIcon.Warning); + + } + + public void PlayVideo(ScrapedVideo video) + { + ChangeView(this.viewerWindow); + this.viewerWindow.LoadVideo(video); + } + + + public IView ActiveView + { + get { throw new NotImplementedException(); } + private set { } + } + + private void quitToolStripMenuItem_Click(object sender, EventArgs e) + { + this.currentView.DeactivateView(); + this.Close(); + } + + private void playToolStripMenuItem_DropDownOpening(object sender, EventArgs e) + { + // var activeView = this.currentView == this.viewerWindow; + + } + + private void gotoWebsiteToolStripMenuItem_Click(object sender, EventArgs e) + { + Process.Start(UrlConstants.WebsiteUrl); + } + + private void aboutToolStripMenuItem_Click(object sender, EventArgs e) + { + new AboutBox().ShowDialog(); + } + + private void MainForm_Load(object sender, EventArgs e) + { + downloaderThread = new Thread(DownloadWorker); + downloaderThread.IsBackground = true; + downloaderThread.Start(); + } + + private void DownloadWorker() + { + if (updaterService.DownloadAppUpdate()) + ReloadApp(); + downloaderThread = null; + } + + private void ReloadApp() + { + this.InvokeEx(() => + { + KryptonMessageBox.Show("A new version of the application is downloaded. The application will be closed while installing", Constants.AppTitle); + if(new UpdaterService().ExecuteUpdater()) + Environment.Exit(0); + }); + } + + private void MainForm_KeyDown(object sender, KeyEventArgs e) + { + if (e.Control && e.KeyCode == Keys.S) // Ctrl-S Save + { + if (!this.fakeView.Visible) + { + this.Hide(); + this.fakeView.ShowDialog(); + } + else + { + this.Show(); + this.fakeView.Hide(); + } + e.SuppressKeyPress = true; + } + } + + private void reportIssueToolStripMenuItem_Click(object sender, EventArgs e) + { + Process.Start(UrlConstants.ReportIssueUrl); + } + + private void helpToolStripMenuItem1_Click(object sender, EventArgs e) + { + Process.Start(UrlConstants.HelpUrl); + } + } +} diff --git a/MovieFinder.Viewer/Forms/MainForm.resx b/MovieFinder.Viewer/Forms/MainForm.resx new file mode 100644 index 0000000000000000000000000000000000000000..66d1dc536eb243dac9978c55fed7cdde4381d544 --- /dev/null +++ b/MovieFinder.Viewer/Forms/MainForm.resx @@ -0,0 +1,259 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAXYSURBVEhLrZZpTFRXFMcvA8ywlc2hyIAVZBkDslhQWYQqisqmgIiCUEUQQQ0QVySICIriBqho + q4gVXKqCW0UtVkGLFKwFQVQgItqo/dg06Ser5/T/hpcmTW1jm57kl3vfm3PPuf9zz80b8S7b7exsWuHu + 7rhHq7WWX/2tbTEwsC5VqZzKrKw+kF+923ZYWhoc02ozWmJjOx5kZr4ezMvjvvz8tx1r1z6sj4hIr9Rq + FbKrznYplcn1Vlbdd+zs3t4bNYo6fHzetMXFdX0VG5tT7eenkt2Gba+FxYhL48e3Pc/I4B/Bs2XLaCgz + k4eysnho5Up6UV7OjYmJZ/c5OhqsUSgUZUZGR1rt7enx6NH8aBh65OjI/RMm8KuiImovKrp/LCBAI4cX + ot7N7eqz5GR6mpJCTxYtooHFi6k/NZX6liyhvrQ06ktPp/6cHKodN277ZpVq7Td2dtTl4EDd2LnEA62W + BmbNoqGlS+l5bi69LCmhW7m531U4OytEhYlJYE94OA3Ex1NfQgI/nD+fexcsoJ7ERO5OSuLuhQupOyWF + u5OT+aqHx+s6K6tfb2k0fEejoXaM9728+DHWP0lN5UGoHszKosHly/lpYSHXeHpGimq1uuhxZCQ/jI6m + ntmzuWvOHP4hJobuxsby3bg47kDijnnzuCUkhBtHjuQrtrZ0zdaWmzC2enpyZ2goP8KG+hYtYqjmfqju + T0tjqOYGf/9KcUKjOdQzbRp1TZ9O98LCqH3mTGqD3NvY1a2ICGqJiqIbM2ZQA2p+Vq2mehsbOgcaXVyo + OTCQ2iMjqSshgXqQ5EFiIvUmJVEvVPei5A3e3vXiqFq9715gIH8/eTK1BQfzLez05pQpdH3qVP4au7sa + GkpntVqutbbWUTdiBJ2ys+NLvr50LSiIb0dH853Zs+luTAx3QnVnXBx1zZ3LXfHxfEqrPS4qDA1XfOvh + wa1Y0IwuuD5xIl+dNIku+/vzRSQ+6+NDNWo1H7K0HMbKik64ufFpLy+6jE1cCwvj61DYPGsWt4aHcztU + d6DkHVFRXK3RFIjtQvicMzKim2PHUtO4cdTo6UkXsbgBgU95eFANumS/uTntBZWgCuU54uZGtd7edDoo + iOqDg+lCSAg1fvIJNUF5MxTfRslv4N0eU9MpYoUQetVCDFwwNqbL6OXzLi58xtWV6jCvtrfn/dbWkiPv + BDtABboH94GrkeCory/X+vnxyQkT6AyUn4fqxoAAaoLyk05OL4qVSgPdPdgtxOovhaDThoZ0CjX+Aod5 + GBwAu0xMaBsUbsEGSkxNqQx3YCdUVULxfnd3OgiVh6D8KFQfR9IzUH4e873Gxht0wSXbJITZQSF+qhOC + j+rr82EzM6oyN+dyUKpU0malkgsloKAIiopxyKW4vduhZOeYMVzu7Ez7XF35M5xNDS5dlYXFy60KhZkc + ftjKhEhFqVjigJ4eVSDgDpWKi/X1qQBJ88B6Y2Neh+Qb0E35OIsC3IdC3I1ilG0byrnLwYF3YwOlenoJ + ctg/G0p15XMkqEK5MGc48iYky8O4GuQaGnI2FGWbmHA2EuVA4SoLC16LzspH0o14LhLiuBzur1YihM0e + IZ7tH05AW8FGsA7kguUgA6QrFJQGZWk4s6VImIkzWqlSSX734W8qh3u3lQrhjeA/6xQAOQFng0ywBM+f + YlyIMQmjRDLm6MbnBUJ8JIf5Z8POA3Emv2zDYjSALkEOWAYW4xnBeT7GeIxzAZK+gI+LvPz9DEl8oeDV + ZgRCv+lKBAUkJcCupeAUAxC8H8Gd5WX/znAmo0AHysSrAcqgK5FUlnkYs4RoWS+EWnb/b5YnhLIYXZwv + xG9SmXSHLMSbNfgcI+nwTf0/DHX3XSVEG0rViXmA/Pq9TfqgK4EJMAfSv4kPgfRdlTrDCQ7O+NEVPeim + P1xzJ/k3yUfyldZIa6UYUqw//iToAUmqMbAANsAeSAG0wBN8DCaBQBlp7guk38YCyVdaI62VYkixEFPo + /Q6OCNG6elIZ2QAAAABJRU5ErkJggg== + + + + 17, 56 + + + 854, 17 + + + 133, 56 + + + 54 + + + + AAABAAIAEBAAAAAAIABoBAAAJgAAACAgAAAAACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAEAE + AAAAAAAAAAAAAAAAAAAAAAAASkJjDysrN3U2PVLjcHuAeQAAAAP///8BAAAAAwAAAAcAAAAJAAAACQAA + AAkAAAAHAAAAA////wH///8B////AXdwd31oVkv7eWI//1xOO/9eXVRbZVJDT3hgUINxW0uJY1BCgWxX + SJFtWEmPUUE2YwEBAS8AAAAdAAAACf///wH///8Blo+Bc2xogv9uc3n/Wlph8Zd+bP+Calv/jHJh/52D + cf+ljHz/rJaH/6yXh/+HcmLFIhsWWQAAADcAAAAP////Af///wGimIzrkoVx/3Nsb/9JNiv/dV1O/5uJ + fP+diXv/sJqL/5WEdv9yYVP/ppiN8ZSBc9EUEA1RAAAAHf///wH///8BUEk/v0EkBv8iFQr/Yk5B/3lo + Xf9OOy//fW5k/7Kil/9xYFD/Z1VC/4+Acf/g2NP/emdYjwAAAA////8BjXJeCWtcTeFaMQL/QTMl/492 + Zf9gTkD/V0Q0/2lZSP/DuK//f25c/3loUv+cjn3/+/r6/7qqnt+Ea1gJ////AY1yXjlyY1b/UTEL/2tY + Qf+ji3r/fmtc/2tYRv9+blr/0srC/76zqP+Wh3P/083E//n39v/TycH/jXJeOf///wGNcl5lX1FF/0gh + Af9pUkD/sp2P/7ysoP+un5L/yb+2/+Xf2v/k4Nv//fz7/8/IwP+dkIH/wret4Y1yXmX///8BjXJefWxi + WP9dPBf/eFw9/8S0qf/Rxbz/4NnU/+Ld1//Lwrn/t62g//f08/+Gdmb/Z1VD/6GVirmNcl59////AY1y + XnOclIv/mIFp/4l6cf/RxLz/u7Cj/49/av+4rqL/39vW/9rV0P/q5eH/b11O/1NAMf+Th32tjXJec/// + /wGNcl5RvrOq/97e3P/a0cr/08jB/4x8af90Yk7/e2pZ/+vo5f/g2tb/1M3I/5WGfP9YRjr/qZiMzY1y + XlH///8BjXJeH8CzqfewqqT/ua2i/8e6sP+IeWn/Yk8+/2taS//c1tH/jIB3/1JBNv+sopz/sp2P/52F + dPeNcl4f////Af///wGplYazqaeg/5R5Wv+lj3z/xb23/2lZTP+ckYn/0sfA/0YzKf8uGQ//h3x3/6eP + f/+TeWWz////Af///wH///8BjXJeMbannPGEfHT/YlZD/72uov/j29b/1crC/8i5rv9XRTz/Ig0F/5+T + jd2agG7xjXJeMf///wH///8B////Af///wGVe2lhn42B82dZUP9nVkj/sJ6R/8S1qv+5ppj/pZCC/495 + beWii3vjj3RgYf///wH///8B////Af///wH///8B////AY1yXjmReWe3c1tL73RaSe+XfmzZnINy75h/ + bO+TeWW3jXJeOf///wH///8B////AQAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8oAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAA + AAAAAAAA////Af///wH///8BmJiQJ2dnX5lra1r1paWVawAAAAP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BSkJjPTExUqsYGBj/ABhC/xwgVv9KXm//l5eXdwAAAAkAAAAD////AQAA + AAMAAAAFAAAACQAAAAsAAAAPAAAADwAAABEAAAATAAAAEwAAABEAAAAPAAAADwAAAAsAAAAJAAAABQAA + AAP///8B////Af///wH///8B////AZychItCOVr/MTFS/3tSOf9jUjn/QlJj/0pKWv9zY1L/bWhYTQAA + ABUAAAAPAAAAEwAAABsAAAAjAAAAKwAAAC8AAAA1AAAAOQAAADkAAAA5AAAAOQAAADUAAAAvAAAAKwAA + ACMAAAAbAAAAEwAAAAsAAAAF////Af///wH///8B////Aca9rW1za2PzhGtC/62ESv+UYxj/c1Ih/0I5 + If97e3LTAwICOWJQQnF7Y1KphWtY14twXfWLcF31g2pX2X5mVMl+ZVTLgmpX24twXfWLcF31g2pX2XVf + TrFYRzt/BAQDQwAAAD0AAAAzAAAAJQAAABcAAAALAAAAA////wH///8B////Ab29rU9za1r/Qjla/15i + e/9rc3P/d4Og/15ie/95bVzHk3ll/5qAbf+fhnT/pIx7/5h/cP+CaVf/k3ll/5qAbf+fhnT/pIx7/6iQ + gf+nj3//oYp5/5h/bf94YVC9SDswdQAAAEkAAABDAAAANQAAACMAAAANAAAAA////wH///8B////Aca9 + tX93g6D/nISU/4x7Y/9KXm//QlJj/1ZNS/+iiXj/j3Zn/2lTR/9dRTj/fmRT/5l/bf+jinn/pYx7/6aO + fv+rk4P/r5mK/7Sgkv+7qJv/vaue/6uWh/+MdGLhWEc7iQAAAE0AAABJAAAAOwAAACEAAAAJ////Af// + /wH///8B////AaWclO2tnIz/va2M/6WUhP+lnIz/pZSM/3dmWP84Ixn/Ri8j/4NpV/+cgnD/pYx7/6WM + e/+nj37/q5SE/7Cai/+1oZP/l4d6/4FyZv+Ccmb/qJqS47yqnv+TfGvnVUQ4hQAAAE0AAABHAAAALwAA + AA3///8B////Af///wH///8Bra2cwYyEe/97c2P/a2NS/1JSUv8xMVL/Nycd/z8pH/96YE//kn9y/5WI + f/+Zj4n/koR7/5mGev+wm4z/tqKU/6CPgv9qWUz/WUc3/2xcTP99b2H/vbOq58K0qf+IcWDXPDEobQAA + AEcAAAAvAAAADf///wH///8B////Af///wGlnISTHBQQ/yEMBP8pEAD/AAgQ/wAIEP82JyD/aVJD/5SB + dP9/cWn/UkA2/1ZEOf97bmX/nJGI/6WTh/+9q5//jX5x/1xJOP9gTj3/ZVNA/3xtXP+lmI3/7Ofk/7ur + n/90Xk2vAAAAOwAAACEAAAAJ////Af///wH///8B////AaWUhG0xMSn/SjUM/3NCCP9SKQj/ORwA/11K + Qf+PdWH/jn91/0MvIv9GMiX/Sjcp/1E9Lv+Nf3X/pZiO/8S1qv94aFn/ZlNB/2pYRf9vXUn/fGtY/5+S + g//y7+3/6OLd/6OOfvVnVEVfAAAADQAAAAP///8B////Af///wH///8BkoFqmUo5Mf9zQgj/hEoA/2Mx + AP89NCX/d2FS/5qAbf95aV//Szgp/1A9Lv9VQTL/WUc2/3ttXv+xp57/zb+1/3dmVP9wXkr/dGJO/3dm + UP99a1b/qZ2O//j29f/8+/v/yLyy/4lvW5kAAAAD////Af///wH///8B////AY1yXiGUgG/tUko5/zkc + AP85HAD/CAgI/1xfZ/+Mcl//ooh4/2dVR/9WQjL/Wkg3/19MO/9jUT//cGBO/7uyqf/VyMH/npCC/3hm + Uf98alX/f25X/41+aP+9tKj//fz8//7+/v/o4t3/mIBu441yXiH///8B////Af///wH///8BjXJeW5qC + cf9aUkr/HBQQ/1IpCP8QEAj/i4J8/5V7aP+rlIP/gW5f/2BNPP9kUUD/aFZE/21bR/96alb/v7as/9zT + zP/Fu7H/gW9Z/4NyW/+GdF3/oZSC/9rVzv/9/f3/+vj3//bz8f+tmov/jXJeW////wH///8B////Af// + /wGNcl6Lnod2/zkxKf9KNQz/jFII/3tKCP+YhXj/nYRy/7Cai/+mlIb/cmBP/25bSP9yYEz/dmRP/5yP + f//Mw7r/5NzY/+rk4f/Jwbb/oZSC/7Gllf/Vzsb//f38//n49//08vD/7+vo/72uov+Ncl6L////Af// + /wH///8B////AY1yXrebh3f/IRgQ/2MxAP9zOQD/YjkQ/5iDdf+mj37/tqKU/7yqnv+omIn/kH9t/35t + WP+Zinn/yr+1/+Xe2f/r5uL/8e7r//b08v/6+fn///79//38/P/RysL/ua+k/7Opnf/Lwbnpybuy/41y + Xrf///8B////Af///wH///8BjXJe2aCNfv8hGBD/IQwE/ykQAP8YEBD/lX5s/7CbjP+9q57/xLOo/8q8 + s//Sxbz/2M7H/9/X0P/l39r/7Ofj/9jSyv/SzMP/2dPN///+/v/9+/v/1dDI/5mKev99alf/jX9u/6SZ + jevXzMWxjXJe2f///wH///8B////Af///wGNcl7xqZiG/xgYGP8uJhv/YzEA/0o1DP+Qd2T/u6mc/8S1 + qv/MvbP/08a+/9rPyP/g2NL/5+Db/+3o5f/z7+3/ppmH/7SqnP/PycD/+/v7//j19P+yp5z/c2FM/29d + Sf9qWEX/iXts+efg24ONcl7x////Af///wH///8B////AY1yXv+5p5z/OTEp/2tKGP97Uin/e1Ip/41y + Xv/Gtqv/zL61/9PHv//TysD/3NbQ/+zp5v/a1M3/3djS//j29f+cjXz/inll/8/Iwf/39fP/8u7s/4p7 + bP9qV0T/ZVNB/2FOPf9uXU759/X0c41yXv////8B////Af///wH///8BjXJe8ca1rP9aWlL/hGtC/6V7 + Uv9jWlr/k3ln/8q6sv/UycH/1cvE/8e+s/+ekH3/nI57/8K5rv/f2tT/4t7Z/83Fvf+zqp//083H//Ht + 6//r5uL/dGNS/2BNO/9bSDf/V0Qz/1VDM+H39fR7jXJe8f///wH///8B////Af///wGNcl7Zyryy/4aF + ff+UhIT/pZyM/5SMjP+diXj/yryy/9zTzP/MxLr/h3Ze/4NxWv9/blj/fWtV/8W9tP/W0cv/+vn3//Xz + 8f/w7On/6+Xh/+Td2P+ThHn/VUMz/1E9L/9MOiv/ZVVKx+HZ1JGNcl7Z////Af///wH///8B////AY1y + XrfFt63/tq6m/8bGxv/n597/7+fe/7KhmP/Ft63/5NzX/7Knmf9/blf/e2lU/3dmUf90Yk3/m46A/93Y + 1P/18vD/7+vo/+rj4P/j29b/3NPM/7Omnf9NOSr/RzMl/0IvIv+TiIG1wLClt41yXrf///8B////Af// + /wH///8BjXJei7urn//DvLb/zs7O////////////yL+2/7urn//r5eL/iHll/3dlUP9yYEz/b1xJ/2pY + Rf90Y1P/7+3r/+7q5//l3tn/xb23/8zHw//Hwbz/saae/6SVjP9fTUH/e2xj/7eonsuehnX/jXJei/// + /wH///8B////Af///wGNcl5brJiJ/9XSz/+traX/3tbO/+fWzv+5rab/rJiJ//Hu7P+Uhnb/blxI/2lX + Rf9lUkH/YU49/2taS//e2tf/5+Ld/8K6tP+Pg3v/UUAz/4Z6cf/Ev7v/raGZ/7mlmP+znpD/rZeI/5Z8 + av+Ncl5b////Af///wH///8B////AY1yXiGYf23j497a/6KZkv+UjIz/pZyU/6GYg/+bhXP/5N/a/7uz + qv9kUj//X008/1tIOP9WRDP/i350/8zGwf/g2NL/opeQ/0AtIP88KBz/OCQY/4yBev+zqqX/sp2O/62W + h/+jjHv/kHVh441yXiH///8B////Af///wH///8B////AY1yXpXHubD/vLSv/3N7c/+Mc2P/vZRa/5h+ + Z//HubD/4t7b/3trXv9VQzP/UT4v/007Lf+2rqf/ysG7/9nNx/9tXlX/NyMY/zMfFP8wGxH/VkU9/83I + xf+tlYb/qJCA/5qAbf+Ncl6V////Af///wH///8B////Af///wH///8BjXJeRaWQgPPd19T/mpaL/2tj + Uv+ce1r/k3da/6OPf//q5eH/z8nF/5CEe/9uX1T/qp+Z/8a+uP/YzMX/0MO6/0Y0KP8vGhD/LBcO/ykU + Cv8rGBD/0c3K/6ePf/+hiHf/knhk841yXkX///8B////Af///wH///8B////Af///wH///8BjXJekb2t + of++t7T/lpOG/2NaUv9rY1r/dWRT/72tof/x7Or/6+Xh/+Tc2P/d1M7/1szD/9DDuf/Jua//dmZd/ygT + C/8lEQj/Iw4F/08+OP/LxMDjpYx7/5h+a/+Ncl6R////Af///wH///8B////Af///wH///8B////Af// + /wGNcl4vlHtox8K0qf+dko3/fXNt/0xLO/9dSCf/gmlT/8W3rP/j29b/3dPM/9XKwv/Pwbj/x7iu/8Gw + pP+cjIP/JA8G/yEMBP8hDAT/rKShyca3rsmcgnD/j3Rgx41yXi////8B////Af///wH///8B////Af// + /wH///8B////Af///wGNcl5Pm4Ny3bWlmv+KfHb/ZVZQ/2NeUP9GNCX/iHFh/7+vo//UycH/zcC2/8a3 + rP/ArqL/uqea/7SekP+Me3H/Tjkw46aalbXOwbm9nIJw/5F2Y92Ncl5P////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wGNcl5Vln1q06mVh/+HdWz/Tjs0/2hdUf9pVkz/gGhY/66a + i//BsKX/v66i/7mlmP+zno//rpiI/6mSgv+mjX3/o4p5/5l/bf+QdWLTjXJeVf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wGNcl49jXJeoZmBb/+PeWn/bVhM/0w2 + LP9VPjL/aE8//5mBb/+kjXz/qZOD/6yUhP+nj3//n4d0/5qAbf+TeWX/jXJeoY1yXj3///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wGNcl4DjXJeT41y + XpONcl7LjXJe8Y1yXvGNcl7LjXJetY91YrWNcl7LjXJe8Y1yXvGNcl7LjXJek41yXk+Ncl4D////Af// + /wH///8B////Af///wH///8B////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + + + \ No newline at end of file diff --git a/MovieFinder.Viewer/Forms/NotepadForm.Designer.cs b/MovieFinder.Viewer/Forms/NotepadForm.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..eabe7913d153eeaa50d583757efbbdfed67469b3 --- /dev/null +++ b/MovieFinder.Viewer/Forms/NotepadForm.Designer.cs @@ -0,0 +1,129 @@ +namespace BlueTube.Viewer +{ + partial class NotepadForm + { + /// + /// 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(); + } + 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() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(NotepadForm)); + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.formatToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.menuStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // menuStrip1 + // + this.menuStrip1.Font = new System.Drawing.Font("Segoe UI", 9F); + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileToolStripMenuItem, + this.editToolStripMenuItem, + this.formatToolStripMenuItem, + this.viewToolStripMenuItem, + this.helpToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Size = new System.Drawing.Size(899, 24); + this.menuStrip1.TabIndex = 0; + this.menuStrip1.Text = "menuStrip1"; + // + // fileToolStripMenuItem + // + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); + this.fileToolStripMenuItem.Text = "File"; + // + // editToolStripMenuItem + // + this.editToolStripMenuItem.Name = "editToolStripMenuItem"; + this.editToolStripMenuItem.Size = new System.Drawing.Size(39, 20); + this.editToolStripMenuItem.Text = "Edit"; + // + // formatToolStripMenuItem + // + this.formatToolStripMenuItem.Name = "formatToolStripMenuItem"; + this.formatToolStripMenuItem.Size = new System.Drawing.Size(57, 20); + this.formatToolStripMenuItem.Text = "Format"; + // + // viewToolStripMenuItem + // + this.viewToolStripMenuItem.Name = "viewToolStripMenuItem"; + this.viewToolStripMenuItem.Size = new System.Drawing.Size(44, 20); + this.viewToolStripMenuItem.Text = "View"; + // + // helpToolStripMenuItem + // + this.helpToolStripMenuItem.Name = "helpToolStripMenuItem"; + this.helpToolStripMenuItem.Size = new System.Drawing.Size(44, 20); + this.helpToolStripMenuItem.Text = "Help"; + // + // textBox1 + // + this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.textBox1.Location = new System.Drawing.Point(0, 24); + this.textBox1.Multiline = true; + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(899, 500); + this.textBox1.TabIndex = 1; + // + // NotepadForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(899, 524); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.menuStrip1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.KeyPreview = true; + this.MainMenuStrip = this.menuStrip1; + this.Name = "NotepadForm"; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Untitled - Notepad"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.NotepadForm_FormClosing); + this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.NotepadForm_KeyDown); + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem formatToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem; + private System.Windows.Forms.TextBox textBox1; + } +} \ No newline at end of file diff --git a/MovieFinder.Viewer/Forms/NotepadForm.cs b/MovieFinder.Viewer/Forms/NotepadForm.cs new file mode 100644 index 0000000000000000000000000000000000000000..95ab92ff70bf31a5f5cb76d91b1149bcbe3cd099 --- /dev/null +++ b/MovieFinder.Viewer/Forms/NotepadForm.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace BlueTube.Viewer +{ + public partial class NotepadForm : Form + { + private Form parent; + public NotepadForm() + { + InitializeComponent(); + } + + public NotepadForm(Form parent) + :this() + { + this.parent = parent; + } + + private void NotepadForm_KeyDown(object sender, KeyEventArgs e) + { + if (e.Control && e.KeyCode == Keys.S) // Ctrl-S Save + { + this.Hide(); + this.parent.Show(); + e.SuppressKeyPress = true; + } + } + + private void NotepadForm_FormClosing(object sender, FormClosingEventArgs e) + { + if (e.CloseReason == CloseReason.UserClosing) + { + this.parent.Close(); + } + } + } +} diff --git a/MovieFinder.Viewer/Forms/NotepadForm.resx b/MovieFinder.Viewer/Forms/NotepadForm.resx new file mode 100644 index 0000000000000000000000000000000000000000..9c1231a2edeb354dd1036b6c17e2af39f30f8072 --- /dev/null +++ b/MovieFinder.Viewer/Forms/NotepadForm.resx @@ -0,0 +1,6296 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + AAABAAYAEBAAAAAAIABoBAAAZgAAACAgAAAAACAAqBAAAM4EAAAwMAAAAAAgAKglAAB2FQAAQEAAAAAA + IAAoQgAAHjsAAICAAAAAACAAKAgBAEZ9AAAAAAAAAAAgACggBABuhQEAKAAAABAAAAAgAAAAAQAgAAAA + AABABAAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wGJiYUdmpuWPwAAAAX///8B////Af///wH///8B////Af///wH///8B////Af///wF7e3YTvLy4U8jI + xJXMysLX09DF/8nIv/+HhXfBOjkzKf///wH///8B////Af///wH///8BwMC8O8zLx4vJxbXLzceo+8q+ + iv/Ft3z/1tC6/9bQu//W08X/oJ2P/0xfZdE6ZHd9AAAABf///wGvn1Ylwa9fV8m6ecPHtm3/xbJf/7+s + V/+5plH/taNP/8rCmv/Z1MD/2dTC/7Ctof9Sa3X/O2+HqwAAAAXCrlKdwapDu7eeL7GvmCuzuqhX/7in + Vv+4plb/uKdX/7moWP+/sG//3djF/93Xw/++vLL/XXB2/zNphJX///8BtqA9VaiPGpmojxyXqZEflb+t + X+3Dsmn/w7Jp/8OyaP/Dsmj/xLNq/9TMqf/g28X/zMq//2p4ef8nW3iH////Ab2rWwm5pEKHuqRClb2o + SZXLunLV0cKB/9DAf//OvXr/zLt2/8u6c//LvYL/497J/9rXyv94goD/I1Vxef///wH///8ByLhrPcy6 + bJ/OvXKh1MaGydnOlf/Xy5D/1ciL/9TGh//Pv3z/y7p0/9zUsv/n49X/gYiD/x9TcGn///8B////Abek + TwPWyYyN2s+Ws93Sncfh16j/4Nan/9/Vpf/ZzZT/1MaH/9HCgP/QxIz/7OjX/46Tjv8fU3Fb////Af// + /wH///8B18uVLeXcssPm3rbN6uPC/+niwP/j2a3/39Wk/93Snv/Yy5D/0cKB/+PcwP+XnJf/HlRyTf// + /wH///8B////Af///wHo4cCL8ezX3fDr1f/s5sj/7ObI/+niwf/k27D/3dKe/9bIif/Wy5n/o6ei/xxR + cD////8B////Af///wH///8B3tatG/Tw4N308eH99fLj//Pv3f/v6dH/6eG+/+DWpv/ZzJH/0cOC/6ao + m/8dVXQv////Af///wH///8B////Af///wHx7dx7+vny/fj27f/u6t3/3tnF/8rDp/+7s5H/rqaB/6mh + f/+Tl4T9IFZ1Hf///wH///8B////Af///wH///8B1cqZC8/Mv92bm4/7nJyQ85qbkO+am5DvnZ2T35WY + kb2MkIqbWmNdN////wH///8B////Af///wH///8B////Af///wHCwrlBpKOZZ6qpn02rq58xrrKlE/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//KAAAACAAAABAAAAAAQAgAAAAAACAEAAAAAAAAAAA + AAAAAAAAAAAAAP///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAANISEUZm5uXWbKzr51ydW5dAAAADf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAADKywqEZiYlE21tbKPwsG+z9DQzPvW1dH/1NPO/7Oz + qf99fHDJMjIuRQAAAAn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQcHBguOjolBtLSwg8LCv8PR0M332NfT/9bUzP/V0cT/1M+9/9PN + uP/V0cX/yMfB/5qXh/+TkIH3S0lCfQAAAB0AAAAF////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAAHfoB7N7KyrnfCwr650NDM8dva1v/T0MP/xr+c/8O5i//MxaT/1c+4/9XP + t//Vz7n/1M+4/9XQvP/X1c//nJuN/5qXiP90c2nPDRgeeS5JUmcHExoT////Af///wH///8B////Af// + /wH///8B////Af///wG6urU5w8O/r8/Py+ve3dn/1tPE/8vEo//HvY7/w7Rx/8SyY//Lt2f/yLVg/7ur + YP/W0Lr/19K9/9fSvf/X0bz/1tC6/9jWzf+sqp7/nJmK/296eP8oV3D/U4ac/xY9U3cAAAAP////Af// + /wH///8B////Af///wH///8B////AbiwiFHMxaP/yL2L/8S1b//Itmf/zblp/8i0Xv/DsFn/v6xV/7uo + Uv+4pU//uaZV/8K4if/Z1L//2dS//9nTvv/X0rr/2dbJ/7q4rv+em4z/f4V//yFQav9LgJf/Fz9XawAA + AAsAAAAD////Af///wGjlU0rtKRaY8CvZJXCr1zFx7NXz825ZPHKtV//xrFb/8GuWP++q1b/uqdT/7il + Uf+1ok7/s6FN/7KgTf+yoE3/taZf/9rVwf/a1sL/2tXB/9nUvf/a1sb/yce//56bjP+Qkoj/GUdi/0N5 + kv8dUG5F////Af///wHAr2FpxLJeycu2W83LtFDDw6s/vb2lN7m4nzC1uKI/z72qV/+6qFX/uKZT/7ak + U/+2o1L/tqNS/7akU/+2pFP/tqVU/7elVf+7ql7/x76T/9zXxP/c18T/29bB/9zXxP/X1s//npuN/6Cd + kP8UQFr/OnGM/x9VdTP///8B////AceyVo++pje1uaAxsbSbKq2vliSpqpEepaaNGaOljBynuKdX/bmo + WP+6qVn/uqla/7qpWv+7qlv/u6pc/7uqXP+7qlz/vKpd/7yrXv+8rWv/3tnF/97Zxv/e2cX/3djB/+De + 1/+koZT/oZ6R/x9GXP8yaIL/H1V1Jf///wH///8BwK1bNbGZLaWpkBufpo0Ym6WLFpmkixaZpYsXl6WM + GJe5p1Xnv65i/7+vY/+/r2P/wK9j/8CvY//AsGT/wLBk/8CwZP/AsGT/wLBl/8Kyav/OxZ3/4NvH/+Da + xv/f2sT/4uDX/7Cuov+in5H/LE1f/ytfe/8fVXUV////Af///wH///8Bt6NGd6eOGZOpkByTqpIglayT + JJWtlSeVrpYolbypVcvHtm//x7Zv/8e2b//Htm7/x7Zu/8a1bf/GtWz/xrVr/8a1bP/GtWz/xrZt/8K0 + dv/i3cn/4tzI/+Daw//k4dX/vLqv/6Shk/83VWL/JVh0/x9VdQf///8B////Af///wG9q1sdt6E+l7Ga + LpOznTOTtp85k7ehPZW4oz+Vv6xXs86+fP/Ovnz/zr57/829ev/NvHn/zbx4/8u7dv/KuXP/yrhx/8q4 + cf/KuXL/yLhy/9PLpv/j38v/4tzG/+Tg0f/Ix77/pKGT/0Zfaf8kVXL3////Af///wH///8B////Af// + /wHDsmFhvKdFk76pS5XArFCVwa5Tl8OvVpfEsV2h1MaI/9TGiP/TxYb/0sSF/9LCgv/RwH//z799/829 + ev/NvHj/zLx3/8u6dP/LunX/xbh8/+XgzP/k38n/5eDP/9XTy/+joJP/Umhv/yJUcen///8B////Af// + /wH///8B////AbqoVQ/Jt2mXx7Rfm8m2ZJvLuGedy7lqn8y5a5/VyY7118uR/9fLj//WyY3/1ciL/9TG + h//TxIT/0sOE/9HBgf/Qv33/zbx4/8y6c//It3H/2NCu/+bhzP/n4s//4eDY/6Ogk/9bbnP/IFNw2f// + /wH///8B////Af///wH///8B////Acq7dU/PvnWjz752o9HAeqXSwnyn0sJ+p9nNlenb0Zv/29CZ/9rO + l//ZzZT/18uQ/9jMkv/Xyo//1MiK/9HDgv/Pv3v/zbx3/828dv/Hun7/6ePO/+fizP/s6uP/o6CT/2Nz + df8fU3DL////Af///wH///8B////Af///wH///8Bt6RPBdPFhZfWyIer18qMrdjMj6/YzJCv3NGd39/V + pP/e1KL/3dOg/93Snv/e06H/3NKe/9rPmP/WyY3/08aF/9LDgf/Qv3z/z756/8i4cv/e17f/6ePM/+7s + 4/+rqZz/bHl7/yFVcr3///8B////Af///wH///8B////Af///wH///8BzL59O9zRm7Xd0py33tOft97U + oLng1qfZ49qu/+LZrP/i2az/5Nux/+Parv/f1ab/28+Z/9jMkv/WyYz/1ciJ/9THh//Sw4P/0cGA/8q/ + h//q5M3/7uvh/7Sypv9seHr/HlJvrf///wH///8B////Af///wH///8B////Af///wH///8B2s+bjeLZ + q7/j2q3B49quweTbsdXn3rf/6OC7/+niv//o4Lz/5Nuy/+DVpf/d0p//29CZ/9vPmf/az5f/2MuQ/9XI + if/Sw4L/ybp2/+Hau//u697/u7mu/215e/8eU3Gf////Af///wH///8B////Af///wH///8B////Af// + /wHLvX0l5d22xejgu8no4bzJ6OC91ezmyf/t6M3/7ObK/+jgvP/k3LL/4tms/+LYq//j2q7/4deo/93T + oP/az5j/2MuQ/9XHiP/UxYX/zcGL/+7r3P/Dwbb/cHt8/x5VdJH///8B////Af///wH///8B////Af// + /wH///8B////Af///wHf1qt77ObJ0e3ny9Pv6tTb8ezX//Dr0//r5cb/6eK+/+jgu//p4sD/6eLA/+ff + uf/k27D/4deo/97Tn//azpb/18qN/9PDgv/Junf/6eTP/8zKwP91f37/Gk9ug////wH///8B////Af// + /wH///8B////Af///wH///8B////AcKyaRPs5svN8+/e4fTw4OPy7dr/7+nR/+3ozf/u6M7/8OvU/+/p + 0f/s5sr/6uPB/+ffuP/j2q//4Nam/93Snf/Yy4//1MaG/9PDgf/Uyp3/1NLL/3mCgf8dVHJz////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AeHZs2X28+fp9PHh4/Lu2/vy7tr/9PDf//Tx + 4P/z793/8e3Y/+/q0v/s5sr/6eK//+betv/i2az/3dKd/9nNk//WyIr/08OB/8u8ff/X1Mr/e4SC/x5W + dmX///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bt6RPB+7p0sX28+bn9vPn+/j1 + 6v/39en/9vPm//Xy4v/z797/8ezX/+/p0P/r5cf/6OC7/+Parf/f1aP/29CY/9jLj//Uxob/1MSF/8jA + nP99hoP/HVNyV////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B29GmR/n4 + 8PH6+PH7+fjv//n37f/49ev/9vTn//Xx4v/z79z/8OvV/+3ny//o4b3/5dyz/9vRov/GvZD/t62C/6ie + dP+tonX/sqZ0/4CJhP8eVHRJ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B7urWs/v69f37+fP/+vjx//f16//r6d7/39vL/9LOvP/Cvaj/sKqS/6GbhP+XkXf/lo93/5yV + eP+gmHv/pp+E/6qlkP+goYr/eIuP9yNady3///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wHVypkr+fjx97u3q/+wrJ//mpaJ/66qnf+qpJL/paCQ/6eikv+joJL/nJyP/5iZ + jfuanJLzkJWQ6YKIhOF7gn7diI2K305YVJVDSkIh////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wHBvKqdwb2v4ZyglfuEh3zviIuC6Y6VkOWOlI7jjZWP25GV + jd+ZmJDdnZyS1aWkm7ujopinrKuhg6mpnWeiopZHpaibJf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AcvLxE+/v7ahoqGX1aalm8emppynrq6jia6u + om2mpppRr7GmNauzpBm05ckF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Aba0qRP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA + AAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAMAAAAJAgICDwAAAAX///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAcRERAZfn96VaOjn5W0tLHVtrez301O + RmUAAAAZAAAAB////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAABSUmJRV1dXBFoqKdh7e3s8fJycb31dXS/9bV + 0//V1dP/1NTS/56ekf92d2zLJyglVQAAABUAAAAF////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAFBAQED2tsZzugoJt7tbWxucjIxe3W1dP/2NfU/9fW + 0v/X1dD/1NHH/9PPwv/T0cf/1NLN/7S0q/+Zlof/kI6A91taUaMEBAQzAAAADQAAAAP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAAMAAAALU1RQL5eXkW+1tbCxx8fD59bV0v3Z2db/2djU/9jX + 0v/W08r/1dDC/9PPvf/Tzbj/1M64/9TPt//U0L//1NLK/8XEvf+al4j/mZaH/5mWh/9raV/DAAAASQAA + AB8AAAAJ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAwAAAAlKS0cnlJSPZ7CwrKXEw7/h19fT/9vb2P/b2tb/2tnT/9LP + wP/Fvp//xr+f/9TOuf/W0Ln/1tG5/9XPt//TzbX/0822/9PNtf/Uzrj/2NbO/9fX1P+ZmYr/mpeI/5uY + if+OjH7tAQEBbQAAAFECAwQ5AAEBFwAAAAP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAABT5APR+IiINbra2pn8LCvtfV1NH73d3a/93d2f/d3Nf/1NHC/8a/ + nf+9sX3/uKpp/7ysYv/It2z/x7Zs/7+0g//Vz7j/1s+5/9fRvP/Y08D/19K+/9XPuf/UzrX/1dHC/9fW + 0P+nqJ3/nJmK/5uYif+Xlon9Ei9C1ytSZeNFdIbxP2l+vQMJDSEAAAAH////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wGzs6whwMC8zdTU0fnf3tv/4N/b/9/e2f/W0sP/yMGe/8C1 + gv+9sHD/wrNq/8u5bv/OvG7/zLdj/8izW//EsFj/w7Ba/7WkVv/Vz7j/19G8/9fRu//W0bv/19K9/9jU + wP/Y0rv/19G//9jVzv+3tqz/nJmK/5yZiv+Yloj/HUJZ/y9gef9EeZH/SHmT+wYRF0EAAAAVAAAAB/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wHFwroF2tjR19bSwf/Hv5v/vrN9/72u + a//Es2n/zbxw/9C9b//MuGL/yLRc/8WxWf/Cr1j/wK1W/72qU/+6p1D/uKRO/7yqW/+7r3r/29bD/9rV + wf/Y0r3/19K8/9fRvP/X0Ln/2NS//9za1P/HxsD/nZqL/5yZi/+cmYv/J0ld/ytcdf9AeJD/QnSP9QUO + FDMAAAARAAAAB////wH///8B////Af///wH///8B////Af///wGjlU4FnY5ELamZT2ewn1Gbu6tj38a2 + a//PvXH/0b5u/825Y//JtF3/x7Jb/8SwWv/Brlj/vqtV/7upUv+5p1D/t6RP/7WjTv+0ok3/sqBM/7Oh + T/+vn1P/1tC4/9nUwP/b18T/29fD/9nUv//Y0rr/19G4/9rWyv/V1M7/nZuM/52ai/+dmoz/OVVl/yRV + b/88dI3/PnGM6wYRFxUAAAAF////Af///wH///8B////AaibVQObjEMxrp9Yb7WlW6HAsGbPybdm1865 + YMvOuFjHyLFLycm0Xf3Is13/xbFc/8OvWv/ArVf/vapV/7uoU/+5plL/uKVR/7akUf+0oU7/s6BN/7Kf + Tf+yn03/sqBO/7OhT/+4qFz/vrSC/9rVwP/a1cD/2tXB/9vYxf/b2MP/2tS8/9rWyP/b2dL/pKGT/56b + jf+em43/Q1xo/x1NZ/85cov/PHCM3QQLEAP///8B////Af///wGtnlYlt6ddpcCwZNnMumnZz7pgy9C5 + WMfIsEXBxKs/v8CnOru8pDa5uKAxt7yoTee/rFj/vapW/7uoVf+6p1X/uKZT/7ajUf+1olD/tKJQ/7Si + UP+1o1L/taNT/7WjUv+1o1L/taNS/7akU/+5qFr/s6Nb/9vXw//c18P/29XB/9rVwf/a1cD/29W8/93b + zP/g39v/sK6i/5+cjv+gnY//Vmpx/xdFYP83b4n/N22Jz////wH///8B////Af///wHHtmaTz7lWw8iw + Rr/Eqz+7wKg6ubykNre5oDG1tZ0tsbKZKK+vliStq5Igqa6YNMW6qFb/uKZV/7elVP+3pVT/t6ZV/7in + V/+4plf/t6ZW/7imVv+4plb/uKZX/7mnWP+6qFn/uahY/7mnWP+5p1j/vaxj/8S5i//f2sj/39rJ/93Y + x//c18T/29W9/9zXw//f3NT/vLux/6Cdj/+hnpD/YnN1/xM+Wf8yaYP/MmiFv////wH///8B////Af// + /wHGtGJtwKg+t7qhMrG2ni2vs5oprbCXJamskyGnqZAdpaeOGaOlixeho4kUn6OKF6G4p1f9uqpa/7qp + Wv+6qVn/uqla/7upW/+7qlz/vKtd/7ysXv+7qlz/u6pc/7urXf+8q13/vate/72sYP+9rGD/wK9m/7Wm + X//e2MP/3tjE/9/ax//g28r/39rF/93Xwf/f3NP/yMa9/6Cdj/+hnpD/dYGA/w85Vf8wZX//LWOBsf// + /wH///8B////Af///wG4pVAXvalLqa6UIaWrkR2hqI8an6eNGJ2ljBabpIsVm6OKFJmjiRSZpIoVl6SL + Fpe2pE/jva1f/76uYf+/r2L/vq5i/76tYf++rWH/vq5h/7+uYf/AsGT/wLBk/8CvY/+/r2L/v69i/7+u + Y/+/rmP/wbBl/8Kya//JwJb/39nE/9/ZxP/e2cT/3tjB/9/axP/j4dj/19bR/6Gekf+in5H/gIqD/w42 + Uf8tYHv/KF9+o////wH///8B////Af///wH///8BvatYWa2WKJ2mjReZpowWl6WMF5emjRiVp40alaiP + HJWojx6VqZAflaqRIJW1okjFwrFn/8OxaP/Dsmj/w7Np/8Szav/Dsmj/wrJn/8KxZ//CsWf/w7Jn/8Sz + af/EtGr/w7Np/8KyZ//Csmf/wrJo/8e3cf+5qmf/497L/+PezP/i3cn/39rE/97Yv//h3c//393W/6Og + k/+joJL/kJSK/w00T/8pW3X/Ilp6lf///wH///8B////Af///wH///8Bt6RPCbqmTZOojhqTqZAck6qS + IJOrkyOVrZQlla2VJ5WulymVr5grlbCYLJW1oEGrybdy/8m3cf/It3H/yLdw/8i3cP/IuHH/ybhy/8m4 + cf/Htm7/x7Vt/8a1bP/GtWv/x7Zt/8i3bv/It27/x7du/8a1bP/Ds23/zsWd/+Hbx//i3cn/497L/+Lc + x//k4NL/4+Ha/6qnm/+koZT/mJuN/xA3UP8oWHL/H1Z2hf///wH///8B////Af///wH///8B////Ab2r + W0G3oT6Xr5cpkbCZLJOxmi+Ts5wyk7SeNpO1nziVtqA6lbehPJW4o0CZyrl2+c69e//OvXv/zb16/828 + eP/Mu3j/y7t3/8u7dv/MvHj/zLt3/8u6df/KuXL/ybdw/8m3b//Jt2//ybhw/8q6c//Nvnv/vK5s/+Ld + yP/i3cj/4dzH/+Dawf/i3sz/6Ofi/7a0qf+joJP/oqKT/xU7Uv8nVnH/HlR0d////wH///8B////Af// + /wH///8B////Af///wHCsGCFtp83k7agOZO4oz6TuqVClbumRZW8qEiVvalJlb6qS5W+qkyVzLx56dHC + gv/SwoL/0sKC/9LCg//RwYL/0MB//8+/ff/Ovnv/zr16/828eP/NvHj/zLx3/8u6df/LuXP/yrlz/8q5 + cv/JuHH/w7Rt/9TNq//m4s//49/K/+Lcxf/j3cr/5uTb/8LBt/+joJP/pqOW/x5DVv8lVXH/H1V1af// + /wH///8B////Af///wH///8B////Af///wG9q1orxLJenb2pSJO/q02VwK1RlcGuVJfCr1aXxLFYmcWy + WpnFsluZzb971dXHiv/Ux4n/1MaI/9TFh//TxYb/08WG/9PEhP/SwoL/0MB+/8++fP/OvXr/zbx5/869 + ev/OvXr/zb14/8u6dP/KuXP/zb17/7yubf/k38v/5uHP/+bhzf/m4c3/5+Tb/87Mw/+joJL/pqOW/ytN + XP8jVG//HlR1Wf///wH///8B////Af///wH///8B////Af///wH///8ByLhvc8WyXJnFsluZxrNemci1 + YZvJtmSbyrdlncq4Z53KuGidzr56xdjMkf/Xy5D/1suP/9XJjf/VyIv/1MeK/9TGiP/Txof/08WG/9PD + g//RwYH/0cGB/9DAfv/Pvnz/zr15/828eP/Nu3b/zLpz/8GwaP/Y0K//5uDL/+Xfyf/k38f/6+jf/9zb + 1f+in5H/paKV/zRTYv8gUm7/HlV1S////wH///8B////Af///wH///8B////Af///wH///8BuqhWGc69 + dqHKt2edzLlrn827bqHNvHChzrxyoc69c6PPvXSjz8B9t9nOlv/ZzpX/2c6V/9nOlf/ZzZP/2MuQ/9bJ + jv/VyIv/1MeJ/9THif/VyYv/1MeJ/9PEhf/RwYH/z798/828d//Mu3T/zLt0/9DBf/+/sXL/6eTR/+fh + zP/l38b/6OTW/+Ti2v+in5H/pKGU/ztXZP8fUm//HlR0Pf///wH///8B////Af///wH///8B////Af// + /wH///8B////Acm6dF/RwXul0L52pdHAeqXSwXyn08N+p9PEgKnTxIGp08WEsdvQnP3c0Zz/3NGb/9vQ + mv/bz5j/28+X/9rOlf/YzJH/2M2T/9jNlP/Xy5H/1smN/9XJi//TxYX/0cF//8++e//OvHf/zLt1/8y7 + dP/AsGf/3dW3/+rl0f/p5M3/7Onb/+3s5v+koZP/op+S/0ZfaP8gU2//H1R0L////wH///8B////Af// + /wH///8B////Af///wH///8B////AbejTwvSxIWh1MWCqdXHhavWyYir18qLrdfLjK3Xy42v18uNr93T + ofnf1aP/3tOh/93Sn//d0p7/3NGc/9vQmv/d06D/3dOf/9zRnP/az5f/2MyT/9XIiv/TxYT/0cOB/9HB + f//RwH3/z756/869eP/QwX//wbR2/+njzv/n4cn/6eXT/+7t5v+uq5//o6CT/09kbv8iVXL/HlR0If// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wHIuHNJ2s6Vs9nNkbHazpSx28+Ws9vQ + l7Pb0Jiz29CYs97Upe/h2Kn/4dip/+HXqP/f1qX/39Wk/+HXqf/g16j/39Wl/97Uov/d0Z3/2c2T/9fK + jv/VyIn/08aF/9LDgv/RwX//0cF//9HAfv/QwH7/wLFq/+Pdwf/p5Mz/6uXS/+7r4/+1sqf/pKGU/1Bl + bv8gU3H5H1V1F////wH///8B////Af///wH///8B////Af///wH///8B////Af///wG3pE8F1cqRl93S + nLfe05633tSgud/Uobnf1aK539WiueHXq+fj2q//49qu/+LZrP/j2q7/5d21/+XdtP/j27D/4tms/97U + ov/bz5n/2c2V/9jMkv/Yy4//18qM/9bKjP/VyYr/08aG/9LDgv/RwH7/0cKD/8S5f//r5s//7enW//Hw + 6v++vLL/pKGU/1Bkbv8dUW/1H1V1Df///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bw7NqMeDXqL3h16i94tmqv+LZq7/i2ay/49msv+PbseHm3rb/5t20/+beuP/o4b3/6OC8/+ff + uv/m3rf/4tir/9/Vo//e0p//29Ca/9rOlv/ZzZT/2s6X/9nNlP/YzJH/18qN/9TIh//SxIL/0cGA/8Cx + av/j3MD/6uTO/+7s4f/Ewrj/pKGU/1Flbv8dUnDvH1V1A////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AdfLloXl3LPD5d2zw+XdtcXm3rXF5t62xeXdt9vo4bz/6+TD/+zm + yP/r5cb/6uTD/+jhvf/j2rD/4dir/+DWp//f1aT/39Sh/9/VpP/f1aT/3dKf/9vQmv/ZzZX/18qP/9bI + i//Ux4b/08SD/9LEhf/IvIX/6uXO/+/s4f/Ny8H/pKGU/1Jmbv8fVXTj////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AbyqWhvj27TF6OG8yejhvsvp4r7L6eK+y+jh + wNnt58z/7ujP/+7ozv/t6M3/6+TE/+ffuP/l3LP/49uw/+LYrP/i2az/5Nuy/+PasP/i2av/4Nam/97U + of/b0Jr/2c2U/9fKj//VyIn/1MWF/9PDg//Bs27/6ePK//Lw5v/W1c3/paKV/1Vob/8eVXTV////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wHVyZRt7ObI0evl + x8/r5cjP7ObK0e/q09/w69b/8OvV//Dr0//s5cj/6eK//+jhvP/o4Lr/59+3/+nhvv/p4r//5+C6/+Xd + tf/k27D/4diq/9/Vpf/e06D/3NGb/9rOlf/Xyo//1caI/9LBf//QwYH/zMGO//Dt4f/d3NT/paKV/1ts + cf8aUG7H////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wG6p1UP5N25v+7oz9Xv6tPZ8u7a3fLu2+Hy7tv/8u3Y/+7ozv/s5sn/6+TG/+rjwv/r5MX/7efN/+3n + y//s5cf/6uPB/+jhvP/m3bb/5Nqw/+HYqv/f1aT/3dKe/9vPmP/ZzJH/1siJ/9TEhP/TwoH/wrRx/+7q + 2//k49v/paKV/2BwdP8aT265////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B0cSLU/Ht2t/08ODj9PHh4/Tx4ePy7tv98OvU/+/q0f/u6c//7unO//Ds + 1f/x7Nj/8OvV/+/p0f/t58z/6+XH/+niwf/o4Lv/5t62/+TbsP/h16n/39Sj/9zRm//YzJH/1siK/9TF + hP/Swn//0MGA/9bOqP/u7uv/paKV/2Rzd/8fVnWp////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bt6RPBebfv7P28+Xn9vPl5/Tw3+Px7dr58e3Y//Hs + 1v/y7tr/9PDg//Tw3//z793/8u7a//Hs1v/v6tL/7efN/+vlxv/p4r//59+5/+Xds//j2q7/4Nal/9zR + nP/azpT/18qN/9XHh//Tw4H/0sKA/8S2d//v7ej/qKaZ/2Z0eP8fVnab////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Acq8fDn08eLn9fLk5fTx + 4ePz8N/59PDg//bz5f/28+b/9vPl//Xy4//08eD/8+/e//Lu2v/x7Nb/7+rS/+3nzP/r5MX/6eG+/+fe + t//j2q7/4NWk/93Snf/azpb/2MyR/9bJjP/Vx4b/0sJ//9HDhf/b1bn/r62h/2h2ef8cVHSN////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wHi2raZ9/To6fbz5+n39On3+Pbs//j26//49er/9/Tp//b05v/18uT/9PHh//Pv3f/y7dn/8OvV/+7p + z//s5sr/6+PD/+ffuf/k27D/4dip/9/Uov/c0Zv/2s6U/9fLjv/VyIj/08OA/9TGh//JvYb/sq+k/2p4 + e/8cU3J/////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wHBsWgh8u7d4fr48fH6+PH7+fjw//n37v/49u3/+Pbr//f16f/39Of/9vLk//Tx + 4f/z793/8e3Y//Dr0//u6M7/6+TD/+jguv/l3LP/4tmr/+DVpP/f1aX/28+Z/8/DkP/LwI7/s6Vt/6ie + d/+uo3H/rKWF/258f/8eVHRv////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B39exffv69fX7+fT7+vny//r48f/5+PD/+ffu//j2 + 7P/39en/9vPm//Xy4//08N//8u7a//Hs1//p48j/29W6/+Latf+tpof/xr+d/6CXb/+Igmv/tKuA/3Fs + Vv+ooH7/nZRw/5OLcP+4roH/s6l5/259gP8eVHRh////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bu6hYEfDs29v7+/b7+/r1//v5 + 8//6+fL/+fjw//bz5//y8Ob/29fF/8nFt//Szbb/kY1+/7+6o/+Nh3D/hH9u/6Cagv+Mh3P/oZuE/62m + jP+YkHH/oJmB/7Ori/+dl4H/rqmV/6mmlP+UmY3/mqiq/1lzf+0oX3o1////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AdfM + nF38+/f77u3o/7WwoP+7uK7/tbCa/2tnXP/Dv7H/oJ2Q/6Ccj/+oo5X/r6qZ/5yXg/+yrZn/oZuC/6Kd + j/+yrZr/mpmL/6upnv+CjIv7oaSf9YiUkfF1gIDflJqU50VSU90qUVthPkE7nSlSUQX///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AbekTgXq5c7HxcK6/7y5sP+qpZf/qaSV/7axn/+fmor/trKk/6Gfjf+hoJb/nKSZ/XeA + e/OdoJv7XW5u35qgnOdsc3DbhoyG3Z2emNV0dWzPubmw1YKBd8uuq6Ltjot/z7i3rs2IhnmxbHFiNf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wHGwalRs66d0b26rOdvfXP3o6Oc9XiEg+OTmpbblZmU70pb + VMWqq6ThXWJYw7a2rtmTkYfhn52U462roeGjoZbduLeuw6Cek7e8vLORiol8dbq/skmUnIwpr8CuGbDb + wQW05ckD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wHAwrcjwcC4s8LFu3mVlIvDsK+m542M + g9GysKblm5qP17W0q8egn5KrwcK4k52ekG21t6xfpKmbL6WwoB+05ckHs+bJA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B1NTNVbq3 + rp+8urBzp6Waab2+s02KkoEhtOTICbPlyAOz5skD////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8oAAAAQAAAAIAAAAABACAAAAAAAABCAAAAAAAAAAAAAAAAAAAAAAAA////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAAMAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAAFAAAACwMDAyNqa2ZZLTs7IQAAAAsAAAAF////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAADAAAACQAAABdeX1tNkZKNjaysp8nDxMD50tLQ/5ucld08PTdpAAAAJQAA + AA0AAAAF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAADAAAABwAAABNQUk0/jo+Kf6urpr3Bwb3x0tLP/9bV0//W1dP/1tXT/9XV + 0//HyMT/lpSF/3FzacsbHhxfAAAAHwAAAAsAAAAD////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAADAAAABwAAABE5OjcziImEc6mqpbG/v7vn09LO/9fW1P/X19T/19bT/9fV + 0v/W1dD/1dXP/9PRyv/T0Mn/09HK/56fk/+Zlob/j45/91JSSqkBAQFBAAAAFQAAAAf///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAADAAAABQAAAA0hIR8pgYF7aaamoae9vLjf0tHN/9jX1f/Y2NX/2NfV/9jX + 1P/X1tH/19XP/9TRxv/Szr7/0sy6/9HMt//U0cT/19bR/9fW1P+ztKv/mZaH/5qXiP+bmIn/fHpt4yko + JHcAAAArAAAADwAAAAX///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAABQAAAAsKCQkhd3hyXaCgm525ubXX0dDM/dnZ1v/a2db/2tnW/9rY + 1f/Z2NP/2NfQ/9bSyP/Uz8D/0867/9LNt//Uz7n/1c+5/9XPuP/Uzrb/1M+7/9PPw//U0cn/wsK7/5iV + hf+cmYr/mpeI/5iVhf+IhnntAQEBZwAAAEEAAAAhAAAADQAAAAP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAwAAAAkAAAAbaWpmU5ubl5O1tbDPzs7J+9rZ1v/b29j/29rX/9va + 1v/a2dT/2tnS/9XSxP/Nx7H/1M+9/9TOuP/V0Ln/1tG6/9bQuf/W0Ln/1c+3/9LLs//Sy7T/0suy/9PM + tP/X1Mf/2NjU/9fX1f+Xl4n/nJmK/5qXiP+Zlof/nJmK/x4eGocAAABhAAAARwAAAC0AAAAXAAAAB/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAAcAAAAXW19bS5SVj4mysq3FysrG99va1v/d3Nr/3dzZ/93c + 2P/c29f/3NrU/9XSxP/Cu5r/tqt1/62eV/+xoVX/uqpi/7apav/TzbL/1tC5/9TNtP/Uzbb/1M62/9XP + uf/X07//19O//9fSvf/W0Ln/1c+9/9bSyP/W1M3/pKab/5uYiP+al4f/nJmK/5yZi/9CR0azChYdlx4z + Pac0VGC7OllloQkaIzcAAAANAAAAA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAJT1JOO46OiX+urqm9xsbC8drZ1v/f3tv/3t7b/97e + 2v/e3dj/3dzW/9bTxf/Fvpz/u7B7/7KjXv+0pFn/xbVu/8y8dP/Qv3X/z7xq/826Z//JuGz/s6Zq/9fR + u//Z1MD/2dTA/9nUwf/Y08D/1c+6/9XPuP/Vzrj/1M20/9bSvf/Z19D/2trX/7a3r/+al4n/mZaH/52a + jP+cmYr/OlVj/xtHYf84aoL/RHqR/2OVqf8aSWS9AAAAJQAAAA0AAAAF////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wFmZV0DwsK919ra1v/g4N3/4ODd/+Df + 3P/g39r/397Y/9bSwv/FvZv/vLF8/7WnY/+5qmL/ybp0/869dv/RwHX/z7xp/8q1XP/Is1r/xrFZ/8Ov + WP/Crlf/xLJi/62bSP/SzLL/1tC6/9fQu//W0Ln/1tC6/9jUwP/Z1cH/2dTA/9jTvP/W0Ln/1tHD/9fV + zf/Dwbj/m5iK/5yZiv+dmov/mpeI/01ia/8YRF7/NGZ+/0F2jv9jlan/G0tnywAAADMAAAAZAAAACwAA + AAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AdPS + zI/i4Nz/4d/a/9XRv//Du5X/ua11/7OkXv+7q2L/y7t1/9C/d//SwHT/z7xo/8q1Xf/Js1v/xrFa/8Sw + WP/Cr1j/wK1W/76rVf+8qVL/uaZP/7ikTf+9rGD/s6Zq/9vXw//b1sP/29bD/9rWwv/Y0r3/1tC6/9bQ + uf/Wz7f/1tC3/9rXyP/c29b/1dbT/5mWhv+em43/nZqM/5yZiv9abHH/FkFc/zBjfP8+do7/W46l/xtK + Zr0AAAArAAAAFQAAAAsAAAAF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AZSENiummVqFu694/7SlX/+9rWT/zLt0/9HAd//TwXT/z7tn/8u2Xv/JtFz/x7Jb/8Wx + Wv/DsFn/wK5Y/7+sVv+8qlT/uqhR/7imT/+3pE7/taNN/7WiTv+0oU3/uqhb/6iXRP/TzbL/2NK8/9fS + u//X0rv/2tbB/9vXw//b1sP/2tXA/9jSuv/X0bz/2dXK/9nWzv+in5L/oJ2O/5yZiv+dmov/aHV2/xQ/ + Wf8rXnf/OnKL/1eKof8bTGmpAAAAFwAAAAkAAAAF////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AZaHPDGnmVJtrp5Uq7KhVNXBsGTfy7lo09G/dPHUwnT/z7tm/8y2X//KtV3/yLNc/8ay + W//EsVv/wq9a/8CtWP++qlX/vKhT/7qnUf+4pVD/t6RQ/7akUP+1o0//tKJO/7KgTP+xn0r/sJ5K/7Ce + Sv+6qV//uKx2/9zYx//c2Mf/3NjG/9nUv//Y0rz/2NK8/9fRuv/X0bj/2tbC/93b1P/e3tv/sK6j/5+c + jv+cmYr/npuM/36Ggv8SPFf/JVdx/zZviP9Th57/HVBukQAAAAcAAAAD////Af///wH///8B////Af// + /wH///8BqJtVBZaHPDeqm1V1sKFYr7amW93Ht27hzrxr1dK+ZsfSvV/Ly7NMxceuQ8HErUrVybNd/8ez + Xf/Gslz/w7Bb/8GuWf+/rFb/valU/7uoU/+6p1L/uaZS/7ilUv+3pFH/taNQ/7OhTf+yn0z/sp9M/7Kf + TP+yoE7/s6FQ/7OhUP+zolD/u6ti/6iXRf/W0Lj/2dS+/9nUvv/b18T/3NnH/9zZxv/c2MT/29a//9jR + uv/Z1cf/29jQ/7y5r/+em4z/npuM/5yZi/+Ijob/EDlU/x9Ra/8ybIb/T4Sc/x5Uc3v///8B////Af// + /wH///8B////Af///wGpm1RjsaJZtbioXOPKuXDjz71r1dO/Z8fSvF7Jy7NKw8euQ8HEqz+/wak8vb6m + OLu7ozW5uaEzub+sV/vArFj/vqtX/7ypVf+7qFX/u6hV/7qnVP+4plT/t6RS/7SiT/+0oU7/tKFP/7Sh + Tv+1olH/taNS/7WjUv+2pFP/taNS/7WjUf+1olH/taNS/7WjU/+9rGT/vLKA/97ayf/e2sj/3NfE/9nU + vv/Z1L7/2dS+/9nTuv/b1r7/3tzP/+Df2//LysT/n5yO/52ajP+fnI7/n52R/w83Uv8aSmX/LmiC/02C + mv8fVXVt////Af///wH///8B////Af///wG2pVpnzrxr2dXAZsnSvF3HyrJJwceuQr/ErD+9wak8u76m + OLm8pDW3uaEytbaeLrO0myuxsZgor6+WJK21oUXfvKpY/7upV/+5p1b/uKZU/7akUv+2o1L/taNS/7Wj + U/+3pVX/t6VW/7emVv+4plb/tqVT/7akVP+2pFP/t6VU/7imVv+5p1j/uadY/7mnWP+5p1n/wLBp/6qZ + Sf/a07z/29XA/93XxP/f2sn/39rJ/97ayP/d2cT/3Na9/9vWxf/c2tD/1dTN/5+cjf+em43/op+R/6Ge + kP8TOlP/FkRf/ydhfP9HfJb/H1V1Xf///wH///8B////Af///wH///8BxLFdec22VMHErD+7wqk8ub+n + Obe8pDW1uqEys7eeL7G0nCuvspkora+XJautlCKpq5Ifp6iPHKWmjRmjqpMtvbimVf+4plX/t6ZV/7in + Vv+5qFj/uahZ/7mpWf+5qFj/uKdX/7inV/+4p1f/uahY/7qpW/+6qVv/u6lc/7upXP+6qVr/uqhY/7qo + WP+6qFn/uqha/7yrXv+/rmb/wbeJ/+Dbyv/f2sj/3NbC/9zWw//c18T/29W//9zWvP/f28n/4uDa/+Lh + 3v+fnI7/op+R/6Ogkv+gnY//Jklb/xM/Wv8iWXT/RHqU/x9VdU////8B////Af///wH///8B////Abqn + UkXIs1a5uqIysbifL6+1nSyts5ooq7CXJamulSKnq5IfpamQHKOnjhqhpYwXoaSLFZ+jiRSdoogTnaKI + FJ23plb7u6pb/7uqW/+6qVr/uqla/7qpWv+6qVr/u6pb/7ysXv+9rF7/vaxe/72sXv+7q1z/u6pc/7ur + XP+8q1z/vKxe/72tYP++rWD/vq1h/76tYf+9rF//xbVx/6ybTf/d18H/3djC/+Hcyv/h3Mr/4NzK/+Db + yP/e2MD/3NW//97azv/f3dT/raue/6Kfkf+joJL/oZ6Q/zVUZP8QO1b/HVNu/0R6lP8fVXVB////Af// + /wH///8B////Af///wG3pE8Dw7BenbObLKmvlSKlrJMfo6qRHaGojxqfp44Yn6WMF52lixabpIoUm6OK + E5mjiROZo4kUmaOKFJekihWXtKFK3byrXv+9rF7/vq5h/76uYf+/rmL/v65i/76tYP++rF//vqxf/76t + X/++rWD/v69j/8CvY//Ar2P/wLBk/7+vY/++rmH/vq5h/76uYf++rWL/wK9k/8GxZ/+/r2f/x76T/+Ld + y//e2cP/3djC/93Xwv/d18H/3da9/+Dbxf/j4Nf/5ePg/7q4rv+in5H/op+R/6GekP8/XGf/DzhT/xlN + af8/dpH/H1V1M////wH///8B////Af///wH///8B////AbilUDO7pkqrqI8ZnaeNGJumjRebpowWmaWM + FpmlixWXpIsVl6WMF5emjBiXpo0Zl6eOG5enjhyXp44clbGdQMHBsWb/wbFm/8CwZP/AsGT/wLBk/8Cw + ZP/BsGb/wrFn/8KxZ//Csmf/wrJn/8CwZf/AsGT/wbBk/8GwZP/BsWX/wrNo/8KzaP/Cs2j/wrNo/8Gx + Zv/BsGX/ybl3/6+fVP/f2cT/4t3K/+PezP/i3sv/4t3L/+Hbxv/h28b/4N3P/+He1f/Dwbf/oZ6R/6Ge + kP+in5H/VGtw/w01UP8XSGP/O3OP/x9VdSP///8B////Af///wH///8B////Af///wH///8Bvqxbf62V + J5umjRaVpo0XlaaNGJWnjRmVp44blaiPHZWpkB+VqpEhlaqSIZWrkiKVq5MjlayTI5WvmTOlwrFo/8Wz + av/GtW3/x7Vu/8e1bv/HtW7/xbRr/8Szaf/Es2n/xLNp/8Szaf/GtGv/xrRr/8e0a//GtWz/xbRq/8Sz + aP/Es2j/w7No/8OzaP/EtGr/xbVs/8e3b/+/r2b/zcSc/+Tfzf/h3Mj/39nD/9/Zwv/f2MD/3de9/+Le + z//m5eD/09HL/6Kfkf+in5L/pKGU/1tvc/8MNE//F0Vg/zZui/8fVXUV////Af///wH///8B////Af// + /wH///8B////AbekTx+8qVKjqI8ak6mQHJOqkh+Tq5Mik6yUJJOtlSaVrZYnla6XKZWvlyqVsJgslbGZ + LZWxmi6TsZovk8S0bffJuHP/ybdx/8i3cf/It3H/x7dw/8m5c//KuXT/yrlz/8m5c//JuHL/x7Zv/8e2 + bv/GtWz/xrVs/8e2bP/Jt27/ybdv/8m3b//It2//yLdv/8e2bf/GtWv/zL18/7KiWf/g2sT/493K/+Tg + zf/k383/497L/+Lcx//k4ND/4+DW/9va0v+gnY//pKGU/6Shk/9qfHf/DDNO/xhEX/8waYf/H1V1B/// + /wH///8B////Af///wH///8B////Af///wH///8BvqxcZ7ahPZmuliaRr5cok7CYK5OxmS2TsZovk7Ob + MpO0nTSTtJ42lbWfN5W1nzmVtqA6lbehO5XDsmjfzbx5/869ev/OvXv/zr17/869ev/Mu3f/y7p2/8u6 + dv/LunX/yrp1/8y7d//Mu3b/y7t2/8u6df/KunT/ybhx/8i2bv/It27/yLdu/8i2bv/JuHH/yrly/8y7 + dv+9rmT/0cml/+Xhzf/h3Mf/4dzG/9/awv/f2L7/4NvG/+fk3P/o6OT/oqCT/6Ogk/+koZT/eoiB/wwz + Tv8bRmD/LmeF9f///wH///8B////Af///wH///8B////Af///wH///8B////AbekTw/DsmOfspswkbOc + MpO0nTSTtZ83k7ehOpO4oj2TuKNAlbmkQpW6pUOVu6ZFlbymRpW8p0aVw7Nmx9C/f//Pv37/z79+/8+/ + fv/Pv33/0MCA/9DAf//QwH//z8B+/8+/ff/Ovnz/zbx4/8y7d//LunX/y7l0/8u6dP/Mu3X/zLp0/8y6 + c//Mu3X/y7p0/8m4cf/It2//zb9//7OkXf/i3cj/5eLP/+Xhz//l4c7/5N/J/+Xgzf/k4dX/5uTd/7Gv + o/+joJL/pKGU/4WQiP8MM07/H0pk/ydggOf///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BvapYT8OwW5u4ojyTuaRAk7umRJO7p0aVvahJlb6qS5W/qk2Vv6tOlb+sT5fArVCXwK1Sl8Oy + Y7XUxYb/1MaH/9TGhv/UxYb/1MSG/9PEhf/RwYH/0MCA/9DAf//Qv37/z799/9DAf//Qv33/z798/86+ + e//NvHn/y7l1/8u6dP/LunT/yrlz/8q5cv/Mu3X/zLt1/86+e/+7q1//1s+u/+PdyP/i3cf/4tzG/+Hc + w//h28T/6OXb/+vq5f+7u7H/o6CS/6Shk/+Smo3/DDNO/yRPaP8hW3zZ////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AbekTwPHt22Vv6tMlb6qS5XArE+Vwa1SlcKuVJXCr1aXw7BYl8Sx + WZnFsluZxrNcmcezXZnFs2Ch1MeL/9THif/Ux4n/1MaJ/9TGiP/Txof/1MeJ/9THiP/Txob/08SF/9LD + g//QwH//0L99/8++fP/OvXr/zbx5/8+/fP/Pv33/z757/869ef/NvHf/yrpz/8q5cv/KuHH/zb5+/7an + Y//n4tH/5+PR/+fj0f/m4cz/5uDL/+Xh0v/n5dz/x8W7/6Shk/+koZP/naGS/ww0T/8mUmz/HlZ3yf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BuqhVN829c6PCr1aXxLFZl8Wy + W5nGs16ZyLRgm8m2YpvJtmSbybdkncq3ZZ3Kt2adyrdmndLFifXYy5D/18uQ/9fLj//Wy4//1sqN/9TH + iv/Uxon/1MaI/9PFh//TxYX/1MWG/9PDhP/Sw4P/0cKB/9HBgf/Qv37/z759/86+e//NvXj/zLx3/828 + eP/NvHb/zbt0/8++e/+4p1r/2dGy/+Teyf/k3sn/5N7H/+Lcw//o5df/7Ovl/9XUzf+joJL/pKGU/6Sk + lv8ONlD/IlFs/x1UdLv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wHIuHGDy7lpnci1YpvJt2Wdy7honcu5aZ3MuWufzLpsn826bp/Nu2+hzbtwoc27b6HTxovl2MyT/9jM + k//YzJL/18uR/9fLkf/YzJL/2MuQ/9fLj//Wyo3/1ciL/9PGh//TxYX/0sOE/9PFhv/TxYb/08WG/9PD + g//SwoH/0cF//8+/e//Mu3X/y7ly/8q5cf/KuXH/zb59/7qsbP/q5dP/6eXT/+jj0P/n4sv/6eXW/+ro + 4P/b2ND/o6CS/6Ogkv+mo5b/EjpR/yJSbf8eVHSt////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BuKVQIdDCf6nMuWufzbtuoc28cKHOvXKjz750o9C+dqPQv3ej0L94pdHA + eaXRwHml1MeM19vQmv/b0Jn/29CZ/9vQmP/az5b/2c2U/9jMkv/Yy5H/18qQ/9fKjv/Wy47/1sqO/9fM + kP/Xy4//1ciK/9PGiP/SxIX/0sOC/9DAfv/Pvnr/z756/869eP/NvXf/zr12/9HBfv+1pFT/3da4/+fh + zP/m38j/5d7E/+bgy//r6d//6+rl/6Kfkf+joJP/pKGT/xtAVP8fUm7/H1V1n////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wHHt3Bt1MWCqdC+dqXRwHml0cF7p9LC + fafTw3+n08SBqdPFganUxYKp1MWDqdXIjs3c0p7/3NGc/9zRnP/c0Jv/3NCb/9zRm//c0Jn/28+Y/9rP + lv/YzJH/2MyS/9nOlv/YzJT/18uR/9fLkf/Xy4//1smM/9PFhv/SwoH/0cF//8++ev/OvHf/zLt1/8u6 + c//LunL/zL17/72wc//r59T/6+bS/+nkzf/q5dL/7uzj/+zr5P+koZP/pKGU/6Shk/8pSlr/IFJu/x9V + dY////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bt6RPEdPF + h6vTw3+n1MWCqdXHhKnVyIar1smIrdbKiq3Xyout18qLrdfKi63Wy5HD39Wj/9/Vo//f1KL/3tOg/93R + nf/c0Z3/3NGc/9vQmv/az5j/3dKd/93ToP/c0p3/3NGb/9vQmf/ZzpX/18qQ/9TGiP/SxIP/0cKA/9DA + fv/RwX//0cB9/9C/e//Ovnn/zr14/9PEhP+zoVH/4tvB/+jhy//n4Mf/5uDJ/+nm2P/v7uj/r6yg/6Sh + k/+lopX/Mk9g/yRWcv8fVXWB////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wHCsmdX28+XsdfKiq3Yy42v2MyPr9nNkbHZzZKx2s6TsdrOk7HazpSx2s6Wu9/V + pf/g1qb/39Wl/9/Vpf/g1qX/39ak/9/Vov/e1KH/4Nam/9/Vpf/f1KP/3dOh/9zRnv/c0Jv/2s6X/9jM + kP/Xyoz/1smK/9TIh//Tx4X/0sOB/9C/ff/Pvnr/z757/8++e//OvXj/zb99/8K1e//t6NX/6+bQ/+vm + 0f/v7OH/8fDs/7e1qv+joJP/paKV/zRQYf8gU3D/H1V1c////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bt6RPBdPGi6PazpSz28+Ws9vQmLPc0Jm13NGatdzS + m7Xd0py13dKct93Sm7fg16r94tmt/+LZrP/h2Kn/4deo/+DWpv/g1qb/4tmt/+PZrf/i2a3/4dir/+DX + qP/g1aX/3dKd/9rOlf/YypD/18mO/9bIi//Ux4f/08WF/9LFg//UxYX/1MeG/9PEhP/SwoH/0cF+/9TG + if+zolL/5eDH/+jiyv/o4sr/6ubW/+3r4v+/vLL/paKV/6Ogk/80UWL/H1Fu/x9VdWX///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wG+rF0/39Wlu93T + nbfe05+339Shud/Vornf1aO54NWju+DVpLvf1aO54dit9ePbr//j2q7/5Nqv/+Parv/k2q//5t62/+be + tv/l3bT/5Nux/+Parv/h2Kr/3dKf/9vPmf/azpf/2s+W/9nNk//YzJH/2MuO/9fKjP/Xy47/1sqM/9TG + h//TxYT/0sOB/9DAfv/Pv3v/zL59/8a7hf/s59L/7ObQ/+/s3//y8ez/yMe+/6ShlP+joJP/NFBh/xxQ + bf8fVXVV////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AdHFipPh2Km94Nenu+HYqL3i2Km94tiqveLZq7/i2au/4tmrv+Pbsu3m3rb/5t21/+Xc + s//m3bb/6OC8/+fgu//n37r/5t64/+beuP/k3LL/4Nam/9/Uov/e06D/3dGc/9vPmf/ZzZT/2MuR/9nM + k//ZzZX/2MyS/9jLkP/Xy47/1smK/9THh//TxYT/0sKA/9TGif+zolT/5d/F/+jiyf/q5dP/7erg/8/N + w/+in5H/pKGU/zRQYf8bUG7/H1V1R////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wG4pVIn4NaqweParsHk26/B5NuwweTcscPl3LLD5dyyw+Xc + ssPk3LXl59+5/+ffuP/p4r//6+TF/+vkw//q48L/6ePA/+niv//l3bX/4deq/+DWp//f1aX/3tOh/93S + nv/d0Z3/3dGc/97Tof/e06D/3dKd/9vQmf/ZzJP/18qP/9bIi//Uxof/08SD/9HCgP/SwoD/zL57/8rA + jf/s59D/7+vb//Lx6v/Z2NH/op+S/6ajl/81UWD/IFVy/x9VdTn///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Ac7BhXnn4LvH5t61xebe + t8fn37jH5+C5x+fgucfn37nH5t+64eniwP/s5sf/7efL/+zmyf/s5sj/6+XH/+rkw//m3rf/5Nux/+Pa + sP/i2a3/4diq/+DXp//f1qX/4Nan/+HYqv/g1qb/3tSi/93Sn//bz5r/28+Z/9rOlf/YzJH/18qN/9bI + iv/Vx4b/0sKA/9XHjP+1pFj/6OHH/+rl0P/u7OD/3tvT/6Ogkv+mo5b/OFNh/x9WdP8eVHQr////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wG3pE8V39asv+jhvMnp4b7L6eK/y+niv8vp4r/L6eK/y+jiwd3u6M3/7unQ/+7p0P/u6c//7unP/+zm + yf/o4bz/59+4/+XdtP/k3LL/49qv/+LYrP/i2a3/5Nyz/+Xdtf/k27H/49qt/+HYqf/g1qX/3tSh/9vQ + m//azpb/2MuS/9fKjv/Vx4r/1MaG/9TFhf/Tw4L/yrx5/8/Elf/v69j/8/Lp/+jn4f+joJP/pqOW/zxV + Y/8dVXT/H1V0G////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Aci5dl/s5snR6+XFz+vlxs/r5cfP6+XHz+zmytHv6tLh8ezV//Ds + 1f/w69T/8OrT/+3nyv/p4r//6eG9/+fguv/o4Ln/59+3/+betf/o4bz/6ePA/+jhvP/m3rj/5dy0/+Pa + r//i2Kv/4Nan/9/Uov/e06D/3NGc/9vPmP/ZzZT/2MuQ/9fJjP/UxYX/0cB9/9TGif+3p13/6+XP//Dt + 4v/u7Ob/paKV/6Wilf9CWmb/G09u/x9VdA3///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wG3pE8H3dOote3nzNPt583T7ejN0+/q + 0tfx7dnd8e3Z4fHt2f/y7dn/8u3Y/+7pz//s5sn/6+XG/+rkwv/q4sD/6OC8/+niwP/s5sn/7OXI/+vk + xP/p4r//6OG9/+ffuv/m3bX/5Nux/+Parf/h16n/39Wj/93Snv/b0Jn/2s6V/9fKkP/WyIr/1MaF/9PD + gv/TwoD/yLl2/9XMpP/08ej/9fTv/6ekmP+mo5b/R11o/xlPbvv///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AcKy + akft6M/X7+rS1/Ht2Nvz793h8+/d4fPv3eHz793/8u7b/+/p0P/t6M3/7efM/+zmyf/r5cb/6+TG/+7p + z//w69P/7+nR/+7ozv/t58v/6+XH/+niwP/o4bz/5t63/+XctP/j2q//4diq/+HXp//f1aT/3tOf/9zR + mv/azpT/18qM/9XHh//SwoH/0cB9/9TGiP+6q2X/8e7j//Lw6f+vrqL/paKV/0xia/8bUXDv////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B2tCiofPw3uH08eHj9PHh4/Xx4uP18eLl8u7b/fDs1f/w69T/7+rS/+/p + 0P/u6c7/8OvT//Lu2v/x7dn/8ezX//Dr1P/u6dD/7ujO/+zmyf/s5cf/6uPB/+nhvf/n37n/5t20/+Tb + sP/i2Kv/39Wk/97ToP/b0Jn/2MyR/9fJjP/WyIn/1ceG/9PDgf/TwoD/x7l1/9zWuP/29fP/uLas/6Wi + lf9PY23/IFd13////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AbmnVSvu6dPf9fLl5/bz5ef28+Xn8/De4fHt + 2fny7dn/8ezX//Dr1f/w7NX/8+/d//Tw4P/z797/8+/d//Lu2//y7dj/8OzV/+/q0v/u6M//7ObK/+vk + xf/p4r//6OC7/+betv/k3LH/49qu/+LYqf/f1KH/3NGa/9vOlf/ZzJD/18qM/9XHhv/Sw4H/0cB8/9PF + h/+/sXL/8vDr/768sv+lopX/UGRt/x9WdtH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B18ychff1 + 6uv29Ofp9PHh4/Pw3+Hy7t338+/c//Pv2//08OD/9vPl//by5P/18uP/9fHh//Tw3//z793/8u7b//Ht + 2P/w69X/7+nR/+7ozv/t5sr/6+TF/+niv//o4Lv/5t62/+Xcsf/g1qb/3tOg/9vQmv/azpX/2MuQ/9bI + i//WyYr/1ceG/9PCgP/Tw4L/x7l4/+Leyv/Jx7//pqOW/1Nmb/8cVXXB////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AbekTxnr5cvX9vPl5/Xy5OX18uPl9PHh9fXy4v/39Oj/9/Tp//f06P/29Ob/9vPl//Xy + 5P/18uL/9PHh//Tw3v/y7tv/8u3Y//Dr1f/v6dH/7efM/+vlx//q48L/6OC8/+bet//j2q7/4tip/+DW + pP/e05//3NGa/9rOlf/YzJD/1sqM/9XIiP/TxIL/0sF+/9bJj//FuoP/z87H/6ajl/9TZ2//HVRytf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BzsCFaff06ev39Ojp9vTn6ff16vX59+3/+fft//j2 + 7P/49uv/9/Xq//f06P/29Of/9vPl//Xy4v/08eD/8+/d//Lu2v/x7Nb/8OvU/+/p0P/t58z/7OXH/+ni + wP/m3rf/5Nyx/+LZrP/h16b/3tSh/93RnP/bz5f/2c2S/9fLjf/WyIn/1MWD/9LCf//Uxof/x7p6/8S/ + qv+mo5b/V2py/xxTcqX///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AbekTwnk3bzF+fft7/r4 + 8fH5+PD5+vjw//n37//59+7/+Pbt//j27P/39er/9/Tp//f05//28+X/9fLj//Tx4P/z793/8u3a//Hs + 1v/w6tL/7ujO/+zmyf/p4r//59+5/+XdtP/j2q7/4dio/9/Vo//d0p7/3NCY/9zQmf/bz5j/2cyT/8e7 + iP/QwH3/rKR//7Sod/+1qnX/pqOW/1pvd/8eVHSX////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bx7h1Tfn37+/7+vT1+vnz+fr58v/6+fH/+vjw//n47//59+7/+Pbt//j16//39en/9vTn//by + 5P/18eL/8/Df//Pu3P/x7dj/8OvU/+7oz//s5cf/6eLA/+jgvP/o4Lz/49uw/9XNqv/WypT/v7mc/6KY + bP+7s5H/a2RH/8S5iv87OC3/zL2E/2tmU/+bkm3/w7Z3/6Whiv9ccXn/H1R0h////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wHi2rez/Pv29/v69fn7+vT/+/nz//r58v/6+PH/+fjv//n3 + 7v/49uz/+PXq//f06P/28+b/9fLj//Tx4P/08eH/6+XL/+rm0//Kw6n/29W4/4yGb//c07D/YFxN/7mw + hv9oY1T/lY1q/4qEbv+bk3H/mpN4/6Sce/+wqI3/sKaC/6CZgP+jmXP/s6h2/7qvff+7uKj/Wm94/x5U + dHv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BvKpaL/Ty5fH7+/f5/Pv2//v6 + 9P/7+fP/+vny//r48f/69+//9PDh//j16//Ixbn/6ePL/6ilmf++t57/o6CR/4eCbv+qppT/aWVY/7Kr + j/9ybmD/rKWO/5mTff+qpI3/pJ6H/7avl/+RiWn/u7SY/4+Ha/+xqpD/ko17/6agiP+rp53/u7qw/5Od + n/+Ckpj/hJyn/UJjc+EvZ4A3////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wHb0qeP/Pv4+/z79//g3tb/zMax/9za0v+Mhm//vbmo/1lVSP/n49L/Z2Rc/8G8qv+Jhnv/t7Ok/46K + ff+9uKf/lZGD/8fCr/+Nhm//uLGU/5SPff+qo4f/nJeL/7Otlv+rp5z/paeh/8DBvP12gYP9namn+3J9 + fe9bb23pqqqk7yA4QdcUQVRrM0FBjzc8Nm////8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Bt6RPG/Ds2uX8+/j/mpeO/6ajmP+opJn/r6yj/56ajf+1sqj/oZyQ/8rG + tv+jno3/ubOX/6qmmv+jnYX/s6+g/5WQff/AvbH/d3t5/6mwrP95goD9c39/96ipo/U9U1fdwsG78zJE + Rb+Qk43lkpWKwV1dVcnLysPdT05Ev8HAuNeSj4fhf39vkVtZTcd5jHoX////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wHTx5R5xsO7/7y4p//Jxbf/nJaA/765 + qf+OiHX/rqmV/5qXiv+fnpH/qKij/XiKi/+wrqf9VW5v56Wspvk4VVXDjpWR9Wl3cL1fYlvdvLyz00pK + Qb3T0szdfnty3aeonr29u7X1i4t/x7m3rvOhn5TlmpiM0bi4rsGGhXefyMrAdamqnneQoY0b////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bq5tTBbKv + pfm8t6SXwb6262B2c/W1u7f5X2tp3W98e+GhpaDjNURAw8DAue9BTECnsrGq53x7csOJiX/Hvby06316 + btHDwbn3oJ6V26qnnuu4tq3tkY6Bz9TVzq2ko5enpaaZaZSShXWKmYYjteTJD7TlyQmz5skFs+bJA/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wHLycPdjJOBOdXXz5edn5Snfn10283NxttcWk/LwsG56ZqXj+mtq6Dht7Sr85iV + iOPHyL7Bqaebv6OkmIXExryHh4t9SbK2qUebq5gdtOXJCbPlyQX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BzM/GW8/Nxumrqp/NvLmw6a+sou2ko5e9ycjAvYGB + coO3vrBLk5iIQbXkyQ+15MkNs+bJBbPmyQP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wG2tKkXtrSpM/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAIAAAAAAAQAAAQAgAAAAAAAACAEAAAAAAAAA + AAAAAAAAAAAAAP///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAMAAAAFAAAABQAA + AAMAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAAwAAAAcAAAAHAAAACwAAAA8AAAALAAAACwAAAAcAAAAFAAAAA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAAMAAAAFAAAACQAAAA0AAAAXAAAAKQUFBVVbX1qVhoV/s0NY + WFUAAAAXAAAAEQAAAA0AAAAJAAAABQAAAAP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAADAAAABQAAAAkAAAANAAAAFQAA + ACEAAAA7UVNOeYKCfK+en5jnw8O+/83MyP/U1NL/np+a6UlLRpMBAQE3AAAAIQAAABUAAAAPAAAACQAA + AAUAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAA + AAUAAAAHAAAACwAAABMAAAAfAAAAMz9BPWuFhYCnmJiS28HBvP/MzMf/09PQ/9XV0//V1dP/1dXT/9XV + 0//S0tD/kpKD/WFfVM0oMS99AQEBRQAAACkAAAAXAAAADwAAAAcAAAAF////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAAMAAAAFAAAABwAAAAsAAAARAAAAGwAAAC0mJSJXgYR+nZGQi8u9vbf7y8vG/9PT + 0P/W1tT/1tXT/9bV0//W1dP/1tXT/9bV0//V1dP/1dXT/9XV0/+ur6b/mZaH/5OThP9fZ2HJBwgIcQAA + AEcAAAAjAAAAFQAAAA0AAAAHAAAAA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAAcAAAAJAAAADwAAABkAAAArFhYUS3t9 + eJWOjYi9t7mz98vKxf/S0c7/1tbU/9bW1P/W1tT/1tbU/9bW1P/W1tT/1tbU/9bV0//W1dP/1tXT/9bV + 0//W1dP/1dXT/8XIxP+WlIT/l5SF/5WSgf+MjoP1O0A8qwEBAWMAAAA9AAAAHwAAABMAAAALAAAABQAA + AAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAMAAAAFAAAACQAA + AA0AAAAXAAAAJwsLCkFxdG+HjYyGs7KzrO3KycT/0tHN/9fW1P/X19X/19fV/9fX1f/X1tT/19bU/9fW + 0//X1tP/1tbS/9bW0f/W1dH/1tXR/9bW0v/W1tP/1tbT/9bW1P/T0cz/0M3D/5SbkP+al4j/lJGB/56b + jP+YlYb/cHJp4RYYF40BAQFXAAAAMQAAABsAAAARAAAACQAAAAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAADAAAABQAAAAkAAAANAAAAFQAAACMCAgI7XmBbeYuLha2qq6XjyMjD/9HQzf/X19X/2NfV/9jX + 1f/Y19X/2NfV/9jX1f/Y19X/19fU/9fX0//X1tL/19bR/9fV0P/W1M//1tXO/9bUzf/V1M7/09DH/8/K + vf/QzL//0Mu//9PRyf/W1dL/r7Os/5qXiP+Wk4P/m5iK/5uYif+XlIT/kI+B/VBQScMCAgJzAAAASQAA + ACcAAAAXAAAADQAAAAcAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAwAAAAUAAAAHAAAACwAAABMAAAAfAAAANVFTTm2JioSlo6Oc2cXG + wP3Qz8v/19bU/9jY1v/Y2Nb/2NjW/9jY1v/Y2Nb/2NjW/9jX1P/Y19P/2NfT/9jW0v/Y1dH/2NXQ/9fV + zv/W1Mz/1dTL/9LPwf/PyLb/z8i1/87Hsv/Szr7/1dTM/9fW0f/X19T/19fV/9fW1P/Hycb/mJWG/5iV + hv+al4j/mpeI/5iVhv+Wk4P/n5yO/3p5bO0nKCOfAQEBXwAAADkAAAAfAAAAEwAAAAsAAAAFAAAAA/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAMAAAAFAAAABwAAAAsAAAARAAAAHQAA + ADE4ODVfhoeCoZublM/Dw7390M/K/9fW1P/a2df/2dnW/9nZ1v/Z2Nb/2djW/9nY1f/Z2NX/2djU/9nX + 0//Z19P/2NfS/9fW0P/X1c//1tXN/9bUzP/U0cP/0Mm3/9DJtP/Px6//0cu1/9TQvP/U0Lv/1NC7/9XR + wP/W08j/19XP/9fW0v/X19X/19fV/9fX1f+WmYz/mZaG/5mWh/+dmov/mJWG/5WSgv+hnpD/mZaG/5WS + gv1aWVDNBwcGdwAAAEsAAAAtAAAAGQAAABEAAAAJAAAABf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAA + AAcAAAAJAAAADwAAABkAAAAtIiIfU4GDfZuWlI7FvsC5+c/Oyf/W1tP/2tnX/9rZ1//a2df/2tnX/9rZ + 1//a2df/2tnW/9nZ1f/Z2dT/2djT/9nX0v/Z1tH/2NbQ/9fVzv/X1cz/1dHE/9DJt//QyrX/z8iw/9LL + tf/V0Lz/1dC7/9XQuf/Uz7n/1M+3/9TOtv/Uz7f/1NC7/9bSwv/W1Mv/2NbR/9jX1P/U0sv/0czB/6ys + ov+cmYr/lJGB/56bjf+Zlob/lpOD/6Cdj/+Zlob/lpOD/5+cjv9hX1fPAgIBawAAAFEAAAA7AAAAKwAA + AB0AAAATAAAACwAAAAX///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAAMAAAAFAAAACQAAAA8AAAAZAAAAKRERD0l6fniTjYyGu7i5svXOzcj/1tXR/9va + 2P/b2tj/29rY/9va2P/a2tf/2trX/9rZ1v/a2db/2tnV/9rZ1P/a2NP/2tfS/9nX0f/Z18//2NbN/9bT + xv/Ryrj/0cu1/9HIsP/TzLX/1tC7/9bRvP/V0Lv/1tC6/9XQuf/Vz7j/1c+3/9XPuP/Vz7f/1c+2/9TO + tv/Uz7j/0sy2/8/Jt//Qyrj/0cy//9PQx//W1dD/t724/5qXiP+VkoH/npuN/5uYif+VkoL/n5yO/5qX + h/+XlIT/npuN/3t4bOkDAwJ7AAAAZQAAAFUAAABFAAAAMwAAACMAAAAXAAAADQAAAAcAAAAD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAADAAAABQAAAAkAAAANAAAAFQAAACUICAhDam1nh4uK + hLWys63vzMzG/9XU0P/b2tj/3NvZ/9vb2P/b29j/29vY/9vb2P/b2tf/29rX/9va1v/b2tX/2tnU/9rZ + 0//a2NL/2djR/9nXz//X1Mj/0sy6/9LLt//RybL/08y2/9bRvP/W0bz/1tG6/9bQuv/W0Ln/1tC4/9bQ + uP/W0Lj/1dC5/9XQuv/V0bn/1dC6/9LLsv/Pxqv/zsWo/8/Gq//Ry7P/1tPE/9fVzv/Y2NP/2NjW/9jY + 1v/T1NH/l5aH/5eUhf+dmov/nJmK/5eUhP+dmov/nJmK/5aTg/+cmYv/mJWH+xUVEpEAAABvAAAAYwAA + AFcAAABHAAAANwAAACcAAAAbAAAAEQAAAAkAAAAF////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAAUAAAAHAAAACwAA + ABMAAAAhAAAAO1pdWH2IiYOvqqul58vKxf/V1M//3NvY/93c2f/c3Nn/3NzZ/9zb2f/c29n/3NvY/9za + 1//b29f/29rV/9va1f/b2dP/2tnS/9rY0f/Z2M//19XJ/8jBpf/BuJP/wbeQ/9PMtf/W0b3/19K9/9fR + vP/X0br/1tG6/9bRuf/W0bj/1tG5/9bRuf/W0Lr/1tG6/9bRuv/TzLP/0Met/8/GrP/QyK//0su0/9bR + vP/V0bn/1dC4/9XQuv/X0sH/19XL/9nX0v/Z2db/2dnX/9nY1v+VnJD/mpeH/5yZiv+cmYn/mZaH/5yZ + iv+cmYr/l5SE/5qXiP+gnY//TEpBrwEBAXEAAABnAAAAXwAAAFMAAABJAAAAPQAAADMAAAAnAAAAGwAA + AA8AAAAHAAAAA////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAADAAAABwAAAAsAAAARAAAAHwAAADVIS0dviYqEqaGgmt3IyML91dPO/9vb1//d3dr/3dza/93c + 2v/d3Nr/3dza/93c2f/d3Nj/3NzY/9zb1//c29b/29rV/9va0//b2dL/2tnQ/9jWyf/FvZz/sad1/6CR + TP+bijb/pJRD/62dUv+woVr/pphT/8fAnP/X0bn/19G5/9bRuf/X0bn/19K6/9fSuv/X0rv/0820/9DI + rv/Qx6z/0civ/9TNtv/X077/19O//9fTv//X07//19K+/9bRvP/W0bn/1tC5/9bSvv/Y1Mj/2dbQ/9rY + 1f/Y1tH/1NHI/6qtoP+bmIn/mZaG/56bjf+al4f/m5iJ/56bjP+Zlof/mZaG/6Cdj/9qaF/DAQEBbwAA + AGcAAABlAAAAZwEBAGsKDAt1Cw8RgwcND3kBAQE/AAAAJQAAABUAAAAJAAAABf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAAMAAAAJAAAAEQAAABsAAAAxNDo5bYSHgaOWlo/TxMW+/dLS + zP/b2tf/3t3b/97d2//e3dv/3t3a/97d2v/d3dr/3d3Z/93c2f/d3Nj/3dvX/93b1v/c2tX/3NrT/9va + 0f/b2c7/xL2b/7Opev+hkkv/mogz/6KQOv+tm0P/t6ZX/8GwaP/Ft3X/x7h1/8a0Z/+/r2f/q5xU/8jA + nP/X0rv/19K8/9PNtP/Rya//0ciu/9LJsf/Vzrf/2NS//9jUwP/Y1L//2NPA/9jTwP/Y08D/2NPA/9jT + wP/Y0r7/19K8/9bRuv/W0bn/1M63/9LKtv/Ryrj/1M7C/9PPxP/a2df/sb24/5yZiv+TkID/oJ2P/5qX + iP+YlYX/oJ2P/5qXiP+Zlob/oJ2P/25ybOUKGiW5ChomxRQpM88mQU/fL1Jh7UVwfvdNf5P7XI6i+UBh + a9ESL0F3AAAAKQAAABcAAAALAAAABwAAAAP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAsAAAAZAAAAKxgX + FVd/g32dkJCJyb/AuvvS0cz/2tnW/9/e2//f3tv/397b/97e2//e3tv/3t7b/97e2v/e3tr/3t3Z/97d + 2P/e3Nf/3dzW/93b1P/c29P/2tjM/8W9mv+0qXn/pJVO/56MOP+mlUH/sZ5J/7qpW//CsWr/yLp8/9LG + jv/Vxof/1MR+/9PBc//TwXL/1cN6/9TEff+6qVz/nY1A/9HJrf/SyrH/1dC4/9nUv//Z1MD/2dTA/9nU + wf/Z1MH/2dTB/9nUwf/Y1MD/2NTA/9jTwP/Y08D/19K//9TOuP/RyK//0cmv/9HHrP/TzbX/19TD/9jW + zv/Z2NP/2trW/9ra1//Q0s//mZeI/5aTg/+fnI7/nJmL/5WSgv+gnY//mpeI/5iVhv+gnY//ZHN1/w82 + Uf8VQFr/I1Fq/zVmfv8/c4z/Q3mQ/0Z8k/9hj6L/ap6z/x5TcfsOJzZjAAAAJwAAABcAAAANAAAABwAA + AAUAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAABQAAAB8MDAtNd3x3lYiHgb+5urT30dDK/9rY1P/f3tv/39/c/9/f3P/f3tz/397c/9/e + 2//f3tv/39/b/9/e2v/f3tj/397Y/97c1v/d3NX/3dvU/9rXy//FvZv/tKp4/6aYUv+ikT//qplI/7Wj + UP+9rGL/wrJs/8q8f//Ux47/1caG/9XEff/Tv23/zrhh/8y3X//Ltl7/ybRb/8eyWf/HsVf/yrhl/8u6 + cf+mkzv/ua5+/9rVwf/a1cH/2dXB/9nVwf/Z1MH/2dTB/9nUwf/Z1MH/2dTB/9jTv//Vzrf/0cmw/9LM + sv/SyrH/1tC6/9jTvv/X0rz/19K6/9fSu//Y1MH/2dfL/9rZ0//b2tf/29rY/9va2P+TmY3/mZaG/52a + i/+em4z/l5SE/56bjf+cmYr/lpOD/6GekP9odXX/DjVQ/xM9WP8gTWf/MWF5/ztuhf9Cdo3/R3yU/0+E + mv90orb/HlR0/xU7UpMAAAA1AAAAIwAAABUAAAANAAAACQAAAAUAAAAD////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AW5tZAefnpedsrSt79DPyf/Z2NP/39/c/+Dg + 3f/g4N3/4ODd/+Dg3f/g4N3/4ODc/+Dg3P/g39v/397Z/9/d2f/f3df/39zV/97c0//a18j/w7uW/7Op + d/+nmFL/pZRE/62cTP+4p1f/v69n/8Szbv/Nv4T/1siO/9XHhf/WxXz/0r9t/865Yf/Mt1//zLZe/8q0 + W//Hslr/x7FY/8WxWP/FsFj/xbBZ/8OvWP/Crlf/z796/7ajTv+YiDX/2tXC/9rVwv/a1cL/2tXC/9nV + wf/Y07//1M22/9HJsP/Sy7L/0sqy/9bSvP/Z1cH/2dXB/9nVwf/Z1cH/2dS//9jTvf/Y0rv/19K6/9jT + v//a1sr/29jS/9va1v/Y19H/1M/E/6Sllv+bmIn/nZqM/52ai/+al4j/m5iJ/56bjf+TkID/oZ6Q/36E + f/8ONVD/Ez1X/x9NZv8wYXr/OW2F/0B1jP9Fe5L/S4Oa/4Cqu/8fVXX/FTxTnQAAADsAAAApAAAAHQAA + ABMAAAANAAAABwAAAAMAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AcvKw9Hh4N7/4eDe/+Hg3v/h4d7/4eHe/+Hh3v/h4N3/4eDc/+Hf2v/h3tn/4N7Y/+Dd + 1v/f3dX/2dbG/8G5k/+yp3P/ppdP/6WURP+vnk7/uqla/8Gwaf/FtXD/0MKH/9bKjv/Wx4X/1sV7/9K+ + bP/OuGH/zbdf/8u2Xv/JtFz/yLJa/8exWP/HsVj/xrFZ/8WwWf/EsFj/wq9Y/8GuV//ArVb/v6xV/76r + VP/DsWL/xLRr/6GNMv+9tIf/2NO+/9XNtf/Sy7H/1c62/9TMtP/Y077/2tbC/9rWwv/a1cL/2tXC/9rV + wv/a1cL/2tXC/9rVwv/Z1cD/2dS+/9jTu//Y0rr/08uy/9PLtv/SzLn/1M3A/9fUzP/b2tf/ubmx/5yZ + iv+al4j/n5yO/5uYiP+cmYr/npuM/5SRgf+hnpD/nJqO/w41UP8SPFf/Hktk/y5feP84a4P/PXOK/0J4 + j/9OhZv/daK2/x9Vdf8UOE6VAAAAOwAAACsAAAAfAAAAFQAAAA8AAAAJAAAABQAAAAP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BxcO6Wdzb1//i4d7/4uHd/+Lh + 3f/i4Nv/4uDa/+Hf2f/g3tf/397W/9bTwf+/to7/r6Ru/6OTSP+jkkD/r55M/7upW//BsWr/xrZx/9PE + iv/Xyo3/18iE/9fGev/Rvmv/zblg/824YP/Mt1//yrRc/8myWv/Hsln/xbFY/8axWf/FsVr/xbBZ/8Ov + WP/Crlf/wK1X/7+sVv+/q1X/vapU/7ypU/+8qVL/uqhR/7mmT//It3P/sp5I/5iGNP/Vzrb/29fD/9vX + w//b18P/29bD/9vWw//b1sP/29bD/9rWwv/a1sL/2tXC/9rVwv/a1cL/2NK9/9PLs//UzLP/0ces/9LJ + rv/Vz7b/2dXE/9rYzv/c29X/3NzY/9zc2f/Dx8L/nJmK/5aTg/+hnpD/nJmK/5yZiv+gnY7/l5SE/6Cd + j/+joJP/EDdQ/xI7Vv8cSWP/K112/zdshf89dI3/QnqS/1OInv9mlqz/H1V1/xM1SYcAAAA1AAAAJwAA + AB0AAAATAAAADQAAAAkAAAAFAAAAA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B0M7H4+Lh2//h4Nr/4d/Z/+De1//V0r7/vbWL/62hZ/+hkEL/opA8/66c + Sf+5qFn/wrBp/8e4c//Ux4v/18qM/9jJg//WxXn/0b5p/865Yf/NuGD/zLdf/8q1XP/Is1r/x7JZ/8ex + Wf/Gslr/xbFa/8OwWf/Dr1n/wa9Y/8GuV/+/rVb/v6xW/76rVf+9qlT/vKlT/7unUv+5pk//t6RM/7aj + S/+2okv/tqJL/76tYf++rmX/nYkt/8K5kP/c18T/29fD/9vXw//b18P/29fD/9vWw//b1sP/29bD/9jS + vf/Ty7P/1Myz/9LKsP/Vzrf/2NS//9rVwP/Z1L3/2NS7/9jTvP/Z1sP/29nN/9za1P/d3Nn/3dza/9nZ + 1v+cmYr/l5SE/6Gekf+cmYr/mJWG/6Kfkf+al4f/n5yN/5+cjv8XPFP/ETpV/xtIYv8pWnP/NmqC/zxy + i/9Ad4//UYee/2SUrP8fVXX/EjNHcwAAAC0AAAAhAAAAFwAAAA8AAAALAAAABwAAAAUAAAAD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wHFwrh30s64/7y0 + i/+toWj/o5NG/6STQf+vnkv/uqla/8KxaP/IuHT/1smM/9jKiv/ZyYP/1sV4/9G9aP/OuWH/zbhg/8y3 + X//KtVz/ybNa/8iyWv/HsVn/x7Jb/8WyW//EsVr/wrBZ/8GwWP/Br1j/wK1W/7+tVv++rFb/vatV/7yq + VP+7qVL/uqdQ/7ilTf+3o0z/tqNM/7ajTf+2pE//tqNO/7WiTv+0oUz/tKFM/8W1dP+xnkf/nIw+/9zX + xP/c18T/3NfE/9vXw//Vzrf/1M20/9PMsf/UzLT/19K7/9vXw//b18P/29fD/9vXw//b1sP/29bB/9rV + v//a1L3/2dO8/9rVwf/c2Mz/3NrT/9nXzv/V0cX/1dDD/6Cej/+bmIn/oJ2P/6Cdjv+Wk4P/op+R/5uY + if+dmov/nZqM/yZGWv8ROVT/GUZg/yZXcP8zaIH/OXCJ/z12j/9Rhp3/YpKo/x9Vdf8RMURdAAAAIQAA + ABcAAAAPAAAACQAAAAcAAAAFAAAAA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AZ2OQjeQgDB1l4c4raOTRe+omEr/tKJT/72tYf/Dsmv/yrx2/9jJj//Zyon/2sqD/9bE + dv/RvGf/z7li/865Yf/NuGD/yrVd/8mzW//Is1v/x7Ja/8izW//Islz/xbJb/8SxWv/CsFr/wq9Z/8Gu + WP/ArVf/v6xW/76rVf+9q1T/vKlT/7qnUP+4pU3/t6VN/7ekTP+3pU//t6VP/7akT/+1pE7/taNO/7Si + Tf+zoU3/s6FN/7OgTP+yoEz/vKxi/7urYP+Zhin/wriP/9TOtP/UzLL/1s62/9nUvv/c2MT/3NjE/9zY + xP/c2MT/3NfE/9zXxP/c18T/3NfE/9vXw//b18L/2tXA/9rUvf/UzbP/08qx/9PMtP/Vzr//2dTJ/9zb + 1//d3dr/r6+l/52ai/+gnY//n5yO/5eUhP+hnpD/nZqM/52ai/+em43/QFln/xA5U/8XRF7/IlNu/zFl + fv83bof/OnOM/1aKoP9Shp7/H1V1/xExREcAAAAXAAAADwAAAAkAAAAFAAAAAwAAAAP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wGgkklBkIEzd5yNQrWomU/zrJxQ97moW/u+rV/jvapVy8m5 + cuvZy5D/2syI/9rKg//WxHb/0bxm/8+6Yv/OuWH/zbhg/8u1Xf/KtFz/ybNb/8iyW//Is1z/x7Jd/8ay + XP/FsVv/w7Ba/8KvWv/Brln/wK1Y/7+sV/+/q1f/vqtW/7ypVP+6p1H/uaZP/7ilTv+4pU7/uKVQ/7im + Uf+3pVD/tqRP/7WjT/+0o07/tKJO/7OiTf+zoU3/sqFN/7KhTP+yoEz/sZ9K/6+cR/+vnEf/wbJx/6+c + Q/+fkEb/3NnH/9zZx//c2Mf/3NjH/9zYx//c2Mf/3NjG/9zYxP/c2MT/3NjE/9zXxP/Z1L7/1s63/9TM + sv/Ty7D/08uw/9bQtf/a1b7/29jH/9za0f/e3Nf/3t7a/97e2/+/vbT/m5iJ/6GekP+em43/mZaH/5+c + jv+hno//m5iK/6Cdj/9bbXT/DzdS/xVCXP8gUGr/LmJ8/zZuh/84cov/Woyi/0yAmv8fVXX/ES9CLwAA + AA0AAAAHAAAABQAAAAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wGrnloFoJJLSY+AM3uik0y/rJ1X9bGh + WPe+rWT9wbFm38CtWM/OvnHL18d9u9rIec/ax3TR075m2c+5ZP/PumP/zrli/824YP/Ltl7/ybRc/8mz + W//Is1z/yLRd/8izXf/Hslz/xrFc/8SxW//DsFv/wq9a/8GuWf+/rVj/v6xX/76rV/+8qVT/uqdR/7qm + UP+5pU//uaVQ/7mmUv+4plL/uKVR/7ekUf+3o1D/tqNQ/7WiT/+1ok//tKJO/7ShTv+zoU7/s6BN/7Ce + SP+wnUf/r5xH/7CdR/+wnkr/saBM/7GgTf+9rWf/uqpf/5iEJv/MxaT/3dnH/9zZx//c2cf/3NjH/9zY + x//c2Mf/2NO+/9XNtv/UzbP/1c61/9bPt//c2MT/3NjD/9vXwv/a1r//2tW9/9rVvv/b2Mb/3drQ/97c + 1//f3tv/397c/8nJw/+dmov/nJmK/6GekP+bmIn/npuM/6GekP+al4f/oZ6Q/1xvc/8PN1L/FD9a/x1N + Z/8pXnj/M2uE/zZwif9ZjaP/UIOc/x9Vdf8QLD0VAAAABQAAAAP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bqp1YCZ+R + SU2QgTSBpJVPx62eWfmzpFz3wbFq+8Szad3Cr1rT0cF1zdnIfcHbyXnR2cZz0dK8XsvMs0vFyrFGw8mw + RcPIr0PDx7Ja98q1Xf/JtFz/ybNc/8m0Xf/ItF3/x7Nd/8WyXP/FsVv/xLBb/8KvWv/Brlr/wa5Z/8Ct + WP+/rFf/valU/7uoUv+6plD/uqZR/7mmUf+5p1P/uaZT/7imUv+4pVL/t6VR/7akUf+2pFD/taNQ/7Wi + UP+0olD/tKFP/7OgTf+xnkn/sZ1J/7CdSP+wnUr/sp9N/7OhT/+zoU//sqFP/7OhT/+zoU7/sqFP/7Oi + UP/FuHr/rptD/6OVT//d2cj/29fE/9jSu//VzrT/1M6z/9XOtv/Y07z/29jF/9zZx//c2cb/3NnF/9zZ + xf/c2cX/3NjD/9vXwP/b1b7/29W+/9zXxP/d2s7/3t3W/9zb1P/X0sb/08/D/52ajP+Zlof/op+S/52a + jP+dmoz/oJ2O/5iVhf+hnpD/ZnZ3/w42Uf8SPlj/G0pk/ydadP8yaoP/NXCJ/1qOo/9Ge5X/H1V1+wAA + AAUAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AaibVQ2ej0dVkYI1h6WXUc2unln7tKVd98Oya/nDsmfbxbNd2dPDeMvbyn7H28p60djG + cdHSvF3LzLNKxcuyR8PJsEXDyK9DwcauQsHErEC/wqs/v8GpPb/Aq0vbyLNe/8izXv/Hsl3/xrJc/8Wx + XP/CsFv/wa9a/8GuWf/ArVn/v6xY/76rVv+7qFL/u6dR/7qnUf+6p1L/u6hU/7qnVP+5p1P/uaZT/7il + Uv+4pVL/t6RR/7akUf+2o1H/taNQ/7WjUP+zoEz/sZ5K/7GeSf+xnUr/sp9M/7OhT/+0oVD/tKFQ/7Sh + UP+0olH/tKJR/7SiUf+0olH/tKJR/7SiUf+0olH/tKNR/7+xa/+5qFz/l4Qn/8rBnv/X0Ln/29fD/93a + yP/e2sj/3drI/93ayP/d2cj/3dnI/93ZyP/d2cj/3dnI/9zZx//c2MP/29fB/9vWv//WzrP/1cy0/9XO + uP/X0cH/2tfM/97d2f/f3tz/oZ6Q/5qXh/+in5L/npuN/56bjf+hnpD/mZaG/6GekP96hYH/DTVQ/xI8 + V/8ZR2L/JFhy/y9ngv8zbon/YpOp/zxzj/8fVXXt////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wGomlUPm41DXZKDN4unmVTVrp9Z+7WmXfnEs233w7Jk28i1 + Yd3UxHnJ3Mx+zdzKedHYxW/P0btaycyzSMPKskbDyrBFwcivQ8HHrUK/xaxAv8OrP7/Cqj29wKg7vb+m + Obu9pTe7vKQ2ubukOb/Brln/xLBc/8KvW//Cr1r/wa5a/8CtWf+9qlX/vKlU/7ypVP+7p1P/u6hU/7yp + Vf+7qFX/uqhV/7mnVP+4plT/uKVT/7elUv+2pFL/tqRR/7ajUf+1olD/s6BM/7OfTP+ynkr/sp9L/7Og + Tv+1o1H/taNR/7WjUf+0o1H/taNS/7WjUv+1o1L/taNS/7WjU/+1pFP/tqRT/7WjU/+0oVD/s6BO/7Og + Tf+zoU7/tKNR/8i6ff+tmkH/qJtZ/97ayf/e2sn/3trJ/97ayf/e2sj/3trI/93ayP/d2sj/3dnI/93Z + yP/Z1L7/1s63/9TOs//UzbL/1s6z/9nTuP/c2ML/3dvL/9/d1f/g39n/4ODc/+Dg3P+uraL/nZqM/6Ge + kf+gnY//nJmK/6Ogkv+bmIn/oZ6Q/5OWjf8ONVD/ETpV/xZEX/8gVG//LWaB/zJtiP9nl6z/N3CM/x9V + dd////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BopRMha2e + WPe3qF/5xbRu9cOxYdvKuGTf1sZ7yd3Mf9HbyXnR2MVvzdG6WcfMs0jDy7FHwcqwRcHIr0O/xq5Cv8Ws + QL/Cqz+9wao9vcCoO7u/pzq7vqU4ubykNrm7ozS3uaEzt7igMbW3ni+1tZ0ts7mmTevArVn/vqpV/72p + VP+8qFP/vKhU/7ypVv+8qVf/u6lW/7uoVv+6qFb/uqdV/7mnVf+5plT/uKZU/7elVP+2pFP/taJR/7Og + TP+zn0z/s59M/7OgTf+1o1H/taRS/7akUv+2pFL/tqNT/7akU/+2pFP/tqRT/7akU/+2pFT/t6VU/7el + VP+2pFP/tKJQ/7ShTv+1ok//tKFP/7akU/+3pVb/t6ZW/7elVv+3pVb/xLVz/7qpXv+XhCj/1c+1/97a + yf/e2sn/3trJ/97ayf/c2MX/2NK7/9bOtv/Wz7T/1s+3/9nTvf/d2sj/3trH/93Zw//d18D/3Ne+/9zY + wf/d2sr/393U/+Hf2v/h4N3/4eDd/768s/+em4z/oZ6Q/6Kfkv+YlYb/o6CT/5yZi/+in5L/paOW/w42 + Uf8QOFP/FEJc/x5Qa/8qYXv/MGyG/2KUqf8zbIn/H1V1z////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AaydVou7qlzry7ln3dnHfcvezX7R28l5z9fEbc3QuVbFzLNIwcuy + RsHKsEW/ya9Dv8etQr/FrEC9w6s/vcGpPbvAqDu7v6c5ub6mOLm9pDa3u6M0t7qhMre5oDG1t58vs7Wd + LrO0nCyzs5oqsbKZKK+wmCevs507z7upVf+9q1j/vKtY/7yqWP+7qVf/u6hX/7qoVv+6p1b/uadW/7im + Vf+4pVX/t6VU/7WjUf+0oU7/tKFN/7OhTv+0olD/tqRT/7alVf+2pVX/tqVU/7elVf+3pVX/t6VV/7el + Vf+3plX/t6VV/7elVv+3pVX/tqNS/7WiUP+0ok//taNR/7WjUf+4plb/uKZX/7imV/+4p1f/uKdX/7mn + V/+4p1j/uKdY/7inWP+5qVv/ybuA/6yYP/+toGP/29W//9jQuP/Y0bj/1s+2/9nSu//c18P/39rJ/9/a + yf/f2sj/39rI/97ayP/e2sj/3tnF/93Ywv/d177/3dfA/97ayv/f3dP/4N/Z/9/e2f/b2M//xMG2/5yZ + iv+hnpD/oZ6Q/5iVhv+joJP/npuN/6Kfkv+hnpD/EjpT/w83Uv8TP1r/G0xn/yZdeP8saIT/ZZar/yli + gv8fVXXB////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wHTxYofuaZW8d7N + gdHXw2vL0LhUxcyzSMHKske/yrBFv8ivQ73GrkK9xaxAvcSrP7vCqj27wag7ub+nOrm+pji3vaQ2t7uj + NbW6ojO1uaAxs7efL7O2nS6xtJwssbOaKrGymSivsZgnr7CXJq2ulSStrZQjq6yTIKmrkyOvt6ZU/byq + WP+7qVj/u6lY/7qoV/+5p1f/uKdW/7imVP+1o1H/taJQ/7WiT/+1olD/tqRT/7emVv+3plb/t6VW/7el + Vv+4plb/uKZW/7imV/+4plf/uKZX/7inV/+4p1j/uKZX/7ekU/+1o1H/tqRS/7ajUv+3pFT/uKdY/7mn + V/+5qFj/uahY/7moWP+5qFj/uahZ/7moWf+6qFn/uqhZ/7qoWf+6qFr/uahZ/7elVf/FtXT/uada/5eE + Kf/WzrP/39rI/+Dbyv/f28r/39vK/9/byv/f2sr/39rK/9/ayv/f2sr/39rJ/9/ayf/e2cf/3dnD/9zX + vv/Z0rj/1s+3/9nTwv/a1cf/2dXI/+Hh3v/V1dH/oJ2P/56bjP+joJP/nJmK/6Ogk/+in5H/oZ6Q/5+c + jv8dQ1f/DjZR/xI9WP8YSGP/Ilhz/ylmgf9qm7H/I1x8/x9VdbP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AbqnVTPHtWTN079kx8qwRb3Jr0S9x65CvcWsQLvDqz+7wqo9ucGp + O7m/pzq5vqY4t72lN7W7ozW1uqEzs7mgMbO3ny+ztp4usbWcLLG0myqvspopr7GYJ62wlyarrpYkq66V + I6mskyGpq5IfqamRHaeokBylp44apaaNGaWwnUXjuqlY/7qpWP+4plX/t6RR/7akUv+1o1H/tqRT/7im + Vv+4p1f/uahY/7moWP+5qFj/uahY/7moWP+5qFn/uahY/7moWP+5qFj/uahZ/7imV/+2pFT/tqNT/7el + VP+3pVT/uqha/7qoWv+6qFr/uqla/7qpW/+6qVv/uqlb/7qpWv+7qVr/u6la/7upW/+7qVv/uqpb/7mn + V/+4pVX/uKVW/7elVP+5plf/u6lb/72tYf/LvYL/q5g+/7KlbP/g28r/4NvK/+Dbyv/g28r/4NvK/9/b + yv/f28r/39rK/97ayf/c1sL/2NG7/9bOs//Z0rn/1s6x/93YwP/e2sX/4N3P/+Hf2P/i4dz/4uLe/+Hh + 3f+gnY//m5iJ/6Wilf+fnI7/op+S/6ShlP+fnI7/oJ2P/zFTYP8NNVD/ETtW/xZGYf8fVG//J2J9/2ma + r/8kXXz/H1V1pf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bt6RPG8Sw + WsnRvmbFxKw/ucKqPbnBqTy3wKg6t76mObe9pTe1vKQ1s7qiM7O5oDGzuJ8wsbaeLrG2nSyvtJsrr7Oa + KK2ymCersZcmq6+WJautlSOprJQiqauSIKeqkR6nqZAdpaiPG6Wnjhqjpo0Zo6WMF6Okihaho4kVoaqU + NMe1o1L/t6VT/7emVf+5qFj/uahY/7moWf+5qFn/uahZ/7qpWf+6qVn/uqlZ/7qpWv+6qVr/uqla/7qp + Wv+5p1j/t6VV/7emVv+3plX/uKdX/7uqW/+7qlv/uqpb/7uqW/+7qlz/u6pc/7uqXP+7qlz/u6pd/7uq + Xf+8ql3/vKpd/7upXP+5p1f/uadY/7imVf+5plf/uqla/7yrXf+8q17/vKte/7yrXv+8q17/vKte/8u8 + fv+6qVv/mYcu/9zXwf/g28r/4NvK/+Dbyv/e2MX/2tS9/9fPtv/b1cD/19C4/9/byv/f28r/4NvJ/9/a + xv/f2cH/3tjA/9/axP/g3c7/4eDX/+Ph3P/j4t//4+Lf/6akl/+cmYr/paKV/6Cdj/+in5H/o6CS/5+c + jf+hnpH/TGhu/w00T/8QOVT/FEJd/xxQa/8lXnn/ZZis/x9Yef8fVXWV////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BvKlUqdLAb8W+pzi1vaU3tbykNbO7ojOzuqEysbig + MLG3ny6vtp0sr7SbK62zmimrspknq7GYJqmvliSprpUjqa2UIaerkyClqpIepamQHaOojxujp44aoaaN + GaGmjBihpIsWn6OKFZ+jiRSfookTn6KJE52iiBOdo4oZo7WkVf+6qlr/uqpa/7qpWv+6qVr/u6pa/7uq + W/+7qlv/u6pb/7uqW/+6qVr/uadX/7imVf+5p1f/uKdW/7uqW/+8q13/vKtd/7yrXf+8q13/vKxd/72s + Xv+9rF7/vKxe/7ysXv+8rF//vKxf/7ysX/+6qlv/uadY/7qoWf+5p1j/uqla/7yrXv+9rF//vaxg/72s + YP+9rF//vaxf/76tYP+9rWD/va1g/72sYP++rWD/wbFn/8y+g/+pljz/tahw/9nRuP/a1Lv/2tO7/9rS + uv/h3Mr/4dzK/+Hcyv/h3Mr/4NzK/+Dcyv/g28n/39rH/9/Zwv/e2cH/39nE/+Dczf/h39b/4+Hc/9/e + 1//a1sn/tLOn/5+cjv+koZT/oZ6Q/6ShlP+hnpD/npuN/6Ogk/9ddHn/DDRP/w83Uv8TQFv/Gk1o/yJc + d/9snrL/HVV2/x9VdYf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wG3pE9p0L5yub6mPLO5oDCvuJ8ur7aeLa21nCuts5spq7KZJ6uxmCapsJckqa6VIqeulSGlrJMgpauS + H6OqkR2jqY8coaiPGqGnjRmfpo0Yn6WMF5+kixafpIoVnaOKFJ2jihSdo4kTm6OJE5uiiBOboogTm6KI + E5miiBOZsaBN67urXP+8q1z/u6tc/7urXP+8rF3/u6pa/7moV/+5p1j/uqhZ/7qpWf+9rF//vaxf/72s + X/+9rF//vaxf/72sXv+9rV//va1f/72tX/+9rV//va1f/76tYP+9rF//u6la/7upW/+6qVn/uqlb/7ys + Xv+9rmH/va5h/76uYf++rmH/vq5h/76uYf++rmH/vq5h/76tYv++rWL/v65i/7+uYf+/rmH/vaxf/7yq + W/+7qVr/zL1//7qnWP+biTP/4NvG/+Ldyv/h3cv/4d3L/+Hcy//h3Mv/4dzL/+Hcy//h3Mr/4dzK/+Dc + yf/g28j/39rD/9zWvP/Xz7T/2NG5/9nSvv/b1sf/393U/+Pi3v/Dwbn/npuM/6GekP+joJL/pKGU/6Og + k/+em43/o6CT/2F2e/8MM07/DjZR/xI+Wf8YSmX/IFl0/2uftP8eVHT/H1V1ef///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AbekTwe7qFOty7hmvbSbKquzmiipspkmqbCX + JKevliKlrpUhpa2UIKOrkh+jqpEdoaqQHKGojxqfp44Zn6aNGJ+mjRidpYwXnaWLFp2kixadpIoVm6SK + FJujihSbo4kTmaOJE5miiROZoogTmaKIE5miiROZookTl6KJE5esmDzLvKtc/7upW/+6qFj/u6la/7uo + Wf+8q13/vq1g/76tYP++rWD/vq1g/76uYf++rmH/vq5h/76uYf++rmL/v61h/7+uYf+/rmH/vate/7yq + W/+7qlv/u6pb/72sXv++rmL/v69i/7+vYv+/r2L/v69i/7+vY//Ar2P/wK9j/8CvY//AsGP/wLBj/8Cw + ZP/AsGT/vq1i/7ysXv+8qlz/vKte/7yqXf++rWD/wK9k/8CvZP/Ds2z/zL6C/6iVO/+7sX7/4t3L/+Ld + y//i3cv/4d3L/+Hdy//h3Mv/4dzL/9/axv/a07v/2tO7/9jRtf/Y0LT/29S5/9/awP/h3Mr/4t/U/+Th + 2//l5OD/5eTg/83Nxf+em4z/oJ2P/6ShlP+hnpD/paKV/56bjf+koZT/an9//wwzTv8NNVD/ETxX/xVH + Y/8fVnL/YZiv/x5Vdf8fVXVr////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AbekT1PGtWezuaI8ra6VIqWtkyCjrJMeoauRHaGqkRyfqY8bn6iOGp2njRidpo0YnaaN + GJ2mjRedpYwWm6WLFpulixWbpIsVmaSKFJmkihOZo4oTmaOJE5ejiROXo4kTl6SKFJekixaXpYsWl6WL + FpelixeXpYsXl6qTLK24p1j/vq5h/76uYv++r2L/v69i/7+vY/+/r2P/v69j/7+vY/+/r2P/wK9j/8Cv + Y//Ar2P/vq5h/72rXf+9q17/vKtd/72rXv++rWH/wLBk/8CwZP/AsGT/wLBk/8CwZP/BsGX/wbBl/8Gw + Zf/BsGX/wLBk/8CwZP/BsWX/wLBk/76uYf+9rF//vaxe/72tX/++rWD/wLBk/8CxZv/AsGb/wLBm/8Gw + Zv/BsGb/wbBl/8GwZf/Qw4j/uahY/52MOP/i3cv/4t7L/+Ley//c1r7/2tO6/9vUu//a07r/3Na+/+Db + x//i3cv/4tzJ/+Hbxv/g28L/4NrB/+Hcyf/i4NL/5OLa/+Xj3//l5OH/3NzY/6Cdj/+em43/paKV/56b + jf+lopX/npuN/6ShlP98jIL/DDNO/w00T/8QOlX/FERf/x1Tb/9fl63/H1V1/x9VdV3///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AbmmUZfGtGWzqpEcn6mQ + Gp2pjxqdqI4Zm6eOGJunjRibp40Ym6aNF5umjBeZpYwWmaWMFZmlixWZpYsVl6SLFJekixSXpIsVl6SL + FZekixWXpYsXl6WMF5eljBeXpYwYlaaNGZemjRqXpo0ZlaaNGpWnjRqXp40bl7mpXv3BsWT/wbFk/8Gx + ZP/BsWX/wbFl/8GxZf/BsWX/wbFl/7+uYf++rV//vaxg/76tYP+/rmL/wbBl/8KxZv/BsWb/wbFm/8Gx + Zv/BsWb/wbFm/8GxZv/Csmf/wrJn/8KyZ//Csmf/wrJn/8CvZP+/rWD/v61g/7+tYP++rWD/wbFl/8Ky + Z//Csmf/wrJn/8KyZ//Csmf/wrJo/8KyaP/Csmj/wrJo/8KyaP/Dsmj/w7Jo/8i3cf/LvH7/ppM5/7+0 + g//a07n/3NW9/+DZxP/j3sv/497L/+Pey//i3sv/4t7L/+Ldy//i3cr/4dvI/+DbxP/g2sP/4dzJ/+Pf + 0f/j4tr/5eTf/+Xk4v/k4+H/o6CS/5yZi/+mo5b/nZqM/6Wilf+fnI7/pKGU/5ehjv8MNE//DDRP/w44 + U/8SQFz/GlBs/2CXr/8fVXX/H1V1Tf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Bt6RPMb6sW7O5pUapp44Ym6eOGJmnjReZpo0WmaeNF5mmjBaZpowWl6WM + FpeljBaXpYwWl6WLFpelixaXpYwWlaWMFpWmjBiXpo0ZlaeNGpWnjhuVp44blaeOHJWojxyVqI8dl6iP + Hpeojx6XqZAelamQHpWpkB6VtKJP2cOyaP/Csmj/wrJo/8GxZ/+/rmL/v65j/7+uYv/Ar2P/wrFn/8Oz + af/Ds2n/w7Np/8Oyaf/Dsmj/w7Jo/8KyaP/Dsmj/wrJo/8KzaP/Cs2j/w7No/8KxZ/+/r2P/v65i/7+u + Yv+/rmH/wbBl/8Ozaf/Ds2n/w7Np/8O0af/DtGn/w7Rp/8O0aP/DtGj/w7No/8Ozaf/DtGn/w7Rp/8O0 + af/Csmf/v69j/8CwZP+/rmL/wK9j/9HDiv+4plX/oI8+/+Pfzf/j383/497N/+Pezf/j3sz/497M/+Pe + zP/j3sz/497M/+Ley//h3cn/4NvF/+Daw//h3Mj/4NzK/9zXxv/e2sz/3NfJ/97b0P+op5v/nZqL/6aj + l/+fnI3/paKU/6GekP+lopX/n6WT/w41UP8MM07/DjdS/xI+Wv8dUWz/UIul/x9Vdf8fVXU/////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BuKZShca2 + aquojxuZpo0Wl6aNFpemjRaXpo0WlaaMFpWmjReVpowXlaWMF5WmjBiVpo0ZlaeOGpWnjhuVqI8claiP + HZWpkB2VqZAelamQH5WpkB+VqZAgl6qRIZWqkSGVq5IhlauSIZWrkiGVq5IhlauTIpWzoUjHv65j/8Gw + Zv/Cr2T/w7Fo/8W0a//FtGz/xbRs/8W1bP/FtWz/xbVs/8W0bP/GtW3/xbVs/8W0bP/FtWv/xrVr/8e1 + a//Csmb/wbBk/8CvZP/Br2P/w7Bl/8Szaf/FtGr/xbRq/8e0av/HtGr/x7Rr/8W0a//EtWv/xbVr/8W1 + a//FtWv/xbVr/8a1a//EtWv/wLBk/8CwZP/Ar2T/wK9j/8GyZ//DtGr/xLVr/8W0a//FtGv/y7t5/8u9 + fv+lkjn/xr2R/+Tfzf/k383/5N/N/+Pfzf/j383/49/N/+PfzP/j38z/4NrE/9vUuv/b07f/2NCy/9rS + tv/d2MP/4+DW/+bk3//n5uL/5+bi/7m4rv+gnY//paKU/6GekP+koZT/paKV/6Ogk/+io5P/EDhS/wwz + Tv8NNlH/EDxX/x5Qa/9LhaD/H1V1/x9VdS////8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wG3pE8Zu6lWr76qUaenjRaVp40XlaeNF5WnjReTpo0Yk6eN + GZWnjhqTp44ak6iPHJWpkB2VqZAek6mQHpOqkR+Vq5IglauSIZWrkyOVq5MjlayTI5WslCWVrJQllayU + JZWslCWVrZQmla2VJpWtlSaTrZUnk6+aNKHBsWr/yLZv/8i2b//Itm//yLZu/8i2b//Itm//ybZv/8m2 + b//JtnD/yLZv/8i2b//GtWz/w7Fo/8OyaP/Dsmf/w7Jo/8W0bP/Itm//yLZu/8e2bv/Htm7/x7Zt/8e1 + bf/HtW3/x7Vs/8i1bP/ItWz/yLVs/8i1bP/HtW3/w7Jo/8KxZv/CsWb/wrBl/8SyZ//FtWv/xrZt/8a2 + bf/Htm3/x7Zs/8e3bP/Ht2z/x7ds/8e3bP/Htmz/1MmQ/7elU/+jk0X/5eDN/+Xgzf/l4M3/493I/93X + vv/b07n/3NW8/9vUu//e17//4tzH/+PdyP/i3MT/4t3H/+Pfzv/l4df/5uTe/+fm4v/n5uP/xcO7/6Ge + kP+joJL/op+R/6ShlP+npJf/op+R/6Kgkv8YQVP/DDNO/ww1UP8POlX/Hk9r/0+Jpf8fVXX/H1V1If// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wG3pE9tx7ZtpauTJJenjhiTp44Zk6iPGpOojxuTqZAdk6mRHpOqkR+Tq5Igk6uSIZOskyKVrJMjlayU + JZWslCWVrZUmla2VJpWulieVrpYola6WKJWulimVr5cqla+XKpOvlyqTr5cqk6+YK5OxmS2TsZktk8Cx + a/3JuHL/ybdy/8m4c//JuHP/yrhz/8m4c//JuHP/xbVt/8W0a//Es2v/xbRs/8e2bv/JuHP/yrhz/8m5 + cv/JuXL/ybhy/8m4cv/JuHL/ybdx/8m3cf/Jt3D/yLdw/8i4cP/It3D/xrVs/8OyZv/Dsmj/xLFm/8Sz + aP/HtWv/yLdu/8i3bv/It27/yLdu/8i3bv/It2//yLdv/8e3bv/Ht27/x7du/8e3bv/Ht27/yLhu/8i4 + bv/PwH7/ybt7/6OQNv/IvZL/3NS6/9zVvP/e18D/497K/+Xgzf/k4M3/5ODN/+Tfzf/k3sz/493J/+Lc + xf/i3Mf/497N/+Xi1v/m5N7/5+bj/+fm5P/Nzcj/npuN/6Kfkf+koZT/o6CT/6ajlv+in5H/o6CT/yZQ + V/8MM07/DDRP/w44VP8gUWv/R4Gc/x9Vdf8fVXUR////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AbekTwm6p1Onw7Fgp6iPG5GpkB2TqZEdkaqR + HpGskyGTrJMik6yUI5OtlSWTrZUmk66VJ5OuliiTrpYok6+XKZOvlymTr5grlbCYLJWwmC2TsJkuk7Ga + L5Oymi+VspswlbKbMZOynDGTspwyk7KcMpOznDKVvKxh3cu7dv/Lunb/ybhz/8i2cP/ItnH/xrVv/8i3 + cf/KunX/y7p2/8u6dv/Lunb/yrp1/8u6df/LunX/y7t1/8u6df/LunX/y7p1/8q6dP/KunT/ybly/8W0 + bf/GtW7/xbRs/8a0bP/Itm7/ybhx/8m4cf/JuHD/ybhv/8m4b//JuG//ybhv/8m4b//JuG//yrhw/8q4 + cP/JuHD/ybhw/8m4cP/IuHD/yLdu/8W0av/Es2n/w7Jp/8Wzaf/Ux5D/tqRQ/6aXS//l4c7/5eDO/+Xg + z//l4M7/5eDO/+Xgzv/l4M7/5ODO/+TgzP/j3sr/493H/+Pdx//k38z/5ODS/+Hczv/e2cv/3tvO/9rZ + 0P+gnY7/oJ2P/6ajlv+koZP/paKV/6Kfkf+joJP/PGJi/wwzTv8MM07/DTdS/yNTbf89eZX/H1V1/x9V + dQX///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AbekT1nHtm2ntJ03mayTIZGtlCORrZUkka6VJZGulieTrpYok6+XKZOvmCqTsJgsk7CZ + LJOxmS2TsZouk7KaMJOymzGTs5wxk7OcMpO0nDSVtJ01k7SdNZO0njaVtJ43lbWeN5W1nziVtZ84lbWf + OJW7qVnJybdy/8u4c//Mu3f/zbx5/828ef/NvXr/zbx5/828ef/NvHn/zbx5/829ef/MvXj/zLx4/8y8 + eP/Mu3j/zLt3/8m3cv/It3D/yLdw/8e2b//Jt3L/y7p1/8u7dv/LunX/y7t1/8u6df/MunT/y7p0/8q5 + c//KuXP/yrly/8q5cf/KuXH/yrlx/8q5cf/KuXL/yrhx/8e1bf/Fs2n/xbNp/8W0av/GtGv/ybhx/8q5 + cv/KuXL/yrly/9HChP/Iu3j/oY40/9HJpP/l4c//5eHP/+Xhz//l4c//5eHO/+Xhzv/l4c7/497I/97Y + v//b07f/2tK0/9zUuf/d18P/49/T/+nn4f/p6OT/6Ojk/6WilP+dmoz/p6SY/6GekP+npJf/op+S/6Wi + lf9Ja2n/DDNO/wwzTv8NNVH/KFZw/z95lv8fVXXz////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AbmmUpnKum+nrpYmka+X + KJGvlymRr5gqk7CYK5OxmS2TsZouk7KaL5OymzCTs5sxk7OcMZO0nTSTtJ02k7WdNpO1njeVtZ84k7ag + OZW2oDqVtqE7lbahO5W3oTyVuKE9lbihPZW4oj6VuKI+lbqoUrHLunn/zr59/86+fP/Ovnz/zr58/8++ + fP/Pvnz/z758/8++fP/Pvnz/zr58/8y7d//KuXT/y7l1/8m4c//Lunb/zbx4/829ev/NvHr/zbx5/829 + ef/NvHn/zbx4/8y8eP/MvHf/zLx3/8y7d//Mu3f/zLt2/8y7dv/Lu3X/yrp0/8i3b//GtWv/x7Rs/8a1 + bP/GtWv/yrhx/8u6c//LunP/y7pz/8u6c//Lu3T/y7pz/8u6cv/LunL/y7ly/9jNl/+0ok3/qZpS/+bi + z//m4s//49/K/9/awv/c1bz/3ti//93Wvv/d177/4NvD/+TeyP/j3sX/5N/K/+Xi0v/n5dz/6Ofh/+no + 5P/p6OT/qaqf/56bjf+opZn/npuM/6Wilf+joJL/p6SX/1Rwcf8MM07/DDNO/ww0T/8qWHL/PHeT/x5V + deX///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Bt6RPN8OzZq3ArFOdsZkskbGaLpGymy+Rspswk7OcMZOznDKTs500k7Se + NpO1nzeTtqA4k7agOZO3oTqTt6I9lbeiPZW3oj6VuKM/lbmjQJW5pEGVuaRCk7qlQ5W6pUOVuqVDlbql + RJO6pUSTuqVGmcm6ev/Qv3//0MB//9DAf//QwID/0MCA/8++ff/MvHn/zrx6/827eP/NvHn/z759/9DA + f//QwH7/z79+/8+/fv/Ov37/zr99/86/ff/Ov3z/zr98/86+fP/Ov3z/zr97/86+e//OvXr/zb15/8u6 + df/Jt3H/yLZw/8m3b//Htm7/yrlz/8y6df/MunT/zLp0/8y6c//MunP/zLpz/8y6dP/Lu3X/y7t1/8u7 + dP/Lu3T/y7t0/8u6c//LunP/0sOG/8a3cv+gjTL/z8af/97Xv//f2MH/5uLP/+Xiz//l4s//5eHP/+Xh + z//k4Mz/5N7J/+Tex//k38r/5uLR/+fl2//o6OL/6ejl/+no5v+7urH/oJ2P/6ilmf+dmoz/pKGU/6Og + k/+mo5b/Xnh4/wwzTv8MM07/DDNO/yxddv8xbIv/H1V11////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BuaZTjdDA + faW0nTORs5wykbSdNJG0njWTtZ43k7afOJO3oDqTuKE7k7iiPZO4oz6TuaNAk7mkQZW6pEKVuqVDk7um + RJW7p0aVvKdGlbyoR5W8qEeVvahIlb2oSJW9qEiVvahIlb2pSZW9qUmVx7l489HBgv/Ovnz/z79+/86+ + ff/Ovnv/0MCA/9LCg//SwoL/0sKC/9LCgv/RwYL/0cGB/9HBgf/RwYH/0cGB/9HBgP/RwYD/0MB//9DA + f//QwH//0MB+/869ev/MunX/y7l1/8u6df/KuXP/zLx3/829ef/NvXj/zbx4/828d//NvHf/zLx2/8y7 + dv/MunX/zLp0/8y6dP/Mu3X/zbx2/8y7dv/Mu3X/y7pz/8i2b//GtWz/xrVs/8a1bf/Htm7/18yX/7Kf + Sf+tn1r/5uLQ/+bi0P/m4tD/5uLQ/+bi0P/l4tD/5eLP/+Xhzf/k4Mv/5N/I/+Tgyv/m4tH/4dzK/+Dc + zP/l49n/4d7S/8XEvP+joJL/p6SX/5+cjf+lopX/pKGU/6ajlv9sgn7/DDNO/wwzTv8MM07/N2Z//yxo + h/8fVXXH////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wG3pE8dwa9grci4aaO1nzeRtqA4kbehOpO4oj2TuaM+k7mk + QJO6pUKTuqZDk7umRZW7p0aVvKdHlb2oSJW9qUmVvqlKlb6qS5W+qkuVvqpMlb6qTJW+q02Vv6tNlb+s + Tpe/rE6Xv6xPl8CtUJXFtW/Z0sOC/9TEhf/UxYX/1MWF/9TFhf/UxIX/1MSF/9TEhf/UxIX/08SE/9PD + hP/Tw4T/08KE/9LCg//SwoP/0sGC/9HAf//PvXv/zr16/869ev/NvHj/z718/9DAfv/Qv37/z799/8+/ + fP/Pv3z/zr57/86+ev/NvXr/zb15/828ef/NvHj/zbx4/8y8d//Mu3f/zLp1/8m4cf/Htm7/ybdv/8e2 + bv/Jt2//y7p0/8u7df/Mu3X/zLt1/8y7df/Uxov/xbdx/5+LMf/a1Lf/5+PR/+fj0f/n49H/5+PQ/+fj + 0P/l4Mv/39m//93Wu//e2Lv/3NS3/+DZw//m4dT/6ujg/+vq5f/r6ub/zM7I/6Ogkv+mo5b/oJ2P/6Sh + lP+koZT/p6SX/3eMgv8MM07/DDNO/wwzTv8/bIP/JmSE/x9Vdbn///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wG3pFBx0cKAo7ymRJW5oz6TuqVAk7qlQZO7pkOTu6dGlbyoR5W8qEiVvalJlb2qS5W/q02Vv6tOlb+s + TpW/q0+XwKxQl8CtUZXBrlKVwa5SlcGuU5fBrlOXwq5Ul8KuVJfCr1WXwrBWl8O2cMvVx4n/1ceJ/9XH + if/Vx4j/1ceI/9XHiP/Vx4j/1ceI/9TGh//UxYf/1MaH/9PDhP/QwID/z79//9DAgP/Ovn3/0cCA/9LC + g//SwoL/0sGC/9LBgf/RwYD/0cGA/9HAf//QwH//0L9+/8+/ff/Pv33/z798/86+e//Ovnr/zbx4/8q4 + c//ItnD/yrhy/8q4cv/LuXP/zbx4/829eP/NvHf/zbx2/828dv/NvHb/zLt2/8y7df/Mu3X/zLt1/8y7 + dv/YzZj/sJ1E/7KkZP/m4M3/4NnB/9/YwP/e177/3te//+Daw//k38n/5uHM/+Xgyf/l4Mn/5uLO/+jl + 2P/p5+D/6+rl/+vq5v/f39v/oZ6Q/6ShlP+in5L/op+S/6Wilf+npJf/hJaG/wwzTv8MM07/DDNO/zlr + hP8hXH7/H1V1q////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AbekTw2/rVyn0MF6p7umRJO8p0aTvKhIk72p + SZW+qkuVv6tNlcCsTpXArFCVwa1RlcGtUpXCrVOVwq5UlcKvVZXCsFaXw7BXl8OwV5fDsViXxbJal8Wy + WpfFslqXxbJal8WyWpfFslqXwrJkr9TFiv/WyIv/1siL/9bIi//WyIv/1ciL/9THif/SxIX/0cGD/9PE + hf/RwoL/08WG/9XHif/Ux4j/08eH/9PHhv/TxYb/08SF/9PDhP/Tw4P/0sOD/9LCgv/SwoH/0sKB/9HB + gP/RwH//0L99/828eP/MunX/zbt3/8q6dP/Mu3b/zr57/8++e//Pv3z/z757/8++e//Ovnn/zr15/829 + eP/NvXj/zbx3/828dv/NvHb/zLt2/8y7dv/LunT/yLZu/9HChf/Csmn/nYov/9jPsP/n4s//6OPR/+fj + 0f/n49H/5+PR/+fiz//m4c3/5uDK/+XgyP/m4c3/6OTX/+no3//r6uX/6+rn/+rq5v+in5L/o6CT/6Sh + lP+gnY//qKWY/6Wilf+Rno3/DTRP/wwzTv8MM07/PHCJ/x9Xd/8fVXWb////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AbekT1/Rw4OnxLJbmb6qS5O/q02TwKxOlcGtUZXBrlOVwq5UlcKvVZXDsFaXw7BXl8Ow + WJfDsVmZw7FamcWyW5nFslyZxrNcmcezXpnHs16ZyLRemci0X5nItF+ZyLRfmci0X5nGs2Gh0cSK/9bJ + jP/Uxon/08WH/9TGif/TxYf/1MaJ/9bKjP/Wyoz/1smL/9XJi//VyIv/1ciK/9XIiv/VyIn/1ceJ/9TH + iP/Ux4f/1MeG/9TFhv/UxIX/0sKC/9C/fv/Pvnz/0L99/868ev/Pv3z/0cB//9HAf//Qv37/0L99/8+/ + ff/Qv37/0cB//9DAfv/Qv33/z798/8+/e//Ovnr/zr15/869eP/Mu3b/ybhx/8i3cP/Jt2//x7Zu/8m3 + cP/LuXL/zbt3/9fLlf+um0H/tqlt/+jj0v/o49L/6OPS/+jj0v/o49L/5+PR/+fiz//m4cz/5uDK/+fh + zf/i3Mn/4dvK/+bj2P/g3M7/5ePa/6qom/+in5H/pqOW/6Cdj/+npJj/paKV/5ujkf8NNlD/DDNO/wwz + Tv9EdI3/HVd5/x9VdY3///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bt6RPA7yqV53Xyoupwa1QlcGu + U5XCr1WVw7BWl8OwV5fDsVmXw7Fal8WyW5nFs1yZx7Nemce0X5nItWCZyLVhm8m1YpvJtWKbybZim8m2 + Y5vJtmObybZjm8m2Y5vJtmSbybZkm8m2ZZ3NwIT11ciM/9fLj//Xy4//18uP/9fLjv/Xy47/18uO/9bK + jf/Wyo3/1sqN/9bKjP/WyYz/1smL/9XIi//VyIr/1MaI/9LDg//RwoP/0sOD/9DBgP/Sw4P/1MSF/9TE + hf/Tw4T/08OD/9PCg//SwoH/0cGA/9HAf//RwH//0cGB/9HBgv/RwID/0cCA/9HAf//Pvnz/zLt2/8u6 + dP/LunT/ybly/8u5dP/NvHf/zr14/869eP/Nu3b/zbt0/827dP/Nu3T/1siO/8KxZ/+dizD/493F/+nl + 0//p5NL/6eTS/+bgy//g2MD/4NnA/+DZv//d1bj/4NnA/+bhz//q6N7/7Ork/+3s5//s7Oj/t7Wr/6Ge + kP+mo5f/oZ6Q/6ilmf+koZT/o6eX/w84Uv8MM07/DDNO/ztwiv8bVXb/H1V1f////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Bt6RPPcy9eK3OvnOhw7BYl8OxWZfEsVqXxbJcmcezXZnHtF+ZyLRgm8i0 + YJvJtmKbybZjm8m2ZJvKt2Wbyrdlncq3Zp3Kt2adyrdnncq4aJ3KuGidy7hpncu4aZ3LuGmdy7hpnc6/ + gd3YzJL/2MyS/9jMkv/YzJH/18yR/9fMkf/Xy5H/18uQ/9fLkP/Xy5D/1cmM/9TGif/Txoj/1MaJ/9LE + hv/Ux4r/1cmL/9XIiv/VyIr/1ciJ/9THiP/Ux4f/1MaG/9TEhv/UxIX/08OE/9PDhP/Tw4P/0sKC/9LD + hP/RwoL/z759/86+e//Pvnz/zrx5/8++e//QwH7/0MB9/9C/ff/Qv3z/zr56/869ef/OvHj/zbx2/827 + df/Nu3X/zbt0/827dP/OvXj/1sqT/6uYPf+2qW3/4trC/+Hawv/g2cD/5N7I/+jj0P/o49D/6OPN/+fh + yv/m4cz/6OTT/+rn3P/s6uP/7ezn/+3s6P/Fw7r/oZ6Q/6Ogk/+hnpH/p6SX/6ajlv+kpZb/ETtT/wwz + Tv8MM07/NnGM/xxScv8fVXVx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BuadTjdrN + lavGs12Zx7NdmcezX5nItGCbyLVhm8m2Y5vKt2Wbyrdmncu4Z53LuGidy7hpncy5aZ3MuWqdzLlrn8y5 + a5/MuWufzLptn827bZ/Nu26fzbtun827bp/Nu22fzL6A09nNlP/ZzZT/2c2U/9nNlP/YzZP/18uR/9bI + jv/WyY7/1smO/9XGi//Wy5D/18uR/9fLkP/Xy4//18uP/9bKjv/Wyo3/1sqN/9bKjP/VyYv/1cmK/9XJ + iv/UyIn/1MiH/9TGhv/SwoP/0L9//9DAf//RwoP/0cKB/9LDhP/UxIb/08OE/9PDg//Sw4L/0sKB/9LB + gP/RwX//0cB+/9DAff/QwHz/zr56/828d//NvHb/zbx2/8u5cv/HtWz/ybdv/8i2bP/TxYr/vq5h/52K + Mf/m4Mr/6uXT/+rl0//p5dP/6eXT/+jk0f/o487/5+HK/+jiy//p5NH/6ujb/+vq4//t7Oj/7ezp/8rI + wP+in5H/pKGT/6Cdj/+mo5b/pqOW/6akl/8WP1T/DDNO/wwzTv86dI//HVR0/x9VdWP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wG3pE8hxrZts9XHhqnJtWGbybZkm8m2ZZ3KuGedy7honcy5 + aZ3MuWqfzLlrn8y6bJ/Mum2fzLpuoc27bqHNu26hzrxxoc68caHOvHGhzrxxoc68cqHOvHKhzrxxoc68 + caHMvX3D2MyU/9fLkf/YzJP/2MyS/9fKkf/ZzpX/2c6V/9nOlf/ZzpX/2c2U/9nNlP/ZzZP/2MyT/9jM + kv/YzJL/2MyR/9jLj//Xy4//1sqO/9bJjf/Vx4n/0sSF/9LDhf/SxIX/0cKC/9PGhv/Ux4n/1smM/9XI + i//VyIr/1ciJ/9THiP/Uxof/1MSF/9PDhP/Sw4P/0sKB/9LCgf/RwYD/0cB+/828dv/KuHD/y7ly/8i3 + bv/Jt2//y7py/828df/Nu3X/zbt1/8++ev/UyI//qpY6/76yfP/q5dP/6uXT/+rl0//q5dP/6eTR/+jj + z//n4sv/5+LL/+jj0P/q59r/6ufe/+bj1//j39L/0c/H/6ShlP+in5L/oJ2P/6ajlv+mo5b/p6SX/x1E + Vf8MM07/DDNO/zZuif8eVXX/H1V1Vf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wG4pVB12c6Vqcy5bJ/KuGidy7lqn8y6a5/Mum2fzbtun827b6HNvHChzrxxoc68cqHOvXOhz710o8++ + dKPPvnWjz752o8++dqPPvnaj0L93o9C/d6PQv3ej0L93o86+e7PYzZb/29CY/9vQmf/b0Jj/2tCY/9vQ + mP/b0Jj/29CX/9vPl//az5b/2s6W/9rOlf/azpX/2c2U/9nNk//Xy5D/1ciM/9XIjf/Wx4z/1MaJ/9bK + jf/Wyo3/1sqM/9XJi//VyYr/1sqN/9fMj//Xy47/1sqN/9bJjP/VyIv/1ciK/9THif/Ux4f/08aG/9C/ + f//Pv33/z799/829ev/NvHf/z715/8++ev/Pvnn/zr54/829d//NvHb/zbx2/869dv/OvXb/zrx1/9jL + k/+9rF7/nYsy/+nkz//r5tP/6+bT/+vm0//q5ND/5d7G/+DZvP/g2L3/4dvB/+Hbxf/l4dL/7evj/+/u + 6f/h4Nr/o6CT/6Kfkf+gnY//p6SX/6Shk/+mo5b/JUpY/wwzTv8MM07/MW+M/x9Vdf8fVXVF////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AbekTw/Csmar2s6Tscy6bZ/Nu2+fzbxwoc68 + caHOvXKhzr1zo8+9dKPPvnWj0L92o9C/eKPQv3il0cB5pdHAeaXRwHql0cB6pdHBe6XRwXul0cF7pdHB + fKXRwXyl0MB8qdfNl//c0Zz/3NGc/9zRm//c0Zv/3NGb/9vRmv/b0Jr/29CZ/9vQmP/ZzpX/2MuS/9nN + lP/Yy5L/18qQ/9nNlP/ZzZT/2c2T/9nNk//ZzJL/2MyR/9jMkP/Xy5D/18uP/9jMkv/YzZP/2MyS/9fM + kf/Xy5D/1cqN/9PEh//TxIf/0sOF/9HCg//SxIT/08aG/9THhv/Tw4P/0cF//9HAff/Rv3z/0L98/8++ + e//Pvnr/zr55/869eP/OvXf/zr12/869dv/OvXb/0MB9/9PGi/+nkzb/v7N9/+Lbwv/l38j/4tvC/+Lb + wv/n4cr/6eTN/+njzP/p5M//6+jZ/+3s4v/v7ef/7+3p/+3s6P+in5H/oZ6Q/6Kfkf+lopX/oJ2P/6aj + lv8vUlz/DDNO/wwzTv8zc5D/H1V1/x9VdTf///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AbekT2HYzZSt0sJ8pc69cqHPvXOjz751o9C+d6PQv3il0L95pdHAeqXRwHul0sF8pdLB + fKfSwX2n0sJ+p9PCf6fTwn+n08N/p9PDgKfTw4Cn08OAqdPDganTw4Gp18yX993Snv/d0p7/3dKd/93S + nf/b0Jr/2s+X/9vQmv/azpf/2s6X/9zRm//c0Jr/3NCZ/9zQmP/bz5j/28+X/9rPlv/az5X/2s6U/9nO + lP/ZzpP/2c2S/9nNkv/az5f/2c2U/9bJkP/XypD/1smO/9XHjP/Wyo7/18uQ/9fLjv/Wyo3/1smM/9XJ + iv/UyIn/08WF/9LDgf/RwoD/0cF//9HAff/Rv3z/0L98/8++e//Pvnr/zr55/829d//LuXH/yLdu/8q4 + b//Jt2//1ciO/7qpV/+ejTb/6+bT/+zn1P/r59T/6+fT/+rl0f/p5M7/6ePM/+nkz//s6Nf/7evg/+/u + 5//v7+r/7+7q/6Wilf+fnI7/o6CT/6Wilf+hnpD/pqOW/z5cYv8MM07/DDNO/zVxjf8fVXX/H1V1J/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bt6RPA76sXaPf1KG10L93o9C/ + eKXRwHml0cF7pdLBfafSwn2n0sJ+p9PCf6fTw4Cn1MSBqdTFgqnUxYOp1MeEqdTHhKnUx4Sp1MeEqdXH + hanVx4Wp1ceFqdXHhanVypTp29Gd/93Snv/b0Jv/3NGd/97Tn//e05//3dKe/93Snv/d0p7/3dKd/93R + nP/d0Zz/3NGb/9zQmv/c0Jn/3NCZ/9vPmP/az5f/2MyR/9bJjv/Yy5L/2c2V/9nNlv/azpj/29CZ/9rP + l//azpb/2s6V/9nNlP/YzJL/2MyR/9fLj//Wyo7/1cqM/9PGhv/TxIP/0sOC/9LDgf/RwoD/0cJ//8++ + ev/Mu3X/zLp1/827dP/KuHH/y7pz/828dv/OvXf/zr13/869dv/Rwn//0MOH/6WSNP/Ivo7/7OfU/+zn + 1P/s59P/6+bR/+nkz//p5Mz/6eTO/+vn1f/t6+D/7+3l/+vo3//q597/rquf/56bjf+lopT/pKGU/6Kf + kf+npJf/UGdr/wwzTv8MM07/NHKO/x9Vdf8fVXUZ////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Bt6RPQ9LFiLPYyo2t0sF8p9LCfafTw3+n08SAp9TFgqnUxoOp1MeEqdXH + havVyIWr1ciHq9XJiKvWyYir1smIq9bJiavWyYmt1smJrdbJiavWyYmr1smJq9bLlN3f1aL/39Si/9/U + ov/f1KL/39Sh/97Tof/e06D/3tOg/97Tn//e05//3dKe/93Snv/c0Zz/2s2X/9nOl//azpf/2MyU/9nN + lf/bz5j/29Ca/93Tn//d0p7/3dKd/9zRnP/b0Zv/29CZ/9rQmP/azpf/2s6W/9rNlf/ZzZT/2MyS/9fK + j//Vx4j/08WF/9DAf//Pv3z/z799/86+e//OvXn/0MB9/9HBfv/RwHz/0MB8/9C/e//Pvnr/zr55/869 + eP/OvXf/zr13/869d//az5n/uKZT/6GQPP/s59T/7OfU/+zn0//r5tL/5+DJ/+Lbv//g2b3/4tvE/+Tf + zP/l38//7Onh/+/u6f+6t6z/npuM/6Wilf+joJP/o6CS/6ekl/9XanD/DDNO/wwzTv89fJr/H1V1/x9V + dQv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BuqhVkeLY + qbnUxYKp1MaDqdTHhKnVx4Wp1ciGq9bIh6vWyYir1smJq9fKi63Xyout18uNrdfLja3Xy42t2MuOr9jL + jq/Yy46v2MuOr9jLjq/Yy46v18yW1eDVpP/g1qT/4Nak/9/WpP/f1aP/39Sj/9/Uov/e06D/3NCc/9vQ + nP/b0Jz/28+b/9zRnf/d0p//3dKe/93Rnf/d0Zz/3NGc/97Tn//f1aP/3tSi/97Uof/d05//3dKe/9zS + nf/c0Zz/3NGa/9vQmf/az5j/2MyT/9bJj//Vxor/08SF/9LDg//TxIT/1MaH/9PFhf/TxYT/0sSC/9LD + gv/SwoH/0cKA/9HBf//RwH3/0MB8/9C/e//Pvnr/zr55/869ef/Pv3r/0L97/9TFhv/OwIL/o48y/8q/ + j//o4sz/5d7G/+PbwP/n4Mf/6+XO/+vlz//s6NX/7uzf/+/u5v/x8Ov/8fDs/8XDuv+gnY//pKGU/6Og + kv+joJL/p6SX/1tudf8MM07/DDRP/zt2k/8fVXX7////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wG3pE8ly716u97Tn7fVyIer1siIq9bJia3Xyoqt18qLrdfL + ja3Yy46t2MyPr9nMkK/ZzJCv2cyQr9nNka/ZzZKv2c2Sr9nNkq/ZzZKx2c2SsdnNkbHYzpjL3tWl/+HX + pv/f1aT/3tOh/97Uo//d06H/3tOh/9/Vo//f1qX/39Wk/9/Vo//f1aP/3tSi/97Uof/e1KD/3dOg/93T + n//g1aX/4Nan/+DWpv/g1aX/39Wk/9/Uo//d06D/29Cb/9rPmf/b0Jr/2c2W/9nNlv/bz5j/2cyR/9fL + jf/Xy4z/1sqL/9bKiv/VyIn/1MiH/9THhv/Ux4X/08aE/9PDgv/TwoH/0sKA/9LBf//RwH7/0cB9/9C/ + ev/NvHf/zLt2/8y7dv/Mu3X/zLpz/9vQmv+3pFH/pZRE/+3p1v/t6db/7ejU/+vm0f/r5c//6uXO/+zn + 1P/u697/8O7m//Hx6//x8Oz/y8nA/6Kfkf+joJP/o6CS/6Shk/+npJf/W211/wwzTv8NNE//MXCO/x9V + dev///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wG4pVF54deptdjLja/Xy4yt2MuOr9jMj6/ZzZCv2c2SsdnNkrHazpOx2s6TsdrOlLHaz5Wx2s+VsdrP + lbHaz5Wx2s+Ws9vPlrPbz5az28+Ws9rPmb/c0qL/39Wm/+HYqf/h2Kn/4dip/+HYqP/h16j/4den/+HX + p//g16b/4Nam/+DWpf/g1qT/39Wj/9/Vov/f1aP/4diq/+HYqv/f1ab/3tSj/9/UpP/d06L/3dKf/97U + ov/f1KL/3tOh/97ToP/d05//3NCb/9nNk//ZzJH/2cyQ/9jLjv/Xy43/1sqL/9bKiv/VyYn/1MiH/9TH + hv/Ux4X/08WE/9DBfv/OvXn/zr16/869ef/Nu3f/z758/9LBgP/SwoD/0MB+/9DAff/QwHv/1ceJ/82/ + gP+jjzP/0sqh/+3p1v/t6NT/6+fS/+vlz//r5c7/7OfT/+7r3f/w7uX/8vDr//Hx7f/PzcX/op+S/6aj + lv+in5L/o6CT/6Wilv9cb3b/DDNO/w01UP82dJL/H1V13f///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AbekTxPGt2+x4tiqvdnMkK/ZzZGx2s6UsdrP + lbHbz5Wz28+Ws9vQl7Pb0Jez29CXs9zQmbPc0Jm13NGZtdzRmrXc0Zq13NGatdzRmrXc0Zq13NGat97V + p//i2az/4tms/+LZq//i2av/4tmr/+LYqv/h2Kr/4dip/+HYqf/h16j/4Nen/9/VpP/d0qD/39Sk/+HY + q//h16n/4dir/+LZrP/i2Kv/4tiq/+HXqf/g1qj/4Nam/+DVpf/f1aT/39Si/93RnP/azpX/2s2U/9nN + k//ZzJL/2cyQ/9jLj//Xy43/1ceJ/9LEhP/Sw4P/08OD/9DBf//QwX//0sSD/9PEgv/Tw4L/08WE/9TG + hv/Tw4T/08KD/9PCgf/SwoD/0cF+/9DAff/QwHz/3NGd/7WjT/+pmU3/7enW/+3p1f/s59L/6+bP/+nk + zP/m4Mf/5N7I/+fi0f/r59z/5+LU/9XTy/+in5H/p6SY/6Kfkf+koZP/pKGU/11vdv8MM07/DjZS/zZw + jf8fVXXP////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AbekT2ff1aa33NKbtdvPlrPb0Jez3NCZs9zRmbXc0Zu13NGbtd3SnLXd0py13dKct93T + nbfe05633tOet97Tnrfe05633tOet97Tnbfe05233tWp+eParv/j2q7/49qu/+Parf/j2a3/4tir/+DW + qP/g1qf/4deo/9/Vpf/f1aX/4deo/+PZrf/l3LP/5Nyy/+Tcsf/k27D/5Nuv/+Parv/i2az/4tis/+HY + qv/h16n/4Nao/+DWpv/d0p3/29CZ/9vPl//ZzZT/18mP/9bIjP/WyY3/1caK/9TGif/Xyoz/18qM/9bK + iv/WyYn/1cmI/9TIh//Ux4X/1MaG/9XJif/VyIj/1MiH/9TGhv/TxIT/08KD/9PCgf/Swn//0cF+/9HA + ff/WyY3/y717/6GOMv/TyqL/6uXP/+bgx//j27//5d7D/+zn0v/u69v/8O7l//Lw6v/y8e3/4+Hb/6Ge + kP+opZj/o6CT/6Ogk/+joJL/XW92/wwzTv8POVT/K2eG/x9Vdb////8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bt6RPBcGwZKvm3rfD3NGatd3S + m7Xd0py13dKdtd3Tnrfe05+33tOft97UoLfe1KG539Shud/Uobnf1aK539Wiud/Vornf1aK539Wiud/U + obnf1qrx49qu/+HYrP/i2a3/4tis/+HYqv/i2a3/5Nqu/+Parv/j2a3/49ms/+PZrP/k3LL/5t62/+be + tv/m3bX/5d20/+Xds//l3LL/5Nux/+Tbr//j2q7/4tmt/+LYq//e1KP/2s6Z/9rOmP/ZzZX/2MuT/9nO + lf/az5b/2s6U/9nNk//ZzJL/2cyR/9jLkP/Yy47/18qN/9bKi//WyYn/1smJ/9bKjP/Xy47/1sqM/9bJ + iv/VyIj/1MiH/9THhf/SxYL/0L9+/869ev/Pvnr/zr16/828d//d0p//tKJN/62eVv/t6dX/7ejT/+zn + 0P/r5s//7OfS/+7r2//w7uT/8vHq//Ly7v/t7ej/oZ6Q/6ekl/+koZP/pKGU/6Kfkv9dbnX/DDNO/xE8 + V/8mZIb/H1V1sf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Bt6RPS9nOmrvh2Km93tOet97Un7fe1KG539Wiud/Vo7ng1aS54NWkueDW + pLvg1qW74Nalu+DWpbvg1qW74Nalu+DWpbvg1qW74Namu97Wq+Xl3bP/5d2z/+Xdsv/l3LL/5dyx/+Xc + sf/k27D/5Nuw/+Tar//k2q//5t63/+ffuf/n37j/5t+3/+bet//m3rb/5t21/+Tbsv/i2a//49qv/+LZ + rf/h2Kv/4Nam/97ToP/e0p//3dKd/9zRnP/c0Zr/29CZ/9vQmP/az5b/2s6V/9rNlP/ZzJL/2cyR/9jL + kP/Yy47/18qN/9jLj//ZzZL/2cyR/9fLjv/Vx4r/08SF/9PEhf/SxIT/0cGA/9LCgf/Tx4T/08SD/9PC + gf/SwX//0cF+/9jKkP/KvHn/oY4z/9zWtP/s6dP/7OfR/+vlzv/s5tH/7ura//Du4//y8Or/8/Lt//Hw + 7P+joJP/pKGT/6Shk/+lopX/op+S/11udP8MM07/FEBb/yZffv8fVXWh////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BvKlYlenh + v8ff1aK539WjueDWpLvg1qW74Nemu+HXp7vh16e94denveHYqL3h2Km94dipveHYqb3i2Km94tiqveLY + qb3i2Ki939es3ebdtf/m3rX/5t20/+bdtP/m3bP/5d2z/+Xcs//l3LL/5d2z/+jgu//o4bz/59+6/+bd + t//m3rj/5t63/+Tctf/l3bb/5t63/+betv/m3bX/5dyz/+LYqf/g1aP/39Si/9/Uof/e06D/3dKe/9zR + nP/c0Zv/29CZ/9vQmP/az5f/2s6W/9rNlP/ZzJL/2MuQ/9bJjf/XypD/2MyS/9jLkf/VyI3/1smN/9jL + j//Xy47/1sqM/9XJiv/VyIn/1ciH/9THhf/TxoT/08OC/9PDgf/SwX//0cF+/9zSn/+zoUv/sqRg/+3p + 1P/t59L/6uTL/+Xew//k3MX/6OLR/+nl1//n49T/7erh/6mnmv+in5H/o6CT/6ajlv+joJP/XW50/wwz + Tv8VRGD/IFl5/x9VdZP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wG3pE8r0cSIwebet8Xh16e74dioveHYqb3i2Kq94tmrveLZ + q7/i2ay/49msv+PZrL/j2ay/49qtv+Parb/j2q2/49quv+ParL/i2a/X5d22/+fft//n3rb/5962/+fe + tv/l3bT/5Nqx/+Xdtf/o4b3/5+C8/+jgvP/p4b7/6OK+/+jhvf/o4bz/6OC8/+jgu//n4Lr/59+5/+bd + tf/i2Kr/4deo/+DWpf/g1aT/39Sj/9/Uov/f06D/3tKf/93Snf/c0Jv/2s6W/9jLk//ZzJP/2MyS/9bI + jv/ZzJT/3NGc/9zQm//b0Jn/28+X/9rOlv/ZzZT/2cyS/9jLkP/Yy47/18qM/9bJiv/VyYn/1ceH/9PH + hf/TxoT/08OC/9LCgP/Pv3v/1ciN/8a3cf+hjjX/2dGt/+PbwP/n4MX/7OfQ/+7q1//w7uH/8fDo//Py + 7f/z8u7/s7Cl/6Cdj/+joJP/p6SX/6Ogkv9eb3T/DDNO/xxMaP8cWHj/H1V1hf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wG4plKB5+C9w+Parb/i2ay/49msv+Parb/k266/5NuvweTbr8Hk26/B5NuwweTbsMHk27DB5NuxweTb + scHk3LHB5NyxwePbstHk3LX/5t22/+bet//l3bX/5t22/+fft//p4b3/6+TD/+vkwv/q5ML/6uTC/+rj + wf/q4sD/6eLA/+niv//p4b7/6OG9/+jgvP/m3bb/4tms/+LYqv/h2Kn/4deo/+DWpv/e06H/3dGe/93R + nv/d0Z3/28+Z/9vQmv/d0Zz/3NCa/9vQmf/b0Jr/3tOg/97ToP/d0p//3dKd/9zRm//b0Jn/28+X/9rO + lv/ZzZT/2cyS/9jLkP/Yy47/18qM/9XGh//Sw4L/0cF//9DBgP/PwH3/0L98/9LCgP/Sw4D/3NKe/7Kg + Sv+3qWr/7ejT/+3n0P/s59D/7urX//Hu4f/y8ej/8/Ls//Py7v+8uq//oZ6Q/6Shk/+opZn/paKV/11u + c/8MM07/JFRu/x1Vdf8fVXV3////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AbekTxXLvHu36eLAy+Pbr8Hk27DB5NuxweTc + scPl3LLD5dyyw+Xds8Pl3LPD5d2zw+XdtMPm3bTD5t20w+bdtMPl3bTD5d20x+Xduf/p4bv/6OC7/+jh + u//o4Lv/6+PC/+zlyP/s5cf/7OXH/+vlxf/r5cX/6+XE/+vkw//q5ML/6uPB/+rjwf/p4r//5d21/+LY + rP/g1qn/4deo/+DWp//f1aX/39Wl/+DWp//g1qb/4NWk/9/Vo//f1KH/3tOf/97Snv/d0p3/39Si/+DW + pv/f1qX/39Sj/97Tof/d05//3dKd/9zRm//b0Jn/2c2V/9fJkP/WyI3/1smN/9XHiv/TxYf/1seJ/9bJ + iv/WyIj/1ceG/9PHhf/TxIP/08OB/9LCgP/azZX/x7hx/6KQOP/l3sH/7efQ/+zmz//t6db/8O3g//Lw + 6P/08+3/8/Lt/8TDuf+in5L/o6CS/6ilmf+koZT/X3B0/wwzTv8hWHX/HFNy/x9VdWn///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AbekT2vl3rnB5t61xeXds8Pl3bTD5d20xebdtcXm3rbF5t63xebft8Xm37jF5t+4xeff + uMXm37jF5t+3xebet8Xm3rfF5d66/enivv/p4r7/6eK+/+zlx//t5sv/7efK/+zmyv/s5sn/7ObJ/+zm + yf/s5cj/6+TF/+rjwf/q48L/6eG//+Pbsf/j2q//5Nuw/+PasP/j2q7/49mt/+LZq//i2Kr/4dep/+HX + p//g1qb/4Nal/9/Vo//f1KH/4NWk/+LYq//i2ar/4tio/+HWpv/e1KL/3NGe/9vQnP/b0Jz/2s6Y/9nN + lf/bz5j/28+X/9rOlf/ZzZP/2MyS/9jLkP/Yy43/18qM/9bJi//WyIj/1ceG/9TFhP/TxIL/0sOB/9PD + gv/b0J3/sp9J/7uvcv/s5s//5+HG/+Tdw//m4Mv/6+fY/+rm2P/p5dj/y8m//6Ogk/+in5H/qKWZ/6Sh + lP9icXT/DDNO/x5Zd/8cUnP/H1V1W////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bt6RPB8S1ba/t5svP5t63xeff + t8Xn37fH59+4x+ffucfn4LrH6OC6x+jgu8fo4LvH6OC7x+jgu8no4LvJ6OC6x+fgusfm37356uPA/+vk + w//t58z/7ujN/+7ozf/t58v/7ObJ/+zmyf/s5sn/6+XH/+zlyP/s5sr/7ObJ/+rjwf/m3rb/5d21/+Xd + s//k3LL/5Nuy/+TbsP/j2q//49mu/+LZrP/i2Kr/4dep/+HXp//g1qb/4Nam/+HYq//i2Kz/4der/+HX + qv/f1ab/39Sk/+DWpv/g1qX/39Sj/97Uof/d0p//3dGd/9zRm//b0Jn/28+X/9rOlf/ZzZP/2MyR/9jL + j//Xyo3/18qM/9bIiv/WyIj/1ceG/9LCgf/QwH3/z757/9nNlf/EtGz/opA6/+HYuf/s5s7/7unU/+/t + 3f/y8Ob/8/Ls//Tz7//Qzsb/pKGU/6Kfkv+opZn/pKGU/2Z0dv8MM07/J1hz/x5UdP8eVHRN////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Bt6RPU9/WrMPp4sDL6OC6yejgu8no4bzJ6OG9yejhvcnp4b7J6eK+yeni + vsnp4b7L6eG+yenhvsnp4b7J6eG+yebgv/Pq48T/7ejN/+7ozv/t58z/7efO/+7ozv/u6M7/7unO/+7o + zv/u6M3/7ujN/+3nzP/q48H/6N+5/+ffuP/n3rf/5961/+bdtP/l3bP/5Nyy/+Tbsf/j2q//4tir/+DW + p//g1qb/39am/+DWqf/j2rH/5d20/+Xcs//k27H/5Nqv/+PZrf/i2av/4tip/+HXp//g1qX/39Wj/97U + of/d0p//3dGd/9zRm//c0Jn/2s+X/9rOlf/azZP/18uQ/9XGif/TxIX/1MWG/9PEhP/Sw4L/1MaF/9TE + hP/UxIL/1MSE/9rPmv+xn0n/v7N6/+3n0P/u6dT/8Ozd//Lx5v/z8+z/9PPv/9fWzv+koZT/o6CT/6ek + l/+lopX/and4/wwzTv8gV3T/H1V1/x9VdD3///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bvatcm+/q + 0dXp4b3J6eK+y+niv8vp4r/L6ePAy+rjwcvq48HL6uPBzerjwc3q48HN6uPBy+rjwcvp48HL6uTI7fDq + 0v/v6tL/7+rS/+/q0v/v6tH/7+rR/+/q0f/v6dH/7+nQ/+7p0P/t6M3/6uPA/+nhvP/o4bv/6OC6/+ff + uP/l3bb/5Nuy/+Xcsv/k27H/4tmu/+LZrf/j2q//49mu/+Par//m3rf/6N+6/+ffuf/m3rf/5t21/+Xc + tP/k3LH/5Nuw/+Parf/i2av/4diq/+HXqP/g1qX/4NWj/97Tof/d0Zz/2c6X/9nMlf/ZzZX/2MqR/9bI + jv/Yy4//2MyR/9jLj//Xyo3/1smL/9bIif/VyIf/1cWF/9TEhP/SwoD/286X/8Ozaf+lk0D/6uTK/+7p + 1P/w7d3/8vHm//Tz7P/09O//4eHa/6Ogkv+koZT/paKV/6ajlv9uenn/DDNO/xVUdP8fVXX/H1V1Lf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wG3pE8x1suWx+3ny9Pq5MLN6+TDzevkw83r5MPN6+TEzevk + xc3r5MXN6+TFzevkxc3r5MXN6+TFz+7oztXt6NHr8OvV//Hs1P/w69T/8OvU//Dr1P/w69T/8OvT/+/r + 0v/w6tL/7efM/+niv//o4Lv/6OC7/+jgu//m3rj/5t+5/+ffuf/n37j/59+3/+betf/m3bT/5d2z/+Xc + sf/n37j/6eK//+nivv/o4Lz/5+C7/+ffuf/n3rf/5t22/+Xcs//l3LL/5Nqv/+LYq//f1ab/39Sk/9/V + pP/d0qD/3NGe/93Tn//e05//3NGc/9zQmv/bz5j/2s6W/9rNlP/ZzJL/2MyQ/9fLjv/Xyoz/1smK/9XI + iP/Vx4b/08OC/9PCf//TxIP/18yW/7GfSv/Dt4H/5+DF/+jizf/u6tz/7end/+zo3f/n5t//pKGU/6Wi + lf+koZT/p6SX/3V/ff8MM07/F0tn/x9Vdf8fVXQf////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wG5plSH7ujP0evlx8/r5cjP7OXIz+zlyM/s5snR7ObJ0ezmydHs5snR7ObJ0ezmytHv6tPZ8ezV2e/q + 1Onw69b/8ezX//Ht1v/x7Nb/8OvU/+/q1P/w69T/8OrT/+zmyv/q48H/6+TC/+rjwf/q48D/6uK//+ni + vf/p4bz/6OG7/+jguv/n37j/59+3/+fetv/n37j/6uPD/+vkxP/q5ML/6ePB/+niv//o4b3/5t+5/+Xc + tf/l3bX/5Nuy/+PZr//i2q7/49qv/+Parv/i2az/4dip/+HXp//g1qX/39Wj/9/Uof/e057/3dKc/9zQ + mv/bz5j/2s6W/9nNk//ZzJL/2MuP/9fKjf/Xyov/1seI/9HBfv/Ovnr/z757/869ef/YypL/wbBl/6aW + Rf/t587/8e3c//Pw5f/08uz/9fTv//Hw7P+mo5f/pKGU/6Wilf+mo5b/e4N//wwzTv8XSmb/H1V1/x9V + dBH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AbekTxnOwYW/8OvU2ezmytHs5srR7efL0e3n + zNHt58zR7efM0e3nzNHu6M7V8ezX2/Ht2Nvx7djb8OzX5/Ds1//x7Nf/8ezX//Ht1//y7dj/8u3Y//Hs + 1v/t6M3/7ObI/+zlx//r5MX/6+TD/+vkwv/q48D/6uPA/+nivv/p4b3/6OG8/+jguv/o4Lr/6+TD/+3m + yv/r5Mb/6uPD/+rjw//p4sD/6OC9/+jhvf/o4b3/5+G7/+ffuv/m37j/5t62/+XdtP/l3LL/49uv/+Pa + rf/i2av/4dip/+HXp//g1qX/39Wj/9/UoP/d057/3dKc/9zRmf/bz5f/2MyS/9bHjP/WyI3/1ciK/9PE + hv/TxIT/1MSF/9PDg//Tw4H/08J//9TFhP/WypL/sJ9L/8m+jv/x7Nv/8/Dk//Xz7P/19O//9fTw/6mm + mv+joJP/pqOW/6ajlv9+hoH/DDNO/xJLav8fVXX9H1V1A////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AbekT23r5cnN7ujP1e3ozdPu6M7T7ujO0+7oz9Xu6M/V7+rT1/Ht2d3y7trd8u7a3fLu + 2t3x7drj8e3a//Pu2//z7tv/8+7a//Lu2v/x7Nb/7ujN/+3ny//t58r/7ObJ/+zlyP/s5cf/6+TF/+vk + w//q48H/6uK//+jgvP/n37r/6uLB/+zmyv/t58z/7efM/+3ny//t5sr/7ObI/+vlxv/r5MP/6uPB/+rj + wP/o4r7/6OG8/+fguv/m3rf/5t22/+XdtP/k27H/5Nuv/+Parf/i2av/4deo/+DWpv/e06H/3NGd/9zR + nP/bz5n/2c2V/9rOlf/bzpb/2s6V/9nMkv/Yy4//1siK/9XIiP/Vxob/1MSE/9PDgf/Twn//0sF+/9vP + mf/Ar2P/qppN//Dr2v/z8OT/9PPs//b17//19O//r62h/6Kfkv+npJf/pKGU/4WLhf8MM07/FEhl/x9V + dfP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bt6RPCci6eLXy7tvd7unQ1e7p + 0NXv6tHV7+rR1fHs1tvz7tvf8+/c3/Pv3N/z793f8+/d3/Pv3OHx7dv/8+/c//Pv3f/z79z/8ezW/+/p + z//u6c7/7ujN/+7nzP/s5sr/6+TG/+vkxv/r5cb/6uLC/+niwf/q48H/6uTD/+7ozf/v69P/7+rS/+/p + 0P/u6c//7ujO/+7nzP/t58v/7ObJ/+zlxv/r5MT/6uPB/+njwP/o4r7/6OG8/+fguf/m3rf/5d20/+Pa + r//i2a3/4tms/+HWqP/f1ab/4Nal/+DWpv/g1aT/39Si/97Tn//e0p3/3NGb/9zQmf/bz5f/2c6S/9fK + jf/XyYv/1ciJ/9XIh//UxIX/08OC/9PCgf/SwX7/1cWF/9TIjf+wn0z/y8CS/+3o2P/x7+X/7urf/+/t + 5P+4t6z/o6CS/6ekl/+koZT/jZGJ/wwzTv8XSmj/H1V05////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Bt6RPWeXevM3w7NXb8OvT1/Dr1Nny7trd8+/d4fPv3eH08N7h8/Df4fTw + 3uH08N/h9PDe4fLu3v308N//8+/e//Dr1P/u6M//7ujP/+7ozv/t58z/7efM/+3nzP/u58z/7efL/+3n + yv/s5cj/6+XH/+3ozf/x7Nb/8ezW//Ds1f/w69T/8OrT/+/q0f/u6dD/7ujO/+7ozf/t58v/7ObJ/+zl + x//q48L/6OG+/+jgvf/o4Lz/5t64/+Xdtv/m3bb/5t61/+Xcs//k27H/5Nqu/+LZrP/i2Kr/4deo/+DW + pf/g1aP/39Sh/97Tn//d0pz/3NGa/9vOlv/ZzZH/2MuO/9jLjP/WyIr/08SE/9HAfv/QwH3/0L99/8+9 + eP/OvXb/2s2W/7+uYv+unlX/8+/j//Xz7P/29fH/9vXy/8DBuf+joJP/paKW/6Wilf+NkYn/DDNO/xhR + cP8fVXXV////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bv69hn/Tx + 4eHx7Nfb8+/e3/Tw3+H08ODj9PDg4/Tx4OP08eHj9PHh4/Xx4eP08eHj8u/e+/Lu3P/w69T/8OvU//Dr + 0//w6tP/7+rS/+/q0f/v6dD/7+nP/+7pzf/u6M3/7ejM/+7ozf/x7Nf/8u7a//Lt2f/y7dj/8ezX//Hs + 1v/w69T/8OvT/+7p0P/t583/7efN/+3mzP/r5cf/6+TG/+vlxv/r5MT/6uPB/+rjv//p4r7/6OG7/+ff + uf/m37f/5t21/+Xcsv/k27D/49qu/+LZrP/i2Kn/4Nen/+DWpf/f1KP/3tSg/97Snv/bz5j/18qO/9fJ + jv/WyYz/1MWH/9TFhv/Vx4f/1ciG/9XEhP/Tw4L/08KA/9LBfv/Vxof/0sWJ/7CfTv/Wzqr/9fPs//b1 + 8v/29fT/yMjB/6Wilf+lopT/pqOW/4+Si/8MM07/JFh1/x9VdcX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wG3pE833NKnz/Xy5OX08eHj9fHh4/Xy4uP18uPl9fLi5fXy + 4+X18uPl9fLj5fXy4+Xx7dz58u3X//Hs1v/x7Nb/8ezV//Dr1P/w69P/8OrT/+/q0v/v6tH/7+nP/+7p + z//x7NX/8+/d//Pv3f/z79z/8u3Z//Hs2P/x7Nj/8OzW/+/q1P/w69T/8OvT/+/q0v/v6dD/7unP/+3n + zf/t58v/7ObK/+zlx//r5MT/6uPB/+riv//p4r3/6OC7/+jguP/n3rb/5d20/+Xcsv/k27D/49qu/+DX + qP/f1KT/39Wj/9/Uov/c0Jz/28+Y/9vOlv/az5X/2s2T/9nNkP/Yy47/18qM/9bJiv/WyIf/1seF/9TG + g//Tw4H/08J//9HAfP/c0Zv/v69j/7KkX//18+3/9/by//f29P/Ny8T/paKV/6ShlP+mo5b/lZeO/wwz + Tv8gWHf/H1V0t////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wG6qFaN9fLk4/Xy4+X18uPl9fLk5fby5OX28uTn9vLl5/bz5ef18uTn8+/d3+/r2PPy7tn/8u3Z//Lt + 2P/x7df/8ezW//Hs1f/w69T/8OvT/+/q0f/v6tP/8u/c//Pw3//z797/8+7c//Pv3f/z79z/8+/c//Pu + 2//y7tr/8u3Y//Hs1//w7NX/8OvU//Dq0v/v6tH/7unP/+3ozf/t58v/7ebJ/+vlxv/r5MP/6uPB/+ni + v//o4bz/5t63/+bdtf/l3bT/5Nux/+PZrf/i2a3/4tqt/+LZqv/h16j/4Nal/97Tn//c0Zv/3NCZ/9vP + lv/azpP/2c2R/9jMj//Yy43/18mL/9bJif/Wx4b/1ceE/9TFgv/Twn//0sB9/9bIif/Qw4b/sJ9P/9bN + q//t6d3/8O3n/8/Mwv+lopb/o6CT/6ekl/+Ulo3/DDNO/xtYef8fVXWp////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AbekTx3UyZTL9/Xq6/bz5ef28+bn9vPm5/b0 + 5uf29Obn9vPl5/Pv3eHz79zf8OzZ7/Pu2//y7tr/8e3Z//Hs1//x7Nb/8ezW/+/r1P/w69T/8+/d//Xy + 4v/18uL/9fHh//Xx4P/08eD/9PDf//Tw3v/z793/8+/c//Pu2//y7tr/8u7Z//Ht1//w7Nb/8OvU//Dq + 0//v6dD/7ujP/+3ny//r5cf/6+TG/+vkxP/p4r//6OG+/+nhvf/o4bz/6OC6/+fft//m3rX/5t2z/+Tc + sf/j267/49qr/+HYqf/f1aL/3tOe/93SnP/c0Zr/3M+X/9rOlf/azZL/2MyQ/9jLjf/Xyoz/1ceI/9PE + g//RwX7/0cF+/9G/ff/PvXj/zbt0/9rPmv/Ar2X/tqhq//f28//39vb/3t/b/6Wilf+koZT/qKWY/5SW + jf8MM07/I1h1/x9VdZn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AbekUHHx7dvb9/To6ff06On39Ojp9/To6fXy5Of08N/h8/De4fPv3uHx7dzv8u7b//Lu + 3P/z79v/8+/b//Lu2v/y7dn/8+/c//Xy4//28+T/9vPk//by4//18uP/9fLi//Xx4f/08eD/9PHg//Tw + 3//z8N7/8+/d//Pv3P/y7tr/8ezX//Ds1v/w69T/8OrS/+7p0P/u6M//7ujO/+7ozf/t5sv/7ObJ/+vl + xf/r48L/6uPA/+nivv/o4bv/6OC5/+fft//m3rT/5dyy/+TcsP/j2qz/4dal/+DVov/e1KD/3dOe/9zR + m//bz5j/2MuR/9bIjf/Wyoz/1seK/9PFhv/VyIn/1smJ/9bHhv/UxoP/08KB/9PCf//RwHz/18qP/9DC + hP+wn1L/4t7J//f39v/o6eX/paKU/6ShlP+opZj/mZqQ/wwzTv8eV3X/H1V1i////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bt6RPDc3AhL359+7t9/Xp6/f1 + 6ev28uTn9fHh4/Tx4eP08eHj9PHg4/Lv3u3z797/9PDe//Pv3f/z793/8+/d//Xy4//39Of/9/Tm//b0 + 5v/28+X/9vPl//bz5P/28uT/9fLj//Tx4f/08OD/9PDf//Pw3//y79z/8+7b//Lu2//y7tr/8u3Z//Lt + 1//x7Nb/8OvU/+/q0v/v6dD/7ujO/+7nzP/s5sr/7OXI/+vkxP/r48H/6eK//+nhvf/o4bv/59+4/+be + tv/m3bT/5Nuv/+DWp//e06H/3tOf/93Snv/az5n/2s6X/9rPl//bz5f/2s6V/9nNkv/YzJD/2MuO/9fJ + i//WyYr/1seI/9XHhv/TxIP/08J//9LBfv/RwX7/3tSj/8CvZf+5rXT/9/f3//Hx7/+mo5b/paKV/6il + mP+am5H/DDNO/xlVdv8fVXV9////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Bt6RPX+zoz9n49uvr9vPk5/Xy4+X18uPl9fLj5fXy4+X18uLl8/Dg7fPw + 4P/08eD/9PDf//Xy4//39en/9/Xp//f16P/39Oj/9vPm//bz5v/28+X/9fPl//Xy4//18uP/9fLj//Xy + 4v/18eH/9PHh//Tw4P/08N//8/Dd//Pv2//y7tr/8u3Y//Ht1//x7NX/8OvU/+/q0v/v6dD/7ujO/+3n + zP/s5sr/7OXH/+vkw//p4sD/59+7/+ffuf/n3rj/5dy0/+PZr//i2Kv/4tiq/+HYp//h1qX/39Wi/97T + oP/d0p3/3NGb/9vQmP/azpb/2c2T/9jMkf/Yy4//18qN/9bJi//WyIn/1ciH/9PGg//TwoD/0sF+/9HB + fv/ZzJP/zsGD/7GgVP/n5NX/9vb1/6ekmP+lopX/qKWZ/5qakf8MM07/HVNx/x9VdHH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wG3pE8Dw7Rsqfj2 + 7Ov28+bn9vPm5/bz5uf28+Xn9vPl5/Xy5OX08eLr9PHh//Xy4//39Oj/9/Xq//f16v/39en/9/Tp//f1 + 6f/39en/9/To//f05//39Of/9/Tm//bz5f/28+T/9vLk//Xy4//18uL/9fHh//Tx4P/08N7/8+/d//Pu + 3P/y7tn/8u3Y//Hs1//w69X/7+rT/+7oz//t583/7efL/+vlyP/q5MX/6uPD/+vkwv/q4sD/6eK+/+jg + u//m3rb/5dyx/+Parv/j2az/4dip/+HWpv/g1qP/39Sh/97Tnv/d0Zz/3NCZ/9vPl//azpT/2cyS/9jM + kP/Xy43/1sqL/9bJif/WyIf/1MeE/9PCgf/Twn7/0cF+/9LDgf/f1af/v69m/76zfv/49/f/qKaZ/6Wi + lf+opZj/nZ2S/wwzTv8dU3L/IFZ0Y////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wG3pE894dmy1fj16+v39Ofp9/Tn6ff05+f29Obn9vPm5/Xz + 5en28+f/+Pbt//n37f/59+z/+fbs//j27P/49uv/+Pbr//j16v/49en/9/Xp//f06P/39Of/9/Tn//bz + 5v/28+X/9vPk//Xy4//18uL/9fHh//Tw3//z793/8u7b//Lu2v/x7dj/8OzV//Dr1P/w69T/8OvS/+/p + 0f/u6c//7ejM/+zmyv/s5cj/6+TE/+rjwv/p4r//5+C6/+bdtf/l3LL/5Nqv/+Parf/i2Kr/4den/+DW + pf/f1KH/3tOf/93SnP/d0Zr/3M+X/9vPlf/ZzZP/2MyQ/9fLjv/Xyoz/1smK/9bIiP/Ux4X/08OB/9PC + f//SwX7/0sKA/9rOmP/Nv4D/sqJY/+zp3v+sqZ3/paKV/6ajl/+gn5T/DDRP/xpSc/8fVXVR////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wG7qViR9/Xq6ff16ev39enr9/Tp6ff06On39enr+ffu7/n37v/59+7/+ffu//n37v/59+3/+fft//n3 + 7P/59uz/+Pbr//j26//49er/+PXp//f16P/39Oj/9vPm//bz5f/18uT/9fLj//Xx4f/08eH/9PHg//Tw + 3//z797/8+/c//Pu2//y7tn/8ezX//Hs1f/w69P/8OrS/+/p0P/u6c7/7efM/+3myv/s5cj/6uTC/+nh + vf/n37n/5t62/+Xds//k27H/49qu/+LZq//h2Kn/4dam/9/Vo//e06D/3tKe/93Rm//c0Jn/28+W/9rN + lP/ZzZL/2MuP/9fKjf/WyYr/1siI/9XHhv/TxYL/08J//9LCf//SwoD/1MWF/9/WqP/AsGf/w7mI/7Wy + pv+koZT/p6SX/6Gglf8ONVD/HVNy/x5Uckf///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AbekTyHXzJrP+ffu7/j26+v49evr+ffv7/r4 + 8fH6+fHx+ffv//r48P/6+O//+fjv//n37v/59+7/+ffu//j27P/49uv/+PXr//j26//39en/9/Xp//f0 + 6P/39Oj/9/Tn//bz5v/28+X/9vPk//by4//18uL/9PHg//Tw3//z793/8+/c//Lu2v/y7dj/8ezW//Hs + 1f/w69P/7+nR/+7pz//u6M3/7efL/+zlyP/q48D/6OC8/+jfuv/m3rf/5t21/+Xcsv/j26//49ms/+HY + qv/h16f/4Nak/97Uof/e05//3dGc/9zQmv/bz5f/2s6V/9rNkv/Zy5D/2MuN/9bKjP/WyIj/1ceG/9TG + g//TwoD/0sJ//9rOmP/YzZ3/1MaP/8u+gP+zpFz/vrmo/6Wilf+npJj/pKKX/w44VP8eVHP/IFZyN/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AbilUXfz8N/h+ffv7/r58vP7+fLz+/nz8/r58vP5+PH9+vjw//r48P/6+O//+ffv//n3 + 7v/59+7/+ffu//n37f/59+3/+fbs//j26//49uv/+PXq//f16f/39Oj/9/Tn//b05v/28+X/9vLk//Xy + 4//18eH/9PHg//Tw3v/z793/8+7b//Lt2f/x7Nf/8ezW//Dr1P/w6tL/7unQ/+7ozv/t58v/6+TE/+rj + wf/p4b7/6OC7/+ffuf/m3rX/5dyz/+PbsP/j2q3/4tiq/+HXp//g1qX/39Wi/97Un//d0p3/3NGa/9vP + l//azpX/4deq/+TctP/WyY7/18qM/9/Wq//CvaT/sKV1/8e0af/WyIz/trCT/0lFNP9rYT3/xryR/8Cw + aP+lmmj/paKV/6ekl/+qp5v/DTtX/x9Vdf8fVXUl////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bt6RPD9HDjMH8+/b3+/r09fv6 + 9PX7+vPz+/rz8/r58v36+fL/+vnx//r58f/6+fH/+vjw//r48P/6+O//+ffu//n37v/59+3/+fft//j2 + 7P/49uv/+PXq//j16f/39Oj/9/Tn//bz5v/28+X/9vLk//Xy4v/08eH/9PDf//Pv3v/z79z/8u7a//Ht + 2f/x7Nf/8ezV//Dq0//v6tH/7ejO/+zlyP/r5MX/6uPB/+nivv/p4bz/59+5/+betv/l3bP/5Nux/+Pa + rv/i2ar/4deo/+DWpf/f1aP/5+C8/+Dbwv/PxZr/0MKC/+DWpf/AuaL/cmxT/6eYXf/RwX7/vLWZ/z87 + Lf8YFxL/vq1r/9rMlf93cFX/Q0A1/z88L//Uy57/yLt7/7GiXP+mopH/p6SX/6qnm/8QO1b/H1V1/x5U + chf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Bt6RPYfDs2d/8+vX1+/r19fv69fX7+vX1+vnz/fv68//7+fL/+vny//r5 + 8v/6+fH/+vjw//r48P/6+O//+fjv//n37v/59+3/+fft//j27P/49uv/+PXq//f16f/39Oj/9/Tn//bz + 5f/28+T/9fLj//Xx4v/08OD/9PDf//Pv3f/z7tz/8u3Z//Ht2P/x7Nb/8OvU/+/p0f/t58z/7ObJ/+zk + xf/q48L/6eK//+ngvf/p4r//7ujO/+XduP/j2bD/5Ny0/+bhyv+qpIz/va5s/9zRnP/Oxqn/ZmFM/zUy + KP+0pmz/29Gp/3FsVf8yMCj/Yl1G/9TGh/+up4r/UExB/0dDNP/JvIb/zcCM/4qFeP9pYkv/nZNt/7yw + fP/Zz6L/uapi/6OZav+mo5b/qaaa/w88Wf8fVXX/IFRqCf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wG3pE8Dx7h1s/z7 + +Pf8+/b3/Pv29fz79fX7+fT9+/r0//v68//7+fP/+/ny//v58v/6+fH/+vnx//r48P/6+O//+fjv//n3 + 7v/59+3/+Pbs//j27P/49ur/+PXq//f16f/39Of/9/Pm//bz5f/28uT/9fLi//Tx4f/08d//9PDd//Pv + 3P/y7tr/8e3Z//Hs1//z7tv/8OvW/+vlyP/s5sr/8u7b/8/JtP/QxZb/5t63/+7p0P+Uj37/XllE/7qr + bP/g16//l5F6/zg1LP84NCT/1MeK/720jv9VUUP/PTow/7arff/d057/e3ds/1xXR/+nn3//ysCQ/6Oc + if+RinT/tauD/8/Cj/+Rinf/fnhk/8i9k//HvI//xLmL/8a7if+yo1v/samD/6ajlv+qp5v/DDxZ/x9V + dPn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wG3pE9D5+DC3/z7+Pf8+/b3/Pv29/v69fv8+vX/+/r0//v6 + 9P/7+vP/+/nz//v58v/6+fL/+vnx//r48P/6+O//+fjv//n37v/59+3/+Pbs//j26//49er/9/Xp//f0 + 6P/39Of/9vTm//bz5f/18uP/9fHh//Tx4P/39Of/9fLm/+jhxP/k27f/8e3Y/9XRwv+FgXL/x72U/9nN + nP+3sp7/VFFG/z47Lf/Sx5v/yMCf/1pWSf81Miv/aWNL/+Lasv+Efmz/T0tA/21oVf/d06T/pJ2E/3Nv + Zf+fmHr/2c+d/5WNdP98dmH/xbuS/8rAlf+inIn/sKmT/8G1iv+5r4X/r6qa/3JtYP+imXD/opZk/56S + WP+kmGf/saZ7/8G4lf/o5+H/rqym/6akmf8MN1P/HlRz7////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wG9q12V/Pv39/z79/f8+/f3+/r2+/z79v/8+/X/+/r0//v69P/7+vT/+/nz//v58v/6+fL/+vnx//r4 + 8P/6+O//+ffv//n37v/59+3/+Pbs//j27P/59+//8u7e//Tw4v/28uT/7erf/8vGsv/Rxpv/8OzY/+Pf + zf+Egnb/U1FK/8/Fmv/s583/bGld/zw6M/9fW07/18qX/5+ah/9PS0H/PTsy/9nRr/+zrZj/XFhN/3Vx + X//IwKH/rKWN/3h0av+lnob/zMOe/7Orkf9oY1b/sKiI/8vCmv+3sqD/aWRV/7Wti/+0qoP/r6mS/46J + ff+ZjVr/m5Bg/52Ucf+6tqj/hH5u/6uljf+no5X/nZuW/6Cemv+pp6T/w8K//9/e3P/i4uD/vcC+/yBJ + X+UmXHWb////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AbekTyXb0qjb/fz5+fz8+Pn7+/b7/Pv2//z7 + 9v/8+vX/+/r1//v69P/7+vP/+/nz//v58v/6+fH/+vjx//r48P/6+PD/8e3b/+3nz//59u3/9vTp/7Ow + pv+CfnD/z8OY/+3n0P+pppr/QkA6/0xIPf/q48j/x8Ku/2BcUv84NS//wbyn/9rUv/94dGj/ZmNX/6Kd + iP/PyK3/hYBz/4WBdf+2sZv/tq+Y/25oW//AuqD/0cqr/765pv92cGH/sKqQ/8O7m/+7tZ//n5qN/4J6 + Xv+pnWv/pJlv/8XCuP90blb/qJ53/6aefv+8uK3/j4yE/5STkP+wr6v/r62k/9jW0f+YlYz/2dnW/8DJ + x/+esrb/cYqV/1V0g/9GbHz/NGZ7/xhLZPsEL0b/FEdgnUeFnjv///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AbimUnv39err/fz4+fz79/v8+/f//Pv2//z79v/29On/6+TM//j27P/6+fP/7eri/7Os + kf/Qw5b/8u3d/8K/tf9tamP/Y1s+/+/q1f/W0cD/WlZO/zs5M/+SjXb/7+rW/4iDdf9RTkT/eXZt/+fk + 0/+Yk4b/c29m/5uXh//Tzbr/enVm/42Kff/X0bj/w76r/4iBcf+EgHL/0820/8C7pv+alYb/gXxq/763 + lf+tpYP/ureq/3NsVf+il2r/oJZs/6ynkv+YlIr/mJN//7Oxp/+wrqb/zMnB/4SCff/Ozcr/09LP/9DO + x/+JhXz/gI+U/3aUkP+Mn5T5z9HM92ZoYPMOQFntFDdI6wcySdEHNku3DjNEjS84OqstLCfbHkNFMf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bt6RPE9PHksf9/Pr7/Pv4+/z7 + +P/8+/f/8/Ht/5uXjv93cmL/182p//j37v+QjoX/QD04/3BrXf/j2rj/XltV/01JP/9JR0D/8OvY/+nm + 2v9yb2T/l5SK/9rWxv+qpJT/mJWM/7Sxpv/U0L//p6KT/2lkV//FwbD/2NPA/66qnf93c2f/2NPC/8bB + rP+7uKv/dnFg/7Onef+ilmT/rKeT/52akP+ZknP/nJV5/6GdjP/Fwbj/fXp0/8C+u//KyMX/ycjA/52b + lP+hpaX/qLS4/5qmo/vo5+T/V15h+TBWZP8QQkj7wcK89aCemfkKMDzDECk0001ST9nQ0c7fpKGZ8UtT + TpkgHxvptOPKGbPmyQmVtJspPTsz2UZHPqGx58kJ////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Bt6RPZ/Lv3+P8/Pj9/Pz4//z79//W1M3/V1NK/1JPSf/Kxrj/7Ori/314 + av9eW1P/trSq/9jTxP98eW7/c3Bo/7m2qf/Nybz/fXdr/8nGvv/f28//ubap/4B6bP/Nyr//2dbJ/7+8 + r/+cl4n/johy/7yyjf+2ro3/r6ug/4B5W/+bkWn/n5h6/9HPx/9ua2D/l5WP/56cmf/Pzcf/kY6G/7W0 + sv+9v73/q66p/97c1/9iaGb5XHV//0Nmc//IyML5r6yl/RItPN8OLjLdSVdT6+fm4/mLiH3hOltGbyUj + H+uWlYvj5uXh/Y6UgoU5NzDVQ0U9p7++tMXq6eb9ZF9S4U9PRMG148kneYR1U1tZTMdLRz7lbXlpS7Pm + yQP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wG3pE8Fyrx9u/38 + +v39/Pj//Pv3/8K/tv96d27/pqOb/9fSxf+WkIH/oJ2W/9XTy//Tz8T/kox9/5GOh//j4Nj/xsO5/6mj + lv+RjoT/y8ax/7exm//HxLz/ioJk/6OZav+dkmn/xcK3/4mFev+Zk3v/q6eZ/7Syqf+1sqv/iYiC/7Gw + rv+4trD/2tjS/25vb/9re4f9ZYWF/9PTzvuSj4f9DDZC/QYnM+1UYV3t4N/b9X18cOcmSDuRIiEd46Si + mdXq6eb9goR0l0RGPak2NS/Tzs7F3+Df2vlkZFe7PToy46Cvnm/b2tT5v7y191VQRuFwcmSbgoN2p8K/ + t/fl5OD7nJmQ63t1ZuN8d2jpYFtP5W9yY4m04cUN////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wG3pE9L6uTK4/Py7/+xraH/jIl//9/d1//k4tn/urar/4B7 + b//b2tT/1NLI/7Ovof95c2T/ubGM/7Ooe/+loIv/m5iR/5GJZv+bk3P/n5qG/9nX0v95dm3/pqWj/8vK + yP/Y19H/iIV8/5CZnP+OoKj9j6Gf+8jFvf8+U1P5FkZQ/0pqa+/g39r/UV1U6w06PKseMC7VpKGa98/M + xvtueWZzQ0c9kz49NuHS0Mrn2dfT+WVlWLs4NS7jpqueiebl4fHRz8r3WlZK42VqXKOnrJ6X19bQ/dTS + zPlzb2LddnRlv4uGeOXOzMT719XP+aOek+98dmfpdXBk4bu7sMHU0831x8W9+4B+cL+JkoBXtOXJD/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wHCs26z0dDI/6Sfk/+9t6H/ycOl/763nf/Ixbz/enNV/5uRaP+el3j/0s/E/3ZwYf+RjoT/pKKf/726 + sf+qp6L/k5OQ/6Sqqv+eo6D76+rn/2JmY/VGYWr9KlZZ/8vLxvWVk439ETY2zQ03LdNUYlrt4+Lf/19o + W61AW1dlPTs178vJwvexrqXxjZiFbzg2LuF6eXDL7u7q/ZiUid9TT0TbVllOp7a6rZng39z72tjT93Ju + YttobmCXkI2A49jW0f3o5+T7n5yT8X97cO15dGfpvruy69DOx/28ubD7dHBj25GUhYeusqSJsraplayv + oYWjuaYxtOXJDbXkyQ+05ckRtOXJDbPmyQX///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AaubUxPNy7/5jop9+cnCpfO4tKP/sa6k/8bD + uv+Bfnn/rKuq/7Ozrf/q6ef/bWpf+1Nod/9SbXj/s7iy79LPyP8nPj7nDDM200dVUuXo5+P/eHtw1Sph + SWUsNCzFkY+H99TSzfuBjHtzQkI5v0A/N8vR0MnzzsvE8WJhVMFDQDjbt7uup+/v7P2VkITrVlFH4Xp9 + baGlo5np7+7s/7u4sO+Ig3ble3Zo556ajfPX1tD56unm/7+8svd9eGvrkZCDw7a0qcmfm43xhIF1zX6C + cme15MkbteTJG7XkyR205MkVs+bJC7PmyQez5skHs+bJBbPmyQP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AdnY0vuVkIT1rK6tC6ampl2xr6iz19XP/1FvZ9kBP0H/T2xo597d2P2IhXzxEkRDiSM/ + PaV9e3Hv8vLw/4J/b6tlcWNpMS8p6cnHv/HNy8X3b3VmjUI/N+Nzdmuv3dvW+8nHwfVWUUfjbG9in5KT + h73d29b91NLM+YeCduWBfGzbqKSW9d3b1v3k4t/7uLSs8Xt1Z+eSj4LZyMe/4dTTzP2sqJzlcXRle7C7 + q0e0tql1tLaphay7qjWz5ckPs+bJCbPmyQuz5skJs+bJBf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wGz5skD0dDJ3bCtp/uerZsls+bJA7i6 + rlnq6eX/gH9wt5vGqS1IRj/Zw8K7+dza1fuEjHt9SEY9y1RUSsnX1c/r2dfT+WlkWN1PTULXnaKUp9zc + 1v/Pzcf5e3Zq53d0ZcWTj4Hr0dDJ/eHf2v+9ubHxkYt97YaCdufCwbjZ0tHK+bi1q/lzcmWzpq2eX7G0 + p4OytqmNlZyMW7TkyRW05ckNtOXJEbPlyQ+z5skHs+bJA7PmyQOz5skD////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AbPmyQO+vrOf6Obj/YOBcKe15MkXtda+Hc7OxePd29f5Z2ZZv0tIPuOgopW36Ofk98nG + wPlpZFjhamtds4SEdsXKyL/95+bi/7e0re+moZTxjYh77bu5r+3Rz8j7xMG4/4iEdduXmomFs7apg7O3 + qpOippiHm6yZO7TlyRO05ckVtOXJFbTlyQuz5skFs+bJA7PmyQWz5skD////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AbbCsi/Y19Hp3dvX+ZuY + is16fW2HhoV4ucG/t/fj4d35mZWL6Xx2Z+GVkYPt0tHL++7t6/+6tqz1fXdo63ZzZcm4vbCJt7yulZyg + ko+DhnVrteTJHbXkyRm15MkbtOTJE7PmyQmz5skFs+bJB7PmyQWz5skD////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Bs+bJBbi+sEvQz8jf6enl/dvZ0/2yrqPzkYt85bW0qcvX1s/vzMrC+3d2 + aaWeo5Njs7Wpd7S2qoWotaRDtOTJE7PmyQez5skHs+bJB7PmyQX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Aba0 + qQ22tKlLtrSpeba0qU////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAQAAAAIAAAEAIAAAAAAAACAEAAAA + AAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAAMAAAADAAAAAwAA + AAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAADAAAAAwAAAAMAAAAFAAAABQAA + AAUAAAADAAAAAwAAAAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAAMAAAADAAAABQAAAAUAAAAHAAAABwAA + AAcAAAAHAAAABQAAAAUAAAAFAAAAAwAAAAP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAADAAAAAwAAAAUAAAADAAAABQAAAAcAAAAJAAAACwAA + AAsAAAAJAAAACQAAAAkAAAAJAAAABwAAAAUAAAAFAAAAAwAAAAP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAADAAAAAwAAAAMAAAAFAAAABwAAAAkAAAALAAAABwAAAAsAAAANAAAAEwAA + ABcAAAARAAAADQAAAA0AAAANAAAACwAAAAsAAAAJAAAABwAAAAUAAAAFAAAAAwAAAAP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAADAAAAAwAAAAMAAAAFAAAABQAAAAcAAAAJAAAACwAAAA8AAAATAAAAGwAAACcBAQE1AQEBQQAA + AFMAAABrDw8OYQABASkAAAARAAAAEQAAABEAAAAPAAAADwAAAAsAAAALAAAABwAAAAUAAAAFAAAAAwAA + AAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAADAAAAAwAA + AAMAAAAFAAAABQAAAAcAAAAJAAAACwAAAA0AAAARAAAAFQAAAB0AAAAlAAAAMQAAAEUAAABrDQ0MkVZZ + VM2XnZb3tbWt/7y6sv9rjY3VAgICRwEBASMAAAAXAAAAFQAAABMAAAARAAAADwAAAA0AAAALAAAABwAA + AAUAAAAFAAAAAwAAAAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAAMAAAAFAAAABQAA + AAcAAAAJAAAACwAAAA0AAAARAAAAFQAAABsAAAAjAAAALQAAADcAAABPBAQDdUFBO62Qlo/xr7Gq/7y6 + s//BwLv/ycjC/9TU0v/U1NL/y87K/ykpI7MEBARrAgICOQEBASsAAAAdAAAAGQAAABcAAAATAAAAEQAA + AA0AAAALAAAABwAAAAUAAAAFAAAAAwAAAAP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAAMAAAAFAAAABQAAAAcAAAAJAAAACwAA + AA0AAAAPAAAAFQAAABkAAAAhAAAAKwAAADUAAABHAAAAazU0MJ2IjYXnra+n/bu5sf/BwLr/ycjB/8/P + y//V1dP/1dXT/9XV0//V1dP/1dTS/9XU0v+NkIbxg4V49TtAP7UCAgJVAgICQwAAADUAAAAjAAAAHQAA + ABcAAAAVAAAAEQAAAA0AAAALAAAABwAAAAUAAAAFAAAAA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAwAAAAMAAAADAAAABQAAAAUAAAAHAAAACwAAAA0AAAAPAAAAEwAA + ABkAAAAfAAAAKwAAADMAAABBAAAAYSQkII+DiYLdqq6m/bq5sP/Av7j/yMfA/87Oyv/U1NL/1dXT/9XV + 0//V1dP/1dXT/9XV0//V1dP/1dXT/9XV0//V1dP/yszI/5iVhf+Ninr3NzUuxwgJB4cCAgJTAgICTQAA + AD0AAAApAAAAHQAAABkAAAAVAAAAEQAAAA0AAAAJAAAABwAAAAUAAAADAAAAA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAAwAAAAMAAAADAAAABQAAAAUAAAAHAAAACQAAAAsAAAAPAAAAEQAAABcAAAAfAAAAJwAA + ADEAAAA/AAAAVx0dGYNydXDPpqmi+bm4sP++vbb/x8S//83Nyf/T09H/1dXT/9XV0//V1dP/1dXT/9XV + 0//V1dP/1dXT/9XV0//V1dP/1dXT/9XV0//V1dP/1dXT/9XV0/+TnJH/ko9+/4aCcfGQkID5V2ll3QcJ + CXkCAgJbAgICUwEBAUEAAAArAAAAHwAAABkAAAAVAAAADwAAAAsAAAAJAAAABwAAAAUAAAADAAAAA/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAA + AAMAAAADAAAABQAAAAUAAAAHAAAACQAAAAsAAAANAAAAEQAAABcAAAAdAAAAJQAAAC8AAAA7AAAATxMT + EnljZF+5naKb87e3r/++vbX/xMO9/83Nyf/T09D/1tbU/9bW1P/W1dP/1tXT/9bV0//W1dP/1tXT/9bV + 0//W1dP/1tXT/9bV0//W1dP/1dXT/9XV0//V1dP/1dXT/9XV0//V1dP/vL+5/5SRgf+Zlof/m5iJ/5aT + g/+Hkob/OUhIvwIDA3EBAgJhAQEBVwAAAD8AAAAnAAAAHQAAABkAAAATAAAADwAAAAsAAAAJAAAABQAA + AAUAAAADAAAAA////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAMAAAADAAAABQAA + AAUAAAAHAAAACQAAAAsAAAANAAAAEQAAABUAAAAdAAAAIwAAAC0AAAA5AAAASwsKCmlLS0SjmJ+Y7bKz + q/+9vLT/w8K8/8zLxP/T0s//1tbU/9bW1P/W1tT/1tbU/9bW1P/W1tT/1tbU/9bW1P/W1dP/1tXT/9bV + 0//W1dP/1tXT/9bV0//W1dP/1tXT/9bV0//W1dP/1dXT/9XV0//V1dP/1dXT/9XV0/+TmIv/lpOD/5uY + if+Zlof/lpOD/5WSgv9wg37zExUWnQICAm8CAgJhAQEBUwAAADcAAAAjAAAAHQAAABcAAAATAAAADQAA + AAsAAAAHAAAABQAAAAMAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAMAAAADAAAABQAAAAUAAAAHAAAABwAA + AAsAAAANAAAADwAAABUAAAAbAAAAIQAAACsAAAA3AAAASQAAAF1ERD+XkpeR5a+yqv28urP/wsG7/8rK + w//R0c3/1tbU/9bW1P/W1tT/1tbU/9fW1P/W1tT/1tbU/9bW1P/W1tT/1tbU/9bW1P/W1tT/1tbU/9bW + 1P/W1dP/1tXT/9bV0//W1dP/1tXT/9bV0//W1dP/1tXT/9bV0//W1dP/1dXT/9XV0//V1dP/n6uk/5SR + gf+bmIn/m5iJ/5SRgf+YlYX/ko9+/5yekv9PXVrbAwMDiQICAm0CAgJfAAAASwAAAC8AAAAjAAAAHQAA + ABcAAAARAAAADQAAAAkAAAAHAAAABQAAAAMAAAAD////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAAMAAAADAAAAAwAAAAUAAAAHAAAABwAAAAsAAAANAAAADwAA + ABMAAAAbAAAAIQAAACsAAAA1AAAARQAAAFcyMi6Hio6H2a2wqPm8urL/wsG7/8rJwv/R0M3/19fU/9fW + 1P/X1tT/19bU/9fW1P/X1tT/19bU/9fW1P/X1tT/19bU/9fW1P/W1tT/1tbU/9bW1P/W1tT/1tbU/9bW + 1P/W1tT/1tbU/9bW1P/W1dP/1tXT/9bV0//W1dP/1tXT/9bV0//W1dP/1tXT/9bV0//W1dP/1dXT/8zN + yf+QkIH/mpeI/5uYif+UkYH/mpeI/5CNfP+in5H/nJmK/4SOhPskKiq5AwMDfQICAmkBAQFbAAAARQAA + ACsAAAAhAAAAGwAAABUAAAARAAAACwAAAAkAAAAHAAAABQAAAAMAAAAD////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAAMAAAADAAAAAwAAAAUAAAAFAAAABwAAAAkAAAALAAAADwAAABMAAAAZAAAAHwAA + ACkAAAAzAAAAQQAAAFMmJSF5fH95xamspfW7urH/wL+4/8nJwf/Qz8v/1tbT/9fX1f/X19X/19fV/9fX + 1f/X19X/19fV/9fX1f/X1tT/19bU/9fW1P/X1tT/19bU/9fW1P/X1tT/19bU/9fW0v/W1tL/1tbS/9bW + 0v/W1tL/1tbS/9bW0v/W1tL/1tbT/9bW0//W1tT/1tbU/9bW1P/W1tT/1tbU/9bW1P/W1tT/1tbU/9bW + 1P/W1tT/gZiR/5eUhP+bmIn/mJWF/5mWhv+Sj37/oZ6Q/5yZiv+bmIn/lJGB/2Vwa+sKCwudAgICdQIC + AmUBAQFVAAAAOwAAACcAAAAfAAAAGQAAABMAAAAPAAAACwAAAAcAAAAFAAAABQAAAAP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AAMAAAADAAAAAwAAAAUAAAAFAAAABwAAAAkAAAALAAAADQAAABEAAAAXAAAAHQAAACcAAAAxAAAAPwAA + AFEcGxhtdHdyu6Wqo/G6ubH/wL63/8nHv//Qzsr/1tXS/9jX1f/Y19X/2NfV/9jX1f/Y19X/2NfV/9jX + 1f/Y19X/19fV/9fX1f/X19X/19fV/9fX1f/X1tT/19bU/9fW0//X1tP/19bS/9fW0v/X1tL/19bS/9fW + 0f/W1tH/1tbR/9bV0f/W1dH/1tbR/9bW0f/W1tL/1tbS/9bW0//W1tP/1tbU/9bW1P/W1tT/1tbU/8zE + tP/LxLP/y8Sz/6ayrf+UkYH/m5iJ/5uYif+UkYH/k5B//5+cjv+cmYr/m5iJ/5iVhf+Zlob/kJKE/zo+ + O88DAwOJAgICbwEBAV8BAQFLAAAAMwAAACMAAAAdAAAAFwAAABEAAAANAAAACwAAAAcAAAAFAAAAAwAA + AAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAADAAAAAwAA + AAUAAAAFAAAABwAAAAkAAAALAAAADQAAABEAAAAVAAAAHQAAACUAAAAtAAAAPQAAAE0TExJpZGZfqZ2i + nOm4uLD9v722/8fEvv/Ozsr/1dXS/9jY1v/Y19X/2NfV/9jX1f/Y19X/2NfV/9jX1f/Y19X/2NfV/9jX + 1f/Y19X/2NfV/9jX1f/Y19X/19fV/9fX1P/X19T/19fT/9fX0//X1tL/19bS/9fW0f/X1tH/19XQ/9fU + 0P/X1dD/19XQ/9fUz//W1M//1dTP/9bU0P/W1ND/1tXQ/9bV0f/W1tL/1tbS/8zEs//Jv6r/ysGu/87J + uf/Rz8T/1dTQ/9XU0P/S0s//jZCB/5uYif+bmIn/lJGB/5aTg/+Zlof/n5yO/5uYif+bmIn/lpOD/5mW + hv+Rjn3/gomA9xMTE7ECAgJ7AgICZwEBAVsAAABDAAAAKwAAACEAAAAbAAAAFQAAABEAAAANAAAACQAA + AAcAAAAFAAAAAwAAAAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAADAAAAAwAAAAUAAAAFAAAABwAA + AAcAAAALAAAADQAAAA8AAAAVAAAAGwAAACMAAAAtAAAAOQAAAEsHBwdfTEtFl5ablOG0tq79vr21/8TD + vf/NzMf/1NTR/9jY1v/Y2Nb/2NjW/9jY1v/Y2Nb/2NjW/9jY1v/Y19X/2NfV/9jX1f/Y19X/2NfV/9jX + 1f/Y19X/2NfV/9jX1f/Y19X/2NfU/9jX0//Y19P/2NfT/9fX0//X1tL/19bR/9fW0f/X1dH/19XP/9fV + z//W1c//1tXO/9bVzf/W1cz/1tXM/9XVzP/W1c3/1tXO/83Esf/Jv6j/ysCr/87Jt//Sz8P/1tXQ/9fX + 1f/X19X/19bU/9fW1P/X1tT/19bU/4aXjf+YlYX/nJmK/5aTg/+Zlob/lJGB/6Ogkv+bmIn/nJmK/5SR + gf+bmIn/kI18/56bjP+hnpD/T1NN3wMDA5UCAgJzAQEBYwEBAVMAAAA5AAAAJwAAAB8AAAAZAAAAEwAA + AA8AAAALAAAABwAAAAUAAAAFAAAAA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAADAAAAAwAAAAMAAAAFAAAABQAAAAcAAAAJAAAACwAA + AA8AAAATAAAAGwAAACEAAAApAAAANwAAAEcAAABZQkA8jY+SitmxtKz7vLuz/8PCvP/My8T/0tLO/9jY + 1v/Y2Nb/2NjW/9jY1v/Y2Nb/2NjW/9jY1v/Y2Nb/2NjW/9jY1v/Y2Nb/2NjW/9jY1v/Y19X/2NfV/9jX + 1f/Y19T/2NfU/9jX0//Y19P/2NfT/9jX0//Y1tL/2NbR/9jW0f/Y1tH/2NXP/9fVz//X1c7/19XO/9XV + zP/V1Mz/1dPK/9XUyv/V08j/1dPI/8zDrf/JvqT/yb+m/83HsP/Rzbz/1NPK/9fV0P/X1tH/19fT/9fX + 0//X19X/19fV/9fX1f/X19X/19bU/9fW1P+frKb/lZKC/5yZiv+Zlof/mJWF/5GOff+koZT/mZaH/5yZ + iv+VkoL/nJmK/5GOff+cmYr/o6CT/5yZiv+IiXz7HBwZvQICAoMCAgJrAQEBWwAAAEkAAAAxAAAAIwAA + AB0AAAAXAAAAEQAAAA0AAAALAAAABwAAAAUAAAADAAAAA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAADAAAAAwAAAAMAAAAFAAAABQAAAAcAAAAJAAAACwAAAA8AAAATAAAAGQAA + ACEAAAApAAAAMwAAAEUAAABXLCwof4uPidWtsaj5vLuz/8PCuv/My8P/0tHN/9jY1f/Z2Nb/2djW/9nY + 1v/Z2Nb/2djW/9nY1v/Z2Nb/2djW/9nY1v/Z2Nb/2djW/9nY1v/Z2Nb/2NjW/9jY1v/Y2Nb/2NjU/9jY + 1P/Y19P/2NfT/9jX0//Y19L/2NbR/9jV0f/Y1dH/2NXQ/9jV0P/Y1dD/19XO/9fVzf/W1Mv/1tTK/9XT + yv/V08j/1dPE/8zDrf/JvqT/yb6j/8zCrP/Qy7T/09C+/9XSw//V08T/1dPJ/9bUy//W1c7/19XR/9fW + 0v/X19P/19fV/9fX1f/X19X/19fV/9fX1f/X19X/z87L/5WSgv+cmYr/nJmK/5WSgv+Sj37/o6CT/5mW + h/+cmYr/mJWF/5mWh/+TkH//mZaH/6ShlP+cmYr/lZKC/5mWh/9kZVrpCAgHowICAnUCAgJjAQEBUwAA + AD8AAAArAAAAIQAAABsAAAAVAAAAEQAAAAsAAAAJAAAABQAAAAUAAAADAAAAA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAADAAAAAwAAAAMAAAAFAAAABQAAAAcAAAAJAAAACwAAAA0AAAARAAAAFwAAAB8AAAAnAAAAMwAA + AEEAAABTIiIfd3l8dcWqrab1u7qy/8HAuf/LysL/0dHN/9jX1f/a2df/2tnX/9nZ1v/Z2db/2dnW/9nZ + 1v/Z2Nb/2djW/9nY1v/Z2Nb/2djW/9nY1v/Z2Nb/2djW/9nY1v/Z2NX/2djV/9nY1P/Z2NT/2djU/9jY + 1P/Y2NP/2NbS/9jX0v/Y1tH/2NXQ/9jVz//X1c//19XO/9fVzf/X1cz/1tTK/9bUyv/W08n/1tPH/83E + rf/KvqT/yr2j/8zCq//QybL/1M+8/9bSvv/V0b3/1dC8/9XQvP/W0b7/1tLB/9bSw//W08n/1tXM/9jV + z//Y1dH/19fT/9fX0//X19X/19fV/9fX1f/X19X/19fV/9fX1f+OlYj/mpeI/5yZiv+VkoL/lJGB/5+c + jv+dmov/nJmK/5mWh/+YlYX/lpOD/5WSgv+mo5b/nZqL/5mWhv+Zlof/mZaH/5CNfvssLCjHBAQDiQMD + A2sBAQFZAQEASwAAADUAAAAlAAAAHwAAABcAAAATAAAADwAAAAsAAAAHAAAABQAAAAMAAAAD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAA + AAMAAAAFAAAABQAAAAcAAAAJAAAACwAAAA0AAAARAAAAFwAAAB0AAAAnAAAAMQAAAD8AAABRGRgWb2dp + Y7Oipp/vu7qy/8G/t//JyMD/0dDL/9jW1P/a2df/2tnX/9rZ1//a2df/2tnX/9rZ1//a2df/2tnX/9nZ + 1v/Z2db/2dnW/9nZ1v/Z2db/2djW/9nY1v/Z2NX/2djV/9nY1P/Z2NT/2djU/9nX0//Z2NP/2dfS/9nX + 0v/Z19L/2dbR/9jW0P/X1s//19bP/9fWzv/W1cz/1tXL/9bUy//W1Mr/1tTI/87Hr//KwKb/yr6j/83D + qv/QyrL/1M+6/9bSvv/W0b3/1dC8/9TRu//U0Lv/1NC6/9TQuf/U0Lr/1M+7/9XQvP/W0cD/1tLD/9bU + yv/X1c3/2NXP/9jW0v/Y19P/19fV/9fX1f/X19X/19fV/9fX1f/X19X/m6ef/5eUhP+dmov/lpOD/5iV + hf+al4j/n5yO/52ai/+dmov/lZKC/5iVhf+Sj37/pKGU/5+cjv+bmIn/l5SE/5uYif+QjXz/nZqL/25t + YuMQEA2nBAQDcQICAV0AAABPAAAAQQAAAC8AAAAjAAAAGwAAABcAAAARAAAADQAAAAkAAAAHAAAABQAA + AAMAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAAMAAAAFAAAABQAA + AAcAAAAHAAAACwAAAA0AAAAPAAAAFQAAABsAAAAjAAAALQAAADsAAABNEBAOaWFiXa2co5vruLmw/8C+ + t//Ix77/z8/K/9bW0//a2tf/2tnX/9rZ1//a2df/2tnX/9rZ1//a2df/2tnX/9rZ1//a2df/2tnX/9rZ + 1//a2df/2tnX/9nZ1v/Z2db/2dnW/9nZ1P/Z2dT/2djU/9nY1P/Z19P/2dfT/9nX0v/Z19L/2dbR/9nW + 0P/Y1s//2dbP/9jVzv/Y1cz/19TL/9bUy//W1Mr/1tTI/87IsP/KwKb/yb6j/83Cqf/QybL/1M+6/9bS + v//W0b3/1dG9/9XQu//V0Lr/1NC7/9TPuf/Uz7j/1M+4/9TPt//Uz7f/1M+3/9TQuf/U0Lz/1tG9/9bS + wf/W08f/1tPK/9fVzv/Y1tH/2NfT/9jX1P/Y19X/19fV/9fX1f/X19X/19fV/7W7tv+VkoL/nZqL/5mW + h/+XlIT/lJGB/6ShlP+Zlof/nZqL/5WSgv+bmIn/kI18/6ShlP+dmov/nZqL/5SRgf+dmov/kI18/5uY + if+koZT/iYZ56xMTEqsDAwJtAQEBXQAAAFEAAABHAAAAOQAAACkAAAAlAAAAHQAAABkAAAAVAAAAEQAA + AA0AAAAJAAAABwAAAAUAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAAMAAAADAAAABQAAAAUAAAAHAAAACwAA + AAsAAAAPAAAAEwAAABsAAAAhAAAAKwAAADkAAABLBAQEY0dHQZmVm5PltLWt/b+9tf/IxL7/z83I/9bV + 0v/b2tj/29rY/9va2P/a2tf/2trX/9ra1//a2tf/2tnX/9rZ1//a2df/2tnX/9rZ1//a2df/2tnX/9rZ + 1//a2df/2tnX/9rZ1v/a2dX/2tnV/9nZ1P/Z2dT/2djT/9nY0v/Z2NL/2dfS/9nW0P/Z19H/2NfQ/9jW + z//X1s7/19XM/9fVy//X1cv/19XJ/8/Jsv/Mwaf/yr6j/83Dqv/RyrL/1M+7/9bTv//W0r7/1tG9/9XQ + vP/V0bv/1tG7/9XQuv/V0Ln/1dC5/9XQuf/W0Lj/1c+4/9XPt//Vzrb/1c62/9XPtv/Uz7f/1NC5/9XQ + vP/W0sD/1tLD/9bTyf/X1c3/2NXP/9jX0v/Y19P/2NfV/9PQx//Qyrv/y8Ku/8vBrv/U08//k5GB/52a + i/+dmov/lpOD/5KPfv+lopX/mZaG/52ai/+Wk4P/nZqL/5CNfP+joJL/nZqL/52ai/+Wk4P/nZqL/5GO + ff+al4j/paKV/6ajlv8VFBOrAwMDeQEBAWcAAABdAAAAUwAAAEsAAABBAAAAOQAAAC8AAAAnAAAAHwAA + ABkAAAATAAAADwAAAAsAAAAHAAAABQAAAAMAAAAD////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAwAAAAMAAAADAAAABQAAAAUAAAAHAAAACQAAAAsAAAAPAAAAEwAA + ABkAAAAhAAAAKQAAADUAAABHAAAAXTg2MpGNkYnbsLKq+768tP/HxL3/zs3H/9TUz//b29j/29rY/9va + 2P/b2tj/29rY/9va2P/b2tj/29rY/9va2P/a2tf/2trX/9ra1//a2tf/2tnX/9rZ1//a2df/2tnW/9rZ + 1v/a2dX/2tnV/9rZ1f/a2dX/2tjU/9rX0//a2NP/2tfS/9rX0v/Z19H/2NfQ/9jX0P/Y1s7/19bN/9fV + zP/X1cv/19XJ/9DKs//Nwqj/y76j/87Dqf/RyrH/1c65/9fTv//X0r7/19K+/9XRvP/V0bz/1tG7/9bR + u//W0br/1dC5/9XQuf/W0Lj/1tC4/9bPt//Wz7j/1c+3/9bPt//Wz7f/1s+2/9TPtv/UzrX/1c+3/9XP + t//U0Lr/1tG9/9bSwf/W08f/1tTL/9LOv//Qyrj/y8Kt/8q/qf/Nx7T/0cy//9TSy//U0sv/2NjW/42Z + j/+Zlof/nZqL/5WSgv+TkH//pKGU/5mWh/+dmov/mZaG/5mWh/+Sj37/op+R/5+cjv+dmov/lpOD/52a + i/+Sj37/mJWF/6ajlv+gnY//NzYvxwQEA4ECAgFvAAAAZwAAAF8AAABVAAAATQAAAEMAAAA7AAAAMwAA + ACkAAAAjAAAAGwAAABUAAAARAAAACwAAAAkAAAAHAAAABQAAAAP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAAMAAAADAAAABQAAAAUAAAAHAAAACQAAAAsAAAANAAAAEwAAABkAAAAfAAAAKQAA + ADMAAABDAAAAWScmI4WHjYXXrbGp+b28tP/Dwrv/zczE/9PTzv/a2tf/29vY/9vb2P/b29j/29vY/9vb + 2P/b29j/29rY/9va2P/b2tj/29rY/9va2P/b2tj/29rY/9va2P/a2tf/2trW/9ra1f/a2tX/2trV/9ra + 1f/a2tX/2tnU/9rZ0//a2NL/2tjS/9rY0v/a2NH/2tjR/9nY0P/Z18//2NfN/9jWzP/Y1sv/2NbK/9HK + s//Nw6r/yr6i/87Dqv/RyrH/1M65/9jTv//X0r7/1tG9/9bRvP/W0bv/1tG7/9bQu//W0Lr/1tC6/9bQ + uf/W0bn/1tG5/9bQuP/W0Ln/1c+3/9bPuP/Vz7j/1dC4/9XQuf/V0Lj/1dC4/9XPt//Vz7f/1c+2/9XP + t//Vz7j/1c+5/9DJsf/OxKz/ysCm/8m+pf/NxLD/0cy8/9jX0//Y2NT/2NjW/9jY1v/Y2Nb/2NjW/9jY + 1v+grKb/lpOD/52ai/+Wk4P/lpOD/6Cdj/+dmov/nZqL/5uYif+Wk4P/lZKC/52ai/+hnpD/nZqL/5iV + hf+bmIn/lJGB/5aTg/+mo5b/nZqL/2hlWuMEBASHAgICdwAAAG0AAABlAAAAXwAAAFcAAABPAAAARwAA + AD0AAAA1AAAALQAAACUAAAAdAAAAFwAAABEAAAANAAAACwAAAAcAAAAFAAAAAwAAAAP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AAMAAAADAAAABQAAAAUAAAAHAAAACQAAAAsAAAANAAAAEQAAABcAAAAdAAAAJwAAADEAAABBAAAAVR0d + GoF1eXPHqq2m97y7s//CwLn/zMrD/9PSzv/a2df/3NvZ/9zb2f/c29n/3NvZ/9vb2P/b29j/29vY/9vb + 2P/b29j/29vY/9vb2P/b29j/29rY/9va2P/b2tj/29rX/9va1//b2tb/29rW/9va1v/a2tX/2trV/9rY + 1P/a2NP/2tnT/9rY0//a2NL/2djS/9nY0f/Z19D/2NfP/9jXzv/Y1sz/2NbM/9HLtf/OxKz/y7+i/87D + qv/RyrH/1M+4/9fUv//X077/1tG9/9bRvP/W0bv/1tG7/9bQu//W0Lr/19C6/9bQuf/W0Ln/19G5/9bQ + uP/W0Ln/1tC4/9bQuf/V0Lj/1dC5/9XRuv/V0bn/1dC4/9XQuf/V0Lr/1dC6/9XQuf/V0Ln/1dC4/9HJ + rv/NwqX/yr2e/8m8nf/MwaX/0Mmu/9fSwf/W1Mj/1tXM/9jW0P/Y2NL/2NjU/9jY1v/Y2Nb/2NjW/9jY + 1v/Y2Nb/w8jC/5aTg/+dmov/mZaH/5aTg/+al4j/oZ6Q/52ai/+dmov/lpOD/5iVhf+Zlob/o6CS/52a + i/+bmIn/mJWF/5WSgv+VkoL/paKV/52ai/+KiHn1BgYFlQMDA3sBAQFxAAAAawAAAGUAAABfAAAAVwAA + AE8AAABHAAAAPwAAADcAAAAvAAAAJwAAAB8AAAAZAAAAEwAAAA8AAAALAAAACQAAAAUAAAAFAAAAA/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAP///8B////AQAAAAMAAAADAAAABQAA + AAUAAAAFAAAABwAAAAsAAAANAAAAEQAAABUAAAAbAAAAJQAAAC8AAAA/AAAAURMTEndkZV+5oaae8bu7 + sv/BwLj/ysnB/9LSzf/Z2dX/3NzZ/9zb2f/c29n/3NvZ/9zb2f/c29n/3NvZ/9zb2f/c29n/3NvZ/9vb + 2P/b29j/29vY/9vb2P/b29j/29vX/9vb1v/b29b/29rW/9va1v/b2tb/29rV/9va1P/b2dP/29nT/9rZ + 0v/b2dL/29nS/9rZ0f/a2ND/2djP/9nXzv/Z1sz/2dbM/9LMt//PxKz/y7+j/87Dq//SyrH/1M+5/9jU + wf/Y07//19O//9fSvf/W0rz/1tK7/9bRu//W0br/1tG6/9bQuf/W0Ln/1tG5/9bQuP/W0Ln/1tC4/9bQ + uf/W0Ln/1tC5/9bRuf/W0br/1tG5/9bRuv/V0bv/1dG7/9XSu//W0rz/1dG7/9DKsP/Ow6j/yr6f/8m9 + n//MwqX/z8ir/9bQuP/V0Ln/1dC7/9bSvv/X08H/19TI/9fVzP/Y19D/2dfS/9nZ1f/Z2df/2dnX/9nY + 1v/Z2Nb/2djW/9nY1v+Pk4X/nZqL/5uYif+UkYH/lJGB/6ajlv+Zlof/nZqL/5aTg/+al4j/k5B//6aj + lv+bmIn/npuM/5aTg/+XlIT/lpOD/6Ogk/+fnI7/nJmL/Tw7M7MFBQR/AgIBcwAAAG0AAABpAAAAYwAA + AF0AAABXAAAATwAAAEcAAABBAAAAOQAAADEAAAApAAAAIwAAAB0AAAAXAAAAEQAAAA0AAAAJAAAABwAA + AAUAAAADAAAAA////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAD////AQAAAAMAAAADAAAAAwAAAAUAAAAFAAAABwAA + AAkAAAALAAAADwAAABMAAAAbAAAAIwAAAC8AAAA7AAAATQoKCXFdX1mxm6Kb7bm5sf/Bv7f/ysjA/9HQ + y//Z2NT/3dzZ/93c2f/d3Nn/3NzZ/9zc2f/c3Nn/3NzZ/9zb2f/c29n/3NvZ/9zb2f/c29n/3NvZ/9zb + 2f/c2tj/3NvZ/9vb1//b29b/29vW/9vb1v/b29b/29rV/9vZ1P/b2dP/29nT/9vZ0v/a2dL/2tnR/9nZ + 0f/Z2ND/2djQ/9nYz//Z183/2dfM/9LNt//PyK3/y8Ck/87Dqv/SyrH/1c65/9jUwv/Y1MD/2NO//9fS + vf/X0r3/19K8/9fRu//X0bv/19G7/9fRuv/W0bn/19K5/9fRuP/W0bn/1tG4/9bQuf/W0Ln/1tC5/9bR + uv/W0bn/1tG5/9bRuv/W0br/1tG7/9bSu//W0br/19G7/9LKsf/Nw6j/yr6h/8q+oP/Nwqf/0Mmv/9bR + vP/V0br/1dG6/9XRuf/V0Lj/1tG5/9XQuv/V0bz/19PA/9fTxP/X1cr/2NfP/9nX0v/Z2dT/2dnV/9nZ + 1//Z2df/2dnX/9nY1v/Z2Nb/iJqS/5mWh/+em4z/lpOD/5KPfv+mo5b/mZaG/56bjP+XlIT/nJmK/5CN + fP+opZj/mpeI/56bjP+Wk4P/mJWF/5WSgv+in5H/oZ6Q/5+cjv9oZlrRBgYFgQICAnMAAABvAAAAaQAA + AGUAAABhAAAAWwAAAFUAAABPAAAASQAAAEEAAAA7AAAAMwAAAC8AAAApAAAAIwAAAB0AAAAXAAAAEQAA + AA0AAAAJAAAABQAAAAUAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAwAAAAMAAAADAAAAAwAAAAUAAAAFAAAABwAAAAkAAAALAAAADQAA + ABMAAAAZAAAAIQAAACsAAAA5AAAASQAAAGdDQj6flJqT6bS2rv2/vrb/yce//9DOyv/X1tP/3dza/93c + 2v/d3Nr/3dza/93c2v/d3Nn/3dzZ/93c2f/d3Nn/3NzZ/9zc2f/c3Nn/3NzZ/9zc2f/c29n/3NvZ/9zb + 1//c29f/3NvX/9zb1//c29f/3NrW/9va1f/b2tT/29nU/9vZ0//b2dP/2tnS/9rZ0v/a2NH/2djP/9nX + zv/Z183/2dfN/9PNuP/BuJP/rZ9l/6yeY/+uoWj/r6Rs/7uzhv/V0bv/19O//9fTv//X0r3/19K8/9fS + vP/X0bv/19G7/9fRuv/X0br/19K6/9bRuf/W0bn/19G5/9fRuv/W0bj/1tG5/9bSuv/W0rr/1tK5/9bR + uv/W0bv/1tG7/9bSu//W0br/1tG7/9LKsP/Ow6j/y76h/8q+oP/Ow6j/0cqw/9fSvf/W0r7/1tK+/9bR + vf/W0b3/19K9/9bSu//W0bn/1tC5/9bQuP/W0Ln/1tG7/9fSvv/Y08L/2NTI/9jWzf/a19H/2tjT/9rZ + 1f/Z2df/2dnX/9nZ1//Z2df/2dnX/52tp/+Wk4P/npuM/5aTg/+UkYH/pKGU/5uYif+em4z/mpeI/5qX + iP+Sj37/p6SX/5qXiP+em4z/lpOD/5mWh/+TkH//oZ6Q/6Kfkf+fnI7/gn9x5wUFBIMCAgJ1AAAAbQAA + AGkAAABlAAAAYQAAAF8AAABZAAAAUwAAAE8AAABJAAAARQAAAEEAAAA9AAAAOQAAADMAAAAtAAAAJQAA + AB0AAAAVAAAAEQAAAAsAAAAHAAAABQAAAAMAAAAD////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAADAAAAAwAAAAUAAAAFAAAABwAAAAkAAAALAAAADQAAABMAAAAXAAAAHwAA + ACkAAAAzAAAARQAAAGMvLyuVjZGJ37Gzq/u/vbX/yce+/8/OyP/W1dH/3d3Z/93d2v/d3dr/3dza/93c + 2v/d3Nr/3dza/93c2v/d3Nr/3dza/93c2v/d3Nn/3dzZ/93c2f/d3Nn/3dzZ/9zc2P/c3Nf/3NzX/9zc + 1//c3Nf/3NvW/9zb1v/c2tT/3NrU/9za0//b2tP/29rS/9ra0v/b2dH/2tnQ/9rYzv/a2M3/2tjN/9TO + uf+/tYz/p5hX/5aFOP+IdyL/iXkl/5mJOv+djUH/no9E/5+RSP+YiT//iHgm/7Glbv/X0rv/19K6/9fR + uv/X0br/19G5/9fRuf/W0bn/19G5/9fRuv/X0bn/19G6/9fSuv/X0rn/19K6/9fSu//X0rz/1tK8/9bT + vP/W0rz/1tK8/9LLsf/Ow6j/y7+h/8u/of/Ow6n/0sux/9fTvv/X07//19O//9fTv//X07//19O//9fT + v//X07//19O+/9fSvv/W0rz/1tG7/9bRuf/W0Lj/1tC5/9bQu//W0r7/2NPB/9jUyP/Y1cz/2dfQ/9rX + 0v/a2dX/2tnX/9rZ1//a2df/2dnX/9nZ1//Bx8H/lpOD/56bjP+YlYX/lZKC/6Cdj/+em4z/npuM/5yZ + iv+XlIT/lJGB/6Ogkv+cmYr/npuM/5eUhP+al4j/ko9+/6Cdj/+joJL/npuM/5uYivsEBASDAgICcwAA + AG0AAABpAAAAZQAAAGMAAABfAAAAWwAAAFkAAABVAAAAUQAAAE8AAABRAAAAWQAAAFkAAABZAAAAPwAA + ADUAAAArAAAAIQAAABkAAAATAAAADQAAAAkAAAAFAAAABQAAAAP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAAUAAAAFAAAABwAAAAkAAAALAAAADQAAABEAAAAXAAAAHQAAACkAAAAzAAAAQwAA + AF8gIByJgIaA2a6yq/u/vbX/x8O8/8/NyP/W1ND/3dzZ/97d2v/e3dr/3t3a/97d2v/d3dr/3d3a/93d + 2v/d3dr/3dza/93c2v/d3Nr/3dza/93c2v/d3Nr/3dza/93c2f/d3Nj/3dzY/93c2P/d3Nj/3dvX/9zb + 1//c2tb/3NrV/9za1f/b2tT/29rU/9ra0//b2dL/2tnR/9rYz//a2M7/2tjN/9TPuf+8sYb/pJZS/5OD + M/+Ecx3/iHYg/5WELv+hjzf/rp5H/7elU/+6qVz/vKxg/76vZf/Bsmz/yLl3/8G0cP+fkEj/m4xE/9bR + uP/X0rn/19K5/9fSuf/X0rr/19K6/9fTuv/X07r/19K6/9fTu//X0rz/19K8/9fTvP/X07z/19O8/9LL + sP/PxKn/y7+h/8zAov/PxKn/08ux/9jSvv/Y0r7/2NO//9jTv//Y07//2NO//9jTwP/Y08D/2NPA/9jT + wP/Y08D/2NO//9jTv//X077/19K9/9bRvP/W0rn/1tG6/9fRuf/W0Lr/1tG8/9fTwP/Y08T/2NXL/9jW + z//a19L/2tjU/9rZ1f/Y1tL/1NHH/9DLuv/Qyrn/zsm4/4ORhf+dmov/mpeI/5WSgv+al4j/op+R/52a + i/+fnI7/lpOD/5eUhP+fnI7/n5yO/5+cjv+bmIn/mZaH/5KPfv+gnY//o6CS/5+cjv+hnpD/ERMTjwID + A3MAAQFpAAAAZwAAAGUAAABnAAAAaQAAAG8AAAB3AAAAfQUFA4kLDw2VExcWoRIXGasQGB2xDRQYsQoT + FJsDBARfAAAAPwAAADMAAAAnAAAAHQAAABUAAAAPAAAACQAAAAUAAAAFAAAAAwAAAAP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAADAAAABwAAAAcAAAALAAAADQAAABEAAAAVAAAAHQAAACUAAAAxAAAAPwAAAFkWFRODcXRvy6as + pPe9vLT/w8G6/8zLw//V08//3NrY/97d2//e3dv/3t3b/97d2//e3dv/3t3b/97d2v/e3dr/3t3a/97d + 2v/d3dr/3d3a/93d2v/d3dr/3dza/93c2v/d3Nn/3dzY/93c2P/d3Nj/3dvX/93c1//d2tb/3dvV/93b + 1f/c29T/3NvU/9zb0//c2tL/29rR/9vZz//b2M7/29jN/9vYzf+7sIP/pZVT/5SDNP+FdB7/i3ok/5eF + L/+gjTT/q5g9/7GeRv+1ok3/tqRO/7ekUP+7qlz/vKxh/72tY/++rmX/vKtd/7ilUf/Bsmz/w7Vz/62e + V/+ZikD/1tC4/9fSuv/X07r/19K6/9fTu//X0rv/19K9/9fTvf/X073/19O9/9LKsP/PxKn/y7+i/8zA + o//PxKr/082z/9jUv//Y1MD/2NS//9jUv//Y1L//2NS//9jTwP/Y08D/2NPA/9jTwP/Y08D/2NPA/9jT + wP/Y08D/2NPA/9jTwP/Y07//2NK+/9jSvf/X07z/1tK7/9bRuv/W0br/1tG6/9bRu//X0r7/2NPC/9jV + yf/W0sf/082+/9DItf/Mwq3/y8Kt/8/Jt//a2df/2tnX/9rZ1/99mJH/m5iJ/5+cjv+UkYH/ko9+/6ek + l/+bmIn/n5yO/5aTg/+Zlof/mJWF/6Ogkv+fnI7/nZqL/5eUhP+Rjn3/oZ6Q/6Ogkv+fnI7/pKGU/yUq + KasCAgKJAwkNkQIJDpkCBwudBAcJowwQEakSGBu5FB8lyRMhJ9ckOD7hNVJX60RncPNGbHj1Q3GC+UNx + gfdIcoXxMk1V1w0REo8ECg1RAAAANwAAACkAAAAdAAAAFQAAABEAAAALAAAABwAAAAUAAAAFAAAAAwAA + AAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AAUAAAAJAAAACwAAAA8AAAAVAAAAGwAAACMAAAAvAAAAPQAAAFcTFxWDW2Zk35yknPe8vLT/wsC4/8vK + wf/T0s3/29rW/97e2//e3tv/3t7b/97e2//e3dv/3t3b/97d2//e3dv/3t3b/97d2//e3dv/3t3b/97d + 2//e3dv/3t3b/97d2//d3dn/3d3Z/93d2f/d3dn/3d3Z/93c2P/d3Nj/3dvW/93b1v/d29X/3dvV/9vb + 1P/c2tP/29rR/9va0P/c2c7/3NnN/9rXy/+5rn7/pJVS/5SDNP+Fcx3/jXwn/5mIMv+jkDj/rptC/7Oh + Sf+1ok7/tqNO/7akT/+5qFr/wLJv/8q7gP/Nv4X/0MOM/9DDjP/Qw4n/0sKG/9PCfv/Sv3D/v65h/7uq + Xf/As3D/p5dL/5uMQv/Y0rz/2NK9/9fSvf/X073/19O9/9HLsP/PxKn/zL+i/8zAo//Qx6v/1M20/9nU + v//Z1MD/2dTA/9nUwP/Z1MD/2dTA/9nUwf/Z1MH/2NTA/9jUwP/Y1MD/2NTA/9jUwP/Y08D/2NPA/9jT + wP/Y08D/2NPA/9jTwP/Y08D/2NO//9jTv//Y0r7/19K8/9fRu//X0br/1tG5/9bRuv/TzbT/0Mqv/87D + qf/KvqT/y8Cp/9DJtf/a19L/2tnV/9ra1v/a2tf/2trX/9ra1//a2tf/lqmk/5eUhP+fnI7/l5SE/5KP + fv+npJf/mZaH/5+cjv+XlIT/nZqL/5KPfv+mo5b/m5iJ/5+cjv+Wk4P/ko9+/6GekP+hnpD/n5yO/6il + mP8sPkXpDic55RAnNuURKTjvDyU18RUyQfUmSVj5MVhr+zpmfP8/cIj/Q3aN/0p+k/9RiJ3/V5Cm/1aR + q/9gm7T/hLjP/3SpwP80VlvfG0lj3RMwQ3kAAAA5AAAAKQAAAB8AAAAXAAAAEQAAAAsAAAAJAAAABwAA + AAUAAAAFAAAAA////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAADAAAABwAA + AA8AAAATAAAAGQAAACMAAAAtAAAAOQAAAFMEBANzWFpVtZqhm/G4urL/wb+4/8vJwf/S0Mv/2tnV/9/e + 2//f3tv/397b/9/e2//f3tv/397b/97e2//e3tv/3t7b/97e2//e3tv/3t7b/97e2//e3tv/3t7b/97e + 2//e3tr/3t7Z/97e2f/e3tn/3t7Z/97d2P/e3Nf/3tzX/97c1v/e3NX/3dzV/93b1f/d29T/3NrS/9za + 0f/c2dD/3NnO/9jUw/+4rXz/pJVR/5SENP+GdB//kYAs/5yLN/+lkzz/sZ5H/7SiTf+2o0//t6RP/7ek + UP+7ql7/wrNx/8q8gf/NwIb/0cOM/9TJlP/Zz5v/2s6X/9jLiP/azIb/2suG/9rLhv/czo3/4dSc/9jI + f//HtWr/uahY/7usZv+SgSz/s6hx/9LLr//PxKj/y8Ch/83BpP/QyKz/1M60/9nVv//Z1MD/2dTA/9nU + wP/Z1MD/2dTB/9nUwf/Z1MH/2dTB/9nUwf/Z1MH/2dTB/9nUwf/Z1MH/2NTA/9jUwP/Y1MD/2NTA/9jU + wP/Y08D/2NPA/9jTwP/Y08D/2NPA/9jTwP/Y07//2NK+/9fRvP/TzLP/0Miq/83Bo//JvJz/y8Ci/9bS + vf/Y1MH/2NXH/9jWzP/Z2ND/2tjS/9rZ1P/a2tX/2trX/9ra1//a2tf/2trY/7e/u/+Wk4P/n5yO/5aT + g/+UkYH/pKGU/5uYif+fnI7/mZaH/5uYif+QjXz/p6SX/5qXiP+fnI7/l5SE/5OQf/+fnI7/oZ6Q/5+c + jv+mo5b/JENV/w82UP8QN1L/Ez1X/xlEX/8gTWb/KVhw/zNje/88b4f/QnaQ/0V7lP9FfJX/Rn2V/0Z9 + lf9HfJL/TICV/4OmtP+Gscn/S4mc/x5RbPcfVHT5DSEuYQAAADcAAAAnAAAAHQAAABcAAAARAAAACwAA + AAkAAAAHAAAABQAAAAUAAAADAAAAA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAUAAAAPAAAAGQAA + ACEAAAArAAAANwAAAE0AAABtNTMvnZOZkuu0t6/9wL+2/8nIv//R0Mr/2NfT/9/e3P/f3tz/397c/9/e + 3P/f3tv/397b/9/e2//f3tv/397c/9/e3P/f3tz/397c/97e3P/e3tz/3t7c/97e2//e3tr/3t7a/97e + 2v/e3tr/3t3Z/97d2f/e3Nj/3tzX/97c1//e3Nb/3dzV/97c1f/c3NT/3NvT/9zb0v/c2tD/3NrP/9bR + vf+4rHr/pJVQ/5SDNP+IdyH/lIMx/6CPPP+pl0L/taJN/7alUf+3pVH/t6RP/7elUv+8q2D/wrVz/8y8 + gv/PwYf/0cSO/9XKlf/a0Jz/2s6W/9nKhv/Ww3f/0Lxo/865Yf/OuGD/zbhf/823Xv/Mt1//zLZe/8y3 + Yf/YyYT/2cyJ/8GwY/+1o0//rJpI/4VzHP/Qx6r/1M61/9nUwP/Z1cH/2dXB/9nVwP/Z1cD/2dXA/9nV + wf/Z1MH/2dTB/9nUwf/Z1MH/2dTB/9nUwf/Z1MH/2dTB/9nUwf/Z1MH/2dTB/9nUwf/Z1MH/2NTA/9jU + wP/Y1MD/2NTA/9jUwP/Y08D/2NPA/9fRvf/TzLX/0Mit/8zApP/KvZ7/zcGl/9fRuv/X0br/19G5/9fR + u//X0rz/19TA/9jUx//Y1sz/2dfQ/9nY0v/a2dX/2trW/9ra2P/a2tj/2trY/9ra2P/W1tP/k5KD/5+c + jv+Zlof/lZKC/6Cdj/+fnI7/n5yO/5yZiv+Zlof/ko9+/6ajlv+cmYr/n5yO/5aTg/+UkYH/nZqL/6Og + kv+fnI7/pqOW/yJDVv8ONlH/EDhT/xM8V/8XQ17/H0xm/ydWb/8vXnj/NmiA/zpshP89cIj/QHSK/0N4 + jv9Ge5L/SH2U/0Z9k/9vmq3/jbPB/0yLpv8dU3L9H1V1/xlFX7UAAAA/AAAAMQAAACUAAAAdAAAAFwAA + ABEAAAANAAAACwAAAAkAAAAFAAAABQAAAAMAAAADAgICA////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAACwAAABsAAAAnAAAANQAA + AEkAAABrJCMglYiMhuGytq79wL62/8jHvf/Qz8n/2NbS/9/e2//g39z/39/c/9/f3P/f39z/39/c/9/e + 3P/f3tz/397c/9/e3P/f3tz/397c/9/e3P/f3tz/39/c/9/f3P/f39v/39/a/9/f2v/f39r/39/a/9/f + 2f/f3dj/3tzX/97c1//e3Nb/3tzW/97c1v/e3NX/3dvU/93b0//d29H/3drQ/9bRuv+4rXv/pJRQ/5KC + Mf+Keib/l4c1/6OSQf+tnEr/uKZT/7imVP+4plL/t6RP/7imVf++rWT/xLZ2/82+g//PwYf/0sSO/9XK + lP/b0Z7/2s6U/9rLg//WwnX/0btm/865Yf/OuGD/zbhg/823X//Mtl7/zLdf/8u2Xv/Ltl3/y7Zd/8mz + Wf/HsVf/xLBW/9bIhf/RvnX/uKZS/6+cQ/+OfCH/rJ9h/9rVwf/a1cH/2tXB/9rVwf/a1cL/2tXC/9nV + wf/Z1cH/2dXB/9nVwf/Z1MH/2dTB/9nUwf/Z1MH/2dTB/9nUwf/Z1MH/2dTB/9nUwf/Z1MH/2dTB/9nU + wf/Z1MH/2dTB/9bRu//TzbT/z8er/8zApP/Lv6H/zsSp/9jUv//Y1L7/2NO+/9fTu//X0rv/19K6/9fS + uv/X0rr/19O8/9fUv//Z1cP/2dfK/9nYzv/b2dL/29rU/9vb1v/b2tj/29rY/9va2P/b2tj/29rY/4qW + jP+bmIn/nJmK/5SRgf+Zlof/o6CS/5+cjv+fnI7/lpOD/5aTg/+in5H/nZqL/5+cjv+YlYX/lZKC/5mW + hv+joJL/n5yO/6GekP8oR1n/DTRP/w83Uf8SOlX/FUBb/x1JYv8lU23/Ll11/zVmfv86bIP/PXGI/0F0 + i/9Dd47/RnqR/0h+lv9GfpX/Woyf/4Stu/9Sjqr/HlR0/x9Vdf8cTWrXAAAARQAAADcAAAAtAAAAIwAA + AB0AAAAXAAAAEQAAAA0AAAALAAAACQAAAAcAAAAFAAAAAwAAAAMBAQED////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAMAAAARAAAALQAAAEMAAABlHBsYj36G + gNutsqr9v762/8fDvP/Pzcj/19XR/97d2f/g39z/4N/c/+Df3P/g39z/4N/c/+Df3P/g39z/39/c/9/f + 3P/f39z/39/c/9/f3P/f39z/39/c/9/f2//f39r/39/a/9/f2v/f39r/39/a/9/e2f/g3dj/4N3X/+Dd + 1//e3db/3t3W/97d1f/d3dX/3dvT/93b0//d29L/3drQ/9POtv+3q3j/o5VQ/5KCMf+MfCj/mYk4/6aW + Rv+yolH/uqhX/7moV/+4plP/t6RP/7moV/+/r2j/yLh6/829hf/PwYn/0sSO/9bLlf/c0p7/286T/9rK + g//VwXT/0Ltl/8+5YP/OuGD/zrhf/823X//Mt1//zLdf/8y2X//Ltl7/yrZd/8mzWv/HsVf/xK9V/8Sw + Vv/HsFf/x7FY/8eyWv/KtmH/286V/8i2av+1okz/ppQ+/4Z0Gv/Y07//2tXC/9rVwv/a1cL/2tXC/9rV + wv/a1cL/2tXC/9nVwf/Z1cH/2dXB/9nVwf/Z1cH/2dTB/9nUwf/Z1MH/2dTB/9nUwf/Z1MH/2dTB/9bQ + u//Ty7L/z8er/8zAo//MwaT/z8er/9nVwf/Z1cH/2dXB/9nVwf/Z1MH/2dTA/9nTv//Y073/2NK9/9jT + u//Y0rr/19K6/9jSvP/Y1L//2dXD/9rWyf/a187/2tnS/9vZ1P/b29f/29vY/9vb2f/b2tj/29rY/9va + 2P+QoZr/mZaG/5+cjv+VkoL/ko9+/6ekl/+bmIn/n5yO/5iVhf+Zlof/nJmK/6Cdj/+fnI7/m5iJ/5WS + gv+Wk4P/o6CT/6Cdj/+fnI7/OVNg/w00T/8PNlH/EjpV/xVAW/8cSGL/JVNs/y5ddv81Zn3/OmyE/z1w + iP9BdYz/RHmQ/0Z8lP9Ifpb/R36W/1aKoP+WuMf/Z5iu/x9Vdf8fVXX/HVFv6QAAAEsAAAA9AAAAMQAA + ACkAAAAhAAAAGwAAABUAAAARAAAADQAAAAsAAAAJAAAABwAAAAUAAAADAAAABQABAAMJCwwD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAUAAAAfFxUUX3V6dcenrab5v762/8TC + uv/NzMP/1tXQ/93d2f/g4N3/4ODd/+Dg3f/g4N3/4ODd/+Dg3f/g4N3/4ODd/+Dg3f/g4N3/4ODd/+Dg + 3f/g4N3/4ODd/+Dg3f/g4Nz/4ODb/+Df2//g39v/4N7a/+De2v/g3dj/4N3X/+Dd1//g3db/393W/9/d + 1f/e3dX/3tzT/97c0v/d29H/3dvQ/9HMsf+1qXX/oZJL/5KBMP+OfSz/nIs8/6iXSf+1pFb/u6tb/7qp + Wf+4plP/t6VQ/7upWv/BsWz/ybl+/87Ahv/QwYj/0seO/9fMlv/e05//3NCQ/9rLgv/UwnT/0Lpk/8+6 + Yv/OuGH/zrdg/824YP/Nt1//zLdf/8y3X//Ltl7/y7Vd/8izWv/Hslj/xLBW/8SwVv/HsFf/x7FZ/8ey + Wv/Hslr/xLFZ/8SwWf/Dr1j/w69Y/9TDgf/Pvnj/t6RP/6yYPP+LeBv/sKRr/9rWwv/a1cL/2tXC/9rV + wv/a1cL/2tXC/9rVwv/a1cL/2tXC/9nVwf/Z1cH/2dXB/9nVwf/Z1cH/2dXB/9XQuP/Sy7H/z8Sp/8u/ + of/NwqX/0Mmu/9nVwf/Z1cH/2dXB/9nVwf/Z1cH/2dXB/9nVwf/Z1cH/2dXB/9nVwP/Z1L//2dO+/9jT + vf/Y0rv/2NK7/9fSuv/Y0rv/2NO+/9nVwv/a1sj/2tfM/9vZ0v/c2dT/3NrW/9vb1//b29n/29vZ/9vb + 2f/a2db/p7Ou/5aTg/+fnI7/lpOD/5KPfv+pppr/mZaH/6GekP+Wk4P/nZqL/5aTg/+joJL/oJ2P/5+c + jv+UkYH/lJGB/6ajlv+em4z/oJ2P/09jav8NNE//DzZR/xI6Vf8VQFv/HElj/yRSa/8tXXb/NGZ+/zls + hP88cIj/P3OL/0N4j/9FfJT/R32U/0d/l/9QiJ//nr7M/2aYrv8fVXX/H1V1/x1Rb+0AAABNAAAAPQAA + ADUAAAAtAAAAIwAAAB8AAAAZAAAAFQAAABEAAAANAAAACwAAAAkAAAAHAAAABQAAAAMAAAADAAEBA/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wGCgXcXwcK6+8PBuf/Ny8L/1NPO/93c + 2f/h4N7/4eDe/+Hg3v/g4N7/4ODe/+Dg3v/g4N7/4ODe/+Dg3v/g4N7/4ODe/+Dg3f/g4N3/4ODd/+Dg + 3f/g4Nz/4ODb/+Dg2//g4Nv/4ODb/+Df2v/g39n/397Y/+Dd2P/f3dj/393X/9/d1v/e3db/3tzU/97c + 0//e29H/3tvQ/8/Jq/+zp2//n5BH/5CALv+QgC3/no0+/6ubTf+4p1r/vKxd/7uqWv+4plP/uKVR/7uq + XP/Cs3D/y7yC/86/hv/Qwon/1MiQ/9jMlv/e057/3c+P/9nJgP/VwXL/z7pj/8+5Yf/OuWH/zbhg/824 + YP/NuF//zLdg/8u2Xv/Ltl7/y7Vd/8mzWf/HsVf/xLBW/8SwV//HsVj/x7FZ/8eyWv/Hslr/xLFa/8Sw + Wf/EsFn/w69Y/8OvWP/Crlf/wq5Y/8GtV//EsmL/18qQ/8KxZf+0oUn/oZA1/4d1HP/a1sL/2tbC/9rW + wv/a1cL/2tXC/9rVwv/a1cL/2tXC/9rVwv/a1cL/2tXC/9bPuP/Syq//zsOo/8u/oP/Ow6j/0cqv/9nV + wf/Z1cH/2dXB/9nVwf/Z1cH/2dXB/9nVwf/Z1cH/2dXB/9nVwf/Z1cH/2tXC/9nVwf/Z1cD/2dW//9nU + vv/Y1L3/2NK7/9jSu//Y0rr/2NK7/9jTvf/Y1MD/2tXI/9rXzP/a2ND/29nT/9zb1v/c29f/3NvZ/9DL + uf/Nw6//zsey/8C7p/+Wk4P/oJ2P/5iVhf+UkYH/qKWY/5qXiP+hnpD/mJWF/5+cjv+QjXz/pqOW/5yZ + iv+gnY//lZKC/5KPfv+lopX/npuM/6Cdj/9pdnb/DjVP/w82Uf8SOlX/FUBa/xtIYf8jUWr/LFx2/zNl + fv83a4P/O2+H/z5zi/9Bdo7/Q3mQ/0V7kv9Gf5f/UIab/5m6yf9kmaz/H1V1/x9Vdf8dUG7pAAAATwAA + AEEAAAA3AAAALwAAACcAAAAhAAAAGwAAABcAAAATAAAADwAAAA0AAAAJAAAABwAAAAUAAAADAAAAA/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAQEBA8PDu/fb2tb/4eDe/+Hg + 3v/h4N7/4eDe/+Hg3v/h4N7/4eHe/+Hh3v/h4d7/4eHe/+Hh3v/h4d7/4eDe/+Hg3v/h4N7/4eDd/+Hg + 2//h4Nv/4eDb/+Hf2v/h3tn/4d7Z/+He2P/h3tj/4N7X/9/e1//e3tb/3t3V/97d1P/e3NP/3tvR/83E + pf+uomf/nY5E/459K/+RgC//n49A/62dT/+5qFv/vaxe/7upWv+4plP/uKVS/7ysXv/DtHH/zL2E/87B + hv/Qw4r/1MiQ/9rOmP/f053/3tCO/9nJf//UwHD/z7pi/8+5Yf/OuGD/zrhg/824YP/Nt1//zLdg/8u3 + X//Ltl7/y7Ve/8mzWf/HsVj/x7BV/8ewVv/HsFj/yLFZ/8iyW//HsVr/x7Fa/8SxWf/DsFn/w7BY/8Ov + WP/Cr1j/wa5Y/8GtV//ArVb/wKxW/7+sVv+/rFX/v6tV/9LCgv/LuXP/taJM/6yYOv+IdRn/t6x5/9rW + wv/a1sL/2tbC/9rWwv/a1sL/2NS+/9XPt//Syq//zsOm/8zAov/Px6r/08yx/9rWwv/a1sL/2tbC/9rW + wv/a1sL/2tXC/9rVwv/a1cL/2tXC/9rVwv/a1cL/2tXC/9rVwv/a1cL/2tXC/9rVwv/a1cL/2tXB/9nV + v//Z1L//2NS9/9jTvP/Y07v/2NK7/9jSuv/Y0r3/2NPA/9rVxP/a1sr/0s25/8/Is//Mwar/zsSv/9HL + uv/V0cf/2dfS/9vb2f/a2tj/mZaG/56bjP+al4j/lJGB/6Ogk/+em4z/oZ6Q/5uYif+bmIn/ko9+/6aj + lv+cmYr/oJ2P/5eUhP+Sj37/pqOW/52ai/+gnY//jZCH/w41T/8PNlH/EjpV/xRAWv8aR2D/I1Fq/ytc + df8yY33/N2mC/zpthv89con/P3SL/0J2jv9FeZD/Q32U/1eKoP+OssD/ZZqw/x9Vdf8fVXX/HE5s4QAA + AE8AAABBAAAANQAAAC8AAAApAAAAIwAAAB0AAAAXAAAAEwAAABEAAAANAAAACwAAAAkAAAAFAAAABQAA + AAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wGysKdTzczD/+Hh + 3v/h4d7/4eHe/+Hh3v/h4d7/4eHe/+Hh3v/h4d7/4eHe/+Hh3v/h4d7/4eHe/+Hh3P/h4dz/4eDc/+Hg + 3P/h39v/4d7a/+He2P/h3tj/4N7X/+De1//f3tb/393V/9/d1P/f3dP/39zR/8rCn/+toGT/nIxB/4x7 + KP+SgjD/opFC/62dT/+5qFr/vKtc/7upWf+4plL/uKZS/72sYP/Etnb/zb6E/8/Ah//Rw4v/1cmP/9zQ + mP/g1Jz/3dCN/9jJf//Tv27/z7ph/8+5Yv/PuGH/zrhg/824Yf/Nt2D/zbdf/8y3X//Ltl7/yrVd/8mz + Wv/HsVj/xLBV/8ewV//HsFj/x7FZ/8izW//Hslr/x7Jb/8SxWv/EsFn/xLBZ/8OvWP/Dr1j/wa5Y/8Gu + V//Arlf/wK1W/8CtVv+/rVb/v6xV/76rVP++q1T/vapT/72pU//BsGD/1MeM/7+uYv+zn0f/nosv/4p4 + IP/b18P/2dS+/9XPtv/Sya3/zsKl/83CpP/Ryaz/29bD/9vWw//b1sP/29bD/9vWw//b1sP/29bD/9vW + w//a1sL/2tbC/9rWwv/a1sL/2tXC/9rVwv/a1cL/2tXC/9rVwv/a1cL/2tXC/9rVwv/a1cL/2tXC/9rV + wf/a1cH/2tTA/9nUvf/Y073/2NO7/9jTuv/Y07r/0Meq/8zBpP/KvqD/zsOr/9LLt//V0sP/2tfQ/9zb + 1//c29n/3NvZ/9zb2f/c29n/3NvZ/5iajv+bmIn/n5yO/5SRgf+em4z/oJ2P/6Cdj/+em4z/mJWF/5aT + g/+koZT/nZqL/6Cdj/+Wk4P/k5B//6ShlP+em4z/oZ6Q/6Kfkv8PNlD/DzZR/xE5VP8UP1r/GUZg/yJP + af8qW3T/MWN8/zdpgP86bYT/PXKJ/z51jP9Ad4//RHuS/0J8lP9fk6f/iLC//1mPqv8fVXX/H1V1/xxM + aNcAAABNAAAAPwAAADUAAAAvAAAAJwAAACMAAAAdAAAAFwAAABUAAAARAAAADQAAAAsAAAAJAAAABwAA + AAUAAAADAAAAA////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bo6CSA8fE + vPfd3Nn/4uHf/+Lh3//i4d//4uHe/+Lh3v/i4d7/4uHd/+Lh3P/i4dz/4uHc/+Lh3P/h4Nv/4d/a/+Hf + 2f/h39n/4N/Y/+De2P/f3tf/393W/9/d1f/f3dP/39zS/8S7lP+rnV7/mYk8/4p5Jf+SgS//oJBA/6yc + TP+5qFn/u6pa/7qoWP+4pVH/uKZT/76tYv/It3j/zb6F/87Bh//RxIv/1sqQ/93Smv/h1Zv/3c+M/9jJ + fv/Sv2z/z7ph/866Yf/OuWH/zrlh/864Yf/NuGD/zLdg/8y2X//Ltl//y7Ve/8mzWv/Islj/xLBV/8Sw + V//HsVj/x7Ja/8ezW//Hslr/x7Fa/8exWv/EsFr/xLBZ/8OwWf/Dr1j/wq5Y/8GuV//Brlf/wK5X/8Ct + Vv/ArFb/v6xV/7+rVf++q1T/vapU/72qU/+8qlT/u6lS/7upUv+7qFL/u6hR/9DBhP/Htm7/tKBK/6qW + Of+Gcxb/tKZw/87Dpv/Syq7/29fD/9vXw//b18P/29fD/9vXw//b18P/29bD/9vWw//b1sP/29bD/9vW + w//b1sP/29bD/9vWw//a1sL/2tbC/9rWwv/a1sL/2tXC/9rVwv/a1cL/2tXC/9rVwv/a1cL/2tXC/9rV + wv/a1cL/2tXB/9rVwP/Z1L//z8Sp/8y/oP/Lvp//zcOl/9HKrf/Uz7b/2dbC/9rXyP/a2Mz/2trS/9za + 1P/c3Nf/3NzX/9zc2f/c3Nn/3NzZ/9zc2f+fqJ//l5SE/6GekP+Wk4P/mJWF/6ShlP+em4z/oZ6Q/5eU + hP+YlYX/op+R/52ai/+hnpD/mJWF/5SRgf+in5H/oJ2P/6GekP+pppr/EjhQ/w42Uf8ROVT/Ez5Z/xlF + X/8gTmf/KVlz/zBjfP82aoP/OW+G/zxyiv8/do//QXmR/0N7lP9Ae5T/Z5ir/4avvf9Ngp//H1V1/x9V + df8bSWXNAAAASQAAAD0AAAAzAAAAKwAAACUAAAAhAAAAHQAAABcAAAATAAAAEQAAAA0AAAALAAAACQAA + AAcAAAAFAAAAAwAAAAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wHDwrlpz87I/+Li3v/i4d//4uHe/+Lh3v/i4d3/4uHd/+Lh3P/i4Nv/4uHb/+Lf2f/i39n/4d/Z/+Hf + 2P/g39f/397W/9/d1f/f3tT/3NrL/8C4jf+omln/loY4/4h3Iv+TgzD/oI8//6uaSf+4plX/uqhY/7qn + Vv+3pVD/uaZU/7+vZv/IuHr/zcCG/9DBh//Sx4v/2MuS/9/Sm//h1Zr/3c6L/9jHe//Tv2v/z7pi/8+6 + Yf/PuWH/zrlh/825YP/NuWD/zLdg/8y3X//Lt1//y7df/8mzWv/IsVj/x7BW/8ewV//Hsln/x7Na/8ez + W//Hs1v/x7Jb/8SxWv/EsFr/xLBZ/8OwWf/Dr1j/wq9Y/8KuV//Brlf/wa5X/8CtV//ArVb/v6xV/7+r + Vf++q1X/vqpU/72qVP+8qlP/vKlT/7yoUv+8qFL/u6hS/7qnUf+6p1H/uKVO/7ekS/+9qlv/zb2B/7mn + Wf+ynkT/mYYn/417JP/b18P/29fD/9vXw//b18P/29fD/9vXw//b18P/29fD/9vXw//b18P/29bD/9vW + w//b1sP/29bD/9vWw//b1sP/29bD/9vWw//a1sL/2tbC/9rWwv/a1sL/2tbC/9rVwv/a1cL/2tXC/9rV + wv/Sy7H/z8Sq/8y/of/NwaT/0Meq/9TMsv/X0Lf/2dO8/9jTu//Y07r/2NO9/9jUwP/a1sf/2tjM/9vZ + 0f/c2tT/3dzX/93c2P/d3Nr/3dza/93c2v/d3Nr/t724/5iVhf+hnpD/mJWF/5OQf/+opZj/m5iJ/6Ge + kP+YlYX/mpeI/52ai/+hnpD/oZ6Q/5yZiv+UkYH/n5yO/6GekP+hnpD/pKGU/xU6Uf8ONlD/ETlT/xM9 + WP8ZRF//H05n/ydYcf8vYnr/NWqD/zlvif88c4z/P3aP/0J5kP9De5P/PXiQ/2mYqv+Hr73/QHiX/x9V + df8fVXX/GkdiwQAAAEMAAAA5AAAALwAAACcAAAAjAAAAHQAAABsAAAAVAAAAEQAAAA8AAAALAAAACQAA + AAkAAAAFAAAABQAAAAMAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BvLqwBcTCufvf39r/4uLd/+Li3f/i4dz/4uDc/+Lf2//i39r/4t/a/+Hf2P/h39j/4N/X/+De + 1v/g3tT/2tbE/761iP+ml1X/lIQ0/4Z2IP+Ugi//oI89/6uZRv+2pVL/uahW/7mnVf+3pFD/uadU/7+v + Zv/IuHn/zsCG/8/Chv/TyIz/2cyR/+DUnP/h1Zn/3M6J/9fHef/Rvmn/z7pi/8+5Yv/PuWH/zrlh/824 + YP/NuGD/zbhg/8y3X//Lt1//yrVc/8m0W//Islj/x7BW/8exWP/HsVn/yLNb/8izW//Hslv/x7Jb/8Sx + Wv/EsVr/xLBa/8OwWf/CsFn/wq9Y/8KvWP/Brlj/wK1X/8CtV//ArFb/wKxW/7+rVf++q1T/vqtU/72q + VP+8qlP/vKlT/7yoUv+8qVP/u6hS/7qoUf+7p1H/uKVO/7ikS/+2oUn/tJ9G/7WhSP+2okr/uKRP/8/A + hv/BsWv/s6BJ/6uYPP+EcRX/wrmR/9zXxP/c18T/3NfE/9vXw//b18P/29fD/9vXw//b18P/29fD/9vX + w//b18P/29bD/9vWw//b1sP/29bD/9vWw//b1sP/29bD/9vWw//a1sL/2tbC/9rWwv/Syq//zsOm/8u/ + of/OxKj/0suw/9XQuP/a1sH/2tbA/9rVwP/Z1b7/2dS9/9nUvP/Y1Lz/2NS7/9nUvv/Z1cH/2tfH/9vZ + zP/b2tD/3NrU/93b1v/d3Nj/3dza/93c2v/d3Nr/3dza/8/QzP+YlYX/oZ6Q/5iVhf+UkYH/rKmd/5mW + h/+hnpD/mJWF/5yZiv+YlYX/o6CT/6GekP+em4z/k5B//5uYif+joJL/n5yO/6GekP8cQFX/DjVQ/xE4 + U/8TPVf/GERf/x9NZ/8mVnD/LmB5/zVogf86bof/O3KL/z51jv9Ad4//QXmR/zt3kP9olqv/kLbE/zdy + k/8fVXX/H1V1/xlFYLMAAAA9AAAAMwAAACsAAAAlAAAAIQAAABsAAAAXAAAAEQAAAA8AAAANAAAACwAA + AAkAAAAHAAAABQAAAAUAAAADAAAAA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wHJx7yX09DJ/+Pg2v/i4Nr/4uDa/+Hg2f/h4Nn/4N/Y/+De1//g3tb/2dbD/720 + h/+ll1T/koEx/4h2If+VgzH/oI88/6qZRP+3pVD/uKZU/7imU/+3pE//uadW/7+vZ//JuHv/z7+H/9HC + h//UyIv/286S/+LXnv/g1Jf/282H/9bHeP/Rvmj/z7pi/8+6Yf/PumH/zrlh/825YP/NuGD/zLdg/8y3 + YP/Mt1//y7Ze/8m0Wv/IsVj/x7FW/8exWP/Hsln/x7Nb/8izXP/Hslz/x7Jb/8SyWv/EsVr/xLFa/8Kw + Wf/CsFn/wq9Y/8KvWP/Br1j/wa5Y/8CuWP/ArVb/v61W/7+tVv+/rVb/vqxV/72rVf+9qlT/vapU/7yq + VP+8qFP/u6hT/7unUv+7p1L/uKRO/7ejS/+1oUn/taBH/7WhSf+2okv/uKVP/7ekT/+3pE7/tqRO/7aj + Tv++rmL/zb+D/7mpXf+wnEL/loIj/5B/Kv/c18T/3NfE/9zXxP/c18T/3NfE/9vXw//b18P/29fD/9vX + w//b18P/29fD/9vXw//b18P/29bD/9vWw//b1sP/29bD/9vWw//RyKz/zsGl/83BpP/Rx6v/08yy/9fR + uv/a1sL/2tbC/9rWwv/a1sL/2tbC/9rWwf/a1cD/2dW+/9nUvv/Z1Lz/2dS7/9jTu//Z1L3/2dXA/9rX + xP/b2Mr/29nP/9zb0//d29X/3d3Y/93c2v/d3Nr/3dza/93c2v/d3Nr/mpeI/52ai/+al4j/lpOD/6il + mP+al4j/oZ6Q/5iVhf+dmov/ko9+/6ajlv+fnI7/oZ6Q/5aTg/+YlYX/pqOW/52ai/+hnpD/J0dZ/w41 + UP8QOFP/Ez1X/xdEXv8eTGb/JVVv/yxed/8zZ3//N22E/ztwiP88c4v/P3eO/0B4kP8+eZL/ZZit/5i9 + zP8zbI3/H1V1/x9Vdf8ZRF6lAAAANwAAAC8AAAAnAAAAIQAAAB0AAAAXAAAAEwAAAA8AAAANAAAACwAA + AAkAAAAHAAAABwAAAAUAAAAFAAAAAwAAAAP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BwsC3GcTCuP/h39j/4eDY/+Hf1//g39b/1tO+/7yzhf+ll1T/kYAw/4l4 + JP+WhTP/opJA/62cSv+4pVP/uKdU/7ilUv+3pE//uadX/7+waP/Junv/zsCF/9HCh//WyYv/3NCT/+PX + n//g05b/28yG/9fEd//RvWb/0Lpi/8+6Yf/PumH/zrph/824YP/NuGD/zLhg/8y3X//Mt1//yrVd/8mz + Wv/IsVj/x7BX/8ixWP/Islr/yLRd/8i0XP/Hs1v/x7Nb/8eyW//EsVr/w7Fa/8OxWf/CsFn/wrBZ/8Kv + Wf/Br1j/wa5X/8GuWP/Arlf/v61X/7+tV/+/rVb/vqxV/72sVf+9q1T/vatU/7yqVP+8qlT/u6pT/7up + U/+5p1D/uaVO/7ejS/+1oUj/taFI/7ahSv+2o0z/uKVQ/7elUP+3pE//t6NO/7ajT/+2o07/taJN/7Wi + Tf+1ok3/tKFM/8/AiP++rmf/s6BJ/6uYPf+CcBT/yb6a/9zXxP/c18T/3NfE/9zXxP/c18T/3NfE/9vX + w//b18P/29fD/9vXw//b18P/29fD/9PMsv/Qx6r/zcGj/87Dp//Syq7/1c+2/9vXw//b18P/29fD/9vX + w//b18P/29fD/9vXw//b18P/29fD/9vWw//b1sL/29bB/9rVwP/a1b//2tS9/9rUvf/Z07v/2tS9/9rV + wP/a1sT/3NjK/9zZzv/c29P/3dvV/93c1//d3dn/3d3a/93c2v/d3Nr/2tjS/6Kgkv+Zlof/npuM/5aT + g/+koZT/npuM/6Kfkf+dmov/nZqL/5GOff+mo5b/oZ6Q/6GekP+Wk4P/ko9+/6ekl/+bmIn/oZ6Q/zZS + YP8ONVD/EDhT/xM8V/8WQ13/HUtk/yNTbf8rXXb/MmZ+/zZshP85b4f/PHOL/z12jv9AeZH/QXuT/2CT + qP+Tucn/NGyJ/x9Vdf8fVXX/GEJblQAAADEAAAApAAAAIQAAAB0AAAAXAAAAEwAAAA8AAAANAAAACwAA + AAkAAAAHAAAABQAAAAUAAAAFAAAAAwAAAAMAAAAD////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wHIxLnBzMiu/7uxg/+jllL/j38v/4p5J/+ZiDn/pZVF/7Kh + Uv+6qVf/uqhX/7imU/+3pE//uqlZ/8Gxav/Ku33/z8KE/9LDhv/XyYv/3tKT/+PYoP/g05P/28yE/9bD + df/RvWf/0Ltj/9C6Yv/PumL/z7li/864Yf/NuGD/zbhh/823YP/Mt1//y7Ve/8m0W//Islj/x7FX/8ex + WP/Islr/yLVd/8izXP/Is1z/x7Jb/8eyW//Eslv/w7Jb/8OxWv/CsVn/wrBZ/8KwWf/BsFn/wa9Y/8Gv + WP/Arlf/v61W/7+tVv+/rVb/vqxW/72rVf+9q1X/vatV/7yrVf+8qlT/u6lT/7upU/+5plD/uaVO/7ij + S/+2okj/tqJJ/7aiS/+2pE3/t6ZQ/7ilUP+3pVD/tqRP/7ajT/+2o0//taNO/7WiTv+1ok7/taJO/7Sh + Tf+0oUz/tKBM/7ShTP+9rmT/y7uA/7inWv+vmz//k4Ad/5SDMP/c18T/3NfE/9zXxP/c18T/3NfE/9zX + xP/c18T/3NfE/9LKr//Pw6f/zMCi/9DHqv/TzLL/19G5/9vXw//c2MT/3NjE/9zXxP/c18T/3NfE/9zX + xP/c18T/3NfE/9zXxP/c18T/29fD/9vXw//b18P/29fC/9vVwf/b1cD/2tW//9rUvv/a1L3/2tS8/9nU + vP/a1L//2tXD/9zXyv/c2c7/3NrS/93b1f/Y1cr/1NC//9DKtv/Nw63/z8iz/87EsP+trZ7/mJWF/6Kf + kf+XlIT/n5yO/6Kfkf+in5H/n5yO/5mWh/+TkH//pqOW/52ai/+hnpD/l5SE/5KPfv+qp5v/mZaH/6Ge + kP9JX2n/DjVQ/xA4Uv8TO1b/FkJc/xxJY/8iUmv/Klt0/zFlfv82bIX/OG6H/zpxi/87dY7/PneP/0J6 + k/9ik6j/irLC/zdxjP8fVXX/H1V1/xdBWYUAAAApAAAAIQAAAB0AAAAXAAAAEwAAAA8AAAALAAAACQAA + AAcAAAAHAAAABQAAAAUAAAADAAAAAwAAAAP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BopJFOZyMPo2UgzPRjX0r+Y19K/+biz3/qplN/7enWv+9rF3/u6pa/7mm + VP+3pVD/u6pb/8Kzbv/LvIH/0MCF/9PEhv/ZzI3/4NOW/+TZof/f0pL/2suD/9bCdf/SvWX/0Ltj/9C6 + Yv/PumL/z7pi/8+5Yf/OuWH/zbhh/8y4YP/Mt2D/y7Ve/8m0XP/IsVn/x7FX/8eyWf/Islr/ybVd/8mz + XP/Js1z/yLNc/8ezXP/Hslz/xLJb/8OxW//DsVr/w7Ba/8KwWv/Cr1n/wq9Z/8CuV//Arlj/v65X/8Ct + V/++rFb/vqxW/76sVv+9rFX/vatV/72qVP+8q1X/vKpT/7upU/+6p1D/uKVO/7ejS/+2oUj/t6NK/7ej + TP+4plH/uKdQ/7imUP+3pVD/tqVQ/7alT/+2pE//tqRP/7WkTv+1pE//taJO/7ShTf+0oU3/tKFN/7Sh + Tf+0oE3/s6BN/7OgTf+zoEz/sqBM/8/Biv+8rWb/tKFJ/6mWPP+BbhP/zcSk/9zYxP/c2MT/1c60/9LK + rf/Ow6X/zsKl/9LJrf/VzrX/2dO8/9zYxP/c2MT/3NjE/9zYxP/c2MT/3NjE/9zYxP/c2MT/3NjE/9zX + xP/c18T/3NfE/9zXxP/c18T/3NfE/9zXxP/c18T/29fD/9vXwv/b18H/29bB/9rVv//a1L7/2tS9/9nU + vP/Z1Lz/2tS//9rVwv/Wz7n/0sq0/8/Erf/Nwqv/0sq2/9bRwf/Z1s//3d3a/93d2v/d3dr/vcG7/5iV + hf+in5H/mJWF/5mWh/+mo5b/npuM/6Kfkf+YlYX/lJGB/6Ogk/+fnI7/oZ6Q/5iVhf+TkH//qKWY/5mW + h/+in5H/ZHN3/w41UP8PN1L/EztW/xVBW/8bSWP/IFBr/ydZc/8vY3z/NGqD/zZshf85cIj/O3OL/zx1 + jv8/eZL/a5ms/36qu/8uaIf/H1V1/x9Vdf8XQFl3AAAAIwAAAB0AAAAXAAAAEwAAAA8AAAALAAAACQAA + AAcAAAAFAAAABQAAAAUAAAADAAAAAwAAAAP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BopNJQZyNQJuVhTbXjHwr+Y5+LfucjD71rp5T+busYv2/r2P/vKtd/7mmVP+4pVH/vKte/8O1 + cf/Nv4X/0MGF/9THhv/azYz/4dSX/+TXn//f0ZH/28qC/9bBc//Ru2X/0bpj/8+6Yv/PumL/z7pi/8+5 + Yv/OuWH/zrhh/824Yf/MuGD/y7Ze/8m0W//Isln/yLFY/8iyWf/Islr/yrVe/8mzXf/ItF3/yLNc/8ez + XP/Hs1z/x7Jc/8SxW//EsVv/w7Ba/8OwWv/Dr1r/wq9a/8KuWf/Brln/wK5Y/8CtWP/ArVj/wKxX/7+s + Vv+/rFb/vqtV/76rVf+9qlT/vapU/7yqVf+6p1H/uaVO/7ekSv+2okj/t6RK/7elTf+4p1H/uKZR/7im + UP+3plD/t6VQ/7elT/+3pVD/tqRP/7WkT/+1pE//taRO/7WjTv+1o07/tKJN/7SiTf+0ok3/s6JN/7Oh + Tf+zoU3/sqBM/7OhTf+zoUz/sqBM/7KgTP++r2f/yLp9/7alV/+tmTz/kHwZ/5WFM//NwqP/z8eo/9PM + sP/X0bj/2tW//9zYxP/c2MT/3NjE/9zYxP/c2MT/3NjE/9zYxP/c2MT/3NjE/9zYxP/c2MT/3NjE/9zY + xP/c2MT/3NjE/9zXxP/c18T/3NfE/9zXxP/c18T/3NfE/9zXxP/c18P/29fC/9vWwf/a1r//2tW//9rV + vf/Sy67/z8Om/8zAof/NwaT/0Mmt/9XPuf/c2dD/3tvV/97b1v/e3dn/3t3b/97d2//e3dv/3d3a/9HS + zv+Zlob/op+R/5iVhf+YlYX/qaaa/5yZiv+joJL/mZaG/5iVhf+gnY//o6CS/6Ogkv+bmIn/lJGB/6aj + lv+dmov/op+R/4OKhv8ONVD/DzdS/xI7Vf8UQFv/GUdh/x5Oaf8lV3H/LWB5/zRqg/83b4f/N3CK/zly + jP87dY7/PHeQ/3Kfsv94prj/J2CB/x9Vdf8fVXX/Fz9XZQAAAB0AAAAXAAAAEQAAAA0AAAALAAAACQAA + AAcAAAAFAAAABQAAAAMAAAADAAAAA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BpJVMR52P + RKGWhznZjHwr+5CAMfmikkf1s6Rc+8Gya/3BsWf7vKtb97mmU/24plL9u6pc88Gzc//OwIb/0cGD/9XH + hP/cz43/4taZ/+TYn//f0ZH/2sqB/9XCcf/Ru2T/0Lpj/9C7Y//PumL/z7pi/8+5Yv/OuWH/zbhh/824 + YP/NuGH/y7Ze/8q0W//Isln/x7FY/8iyWv/Is1v/ybVe/8mzXf/Is13/yLNd/8izXf/Hslz/x7Jc/8Sx + W//EsVv/xLBb/8OwW//Dr1r/w69a/8KvWf/Brln/wa5Z/8CtWP/ArVj/wKxX/7+sV/+/rFf/vqtW/76r + Vv+9qlb/vapV/7yqVP+6p1H/uKVN/7ejS/+3o0r/t6RM/7ilTf+5p1L/uadR/7inUf+3plD/t6ZQ/7el + UP+2pU//tqRP/7akT/+1pE//taRP/7WjTv+1o07/tKNO/7SiTf+zok3/s6JN/7OhTf+zok3/s6JN/7Oh + TP+yoUz/sqFM/7KhTf+yoEz/saBM/7KgTP+yoEz/r5xF/8y9hf+2plz/tKFK/6eUOP+AbhP/0cus/9zZ + x//c2cf/3NnH/9zZx//c2Mf/3NjH/9zYx//c2Mf/3NjH/9zYx//c2Mf/3NjH/9zYx//c2MT/3NjE/9zY + xP/c2MT/3NjE/9zYxP/c2MT/3NjE/9zXxP/c18T/3NfE/9zXxP/c18T/3NfE/9fQuP/Ty7D/zsSn/8u/ + n//Ow6X/0sqs/9TOsv/a1b3/2tbA/9rYxP/c2cv/3NrP/9zc1P/e3Nb/3t7Z/97e2v/e3tv/3t7b/97e + 2//e3tv/nJmK/52ai/+Zlof/mJWF/62qnv+Zlof/o6CS/5iVhf+Zlof/nZqL/6Ogkv+joJL/nZqL/5WS + gv+koZT/nZqL/6Kfkf+lo5n/DzZQ/w82Uf8ROlX/Ez9a/xhGYP8eTWf/JVZv/yxfef8yaIL/Nm6H/zdw + iv85coz/OnSN/zl1jv95o7f/dqW3/yJbfv8fVXX/H1V1/xY9VFMAAAAXAAAAEQAAAA0AAAAJAAAABwAA + AAUAAAAFAAAAAwAAAAMAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BpZZPWZ6QRqmWhzvdjHwt+5KC + Nfmllk3zt6hk+8e3c/3DtGv7vaxe97mmU/25p1T7vKta48CvYbnDsV2ZyrVYm9O/b7nZzIr/49ab/+PX + nv/e0Y//2cqA/9TBcP/Ru2T/0Ltk/9C7Y//PumP/z7pi/8+6Yv/OuWL/zblh/824Yf/NuGH/y7Ze/8q0 + W//Jsln/yLFY/8iyWv/Js1v/ybRe/8m0Xv/ItF7/yLNd/8izXf/Hsl3/x7Nd/8SyXP/EsVz/xLFb/8Ox + W//DsFv/wq9a/8KuWv/Brln/wa5Z/8CtWf/ArVj/wK1Y/7+sV/+/rFf/vqtW/76rV/+9qlb/vapW/72q + Vf+6p1D/uaVO/7ejS/+3o0v/uKRN/7ilT/+6p1P/uqdS/7mmUf+5plL/uKVR/7ilUf+4pVH/uKVQ/7ek + Uf+2pFD/taNP/7akUP+1o0//tKNO/7SjTv+0ok7/tKJO/7OiTf+zok3/s6JN/7OhTf+yoU3/sqFN/7Kh + Tf+yoU3/sqFN/7KgTP+yoU3/r5tE/62ZQv+tmEL/rplE/6+cSP+9rmn/x7d8/7WkVP+smDn/jnoX/52O + Q//d2cf/3dnH/9zZx//c2cf/3NnH/9zZx//c2Mf/3NjH/9zYx//c2Mf/3NjH/9zYx//c2Mf/3NjH/9zY + x//c2MT/3NjE/9zYxP/c2MT/3NjE/9zYxP/c2MT/2dS+/9XOtf/Sya7/z8Km/87BpP/RyKv/1c6y/9fS + uf/b1sD/29a+/9vVvP/a1bv/29a9/9vWv//b18T/3djK/93azv/d29P/39zW/9/d2P/f3tr/397b/9/e + 2//f3tv/397b/6Ogk/+Zlof/nZqL/5iVhf+opZj/m5iJ/6Ogkv+Zlof/m5iJ/5mWh/+koZT/o6CS/6Ge + kP+UkYH/op+R/6Cdj/+joJL/qKWY/xA3Uf8ONlH/ETlU/xM+Wf8XRV//HExm/yNUbv8rXnj/MGWA/zVs + hf83b4j/OHKK/zdxi/81cIr/gqq6/3upuf8eV3v/H1V1/x9Vdf8WPFM/AAAAEQAAAA0AAAAJAAAABwAA + AAUAAAAFAAAAAwAAAAMAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wGvol8FpphSZZ+QSK+WhzzhjHwt/ZaHO/epmlT1u61s/cq7 + ef3Htm/5vq1g97mmU/+6qFb7vq1f3cGxZbXDslyXzLZbodbCcL/g0IfX5NaX2+TWltvezoTX1sN489K9 + bP/Ru2T/0Ltk/9C7ZP/PumP/z7pj/865Yv/OuWL/zbli/825Yf/MuGH/y7Ze/8q0W//Isln/yLJa/8iz + Wv/ItFz/yrVf/8m0Xv/JtF7/ybNd/8izXf/Hs13/x7Jc/8eyXP/Eslz/xLFc/8SxXP/DsFv/w7Ba/8Kw + Wv/Br1n/wa9a/8CuWf/ArVn/v61Y/7+tWP+/rFj/v6xX/76rVv+9qlb/vatW/72qVv+7p1D/uaVO/7ei + S/+4o0z/uaVO/7mmUP+6p1P/uqdT/7mnU/+5plL/uaZT/7imUv+4pVH/uKVR/7ekUP+3pFD/t6RQ/7aj + UP+3o1D/tqNP/7WjT/+1o0//tKJO/7SiTv+0ok7/s6JO/7OiTf+zoU7/s6FO/7KhTf+yoU3/sqFN/7Kh + Tf+vnUf/rptE/66aQf+umkP/rpxG/7CeSP+xoEz/saBN/7GgTf+xoE3/sqFQ/9DCkP+8rWj/taJL/6mW + PP+AbRP/1tG2/93Zx//d2cf/3dnH/9zZx//c2cf/3NnH/9zZx//c2Mf/3NjH/9zYx//c2Mf/3NjH/9zY + x//c2Mf/3NjH/9zYx//c2MT/2NK7/9TNs//RyKv/zcGj/8/Ep//Ty6//3NjE/9zYxP/c2MT/3NjD/9zY + wv/b18L/2ta//9vWv//b1b7/2ta9/9rVvf/b1sD/29fD/9zZyf/d2s//3dvT/97c1v/f3dn/397a/9/e + 3P/f3tz/397c/9/e3P+wr6T/mJWF/6GekP+XlIT/pKGU/5+cjv+joJL/nJmK/5mWh/+Wk4P/pqOW/6Cd + j/+joJL/lZKC/5+cjv+in5H/oZ6Q/6ShlP8TO1P/DjZR/xA5VP8TPVj/FkNe/xtKZf8iUmz/KFt1/y1k + fv8zaoT/NW2F/zdviP82cYn/NXGL/36nuf+Bsb//H1Z4/x9Vdf8fVXX/FTlPLQAAAAsAAAAJAAAABQAA + AAUAAAADAAAAAwAAAAP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wGrnloRpZdRbZ6QSLWWhzzlinor/5qLQfWsnlr1v7J0/c29fv3It3H3v65h97mm + U/+7qVj5v69i2cOzZ7XHtFuZz7pgq9nJdsfh0YnX5NaX2+PWldvezoLV18Jrz9G6VsnNtErFzLRJxcu0 + UdXKtV//z7pj/865Yv/OuWL/zblh/825Yv/NuGH/zLZe/8q0W//Islr/yLJZ/8iyW//Js1z/yrVf/8m1 + X//JtV7/ybRe/8i0Xv/Is13/x7Jd/8eyXf/Eslz/x7Fc/8SxW//EsFv/w7Bb/8OwWv/Cr1r/wa9a/8Ku + Wf/Brln/wK1Y/7+tWP+/rVj/v6xX/76sV/++q1f/vatW/7ypVP+6p1H/uaVN/7ijS/+4pE3/uaVP/7qn + Uf+7qFT/uqdT/7qnVP+5p1P/uaZT/7imUv+4pVL/uKVR/7ilUf+3pFH/t6RR/7ejUf+2o1D/tqRR/7aj + UP+1o1D/taJP/7WiT/+1ok//taJP/7WiT/+0oU//tKFP/7ShT/+zoU//tKFP/7KfSv+vnEb/rppD/66Z + Qf+vm0T/r51I/7GeSv+yoE3/sqBN/7KgTf+yoU3/sqFN/7KhTf+yoU7/sqFO/7KhTv/Bs3H/xLd6/7Sj + Uv+rljb/jXkW/6KTS//d2cj/3dnH/93Zx//d2cf/3dnH/9zZx//c2cf/3NnH/9zZx//c2cf/3NjH/9zY + x//c2Mf/19C5/9PMsf/QxKn/zcGk/9HIrP/UzbP/3NjE/9zYxP/c2MT/3NjE/9zYxP/c2MT/3NjE/9zY + w//c18L/3NfC/9vXwP/b1r//29W+/9rWvf/a1b3/2ta//9vXw//b2cn/3drO/93c0v/e3Nb/39zY/9/e + 2v/f3tz/397c/9/e3P/f3tz/t7my/5mWhv+joJL/mJWF/5+cjv+in5H/o6CS/5+cjv+al4j/lJGB/6il + mP+gnY//o6CS/5mWhv+bmIn/paKV/56bjP+joJL/GUBW/w42Uf8QOFP/Ez1X/xVCXf8aSWP/H1Bq/yZY + c/8sYXv/MmmC/zRthf82b4j/N3KL/z14kv91pbf/f7DB/yFYeP8fVXX/H1V1/xMyRRkAAAAHAAAABQAA + AAUAAAADAAAAA////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wGqnFgXpJZQdZ6PR7uVhjrpinss/ZuMQ/WuoV31wrZ5/8/Agf/JuHL3v65h+bimUv+8q1v1wbFl18S0 + abPItFud0LthsdvKec3g0YnX5NeZ3eLVk9vczH/T1sFpz9C4VMnNtErFzLNJxcuzSMXLskjFy7JHxcqx + RsXJsEXDx7Nb+cy4Yf/NuWL/y7Ze/8q0W//Js1r/yLJa/8izW//Js1z/yrVf/8q1Xv/JtF7/ybRe/8i0 + Xv/Is13/x7Nd/8eyXf/Hslz/x7Fc/8SxXP/EsFv/w7Bb/8OwW//Cr1r/wq9a/8KvWv/Brln/wa5Z/8Ct + WP/ArVj/v6xY/7+sWP++rFf/vqtX/7ypU/+7p1D/uaVO/7ikTf+4pU3/uqVQ/7qnUv+6qFT/uqdU/7qn + U/+6p1P/uaZT/7mmUv+4plL/uKZS/7ilUv+3pFH/t6RR/7ekUf+2pFH/tqRQ/7ajUP+1o1D/taNQ/7Wi + UP+1olD/taJQ/7SiT/+0ok//tKFP/7SiT/+0oU//tKFP/7GeSf+wnEf/rplD/66aRP+vm0f/sZ5K/7Kf + Tf+zoU//sqFP/7KhT/+yoU//sqFP/7KhT/+zoU7/s6FO/7OhTv+zoU//sqFP/7KhT/+yoU//tKNT/9HH + k/+8rmn/tqJM/6eUPP+BbxT/2NO7/93ZyP/d2cj/3dnH/93Zx//d2cf/3dnH/93Zx//Y1L3/1c+1/9LK + rf/Ow6b/z8Sm/9LLrv/Vz7b/2dW//9zZx//c2cf/3NnH/9zZx//c2cT/3NnE/9zZxP/c2cT/3NnE/9zZ + xP/c2cP/3NnD/9zYwv/b18D/3NbA/9zVvv/c1r3/29W9/9vWv//c18L/3NjH/93azf/d29H/3t3W/9/d + 1//f3tr/397c/9/e3P/f3tz/397c/87Pyv+Zlof/o6CT/5iVhf+bmIn/paKV/5+cjv+joJL/mZaH/5KP + fv+pppr/nZqL/6Ogkv+YlYX/mZaG/6ekl/+bmIn/o6CS/yFHWf8ONVD/DzhS/xI8V/8UQVv/GUdh/x5P + af8kVnD/LF95/zJpgf80bYb/NXCJ/zdyjP9BepL/dKO2/3Wluf8gV3f/H1V1/x9Vdf8AAAAHAAAABQAA + AAMAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wGqnVgfpJZQeZ2P + Rr2UhTnti3wt/Z2ORvWwo2D3xLd6/dDAgv/It3D3vq1g+bilUf+9rF3zwrJo08i1arHKtVif1L5nud7N + fdHh0ovX5dia3eLUkdncy33T1sFoz9C3UcfNtErFzbNIxcyySMXLskjFy7FGxcqwRcPKsEXDya9Ew8iu + Q8PIrkPDx61BwcewU+PEsFn/yLJa/8mzW//JtF3/yrVf/8q1X//KtF//ybRe/8m1Xv/ItF3/yLNd/8ey + Xf/Hsl3/xLFc/8SxXP/EsVv/w7Bb/8OwW//Cr1v/wq9a/8GvWf/Brlr/wa5Z/8CuWf/ArVj/v61Y/7+s + WP+/q1f/v6tX/7ypU/+7plD/uaVO/7mlTf+5pU//uqZR/7ypVf+7qVX/uqhU/7qoVP+6qFT/uadU/7mn + U/+4plP/uKZS/7imUv+4pVL/t6VS/7elUv+3pVH/t6VR/7akUf+2pFH/taRQ/7WjUP+1o1D/taNQ/7Wi + UP+1olD/tKJQ/7SiUP+0oU//tKFQ/7GeSf+wnEb/rppD/6+bRf+wnEj/sp9L/7OgTv+zoU//s6FP/7Oh + UP+zoVD/tKFQ/7ShUP+0oVD/tKFQ/7OhT/+zoU//s6JQ/7OiUP+zok//s6JP/7OiT/+zok//s6JP/7Oi + T//DtXX/xLh6/7SiUP+qljb/jHkY/6iaV//d2cj/3dnI/93ZyP/Y07v/1c6z/9HJq//OwqT/0cmr/9TO + sv/Y07r/3drH/93ax//d2sf/3dnH/93Zx//d2cf/3dnH/93Zx//d2cf/3dnH/93Zx//c2cf/3NnH/9zZ + x//c2cf/3NnH/9zZxP/c2MP/3NjC/9zXwf/c1r//29a+/9vVvv/b1r//3NfB/9zYyP/d2cz/3tvR/93d + 1f/f3df/39/a/9XRwP/Ry7b/zsOt/9HKtv/QyLP/m5iJ/6Cdj/+Zlof/mZaH/6mmmv+dmov/o6CS/5iV + hf+UkYH/qKWY/56bjP+joJL/mZaH/5iVhf+qp5v/mZaH/6Ogkv8xU2H/DTVQ/w83Uv8RO1X/E0Ba/xhG + Yf8dTWj/I1Zw/ypeeP8wZ4D/NGyG/zRviP80cIr/QHmR/3Wjtv9nmrH/H1Z2/x9Vdf8fVXXxAAAABQAA + AAMAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wGpm1cppJZPgZ2ORcOSgzbzjX0v/Z6P + R/WxpGL3x7l8/c+/gP3Htm/3vqxe+bilUf++rV7vw7Noz8m2abHMtlql18Nswd7NftPh043X5dib3eHT + jtnby3vT1cBmzc+4UMfNtErFzbRJxcyzSMXLskfFy7FHw8qxRsPJsEXDybBFw8ivRMPHrkLBx61CwcSt + QcHErEDBw6s/wcKrPr/Cq0DDwa5Z/8q1X//KtV//ybRf/8m0X//ItF7/yLNe/8izXf/Is13/x7Jd/8ey + Xf/DsVz/w7Fc/8KwW//CsFv/wq9a/8KvWv/Cr1r/wa5Z/8CuWf/ArVj/wK1Y/7+tWP+/rFj/vqxX/7yp + U/+7plD/uaVO/7mlTv+5plD/u6hS/7ypVf+7qVX/u6hU/7uoVP+6qFT/uqdU/7qnU/+6p1T/uaZT/7mm + U/+5plP/uKVS/7ilUv+4pVL/uKVS/7elUf+3pFH/tqRR/7akUf+2o1D/tqNQ/7ajUf+1o1D/taNQ/7Si + UP+0olD/s59M/7GdSP+wm0b/r5pF/7CcR/+xnUn/sqBM/7OhUP+0oVD/tKFQ/7ShUP+0oVD/tKFQ/7Si + Uf+0olH/tKJR/7SiUf+0olH/tKJR/7SiUf+0olH/tKJR/7SiUf+0olH/tKJR/7SiUf+0olD/tKNR/7Sj + Uf+0o1H/tqdY/9HHkv+9rmr/taFL/6aTOv+DcRb/0cqt/9DHqP/Pw6b/0squ/9XPtf/d2sj/3drI/97a + yP/e2sj/3trI/97ayP/d2sj/3drI/93ayP/d2sj/3dnI/93ZyP/d2cj/3dnI/93ZyP/d2cj/3dnI/93Z + yP/d2cj/3NnH/9zZx//c2cT/3NjD/9vYwv/c18H/3Ne//9zWv//b1b3/29a//9zWwf/c2Mf/1c+4/9LL + s//Px63/0Mev/9PNuf/X08T/29nR/9/f3P/f39z/397c/6Kfkf+cmYr/nJmK/5aTg/+sqZ3/mZaH/6Sh + lP+Zlob/mJWF/6ajlv+fnI7/o6CT/5uYif+Wk4P/qqeb/5iVhf+joJP/RWJq/w01UP8PN1L/ETpV/xM/ + Wf8XRWD/HExn/yJVb/8oXXf/LmV//zJrhv80bYf/M2+J/0F5kv9/qrz/XZWt/x9Vdf8fVXX/H1V14QAA + AAMAAAAD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wGom1Uzo5VOiZuMQ82RgTX1jn8x+6CRSfWzpmT5yrt//c6/ + f/3HtW73vaxd+7imUv++rWDtw7Npzcm2Z6/PuVut2cdvyd/OgdPh047X5dme3eDSi9faynnR1b9kzc63 + TsfNtEnFzbNJxcyzSMXMskjDy7FGw8qxRsPJsEXDybBFw8ivQ8HIrkLBx65CwcStQcHDrEDBw6tAv8Kr + P7/Cqz6/wak9v8CoPL3AqDu9v6c6vcCtU+/EsFz/yLNe/8izXv/Is13/x7Jd/8eyXf/Esl3/xLFc/8Ow + XP/DsFz/wrBb/8KwW//Br1r/wa9a/8GuWf/ArVn/wK1Z/7+tWP+/rFj/vqxX/76sV/+7qFH/uaVN/7mm + Tv+6p1D/u6hT/7ypVf+8qVX/vKlV/7uoVP+7qFT/uqhU/7qnVP+5p1T/uadU/7mmU/+5plP/uKZT/7il + Uv+4pVL/uKVS/7elUv+3pFH/t6RR/7akUf+2pFH/tqRR/7ajUf+1o1D/taNQ/7WjUP+1o1D/sp9L/7Gd + SP+vm0X/sJxG/7CdSP+xn0v/s6FP/7ShUP+0olH/tKJR/7SiUf+0olH/tKJR/7SiUf+0olH/tKJR/7Si + Uf+0olH/tKJR/7WiUv+1olL/taJS/7WjUv+1o1L/taNS/7WjUv+1o1L/taNT/7WjU/+0o1L/taNS/7Wj + Uv+1o1L/taNS/7OhT//Etnb/wbNy/7KfSv+plTX/i3gZ/6qcW//e2sj/3trI/97ayP/e2sj/3trI/97a + yP/e2sj/3trI/97ayP/e2sj/3trI/97ayP/d2sj/3drI/93ayP/d2sj/3dnI/93ZyP/d2cj/3dnI/93Z + yP/d2cj/3dnI/93ZyP/d2cj/3NnE/9zYw//c2MP/29fB/9zXwP/b1r//08qr/8/Dpf/Nv6D/0MSp/9XM + tP/Y08H/3tzU/9/d1//g3tr/4N/b/+Df3f/f39z/39/c/9/f3P+tq5//mZaG/5+cjv+XlIT/qaaa/5yZ + iv+koZT/mpeI/5mWh/+koZT/oJ2P/6Ogk/+fnI7/lJGB/6qnm/+al4j/o6CT/110d/8NNVD/DjZR/xE6 + Vf8TPln/FkNe/xtLZf8hU23/Jlx3/yxkf/8ya4b/NG6J/zNwi/89eJL/jbTE/1WPp/8fVXX/H1V1/x9V + ddX///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wGomlU9opRMk5qLQdWPgDP3kIE0+6KTTPW3qmr5y7yB/c6+fv3EtGz3vKpa/bmn + VP+/rmDrxLNpy8q3Zq/Ru16z3Mlzz9/PgdPi1JDX5dic3eDRidfayXbR1L5iy862TMXNtEnFzLNIw8uz + SMPMs0jDy7JHw8qxRsPKsEbDya9EwcmvRMHIrkLBx65BwcetQcHErEG/xKtAv8KrPr/Cqj2/wak8vcGo + O73AqDu9v6c6vb+nObu+pji7vaU4u7ykNru+qEbTv61Y/8eyXP/Hsl3/xLFd/8OxXf/DsFz/w7Bb/8Ow + W//Cr1v/wq9a/8GvW//Brlr/wK5Z/8CtWv+/rVn/v61Z/76sV/+8qFL/uqVP/7qmT/+7p1H/u6lT/7yq + Vf+8qlb/vKlV/7upVf+7qVX/u6lV/7qoVP+6p1X/uqdV/7mnVf+5plT/uKZT/7imU/+4plL/t6VS/7el + Uv+3pVL/t6RR/7akUv+2pFH/tqRR/7akUf+2o1H/taNR/7ajUf+1o1H/sp5K/7GdR/+vmkX/sJxH/7Ge + Sv+yn03/taNR/7WjUf+1o1H/taNR/7SjUf+0o1H/tKNR/7SjUf+1olL/taJS/7WiUv+1o1L/taNS/7Wj + Uv+1o1L/taNS/7WjUv+1pFP/taRT/7WkU/+1pFP/taRT/7WkU/+1pFP/taNT/7akVP+2pFT/tqRU/7Si + T/+zn0z/sZ5I/7CcRv+xnkn/tqRV/9LHkv+9rmv/tKFK/6OQNv+GdBr/3NjE/97ayf/e2sn/3trJ/97a + yf/e2sn/3trJ/97ayf/e2sn/3trJ/97ayP/e2sj/3trI/97ayP/d2sj/3drI/93ayP/d2sj/3dnI/93Z + yP/d2cj/3dnI/93ZyP/d2cj/3dnI/9nUvf/VzrP/0sms/83Co//OwqP/0siq/9TOsP/Y0bf/3NfB/9zY + xP/c2sr/3tzP/97d1P/f3tf/4N7Z/+Dg2//g4N3/4ODd/+Dg3f/g4Nz/ubuy/5uYif+koZT/lpOD/6Sh + lP+hnpD/o6CT/5uYif+al4j/oZ6Q/6Ogkv+koZT/oZ6Q/5OQf/+opZj/mpeI/6Ogk/9zg4D/DjVQ/w42 + Uf8QOVT/Ez1Y/xRCXP8ZSWP/HlFs/yVbdv8rZH//MmuG/zRuif8ybor/OneQ/5W6yv9OiqL/H1V1/x9V + df8fVXXH////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wGomlU9oZNLm5iKP9mOfzH5koM2+aSWUPW6rm77zL6B/c29fPvCsmn3u6lY/bqnVf2/rmHpxLRpycy5 + ZLHVv2G73Ml0z9/Og9Pj1ZHZ5dmc29/RiNXayHTR1b1gy861SsXNtUnFzLNJw8uzSMPLs0fDy7JHw8qx + RsPKsUXBya9EwciuQ8HHrkLBx65BwcetQb/ErEC/w6s/v8KrP7/Bqj69wao9vcGpPL3BqTy9v6c6u7+n + Oru+pjm7vqU3u72kNru8pDW5u6Q1ubqiNLm6ojO5uaI0ubypVP3CsFz/w7Bc/8KwW//Cr1v/wq9b/8Kv + W//Brlr/wa5a/8CuWv/ArVn/wK1Z/72pVP+6p1D/uqZP/7unUP+7qFP/vKpV/72qV/+9qlf/vKpX/7yp + Vv+8qlb/vKlV/7uoVf+7qFX/uqhV/7qoVf+5p1X/uKdU/7inVP+4plT/uKVT/7ilU/+3pVP/t6VS/7ek + Uv+2pFL/tqRS/7akUv+2o1L/tqNR/7WjUf+zoE3/sp5J/7CcR/+wm0f/sZ1I/7KfS/+zoE7/taNR/7Wj + Uf+1o1H/taNR/7WjUv+1o1L/taNS/7ajUv+2o1L/tqNS/7WjUv+1o1L/taRT/7WkU/+1pFP/taRT/7Wk + U/+1pFP/taRT/7WkU/+2pFT/tqRU/7akVP+2pVT/t6VU/7elVP+2pVT/taJS/7ShT/+yn0z/sZ1J/7Gd + Sf+yn0v/tKFP/7elVf+3pVX/tqVU/7alVP/Lu3//yLh7/7ShTP+rljj/i3ga/7Oob//e2sn/3trJ/97a + yf/e2sn/3trJ/97ayf/e2sn/3trJ/97ayf/e2sn/3trJ/97ayP/e2sj/3trI/97ayP/d2sj/3drI/93a + yP/d2sj/3drI/9fSuf/UzbH/0Mep/87CpP/Ryav/1M6z/9jSuf/c2ML/3NjB/93Xv//c173/3Ne+/9zY + wP/d2cP/3drI/9/czv/f3NL/4N7X/+He2P/h4Nv/4eDc/+Hg3f/h4N3/4eDd/8zOyP+Zlof/pKGU/5iV + hf+hnpD/oZ6Q/6ShlP+fnI7/mpeI/52ai/+joJP/o6CS/6ShlP+UkYH/pqOW/52ai/+koZT/kpeN/w41 + Uf8ONlD/EDhT/xI7Vv8UQVv/GEdi/x1Pav8jWHP/KmF8/zBphP8ybIb/MGyH/zx2kP+Rtsf/UY2m/x9V + df8fVXX/H1V1t////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AaWX + UWmWhzzrkoM2+aaZU/W8sHH7zr+D/cy8efnBsWb3uqhX/bqoVv3Ar2Llx7Vqxc25Y7PXwWXD3Mp2z+DP + hNPk1ZTZ5Nib29/Qh9Xax3TP071fyc60S8PNtErDzbNJw8yzSMPLskfDy7JHw8qxRsHKsETByq9Ewcmv + Q8HIrkPBx65Cv8StQb/ErUG/w6w/v8OrP73Cqj69wak9vcGpPL3AqDu7wKc6u7+mObu+pjm7vaY4u72l + N7m8pDa5u6M1ubuiNLm6oTO3uaEyt7mgMre4oDG1t58wtbeeL7W6p03pvqxY/8GvW//Br1r/wa5a/8Cu + Wv/ArVn/vqtW/72oUv+7p1D/uqZQ/7unUv+8qVT/vapW/72qV/+9qlf/vapX/7yqVv+8qVb/u6lW/7up + Vv+7qFb/u6hV/7uoVf+6p1X/uqdV/7qoVf+5p1T/uadU/7inVP+4plT/uKZU/7elU/+3pVP/t6RT/7ak + U/+2o1L/tqRS/7ajUv+zn0v/sp5J/7CcR/+xnEj/sZ5K/7OgTf+1o1L/taNS/7WjUv+2o1L/tqNS/7aj + Uv+2o1L/tqNS/7akU/+2pFP/tqRT/7akU/+2pFP/tqRT/7akU/+2pFP/tqRU/7akVP+2pFT/t6VU/7el + VP+3pVT/t6VU/7elVP+3pVT/t6VU/7elVP+3pVT/taNR/7ShTv+zn0v/sZ1J/7KeSv+zoU7/t6VV/7el + Vf+3plb/t6ZW/7elVv+3pVb/t6VW/7elVv+3pVb/u6tg/9LEkf+9rmz/s6BI/6GOM/+Jdh3/39rJ/97a + yf/e2sn/3trJ/97ayf/e2sn/3trJ/97ayf/e2sn/3trJ/97ayf/e2sn/3trJ/97ayP/e2sj/2tS9/9bP + tf/Tyq3/z8Ol/9DHqP/Ty6//1tC3/93ayP/d2sj/3trI/97ax//e2cT/3dnD/93Ywv/e17//3Ne+/9zX + vv/c2L//3dnD/93ayP/f283/393S/9/e1v/h39j/4eDb/+Hg3P/h4N3/4eDd/+Hg3f/b2tb/m5iJ/6Og + kv+Zlof/nZqL/6ShlP+joJP/o6CS/5mWh/+Zlof/qaaa/5+cjv+koZT/lJGB/6ShlP+fnI7/o6CS/6up + nf8PN1L/DTVQ/w83Uv8RO1b/E0Ba/xdGYP8cTWj/IlVw/yheef8uZ4H/MGyF/zFth/9DfJT/gq6+/06L + pP8fVXX/H1V1/x9Vdan///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Aaud + Wa2bjUP7wbR1/cu7ePvAsGT3uqhV/7upWPvAr2PhyLZpwc+7YrXZx2jJ3ct3z+DRh9Xk15bZ5NeY297P + htXZx3HP0rtayc61S8PNtErDzLNJw8yzSMPLskfDyrJGwcqxRsHKsEXByrBEwcivQ8HIrkO/x65Cv8St + Qb/ErUC/w6w/vcOrPr3Cqz69wak9vcGpPL3AqTy7wKg7u7+nObu+pjm7vqY4ub2lN7m8pDa5u6M0ubuj + NLe6ojO3uaEzt7mhMre4oDG1t58wtbefL7W2nS61tZ0utbWdLLO0myuztqA7ybmnU//ArVn/vqtW/72o + U/+7p1D/u6dQ/7yoUv+9qVX/vatY/76rWP+9q1f/vapX/72qV/+8qVf/vKlX/7upVv+7qVf/u6lX/7uo + Vv+6qFb/uqhW/7mnVf+6p1b/uadV/7mnVf+5plX/uKZU/7imVf+4plT/uKZU/7elVP+3pVT/tqRT/7ak + U/+zn0v/sZ5I/7CcR/+xnUn/s6BL/7ShTv+2o1L/tqNS/7akUv+2pFL/tqVT/7alU/+2pVP/tqVT/7al + U/+2pVP/tqVT/7akU/+2pFT/tqRU/7akVP+3pVT/t6VU/7elVP+3pVT/t6VU/7elVP+3pVT/t6VU/7el + Vf+3pVX/t6VV/7elVf+3pFT/taJR/7OgTf+ynkv/sZ5K/7OfTP+1ok//uKZW/7imVv+4plb/uKZW/7im + Vv+4plb/t6ZX/7emV/+4p1f/uKdX/7imV/+4plf/uKZX/7imV//Ov4b/yLh7/7OhS/+rlzn/iXYa/7qv + fP/f2sn/39rJ/97ayf/e2sn/3trJ/97ayf/e2sn/3trJ/97ayf/e2sn/2NK6/9TMsf/RyKr/z8Om/9LK + rf/Wz7T/2dS8/97ayP/e2sj/3trI/97ayP/e2sj/3trI/97ayP/e2sf/3tnE/93Zw//d2ML/3djA/93Y + v//d177/3NjA/93Ywv/d2cj/3tvN/9/d0f/f39f/4d/Z/+Hh3P/h4d3/4eDe/+Hg3v/h4N7/4eDe/6Kf + kf+hnpD/m5iJ/5uYif+qp5v/oJ2P/6ShlP+al4j/lpOD/6qnm/+dmov/pKGU/5eUhP+joJL/pKGU/5+c + jv+qp5v/EjlU/w01UP8PN1L/ETpV/xM+Wf8WRF//G0tm/yFUb/8mXHb/LWV//y9qhf8xbYj/S4GZ/3qo + uv9Be5f/H1V1/x9Vdf8fVXWZ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Aa6g + XbuqmlD7vq1f/bupWPvBsGTfybdpwdK8Y7vbx2rJ3cx5z+HRidXk15jZ5NeX2d7PhNPYxG/N0bpYx821 + SsPNtErDzLNIw8yzSMPLskfBy7FGwcuxRsHKsEXBya9EwcmvRMHIrkK/x61Cv8euQb/ErEC9w6s/vcKr + Pr3Cqj29wqo9u8GpPLvAqDu7wKg7u7+nObu/pjm5vqU4ub2lN7m8pDa5vKQ1ubuiNLe7ojS3uqEzt7mh + MrW4oDC1t58wtbefMLW2ni61tp0ts7WdLbO0myuzs5srsbObKrGymimxspkosbGYJ7G2o079u6dR/72p + VP+9q1b/vqxa/72rWf+9rFn/vatZ/72qWP+8qlj/vKpY/7ypV/+7qVf/u6lX/7uoV/+6qFb/uqhW/7qo + Vv+6p1b/uadW/7mnVf+5plX/uaZV/7imVf+4plX/uKZV/7imVf+3pVT/t6VU/7WiT/+zoEz/sZ1J/7Ge + SP+yn0v/s6FO/7WjUf+2pVT/tqVU/7alVf+2pVX/tqVV/7alU/+2pVP/tqVU/7alVP+2pVT/t6VV/7el + Vf+3pVX/t6VV/7elVf+3plX/t6ZV/7elVf+3pVb/t6VW/7elVv+3pVX/t6VV/7elVf+3pVX/t6VV/7im + Vv+2pFP/taJP/7OgTf+ynkr/sp9M/7SgTf+4plb/uKZW/7imV/+4plf/uKZX/7inV/+4p1f/uKdX/7in + V/+4p1f/uadX/7mnV/+5p1f/uKdY/7inWP+4p1j/uKdY/7inWP+4p1j/va5l/9LHkv+9r2z/s59H/56M + L/+NeyP/39vJ/9/byf/f28n/39vJ/9/byf/f28n/19C1/9PLrf/Pw6b/0cep/9XMsf/Y0bn/3NfC/9/a + yf/f2sn/39rJ/9/ayf/f2sj/39rI/9/ayP/f2sj/3trI/97ayP/e2sj/3trH/97axP/e2cT/3djC/93Y + wf/e17//3de+/93Xv//e2ML/3tnJ/97bzP/f3dH/397V/+Df2P/h4Nv/4eHc/+Hh3v/h4d7/4eDe/+Hg + 3v+pppr/m5iJ/52ai/+YlYX/rKmd/52ai/+lopX/mZaH/5eUhP+sqZ3/m5iJ/6ShlP+YlYX/n5yO/6aj + lv+fnI7/pqOW/xQ+Vv8NNVD/DjZR/xA5VP8TPVj/FUNd/xlKZP8fUmz/JVp1/ypjfv8saIT/LmuG/0+D + mv94prn/OHOS/x9Vdf8fVXX/H1V1i////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Acy+ + hXOdjDz/vq1f+826aL3ax2vJ3sx7z+LSi9Xl15nb49aV2d7OgNPXw2vL0rlVx861SsPNtUrDzLRJw8yz + SMHLs0fBy7JGwcqxRcHKsUW/ybBEv8mvQ7/Ir0K/x65Cv8etQb3ErEC9w6s/vcKrPr3Cqj69wqo9u8Gp + PLvAqDu7v6c6u7+nObm+pzi5vqY4ub2lN7m8pDa3vKQ1t7ujNbe6ojO3uaEytbmhMrW4oDC1uKAwtbif + L7O2ni+ztp4ts7WcLbO0nCuztJsrsbOaKrGymSmxspkosbKZJ6+wmCevsJcmr6+XJa2vliWttaFH47mo + Vf++rFr/vqtZ/72rWf+9q1n/vKpY/7yqWP+8qlj/u6lY/7upV/+7qFf/uqhX/7qoV/+6qFb/uqdW/7qo + Vv+5p1b/uadW/7mmVv+4plX/uKZV/7ilVf+4pVX/t6RT/7WiT/+yn0z/sZ5J/7GeSv+zoUz/taJQ/7ak + U/+3pVX/t6VV/7elVf+3pVX/t6VV/7elVv+3pVb/t6VW/7elVv+3pVb/t6VW/7imVv+4plb/uKZW/7im + Vv+4plb/uKZX/7imV/+4plb/t6ZW/7emVv+3plb/uKdW/7imVv+4plb/uKZX/7elVf+2pFL/taFP/7Og + TP+ynkr/s6BM/7WiT/+4p1f/uKdX/7inV/+4p1f/uKdX/7inV/+5p1f/uadX/7mnWP+5p1j/uadY/7mn + WP+5p1j/uadY/7mnWP+5p1j/uadY/7moWf+5qFn/uahZ/7moWf+5qFn/uahZ/7moWf/PwYr/yLh7/7Og + Sv+smD3/iXYa/8C2iP/a0rr/1s2x/9LIqf/QxKf/1Muu/9fQtv/a1b3/39vJ/9/byf/f2sn/39rJ/9/a + yf/f2sn/39rJ/9/ayf/f2sn/39rJ/9/ayf/f2sn/39rJ/9/ayf/f2sn/3trJ/97ayP/e2sf/3tnH/93Z + w//d2ML/3te//93Xv//d18D/3djC/97ZyP/e28z/4NzR/9/e1f/g39j/4d/a/+Df2f/c2tH/2NTH/9TO + u//Tzbj/trSq/5mWh/+hnpD/mJWF/6qnm/+em4z/paKV/5mWh/+Zlof/qqeb/52ai/+lopX/mpeI/5yZ + iv+qp5v/m5iJ/6ShlP8aRFj/DTRP/w42Uf8QOFP/Ez1X/xNBXP8YSGP/HU9q/yNYc/8pYXz/K2aB/y1p + hf9PhZz/fqu+/y9tjv8fVXX/H1V1/x9VdXv///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AdjN + lRO6q2T9rpxL89zLdMvi1JHX5NaW2d3Mf9HXwWnL0blUxc61SsPNtErDzLRJwcyzSMHLskfBy7JHwcqx + Rr/KsUa/ybBEv8mvQ7/IrkK/x61BvcetQb3ErUC9xKs/vcOrP73Dqj67wqo9u8GpPLvBqDu7wKc6ub+n + Orm/pji5vqY4ub6lN7e9pDa3vKQ1t7ujNbe7ozS1uqIztbmhMbW4oDG1uJ8ws7efL7O2ni6ztp4ts7Wc + LLO1nCuxtJsrsbSaKrGymSmxspkor7KZKa+xmCevsJcmr6+XJq2vliWtr5Ylra2UI6utlCKrrJMhq6+Z + Mb20o1H/vatZ/72qWf+9qln/vKpY/7ypWP+8qlj/u6lY/7qoV/+6qVj/uqlX/7qoV/+6p1b/uadW/7mn + Vv+5plb/uadW/7inVv+4plX/tqRS/7WjTv+zoEr/sp5J/7OgTP+0ok7/tqRS/7emVf+3pVX/t6VW/7el + Vv+3pVb/t6VW/7elVv+4plb/uKZW/7imVv+4plb/uKZW/7imVv+4plf/uKZX/7imV/+4plf/uKZX/7in + V/+4p1f/uKdX/7mnWP+5p1j/uadY/7mnWP+5p1f/uKdX/7emVf+2o1H/tKJP/7OfTf+zn0z/tKFO/7aj + Uv+4p1f/uadX/7mnV/+5p1f/uadY/7mnWP+5p1j/uadY/7mnWP+5p1j/uadY/7mnWP+5qFn/uahZ/7mo + Wf+6qFn/uqhZ/7qoWf+6qFn/uqhZ/7qoWf+6qFr/uqha/7qoWv+6qVr/uqla/7qpWv+6qVr/wbJr/9LE + j/+7q2T/sp5F/5uHKP+OfSb/1s6z/9rTu//e2MP/4NvK/+Dbyv/g28r/4NvK/9/byv/f28r/39vK/9/b + yv/f28r/39rK/9/ayv/f2sr/39rK/9/ayv/f2sr/39rK/9/ayv/f2sn/39rJ/9/ayf/f2sn/3trI/97Z + x//d2cT/3dnD/97XwP/d17//3de//93Ywf/e2cf/3trJ/9zXx//Y0sD/1c+6/9HJsf/Px63/1M25/+Hh + 3v/h4d7/4eHe/8DCu/+Zlof/pqOW/5iVhf+mo5b/oJ2P/6ajlv+bmIn/nJmK/6mmmv+fnI7/pqOW/52a + i/+Zlob/q6ic/5uYif+lopX/JExd/w00T/8ONVD/DzdS/xE7Vv8TQFv/F0Zh/xxNaP8hVW//J114/ypl + gP8raYT/TYWc/4Wyx/8pZ4f/H1V1/x9Vdf8fVXVt////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wHTxIlpt6RR/8exWdXl2JvZ1b5hyc61SsPOtErBzbRKwcyzSMHLs0fBy7JGv8qyRr/JsUW/ybBEv8mv + Q7/Ir0K9x65BvcStQb3ErUC9w6w/vcOsP7vDqz67wqo9u8GpO7vBqTu5wKg6ub+nOrm+pjm5vqY4ub2l + N7e9pTa3vKQ1t7yjNbW6ojS1uqIztbqhMrW5oDG1uJ8ws7ifL7O2ni6ztp0ts7adLbG1nCyxtJwrsbOa + KrGzmimvspkor7KZKK+xmCatsJgnrbCXJq2vliWtrpUkra6VJKutlCKrrZMhq6yTIamrkh+pq5IfqaqR + HqmpkB2ps6JP+7qoV/+8qlj/vKpZ/7upWP+7qVj/u6lY/7uoWP+6qFj/uqhY/7mnV/+5p1f/uKdX/7in + Vv+4p1b/tqRR/7ShTv+yn0v/sp9L/7ShTv+1o1H/t6VU/7imVv+4plb/uKZW/7imV/+4plf/uKdX/7in + V/+4p1f/uKdX/7imV/+4plf/uKZX/7imV/+4p1f/uKdX/7inV/+5p1j/uadY/7mnWP+5p1j/uadY/7mn + WP+5p1j/uadY/7mnWP+5p1n/uadZ/7elVf+2o1H/tKJO/7OgS/+0oU3/taRR/7moWf+5qFn/uahZ/7mn + Wf+5p1n/uadZ/7moWf+5qFj/uahY/7mpWf+5qVn/ualZ/7qpWf+6qVn/uqlZ/7qpWf+6qVn/uqla/7qp + Wv+6qVr/uqla/7qpWv+6qVr/uqla/7qpWv+6qVr/uqla/7qpWv+6qVr/u6lb/7imVf+2o1L/taFP/7Sh + Tv/OwIj/xLV2/7OgSf+tmj//h3Ua/8i9lf/g28r/4NvK/+Dbyv/g28r/4NvK/+Dbyv/g28r/4NvK/+Db + yv/f28r/39vK/9/byv/f28r/39rK/9/ayv/f2sr/39rK/9/ayv/f2sr/39rK/9/ayv/f2sn/39rJ/9/a + yP/f2cf/3dnE/93Zwv/e2cH/2tW7/9fQtP/Uy67/0cip/83BpP/Sya//4N3T/+Df2P/i39r/4uHd/+Hh + 3f/h4d7/4eHe/+Hh3v/S087/m5iJ/6ajlv+YlYX/o6CS/6Ogkv+mo5b/nZqL/52ai/+mo5b/oJ2P/6aj + lv+hnpD/mJWF/6uonP+Zlof/paKV/zdbZP8MNE//DTVQ/w83Uv8ROlX/Ez9a/xZFYP8aS2b/H1Ru/yRc + d/8oZH//KGaC/0iBmf+Rt8j/JWKB/x9Vdf8fVXX/H1V1Yf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BvatcZ7imVuXWw3DP3c6E0cyzSMHMske/y7JGv8uxRr/KsUW/ybBEv8ivQ73IrkK9yK5Cvcet + Qb3ErUC9xKw/u8OrPrvDqz67wqo9u8GpPLvBqDu5wKg6ub+nOrm/pzm3vqY4t72lN7e9pTa3vKM1tbuj + NbW7ojS1u6IztbmhMrW5oDGzuKAxs7ifL7O3ny6zt50usbadLbG1nCyxtJwrsbSbKq+zmimvspoor7KZ + KK2xmSetsJgnrbCXJq2vlyWrr5Ykq66VI6utlCOrrZQiq6yTIamrkh+pq5IfqaqRHqepkR2nqZAcp6mP + HKeojxulp44bpbCcQt22pFT/u6pY/7uqWP+7qVj/uqlY/7qpWP+6qFf/uqhX/7qoV/+5qFf/tqRS/7Sh + Tv+zoEv/s6FN/7WiUP+2pFP/uKZW/7inV/+5qFf/uahX/7moWP+5qFj/uahY/7moWP+5qFj/uahY/7mo + WP+4qFj/uKhY/7moWf+5qFn/uahY/7moWP+5qFj/uahY/7moWP+5qFj/uahZ/7moWf+5qFn/uadZ/7mn + Wf+5p1n/uaZX/7ekVP+1o1H/tKJO/7OgTP+1o0//uqha/7qoWv+6qFr/uqha/7qoWv+6qVr/uala/7mp + Wv+6qVv/uqlb/7qpW/+6qVv/uqla/7qpWv+6qVr/uqla/7upWv+7qVr/u6la/7upWv+7qVr/u6la/7up + Wv+6qlr/uqpa/7qqWv+7qlv/u6lb/7upW/+7qVv/u6lb/7ikVP+2o1D/tKBO/7aiUf+3pVP/uaZX/7uq + XP+7qlz/w7Rv/9LEkP+9r2j/sZ5E/5qGKP+UgzD/4NvK/+Dbyv/g28r/4NvK/+Dbyv/g28r/4NvK/+Db + yv/g28r/4NvK/+Dbyv/f28r/39vK/9/byv/f28r/39rK/9/ayv/f2sr/39rK/9/ayv/f2sr/39rK/9/a + yv/d2MP/2tO6/9bOsv/Syav/z8Ki/8/Do//d2L//3djB/97Zw//e2sn/39zN/+De0v/g39f/4uDa/+Lh + 3P/i4t3/4uLf/+Li3v/i4t7/4ODc/56bjP+hnpD/mZaH/56bjP+lopX/pqOW/6GekP+dmov/o6CT/6Og + kv+mo5b/o6CT/5SRgf+rqJz/m5iJ/6ajlv9Ma2z/DDRP/w01UP8ON1L/EDpV/xM+Wf8UQ17/GUpl/x1R + bP8jWnX/J2F8/yhlgP9Mg5v/jLXE/ypnhf8fVXX/H1V1/x9VdVH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AbekT2e5p1S12ch2ydrKfc/KsUa/ybBEvcmvQ73Ir0O9x65CvceuQbvErUC7w6w/u8Or + P7vCqj67wqo9ucKqPbnAqDu5wKg6ub+nOrm/pzm3vqY4t72lN7e9pTe1vKQ2tbykNbW7ojS1uqIztbmh + MrO5oDGzuaAws7ifL7G3ny6xtp0usbadLbG1nCyxtJsrr7SbKq+zmiqvs5oorbKZKK2xmSetsZgnrbCX + JquvlyWrr5Ylq66VI6utlCOrrZQiqa2TIamskyCpq5Ifp6qRHqepkR2nqZAcp6iQG6Wnjxulp48bpaeO + GqWmjRmjpo0Zo6WNGKWpkim1sqBQ/7qpWP+6qVj/uqlY/7qpWP+4p1X/tqNR/7WhTf+0oEz/tKJP/7ak + Uf+3plX/uahY/7moWP+5qFj/uahY/7moWP+5qFj/uahY/7moWP+5qFn/uahZ/7moWf+5qFn/uahZ/7mo + Wf+6qVn/uqlZ/7qpWf+5qVn/ualZ/7mpWf+5qVn/uahZ/7moWf+5qFn/uahZ/7qpWf+6qVn/uKdX/7il + VP+1o1L/tKFP/7SiT/+2o1L/uqla/7qpWv+6qVr/uqlb/7qpW/+6qVv/uqlb/7qpW/+6qVv/u6lb/7up + W/+7qVv/u6lc/7upXP+7qVz/u6lc/7upXP+7qVz/u6pc/7uqW/+7qlv/u6pb/7uqW/+7qlv/vKpc/7yq + XP+8qlz/vKpc/7yqXP+7qlz/uaZW/7ekUv+1olD/taJQ/7ekU/+4plb/uqhZ/7uqXP+7qlz/vKpd/7yq + Xf+8ql3/vKtd/7yrXf/UyJT/yrp9/7ShSv+um0P/h3Ua/83Dnv/g28r/4NvK/+Dbyv/g28r/4NvK/+Db + yv/g28r/4NvK/+Dbyv/g28r/4NvK/+Dbyv/f28r/39vK/9/byv/f28r/39vK/97ayf/b1b//19G4/9TM + sP/Qx6j/z8Ol/9PKrP/f2sf/3trD/97awv/d2b//3tnA/97ZwP/e2sL/39vI/+Ddzf/h3dH/4d/W/+Lg + 2f/j4dz/4+Ld/+Pi3//j4t//4+Lf/+Li3v+kopT/npuM/5uYif+bmIn/p6SX/6Ogkv+joJL/nZqL/6Ge + kP+koZT/pKGU/6ajlv+TkH//rKmd/5qXiP+mo5b/Ynx3/w00T/8NNE//DjZR/xA5VP8SPVj/FEJd/xhJ + ZP8dUGv/Ilhz/yVfev8rZoD/UIaf/36sv/8oY4P/H1V1/x9Vdf8fVXVD////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wG3pE9PuaZSv9bBbcXby4LPx65BvceuQbvErUC7xK1Au8OrPrnDqz65wqo9ucKq + PbnBqTu5wKg7ub+oOre/pzm3v6Y4t76mN7W9pTe1vKQ1tbykNbW7ojO1uqIys7qhMrO5oDGzuKAws7ig + L7G3ni+xt54usbadLbG1nSyvtZwrr7SbKq+0mimtspoorbOZKK2ymSetsZgnrbCXJquvliWrrpYkq66W + JKutlSOprZQiqayTIamskyCprJIgp6uSH6eqkR6nqpEdpamQHKWojxulqI4apaiPG6Wnjhqlpo0ZpaaN + GaOljBijpYwXo6WLF6OkihahpIoVobGfT/22pFP/tqNQ/7ShTf+0oU3/taNQ/7elVP+6qFj/uahY/7mo + WP+5qFj/uahZ/7moWf+5qFn/uahZ/7moWf+5qFn/uqlZ/7qpWf+6qVn/uqlZ/7qpWf+6qVn/uqlZ/7qp + Wf+6qVr/uqla/7qpWv+7qlr/u6pa/7uqWv+6qlv/uqpb/7qqW/+6qVr/uKdX/7elU/+1o1H/tKFN/7Wj + Uf+3plX/uqpb/7qqW/+6qlv/uqpb/7qqW/+7q1v/u6pb/7uqXP+7qlz/u6pc/7upXP+7qlz/u6lc/7uq + XP+7qlz/u6pc/7uqXf+7ql3/u6pd/7yqXf+8ql3/vKpd/7yqXf+8ql3/vKpd/7yrXf+8q13/vKtd/7yr + Xf+8q13/uKZV/7ajUf+1ok//tqNR/7ilVf+5qFj/vKtd/7yrXv+8q17/vKte/7yrXv+8q17/vKte/7yr + Xf+8q13/vKtd/7yrXv+8q17/x7d0/9LEj/+8rWT/sJ1C/5mFJf+YiDf/4NzK/+Dcyv/g28r/4NvK/+Db + yv/g28r/4NvK/+Dbyv/g28r/4NvK/+Dbyv/g28r/4NvK/93Xwv/Z0rr/1c2y/9HIq//OwqT/39vK/9/b + yv/f28r/39vK/+Dbyf/g28n/4NrI/9/axP/f2sL/39nA/97Yv//f2cD/39rB/9/byP/f3cz/4d7R/+Hg + 1v/i4Nn/4+Db/+Pi3f/j4t//4+Lf/+Pi3//j4t//rauf/5yZiv+fnI7/mJWF/6qnm/+joJL/pqOW/5uY + if+em4z/qKWY/6GekP+mo5b/lJGB/6qnm/+dmov/pqOW/3uPg/8NNVD/DTRP/w42Uf8POFP/EjxX/xNB + XP8XRmH/G05p/yBVcP8iWnX/KWN+/1WJn/9zpbn/Il5//x9Vdf8fVXX/H1V1M////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Bt6RPH7ekT+PQul+93tGR08OsPrnDqz65wqo9ucGqPLnAqTu3wag7t8Co + Ore/pzm3v6Y4tb6mOLW9pTe1vaQ2tbykNbW7ozSzu6Izs7qhMrO5oTGzuKAxsbifMLG3ni+xt54usbae + LbG1nSyvtZwsr7WcKq20myqts5oprbKZJ62xmSersZgnq7GXJquwlyWrr5Ykqa6WJKmulSOprZQiqa2U + IaeskyGnrJMgp6uSH6eqkh6lqpEdpamQHKWokBulqI8cpaiOG6Wnjhqlp44ao6aNGaOmjBijpowYoaSL + FqGkixahpIoVoaOJFKGjiRSfookUn6KJFJ+umkPhs6BP/7inVv+6qlr/uqlZ/7moWP+6qVn/uahZ/7qp + Wf+6qVn/uqlZ/7qpWf+6qVn/uqlZ/7qpWf+6qVn/uqlZ/7qpWv+6qVr/uqla/7uqWv+7qlr/u6pb/7uq + W/+7qlv/u6pb/7uqW/+7qlv/u6pb/7uqW/+6qVn/uaZX/7elU/+2olD/taJP/7akU/+6qlz/u6tb/7ur + W/+7q1v/vKtc/7yrXP+8q1z/vKtc/7yrXP+7q1z/u6tc/7urXP+7q1z/u6xd/7urXf+8q13/vKtd/7yr + Xf+8q13/vKtd/7yrXf+8q13/vKtd/7yrXf+8q17/vKte/7yrXv+8q17/vKte/7yrXv+5p1j/t6VU/7aj + Uf+2o1L/uKVU/7mnV/+7qVr/vate/72rXv+9q17/vaxe/72sXv+8rF7/vKxf/7ysX/+8rF//vatf/72r + X/+9q1//vatf/72rX/+9q17/vaxf/72sYP/Wy5f/yrt//7ShSv+um0T/hnQa/9LLqP/g3Mr/4NzK/+Dc + yv/g3Mr/4NzK/+Dcyv/g3Mr/3tnE/9vUvP/X0LX/1Muu/9DEpv/SyKn/4NzK/+Dcyv/g3Mr/4NzK/+Dc + yv/g3Mr/4NvK/+Dbyv/g28r/4NvJ/+DayP/f2sf/39rD/9/Zwf/e2MD/39nB/9/awv/g28j/4NvL/+De + 0f/h39X/4uHa/+Ph2//j4t7/4+Lg/+Pi4P/j4uD/4+Lg/7e2rP+bmIn/op+R/5mWhv+qp5v/n5yO/6aj + lv+al4j/nZqL/6ilmP+fnI7/pqOW/5aTg/+opZj/n5yO/6Wilf+bppb/DjZR/ww0T/8NNVD/DzdS/xE6 + Vf8TP1r/FUVg/xlLZv8eUm3/IFh0/yljf/9dkab/b6G1/x5afP8fVXX/H1V1/x9VdSX///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wG3pE/ZyLNZpd3Qj8/IsEy9wKk7t7+oObe/pzm1vqY4tb6m + N7W9pTe1vKQ2tbykNbO7ozSzu6Izs7qiMrO5oTGxuaExsbigMLG4ny+xt54ur7adLa+2nSyvtZwrrbWc + Kq20myqts5oorbKZKKuymSersZgmq7GYJquwlyWrr5Ykqa6WI6mulSOprZUip62UIqeskyCnq5Mgp6uS + H6Wqkh6lqpEdpamQHKWojxujqI8bo6iPGqOnjhqjp44ao6eOGqGmjBihpYwXoaWMF6GkixahpIoWoaOK + FZ+jiRSfo4kUn6KJFJ+iiRSfoogTn6KIE52iiBOdp5EqtbGgUf+6qVr/uqpa/7qqWv+6qlr/uqlZ/7qp + Wf+6qVr/uqla/7qpWv+7qlr/u6pa/7uqWv+7qlv/u6pb/7uqW/+7qlv/u6pb/7uqW/+7qlv/u6pb/7uq + W/+7qlz/u6pc/7qqW/+6qFj/uKZV/7ekUv+1o1D/tqNR/7imVf+8q13/vKtd/7yrXf+8q13/vKtd/7yr + Xf+8q13/vKtc/7ysXf+8rF3/vKxd/72sXf+9rF3/vaxd/72sXf+9rF7/vKxe/7ysXv+8rF7/vKxe/7ys + X/+8rF//vKxf/7ysX/+8rF7/vKxe/7ysXv+8q17/vKte/72rX/+5p1b/uKVT/7ajUP+4pVT/uKdX/7qp + Wv+9rF//vaxf/72sYP+9rGD/vaxg/72sX/+9rF//vaxf/72sX/+9rF//vaxf/76tYP++rWD/va1g/72t + YP+9rWD/va1g/72sYP+9rGD/vaxg/76tYP++rWD/yrp5/9LEjv+9q2P/r5tA/5aCI/+ej0H/4t3K/+Hd + yv/g3Mj/3Ne+/9nSt//VzLD/0sio/9HHqP/VzK//4dzK/+Hcyv/h3Mr/4dzK/+Hcyv/h3Mr/4dzK/+Hc + yv/g3Mr/4NzK/+Dcyv/g3Mr/4NzK/+Dbyf/g2sj/39rH/9/awv/f2cH/3tnB/9/Zwf/f2cL/4NrE/+Db + y//h3dD/4t/V/+Hg2f/j4dv/4+Pe/+Pj3//j4uD/4+Lg/+Pi4P/IysD/m5iJ/6ajlv+YlYX/qKWY/6Ge + kP+npJf/m5iJ/5yZiv+sqZ3/m5iJ/6ekl/+XlIT/pqOW/6Wilf+in5H/qbCg/w83Uv8MNE//DTVQ/w43 + Uv8QOVT/Ez5Z/xREX/8YSmX/HlNu/x9YdP8pY37/Z5is/26itv8dV3n/H1V1/x9Vdf8fVXUV////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bt6RPgb2rWqXUwnbF0L1qw7+mOLW9pTe1vaU2tb2k + NbO7ozSzu6M0s7qiMrG6oTGxuaAxsbmgMLG4ny+vt58ur7aeLa+2nSyttZ0rrbWcK620myqts5oprbKa + KKuymSerspknq7GYJqmwlySpsJclqa+WJKmulSOprpUip62UIaeskyGnrJMgpauSH6WqkR6lqpIepaqQ + HaWpkByjqI8bo6iPGqOojhujp44aoaeNGaGmjRmhpowYoaaMF6GlixafpIsWn6SKFZ+jihWfo4oUn6OK + FJ+iiRSfookUn6OJE52iiROdookTnaKIE52iiBOdoYgTnaKIE52wn1H/ualZ/7uqW/+7qlv/u6tc/7ur + XP+7q1z/u6pb/7uqW/+7qlv/u6pb/7urW/+7q1v/u6tc/7urXP+7q1z/u6tc/7urXP+7q1z/vKxc/7uq + Wv+5qVj/uKZV/7akUv+1o1D/t6RT/7mpWP+8q13/vKtd/7yrXf+8rF3/vKxd/7ysXf+9rF7/vaxe/72s + Xv+9rF7/vaxe/72sXv+9rF7/vaxe/72sXv+9rV//va1f/72tX/+9rV//va1f/72tX/+9rV//vK1f/7yt + X/+9rWD/va1g/72sYP+9rGD/vaxg/7qpWv+4p1b/t6RS/7elU/+5p1f/u6la/7yrXf+9rGD/vaxg/72s + YP+9rGD/vaxg/72sYP+9rGD/vq1h/76tYf++rWH/vq1h/76tYP++rWD/vq1g/76tYP++rWD/vq1h/76t + Yf++rWH/vq1h/76tYf++rWH/vq1h/7+uYf+/rmH/v65h/7+vYv/YzZr/zLyB/7WiS/+sm0P/h3QZ/83B + nP/Tyqr/0cSm/9TLrf/h3cr/4d3K/+Hdyv/h3Mr/4dzK/+Hcyv/h3Mr/4dzK/+Hcyv/h3Mr/4dzK/+Hc + yv/h3Mr/4dzK/+Hcyv/h3Mr/4NzK/+Dcyv/g3Mn/4NvI/9/ax//f2sT/39rC/97Zwf/f2cH/39nD/+Da + x//g28v/4d3P/+Lf0//i4dn/5OHb/+Pi3f/j49//1tG+/9LLtP/SyrP/1NPL/5yZiv+opZj/mJWF/6Sh + lP+koZT/p6SX/5uYif+fnI7/q6ic/5yZiv+npJf/mZaH/6Ogk/+mo5b/op+R/6uvoP8SOlT/DDNO/w00 + T/8ONlH/EDlU/xI9Wf8TQ17/F0lk/xxRbP8eVnL/JV96/2marf9yprr/HFR1/x9Vdf8fVXX/H1V1B/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AbekTxm3pE/py7VZs9zPkM+8pDWzu6Mzs7qi + MrG6ojKxuqExsbmgMLG4oC+vt58ur7aeLa+2nSyttZ0rrbWcK620myqttJspq7KaKKuymSerspknq7GY + JamwlySpsJckqa+WI6evliOnrpUip62VIqetlCGlrJMgpauTH6Wrkh6lq5Eeo6qRHaOpkByjqZAbo6iP + GqGojhqhp48aoaeOGaGnjhmhpo0YoaaMGJ+lixafpYsWn6SLFZ+kixWfpIoVn6OKFJ2kihWdo4oUnaOK + FJ2jiRSdo4kTnaOJE52iiBOboogTm6KIE5uiiBOboogTm6KIE5uiiBObsZ9O77amWP+7q1z/u6tc/7ur + XP+7q1z/u6tc/7urXP+7q1z/u6tc/7ysXP+8rFz/vKxc/7ysXf+8rF3/vKxd/7upWv+5qFj/uKVU/7ak + Uf+2pFH/uKZV/7ysXv+8rF7/vKxe/72tX/+9rF7/vaxe/72sXv+9rF7/vaxe/72sXv+9rF7/vaxe/72t + X/+9rV//va1f/72tX/+9rV//va1f/72tX/+9rV//va1f/76tYP++rWD/vq1g/76tYP++rWD/vq1g/76t + YP++rWD/va1g/7moWP+4pVX/t6RT/7imV/+6qFn/vKtd/72uYf+9rmD/va5g/76uYf++rmH/vq5h/76v + Yf++rmH/vq5h/76uYf++rmH/vq5h/76uYf++rmH/vq1h/76tYf++rWL/vq1i/76tYv+/rmH/v65h/7+u + Yf+/rmH/v65h/7+uYf+/rmH/v65i/7+uYv+/rmL/v65i/76sYP+9q13/ybd3/82+hP+3pVf/r5o+/5WB + If+jlEr/4t3K/+Ldyv/i3cr/4t3K/+Hdy//h3cv/4d3L/+Hdy//h3Mv/4dzL/+Hcy//h3Mv/4dzL/+Hc + y//h3Mv/4dzL/+Hcy//h3Mr/4dzK/+Hcyv/h3Mr/4NzJ/+DcyP/g28j/39vE/9/aw//e2cH/39nB/9/Z + wv/f2sT/4NvK/9rUvv/Xz7j/08uy/9HIrv/Vzrn/2dTD/97a0f/h4Nr/4+Pg/+Li3/+hnpD/o6CS/5yZ + iv+fnI7/pKGU/6ekl/+dmov/op+R/6qnm/+gnY//p6SX/52ai/+fnI7/qaaa/52ai/+srJ7/Ez5X/wwz + Tv8NNE//DjZR/w84U/8RPFf/E0Fc/xZHYv8bT2r/HlVx/yJdeP9mmK3/d6q+/xxUdP8fVXX/H1V1+f// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bt6RPo8CuXJ3VxH3FybNZu7qh + Ma+4ny+vuJ8urbeeLa23ni2ttp0srbWcK6u0myqrtJspq7OaKauymSipspkmqbGYJqmwlyWpsJckp6+W + I6evliOnrpUip62UIKWtlCGlrZQgpayTIKWrkh+jq5Ieo6qRHaOpkByjqZAco6mPG6Gojhqhp44aoaeO + GqGnjRmfpo0Yn6aMGJ+ljBefpYsWn6WLFp+kixWfpIsWnaSLFZ2kihWdpIoVnaOKFJ2jihSdo4oUnaOJ + E5ujiRObo4kTm6OJE5uiiRObookTm6KIE5uiiBOboogTmaKIE5miiBOZoogTmauWNsOzo1X/vKxd/7ys + Xf+9rF3/vaxd/72sXf+8rF3/vKxd/7ysXf+9rF//vaxe/7upWv+6p1j/uKVU/7ajUf+4pVT/u6la/72t + YP+9rWD/va1g/72tYP++rWD/vq1g/76tYP++rWD/vq1g/76tYP++rWD/vq1g/76tYP++rWD/vq1g/72t + X/++rWD/vq1g/76tYP++rWD/vq1g/76tYP++rWD/vq1g/76tYP++rmD/vq5g/76uYP++rmH/u6pb/7mn + V/+3pFT/uKVV/7qoWP+7qlv/va1f/76uYf++rmH/vq9i/76vYv++r2L/vq9i/76vYv++r2H/vq9h/76v + Yf++r2H/v69i/7+vYv+/r2L/v69i/8CvYv+/r2L/v69i/7+vYv+/r2L/v65i/7+uY/+/rmP/v65j/7+u + Y/+/rmP/v65i/7+uYv+/rmL/v65i/72sXv+8qVv/uqdX/7imVP+5plb/uqhY/8GxZv/Zz57/zLyB/7ai + TP+unEf/hnQa/9vVuv/i3cv/4t3L/+Ldy//i3cv/4t3L/+Ldy//h3cv/4d3L/+Hdy//h3cv/4dzL/+Hc + y//h3Mv/4dzL/+Hcy//h3Mv/4dzL/+Hcy//h3Mr/4dzK/+Hcyf/h3Mn/4NvI/9/bxP/f2sP/3trB/9bO + sP/Syaj/z8Oi/9LJqv/Wz7X/29XA/9/b0P/j4tv/5OLc/+Tk3v/k5OD/5OTg/+Tk4P/k5OD/paKW/5+c + jv+bmIn/m5iJ/6ajlv+npJf/oZ6Q/5+cjv+mo5b/oJ2P/6ekl/+joJL/m5iJ/6ypnf+dmov/rKmd/xlG + Xf8MM07/DTRP/w01UP8POFP/ETtW/xNAXP8VRmH/Gk1p/x1UcP8kXnn/Ypet/3Cluv8eVXX/H1V1/x9V + dev///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AbekTxu3pE/lxLFYrdrM + jsu5oTOvtp0srbWcK6u0nCqrtJspq7ObKauzmiipspknqbKYJqmxlyWnsJckp6+WI6evliKnrpUipa6V + IaWtlCClrJMgpayTH6Orkh+jq5Ieo6uRHaOqkR2hqZAboaiQG6Gojhqhp44Zn6eNGZ+njhmfpo0Yn6aN + GJ+mjRifpYwXn6WMF52ljBedpYsWnaSLFZ2kixWdpIsVnaSLFZ2kihSdo4oUm6SKFJujiRObo4kTm6OJ + E5ujiRObookTm6OJE5miiBOZoogTmaKJE5miiROZookTmaKJE5miiROZookTmaKJE5mkixedsKBT/7ys + Xv+9rF7/vaxf/72sX/+9rF//vaxe/7ypWv+6p1b/uKVU/7ikUv+5p1b/vq1g/76tYP++rWD/vq1g/76t + YP++rWD/vq1g/76tYP++rWD/vq5h/76uYf++rmH/vq5h/76uYf++rmH/vq5h/76uYf++rmH/v61h/7+t + Yf+/rWH/v61h/7+uYf+/rmH/v65h/7+uYv+/rmL/v65i/7+uYv+9q13/uqhZ/7imVv+4plT/uqdX/7uq + W/+8rF7/v69i/7+vYv+/r2L/v69i/7+vYv+/r2L/v69i/7+vYv+/r2P/v69j/7+vY//Ar2P/wK9j/8Cv + Y//Ar2P/wK9i/8CvYv/AsGP/wLBj/8CwY//AsGP/wLBk/8CwZP+/r2T/v69k/7+vZP+/r2T/v69k/7+v + ZP+/r2T/vq1h/7yrXf+7qVn/uaZW/7mlVf+6qFf/wK9j/8CvZP/Ar2T/wK9k/8CvZP/Ar2T/zr6D/9LE + jv+6qFv/rpk8/5N/If+omlX/4t3L/+Ldy//i3cv/4t3L/+Ldy//i3cv/4t3L/+Ldy//h3cv/4d3L/+Hd + y//h3cv/4dzL/+Hcy//h3Mv/4dzL/+Hdy//h3cv/4d3L/+Hdy//h3cr/2dK3/9TLrf/QxKT/0cin/9XM + rf/Y0LP/3Na6/+Dbw//h3Mn/4d3N/+Lf0v/j4Nf/4+Lb/+Xi3f/l5N//5eTh/+Xk4P/l5OD/5eTg/7Ct + of+dmov/nZqL/5qXiP+npJf/paKV/6Ogkv+hnpD/pKGU/6Ogkv+opZj/o6CS/5mWh/+tqp7/m5iJ/6yp + nf8iT2D/DDNO/ww0T/8NNVD/DzdS/xA7Vv8TP1v/FEVh/xhLaP8aUm7/J155/2OZr/9km7P/HlV1/x9V + df8fVXXb////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bt6RPebyq + WKfNum27zLhnvbSaKamzmiipspknqbKZJ6mymCWnsJckp7CWI6evlSOlrpUipa6VIKWtlCClrZQgpayT + H6Oskx+jq5Ieo6uRHqGqkR2hqZAboamQG5+pkBufqI8an6eOGZ+njRifp44Zn6aNGJ+mjRifpo0YnaaN + F52ljBedpYwXnaWMFp2lixadpYsWnaSLFZukixWbpIoVm6SKFJukihSbo4oUm6OKFJujiROZo4kTmaOJ + E5mjiROZookTmaKJE5miiROZookTmaKJE5mjiROZo4kTmaOJE5mkihSXpIoUl6SKFJekihSXpIoUl7Si + Vvu6qVv/vatc/7upWf+5plb/uKVS/7mlVP+7qVr/vq1g/76tYP++rWD/vq1g/76tYP++rmH/vq5h/76u + Yf++rmH/vq5h/76uYf++rmH/vq5h/76uYf+/rmL/v65i/7+uYv+/r2L/v69i/7+vYv+/r2P/v69j/7+v + Y/+/r2P/v65i/7+uYv+/r2L/v69i/7+vYv+9q13/uqhY/7mmVf+6p1b/u6lZ/72sXf+/rmH/wLBj/8Cw + Y//AsGP/wLBk/8CvZP+/r2P/wK9j/8CvY//Ar2P/wK9j/8CvY//Ar2P/wK9j/8CwZP/AsGT/wLBk/8Cw + ZP/AsGT/wLBk/8CwZP/AsGT/wLBk/8CwZP/AsGT/wLBk/8CwZP/BsWX/wbFl/8GxZf+/rmP/vatf/7uq + W/+5qFf/uaZV/7qoWP+7q1z/wK9m/8CvZf/Ar2T/wK9k/8CwZP/AsGT/wLBk/8CwZP/AsGT/wLBk/8Gy + aP/a0KH/zL2B/7ajTf+smkX/iHYc/93Xv//i3cz/4t3L/+Ldy//i3cv/4t3L/+Ldy//i3cv/4t3L/+Ld + y//h3cv/4d3L/+Hdy//h3cv/4d3L/+Hdy//Z0rj/1c2w/9LIqf/Rx6j/1cyw/9jRtv/c1rz/4NvD/+Hb + w//h28L/39vC/+Dbwv/g3MP/4dzJ/+HczP/j3tH/4+DW/+Ph2v/l4tz/5eTf/+Xk4f/l5OH/5eTh/+Xk + 4P+8v7b/m5iJ/6Ogkv+Zlof/qKWY/6ShlP+mo5b/nZqL/6Ogkv+joJL/qKWY/6ilmP+Wk4P/raqe/52a + i/+qp5v/MV1n/wwzTv8MM07/DTRP/w43Uv8QOlX/Ej5Z/xNDX/8XSmb/F09s/ydcd/9sn7L/VJCp/x9V + df8fVXX/H1V1z////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Abek + Tw23pE/lwa5WodfLjMe2nzSrsZglp7CXJKewlyOlr5Uipa6VIaWtlCCjrZQgo62TH6Oskh6jq5IdoauS + HaGqkR2hqpEcoamQHJ+pjxufqI8an6iOGZ+njhmdpo0YnaeOGZ+njRidpo0YnaaNGJ2mjRedpYwXnaaM + F52ljBadpYsWm6WMFpulixWbpYsWm6SLFZukihSbpIoUmaSKFJmkihSZo4oTmaOKE5mjiROZo4kTmaOJ + E5mjiROZo4kTl6SKFJekihSXpIoUl6WLFpelixaXpYsWl6WLFpelixaXpYsWl6WLFpelixaXpYsWl6WL + Fpeyn0rbtKFQ/7qnWP++rWH/vq5i/76uYv++rmL/vq5i/76uYv++rmL/v65i/7+uYv+/rmL/v65j/7+u + Y/+/rmP/v69i/7+vYv+/r2L/v69j/7+vY/+/r2P/v69j/7+vY/+/r2P/v69j/7+vY/+/r2P/v69j/8Cv + ZP/Ar2T/wK9k/76tYP+7qVr/uqdW/7qmVf+7qVn/vKpc/76tYP/AsGT/wLBk/8CwZP/AsGT/wLBk/8Cw + ZP/AsGT/wLBk/8CwZP/BsWT/wbFk/8GwZP/BsGX/wbBl/8GwZf/AsGT/wLBk/8CwZP/AsGT/wLBk/8Cw + ZP/AsGT/wbFl/8GxZf/BsWX/wbFl/8GxZf/BsWX/wbFl/8GxZf++rWH/vKxd/7upWv+6p1f/uqhY/7yq + XP++rWD/wK9k/8CxZv/AsWb/wLBm/8CwZv/AsGb/wbBn/8GwZv/BsGb/wbBm/8GwZf/BsGX/wbBl/8Gw + Zf/BsGX/0MGH/9LHjv+4p1f/rpo9/5KAIv+toF//4t7M/+LezP/i3sz/4t7L/+Ley//i3sv/4t7L/+Le + y//i3sv/4t7L/+Ley//Xz7P/08qr/9HHp//VzK7/2dC2/9zVvf/i3cv/4t3L/+Ldy//i3cr/4tzJ/+Hc + yP/h28T/4dvC/+Dbwv/g2sH/4NvC/+Dcx//h3cz/49/R/+Ph1f/j4dn/5eLc/+Xk3//l5OD/5eTh/+Xk + 4f/l5OH/y87I/5mWh/+koZT/mZaG/6ajlv+joJL/qKWY/52ai/+hnpD/pqOW/6Ogkv+opZj/lpOD/62q + nv+dmov/qKWY/0Zrav8MNE//DDNO/w00T/8ONlH/DzlU/xE9WP8TQl3/Fklk/xZNaf8nXXj/dKW3/0uH + o/8fVXX/H1V1/x9VdcH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bt6RPW7mnVLfItWOxzbtxva+VIqOulCGjrZQgo62TH6Oskh6hrJIeoauSHaGqkByhqpEdn6qQ + HJ+pkBufqI8an6iOGZ2njhmdp40YnaaNGJ2njRidp44ZnaeNGJ2njRidpo0XnaaNF52mjRebpowXm6WM + FpuljBabpYsWm6WLFZulixWZpIsVmaSLFZmkihSZpIoUmaSKE5mkihOZo4oTmaSKFJekihSXpIoUl6SK + FJekihSXpIoUl6SKFJekihSXpYwXl6WMF5eljBeXpYwXl6WMF5eljBeXpYwXl6WMGJeljBiXpYwYl6aN + GJemjRiXqpMsrbWlWP++r2L/vq9i/76vYv+/r2P/v7Bj/7+wY/+/sGP/wLBj/8CwY//AsWT/wLFk/8Cx + ZP/AsWT/wLBk/8CwZP/AsGT/wLBk/8CvZP/Br2T/wa9k/8GvZP/Br2T/wa9k/8GvZP/BsGT/wK9j/72r + Xv+7qVn/uqdW/7uoWf+8ql3/vq1g/8CvZP/AsGX/wLBl/8CwZf/AsGX/wbFl/8GxZP/BsWT/wbFk/8Gx + Zf/BsWX/wbFl/8GxZf/BsWX/wbFm/8GxZv/BsWb/wbFm/8GxZv/CsWb/wrFm/8KxZv/CsWb/wbFl/8Gx + Zf/BsWX/wbFl/8GxZf/BsWX/wbFm/7+vYv+9rF//vKpc/7qoWf+6p1n/vKpb/76tYP/Bsmb/wbJm/8Gy + Zv/Csmf/wrJn/8KyZ//Bsmf/wbJn/8GxZ//BsWf/wbBn/8GwZ//BsGf/wbBn/8GxZ//BsWf/wbFn/8Gx + Zv/BsWb/wbFm/8O0bP/b0KD/zL2B/7WiTP+rmUP/ingf/+Hdyf/j3sz/497M/+PezP/j3sz/497L/9rS + tv/VzK3/0cem/9TLrP/Y0LT/3NW7/+Pey//i3sv/4t7L/+Ley//i3sv/4t3L/+Ldy//i3cv/4t3K/+Lc + yf/h3Mj/4dvH/+Hbw//g28H/4NrB/+Hbwv/h3Mf/4t3L/+Hfz//j4dT/4+PZ/+Xj3P/l497/5eTf/+Xk + 4f/l5OH/5eTi/9zb2P+dmov/qKWY/5mWh/+joJP/o6CT/6ilmP+bmIn/oZ6Q/6mmmv+joJL/qKWY/5SR + gf+sqZ3/nJmK/6ilmP9ae3H/DTRP/wwzTv8MNE//DTVQ/w84U/8RPFf/E0Bc/xVHYv8USmf/JVt2/3qs + v/9GhJ7/H1V1/x9Vdf8fVXWx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wG3pE/DvqtWldLCgb+3oj2rrJIeoauSHaGrkRyfqpAbn6qQG5+qkByfqY8anaiP + Gp2njhmdqI4ZnaeOGZ2njRidp44Ym6eOGZ2njRidp44Ym6eNGJumjRebpo0Xm6aNF5umjBabpowWmaWM + FpmlixWZpYsVmaSLFZmkixWZpIsUmaSLFJmlixWZpYsVl6SLFZekixWXpIoUl6SKFJekixaXpIsWl6SL + FpekixaXpIsWl6SLFpeljBeXpYwYl6WMGJemjBiXpo0Zl6aNGZemjRmXpo0Zl6aNGZemjRmXp40ZlaeN + GZWnjRqXp40al6eNGpe1pVr/v69k/8GxZP/BsWT/wbFk/8GxZP/BsWT/wbFl/8GxZf/BsWX/wbFl/8Gx + Zf/BsWX/wbFk/8GxZP/BsWT/wbFk/8GyZf/BsmX/wbJl/8GxZf/BsWX/v65j/7yqXf+7qFn/uqhZ/7yp + XP++rF//wK9i/8GwZf/CsWX/wrFl/8KxZf/BsWb/wbFm/8GxZv/BsWb/wbFm/8GxZv/BsWb/wbFm/8Gx + Zv/BsWb/wrJn/8KyZ//Csmf/wrJn/8KyZ//Csmf/wrJn/8KyZ//Csmf/wrJn/8KyaP/CsWf/wrFn/8Kx + Z//Csmf/wrJn/8CuYf+9q13/u6lZ/7qnWP+7qVr/vaxe/8KyZ//Csmf/wrJn/8KyZ//Csmf/wrJn/8Ky + Z//Csmf/wrJn/8KyZ//Csmj/wrJo/8KyaP/Csmj/wrNo/8KyaP/Csmj/wrJo/8KyaP/Csmj/wrJo/8Oy + aP/Dsmj/w7Jo/8OyZ//Dsmf/08SL/9THjv+3pVT/rpk9/5J/Iv+0p2v/49/M/9bOsP/TyKn/1Mqr/9fP + s//b07r/39jB/+Pey//j3sv/497L/+Pey//j3sv/497L/+Pey//i3sv/4t7L/+Ley//i3sv/4t3L/+Ld + yv/i3Mn/4dzJ/+Hbx//h28T/4NvC/+Daw//h28P/4dzH/+Ldy//i39D/5OHV/+Pi2f/k49z/5eTf/+Xl + 4P/l5OL/5eTi/+Xk4v/l5OL/oZ6Q/6Ogk/+al4j/oZ6Q/6ShlP+opZj/nZqL/5+cjv+rqJz/n5yO/6il + mP+XlIT/qqeb/6Cdj/+opZj/fJaB/w01UP8MM07/DDRP/w01UP8ON1L/EDpW/xI/Wv8TRGD/E0ll/yJY + dP9+r8P/RoKd/x9Vdf8fVXX/H1V1n////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Bt6RPPbilUcvArlep0L57vaqQG5+qkBqdqpAanaiPGp2ojxqdqI8ZnaiP + GZunjhmbp44Ym6eOGJunjhibp44Ym6eNGJunjRibp40Ym6aNF5mmjReZpowWmaaNFpmljBaZpYwVmaWM + FpmlixWZpYsVmaaMFpemjBaXpYsWl6WLFZelixWXpIsWl6SLFpekixaXpIsWl6WMFpeljBaXpYwWl6aM + F5emjRmXpo0Zl6aNGZemjRmXpo0Zl6eNGZWnjRmVp44al6eOG5enjhuXp44bl6eOG5WnjhuVp44blaeO + HJenjhyXp44cl6eOHJeojxyXt6dc9bysYf/BsWX/wbFl/8GxZf/BsWX/wbFl/8GxZf/Csmb/wrJm/8Ky + Zv/Csmb/wrJm/8KyZv/Csmb/wrJn/8KyZ//Csmf/v61g/7yqXP+7qFn/u6pc/72sX/+/r2P/wrJn/8Ky + Z//Csmf/wrJn/8KxZ//CsWf/wrFn/8KxZ//CsWf/wrFm/8KxZv/Csmf/wrJn/8KyZ//Csmf/wrJn/8Ky + Z//Csmf/wrJn/8KyZ//Csmf/wrJo/8KyaP/Csmj/wrJo/8KyaP/Csmj/wrJo/8KyaP/Csmj/wK9j/7+s + X/+9qlz/u6hY/7yqW/++rF7/wa9j/8OyaP/Csmf/w7No/8OzaP/Cs2f/wrNo/8KzaP/Csmj/wrJo/8Kz + aP/Cs2j/wrNo/8KzaP/Cs2j/wrNo/8KzaP/Ds2j/w7No/8OzaP/Ds2j/w7Np/8Oyaf/Dsmn/w7Jp/8Oz + af/Ds2n/w7Np/8Ozaf/Ds2j/w7Nn/8i2bv/b0KD/x7Z2/7WiS/+mkzr/jXoi/9jRtf/e2MD/49/M/+Pf + zP/j3sz/497M/+PezP/j3sz/497L/+Pey//j3sz/497M/+PezP/j3sz/497M/+PezP/i3sz/4t7M/+Le + zP/i3sv/4t3K/+Lcyv/h3Mj/4dvH/+Dbw//g2sT/4dvE/+HcyP/i3cv/4t/O/+Tg1P/k4dn/5OPc/+Xj + 3v/l5eD/5eXi/+Xl4v/l5OL/5OLf/6ajl/+in5H/m5iJ/52ai/+mo5b/qKWY/5uYif+fnI7/rKmd/5+c + jv+opZj/l5SE/6ilmP+hnpD/qKWY/5Cliv8ONVD/DDNO/wwzTv8NNE//DjZR/w85VP8SPln/E0Je/xNI + ZP8iWXT/e63B/0SBnf8fVXX/H1V1/x9VdZH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wG3pE+lvatal828dre7pkqrqY8am6iPGZuojxmbqI4Zm6iO + GJunjhibp44Ym6eNF5unjReZp44Ym6eNGJmmjReZp40XmaaNF5mmjReZpowWmaaMFpmmjBaXpYwVl6aM + F5emjBaXpYsWl6WLFpelixWXpYwXl6WMFpeljBaXpYwWl6WMFpemjBeXpowXl6aMF5emjRmXp40ZlaeN + GZWnjhqXp44bl6eOG5enjhuXp44blaeOG5WnjhuVp44blaiPHJWojx2XqI8dl6iPHZeojx2XqZAelamQ + HpWpkB6VqZAelamQHpWpkB6VqZAelbGeQ8O5qmD/w7Jo/8OyaP/Csmj/wrJo/8KyaP/Csmj/wrJo/8Ky + aP/Csmj/wrJo/8KyaP/Br2T/vqxf/7yqW/+9qlv/vaxf/8CuYv/CsWf/w7Np/8Ozaf/Ds2n/w7Np/8Oz + af/Dsmj/w7Jp/8KyaP/Csmj/wrJo/8KyaP/Csmj/wrJo/8OyaP/Dsmj/w7Jo/8Oyaf/Csmj/wrJo/8Ky + aP/Csmj/wrJo/8KyaP/Csmj/wrJo/8KyaP/Csmj/w7Np/8Ozaf/CsWf/v65i/72sXv+7qVn/vKpb/72s + Xv/ArmL/w7Np/8Ozaf/Ds2n/w7Np/8Ozaf/DtGn/w7Rp/8O0af/DtGn/w7Rp/8O0af/CtGj/wrRo/8O0 + aP/Ds2j/w7No/8OzaP/Ds2n/w7Np/8Ozaf/DtGn/w7Rp/8O0af/DtGn/w7Rp/8O0af/DtGn/w7Rp/8Oz + av/Ds2r/w7Nq/8Ozav++rmD/vKtc/7upWf+9rF3/0sKJ/9HCiv+2pFD/rZo+/5F+I/+5rXX/5N/N/+Pf + zf/j383/49/N/+Pfzf/j3s3/497N/+Pezf/j3s3/497M/+PezP/j3sz/497M/+PezP/j3sz/497M/+Pe + zP/j3sz/4t7L/+Ley//i3cr/4d3I/+HbyP/h28T/4NrD/+HbxP/h28f/4t3L/+Lfz//j4NP/5OHY/+Tj + 3P/m497/5uXg/9rWx//W0Lz/0sqy/9zXy/+xsKX/npuM/56bjP+dmov/pqOW/6ilmP+dmov/oJ2P/6uo + nP+fnI7/qKWY/5mWh/+mo5b/paKV/6Ogkv+bq5T/DzZR/wwzTv8MM07/DTRP/w42Uf8POFT/ETxY/xNB + Xf8USGT/Jlx2/3Cluf84d5X/H1V1/x9Vdf8fVXWF////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bt6RPG7ekT+W7qFCd1MeIv6qSH52ojhmbp44Ym6eO + GJmnjhiZp40XmaeNF5mnjReZpo0WmaeNF5mnjReZpowWmaaNFpemjBaXpowWl6WMFZemjReXpowXl6WM + FpeljBaXpYwXl6WMF5eljBaXpYwWl6aMF5WmjBeVpowXlaaMF5WmjBeVp44bl6eOG5WnjhuVp44blaeO + G5WojxyVqI8claiPHZWojx2VqI8dlaiPHZepkB6VqZAelamQH5epkB+XqZAfl6mQH5epkB+XqZAfl6mQ + H5epkB+VqZAflamQH5WpkB+VqZAflamQH5WslSqht6df/8OzaP/Ds2j/w7Np/8Ozaf/Ds2n/w7Rp/8O0 + af+/rmP/vaxf/7yrW/+9rF//v61h/8GwZv/Ds2r/w7Nq/8Ozav/Ds2r/w7Nq/8Ozav/Ds2r/w7Np/8Oz + af/EtGr/xLRq/8S0av/Es2n/xLNp/8Szaf/Es2n/xLNq/8Ozaf/Ds2n/w7Np/8Ozaf/Dsmn/w7Np/8O0 + af/DtGn/w7Rp/8O0af/EtGn/xLRp/8Szaf/Br2P/vq1f/7yrXP+7qlr/vqte/7+uYv/CsWf/xLNp/8S0 + av/EtGr/xLRq/8O0av/DtGr/w7Rq/8O0av/EtGn/xLRp/8S0af/EtGn/xLRq/8S0av/EtGr/xLRq/8O1 + af/EtWr/w7Vp/8O1af/DtWn/w7Rp/8O0af/DtGn/w7Rq/8O0av/DtGr/w7Rq/8S0av/EtGr/xLRq/8Cu + Y/+9rF7/vKpa/72sXf+/rmH/wLBk/8KyaP/EtGv/xLRr/8q5df/a0KD/yrt+/7ShSv+mlDv/kH4n/+Tf + zf/k383/5N/N/+Pfzf/j383/49/N/+Pfzf/j3s3/497N/+Pezf/j3s3/497N/+PezP/j3sz/497M/+Pe + zP/j3sz/497M/+Pey//j3sv/4t3K/+Hdyf/h3Mf/4NzE/+Dbw//h28T/4dvH/+Pdyv/j3s3/2tO8/9fP + t//Ty7D/1cy0/9nUv//e2cz/4t/W/+bm4v/m5uL/uby0/5uYif+fnI7/m5iJ/6ShlP+pppr/op+R/56b + jP+opZj/op+R/6ilmP+cmYr/o6CS/6ekl/+joJL/nqqV/xE4U/8MM07/DDNO/ww0T/8NNlH/DzhT/xE8 + V/8TQFz/E0Vh/ydcdv9qobb/MXCQ/x9Vdf8fVXX/H1V1df///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wG3pE+Hvatan8m4ba/Arlmtp44YmaeN + F5mnjReZp40XmaaNFpenjRaXp40Xl6aNFpemjRaXpo0Wl6aNFpenjReXp40Xl6aNF5WmjBaVpo0Yl6WM + F5emjReVpYwXlaaMF5WmjRiVpo0YlaaNGJWmjRmVpo0ZlaeOG5WnjhuVqI8blaiPHZWojx2VqZAdlamQ + HZWpkB2VqZAelamQH5epkB+XqZAfl6mQH5epkB+XqZAfl6qRIJWqkSCVqpEglaqRIJWqkSCVqpEglaqR + IJWqkSCVqpEglauSIJWrkiCVq5IglauSIJWrkiCVq5IglbipYP/BsWn/w7Np/8KxaP+/rmL/vqtd/76r + Xv+/rWH/wrBm/8Kyav/DtGv/w7Rr/8O0a//DtGv/xLVr/8S1a//EtWv/xLVr/8S1a//EtWv/xLVr/8S0 + bP/EtGz/xLRs/8S0bP/EtGz/xLRr/8S0a//EtWr/xLVq/8S1av/EtWr/x7Vr/8e1a//HtWv/xLVq/8S1 + av/EtWr/xLVq/8GxZ/+/rmL/vqte/7yqW/++q17/wK5i/8GxZv/EtGr/xLRq/8S0av/EtGr/xLRq/8e0 + av/HtGr/x7Rq/8e0a//HtGv/x7Rr/8S0a//EtWv/xLVr/8S1a//EtWr/xLVq/8S1av/EtWr/xLVq/8S1 + a//EtWv/xLVr/8S1a//HtWv/xLVq/8S1av/EtWr/xLRq/8S0av/EtGr/wbBl/76tYP+8qlz/vKtd/76u + Yf/AsGT/wrJn/8S1a//EtWv/xLVr/8S0a//EtGv/xLRr/8S0a//EtGz/1sqV/9PIj/+1o07/rptB/5F+ + I/+/tYL/5N/N/+Tfzf/k383/5N/N/+Tfzf/j383/49/N/+Pfzf/j383/49/N/+Pfzf/j383/49/N/+Pf + zP/j38z/49/M/+PfzP/j38z/49/L/+Peyv/i3sn/4t3H/+LcxP/Z0bP/1cys/9LHpf/SyKj/1s6y/9vU + vv/g28z/5ePb/+bk3v/n5uH/5+bh/+fm4v/n5uL/5+bi/8rNx/+fnI7/o6CT/52ai/+lopX/p6SX/6Og + k/+fnI7/pqOW/6Ogkv+opZj/o6CS/56bjP+opZj/op+R/6Ormf8TPFX/DDNO/wwzTv8MNE//DTVQ/w43 + Uv8QO1b/Ej9b/xNDX/8qXXf/bKO6/ylpiv8fVXX/H1V1/x9VdWf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bt6RPDbekT+W8qlSV1MiLva2V + J5unjRaXp40Wl6aNFpenjReXp40Xl6aNFpemjRaXp40XlaeNF5WnjReVpowWlaaNGJWmjReVpo0XlaaN + GJWmjRiVpo0YlaeNGJWnjhqVp44alaeOGpWojxuVqZAdlamQHZWpkB2VqZAdlamQHpWpkB6VqZAelamQ + HpWpkB6VqpEglaqRIJWqkSCVqpEglaqRIJWqkSCVqpEglauSIperkiKXq5IilauSIpWrkiKVrJMilayT + IpWskyKVrJMilayTIpWskyKVrJMilayUJJWslCSVrJQklayUJJW5ql71uqlc/8CtYf/Br2X/w7Jp/8e0 + a//HtW3/x7Vt/8e1bf/ItW3/yLVt/8i1bf/ItW3/yLVu/8i1bv/HtW7/x7Vu/8e1bv/HtW7/x7Vu/8e1 + bv/HtW7/x7Vt/8i2bv/Itm7/yLZu/8e2bv/HtW7/x7Vu/8e1bv/HtW3/x7Vs/8e1bP/HtWv/x7Vs/8Gx + Zf/ArmL/vqxe/7+sX/+/rmL/wbFl/8S1a//HtWv/x7Vr/8e1a//HtWv/x7Vr/8e0a//HtGv/x7Rr/8e1 + a//HtWv/x7Vr/8e1a//HtWv/x7Vr/8e1a//HtWz/x7Vs/8e1bP/EtWz/x7Vs/8e1bP/HtWz/x7Vs/8e1 + bP/HtWz/x7Vs/8e1bP/HtWz/x7Vt/8e1bf/EtWz/vq5h/72rXv+9q13/vq1h/8CvZP/Csmf/xLVr/8S1 + a//EtWv/xLVs/8S1bP/EtWz/xLVs/8S1bP/HtWz/x7Vs/8e0bP/HtGz/x7Vs/8y7ef/b0KD/yrl7/7Sg + Sf+jkDj/k4Ir/+Xgzf/l4M3/5eDN/+Xgzf/l4M3/5eDN/+Xgzf/k4M3/5ODN/+Tgzf/k4M3/5N/N/+Tf + zf/k383/5N/N/+TfzP/k38z/39nB/9vTuP/XzrD/08mo/9LIp//WzKz/2NGz/9zVuf/i3cT/4t7J/+Pe + zf/j4NH/5eLW/+Xj2//m5N7/5+Xg/+fm4v/n5uP/5+bi/+fm4v/e3tn/nZqL/6ilmP+bmIn/op+R/6aj + lv+opZj/mpeI/6ShlP+koZT/qaaa/6Ogkv+dmov/rKmd/52ai/+mq5r/GEFX/wwzTv8MM07/DDNO/w01 + UP8ON1L/DzpV/xE+Wf8RQV3/LF95/3Kpvv8lYIH/H1V1/x9Vdf8fVXVX////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wG3pE9huqdUs8Kx + YafItmyxpo0VlaeOF5enjReVp40XlaeOGJWnjReVp40XlaeNF5WnjhiVpo0YlaaNGJWnjRiVp40Yk6eN + GJOnjhqVp44alaeOGpWnjhqVqZAdlamQHZWpkB2VqZAdk6mQHpWpkB6VqZAelamQHpWqkR+VqpEflaqR + H5WqkR+VqpEglauSIpWrkiKVq5IilayTIpWskyKVrJMilayUJJWslCSVrJQklayUJJWslCSVrJQklayU + JJWslCSVrJQkla2VJpWtlSaVrZUmla2VJpWtlSaVrZUmla2VJpWtlSaVs6FHv72tZ//Itm7/yLZu/8i2 + bv/Itm7/yLZu/8i1bv/ItW7/yLVu/8i1bv/ItW//yLVv/8i1b//ItW//ybZv/8m2b//Jtm//ybZv/8m2 + b//Jtm//ybZv/8i2b//Itm//yLZv/8i2b//Itm//yLZv/8e2b//Htm//wrRo/8GvY/+/rWH/vq1g/8Cu + Y//CsWb/xLRq/8i2bv/Itm7/yLZu/8i2bv/Itm7/x7Zt/8e2bf/Htm3/x7Vs/8e1bP/HtWz/x7Vs/8e1 + bP/HtWz/x7Vs/8e1bP/ItWz/yLVs/8i1bP/ItWz/yLVs/8i1bP/ItWz/yLVs/8i1bf/HtW3/x7Vt/8e1 + bf/Htm3/x7Zt/8e2bf/Ar2P/vqxf/72qXP+/rWD/wa9j/8KyZ//EtWz/xLZt/8S2bf/Etm3/x7Zt/8e2 + bf/Htm3/x7Zt/8e2bP/Ht2z/x7ds/8e3bP/Ht2z/x7ds/8e3bP/Ht2z/x7ds/8e2bP/Htm3/2M2Y/9TJ + kP+1okz/r5xD/499I//Iu43/5eDN/+Xgzf/l4M3/5eDN/+Xgzf/l4M3/5eDN/+Xgzf/k4M3/5ODN/+Tg + zf/g2sL/3NS6/9jPs//Uyqz/08ip/9bNr//a0rb/3ta9/+Teyv/j3cf/493H/+Lcw//i3MT/4t3E/+Le + yP/j38v/4+HR/+Xh1f/l4tr/5+Td/+fl4P/n5uH/5+bj/+fm4//n5uP/5+bj/5+cjv+opZj/m5iJ/6Ge + kP+mo5b/qaaa/5uYif+in5H/pqOW/6mmmv+opZj/mJWF/6ypnf+em4z/p6ia/x9HWP8MM07/DDNO/wwz + Tv8NNE//DTZR/w85VP8RPVj/ED9c/y5he/96scj/I1+A/x9Vdf8fVXX/H1V1Sf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bt6RPA7ek + T8++rVmR08OFubGbMp2njRaVp44XlaeOF5WnjReVp44YlaeOGJOnjhiTp40Yk6eNGJOnjRiTp44alaeO + GpWnjhqTqI8ck6iPHJOpkByTqZAek6mQHpWpkB6VqZAelamQHpWqkR+TqpEfk6qRH5OrkiGVrJMhlayT + IpWskyKVrJMilayUJJWslCSVrJQklayUJJWslCSVrJQkla2VJpWtlSaVrZUmla2VJpWtlSaVrZUmla2V + JpWtlSeVrZUnla2VJ5WulSeVrpUnla6VJ5WuliiTrpYok66WKJOvlymTr5cpk7CbNaG6q2T/yLZw/8i2 + cP/ItnD/yLZw/8m3cP/Jt3D/ybdw/8m3cP/Jt2//ybdv/8m3b//Jt3D/ybhx/8m4cf/Jt3D/ybZw/8m2 + cP/Jt3H/ybdx/8m3cf/JtnD/ybZv/8m2b//Htm3/w7Jo/8GuZf+/rWD/wbBk/8KxZ//EtWv/yLdw/8i3 + cP/It3D/yLZw/8i2cP/ItnD/yLZw/8i2b//It2//yLdv/8i3b//It2//ybdw/8i3b//It2//yLdv/8i2 + b//Itm7/yLZu/8i1bP/ItW3/yLVt/8i1bf/ItW3/yLZt/8i2bf/Itm3/yLZt/8i2bf/Itm3/yLZt/8Kx + Zv+/rWH/vqtd/7+tYf/Br2T/w7Fn/8e0a//Itm7/yLZu/8i2bv/Itm7/yLdu/8i3bv/It27/x7dt/8e3 + bf/Ht23/x7dt/8e3bf/Ht23/x7du/8e3bf/Ht23/x7dt/8e3bf/Ht23/x7dt/8e3bf/Ht23/x7Zt/82+ + fP/a0Z7/yLh4/7OgR/+hjzP/l4Yx/+Xgzv/l4M7/5eDN/+Xgzf/l4M3/5eDN/+Xgzf/d1rz/2dG0/9XM + rf/TyKj/1s2v/9rTuP/k4M3/5N/N/+Tfzf/k383/5N/M/+Tfy//k3sv/497K/+PdyP/i3cf/4tzE/+Pd + x//j3sn/49/M/+Pg0P/l4dX/5ePb/+bl3f/n5OD/5+bi/+fm5P/n5uT/5+bk/+fm5P+npJf/o6CT/56b + jP+fnI7/pqOW/6mmmv+bmIn/n5yO/6qnm/+joJP/qaaa/5iVhf+uq5//nJmK/6mnm/8rV1r/DDNO/wwz + Tv8MM07/DDRP/w02Uf8OOFP/EDxX/xA/W/8sYHr/f7bM/yNfgP8fVXX/H1V1/x9VdTn///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wG3pE89uKVRy76tWZ3Qv321p40Xk6eOGZOnjhiTp44Yk6eOGJOnjhiTqI4Zk6iPGpOojxqTqI8ak6mQ + HJOpkByTqZAck6mRHZOqkR+TqpEfk6qRH5OrkiCTq5Igk6uSIJOskyGVrJMhlayTIZWskyKVrJQklayU + JJWslCSVrJQkla2VJpWtlSaVrZUmla2VJpWtlSaVrZUnla2VJ5WtlSeVrpUnla6VJ5WulSeVrpUnla+X + KZWvlymVr5cpla+XKZWvlymVr5cpla+XKZWvlymVr5cplbCYK5WwmCuTsJgrk7CYK5OwmCuTuqxl/8i2 + b//Jt3D/ybdw/8m3cf/Jt3H/ybdx/8m3cf/Jt3H/ybdx/8m3cf/Jt3H/ybdx/8m4cv/JuHL/yblz/8m5 + c//JuXP/ybly/8i3b//Ds2v/wbBn/8CvY//AsGX/wrJo/8e1bf/Jt3L/yrhy/8q4cv/KuHL/yrly/8m5 + cv/IuXL/yLly/8m5cv/JuHH/ybhx/8m4cf/Jt3H/ybdx/8m3cf/Jt3D/ybdw/8m3cP/Jt3D/ybdw/8m3 + cP/IuHD/yLhw/8i4cP/It3D/yLdv/8i3b//Itm3/yLZt/8i2bf/Itm3/w7Nq/8GuYv+/rF7/v65g/8Gw + ZP/DsWf/x7Rr/8m3bv/It27/yLdu/8i3bv/It27/yLdu/8i3bv/It27/yLdu/8i3bv/It2//yLdv/8i3 + b//It2//x7du/8i3b//Ht27/x7du/8e3bv/Ht27/x7du/8e3bv/Ht23/x7dt/8i4bv/IuG7/yLhu/8i4 + bv/JuG//2tCc/9XJkv+1okz/sJ1F/498Iv/Owpr/5eDO/9/YwP/a0bb/1syu/9LIp//Wza7/2tK2/+DZ + wf/l4M3/5eDN/+Xgzf/k4M3/5ODN/+Tgzf/k4M3/5N/N/+Tfzf/k38z/5N7L/+Peyf/j3cj/4tzH/+Lc + xP/i3Mf/493I/+Tey//k4ND/5eHU/+Xj2v/m5d3/5+Xf/+fn4v/n5uT/5+bk/+fm5P/n5uT/rq6l/6Cd + j/+dmov/npuM/6ekl/+qp5v/n5yO/5uYif+sqZ3/o6CT/6mmmv+Wk4P/rquf/56bjP+pppr/OWZd/wwz + Tv8MM07/DDNO/ww0T/8NNVD/DjdT/w86Vv8RP1r/L2J9/3Sqv/8iYID/H1V1/x9Vdf8fVXUr////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AbekT6+/rV2Tz758sbikRqGnjhiTqI4Zk6iOGZOojxqTqI8ak6iPGpOpkByTqZAck6mQ + HJOpkR2TqpEfk6qRH5OrkiCTq5Igk6uSIJOskyKTrJMik6yTIpOskyKTrJQklayUJJWslCSVrZUmla2V + JpWtlSaVrZUmla2VJ5WulSeVrpUnla6VJ5WuliiTr5cpla+XKZWvlymVr5cpla+XKZWvlymVr5grla+Y + K5WvmCuVr5grlbCZLZOwmS2TsJktk7CZLZOwmS2TsJktk7CZLZOxmS2TspovlbKaL5Wymi+Vspsvk76w + affDtW//yrl0/8q5dP/KuHT/yrh0/8q5df/KuXX/yrl1/8q5df/LuXX/y7l1/8u5df/KuXT/yrl1/8i3 + cv/EtGv/wbFm/8GxZv/Csmj/xLVs/8i3cf/KunT/yrp0/8q6c//KunP/yrp0/8q6dP/KuXT/yrl0/8q5 + dP/KuXP/yrlz/8q5c//KuXP/yblz/8m5c//JuXP/ybpz/8m6c//JuXL/ybhy/8m4cv/JuHL/ybly/8m4 + cf/JuHH/ybhx/8m4cf/IuHD/yLhw/8m4cf/Jt3H/wrFm/7+uYf+/rl//wa9k/8OyZ//HtWv/ybdu/8m4 + bv/JuG7/ybhu/8m4bv/JuG7/ybhv/8m4b//JuG//ybhv/8m4b//JuG//ybdv/8m3b//Jt2//yLdv/8i3 + b//It2//yLdv/8i3b//It2//ybhw/8i4b//IuG//yLhv/8i4b//IuG//yLhv/8i4b//IuG7/yLhu/8m4 + b//JuHD/ybhv/9DAgP/a0J7/wrNw/7KeRf+eii3/mIcy/9bNrv/a0bb/3da9/+Xgzv/l4M7/5eDO/+Xg + zv/l4M7/5eDO/+Xgzv/l4M7/5eDO/+Xgzv/k4M7/5ODO/+Tgzv/k4M7/5N/N/+TezP/j3sv/493J/+Lc + yP/i3cT/4tzH/+PdyP/j3sv/5N/O/+Xh1P/m49n/5+Td/+bl3//n5+L/5+fk/+fn5P/n5uT/5+bk/7i8 + tf+fnI7/n5yO/5+cjv+koZT/rKmd/52ai/+al4j/raqe/6Ogkv+pppr/mJWF/66rn/+fnI7/qKWY/0l0 + Yv8MNE//DDNO/wwzTv8MM07/DTRP/w43Uv8POlX/ET5Z/zBlf/9on7f/IFx9/x9Vdf8fVXX/H1V1G/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wG3pE8lt6RQ376tWJfVx4q3qY8ck6iPG5OojxuTqZAck6mQHZGpkB2RqZEdk6mR + HZOqkR+Tq5Igk6uSIJOrkiCTrJMik6yTIpOskyKTrJQkk6yUJJOslCWTrpUnla6VJ5WulSeVrpYnk66W + KJOuliiTrpYok6+XKZWvlymVr5cpla+XKZWvlymVr5grla+YK5WvmCuTr5grk6+YK5OwmS2VsJktlbGa + L5Wxmi+VsZovlbKaL5Wymi+VspovlbKbMJOymzCTspswk7KbMJOymzCTspswk7KbMJOymzCTspsxk7Kc + MpW5qlvPwbJu/8u7dv/Lu3b/y7t2/8u7d//Lunf/y7p2/8u6dv/Lunb/y7l1/8e1b//Csmj/wrBn/8Oz + av/HtW3/ybhx/8u6d//Lunf/y7p2/8q6df/KunX/yrp1/8q6df/KunX/yrp1/8u6df/LunX/y7p0/8u6 + dP/Lu3X/y7t1/8u6df/LunX/y7p1/8u6dP/KunT/yrp0/8m6dP/JunT/ybp0/8m6c//JunP/yrp0/8q5 + dP/KuXT/yrl0/8q6c//EtGv/wbBl/8CuYv/CsWb/w7No/8e2a//JuG//ybhx/8m4cv/JuG//ybhv/8m4 + b//JuG//ybhv/8m4b//JuG//ybhv/8m4b//JuG//ybhv/8m4b//JuG//ybhv/8q4cP/KuHD/yrhw/8q4 + cP/KuHD/ybhw/8m4cP/JuHD/ybhw/8m4cP/JuHD/ybhw/8i4b//IuG//yLhv/8i4b//IuHD/yLhw/8m4 + cf/HtGz/wrFn/8GvY//ArF//18uW/8/BiP+1okv/sJ5H/417If/Sy6P/5eHO/+Xhzv/l4M7/5eDP/+Xg + z//l4M//5eDO/+Xgzv/l4M7/5eDO/+Xgzv/l4M7/5eDO/+Xgzv/l4M7/5ODO/+Tgzf/k38z/49/L/+Pd + yv/j3Mj/4t3H/+Lcx//j3cf/497K/+Tfzv/l4dP/5uPY/+bk3P/n5d//6Obh/+fn4//n5+T/3dnM/9vW + x//M0Mv/nZqL/6Kfkf+fnI7/o6CS/6ypnf+fnI7/m5iJ/66rn/+in5H/qqeb/5mWhv+sqZ3/npuM/6il + mP9ih3L/DDRP/wwzTv8MM07/DDNO/ww0T/8NNlH/DjlU/xE9WP80Z4H/YJuz/x1Zev8fVXX/H1V1/x9V + dQ////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AbekT4e9q1qfy7tzqcGwXaeqkR2RqpEdkaqRHpOqkR6TqpEek6yT + IJGskyCRrJMgka2UIpOtlCKTrZQik62VJJOtlSSRrpYnk66WJ5OulieTrpYnk66WKJOuliiTrpYok6+X + KZWvlymVr5cpla+XKZOvmCuTr5grk6+YK5OvmCuTsJktlbCZLZWxmS2VsZktlbKZL5WymS+Vspswk7Kb + MJOymzCTspswk7KbMJOznDGVs5wxlbOcMpWznDKVs5wylbOdM5WznTSVs500lbOdNJWznTSVtJ00lbSd + NJW0nTSVtKFDqb+xbf/Mu3f/zLt3/8u7d//Lunf/yblz/8e1bf/DsWn/x7Nr/8i0b//JuHL/y7p2/8u7 + eP/Lu3j/y7t4/8u7eP/Mu3f/zLt3/8y7d//Mu3f/zLt3/8y7d//Mu3f/zLt3/8u7dv/Lu3b/y7t2/8u7 + dv/Lu3b/y7t2/8u7dv/Lu3X/y7t1/8y7dv/Mu3b/zLp2/8y6dv/MunX/zLp1/8y6df/LunX/y7p1/8i3 + bv/Csmj/wK9k/8GxZ//Ds2r/x7Vu/8q4cv/LunT/y7p0/8u5c//LuXP/yrly/8m5cv/JuXL/ybhy/8m4 + cv/JuHH/ybhw/8m4cP/KuHD/yrhw/8q4cP/KuHD/yrhw/8q5cP/KuXD/yrlw/8q5cP/KuXD/yrlw/8q5 + cP/KuXD/yrhw/8q4cP/KuHD/ybhx/8m4cf/JuHH/ybhx/8m4cf/JuHH/ybhx/8e1bP/Dsmj/wq9k/8Ct + Yf/Ar2P/wrFn/8Sza//KuXL/yrly/9HDhv/a0J7/wrNt/7GeRP+ciCv/n44//+Xhz//l4c//5eHP/+Xh + z//l4M//5eDP/+Xgz//l4M//5eDO/+Xgzv/l4M7/5eDO/+Xgzv/l4M7/5eDO/+Xhzv/l4c3/5eHM/+Pg + y//k38r/5N7I/+Pdx//j3cf/5N7I/+Tfy//l4M7/5eLS/+LczP/d18P/2tK9/9bNtf/WzbT/2tO//93Z + y//i4Nb/39/a/52ai/+koZT/oJ2P/6GekP+sqZ3/op+R/5mWh/+uq5//oZ6Q/6qnm/+Zlob/q6ic/6Ge + kP+opZj/eJl6/w01T/8MM07/DDNO/wwzTv8MNE//DTVR/w44U/8QO1f/Om2G/12as/8cVnf/H1V1/x9V + df////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wG3pE8Pt6RP776sWZPYzJS5rpcolaqSHpGrkiCRrJMhkayT + IZGtlCORrZQjka2VJJGtlSSRrZUkka6WJpOuliaTrpYmk66WKJOvliiTr5Yok6+XKZOvlymTr5cpk6+Y + K5OvmCuTsJkrk7CZK5OxmS2VsZktlbGaLpOymi+Tspovk7KaL5Oymi+Tspovk7OcMZWznDKVs5wylbOc + MpWznDKVs500k7OdNJOznTSTs500k7SdNpW0nTaVtJ02lbSdNpW0nTaVtJ02lbWeN5W1njeVtZ83lbWf + N5W1nzeVtZ83lbagOpe+rmz/ybdx/8Syav/Hs2z/ybZv/8m4cv/Lu3b/zbx5/828ef/NvHn/zbx5/828 + ef/NvHn/zbx5/828ef/NvHn/zbx5/828ef/NvHn/zbx5/829ef/NvXn/zL13/8y9d//MvXj/zLx4/8y8 + eP/Mu3j/zLt4/8y7d//Mu3f/zLt3/8y7d//Mu3f/zLt3/8y7dv/Mu3b/yrpy/8e0bP/DsWf/wrJo/8Sz + bP/Itm//yblz/8u7dv/Lu3b/y7t1/8u7df/LunX/y7p1/8u6df/LunT/y7p0/8y6df/MuXT/zLl0/8q5 + c//KuXP/yrlz/8q5c//KuXL/yrlx/8q5cf/KuXD/yrlw/8q5cP/KuXD/yrlw/8q5cf/KuXH/yrlx/8q5 + cf/KuXH/yrlx/8q5cf/KuXH/yrlx/8q4cf/KuHH/yLVt/8Szaf/CsWX/wK5i/8GuYv/CsWb/xLRr/8q5 + c//KuXL/yrly/8q5cv/KuXL/yrly/8q5cv/KuXP/3dOk/9TKkv+1okv/sJ5I/416If/Wz63/5eHP/+Xh + z//l4c//5eHP/+Xhz//l4c//5eHP/+Xhz//l4c//5eHP/+Xhzv/l4c7/5eHO/+Xhzv/l4c7/5eHN/+Xg + zP/k4Mz/4+DK/+Tfyf/j3sf/3ti9/9vStP/Xzq//1Mqq/9TLrf/Y0bf/3dfD/+Le0f/p5+H/6eji/+no + 5P/p6OT/6ejk/+jo5P+gnY//qKWY/52ai/+fnI7/qqeb/6ShlP+Zlof/rKmd/6ShlP+qp5v/m5iJ/6qn + m/+in5H/qKWY/4Gefv8ONlD/DDNO/wwzTv8MM07/DDRP/w01UP8ON1P/DjpV/0Fyiv9hn7f/G1Jy/x9V + df8fVXXx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AbekT2m7qFatyrhto8u4b6urkiCRrJMhka2U + I5GtlCORrpYlka6WJZGvlieRr5Ynka+WJ5GvliiTr5Yok6+XKZOwmCqTsJgqk7CZK5OwmSyTsJksk7Ga + LpOxmi6TsZouk7GaLpOymi+Tspovk7KaMJOymzCVspswlbOcMpWznDKTs500k7OdNJO0nTSTtJ00k7Sd + NJO1nTaVtZ02lbWdNpW1nTaVtZ02lbWfN5W1nzeVtaA4lbWgOJW2oDmVtqA5lbagOZW2oDmVtqA5lbag + OpW2oDqVtqA5lbagOZW3oDuTvrFt+8q5df/OvXn/zr16/869ev/OvXr/zr16/869ev/OvXr/zr16/869 + ev/Ovnv/zr57/86+e//NvXr/zb16/829ev/NvXr/zb16/829ev/OvXr/zr16/869ev/OvXr/zb15/829 + ef/NvXj/zb14/829eP/NvXn/zbx5/828ef/Lunb/ybZx/8Szav/Es2r/x7Rt/8i2cP/KunP/zLx3/8y8 + d//Mu3f/zLt3/8y7dv/Nu3f/zbt3/8y7d//Mu3f/zLt2/8y8dv/MvHb/zLt2/8y7dv/Mu3X/zLt1/8y7 + df/Mu3X/zLp0/8q6c//KunP/yrl0/8q5dP/KuXT/yrlz/8q5c//KuXP/yrly/8q5cv/KuXL/yrly/8q5 + cv/LunP/y7pz/8u6c//Jt3D/x7Rr/8OxZ//BsGP/wK9i/8KxZv/HtGv/y7ly/8q5cv/KuXL/y7ly/8u6 + dP/LuXP/yrlz/8q5c//KuXL/yrly/8u5cv/LuXL/y7ly/9PEiP/a0Jz/v7Bp/7CcQf+ahin/o5NG/+bi + z//m4s//5uLP/+biz//l4s//5eLP/+Xiz//l4s//5eHP/+Xhz//l4c//5eHP/+Xhzv/l4c7/5eHO/+Pf + yv/g2cD/29S4/9fOr//Uyaf/08mn/9bOrv/a07T/4NrA/+Xgzf/l4NH/5uPX/+fk3P/n5t3/6efh/+no + 4v/p6OT/6ejk/+no5P/p6OT/paOV/6ekl/+em4z/nZqL/6mmmv+npJf/mJWF/6mmmv+lopX/qqeb/5+c + jv+mo5b/paKV/6ajlv+JoYT/DzdS/wwzTv8MM07/DDNO/wwzTv8NNVD/DTZS/w04VP9Hd47/ZaO8/xxT + c/8fVXX/H1V14f///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wG3pE8Dt6RPz7+uXI3Wyo61t6E9ma6W + JZGuliWRr5cnka+XJ5GvlyeRr5gpka+XKZGwmCqTsJgqk7CYKpOwmSyTsJksk7CZLJOxmi6TsZouk7Ka + MJOymjCTs5owk7OaMJOzmzCTs5swk7OcMJO0nTSTs50yk7SdNJO1nTaVtZ02lbWdNpW1nTaVtZ42k7Wf + N5O1nzeTtZ83k7agOZW2oDmVtqA5lbagOpW2oDqVtqA6lbagOpW2oDqVt6A7lbegO5W3oDuVt6A7lbeh + O5W4oj2VuKI9lbiiPZW4oj2VuKI9lb2ybefJuXf/zr17/86+fP/Ovnz/zr58/86+fP/Ovnz/zr58/86+ + fP/Ovnv/z758/8++fP/Pvnz/z758/8++fP/Pvnz/z758/8++fP/Pvnz/z758/86+e//Ovnv/zr57/86+ + e//Ovnv/zr57/829ef/JuHL/x7Rt/8Sza//HtG7/ybdy/8u6dP/NvHj/zrx6/828ef/NvHn/zbx5/828 + ef/NvHn/zb14/829eP/NvXj/zbx4/828eP/NvHf/zbx3/8y8d//MvHf/zLx3/8y8d//MvHf/zLt3/8y7 + d//Mu3b/zLt2/8y7dv/Mu3b/zLt2/8q6dP/KunT/y7p1/8u6df/LunT/y7p0/8u6dP/LunT/y7pz/8q4 + cv/ItWz/w7Jo/8GwZP/Br2L/wrFm/8e0a//LunP/y7pz/8u6c//LunP/y7pz/8u6cv/LunL/y7pz/8u7 + dP/Lu3T/y7t0/8u7dP/LunP/y7pz/8u6cv/LunL/y7py/8u5cv/LunP/3tWm/9XKkv+1okz/sJ5I/4x6 + IP/b1LT/5uLP/+biz//m4s//5uLP/+biz//l4s//5eLP/+Xiz//l4s//497L/9/Zwf/b1Ln/2M+y/9TK + qv/Uy6v/2NCy/9vUuP/g2sD/5d/J/+TeyP/k3sT/497E/+Tfyf/l4c3/5eLR/+bi1f/n5Nv/5+be/+nm + 4f/p6OL/6ejk/+no5P/p6OT/6ejk/6qtpP+lopX/n5yO/56bjP+opZj/qqeb/5iVhf+lopX/oZ6Q/6qn + m/+koZT/o6CS/6ilmP+mo5b/laeO/xE5U/8MM07/DDNO/wwzTv8MM07/DDRP/w02Uf8NOFT/R3iQ/2Cf + tv8dVXX/H1V1/x9VddP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AbekT0m4plLDyLhqndHC + gq+vlyeRr5cnka+YKZGvmCmRsJgqk7CYKpOwmCqTsJksk7GaLJGymi6Tspouk7KaLpOzmzCTs5swk7Ob + MJOznDCTs5wwk7OcMJOznTKTs50yk7OdM5O0nTSTtJ00k7WeNpO1nzeTtZ83k7WfN5O1nzeTtqA5lbag + OZW2oDqVtqA6lbegO5W3oTyVt6E8lbehPJW3ojyVt6I8lbeiPJW3ojyVuKM+lbmjP5W5oz+VuaM/lbmj + P5W5oz+VuaM/lbmjP5W5oz+VuqNAlbqjQJW4qFO1yLZ2/86/ff/Pv37/z79+/8+/fv/Pvn3/z759/8++ + ff/Pvn3/z759/8++ff/Pv33/z799/8+/ff/Pv33/z799/8+/fv/Pv33/z799/8+/ff/Pv33/z799/827 + d//Jt3H/x7Ns/8i1b//LuHT/zLp2/869e//Ovnz/zr58/86/fP/Ovnz/zr57/86+e//Ovnv/zr17/869 + e//NvXr/zb16/829ev/NvXv/zb17/829ev/NvXr/zbx6/828ev/NvHr/zbx5/828eP/MvHj/zLx4/8y8 + d//NvXj/zbx4/828eP/NvHf/zbx3/828d//NvHf/zbx3/8y8dv/LvHb/yrlz/8i2bv/Es2j/wrFl/8Cv + Y//DsWf/x7Vr/8q4cf/MunP/zLpz/8y6c//MunP/zLpz/8y6c//MunP/y7pz/8u6c//LunP/y7t1/8u7 + dP/Lu3T/y7t0/8u7dP/Lu3T/y7t0/8u6c//LunP/y7pz/8u6c//LunL/y7py/9TIi//az5v/va1j/6+b + P/+YhSb/p5hO/+biz//m4s//5uLP/+biz//k38v/4NnA/9zVuf/Y0LL/1Muq/9XMrP/Z0rX/5eHP/+Xh + z//l4c//5eHP/+Xhzf/k4Mz/5ODL/+Xfyf/k3sj/5N7H/+Tex//l3sn/5ODM/+Xi0P/m49X/5+Xb/+fm + 3v/o5uD/6ejj/+no5f/p6OX/6ejl/+no5f+1u7T/op+R/5+cjv+fnI7/pqOW/6uonP+YlYX/o6CS/6Cd + j/+qp5v/pKGU/6Kfkf+opZj/pqOW/5emj/8TPVX/DDNO/wwzTv8MM07/DDNO/ww0T/8NNVD/DjhT/0Z5 + kf9Wk67/H1V1/x9Vdf8eVXXH////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bt6RPtcCv + X5HVyIqvv6tTnbCYKo+xmSuRsZkrkbGaLZGxmi2Rspsvk7KbL5Oymy+Ts5swk7ObMJOznDGTs5wxk7Oc + MZOznTOTs50zk7SdNZO0nTWTtJ01k7SeNpO1nzeTtZ83k7WfN5O2oDmVt6A5k7egOZO3oTyVt6E8lbei + PJW3ojyVt6I8lbijPpW4oz6VuKM+lbijPpW4oz6VuKM/lbijP5W5pEGVuaRBlbmkQZW6pEKVuqRClbqk + QpW6pEKVuqVCk7qlQpO6pUKTuqVCk7qlQpO6pUKTuKVKo8S2dv/Qv37/0L9+/9DAfv/QwH7/0MB+/9DA + fv/QwH//0MB//8/Af//PwH//z8B//8/Af//PwH//z79//8+/f//Pv3//z718/8y5dv/JtnD/ybhx/8u5 + dP/Nu3n/z758/9DAf//QwH//0MB+/9DAfv/QwH7/z79+/86/fv/Ov33/zr99/86/ff/Ov33/zr99/86/ + fP/Ov3z/zr98/86+fP/Ovnz/zb57/82+e//Nvnv/zr98/86/fP/Ov3v/zr97/86+e//Ovnv/zr56/869 + ef/NvXn/zb15/829eP/NvXj/zbx4/828eP/Nu3b/yrhx/8i1bP/Esmj/wrBl/8OyaP/Htm3/yrly/8y6 + df/MunT/zLp0/8y6dP/MunT/zLp0/8y6c//MunP/zLpz/8y6c//MunP/zLpz/8y6c//MunP/y7t1/8u7 + df/Lu3X/y7t1/8u7dP/Lu3T/y7t0/8u7dP/Lu3T/y7t0/8u6c//LunP/y7pz/8u6c//Mu3X/39ao/9TJ + kf+2okz/r55I/4x6If/a07b/3NW5/9jQsv/Vy6v/1syt/9vTuP/m4s//5uLP/+biz//l4s//5eLP/+Xi + z//l4s//5eHP/+Xhz//l4c7/5eDN/+Tgy//l38n/5N7H/+Tfx//k3sj/5d7I/+XgzP/m4c//5uPU/+fl + 2v/n5t3/6Ofg/+np4//p6OT/6ejm/+no5v/p6Ob/y87I/6GekP+gnY//oJ2P/6ajlv+sqZ3/m5iJ/6Ge + kP+gnY//qaaa/6ekl/+fnI7/qqeb/6Ogkv+apZD/F0JX/wwzTv8MM07/DDNO/wwzTv8MM07/DTVQ/w44 + U/9Jf5b/SIak/x9Vdf8fVXX/H1V1uf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Abek + TyW3pFDfx7Vnl9nNk7eymy+TsZotkbKbL5Gymy+RspsvkbObMZGzmzGRs5wxk7OcMZOznTOTs50zk7Od + M5O0nTWTtJ01k7WeNZO1nzaTtp84k7egOZO3oTmTt6E5k7ehO5O3oTuTt6E7k7ehO5O4oz6VuKM+lbij + PpW4oz+VuKM/lbijP5W4oz+VuaNAlbqkQpW6pEKVuqVDlbqlQ5W7pkSTu6ZEk7umRJO7pkWVu6ZFlbum + RZW7pkWVu6ZFlbumRZW7pkaVu6ZGlbumRpW7pkaVu6ZGlbynSJnCtXb/0cGA/9DAgP/QwID/0MCA/9DA + gf/QwIH/0MCB/9DAgf/RwIH/0cCB/9HAgf/Qv37/zrt6/8q5c//KuXP/zLp1/868eP/Pv33/0MCA/9DA + gP/QwID/0MCA/9DAgP/QwID/0MCA/9DAgP/QwH//0MB//9DAfv/QwH//0MB//86/f//Ov3//zr9//86/ + fv/PwH7/z8B+/8/Afv/PwH3/z8B9/8/Aff/Pv33/z799/86/fP/Ov3z/z798/8+/fP/Pv3v/zr97/86+ + e//Ovnv/zr56/868eP/KunT/yrZw/8e0bP/DsWj/xLJq/8i2b//MunT/zbx3/828d//NvHf/zbx3/8y8 + dv/MvHb/zLt2/8y6df/MunT/zLp0/8y6dP/MunT/zLp0/8y6c//MunP/zLpz/8y6c//Mu3X/zLt2/8y7 + dv/Mu3X/y7t1/8u7df/Lu3X/y7t1/8u7dP/Lu3T/y7t0/8u7dP/Lu3T/y7pz/8u6c//LunP/y7pz/9PE + iv/WypL/uahZ/66aPP+XgiT/qJlQ/9/Yv//m4tD/5uLQ/+bi0P/m4tD/5uLQ/+bi0P/m4tD/5uLQ/+bi + 0P/l4tD/5eLQ/+Xi0P/l4tD/5eHP/+bgzv/k4M3/5N/M/+Tfyf/k38j/5N7I/+Xfyf/k38z/5uHP/+bj + 1f/o5Nr/6Obe/+jn4f/p6eT/6enl/+np5v/p6Ob/6ejm/+Lh3v+fnI7/op+R/5+cjv+koZT/raqe/5uY + if+fnI7/paKV/6Wilf+rqJz/nZqL/6ypnf+in5H/qbCg/x9JWf8MM07/DDNO/wwzTv8MM07/DDNO/ww0 + T/8ON1L/Toae/z+AoP8fVXX/H1V1/x9Vdaf///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bt6RPl7+tXpnTxIWryLRlo7ObL5GzmzGRs5sxkbOcMZO0nTGRtJ4zkbSeM5G1njWTtZ42k7We + NpO1nzeTtZ83k7agOJO3oTmTt6E5k7ehO5O3oTuTt6E8k7iiPZO4oj2TuKM+lbmjQJW5o0CVuaNAlbmj + QJW6pEKVuqVCk7qlQpO6pUKTu6ZFlbumRZW7pkWVu6ZFlbumRZW8p0aVvKdGlbynRpW8p0aVvKdGlbyn + RpW9qEeVvahHlb2oR5W9qEeVvahHlb2oR5W9qEeVvahHlb2oR5W8qUeVvrN099HBgf/SwoL/0sKC/9HB + gv/RwoP/0cKD/9HCg//PvXz/y7p2/8u4c//Mu3b/zrx6/9DAf//RwYL/0sKC/9LCgv/RwoL/0cKB/9HC + gf/RwoH/0cGC/9DBgv/QwYL/0MGC/9DAgf/QwIH/0cGB/9HBgf/SwYH/0sGB/9HBgP/RwYD/0cF//9HB + f//RwX//0MB//9DAf//QwH7/0MB//9DAf//QwH//0MB+/9DAfv/Qv37/0L99/8+/fP/Pv3z/zr57/8y7 + d//KuHP/yLVv/8Szav/HtGz/yrhy/827dv/NvXn/zb15/829eP/NvXj/zbx4/828eP/NvHf/zbx3/828 + d//NvHf/zLx2/8y8dv/Mu3b/zLt2/8y7dv/MunT/zLp0/8y6dP/MunT/zLp0/8y6c//Mu3X/zbx2/828 + dv/Mu3b/zLt2/8y7dv/Mu3X/zLt1/8u7df/Lu3X/y7t1/8u7df/Lu3T/yLdu/8S0av/CsWf/wK9j/8Gw + Zf/HtWv/3dOl/9LIjf+2o0z/rZtF/417If/h3MP/5uLQ/+bi0P/m4tD/5uLQ/+bi0P/m4tD/5uLQ/+bi + 0P/m4tD/5uLQ/+bi0P/l4tD/5eLQ/+Xiz//m4c7/5OHN/+Tgy//k38r/5N/J/+TfyP/l4Mn/5ODM/+bi + zv/m5NT/6OXZ/+jn3f/p6OH/6unj/+rq5P/q6ub/2NK8/97Zyv/q6eb/oJ2P/6ajlv+gnY//o6CS/66r + n/+em4z/n5yO/6ajlv+mo5b/rKmd/52ai/+sqZ3/o6CS/6qun/8oUlv/DDNO/wwzTv8MM07/DDNO/wwz + Tv8MNE//DTZR/1qRqf86fJv/H1V1/x9Vdf8fVXWX////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AbekTxO3pE/vx7VnkdzSnrm3ojyVtJ0ykbSeNJG0njSRtZ42k7WeNpO1njaTtZ83k7Wf + N5G3oDmTt6A5k7ehOpO3oTyTuKE8k7miPZO5oj2TuaI9k7mkQJO5pECTuaRAk7qlQpO6pUKTuqVCk7qm + Q5W6pkOVu6ZFlbumRZW8p0aVvKdGlbynRpW8p0aVvalIlb2pSJW9qUiVvalIlb2pSJW9qUiVvqlKlb6p + SpW+qUqVvqlKlb6pSpW+qUqVvqlKlb6pSpW+qUqVvqpMlb6qTJW+qkyVvqpMlb6xa9XQv4H/0sOE/9HA + gP/OvXr/yrl0/8y7d//OvXv/0L9//9HCg//Sw4P/0sOD/9LDg//Tw4T/08OE/9PDhP/TwoP/08KD/9TD + g//Tw4P/08OD/9PDg//Tw4P/0sKC/9LCgv/SwoL/0sKC/9LCgv/SwoL/0sGB/9LBgf/SwYL/0sGC/9LB + gv/SwYH/0sGB/9HBgP/RwYD/0cGA/9DAgP/QwID/0MB//9DAf//QwH//zr16/8y6df/KuHH/yLVu/8m2 + b//LuHT/zb15/8+/fP/Pv3z/zr97/86/e//Ovnv/zr56/86+ev/NvXn/zb15/829eP/NvXj/zbx4/828 + eP/NvHf/zbx3/828d//NvHf/zLx2/8y8dv/Mu3b/zLt2/8y6dP/MunT/zLp0/8y6dP/Mu3b/zbx2/828 + dv/NvHb/zbx2/828dv/Mu3b/zLt2/8y7df/Jt2//x7Rs/8OxaP/Br2T/wrBm/8eza//It2//y7t1/8u7 + df/Lu3X/y7p0/9bKkv/Zzpn/uahZ/62ZPP+WgiT/saRi/+bj0f/m4tH/5uLR/+bi0f/m4tH/5uLQ/+bi + 0P/m4tD/5uLQ/+bi0P/m4tD/5uLQ/+bi0P/m4s//5eHO/+Xhzv/k4cz/5eDL/+Tfyf/k38j/4+DJ/+Tg + zP/m4c7/5+TU/93Wv//Y0Lb/1c2y/9rTvP/f2cn/49/U/+bl3v/q6ub/6urm/6Ojlv+opZj/n5yO/6Kf + kf+sqZ3/oZ6Q/56bjP+opZj/oZ6Q/6ypnf+dmov/rKmd/5+cjv+trqH/MV1e/wwzTv8MM07/DDNO/wwz + Tv8MM07/DDNP/w01Uf9qnbP/OHya/x9Vdf8fVXX/H1V1i////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Bt6RPbbupVqvRwH2l0MB7q7SeNJG1njaRtZ42kbagN5G2oDeRt6E5k7eh + OZO4oTyTuKI8k7mjPZO5oz2TuaM9k7mkP5O5pD+TuqVCk7qlQpO6pUKTuqZElbqmRJW6pkSVu6ZGlbum + RpW9qEeVvahHlb2pSJW9qUiVvalIlb6pSpW+qUqVvqlKlb6pSpW+qUqVvqpLlb6qS5W+qkuVvqpLlb6q + S5W+qkyVvqpMlb6qTJW+q02VvqtNlb6rTpe+q06XvqtOl76rTpe+q06Xv6xOlcCtUJW9rV25ybh2/869 + e//RwYD/08KE/9PDhf/Tw4X/08OF/9PDhf/Tw4X/1MSF/9TEhf/UxIX/1MSF/9TEhf/UxIT/1MSE/9TE + hP/UxIT/1MSE/9TEhP/TxIT/08OE/9PDhP/Tw4T/08OE/9PChP/TwoT/0sKD/9LCg//SwoP/0sKD/9LC + g//SwYL/0sGC/9LBgv/SwYL/0sGB/9LBgf/QwH3/zbt4/8u5dP/Jt3H/ybdv/8u6df/PvXv/0MB//9DA + fv/QwH7/0L9+/9C/fv/Pv3z/z798/8+/fP/Pv3z/z797/86/e//Ovnv/zr56/86+ev/NvXr/zb16/829 + ef/NvXn/zbx5/828ef/NvHj/zbx4/828eP/NvHj/zLx3/8y8d//Mu3f/zLt3/8y7dv/NvHf/zbx3/828 + dv/NvHb/zLt1/8q4cf/HtW3/xLJp/8KwZf/DsWf/x7Rr/8q3cf/Mu3X/zLt1/8u7df/Mu3X/zLt1/8y7 + df/Mu3X/zLt1/8y7df/Ovnr/4NWp/9LHjf+1okz/q5lC/498I//l4c7/5+PR/+fj0f/n49H/5+PR/+fj + 0f/n49H/5+PR/+fj0P/n49D/5+PQ/+fj0P/n49D/5+PP/+fjz//n4s7/5eHN/+bhyv/l4Mn/3NW2/9XL + qv/Tyaj/2M6x/9zUu//h28n/5uLW/+no3//r6OL/6+rk/+vq5v/r6ub/6+rm/+rq5v+mq6L/qKWY/5+c + jv+in5H/rKmd/6ShlP+bmIn/qqeb/6GekP+sqZ3/npuM/6ypnf+hnpD/rqyg/ztnYv8MNE//DDNO/wwz + Tv8MM07/DDNO/wwzTv8NNlH/c6O2/zF3l/8fVXX/H1V1/x9VdXv///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AbekTwe3pE/bx7VmjdzSnLe9qUuXtqA4kbehOpO3oTqTuKE7k7ih + O5O4ojuTuaM9k7mkQJO5pECTuaRAk7qlQ5O6pUOTu6dElbunRJW7p0SVvKdGlbynRpW8p0aVvKhHlbyo + R5W8qEeVvqlKlb6pSpW+qUqVvqpLlb6qS5W+qkuVvqpMlb6rTZW+q02VvqtNlb6rTZW+q02VvqtNlb+r + Tpe/q06Xv6xPl7+sT5fArU+XwK1Pl8CtT5fArU+XwK1Pl8CtUJfArVCXwK1Ql8GuUpfBrlKXvqxcrcy+ + gv/Ux4f/1ceH/9XHh//Vx4f/1ceG/9XHhv/Vx4b/1ceG/9XHhv/Vx4b/1ceG/9TEhv/UxIb/1MSG/9TE + hv/UxIb/1MSG/9TEhv/UxIX/1MSF/9TEhf/TxIX/08SF/9PEhf/Tw4T/08OE/9PChP/TwoT/08KE/9LC + g//SwoP/0sKD/9HBf//Pvnv/zbt3/8u5dP/KuHP/zbx4/9DAff/SwYH/0cGA/9HBgP/RwID/0cCA/9HA + f//RwH//0MB//9DAfv/QwH7/0L9+/9C/fv/Pv33/z799/8+/ff/Pv3z/z797/86/e//Ovnv/zr56/86+ + ev/NvXr/zb16/829ef/NvXn/zbx5/828ef/NvHj/zbx4/828eP/MvHf/zLx3/8y7d//Nu3f/yrhz/8e1 + bf/Es2r/wrBm/8OyaP/Itm3/y7pz/8y7df/NvHb/zbx2/828dv/Mu3b/zLt2/8y7dv/Mu3X/zLt1/8y7 + df/Mu3X/zLt1/8y7df/Mu3X/zLt1/9jNlf/Zzpn/t6ZU/62ZPP+VgST/t6pu/+fj0f/n49H/5+PR/+fj + 0f/n49H/5+PR/+fj0f/n49H/5+PR/+fj0P/n49D/5+PQ/9/Yvv/a07X/1s2t/9TKqP/Yz6//29O1/97Y + uv/i3ML/5uDL/+bhzv/n4tP/6OTX/+nm3f/p6N//6+ji/+vq5P/r6ub/6+rm/+vq5v/r6ub/tbuz/6aj + lv+fnI7/oJ2P/6qnm/+mo5b/nJmK/6ilmP+fnI7/rKmd/52ai/+tqp7/o6CS/66rn/9Icmf/DDRP/wwz + Tv8MM07/DDNO/wwzTv8MM07/DTZR/2+itf8qb5D/H1V1/x9Vdf8fVXVt////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bt6RPS7mmUr/Qv3qf18mLsbmhO5G5oTuRuaI8k7mj + PJO6pUCTuqVAk7qlQJO7pUGTu6VBk7umQpO7pkKTvKdGlbynRpW8p0aTvKhHlbyoR5W9qUiVvalIlb2p + SZW9qUqVvqpMlb6qTJW+q02VvqtNlb6rTZW+q02Vv6tOl7+rTpe/q06XwKxOlcCtUJXArVCVwK1QlcCt + UJXArVCVwK1RlcCuUpfBrlOXwa5Tl8GuU5fCrlOXwq5Tl8KuU5fCrlOXwq5Tl8KvVJfCr1SXwq9Ul8Ct + WqPIvYH91ceI/9XHiP/Vx4j/1ceJ/9XHif/Vx4n/1ceI/9XHiP/Vx4j/1ceH/9XHh//Vx4f/1ceH/9XH + h//Vx4f/1ceH/9XHh//UxIf/1MSH/9TEh//UxIf/1MeH/9TEh//UxIb/08SF/9PEhf/TxIX/0sOD/8+/ + fv/NvHr/y7p2/8q5df/OvXv/0cGA/9LCg//SwoP/0sKD/9LBgv/SwYL/0sGC/9LBgv/SwYH/0cGA/9HB + gP/RwID/0cCA/9HAf//RwH//0cB//9DAf//QwH7/0L9+/9C/fv/Pv33/z799/8+/ff/Pv33/z797/86+ + e//Ovnv/zr56/86+ev/NvXr/zb16/829ef/NvHn/zbx5/8y7dv/KuHH/ybVu/8e0a//Dsmf/x7Rq/8m2 + cP/Mu3b/zb14/829eP/NvXj/zb14/828dv/NvHb/zbx2/828dv/NvHb/zbx2/828dv/Mu3b/zLt2/8y7 + dv/Mu3X/zLt1/8y7df/Mu3X/zLt1/8y7df/Pvnz/39ao/9DCiP+1oUr/qZc+/5F+Jf/o49H/6OPR/+jj + 0f/n49H/5+PR/+fj0f/n49H/39nA/9rTtv/Xza//1cus/9nQsv/c1bn/4dvB/+Teyf/m4s3/5uHL/+Xg + yf/m4Mn/5eDJ/+Xgy//l4c3/5+PR/+fk1v/p5tz/6efg/+ro4v/r6uT/6+rl/+vq5v/r6ub/6+rm/8rN + x/+joJL/oZ6Q/6GekP+opZj/qaaa/5qXiP+lopX/oZ6Q/6ypnf+em4z/rquf/6Kfkf+tqp7/WIBu/w00 + T/8MM07/DDNO/wwzTv8MM07/DDNO/w43Uv9moLX/JmmM/x9Vdf8fVXX/H1V1Xf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wG3pE+7wrFij9rOlrHHs16fuaM8k7ql + QJO6pUCTu6VBk7ulQpO7pkOTu6ZDk7ynRJO8p0aTvKhIlbyoSJW9qUmVvalJlb2pSZW9qUqVvalKlb6r + TZW+q02VvqtNlcCsTpXArE6VwKxOlcCtUJXArVCVwK1QlcCtUZXBrVKXwa1Sl8GtUpfBrVKXwa1Sl8Kv + VJfCr1SXwq9Ul8KvVJfCr1SXwq9Ul8KvVJfCr1SXw69Vl8OvVZfDr1WXw7BXl8OxWJfDsViXw7FYl8Ox + WJfDsViZw7l+89XIiv/VyIr/1ciK/9XIiv/VyIr/1ciK/9XIiv/Vx4n/1ceJ/9XHif/Vx4n/1ceJ/9XH + if/Vx4n/1ceJ/9XHif/Vx4j/1ceI/9XHiP/Vx4j/1ceI/9XHiP/Uw4X/0cGB/8++ff/Nu3n/y7p4/8++ + ff/Sw4P/08SG/9PEhv/TwoT/08KE/9PChP/Tw4T/0sOD/9LDg//Sw4P/0sOD/9LCgv/SwoL/0sKC/9LC + gv/SwoH/0sKB/9HCgP/RwoD/0cCA/9HAf//RwH//0cB//9HAf//QwH7/0L9+/9C/fv/Pv33/z799/8+/ + ff/Pv33/z798/8++e//Pvnv/zr14/8y6dP/KtnD/x7Rs/8OxaP/Hs2v/ybdw/8++ev/Pvnv/z757/86+ + ef/Ovnn/zr15/869ef/OvXj/zb14/829eP/NvXj/zb14/828dv/NvHb/zbx2/828dv/NvHb/zbx2/8y7 + dv/Mu3b/zLt2/8y7dv/Mu3X/zLt1/8y7df/Mu3X/zLt1/9nPmP/ZzZj/tqRQ/62ZO/+UgCT/vbF5/+jj + 0f/h2sL/29K2/9fNrv/Vy6z/2dCz/93WvP/j3cj/5+PR/+fj0f/n49H/5+PR/+fjz//n4s7/5uLN/+bh + zP/l4Mr/5uDJ/+bgyP/l4Mr/5eHN/+fj0P/n5db/6ebb/+nn3//q6OL/6+rl/+vq5v/r6ub/6+rm/+vq + 5v/e3tn/oZ6Q/5+cjv+hnpD/qKWY/6ypnf+bmIn/o6CT/6GekP+sqZ3/n5yO/62qnv+hnpD/rKmd/2GF + cv8NNVD/DDNO/wwzTv8MM07/DDNO/wwzTv8POVT/YZ+2/yJgg/8fVXX/H1V1/x9VdVH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bt6RPMbilUNXSwXuZ29CYtbym + Q5O7pUKTu6ZDk7umQ5O8p0WTvKdFk7yoSJW8qEiVvalJlb2pSZW9qUqVvqpKlb+rTJW/q0yVv6xNlcCs + TpXArE+VwK1RlcCtUZXArVGVwK1RlcGtUpfCrVKVwq1SlcKuVJXCrlSVwq5UlcKvVJfDr1WXw69Vl8Ov + VZfDr1WXw69Vl8OwV5fDsViXw7FYl8OxWJfDsViXxLJZl8SyWZfEslmXxLJZl8SyWZfEslmXxLJZl8Sy + WZfEslmXxLJZl8G1ctXTxIn/1siL/9bIi//WyIv/1siL/9bIiv/WyIr/1siK/9bIiv/WyYv/1ciL/9XI + i//VyIv/1ciL/9XIiv/VyIr/1ciK/9TEh//SwoP/0L+A/869ff/Nu3r/0MB//9PEhv/Vx4n/1ceJ/9TH + iP/Ux4j/08eH/9PHh//Tx4b/08eG/9PEhv/TxIb/08OE/9PDhP/Tw4T/08OE/9LDg//Sw4P/0sOD/9LD + g//SwoL/0sKC/9LCgv/SwoH/0sKB/9HCgP/RwoD/0cCA/9HAf//RwH//0cB//9HAf//QwH7/0L9+/9C/ + fv/Ovnr/zbt3/8q5cv/Itm7/xLRr/8i1bf/LuXP/z757/86+ev/Ovnr/zr56/8+/e//Pv3z/z797/8++ + e//Pv3v/z757/86+ef/Ovnn/zr15/869ef/OvXj/zb14/829eP/NvXj/zb14/828dv/NvHb/zbx2/828 + dv/NvHb/zbx2/8y7dv/Mu3b/zLt2/8y7df/Mu3X/zLt1/8y7df/Pvn3/3tSm/8y9gP+0oUn/o5A2/5J/ + Jv/a0LP/3ta7/+Xfy//o49H/6OPR/+jj0f/n49H/5+PR/+fj0f/n49H/5+PR/+fj0f/n49D/5+LP/+bi + zf/m4cz/5uHL/+bgyf/m4Mj/5uDK/+bhzP/o48//5+TV/+nm2v/p6N7/6uni/+vq5P/r6uX/6+rn/+vq + 5//r6uf/6+rn/6Cdj/+hnpD/op+R/6ilmP+sqZ3/m5iJ/6Kfkf+fnI7/rKmd/6Kfkf+qp5v/op+R/6yp + nf9ujnn/DjZR/wwzTv8MM07/DDNO/wwzTv8MM07/EDpV/2KhuP8gW3z/H1V1/x9Vdf8fVXU/////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wG3pE+Xv65el9nN + kq3OvHOlvKdFk72oRpO9qEeTvalJk76qSpO+qkqTvqpKlb6qS5W/q02Vv6tNlcCsT5XArE+Vwa1RlcGt + UZXBrVGVwq1SlcKtUpXCrVKVwq5UlcKuVJXCrlSVw69Vl8OvVZfDr1WXw7BXl8OxWJfDsViXw7FYl8Ox + WZnDsVmZw7FZmcOxWZnEslqZxLJamcezXJnHs1yZx7NcmcezXJnHs1yZx7NcmcezXJnHs1yZx7Ncmcez + XJnHs1yZx7NcmcezXJnAsGa50cKI/9bJjP/WyYz/1smM/9bJjP/WyYz/1smM/9bJjP/WyYz/1smM/9bJ + jP/WyYz/1siL/9PEhv/RwYL/0L9//868fP/Qv3//1ceI/9XIiv/VyIr/1ciK/9XIiv/VyIr/1ciK/9XI + if/VyIn/1ceJ/9XHif/Ux4j/1MeH/9THh//Ux4f/1MeG/9THhv/UxIb/1MSG/9TEhf/UxIX/1MOE/9TD + hP/TxIT/08OD/9PDg//TwoL/08KC/9PCgv/SwoL/0sKB/9HCgP/RwoD/0cGA/9DAfv/OvXr/y7p1/8q3 + cv/ItW3/yrhy/868eP/Pv33/z799/8+/ff/Pv3z/z798/8++fP/Pvnv/0L57/9DAfv/QwH7/0L99/9C/ + ff/Pv3z/z797/8+/e//Pvnv/zr56/86+ev/OvXn/zr15/869eP/OvXj/zb14/829eP/NvXj/zb14/828 + dv/NvHb/zbx2/828dv/NvHb/zbx2/8y7dv/Mu3b/y7hx/8ezav/CsGX/wbBj/9bJkf/TyI7/taJN/62Z + Pf+SgCT/wraE/+jj0f/o49H/6OPR/+jj0f/o49H/6OPR/+jj0f/n49H/5+PR/+fj0f/n49H/5+PQ/+fj + 0P/n4s//5uHN/+bhy//m4Mn/5uDI/+Xgyf/m4cz/5+LO/+jj0//p5tr/6ufe/+np4f/r6uX/6+vm/+vr + 6P/r6+j/6+vo/+rp5f+lopT/paKV/5+cjv+mo5b/raqe/56bjP+hnpD/oZ6Q/6ypnf+mo5b/qKWY/6Kf + kf+sqZ3/gJqE/w43Uv8MM07/DDNO/wwzTv8MM07/DDNO/xE6Vf9vrcP/Hll5/x9Vdf8fVXX/H1V1Mf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bt6RPE7ek + T+/PvneT4denu7+rTZW+qkqTvqpKk76qS5W/q0uTwKxNk8CsTZPArE6VwaxPlcGtUZXBrVGVwq1SlcKt + UpXCrlSVwq5UlcKuVJXDsFaXw7BWl8OwVpfDsFeXw7BXl8OwV5fDsViXw7FZmcOxWZnEslqZxLJamcSy + WpnEslqZxLJbmcSyW5nEsluZx7NdmcezXZnHs12Zx7Ndmci0XpnItF6ZyLRemci0XpnItF6ZyLRemci0 + XpnItF6ZyLRemci0XpnItF6Zw7Jmr8y/hv/Wyo3/1sqN/9bKjf/Wyo3/1sqN/9bKjf/Wyoz/1MeI/9LC + hP/QwYL/z79//9DAgv/Ux4n/1sqM/9bKjP/Wyoz/1sqM/9bKi//WyYv/1smL/9XIi//VyIv/1ciL/9XI + iv/VyIr/1ciK/9XIiv/VyIn/1ciJ/9XHif/Vx4n/1MeH/9THh//Ux4f/1MeH/9THhv/Ux4b/1MSG/9TE + hv/UxIX/1MSF/9TEhf/TxIT/08SE/9PDg//TwoL/0cGA/8++fP/NvHj/yrl0/8m2cf/MunX/zr56/9HA + f//RwH//0cB//9HAf//RwH7/0L9+/9C/fv/Qv33/z799/8+/ff/Pv3z/0L99/9HAf//RwH7/0cB+/9DA + fv/Qv33/0L99/8+/fP/Pv3v/z797/8+/e//Pvnv/zr56/86+ev/OvXn/zr14/869eP/OvXj/zb14/829 + eP/NvXj/zb14/828d//KuHH/x7Rr/8OxZ//CsWb/xLNp/8i1bf/Jt2//zLp0/8y6dP/QwID/3tSk/8y8 + f/+zoEf/o5A1/5WELP/o5NP/6OPS/+jj0v/o49L/6OPS/+jj0v/o49L/6OPS/+jj0v/n49L/5+PS/+fj + 0f/n49H/5+LQ/+bhzv/m4c3/5uDL/+bfyf/m4cv/5uDM/+fiz//o49T/6eXZ/+rn3f/q6eH/7Onk/+vr + 5v/b1cL/1c20/9nSvP/m5d7/qKWY/6ajlv+hnpD/pqOW/66rn/+fnI7/n5yO/6GekP+sqZ3/pqOW/6il + mP+joJP/qKWY/4qgiP8POFL/DDNO/wwzTv8MM07/DDNO/wwzTv8RPFf/erDH/x1bff8fVXX/H1V1/x9V + dSH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wG3pE95vKpZpdjMkKfVyIWrv6tLk8CsTZPArE2TwKxOlcCsTpXBrE+VwaxPlcGtUZXCrlOVwq9VlcKv + VZXDsFaXw7BWl8OwV5fDsFeXw7BXl8OxWJfDsViXxLFal8SxWpfEslqZxLJbmcSyW5nEsluZxLJbmcez + XZnHs12Zx7Ndmci0XpnItF6ZyLRfmci0X5nItF+ZyLRfmci0X5nItF+ZyLRfmci0X5nJtWGbybVhm8m1 + YZvJtWGbybVhm8i1YZvItWGbyLRgm8ezY6XLv4j92MuO/9fLjf/VyIv/08OI/9LBhf/Qv4D/0cGE/9XH + iv/Xy47/18uO/9bKjf/Wyo3/1sqN/9bKjf/Wyo3/1sqN/9bKjf/Wyoz/1sqM/9bKjP/WyYz/1smM/9bJ + i//WyYv/1ciL/9XIi//VyIr/1ciK/9XIiv/VyIr/1ciJ/9XIif/Vx4n/1ceI/9THh//Ux4f/1MeH/9TH + h//Ux4b/1MSG/9TEhv/SwoP/0MB//869e//Munf/y7l1/868ef/RwYD/08KC/9PCgv/TwoL/0sKB/9HC + gP/RwoD/0cGA/9HAf//RwH//0cB//9HAfv/RwH7/0L9+/9C/ff/Qv33/0MB//9HAgP/RwID/0cCA/9HA + f//RwH//0MB+/9DAfv/Qv33/0L99/9C/ff/Pv3v/z797/8+/e//Ovnr/zr56/869ev/OvXn/zr14/8q4 + cv/HtWz/xLNo/8OyZ//EtGv/yLZu/8u6c//NvHf/zbx3/8y7dv/MunT/zLp0/8y6dP/MunT/zLp0/9zQ + nP/YzZj/taJL/66aPv+RfiP/y7+T/+jk0//o5NP/6OPS/+jj0v/o49L/6OPS/+jj0v/p5NL/6eTS/+nk + 0v/o5NL/6OTR/+jj0P/n48//5+PN/+fhzP/n4Mr/5+HL/+fhzf/o48//4drC/9nQtf/WzLD/2tO6/9/Y + x//k4NL/6OXd/+vr5//s7Oj/7Ozo/7Kxpf+rqJz/npuM/6Ogk/+tqp7/n5yO/5+cjv+joJL/pqOW/6ek + l/+lopX/paKV/6ajlv+Wp47/EDpT/wwzTv8MM07/DDNO/wwzTv8MM07/ET1Y/3eqv/8ZWn3/H1V1/x9V + df8fVXUV////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bt6RPB7ekT9vMu3CP4denucizX5vArE+Vwa1QlcGtUJXBrVGVwq9VlcKvVZXDsFaXw7BWl8Ow + VpfDsFeXw7BXl8OxWJfDsViXxLFal8SxWpfEsluZxLJbmcSyW5nHs12Zx7NdmcezXZnHtF6Zx7Remce0 + XpnItF+ZybVhm8m1YZvJtWGbybVhm8m1YZvJtmKbybZim8m2YpvJtmKbybZim8m2YpvJtmKbybZim8m2 + YpvJtmKbybZjm8m2Y5vJtmObybZjm8m2Y5vItmOfyLyB+dDAg//SwoT/1cmM/9jLj//Xy4//18uP/9fL + j//Xy4//18uP/9fLjv/Xy47/18uO/9fLjv/Xy47/18uO/9fLjv/Wyo3/1sqN/9bKjf/Wyo3/1sqN/9bK + jP/Wyoz/1smM/9bJjP/WyYv/1smL/9bJi//VyIv/1ciL/9XIiv/VyIr/1ciK/9XIif/VyIn/1ceJ/9PH + hv/RwYL/z75+/829ev/Nu3j/z75+/9LDg//UxIX/1MSF/9TEhf/UxIX/08SE/9PDg//Tw4P/08OD/9PC + gv/Tw4L/0sKB/9HCgP/RwoD/0cGA/9HAf//RwH//0cB//9HAfv/Qv37/0cGB/9HBgf/RwYH/0cGB/9HA + gP/RwID/0cCA/9HAf//RwH//0MB+/9C/ff/Qv33/0L99/9C/fP/Pvnr/zLp1/8i2bv/EtGr/xLNq/8i1 + bf/Jt3D/zLt1/869eP/OvXj/zr14/869eP/OvXj/zrx3/828dv/Nu3X/zbt0/827dP/Nu3T/zbt0/827 + dP/SwoL/3tOj/8q5ef+ynkX/n4wu/5iHMf/p5dP/6eXT/+nl0//p5dP/6eTS/+nk0v/p5NL/6eTS/+nk + 0v/p5NL/6eTS/+nk0f/p49D/5+PP/+Tfyf/e1rr/1syq/9XKqP/Yz7D/3NS4/+Haw//m4tD/6ufc/+vp + 4P/s6uP/7ezm/+3s5//t7Oj/7ezo/+zs6P++v7b/pqOW/5+cjv+koZT/qqeb/6Kfkf+gnY//pKGU/6aj + lv+sqZ3/o6CT/6ajlv+mo5b/oayY/xM9Vf8MM07/DDNO/wwzTv8MM07/DDNO/xM/Wv9porr/GFd6/x9V + df8fVXX/H1V1B////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wG3pE9VuadTudjMjqPaz5Sxwa1RlcKuU5XCr1WVw7BWl8OwVpfDsFeXw7BXl8Ox + WJfDsViXxLFal8SxWpfEsluZxLJbmcSyW5nHs12Zx7Ndmce0XpnHtF6Zx7Remci0YJvItGCbybVhm8m2 + YpvJtmKbybZim8m2YpvJtmObybZjm8m2Y5vJtmObybZjm8q3ZJvKt2Sbyrdkm8q3ZJvKt2Sbyrdkm8q3 + ZZ3Kt2Wdyrdlncq3ZZ3Kt2Wdyrdlncq3ZZ3Kt2edyrdnnce7gOHWyo//2MyR/9jMkP/YzJD/2MyQ/9jM + kP/YzJD/18yQ/9fLj//Xy4//18uP/9fLj//Xy4//18uP/9fLj//Xy47/18uO/9fLjv/Xy47/18uO/9bK + jf/Wyo3/1sqN/9bKjf/Wyo3/1smM/9bJjP/WyYz/1smM/9bJi//WyYv/1ceI/9LChf/Qv4H/zr58/868 + fP/RwYP/1MeH/9XHiP/Ux4f/1MeI/9THh//Ux4f/1MeH/9TEhv/UxIb/1MSG/9TEhf/UxIX/08SF/9PD + hP/Tw4T/08OE/9PDg//TwoL/0sKB/9HCgP/RwYD/0cGA/9HAf//RwYD/0sKD/9LCg//RwoP/0cKD/9HB + gf/RwYH/0cCA/9HAgP/RwID/0cB//9C/ff/MvHj/ybhx/8e2bf/HtW3/ybZw/8y7df/Pvnn/z797/86+ + ev/OvXr/zr16/869ef/OvXj/zr14/869eP/OvXj/zr14/828dv/Nu3X/zbt1/827df/Nu3T/zbt0/827 + dP/Nu3T/zbt0/93SoP/YzZf/tKFK/66bQP+QfiL/0cec/+rl0//p5dP/6eXT/+nl0//p5dP/6eTS/+nk + 0v/m4M3/4Ni+/9nQsv/Wy6v/182t/9rStP/e1rr/4dq//+TfxP/n4sr/5uLM/+fizv/p5NL/6eXX/+vn + 3P/r6eD/7Orj/+3r5f/t7Ob/7ezo/+3s6P/t7Oj/0dHK/6ekl/+gnY//o6CS/6uonP+koZT/npuM/6Og + kv+lopX/rKmd/6Ogkv+npJf/paKV/6Ormf8TP1f/DDNO/wwzTv8MM07/DDNO/wwzTv8UQl3/XZ23/xlU + df8fVXX/H1V19////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AbekT8PHtWqP4Naktc67b6HDsFaXw7BXl8OwV5fDsViXw7FYl8Sx + WpfEsVqXxLJbmcSyW5nHs1yZx7Ndmce0XpnHtF6ZyLRgm8i0YJvItGCbyLVgm8i1YJvItWCbyLVhm8m2 + Y5vJtmObyrdkm8q3ZJvKt2Sbyrdkm8q3ZZ3Kt2Wdyrdlncq3ZZ3Kt2Wdyrdlncq4Z53KuGedyrhnncq4 + Z53KuGedyrhnncq4Z53KuGedyrhnncq4Z53KuGedy7honcu4aJ3HtnK/1ciO/9jMkv/YzJL/2MyS/9jM + kv/YzJL/2MyS/9jMkf/YzJH/18yR/9fMkf/XzJH/18yR/9fMkf/Xy5D/18uQ/9fLkP/Xy5D/18uQ/9fL + kP/Xy5D/18uP/9fLjv/Xy47/1sqN/9bKjf/UyIr/08OH/9LBhP/Pv4D/z75+/9LDhv/VyIr/1smL/9XI + i//VyIr/1ciK/9XIiv/VyIr/1ciJ/9XHif/Vx4n/1MeI/9THh//Ux4f/1MeH/9TEhv/UxIb/1MSG/9TE + hf/UxIX/08SF/9PDhP/Tw4T/08OE/9PDg//Tw4P/0sKB/9HCgP/RwoH/0sSE/9LDhP/TxIT/08OD/9PD + g//Sw4P/0MF//8++e//MunX/yrdx/8q3cP/MuXT/zr16/9DAfv/QwX//0MB9/9DAff/QwH3/0L98/9C/ + fP/Qv3z/zr56/86+ev/OvXr/zr15/869ef/OvXj/zr14/828dv/NvHb/zbt1/827df/Nu3X/zbt1/827 + dP/Nu3T/zbt0/827dP/Tw4X/3dKh/8e2dP+xnUP/nYkq/5uKN//q5dP/6uXT/+bfy//f1rz/2dCy/9XL + q//Zz7H/3NS4/+Lbwv/m4Mz/6eTR/+nj0P/o49D/6OPO/+jjzf/n4sr/5+LK/+bhy//n4s3/6OPQ/+nl + 1//q59v/6+jf/+vq4v/t6+X/7ezm/+3s6P/t7Oj/7ezo/+Tj3v+in5H/op+R/6GekP+joJL/pqOW/5+c + jv+lopX/op+R/6ypnf+in5H/q6ic/6Kfkf+mq5r/FUJY/wwzTv8MM07/DDNO/wwzTv8MM07/GEVg/1Sc + tf8aUXH/H1V1/x9Vdev///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wG3pE8xuKVQ1dfJi5/g1qS5w7JZl8OxWJfEsVqXxLFal8Sy + W5nEsluZx7NcmcezXZnHs12Zx7Remci0YJvItGCbyLVgm8i1YJvItWGbyLVhm8i1YZvKt2Sbyrdkm8q3 + ZJvKt2Wdyrdlncq3ZZ3LuGedy7hnncu4Z53LuGedy7honcu4aJ3LuGidy7honcu4aJ/LuGify7lpn8u5 + aZ/LuWmfy7lpn8y5a5/MuWufzLlrn8y5a5/MuWufzLlrn8y5a5/MuWufyLdwtdLEjv/ZzZP/2c2T/9nN + k//ZzZP/2c2T/9nMkv/ZzJL/2cyS/9nMkv/YzJL/2MyS/9jMkv/XzJL/18yS/9fMkv/XzJH/18yR/9fM + kf/Xy5H/18uQ/9XJjf/Ux4n/08OG/9HBg//RwYP/08eJ/9bKjf/Wyo3/1sqO/9bKjv/Wyo3/1sqN/9bK + jP/Wyoz/1sqL/9XJi//VyYv/1cmK/9XJiv/VyYr/1cmJ/9XIif/VyIn/1MiI/9TIh//Ux4f/1MeH/9TE + hv/UxIb/1MSG/9TEhf/UxIX/08SF/9PDhP/Tw4T/08OE/9PDg//UxIX/1MSG/9TEhv/SwoT/z79+/828 + ef/LuXb/y7l1/828eP/Qv37/0sOC/9LDgv/SwoH/0sGA/9LBgP/RwX//0cF//9HBf//QwH7/0MB+/9DA + ff/QwHz/0MB8/9C/fP/Pvnv/zr56/86+ev/OvXr/zrx3/828dv/NvHb/zbx2/828dv/Nu3X/zbt1/827 + df/Nu3X/zbt0/827dP/Nu3T/zbt0/97Tov/YzZb/tKFK/62ZP/+OfCD/yLmM/9rRs//e1rr/5N3H/+rl + 0//q5dP/6eXT/+nl0//p5dP/6eXT/+nk0f/p49D/6OPQ/+jjzv/o483/5+LL/+jhyf/n4cv/5+LN/+jj + 0P/p5dX/6efa/+vo3//r6uL/7erl/+3s5//t7Oj/7ezo/+3s6P/t7Oj/op+R/6GekP+gnY//n5yO/6aj + lv+fnI7/o6CT/6Kfkf+sqZ3/op+R/6uonP+in5H/qauc/xpGWf8MM07/DDNO/wwzTv8MM07/DDNO/xxJ + ZP9RnLf/GlBw/x9Vdf8fVXXb////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AbekT6PBsGKV39Sgs9PCfqfEsluZx7Ncmcez + XJnHs12Zx7Ndmci0X5nItF+ZyLRgm8i1YJvItWGbyLVhm8m2Y5vJtmObyrdkm8q3ZZ3Kt2Wdy7hnncu4 + Z53LuGedy7honcu4aJ3LuGidzLlpncy5aZ3MuWmdzLlpncy5aZ3MuWqfzLlqn8y5ap/MuWqfzLlqn8y6 + bJ/Mumyfzbttn827bZ/Nu22fzbttn827bZ/Nu22fzbttn827bZ/Nu22fzbttn8q4cK3Qw43/2c2U/9nN + lP/ZzZT/2c2U/9nNlP/ZzZT/2c2U/9nNlP/ZzZT/2c2T/9nNk//ZzZP/2MyT/9jMk//YzJL/1suP/9TI + i//TxIj/0sKG/9HBhP/UyIv/18yR/9fLkf/Xy5H/18uQ/9fLkP/Xy4//18uP/9fLj//Xy4//1sqO/9bK + jv/Wyo7/1sqN/9bKjf/Wyoz/1sqM/9bKjP/VyYv/1cmL/9XJiv/VyYr/1cmK/9XJiv/VyIn/1MiI/9TI + h//UyIf/1MeH/9TEhv/UxIb/1MSG/9TEhf/TxIX/08SF/9HCgf/PwH//z719/828ev/NvHr/z759/9LC + g//UxIb/1MSF/9PEhP/Tw4P/08OD/9LDg//Sw4L/0sOC/9LDgv/SwoH/0sGA/9LBgP/RwX//0cF//9HA + fv/RwH7/0MB+/9DAff/QwHz/0MB8/8++e//Ovnr/zbx4/828d//NvHb/zbx2/828dv/NvHb/zbx2/827 + df/Nu3X/zbt1/827df/Nu3X/yLVs/8KwZf/Mu3n/18qW/7+vZ/+vnED/moUl/6CPPv/q5dP/6uXT/+rl + 0//q5dP/6uXT/+rl0//q5dP/6eXT/+nl0//p5dP/6eXS/+jj0P/o48//6OPN/+fiy//o4cn/6OLL/+ji + zP/p48//6eXV/+rn2f/r6d7/6+vi/+3q5f/t7Of/7ezp/+3s6f/t7On/7ezo/6WilP+in5H/op+R/5yZ + iv+sqZ3/nZqL/6Ogkv+hnpD/rKmd/6GekP+sqZ3/op+R/6yqnv8dSFr/DDNO/wwzTv8MM07/DDNO/wwz + Tv8fTWj/VJ26/xtSc/8fVXX/H1V1y////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wG3pE8bt6RP5dTEhZnj2q29ybVim8ez + XZnItF+ZyLRfmci0YJvItGCbyLVhm8i1YZvJtmObybZjm8m2ZJ3Kt2Wdy7hnncu4Z53LuGidy7honcu4 + aJ3MuWmdzLlpncy5aZ3MuWqfzLlqn8y5ap/MumufzLpsn8y6bJ/MumyfzLptn8y6bZ/Mum2fzLptn8y6 + bZ/Nu26fzbtun827bp/Nu2+hzbtvoc27b6HNu2+hzbtvoc27b6HNu2+hzbtun827bp/Mum+lzMGM+9rO + lv/azpX/2s6V/9rOlf/ZzZX/2c2V/9nNlf/ZzZX/2c2U/9jNlP/YzJH/1cmN/9XHiv/TxIj/1MSJ/9fL + j//ZzZP/2cyT/9nMk//YzJL/2MyS/9jMkv/YzJL/2MyR/9jMkf/Yy5H/2MuR/9jLkP/Yy5D/2MuP/9jL + j//Xy4//1sqO/9bKjv/Wyo7/1sqO/9bKjf/Wyoz/1sqM/9bKjP/VyYv/1cmL/9XJi//VyYr/1cmK/9XJ + iv/VyIn/1MiI/9TIh//Ux4f/0sOD/8+/fv/NvHr/zLt4/8y7d//RwID/1MSI/9XIiv/VyIn/1ciJ/9TH + iP/Ux4j/1MSH/9TEhv/UxIX/1MSF/9TEhf/Tw4P/0sOD/9LDgv/Sw4L/0sOC/9LCgf/SwoH/0sGA/9HB + f//RwX//0cF//9HAfv/RwH7/0MB+/9DAff/Pv3v/zr54/829d//NvHf/zbx3/828dv/NvHb/zbx2/8y6 + c//HtWv/wrBk/8KxZf/Es2j/yLZr/8q5b//MunP/zbt1/9/Vpv/XzZX/taFK/62aQf+OeyD/2tKw/+rl + 0//q5dP/6uXT/+rl0//q5dP/6uXT/+rl0//q5dP/6eXT/+nl0v/p5NH/6OTQ/+jjzf/n4sv/6OHK/+ji + y//o4s3/6OPP/+rl0//q59j/6+ne/+vq4f/s6+T/7e3n/+3t6f/t7On/7ezp/+3s6f+rqJz/pqOW/6Cd + j/+dmov/rKmd/5+cjv+in5H/op+R/6ypnf+fnI7/rKmd/6Cdj/+tqp7/JU9c/wwzTv8MM07/DDNO/wwz + Tv8MM07/H09q/1eZsv8dVHX/H1V1/x9Vdb3///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AbekT3m8q1ql3NKbrdrN + ka/ItGCbyLRgm8m1YZvJtmObybZjm8m2ZJ3JtmSdyrdmncu4Z53LuGidy7honcy5aZ3MuWmdzLlpncy5 + ap/MuWqfzLprn8y6a5/MumufzLpsn8y6bJ/Mum2fzbttoc27baHNu22hzbttoc27baHNu2+hzbtvoc27 + b6HOvHChzrxwoc68cKHOvHChzrxwoc68caHOvHGhzrxxoc68caHOvHGhzrxwoc68cKHOvHChzrxwocvA + ivXZzpb/2s+X/9rPl//az5b/2s6W/9jNlP/Xy5D/1siN/9TEiv/VyIz/2MyS/9nOlf/ZzpX/2c6V/9nO + lP/ZzpT/2s6V/9nNlP/ZzZT/2c2T/9nNk//ZzJP/2c2U/9nNk//ZzZP/2MyS/9jMkv/YzJH/2MuR/9jL + kf/ZzJD/2MuQ/9jLj//Xy4//18uP/9bKjv/Wyo7/1sqO/9bKjf/Wyoz/1sqM/9bKjP/VyYv/1cmL/9XI + i//TxIf/0cGC/9C/f//OvXr/zbx6/9HBgf/Tx4b/1MeH/9TEh//WyYv/1cmM/9XJjP/VyIv/1ciK/9XI + if/VyIn/1ciJ/9THiP/Ux4j/1MeH/9TEhv/UxIX/1MSF/9TDhP/Tw4P/0sOD/9LDgv/Sw4L/0sKB/9LC + gf/SwoH/0cKA/9HBf//RwX//0cB+/9HAfv/Qv3v/zr54/86+eP/Ovnj/y7py/8i0a//Cr2X/xLJn/8e0 + av/Jt23/y7py/828df/NvHb/zbt1/827df/Nu3X/zbt1/827df/VyIr/3NGe/7+vZ/+umj3/mIQi/6OT + RP/q5dP/6uXT/+rl0//q5dP/6uXT/+rl0//q5dP/6uXT/+rl0//q5dL/6eTR/+jk0P/o5M7/5+PN/+jh + y//n4sr/5+LN/+jjz//p5dP/6ubY/+vo3v/s6uH/7evl/+3t6P/t7en/7e3q/+3t6v/s6+j/tLGm/6ek + l/+hnpD/mZaH/6ypnf+em4z/oZ6Q/6Kfkf+sqZ3/oJ2P/6ypnf+in5H/rKmd/ypSXP8MM07/DDNO/wwz + Tv8MM07/DDNO/yBRbP9Qj6j/HlV1/x9Vdf8fVXWv////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wG3pE8Nt6RP5dHA + fpPk3LC/zbptn8m1YpvKtmSbybZkncq3Zp3Kt2ady7honcq4Zp3MuWmdzLlpncy5ap/MuWqfzLprn8y6 + a5/MumyfzLpsn8y6bJ/Nu26fzbtun827b6HNu2+hzbtvoc27b6HOvHChzrxwoc68cKHOvHGhz71zoc+9 + c6HPvXOhz71zoc+9c6HPvXOhz71zoc+9c6HPvXOhz71zoc+9c6HPvXOhz71zoc+9c6HPvXOhz71zo8+9 + c6PLvYLX18uT/9jLkf/WyY7/1ceM/9bKj//ZzpX/2s+X/9rPl//az5f/2s+X/9rPl//az5b/2s+W/9rO + lv/azpb/2s6W/9rPlv/az5b/2s+V/9rOlf/azpX/2s6V/9rNlP/azZT/2c2U/9nNlP/ZzZP/2c2T/9nN + k//ZzZP/2c2S/9nMkv/ZzJH/2cyQ/9jMkP/Yy4//18uP/9bKjv/Wyo7/1smN/9XHiv/Tw4X/0cCC/8++ + fv/Pv3//08SG/9XJi//VyYr/1cmK/9XJiv/VyIn/1MiI/9XJif/Wyo3/18mN/9fJjf/WyYz/1cmM/9XI + i//VyIv/1ciL/9XIif/VyIn/1MeI/9THiP/Ux4j/1MeH/9TEhf/UxIX/1MSF/9TDhP/Tw4T/0sOC/9LD + gv/Sw4L/0sKB/9LCgf/RwoD/0cF//9HBf//Mu3T/yLZs/8SyaP/ItWv/ybZu/8q5cf/MvHT/zb53/828 + d//NvHb/zbx2/828dv/NvHb/zbx2/828dv/NvHb/zbx2/827df/Nu3X/zbx2/9/Wp//Xy5P/taFL/62a + Qf+Meh//4Ni7/+rl0//q5dP/6uXT/+rl0//q5dP/6uXT/+rl0//q5dP/6uXS/+rk0f/p5ND/6OPO/+jk + zP/n48v/5+PK/+fizf/o48//6OTS/+rm1//r6N3/6+ng/+bh1f/h28z/3tfB/9nRuf/a0rv/6eff/727 + sf+qp5v/n5yO/5qXiP+sqZ3/oZ6Q/6GekP+hnpD/rKmd/5+cjv+tqp7/op+R/6ypnf8zWl//DDNO/wwz + Tv8MM07/DDNO/wwzTv8jVnH/RYWh/x9Vdf8fVXX/H1V1of///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Abek + T1u6p1S13NGaqd3TnbXKtmWbyrdmncq4Zp3LuGidy7honcy5ap/MuWqfzLprn8y6a5/MumyfzLpsn827 + bp/Nu26fzbtvoc27b6HNu2+hzrxwoc68cKHOvHChzr1yoc69cqHOvXKhzr1zo869c6PPvnSjz750o8++ + dKPPvnWjz751o8++daPPvnWjz751o8++daPPvnWj0L92o9C/dqPQv3aj0L92o9C/dqPQv3aj0L92o9C/ + dqPQv3ajzb1/x9bLlP/b0Jn/29CY/9vQmP/b0Jj/29CY/9vQmP/az5j/2s+Y/9vQmP/b0Jj/29CY/9vQ + mP/b0Jf/29CX/9vQl//bz5f/28+X/9rPlv/az5b/2s+W/9rOlv/azpX/2s6V/9rOlf/azpX/2s2U/9nN + lP/ZzZT/2c2T/9nNk//ZzZP/2c2S/9nNkv/Yy5D/1smM/9TEif/Twob/0cCC/9HChP/VyIv/18uO/9bK + jf/Wyo3/1sqM/9bKjP/VyYv/1cmL/9XJi//VyYr/1cmK/9bJjP/XzJD/18yP/9fLj//Xy47/18mN/9bJ + jP/WyYz/1cmM/9XIi//VyIv/1ciK/9XIif/VyIn/1MeI/9THiP/Ux4f/1MeH/9THhv/UxIX/1MOE/9PD + hP/Tw4P/0cGA/869ev/KuHT/ybhy/8q5c//LuXL/zbt1/86+ef/Pv3r/z756/8++ef/Pvnj/zr54/82+ + d//Nvnf/zb13/828dv/NvHb/zbx2/869dv/OvXb/zr12/869dv/OvXb/zrx1/868df/Xyo7/3NGd/72s + Yf+smDr/lYEf/6iZTf/r59T/6+bT/+vm0//r5tP/6+bT/+vm0//r5tP/6+bT/+vm0v/r5dH/6uXR/+rk + zv/q5c3/6eTM/+njzP/l38j/4Nm9/9vUt//Z0LL/186x/9zUu//h3Mv/6eXa/+7t5v/v7un/7+7q/+7u + 6v/OzMP/p6SX/6Cdj/+bmIn/qqeb/6GekP+fnI7/op+R/6ypnf+fnI7/rKmd/6Kfkf+rqJz/OF5h/wwz + Tv8MM07/DDNO/wwzTv8MM07/Klx2/zp/nf8fVXX/H1V1/x9VdZP///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bt6RPw8i2a4/i2qy708J+p8u4aJ3LuWmfy7lpn8y6a5/MumyfzLpsn827bp/Nu26fzbtvoc27 + b6HOvHChzrxwoc68cKHOvXGhzr1yoc69c6POvXOjzr1zo8+9c6PPvXOjz751o9C+daPQvnWj0L51o9C+ + daPQvnWj0L93o9C/d6PQv3ej0L93o9C/d6PQv3ej0L93o9G/eKXRv3il0b94pdG/eKXRv3il0cB5pdHA + eaXRwHml0cB5pc2/frvVypT/3NCa/9zQmf/c0Jn/3NGa/9zRmv/c0Zr/29GZ/9vRmf/b0Zn/29CZ/9vQ + mf/b0Jn/29CY/9vQmP/b0Jj/29CY/9vQmP/b0Jf/29CX/9vPl//bz5f/2s+W/9rOlv/azpb/2s6V/9rO + lf/azpX/2s6V/9nNk//Xyo//1ciM/9PEif/Swob/08SK/9bKjv/ZzJL/2cyR/9nMkP/YzJD/2MyP/9fM + j//Wyo7/18uO/9fLjv/Wyo3/1sqM/9bKjP/VyYv/1cmL/9fLj//YzJH/18yQ/9fMkP/XzI//18yP/9fL + j//Xy47/18qO/9bJjP/WyYz/1siL/9XIi//VyIv/1ciK/9XIiv/Ux4j/1MeI/9THiP/Sw4X/z719/8u6 + dv/Munf/zbx5/8++fP/RwYD/0cOC/9LBgP/RwH3/0b99/9G/fP/Qv3z/z798/8+/e//Pvnv/z756/8++ + ef/Pvnn/zr54/86+eP/OvXj/zr13/869d//OvXb/zr12/869dv/OvXb/zr12/869dv/OvHX/z714/+HX + qv/WypH/taJM/6yZP/+Meh//497C/+vn1P/r59T/6+bT/+vm0//r5tP/6+bT/+vm0//q5dD/6ePO/+Pc + wv/e1Lf/2tCv/9bLqP/Zzq3/3NKz/+Hav//q5dL/6+fX/+vp3P/t6uD/7ezj/+/s5v/v7uj/7+7q/+/u + 6v/v7ur/2djR/6ilmP+fnI7/nZqL/6ilmP+joJL/oJ2P/6Kfkf+tqp7/o6CS/6Ogkv+gnY//q6ic/0Rn + Zf8MM07/DDNO/wwzTv8MM07/DDNO/zNngf8ufZ3/H1V1/x9Vdf8fVXWB////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AbekTz24pVHL3NKap+LYqb3LuWqfzLpsn8y6bJ/Nu26fzbtun827b6HNu2+hzrxwoc68 + cKHOvXGhzr1xoc69cqHOvXOjz71zo8+9c6PPvnSjz750o9C+daPQv3ej0L93o9C/d6PQv3ej0cB4pdHA + eKXRwHil0cB4pdHAeaXRwHml0cB5pdHAeaXRwHml0cF6pdHBeqXRwXql0cF6pdHBeqXRwXul0cF7pdHB + e6XRwXul0cF7pdHBe6XPv32x08mT/9zSnP/c0Zv/3NGb/9zRm//c0Zv/3NGa/9zRmv/c0Zr/3NGa/9zR + mv/c0Zr/3NGa/9vRmf/b0Zn/29CZ/9vQmf/b0Jj/29CY/9vQmP/b0Jj/29CX/9vQl//bz5f/2s+W/9jL + kv/WyY//1MeL/9PDiP/Wyo//2MyS/9rNlP/azZT/2c2U/9nNk//ZzZP/2c2T/9nNkv/ZzZL/2cyS/9nM + kf/YzJH/2MyR/9fMkP/Xy5D/18uP/9fLj//Xy4//18uO/9jMkv/YzZP/2M2T/9jMkv/YzJL/18yS/9fM + kP/XzI//18uP/9fLjv/Xy47/18uO/9bJjP/WyYz/1siL/9PEh//Pv3//zLt6/869ff/Qv37/0cGB/9PD + hf/Ux4f/1MeG/9THhv/Uw4X/08OE/9HBgP/RwH7/0cB9/9HAff/Rv33/0b98/9C/fP/Pv3z/z797/8++ + e//Pvnr/z755/8++ef/Ovnj/zr54/869eP/OvXf/zr13/869d//OvXb/zr12/869dv/OvXb/zr12/868 + df/Yy5D/3NGc/7uqW/+rljb/lIAe/62eV//r59T/6+fU/+jjzv/j3cP/4Ni9/9zTtf/Yzq7/2c+w/9zT + tf/h2r//5+DJ/+rkzv/p5M3/6ePL/+nkzf/p5M7/6uXS/+vn1//r6dz/7evg/+3t5P/v7Ob/7+7o/+/t + 6f/v7ur/7+7q/+jn4v+joJL/op+R/5yZiv+mo5b/o6CS/6GekP+joJP/qKWY/6Ogk/+em4z/o6CS/6qn + m/9Nbmn/DDNO/wwzTv8MM07/DDNO/wwzTv8/b4j/J3ia/x9Vdf8fVXX/H1V1c////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Bt6RPpcKxZZXi2am518uMrc27bp/Nu2+hzrxwoc68cKHOvXGhzr1xoc69 + cqHOvXKhz71zo8+9c6PPvnSjz750o9C+dqPQvnaj0L52o9C/d6XQv3el0cB4pdHAeaXRwHml0cB5pdHA + eqXRwHql0cB6pdHAeqXSwXul0sF7pdLBe6XSwXul0sF8p9LBfKfSwXyn0sJ9p9LCfafSwn2n0sJ9p9LC + fafSwn2n0sJ9p9LCfafSwn2n0cJ+q9LIk//d0p3/3NKd/9zSnf/c0p3/3NKd/9zSnP/c0pz/3NKc/9zR + nP/c0Zz/3NGc/9zRm//c0Zv/3NGb/9zRm//c0Zv/29Ga/9vRmv/bz5j/2c2U/9fLkf/WyY7/1MeM/9jM + k//az5f/28+X/9vPl//azpb/2s6W/9rOlv/azpX/2s6V/9rOlf/azZT/2c2U/9nNlP/ZzZP/2c2T/9nN + kv/ZzZL/2cyS/9nMkf/YzJH/2MyR/9fMkP/Xy5D/18uQ/9nNlf/ZzpX/2c6V/9jNlP/YzZP/2M2T/9nM + kv/YzJL/2MyR/9jMkf/Wy4//08eJ/9HAg//Pvn//0MGC/9HBhP/TxIf/1ciK/9bJi//VyYr/1cmK/9TI + if/UyIj/1MiH/9THh//Ux4f/08eF/9LCgP/RwoD/0cF+/9HBfv/RwX7/0cB9/9G/ff/Rv3z/0L98/9C/ + fP/Pv3v/z757/8++ev/Pvnr/z756/86+eP/Ovnj/zr14/869d//OvXf/zr13/869d//OvXb/zr12/869 + dv/OvXb/z755/+HXq//VyI3/taJL/6iWOf+Neh//2M2r/9jNrf/f17v/6OPP/+vn1P/r59T/6+fU/+vm + 0//r5tL/6+XR/+rl0P/q5M7/6eTN/+njzP/q5Mz/6eTO/+rl0f/s59f/7Onb/+3r4P/t7eT/7+3n/+/v + 6f/v7un/7+7q/+/u6v/v7ur/o6CS/6GekP+fnI7/o6CS/6ajlv+fnI7/pKGU/6ekl/+joJP/npuM/6Og + kv+pppr/WHRs/wwzTv8MM07/DDNO/wwzTv8MM07/RXaN/yRvkv8fVXX/H1V1/x9VdWX///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AbekTxu3pE/l2M2Qn+betcPPvnOhzr1xoc69caHOvXKhz71zo8+9 + c6PPvnSjz750o9C+dqPQvnaj0L93pdC/d6XQv3il0L94pdHAeaXRwHql0cB6pdHAeqXSwXul0sF7pdLB + e6XSwXyn0sF8p9LBfKfSwXyn08J+p9PCfqfTwn6n08J+p9PCfqfTwn6n08N/p9PDf6fTw3+n08N/p9PD + f6fTw3+n08OAqdPDgKnTw4Cp08OAqdPDgKnSx5T73NKd/93Snv/d0p7/3dKe/93Snv/d0p3/3dKd/93S + nf/d0p3/3dKd/9zSnf/c0pz/3NKc/9vQm//azpf/2MyV/9bKkP/WyZD/2c2V/9zRm//c0Zr/3NGa/9zQ + mv/c0Jn/3NCY/9zQmP/c0Jj/3NCX/9vPl//bz5f/2s+W/9rPlv/az5b/2s+V/9rPlf/azpT/2s6U/9nO + lP/ZzpP/2c6T/9nOk//ZzZL/2c2S/9nNkf/YzZH/2M2S/9vPmP/bz5f/2s6X/9rOlv/azpb/2c6V/9jM + kv/VyIv/0sKG/9LChf/Sw4f/1MeK/9bKjf/Xy5D/18uP/9fLjv/Wy43/1suN/9bKjf/Wyoz/1smL/9bJ + iv/VyYr/1MiJ/9TIif/UyIj/08SG/9LDgf/Sw4H/0sKA/9HCgP/Rwn//0cF+/9HBfv/RwH3/0b99/9G/ + fP/Rv3z/0L98/8+/e//Pvnv/z756/8++ev/Pvnr/zr54/86+eP/OvXj/zr13/869d//OvXf/zr13/829 + dv/LuXH/yLVr/8SyZ//RwYX/1MiO/7emVP+rljX/k4Ae/7KkYP/s59T/7OfU/+zn1P/s59T/6+fU/+vn + 1P/r59T/6+fT/+vl0f/q5dD/6uTO/+nkzv/p48z/6eTM/+nkzv/q5dH/7OfV/+zp2v/u6+D/7uzi/+7t + 5v/v7+n/7+/q/+/v6//v7ur/7+7q/6ShlP+joJL/n5yO/6Ogkv+opZj/n5yO/6ShlP+npJf/p6SX/5uY + if+joJL/qaaa/2mAc/8MM07/DDNO/wwzTv8MM07/DDNO/0R7k/8oaYr/H1V1/x9Vdf8fVXVV////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bt6RPh76tXp/i2Ke13NGYs8+9c6PPvXOjz750o8++ + dKPQvnWj0L92o9C/d6XQv3il0L94pdHAeKXRwHql0cB6pdLBe6XSwXul0sF8p9LBfKfSwXyn0sJ9p9LC + fafSwn2n08J+p9PCfqfTw3+n08N/p9PDgKnTw4Cp08OAqdPDgKnTw4Cp08SBqdPEganTxIGp08SBqdTE + gqnUxIKp1MSCqdTEgqnUxIKp1MSCqdTEgqnUxIKp08eS59vQnP/d05//3dOf/93Tn//d05//3dOe/97T + nv/e057/3dGc/9rPmf/azZb/2MyT/9jMlP/b0Jr/3dKd/93Snf/d0pz/3dKd/93RnP/d0Zz/3dGc/9zR + m//c0Zv/3NGb/9zRm//c0Jr/3NCZ/9zQmf/c0Jn/3NCY/9zQmP/bz5j/2s+X/9rPl//az5b/2s+V/9rP + lf/az5X/2s6U/9nOlP/ZzpP/2c6T/9nOk//ZzZL/2s+V/9vQmv/b0Jn/2c6U/9bJj//TxIr/1MeL/9XH + jP/Wyo//2MyT/9nOlP/ZzZT/2c2T/9jMkv/YzJH/2MyR/9jMkf/Yy5D/18uP/9fLjv/Wy43/1sqN/9bK + jP/Wyoz/1smK/9bJiv/UyIn/1MeF/9LDgv/Sw4L/0sOB/9LDgf/SwoD/0cKA/9HCf//RwX7/0cF+/9HA + ff/RwH3/0b98/9G/fP/Qv3z/z797/9C+e//Pvnv/z756/8++ev/Ovnj/zLx0/8m3b//ItGr/xLJn/8Ox + Zv/Hs2n/ybdu/8y7dP/OvXb/0MB7/+HXqv/Sx4v/taFK/6eVOv+OfCD/6uXR/+zn1P/s59T/7OfU/+zn + 1P/s59T/6+fU/+vn0//r5tL/6ubR/+rkz//p5M3/6ePM/+nkzP/p483/6uXQ/+zn1f/s6dr/7erf/+7s + 4v/v7eb/8O/p/+/v6f/v7+v/7+/r/+/v6/+pp5r/paKV/52ai/+fnI7/qaaa/56bjP+mo5b/o6CT/6mm + mv+bmIn/pqOW/6ekl/96jHv/DDNO/wwzTv8MM07/DDNO/wwzTv9CfZj/KGOB/x9Vdf8fVXX/H1V1Rf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AbekTw23pE/l08SFl+ffuMPTwn6n0L51o9C/ + dqPQv3aj0L94pdHAeKXRwHil0cB6pdLBe6XSwXyn0sF8p9LBfKfSwn2n0sJ9p9PCfqfTwn6n08J+p9PD + f6fTw3+n08N/p9TEganUxIGp1MSBqdTEganUxIKp1MeDqdTHg6nUx4Op1MeDqdTHg6nUx4Op1MeDqdTH + g6nVx4Wp1ceFqdXHhanVx4Wp1ceFqdXHhanVx4Wp1ceFqdPIkNnZzpz/3dOg/93ToP/d0p7/29Cb/9rO + mP/ZzZb/2s6Y/93Rnf/e05//3tOf/97Tn//e05//3dKe/93Snv/d0p7/3dKe/93Snv/d0p3/3dKd/93S + nf/d0Zz/3dGc/93RnP/d0Zz/3NGb/9zRm//c0Zv/3NCa/9zQmf/c0Jn/3NCZ/9zQmP/bz5j/28+Y/9rP + l//az5f/2s+V/9rPlf/az5X/2s6U/9nNk//Xyo//1smP/9XIjf/WyZD/18uS/9nNlf/azpf/29CZ/9vQ + mP/azpj/2s6W/9rOlv/azpX/2s6V/9rOlf/ZzZT/2c2T/9jNk//YzJH/2MyR/9jLkP/Yy5D/18uP/9bL + jf/Wyo3/1sqM/9bKjP/VyYr/08SF/9PEg//TxIP/0sOC/9LDgv/Sw4H/0sOB/9LCgP/RwoD/0cKA/9HC + f//RwX7/0cB9/9HAff/RwHz/0b98/8++ev/NvHX/yrdw/8i1a//Esmf/yLVq/8i3bv/LunL/zr14/869 + d//OvXf/zr13/869d//OvXb/zr12/869dv/azpb/28+a/7ekUf+plTX/k38f/7msbv/s59T/7OfU/+zn + 1P/s59T/7OfU/+zn1P/s59P/6+bS/+rm0f/q5dD/6eTO/+nkzP/q5Mz/6eTN/+rl0P/r59T/7OjY/+zq + 3v/u7OL/7+3m//Du6P/w7+n/8O/r//Dv6//v7+v/rqyf/6ilmP+em4z/oZ6Q/62qnv+dmov/pqOW/6Og + kv+pppr/mpeI/6ekl/+npJf/jpiE/wwzTv8MM07/DDNO/wwzTv8MM07/Q4Ca/yRffv8fVXX/H1V1/x9V + dTf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bt6RPYbqoVbHg1qWx4demu9HA + eKPRwHml0cB5pdHAeqXRwHql0cF7p9LCfafSwn2n08J+p9PCfqfTwn6n08N/p9PDf6fTw4Cn08OAp9PD + gKfUxIGp1MSCqdTEgqnVx4Op1ceDqdXHhKnVx4Sp1ciFq9XIhavVyIWr1ciFq9XIhavVyIWr1ciFq9XI + hqvVyIar1ciGq9XIhqvVyIar1ciGq9XIhqvVyIar1ciGq9XIhqvUyY/L18uW/9nOmP/c0Jz/39Sh/9/U + of/e06D/3tOg/97Tof/e06D/3tOg/97ToP/e06D/3tOg/97Tn//e05//3tOf/97Tn//e05//3dKe/93S + nv/d0p7/3dKd/93Snf/d0p3/3dGc/93RnP/d0Zz/3NGb/9zRm//c0Zv/3NCa/9zQmv/c0Jn/3NCZ/9zQ + mP/b0Jj/2s6W/9fLkv/Vx4v/1MOI/9PHiv/XyY7/2s+Y/93RnP/d0pz/3NKc/9vRm//b0Jr/29Ca/9vQ + mv/b0Jn/29CZ/9vQmP/azpj/2s6W/9rOlv/azpX/2s6V/9rNlf/ZzZT/2M2T/9jNkv/YzJH/2MuQ/9jL + kP/Xy4//18uP/9bLjf/VyYv/08eG/9PEhP/TxIT/08SD/9PEg//Sw4L/0sOC/9LDgf/Sw4H/0sKA/9LC + gP/RwoD/z797/8y6df/JuHD/yLVs/8i1bf/KuHH/zbx1/9C+ef/Qvnr/z757/8++ev/Pvnr/zr54/86+ + eP/OvXj/zr13/869d//OvXf/zr13/869dv/OvXb/0MB9/+DXqf/Rw4j/tKFJ/6WTNv+QfiP/7OfU/+zn + 1P/s59T/7OfU/+zn1P/s59T/7OfT/+zm0v/s5tL/6uXQ/+rlzv/p5c3/6uTN/+njzf/q5M//6ubT/+zo + 2P/s6t7/7uzi/+7t5P/v7OX/6eXZ/+Pez//f2MT/6+jg/7i1q/+qp5v/nJmK/5+cjv+tqp7/npuM/6aj + lv+joJL/q6ic/5qXiP+opZj/p6SX/5qejf8MM07/DDNO/wwzTv8MM07/DDRP/02Mpv8eXX3/H1V1/x9V + df8fVXUr////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AbekTwO3pE/Pzb13k+fe + t8PWyoir0cF6pdHBe6fSwXyn0sF8p9LCfafTwn6n08N/p9PDf6fTw4Cn08OAp9TEganUxIGp1MeDqdTH + g6nUx4Op1ceEqdXHhKvVx4Sr1ciGq9XIh6vVyIer1ciHq9XIh6vVyIer1ciHq9bJiKvVyIer1smIq9bJ + iKvWyYir1smJrdbJia3WyYmt1smIq9bJiKvWyYir1smIq9bJiKvWyYir1cmNv9fNm//f1aL/39Wi/9/V + ov/f1KL/39Si/9/Uov/f1KL/39Sh/9/Uof/f1KH/3tOh/97Tof/e06D/3tOg/97ToP/e06D/3tOf/97T + n//e05//3tOf/93Snv/d0p7/3dKe/93Snf/d0p3/3dKd/93RnP/d0Zz/3dGc/9zRm//bz5j/2MyS/9XI + jf/VyI3/1cqP/9jMkv/azpb/28+Y/9rPl//b0Jj/3NOe/93Tnv/d057/3dKd/93Snf/d0pz/3NKc/9vR + m//c0Zv/29Ga/9vQmf/b0Jn/29CY/9rPmP/azpf/2s6X/9rOlf/azpX/2s6V/9rNlf/ZzZT/2M2T/9jN + kv/YzJL/2MuQ/9jLkP/WyYv/1MeH/9THhv/Tx4b/08SE/9PEhP/TxIP/08SD/9HCgP/Ovnz/y7p2/8q4 + c//Kt3H/y7lz/868d//QwH3/0cF+/9HAff/RwH3/0cB8/9HAfP/QwHz/0L97/9C+e//Pvnr/z756/8++ + ev/Ovnj/zr54/869eP/OvXf/zr13/869d//OvXf/zr12/869d//b0Zz/3NGd/7WjTf+qljb/kn8g/76y + eP/s59T/7OfU/+zn1P/s59T/7OfU/+zn0//s59P/6+bS/+vl0f/r5c7/6eXN/+rkzf/p5c7/6uXP/+Xe + yP/h2sH/3da9/9vSuP/Yz7P/3ta//+Xg0f/s6eH/7+7p/+7t5//Ewrn/qKWY/5yZiv+hnpD/rquf/52a + i/+lopX/op+R/6uonP+bmIn/qKWY/6ilmP+hoZH/DDNO/wwzTv8MM07/DDNO/ww0T/9gnbf/Flt9/x9V + df8fVXX/H1V1G////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bt6RPPbil + Ucvg1qSt5dyywdLCfafSwn2n08J+p9PCfqfTw4Cn08OAp9TEganUxIGp1MeDqdTHg6nVx4Sp1ceEqdXH + hKnVyIar1ciGq9XIhqvVyIar1ciGq9bJh6vWyYir1smIq9bKiavWyomr18qKrdfKiq3Xyoqt18qKrdfK + iq3Xyoqt18qKrdfKiq3Xyoqt18qKrdfKiq3Xyout18qLrdfKi63Xyout18qLrdbKjLXWzJv/39aj/9/V + o//f1aP/39Wj/9/Vo//f1KP/39Sj/9/Uov/f1KL/39Si/9/Uov/f1KL/39Sh/9/Uof/e06H/3tOh/97T + oP/e06D/3tOg/97ToP/e05//3tOf/97Tn//d0p7/3dKe/9vRm//ZzJT/1smQ/9fKkv/XzJP/2s6X/9zQ + m//c0Zv/3NGb/9zQmv/c0Jn/3NCZ/9zQmf/c0Zv/3tOg/97Uof/d05//3dOf/93Tnv/d0p7/3dKd/93S + nf/d0pz/3NKc/9zRm//c0Zv/29Ga/9vRmv/b0Jn/29CY/9rPmP/azpf/2s6X/9rOlv/azpX/2s2V/9nN + lP/ZzZT/2c2T/9jMkf/WyYv/1ciJ/9XHiP/Ux4f/0sKD/8++fP/Mu3j/y7l0/8u7dv/OvXv/0MB//9LD + gv/Sw4H/0sOB/9LDgf/SwoD/0cKA/9HCf//Rwn//0cB9/9HAff/RwHz/0cB8/9DAfP/Qv3v/0L97/8++ + ev/Pvnr/z756/86+eP/Ovnj/zr14/869d//OvXf/zr13/8+9eP/Pvnr/0sKD/+HYqv/QwIX/s6BH/6OR + M/+SgCb/7OfU/+zn1P/s59T/7OfU/+zn1P/s59P/7OfT/+vm0v/n4Mn/4tm8/93Utf/az67/1suo/9nQ + r//f17v/5uDM/+zq3f/u6+D/7u3k//Dt5//w7+n/8O/r//Dv6//w7+v/1NLK/6ilmP+dmov/n5yO/6yp + nf+fnI7/pKGU/6Ogkv+sqZ3/mpeI/6qnm/+koZT/pqOW/wwzTv8MM07/DDNO/wwzTv8MNE//bKO5/xNY + e/8fVXX/H1V1/x9VdQ3///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wG3pE+vxLRpk+bdtL/bz5Wz08OAp9TEganUxIGp1MeDqdTHg6nVx4Sp1ceEqdXHhKnVx4Sp1ciGq9XI + hqvWyYer1smHq9bJiKvWyYir1smIq9fKiq3Xyoqt18qKrdfKiq3Xy4yt18uMrdfLjK3Xy4yt18uMrdfL + jK3Yy42v2MuNr9jLja/Yy42v2MuNr9jLja/Yy42v2MuNr9jLja/Yy42v2MuNr9jLja/Yy42v1cyb/+DV + pf/g1qT/4Nak/+DWpP/g1qT/39ak/9/WpP/f1qT/39Wj/9/Vo//f1KP/39Sj/9/Uov/f1KL/39Si/9/U + ov/f1KH/39Sh/97Uov/c0Jz/29Cb/9nMlv/XypP/2cyW/9rOl//b0Zz/3dKe/93Snv/d0p7/3dKd/93S + nf/d0Zz/3dGc/93RnP/c0Zv/3NGb/9zQmv/d057/39Wj/9/Vov/e1KL/3tSh/97Uof/d1KD/3dOf/93T + nv/d0p7/3dKe/93Snf/c0pz/3NGb/9zRm//c0Zr/3NGa/9vRmv/b0Jn/2s+Y/9rPl//az5f/2s6W/9rO + lv/azZX/2c2U/9bJjf/SwoP/z79//869fP/OvHr/z759/9LBgv/UxIb/1MeH/9PEhf/TxIX/08SD/9PE + g//Sw4L/0sOC/9LDgv/Sw4H/0sOB/9LCgP/RwoD/0cJ//9HCf//RwX7/0cB9/9HAfP/RwHz/0MB8/9C/ + e//Qv3v/z796/8++ev/Pvnr/zr54/869eP/OvXj/z714/9C/e//Qv3v/0MB7/9DAe//d0p//3NKc/7Wi + TP+rlzj/kn4h/8i7iP/r5tL/5+DK/+Pcwf/g17v/3NK0/9jNrP/a0LD/39a4/+Xewv/r5s//6+XO/+vl + zv/r5tD/7OfT/+3p2P/t693/7+3i/+/v5v/x7uj/8fDq//Hw7P/x8Oz/8fDs/+Hf2f+lopX/npuM/6Og + kv+opZj/n5yO/6Ogk/+joJP/rKmd/5qXiP+tqp7/o6CS/6qnm/8MNE//DDNO/wwzTv8MM07/DTVQ/2We + tf8XVHX/H1V1/x9Vdf3///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bt6RPJbekUN/f1J+p6OC6x9XIhKnVx4Sp1ceEqdXHhKnVx4Sp1ciFq9XIhavWyYer1smHq9bJ + iKvWyYir18mJrdfJia3Xyout18qLrdfKi63Xy4yt18uMrdjLja/Yy42v2MyOr9jMjq/YzI6v2MyOr9jM + jq/ZzI+v2cyPr9nMj6/ZzI+v2cyQr9nMkK/ZzJCv2cyQr9nMkK/ZzJCv2cyQr9nMj6/ZzI+v2cyPr9fO + nfff1KT/4dal/+HWpf/h1qX/4dal/+DWpf/g1qX/4Nal/+DWpP/g1qT/39Wk/9/VpP/f1aP/39Wj/97U + of/c0Zz/2s6Y/9nNl//azpn/29Cb/93ToP/e1KL/3tSi/97Uof/e1KH/3tSh/97UoP/e06D/3dOf/93T + n//d0p7/3dKd/93Snv/d0p3/3dKd/93Snf/f1KL/4NWl/9/VpP/f1aP/39Wj/9/Uov/f1KL/39Si/97U + of/d1KD/3dSg/93Tn//d0p7/3dKe/93Snf/c0p3/3NGb/9zRm//c0Zr/3NGa/9zRmv/b0Jf/2MyT/9XJ + jv/Ux4v/0sOI/9LBhf/Tw4X/1ciJ/9fJjP/Wyov/1sqL/9bJiv/VyIj/1ciI/9TIh//UyIf/1MeG/9TH + hv/Ux4X/1MeE/9PEg//Tw4P/08OD/9PDgv/Tw4L/08KB/9LCgf/SwoD/0sKA/9LBf//SwX//0cB9/9HA + ff/RwH3/0L97/9C/e//Pv3r/z796/8+/ev/Ovnn/z797/9DAff/QwHv/0MB7/9DAe//QwHv/1MSF/9/U + pv/Kunr/sp5F/6CLLP+Ugij/4dm9/+rl0P/t6db/7ejV/+3o1f/t6NT/7efT/+zn0v/s5tD/6+bQ/+vl + zv/r5s7/6+bQ/+zn0//t6df/7uvd/+/t4v/v7uX/8O/o//Hx6//x8Oz/8fDs//Hw7P/u7en/o6CT/5+c + jv+in5H/qaaa/6GekP+joJP/o6CS/62qnv+Zlof/rKmd/6Ogkv+sqZ3/DDRO/wwzTv8MM07/DDNO/w01 + UP9WlrH/GlJy/x9Vdf8fVXXv////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wG3pE+Hvq1en+Xcsrvg1aS51ciFq9XIhavWyIer1siHq9bIh6vWyIer18mJrdfJ + ia3Xyout18qLrdfKi63Xyout2MuMrdjLja3Yy42t2MyOr9jMjq/ZzI+v2cyPr9nMj6/ZzI+v2cyPr9nM + j6/ZzI+v2c2Rr9nNka/ZzZGv2c2Rr9nNka/ZzZGv2c2Rr9nNkrHZzZKx2c2SsdnNkrHZzZGx2c2RsdnN + kbHYzp3t3dOj/+HXp//h16b/4dem/+HXpv/h16b/4dem/+DXpv/g1qX/39Wj/9zRnv/azpr/28+b/9vQ + nP/d0qD/39Sj/9/VpP/f1aT/39Wk/9/VpP/f1aP/39Wj/9/Vo//f1KL/3tSi/97Uof/e1KH/3tSh/97U + oP/e1KD/3tOg/93Tn//d05//3dOe/97Sn//g1aX/4den/+DWp//g1qb/4Nam/+DVpP/g1aT/4NWk/9/U + o//f1KP/3tSi/97Uov/e1KH/3tOg/97ToP/e05//3dKd/9vQmv/ZzZb/18uR/9XIjv/WyY//18uS/9rO + lv/b0Jn/28+W/9jMkP/Yy47/18uN/9fLjf/Xy4z/18qM/9bKi//Wyov/1sqK/9XIif/VyIj/1ciI/9TI + h//UyIf/1MeG/9THhv/Ux4T/1MeE/9PEg//Tw4P/08OC/9PDgv/TwoH/0sKB/9LCgP/SwoD/0sF//9LA + fv/RwH3/0cB9/9HAff/Rv3z/0L97/8+/ev/QwHv/0cF+/9DAfv/Qv3z/zrx4/8q5cf/Itm7/x7Rq/8m2 + bv/d0p//29Cb/7ShSv+smTv/kX0h/87Dlf/t6db/7enW/+3p1v/t6db/7ejU/+3n0//s59L/7ObQ/+vm + 0P/r5c7/6+XO/+vm0P/s59P/7enX/+7r3P/w7eL/8O7k//Dv6P/x8ev/8fHs//Hx7f/x8Oz/8fDs/6Sh + k/+hnpD/o6CS/6ShlP+in5H/o6CS/6ShlP+tqp7/m5iJ/6ypnf+joJP/q6ic/w00T/8MM07/DDNO/wwz + Tv8ONlH/S5Ct/xpQcP8fVXX/H1V14f///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Bt6RPD7ekT+/azpWh6uPCy9jKjK3WyIer1smJq9bJiavXyomt18qJrdfK + i63Xyout2MuMrdjLjK3Yy42v2MyOr9jMj6/YzI+v2cyPr9nNka/ZzZGv2c2Rr9nNkrHZzZKx2c2SsdnN + krHZzZKx2s6SsdrOk7HazpOx2s6TsdrOk7HazpOx2s6TsdrOk7HazpOx2s6TsdrOk7HazpOx2s6TsdrO + krHazpKx2c+d4dzTo//h16n/4deo/+HXp//g1qX/3dKf/9vPnP/c0J7/3dKg/9/VpP/g16b/4den/+HW + pv/h16f/4Nem/+DXpv/g16b/4Nem/+DWpf/g1qX/4Nal/+DWpP/g1qT/4Nak/9/Vo//f1aL/39Wi/9/V + ov/e1KH/3tSh/97Uof/e1KD/3tOg/97Uof/h16j/4dep/+HXqP/h16f/4den/+DWp//g1qb/4Nam/+DW + pf/g1qX/4NWk/9/Uo//e06D/29Gd/9rOmf/YzJb/18uU/9nNl//c0Zz/3dKd/93Snf/d0Z3/3dGd/93R + nP/c0Zv/28+X/9nMkP/ZzI//2MuO/9jLjv/Xy43/18uN/9fLjP/Xyoz/1sqL/9bKi//Wyor/1ciJ/9XI + iP/VyIj/1MiH/9TIh//Ux4b/1MeG/9THhf/Ux4T/08SD/9PEg//Tw4L/08OC/9PCgf/SwoH/0sKA/9LC + gP/SwX//0sF//9HAff/RwH3/0cB9/86+d//Nu3b/y7ly/8m3cP/Itm7/ybdw/8y8d//Pvnn/0MB8/9DA + e//QwHv/1ciI/9/Wp//Mu3v/sp5E/5+LLP+ZiDH/7enW/+3p1v/t6db/7enW/+3p1f/t6NT/6+jT/+zm + 0f/r5c//6+bP/+rkzf/r5c//7ObS/+3p1//u69z/7+zh//Du5P/x7+j/8vHr//Hx6//x8e3/8fHt//Hx + 7f+mo5f/oZ6Q/6Ogkv+koZT/pKGU/6GekP+koZT/raqe/5yZiv+rqJz/o6CS/6qnm/8NNE//DDNO/wwz + Tv8MM07/DjdS/0iQrv8aUG//H1V1/x9VddH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wG3pE9pu6lXreXcsbnk266/18qJrdfKiq3Xyoqt2MuMrdjL + ja/Yy42v2MyOr9jMj6/YzI+v2c2Qr9nNka/ZzZKx2c2SsdnNkrHazpKx2s6SsdrOkrHazpOx2s6TsdrO + k7HazpSx2s+UsdrPlLHaz5Sx2s+UsdrPlLHaz5Sx2s+UsdrPlLHbz5az28+Ws9vPlrPbz5az28+Ws9vP + lrPb0Jaz28+VsdrQndPaz6D/3NGe/93SoP/e1KP/4Nen/+HYqf/h2Kn/4dip/+HYqf/h2Kn/4dio/+HY + qP/h2Kj/4deo/+HXqP/h16f/4den/+HXp//g16b/4Nem/+DXpv/g1qX/4Nal/+DWpf/g1qT/4Nak/+DW + o//f1aP/39Wi/9/Vov/f1aH/3tSh/9/VpP/i2Kr/4dir/+HYqv/h16r/4dep/+HXqP/h16j/4Nan/9/V + pP/c0Z//28+b/9rNmf/az5v/3NKf/97Uof/f1KL/39Si/97Uof/e06H/3tOg/97Tn//d05//3dOe/93R + nf/d0Z3/28+X/9nNkv/ZzJL/2cyR/9nMkf/ZzJD/2MuO/9jLjf/Xy43/18uM/9fKjP/Wyov/1sqL/9bK + iv/WyYr/1ciI/9XIiP/UyIf/1MiH/9THhv/Ux4b/1MeF/9THhf/TxIP/08SD/9PEgv/TxIL/08KB/9LC + gf/QwH3/zr14/8u5cv/Jt2//x7Rs/8q4cf/OvXn/0b9+/9PCgf/SwoD/0cJ//9DAfv/QwH7/0MB9/9DA + fP/QwHz/0MB7/9DAe//f1qX/29Cb/7ShSv+umz//kH0i/9TMov/t6db/7enW/+3p1v/t6dX/7ejU/+vo + 0//s59H/6+bQ/+vlzv/r5c7/6+XP/+zm0f/s6db/7ura/+/s4P/w7uT/8e/o//Lx6//y8e3/8vHt//Hx + 7f/x8e3/qaaa/6Wilf+gnY//o6CS/6ilmP+fnI7/pKGU/6qnm/+cmYr/qqeb/6Ogk/+sqZ3/DTRP/wwz + Tv8MM07/DDNO/w83Uv9PlbH/GlJx/x9Vdf8fVXXB////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bt6RPA7ekT8/OvnyV6eK/ydvQl7PYy42v2MuNr9jM + jq/YzI6v2c2Qr9nNka/ZzZGv2s6SsdrOkrHazpKx2s6TsdrOk7Haz5Sx2s+UsdrPlLHbz5Wz28+Vs9vP + lbPbz5Wz29CXs9vQl7Pb0Jez29CXs9vQl7Pb0Jez29CXs9vQl7Pb0Jez29CXs9vQl7Pb0Jez29CXs9vQ + l7Pb0Jez3NCYs9zQmLPb0JvF2tGj/+LYqv/i2Kr/4tmr/+LZq//i2av/4tmq/+LZqv/i2Kr/4tiq/+LY + qv/h2Kn/4dip/+HYqf/h2Kj/4dio/+HXqP/h16j/4den/+HXp//h16f/4Nem/+DXpv/g16b/4Nal/+DW + pf/g1qX/4Nak/+DWo//f1aP/39Wi/+HYqP/j2q3/49mt/+LZrP/h16r/39Wm/93Sof/c0Z//3NGf/97S + of/g1ab/4Nan/+DWp//g1qb/4Nal/+DWpf/g1aT/39Wk/9/Vo//f1KL/39Si/9/Uof/e06H/3tOg/97T + n//d0p7/286W/9rNk//ZzZP/2c2S/9nMkv/ZzJH/2cyQ/9nMkP/Yy47/2MuO/9fLjf/Xy4z/18qM/9bK + i//Wyov/1sqK/9bJiv/VyIj/1ciI/9TIh//UyIf/1MeG/9THhv/Ux4X/08OD/9DAfv/NvHj/y7p0/8m3 + cP/KuXP/zbx3/8++ev/SwoD/0sF//9PDgv/Tw4T/08OD/9PCgv/TwoL/08KB/9PCgf/Swn//0cF//9DA + fv/QwH3/0MB8/9DAfP/QwHv/1smL/9/Vpv/IuHb/sZ1C/56JKv+djDj/7enW/+3p1v/t6db/7enV/+7o + 1P/s6NP/7OfS/+vm0P/r5s//6+bP/+vlzv/r5tD/7ejW/+7q2v/v7OD/8O7k//Dv5//y8Or/8vHr//Lx + 7f/y8e3/8vHt/7Ctof+mo5b/oJ2P/6ShlP+pppr/n5yO/6ilmP+pppr/oJ2P/6ekl/+joJP/raqe/w01 + T/8MM07/DDNO/wwzTv8QOVT/VZay/xtTdP8fVXX/H1V1tf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wG3pE9JuKZSweTcsbfn37jF2MyOr9nM + j6/ZzI+v2c2QsdnNkbHazpOx2s6TsdrPlLHaz5Sx28+Vs9vPlbPbz5Wz29CWs9vQlrPb0Jaz29CWs9vQ + lrPb0Jaz29CWs9zQmbPc0Jmz3NCZs9zRmbXc0Zm13NGZtdzRmbXc0Zm13NGZtdzRmbXc0Zm13NGZtdzR + mbXc0Zm13NGZtdzRmbXc0Zm13NGau9nQo//j2av/49mr/+LZrP/i2az/4tms/+LZq//i2av/4tmr/+LZ + q//i2av/4tmq/+LZqv/i2Kr/4tiq/+HYqf/h2Kn/4dip/+HYqP/h2Kj/4deo/+HXp//h16f/4den/+DX + pv/g16b/4Nal/+HWpv/h1qX/4NSk/+DWp//f1aj/39Sl/97To//f1Kb/4diq/+LYrP/i2az/4tir/+LY + q//i2Kr/4tip/+HYqf/h16n/4Nan/+DWp//g1qb/4Nam/+DWpf/g1aT/39Wk/9/Vo//f1aP/39Sh/9/T + of/d0p3/2s+W/9rOlf/azpT/2s2U/9rNk//ZzZL/2cyS/9nMkf/ZzJD/2cyQ/9jLj//Yy47/2MuN/9jL + jP/Xyoz/1sqL/9bKi//Wyor/1smK/9bIiP/Tw4T/0L5+/868ev/Munf/zbt4/869ev/RwYD/08SD/9PE + g//TxIL/08SC/9PDgf/Sw4H/08OD/9THhf/UxIb/1MSE/9PDhP/Tw4P/08KC/9PCgf/TwoH/08KB/9LC + f//RwX//0cB+/9DAfv/QwHz/0MB8/9DAfP/g16j/29Cb/7ShSv+vnEL/j3wi/9rSrf/t6db/7enW/+3p + 1f/t6dX/7OjT/+zn0v/s5tD/6+fP/+vmz//r5tD/6+fR/+zn1P/u6tr/7+zf/+7r4P/q59n/5+HT/+Pd + y//f2ML/2tG4/+zp4P+2tKn/qaaa/5yZiv+koZT/q6ic/52ai/+opZj/qKWY/6GekP+mo5b/o6CT/62q + nv8NNU//DDNO/wwzTv8MM07/EDpV/1SQqv8dVHT/H1V1/x9VdaX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AbekT7XIt26V6eK9x9/V + ornZzZCx2s6SsdrOk7HazpOx2s+VsdrPlbHb0Jaz29CWs9vQlrPb0Jaz29CWs9zQmLPc0Jiz3NCYtdzQ + mbXc0Jm13NCZtdzRmrXc0Zq13NGatdzRmrXc0Zq13NGatdzRmrXd0pu13dKbtd3Sm7Xd0pu13dKbtd3S + m7Xd0pu13dKbtd3Sm7Xd0pu13dKbtd3Sm7Xa0aT/4tqs/+Parf/j2q3/49qt/+Parf/j2az/49ms/+PZ + rP/i2az/4tms/+LZq//i2av/4tmr/+LZq//i2ar/4tiq/+LYqv/i2Kr/4tiq/+LYqf/h2Kj/4deo/+DX + p//g1aX/3dKg/9zQnf/azpv/3NGf/+HWqf/j2q//5Nyw/+Tbr//k26//5Nqu/+Parv/j2q7/49qt/+La + rf/i2az/4tir/+LYq//i2Kv/4tiq/+HYqf/h16n/4Nao/+DWp//g1qb/4Nam/+DVpf/f1aT/39Wj/9/V + o//d0Z3/28+X/9rOlv/azpX/2s6V/9rOlP/azZT/2s2T/9nNk//ZzZL/2cyR/9nMkf/ZzJD/2MuQ/9jL + j//Xy43/1ciK/9LChP/Pv3//zr18/869fP/Qv3//08SE/9bIiP/UyIf/1MiH/9THhv/Ux4b/1MeF/9PE + hP/TxIP/08SC/9PEgv/UxIP/1MeG/9TIh//UyIf/1MeG/9TEhv/UxIT/08OE/9PDg//TwoP/08KB/9PC + gf/TwoH/0sJ//9HBf//RwH7/0cB+/9DAfP/QwHz/18uN/9/Vpv/DtG//sJxB/5yIJ/+hkUD/7enW/+3p + 1v/t6dX/7enV/+zo0//s59L/7ObQ/+zn0P/p5Mz/5uDH/+Lbvv/f17v/3dS3/9jPsf/f17//5eDO//Lw + 6v/y8ev/8fDs//Lx7f/y8e3/w8G3/6ilmP+dmov/o6CT/62qnv+dmov/p6SX/6ekl/+hnpD/pqOW/6Og + k/+tqp7/DjVP/wwzTv8MM07/DDNO/xE7V/9Ih6L/H1V1/x9Vdf8fVXWX////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wG3pE8lt6RQ3+LX + qbHr5MHN2s+Ts9rPlbHbz5Wz28+Vs9vQlrPb0Jaz3NCYs9zQmLPc0Ji13NCYtdzRmrXc0Zq13NGatd3S + m7Xd0pu13dKbtd3Sm7Xd0py13dKct93SnLfd0py33dKct97Tnbfe05233tOdt97Tnbfe05633tOdt97T + nbfe05633tOet97TnLfe05y33tOct97Tnbfe052329Kl9+HYrP/j2q7/49qu/+Parv/j2q7/49qu/+Pa + rf/j2q3/49qt/+Parf/j2az/49ms/+LZrP/i2az/49ms/+PZq//j2av/4tep/9/Vpv/d0qH/29Gf/9zR + n//e06P/4Nam/+LXqP/h16j/4tiq/+Xcsv/l3LP/5Nyy/+Tcsv/k3LH/5Nyx/+TbsP/k26//5Nuv/+Pb + rv/j263/4tqt/+LZrf/i2az/4tms/+LYq//i2Kr/4diq/+HXqf/h16n/4deo/+DWp//g1qf/4Nam/+DV + pP/c0Zz/29CZ/9vQmP/b0Jj/28+X/9rOlv/azpX/2s6U/9rNlP/azZP/2c2T/9jKj//VyIv/0sKG/9HA + gv/RwIH/0cGD/9XIif/Xyoz/2MuM/9bKi//Wyov/1sqK/9bJiv/WyYn/1smJ/9XJiP/UyIf/1MeG/9TH + hv/Ux4X/08SE/9PEhP/VyIf/1siJ/9XIif/VyIj/1MiH/9TIhv/Ux4b/1MSG/9TEhP/TxIT/08OD/9PC + g//TwoH/08KB/9PCgP/Swn//0cF//9HBfv/RwH3/0cB9/9DAff/h2ar/29Ca/7WiS/+vnUX/j3wi/9/Y + t//t6db/6uXP/+bhyf/i3L//39a4/9zSsv/Yzar/3NOy/+Pbvf/s59D/7OjV/+7q2f/u7N//8O7k//Dv + 5v/y8Or/8vHr//Lx7f/y8e3/8vHt/87Mwv+pppr/m5iJ/6ShlP+tqp7/npuM/6qnm/+koZT/op+R/6Og + k/+joJL/raqe/w41T/8MM07/DDNO/wwzTv8SPln/PH6b/x9Vdf8fVXX/H1V1if///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Abek + T5fBsGOb6eK9xeParb/b0Jaz29CXs9vQl7Pc0Ji13NCYtdzRmrXc0Zq13dKatd3Sm7Xd0py13dKctd3S + nLXd0p213dKdtd3SnbXd05233dOdt93Tnbfe05233tSft97Un7fe1J+339Sgt9/UoLff1KC339Sgt9/U + oLff1KC339Sgt9/UoLfe1J+53tSfud7Tnrfe05633tOet9zTp/Hh2Kz/5Nuv/+Tbr//j26//49uv/+Pb + r//j2q7/49qu/+Parv/k2q7/5Nqu/+PZrP/h16n/39Wm/93Tov/d0qL/3tSk/+HXqP/j2av/49mr/+PZ + q//i2Kr/4tiq/+LYqv/i2Kn/49qu/+bdtP/m3bX/5t20/+XctP/l3LP/5dyz/+Xcsv/l3LL/5dyx/+Xb + sf/k26//5Nuv/+Pbr//j263/4tqt/+LZrf/i2az/4tms/+LZq//i2Kr/4diq/+HXqf/h16j/4den/9/V + pP/d0Zz/3NGa/9zQmv/b0Jn/29CY/9vQmP/azpX/18uR/9XIjP/UxIj/0sKF/9PEiP/WyYz/2MuQ/9nM + kv/ZzJH/2cyQ/9jLkP/Yy4//2MuO/9jLjv/Yy4z/1sqL/9bKi//Wyor/1smK/9bJif/WyYn/1cmI/9TI + h//Ux4b/1MeF/9THh//WyYv/1sqL/9bKi//WyYn/1ciJ/9XIiP/UyIf/1MiG/9THhv/Ux4X/08SF/9PD + hP/Tw4P/08KD/9PCgv/TwoH/0sJ//9HBf//RwX//0cF+/9HAff/RwH3/2MyS/97Uov+/sGf/r5s//5qG + Jf+ikkP/39e7/+3p1v/r5tH/7OjT/+zo0//t59H/7OfQ/+vmzv/s5s//7OfQ/+3o1P/u6tn/7uze//Du + 4//w8Of/8vDq//Ly7P/y8e3/8vHt//Lx7f/a2NL/pKGU/52ai/+koZT/q6ic/52ai/+qp5v/pKGU/6Sh + lP+in5H/pKGU/6ypnf8PNU//DDNO/wwzTv8MM07/E0Bb/zJ3lv8fVXX/H1V1/x9VdXn///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wG3pE8Tt6RP793Tnqft58vP3dKctdzRmbPc0Zq13dKatd3SmrXd0pu13dKctd3SnLXd0py13dOdt93T + nbfe05633tOet97Tnrfe05+33tOft97UoLfe1KC339Shud/Uobnf1KG539Shud/Uobnf1aG539Whud/V + ornf1aK539Wiud/Vornf1aK539Wiud/Vornf1aK539Sgud/UoLne1ajn4Net/+XcsP/l3LD/5Nuw/+Tc + sP/k27D/49qu/+HWqf/f1af/3tSl/9/Vpv/h16r/4tms/+Tarv/k2q7/5Nqu/+Parf/j2a3/49mt/+PZ + rP/j2az/49mr/+PZq//j2av/5Nyy/+betv/m3rb/5t61/+betf/m3rX/5t20/+XdtP/l3bP/5d2z/+Xd + s//l3LL/5dyy/+Xbsf/k27D/5Nuv/+Pbr//j267/49qu/+LZrf/i2az/4tmr/+LZq//h2Kv/4dep/9/U + o//c0pz/3NGc/9rPmP/XypL/1cmO/9THjP/WyI7/2MuS/9nNk//az5f/2s6V/9rOlf/azpT/2s2T/9nN + k//ZzZL/2cyS/9nMkf/ZzJH/2MuQ/9jLj//Yy47/2MuO/9jLjf/Xyoz/1sqL/9bKiv/WyYr/1smJ/9bJ + if/VyYj/1ciI/9bKi//Xy47/1sqN/9bKjP/Wyov/1sqL/9bJif/VyYn/1ciI/9XIiP/UyIb/1MeG/9TH + hf/Tx4T/08eD/9PCg//TwoP/08KC/9PCgf/SwX//z756/828d//LuXT/y7hx/8q6c//i2a3/2s+Z/7Wi + TP+wnkf/jnwi/+Pev//t6tb/7enV/+3o1P/t6NP/7efR/+zn0P/s5s//7ObP/+zn0P/t6NT/7urZ/+/s + 3v/w7uP/8fDn//Hw6f/y8uz/8vLu//Ly7v/y8e3/5OPe/6ShlP+dmov/pqOW/6mmmv+fnI7/qqeb/6Sh + lP+lopX/op+R/6ShlP+rqJz/DzZP/wwzTv8MM07/DDNO/xVEX/8sdJf/H1V1/x9Vdf8fVXVp////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AbekT227qVir6OG7weffuMXd0pu13dKbtd3SnLXd05233dOdt97Tnrfe05633tOft97T + n7fe05+33tSgt97UoLff1KG539Whud/Vobnf1aG539Whud/Vornf1aK539Wiud/Vorng1aO54NWjueDV + o7ng1aO54NWjueDVo7ng1aO54NWjueDVo7ng1aO54NWjud/Vornf1aK539ap3d/XrP/j2a7/4deq/+DW + qf/f1af/4deq/+Par//l27H/5dyx/+TcsP/k27D/5Nuw/+Tbr//k26//5Nqv/+Tar//k2q7/5Nqu/+Ta + rv/j2q3/49mt/+PZrP/j2q7/5d61/+ffuP/m37f/5t63/+bet//m3rf/5t62/+betv/m3rX/5t21/+Xd + tf/l3bT/5d20/+Xds//l3LL/5dyy/+Xbsf/k27D/5Nuv/+Tbrv/k2q7/49qt/+PZrf/h2Kr/3tSk/9nN + l//XypL/18uT/9nMlf/bz5n/3NGb/9zRm//c0Jr/29CZ/9vQmf/b0Jj/29CY/9rPl//azpX/2s6V/9rO + lP/azZT/2c2T/9nNkv/ZzJL/2cyR/9nMkf/Yy5D/2MuP/9jLj//Yy47/2MuN/9fKjP/Xyoz/1sqK/9bJ + iv/WyYn/18qL/9jMkP/YzI//2MyP/9fLjv/Wyo3/1sqM/9bKi//Wyov/1smJ/9XJif/VyIj/1ciI/9TI + hv/Ux4b/08SE/9HCgP/Pv3z/zbx4/8y5dP/Jt3H/y7p0/9C/e//RwX//0cF+/9HAfv/RwH3/2c2U/9/V + o/+/r2X/rps+/5mFJv+qnFL/7erW/+3q1f/u6dT/7OjT/+3n0v/s59D/7ObP/+vmz//s5tD/7ejU/+3q + 2P/v7N3/8O7i//Hv5v/y8On/8/Ls//Ly7v/y8u7/8vLu/+7u6v+koZT/n5yO/6ShlP+pppr/npuM/6mm + mv+joJP/pqOW/6GekP+koZT/qqeb/xA2UP8MM07/DDNO/wwzTv8aSWP/LnSX/x9Vdf8fVXX/H1V1W/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wG3pE8Ht6RP29bJi5/t58vP4Naku97Tnrfe05633tOet97Tnrfe1J+33tSgt9/U + obnf1KG539Whud/Vornf1aK54NWjueDVo7ng1aO54NWjueDWpLvg1qS74Naku+DWpLvg1qS74Naku+DW + pbvg1qW74Nalu+DWpbvg1qW74Nalu+DWpbvg1qW74Nalu+DWpbvh16a74Naku9/XqdPe1q3/5d2y/+Xd + sv/l3bL/5d2y/+Xdsv/l3bL/5dyy/+Xcsv/l3LH/5dyx/+Xcsf/l3LH/5Nuw/+TbsP/k27D/5Nuv/+Ta + r//k2q//5Nqu/+Tarv/k26//59+4/+ffuf/n37n/59+4/+ffuP/m37f/5t63/+bet//m3rf/5t62/+be + tv/m3rX/5t21/+Xdtf/l3bT/5d20/+Xds//l3LL/5Nuw/+HYq//f1aj/3tSm/9/Vpf/f1af/4teo/97U + of/e05//3tOf/97Snv/e0p7/3dKd/9zRnP/c0Zv/3NGb/9zRmv/c0Jr/29CZ/9vQmP/b0Jj/28+X/9rO + lf/azpX/2s6U/9rNlP/azZP/2c2S/9nMkv/ZzJH/2cyR/9jLkP/Yy4//2MuP/9jLjv/Yy43/18qM/9fK + jP/Xyoz/2cyQ/9nNkv/ZzJL/2cyQ/9jMj//YzI//18uO/9fLjv/Wyoz/1sqL/9bJi//Ux4f/0cGB/9C+ + fv/OvXv/zLp3/869ev/RwH//08eF/9PHg//Tw4P/08OC/9PCgv/TwoD/08KA/9HBf//RwX7/0cF+/9LB + gP/j2q//2M6X/7ajTP+wn0n/j3wj/+fiyP/t6tX/7enU/+zp0//t6NL/7ObQ/+zmz//r5c7/7ObQ/+3n + 0//t6tj/7+zd//Dt4f/x7+X/8vDp//Py7P/z8u3/8/Lu//Ly7v/y8u7/paKV/6Cdj/+lopX/pKGU/6Cd + j/+opZj/pKGU/6ekl/+gnY//pKGU/6qnm/8SN1D/DDNO/wwzTv8MM07/HUxn/zFvjf8fVXX/H1V1/x9V + dUv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AbekT0u5plK/6OG8v+rjwcve1J+33tSft9/UoLnf1KC539Whud/V + obnf1aK54NWjueDWpLvg1qS74Naku+DWpbvg1qW74Nalu+DWpbvg1qW74Nalu+HXprvh16a74demu+HX + p7vh16a94demveHXpr3h16a94demveHXpr3h16a74demu+HXprvh16e74denu+HXp7vh16nF3tWt/+bd + tP/m3bT/5t20/+bdtP/m3bP/5t2z/+bds//m3bP/5t2y/+Xdsv/l3LL/5dyy/+Xcsf/l3LH/5dux/+Tb + sP/k27D/5Nuw/+Tbr//l3LL/5+C6/+fgu//n4Lv/6OC6/+jguv/o4Ln/5+C5/+ffuP/n37j/59+4/+ff + t//n37f/5962/+XdtP/k27H/4tiu/+DWq//g16v/4tis/+Par//k3LL/5dyy/+Tcsf/k3LD/4tip/9/U + ov/f1KL/39Sh/97ToP/e05//3tKe/97Snv/d0p3/3NKc/9zRm//c0Zv/3NGa/9zQmv/b0Jn/29CY/9vQ + mP/bz5f/2s+X/9rOlf/azpX/2s2U/9rNk//ZzZL/2cyS/9nMkf/ZzJH/2MuQ/9jLj//Yy4//2MuO/9jL + jv/YzJD/2s6V/9rOlf/ZzpT/2c6T/9nMkf/YzJD/18qN/9THiP/SwoT/0cCB/8+9ff/Pv3//08SF/9XI + if/VyYj/1ciI/9XIh//Vx4f/1MeG/9THhf/Tx4X/08eE/9PDg//Tw4L/08OC/9PCgP/SwYD/0cF//9HB + fv/RwX7/2s6W/97Uov+9rF//rpo9/5iEJv+xo1//7urW/+7p1f/s6dP/7ejS/+zn0P/s5s//6+XO/+zm + 0P/t59L/7enX/+/r3P/w7eH/8e/l//Lw6f/z8ev/8/Lt//Py7v/x8Ov/8e/q/6ajlv+koZT/o6CS/6Sh + lP+hnpD/qKWY/6ShlP+npJf/n5yO/6ilmP+opZj/EjdQ/wwzTv8MM07/DDNO/x5Pa/8sZoP/H1V1/x9V + df8fVXU9////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bt6RPu8q5cpXs5cnN5Nuuwd/Vobnf1aK539Wiud/V + o7nf1aO54Naku+DWpbvg1qW74Nalu+HXprvh16a74demu+HXpr3h16a94demveHXp73h16e94tioveLY + qL3h2Ki94dioveHYqL3h2Ki94dioveHYqL3h2Ki94tipveLYqb3i2Ki94tioveLYqL3i2Ki94tipvd3V + rf/m3bX/5961/+betf/m3rX/5t20/+bdtP/m3bT/5t20/+bds//m3bP/5t2z/+Xds//l3bP/5dyy/+Xc + sv/l3LH/5dyx/+Xbsf/m3rb/6eG8/+jhvP/o4bz/6OG7/+jhu//o4Lv/6OC7/+jguv/n37n/5t62/+Tb + s//j2bH/4tmw/+Tasv/l3bX/5t62/+betv/m3rb/5t61/+betf/m3bT/5d20/+Xcs//l3LH/4tio/+DV + pP/g1aP/4NWj/9/Uov/f1KH/39Sh/97ToP/e05//3tKe/93Snf/c0pz/3NGc/9zRm//c0Zr/3NCa/9vQ + mf/b0Jj/29CY/9vPl//az5f/2s+W/9rOlf/azZT/2s2T/9nNkv/ZzJL/2cyR/9nMkf/Yy5D/2MuP/9nM + kf/azpb/2s+W/9nOlP/Wyo7/1ciL/9PEiP/RwYP/08OF/9bIi//Yy47/2MyP/9jLjv/Xy47/1sqN/9bK + i//WyYr/1cmK/9XJif/VyIj/1ciH/9XHh//Ux4X/08eF/9PHhP/TxIP/08SD/9PDgv/Tw4L/08OA/9LB + gP/RwX7/0cF+/9LDgf/j2q//2MyU/7ajTf+vnkn/kH0k/+rmz//u6dX/7enU/+7o1P/s59D/7ObP/+zn + z//s59D/7efS/+3p1//v6tv/7urc/+rm1//k3sz/4NjC/9zUu//d1bz/4NrE/+7s5P+rqJz/paKV/6Kf + kf+joJP/op+R/6Wilf+joJP/qKWY/5+cjv+opZj/qKWY/xM4Uf8MM07/DDNO/wwzTv8eUm7/JmF//x9V + df8fVXX/H1V1Mf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AbekTzG4pVDV6OC6u+zmytHf1aO54Naju+DW + pbvg1qW74Nalu+HXprvh16a94demveHXpr3h2Ki94dioveLYqL3i2Km94tipveLYqb3i2Km94tmqveLZ + qr3i2aq94tmqveLZqr3i2aq94tmqveLZqr3j2au949mrvePZq73j2au949mrveLYqb3i2Km94tipveLZ + qr/f17D55d21/+fetv/n3rb/5962/+fetv/n3rX/5961/+betf/m3rX/5t20/+bdtP/m3bT/5t20/+Xd + tP/l3bP/5d2z/+Xds//n4Lr/6eK+/+nhvv/p4b3/6eG9/+jgvP/l3bf/5Ny0/+TbtP/l3LX/5t64/+ff + uv/o4Lv/5+C6/+ffuv/n37n/59+5/+ffuf/n37j/5963/+bet//m3rb/5t62/+bdtP/k3LL/4deo/+DW + pf/g1qT/4NWk/+DVo//g1aP/39Si/9/Uov/f1KH/39Sg/97ToP/e0p7/3tKe/9zSnP/d0Zz/3NGb/9zR + mv/c0Jr/29CZ/9vQmf/b0Jj/28+X/9rPl//az5b/2s6V/9rOlf/azZP/2c2S/9nMkf/Xy5D/1MiK/9XI + jP/WyY//1MeL/9XIjf/Yy5L/2s6W/9vOlv/azpX/2c6U/9nNk//ZzJL/2cyR/9nMkP/YzI//2MuO/9jL + jf/Xy43/1sqL/9bJiv/VyYr/1cmJ/9XJiP/VyIf/1ceH/9THhf/Tx4X/08eE/9PEg//TxIL/08OC/9PD + gv/Tw4D/0sKA/9HBfv/RwX7/29Ca/93UoP+7qVr/rpo+/5iFKP+2qWf/7urW/+3p1P/t6NP/7efR/+vk + zf/l38L/39e4/9zTsv/Zz6//29Gz/+DYv//o49L/8O7l//Px6//z8uz/8/Lu//Py7v/z8u7/r62h/6il + mP+fnI7/pKGU/6ShlP+joJP/pKGU/6qnm/+fnI7/qKWY/6ilmP8TOFH/DDNO/wwzTv8MM07/IVp3/x5b + e/8fVXX/H1V1/x9VdSH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bt6RPl8GwY5vs5sjL59+4x+DW + pbvh16a74demu+HYqLvh2Ki94dipveHYqb3i2Km94tmqveLZqr3i2au94tmrveLZqr/i2aq/49msv+PZ + rL/j2ay/49msv+PZrL/j2ay/49msv+Parb/j2q2/49qtv+Parb/j2q2/49qtv+Parb/j2q2/49mrv+Pa + rL/j2qy/4dix8+Tdtf/n37f/59+3/+fftv/n37b/5962/+fetv/n3rb/5962/+fetv/n3rb/5t61/+bd + tf/m3bX/5t20/+betf/o4Lv/6OC7/+beuf/l3bf/5d24/+ffuv/o4b3/6eG+/+nivv/o4r3/6eG9/+jh + vP/p4bz/6OG8/+jhvP/o4Lv/6OC7/+jguv/o4Lr/5+C5/+ffuf/n37j/5964/+betv/k27D/4deo/+HX + qP/h16f/4Nal/+DWpf/g1aT/4NWk/+DVo//f1KL/39Si/9/Uof/f1KH/39Og/97Tn//e0p7/3dKd/93R + nP/d0Zz/3NGb/9zQmv/b0Jn/29CZ/9vQmP/bz5f/2s2V/9jKkP/WyIz/1MSJ/9LBhf/Tw4j/2MuQ/9zQ + mv/d0Zz/3NGb/9zQm//b0Jn/29CY/9vPl//bzpf/286W/9rOlf/ZzpT/2c2T/9nMkv/ZzJL/2cyR/9jL + jv/Yy47/2MuN/9jLjf/Wyoz/1smK/9XJiv/VyYn/1cmI/9XIh//Vx4f/1MeF/9PHhf/Tx4T/08SE/9PE + gv/Tw4L/08OB/9LCgP/SwoD/0cJ+/9PEg//j2q//1sqS/7WiTP+unEb/kX8m/9/Xuf/d1LT/2c+t/9vQ + r//f1bb/5N3A/+zlzv/s6NH/7enV/+/r2f/w7eD/8e/k//Hw5//z8ev/8/Ls//Py7v/z8u7/8/Lu/7u4 + rv+npJf/nZqL/6ShlP+koZT/o6CS/6ShlP+qp5v/npuM/6ilmP+opZj/FDlR/wwzTv8MM07/DDNO/ydj + gP8ZWnr/H1V1/x9Vdf8fVXUT////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AbekTxO3pE/v49qts+/q + 0tXi2aq94dioveHYqL3i2Km94tipveLZqr3i2aq94tmrv+LZq7/j2ay/49qsv+ParL/j2qy/49qtv+Pa + rb/j2q2/49qtv+Parb/j2q2/49qtweParcHk267B5NuuweTbrsHk266/5Nuuv+PbrsHk26/B5NuvweTb + r8Hj2q2/5Nuuv+Hasu3k3Lb/6N+4/+jfuP/n37f/59+3/+ffuP/n37j/59+3/+fft//n3rf/5t21/+Tb + sf/j2a//4tit/+PasP/n37v/6eLA/+rjwf/q5MH/6uPA/+rjwP/q48D/6uLA/+riwP/p4r//6eK+/+ni + vv/p4r7/6eG+/+nhvf/p4b3/6OG9/+jhvP/o4Lv/6OC8/+jguv/o4Lr/59+5/+ffuP/k2q7/4tiq/+HY + qf/h2Kn/4deo/+HXp//h16b/4Nem/+DVpP/g1aT/4NWj/+DVo//f1KL/39Sh/9/Uof/f06D/3tOf/97T + nv/d0p3/3dGc/9zQmv/azZb/2MuS/9bJkP/UxIv/1smO/9nMk//az5f/2s+W/9rOlf/bzpb/3NGc/93T + nv/d0p7/3dKd/93RnP/d0Zv/3NCb/9vQmf/b0Jj/28+X/9vOl//bzpb/2s6V/9nOlP/ZzZP/2cyS/9nM + kf/YzJD/2MuP/9jLjv/Yy43/18qM/9fKjP/WyYr/1cmK/9XJif/VyIf/1ceH/9XHhv/Tx4X/08eF/9PH + hP/TxIP/08SC/9PDgv/Swn//zr56/827dv/LunT/1sqR/9fLlf+4plT/r5xA/5eEKf+9sXX/7enU/+3o + 0//u6NL/7efR/+znz//t59H/7ejR/+7p1v/w69r/7+3f//Hv4//x8ef/8vHq//Py7P/z8u7/8/Lu//Py + 7v/Dwbj/qaaa/52ai/+koZT/pqOW/6GekP+koZT/qqeb/56bjP+opZj/p6SX/xY7Uv8MM07/DDNO/wwz + Tv8yaoX/GVx9/x9Vdf8fVXX/H1V1A////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bt6RPeb2r + W6fs5snJ6uPAy+LZqr3i2au/4tmrv+PZrL/j2ay/49qtv+Parb/j2q2/5Nuuv+Tbrr/k266/5NuuweTb + rsHk267B5NuuweTbrsHk26/B5NuvweTbr8Hk27DB5NuwweTbsMHk27DB5NuwweTcscHk27DB5NyxweTc + scHk3LHB5NyxweTbsMHj27Pj49y2/+jguf/o4Ln/6OC5/+ffuP/m3bb/5Nuy/+PZsP/j2rH/5dyz/+be + tv/n37f/59+4/+jhu//r5ML/6+TC/+vkwv/r5ML/6uTC/+rkwf/q5MH/6uTB/+rjwf/q48H/6uPA/+ri + wP/p4r//6eK//+niv//p4r7/6eG+/+nhvf/p4b3/6OG9/+jhvP/o4Lz/6OC7/+ffuP/j2q7/4tmr/+LZ + q//i2Kr/4dip/+HYqf/h16j/4deo/+HXp//g16b/4Nal/+DVpP/g1aP/4NWj/9/Uov/e06D/3NCb/9rO + mP/YzJX/18qR/9jMlP/bzpn/3dGd/93Rm//c0Jr/29CZ/9vQmf/b0Jj/28+X/9rPl//c0Jr/3tOg/97T + of/e05//3dOf/93Sn//d0p3/3dKc/93Rm//c0Jv/29Ca/9vQmP/b0Jj/286X/9vOlv/azpX/2c6U/9nN + k//ZzZP/2cyR/9jMkf/Yy4//2MuP/9jLjf/Yy43/18mL/9bJiv/VyYn/1cmJ/9XIh//Vx4f/1ceG/9PD + g//QwX//zb14/8y6df/MunT/zr16/9PDgf/SwoD/0sJ//9PHhP/i2q7/1ciO/7WiTP+tm0b/lIEq/+7p + 1f/t6dT/7ujS/+3n0f/t59D/7OfQ/+3o0f/u6dX/8Ova//Dt3//y7+T/8fHn//Px6v/z8+z/8/Pu//Py + 7v/z8u7/zs3C/6ajlv+em4z/pKGU/6qnm/+fnI7/qaaa/6ilmP+em4z/rKmd/6ShlP8XPFL/DDNO/wwz + Tv8MM07/PXKM/xtYef8fVXX/H1V19f///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Abek + Twe3pE/b18uQo+/q09Xl3LLD49qtv+Parb/j2q2/49qtv+ParcHk267B5NuvweTbr8Hk26/B5NuwweTb + sMHk27DB5NuwweTbsMHk3LHD5dyxw+XcscPl3LHD5dyxw+XcscPl3LLD5dyyw+XcssPl3LLD5dyyw+Xc + scPl3LHD5dyxw+XcscPl3LHD5Ny02+Has//k2rL/5Nuz/+Xctf/m3rf/6OC6/+jguv/o4Lr/6OC6/+jg + uv/o4Ln/5+C5/+rivv/r5cT/6+XE/+zlxP/s5cT/6+TD/+vkw//r5MP/6+TD/+vkw//q5ML/6uTC/+rj + wv/q48H/6uPB/+rjwf/p48D/6uLA/+niv//p4r//6eK+/+niv//o4b3/6OG9/+bet//j2q7/49mt/+PZ + rP/i2av/4tmr/+LYqv/i2Kr/4dip/+HXqP/h16f/39al/97Tof/c0J3/29Cb/9nNmP/azpn/3dKe/9/U + of/f1KH/39Sg/9/ToP/e05//3tOe/97SnP/d0Zz/3dGc/9zQmv/c0Jr/29CZ/9zQmv/e06H/39Wk/9/U + o//f1KL/39Sh/97Tn//d05//3dKf/93Snf/d0pz/3dGc/9zQmv/b0Jr/29CY/9vQmP/bz5f/286W/9rO + lf/ZzpT/2c2T/9nNk//ZzJH/2MyR/9jLj//Yy47/2MuN/9jLjf/Wx4j/08KD/9C/f//OvXv/zLp4/869 + ev/Pvn7/0cKB/9PHhP/TxIT/08SD/9PEgv/Tw4H/0sKB/9LCgP/Swn//3tOg/97Tn/+4plP/sJ1D/5eE + Kv/DuIH/7enU/+7o0//t59H/7efQ/+zn0P/t6NH/7unV/+7r2f/w7d//8u/j//Lx6P/z8er/8/Ps//Py + 7f/z8+7/8/Pu/9nY0f+lopX/n5yO/6ShlP+opZj/n5yO/6mmmv+pppr/n5yO/6ypnf+koZT/GDxT/wwz + Tv8MM07/DDNO/z54k/8bU3L/H1V1/x9Vden///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bt6RPVbmnU7ns5snJ7efK0eParcHj2q3B5NuvweTbr8Hk26/B5NuvweXcscHk3LHD5Nyxw+Xc + scPl3LHD5dyxw+XcssPl3bPD5d2zw+XcssPl3LLD5d2zw+Xds8Pl3bTD5d20w+bdtMPm3bTD5t20w+bd + tMPm3bTD5t20w+Xds8Pl3bPD5d2zw+XctdHi2rb/6eG8/+nhu//p4bv/6OC7/+jhu//o4bv/6OG7/+jg + uv/o4Lr/6OC7/+vjwf/s5sj/7OXH/+zlx//s5cf/7OXH/+zlx//s5cT/6+TE/+vlxP/r5cT/6+XE/+vl + w//r5MP/6+TD/+vkwv/q5ML/6uTB/+rjwf/q48H/6uLA/+riwP/q4r//6eK+/+Xdtf/j2q//49qu/+Pa + rv/j2a3/49mr/+LYqv/g1qf/3tSj/93Tof/b0J7/3NGf/9/UpP/g1qb/4den/+DWpv/g1qX/4Nal/+DV + o//f1aP/39Wi/9/Uof/f1KD/39Og/97Tn//e057/3tKe/97Snf/d0Zv/3NCb/97ToP/g1qb/4Nal/9/W + pf/f1qX/39Sj/9/Uov/f1KH/3tOg/93Tn//d0p7/3dKd/93SnP/c0Zz/3NCa/9vQmv/b0Jn/28+Y/9vP + l//bzpb/2s6V/9rNlP/ZzZP/2MqP/9XIi//Tw4X/0cGC/8+/f//QwIH/08OG/9bHiP/WyYr/1smJ/9bJ + if/WyIf/1ceG/9THhv/Ux4b/08eE/9PEhP/TxIL/08SC/9PDgf/SwoH/0sJ//9XIh//i2a3/08eL/7Wi + S/+rmUP/loQu/+3q1P/u6NP/7efR/+3n0P/t5tD/7efQ/+7p1f/u6tn/8O3e//Hv4//y8Ob/8/Hq//Tz + 7f/08+7/8/Pu//Pz7v/h4dv/pKGU/5+cjv+mo5b/p6SX/56bjP+pppr/qaaa/6Cdj/+qp5v/paKV/xo+ + U/8MM07/DDNO/wwzTv87fZv/G1Jw/R9Vdf8gVXXZ////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wG3pE/Dz759m+/q0tPn37jH5NyxweTcscHk3LHD5Nyxw+XcssPl3LLD5dyyw+Xd + s8Pl3bPD5d2zw+Xds8Pl3bTD5t20w+bdtMPm3bTD5t20w+bdtMPm3bTD5t20xebetcXm3rXF5t61xebe + tcXm3rXF5t61xebetcXm3rXD5t21xebetcPl3rXJ4dq3/+nhvf/p4b3/6eG8/+nhvP/p4bz/6eG8/+nh + vP/o4bv/6eG9/+zlxP/t5sn/7ObI/+zmyf/s5sj/7ObI/+zmyP/s5sj/7ObI/+zlx//s5cf/7OXH/+vl + x//r5cT/6+XE/+zlxP/r5MT/6+TD/+vkw//q5ML/6uTC/+rjwv/q48H/6eK//+Xcs//j2q//4tis/+DW + qP/f1ab/3dKj/97Upf/h16n/4tiq/+LZq//i2av/4tiq/+HYqf/h2Kn/4deo/+HXp//h16f/4Nem/+DW + pf/g1qX/4Nak/9/Vo//f1aL/39Sh/9/UoP/f06D/3tOf/97Tnv/e0p7/3tSe/+HXpv/h16j/4den/+HW + p//g1qX/39al/9/VpP/f1KP/39Si/9/Uof/e1KH/3dOg/93Snv/d0p7/3dKc/9zRnP/c0Zv/29CZ/9rP + lv/XypD/1MeM/9PDif/Sw4b/1MSJ/9XKjf/Yy5D/2M2S/9jLkP/Yy4//2MuO/9jLjf/Xyoz/18qM/9bJ + iv/WyYn/1siI/9bIh//Wx4b/1MeG/9THhf/TxIT/08SD/9PEg//Tw4H/08OB/9LCgf/Swn//39Sj/97T + n/+3pVH/sZ9H/5aEKv/Lv4z/7unT/+3o0P/t59H/7ObP/+3n0P/t6NP/7urY//Dt3v/x7uL/8vDm//Px + 6v/08+3/9PPu//Tz7//y8ez/6Ofh/6ajlv+hnpD/paKV/6ilmP+fnI7/q6ic/6ajlv+joJL/pqOW/6Sh + lP8cP1T/DDNO/wwzTv8MM07/NH2d/xpQb/8fVXX/H1V1x////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Bt6RPMbilUNXr5cTF7+rR1+XcscPl3LLD5d2zw+Xds8Pl3bPD5d20w+Xd + tMPm3bTF5t20xebdtMXm3rXF5t61xebetsXm3rbF5t62xebft8Xm37fF5t+3xebft8Xm37fF59+3xeff + t8Xm37fF5t+3xebft8Xm37fF5t+3xebetsXm3rbF5t62xeLbt//p4r3/6eK+/+nivv/p4r7/6eK9/+ni + vf/p4r3/6uO//+zmyf/t5sr/7ebK/+3nyv/t58r/7efK/+zmyv/s5sn/7ObJ/+3myf/s5sj/7ObJ/+zm + yP/s5cj/7OXH/+zlx//s5cf/7OXE/+zlxP/r5cT/6+TD/+niwP/o4L3/5d23/+DWqf/g1qn/49qu/+Tb + sP/k26//5Nuw/+Par//j2q7/49qt/+PZrf/j2az/4tms/+LZq//i2Kr/4tiq/+HYqf/h16j/4deo/+HX + p//g16b/4Nal/+DWpf/g1qT/39Wj/9/Vov/f1KH/39Sg/9/ToP/e1KD/4Nan/+LZqv/i2ar/4tmp/+LY + qf/i16f/4dan/+DWpv/f1qX/39Wk/9/Uo//f1KL/39Si/97Uof/c0Z3/2s6X/9nLlP/XypH/1siO/9bK + kf/ZzZX/28+X/9vPmP/bz5f/2s6V/9rOlf/azZT/2c2T/9nNkv/YzJH/2MuQ/9jLkP/Yy47/2MuN/9fK + jP/WyYz/1smL/9bJiv/WyIj/1siH/9bHhv/Vx4b/08eE/9PEhP/TxIP/08SC/9PEgf/SwoH/0sKA/9bJ + iv/h2az/0MGG/7WhS/+pl0D/mog0/+7p0//t6NH/7efQ/+zo0P/t6NH/7ujT/+7q2P/w69z/7urd/+vn + 2P/l383/4tzJ/9/Xv//b07r/4dvI/+zq4f+npJf/o6CS/6Ogk/+lopX/n5yO/62qnv+koZT/o6CS/6aj + lv+lopX/HUBU/wwzTv8MM07/DDNO/zCBof8ZTm7/H1V1/x9Vdbv///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wG3pE+jxLRqme/q0dPq48HN5d2zw+bdtMXm3bTF5t61xebe + tcXm3rXF5t61xebetcXn37fF59+3xeffuMXn37jF59+4x+ffuMfn4LnH5+C5x+fgucfn4LnH5+C5x+fg + ucfn4LnH5+C5x+fgucfn37jH59+4x+ffucfn37nH59+4x+ffuMfk3Ln56OG+/+rjv//q4r//6uK//+ni + vv/p4r7/6+TD/+3ny//t58v/7ejM/+3nzP/t58v/7efL/+3ny//t58v/7efL/+3myv/t58r/7efK/+3n + yf/t5sr/7ObJ/+zmyP/r5MT/6eLC/+niwP/o4L7/6eG//+rjw//r5MT/6OC7/+XdtP/l3bP/5d2z/+Xc + s//k27L/5Nux/+Tbsf/k27D/49qv/+Par//j2q7/49qt/+PZrP/i2az/4tmr/+LYqv/i2Kr/4dip/+HX + qP/h16j/4den/+DXpv/g1qb/4Nal/+DWpP/f1aT/39Wj/9/Vov/g1qX/49mt/+Parv/j2q3/4tms/+LZ + q//i2an/4tip/+LXp//h1qf/4NSk/9zRnv/az5v/2c6Y/9jNlv/ZzZj/3NKd/93Sn//d0p//3dKd/93R + nP/c0Zz/3NGb/9zQmf/b0Jn/28+X/9vPl//az5b/2s2U/9rNlP/ZzZP/2c2S/9jNkv/Yy5D/2MuO/9jL + jv/Yy43/18qM/9bJjP/WyYv/1siJ/9bIif/WyIb/1ceG/9XHhf/VxIX/08SD/9PEg//TxIP/08OB/9LC + gf/SwoD/4Nam/93Snv+2pE//tKFL/5aDKv/RyJj/7ujS/+rjyv/k3sH/4dm5/93Us//a0bD/29Gz/+Ha + wv/q5dT/8vHp//Ty7P/08+3/9PPv//Tz7//08+//pqOW/6Wilf+joJP/pqOW/56bjP+sqZ3/paKV/6Sh + lP+koZT/pKGU/yNEVv8MM07/DDNO/wwzTv8wf6H/GlN0/x9Vdf8fVXWt////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bt6RPG7ekT+Xm3re78ezX2effuMXm3rbF59+3xeff + t8Xn37fF59+3x+fft8fn37jH59+4x+ffuMfn37jH5+C5x+fgusfo4LrH6OC6x+jgusfo4LrH6OC6x+jg + usfo4LrH6OC6x+jgusno4LrJ6OC6yejgusfo4LrH6OC6x+jgu8fn4LnH5N679ejhvv/q48D/6uPA/+rj + wP/q48D/7OXH/+7ozf/u6M3/7ujN/+7ozf/u6M3/7ujM/+7ozP/u6Mz/7ujM/+3oy//t5sr/7ObJ/+vk + x//q48T/6eHB/+rjw//s5cj/7ObK/+zmyf/s5sn/7ObJ/+3myP/r5cT/5+C5/+betf/l3rX/5d20/+Xd + tP/l3bP/5d2z/+Tcsv/k27L/5Nux/+TbsP/k27D/49qv/+Parv/j2q7/49mt/+LZrP/i2az/4tiq/+LY + qv/h2Kn/4deo/+HXqP/h16f/4Nem/+DWpv/g1qX/4Nak/9/VpP/j2az/5Nux/+TbsP/k26//49qu/+LY + q//f1ab/3tOi/9zSoP/c0J7/3dKg/9/VpP/g1qX/4Nal/9/VpP/f1aP/39Si/9/Uov/e06H/3tOf/93S + n//d0p3/3dGc/9zRm//c0Zv/3NCZ/9vPmP/bz5j/28+X/9rOlf/azZT/2s2U/9nNk//YzZL/2MyR/9jL + kP/Yy47/2MuO/9fKjP/Xyoz/18qL/9bJiv/WyIn/1siJ/9bIh//Vx4b/1ceF/9TEhP/UxIP/08SD/9PE + gf/SwoH/0sKB/9XIi//f1ab/y7p7/7ShSv+lkzr/nIo3/9zSsf/j2r3/6OLJ/+7o0f/t6dL/7urW//Ds + 3P/w7uH/8u/l//Lx6P/08uz/9PPt//Tz7//08+//9PPv/6qnnP+mo5b/o6CS/6ShlP+gnY//rKmd/6Sh + lP+koZT/pKGU/6ajlv8lRVf/DDNO/wwzTv8MM07/QX6a/xxUdP8fVXX/HlR0of///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wG3pE95vatcp+/p0NHt58zR59+3xeff + uMfn37jH59+4x+ffuMfn37jH5+C5x+jgusfo4LrH6OC7yejgu8no4bvJ6OG7yejhvMno4bzJ6OG8yejh + vMno4bzJ6OG8yejhvMno4bzJ6OG8yenhvcno4bzJ6OG7yejhu8no4bvJ6OC7yebfve/o4L//6uTB/+rk + wf/r48H/7efL/+7pzv/u6c7/7ujO/+7ozv/u6M7/7ujN/+3nzP/s5sr/6+XI/+rjxP/r5Mj/7ObK/+3n + y//t6Mz/7ujM/+7ozP/u6Mv/7efL/+3nyv/t58v/7efK/+3nyv/r5MP/59+4/+fet//m3rb/5t62/+fe + tf/m3bT/5d20/+Xds//l3bP/5d2z/+Tcsv/k27H/5Nux/+TbsP/j2q//49qv/+Parv/j2a3/4tms/+LZ + rP/i2av/4tiq/+HYqf/h16j/4deo/+HXp//g16b/4Nam/+HZqv/j27D/4tis/+DWqv/g1af/39Sn/+DW + qf/h2Kz/49qt/+LZrP/i2av/4tmr/+LYqf/i2Kj/4den/+HXpv/g1qX/4NWl/9/Vo//f1aP/3tSh/97T + of/e05//3dKf/93Snf/c0Zz/3NGb/9zRm//c0Jn/28+Y/9vPmP/az5b/2s6V/9rNlP/azZP/2c2S/9jN + kv/YzJH/2MuQ/9jLj//Yy43/18qN/9fKjP/WyYv/1smL/9bIif/WyIn/1siH/9THhv/Tw4H/0MB+/8++ + e//NvHf/zLp0/8y8d//QwH3/4deo/93Snv+2o07/taRQ/5SCKv/Yz6T/7ujS/+3o0P/u6NH/7unT/+/q + 1//v7Nr/8O7g//Lw5f/y8uj/8/Ls//Tz7f/08+//9PPv//Tz7/+uq6D/qqeb/6Cdj/+mo5b/oZ6Q/6yp + nf+mo5b/p6SX/6Ogkv+lopX/KUhY/wwzTv8MM07/DDNO/0V+mP8eVHP/H1V1/x9VdJX///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bt6RPDbekT+Xe1aSt8u3a2+jh + vMnn4LnH5+C5x+jgusno4LvJ6OG7yejhu8no4bvJ6OG8yejhvMno4bzJ6eG9yenhvcnp4b3J6eK+yeni + vsnp4r7J6eK+yenivsvp4b3J6eG9yenhvcnp4b3J6eG9yenivsnp4b3J6eG9yenhvcnn4L/p5+HA/+vk + w//r5MT/7ujN/+7pz//t6M3/7ebM/+zlyv/r5cn/7ObL/+3nzf/u6M3/7unO/+7pzv/u6M7/7unO/+7p + zf/u6c3/7ujN/+7ozv/u6M3/7ujN/+7ozf/u6Mz/7efM/+3nzP/q48D/6N+5/+jfuP/o37j/59+3/+fe + t//n3rb/5961/+fetf/m3bT/5d2z/+Xds//l3bP/5dyy/+Tcsf/k3LH/5Nuw/+Par//j2q//49qu/+PZ + rf/j2a3/4tms/+LZq//i16j/4Nan/97Uov/c0Z//3NCe/+DVqf/i2a//5Nyy/+Xds//l3bP/5Nyy/+Tb + sf/k27H/5Nuv/+Tarv/j2q3/4tmt/+LZq//i2av/4tiq/+LYqP/h16f/4den/+DWpf/g1qT/39Wj/9/V + ov/e1KH/3tOh/97ToP/d0p//3dGd/9zRnP/c0Zv/3NGa/9zQmf/cz5j/28+Y/9rPlv/az5b/2s2U/9rN + k//azZP/2M2S/9jMkf/Yy4//2MuP/9jLjf/Xyoz/1sqL/9XHiP/RwYH/z758/869e//RwH7/1MeE/9XE + hv/UxIP/1MSD/9TEgv/UxIH/08OB/9jLkP/h2Kn/y7t6/7ShSv+lkzv/opFB/+7o0v/t6ND/7ujR/+7p + 0v/v6tb/8Ozb//Hu4f/y8OX/8vLo//Ly6//09O3/9PPv//Tz7//08+//uber/6mmmv+fnI7/paKV/6Ge + kP+qp5v/paKV/6qnm/+hnpD/pqOW/yxKWf8MM07/DDNO/ww0T/87fZr/H1V1/x9Vdf8gVnSF////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wG3pE9buqdVt+/p + 0dHv6tLX6OC7yejhvMnp4bzJ6eG8yenhvcnp4b3J6eG9yenivsvp4r7L6eK+y+nivsvp4r/L6eK/y+ni + v8vp4r/L6eK/y+niv8vp4r/L6eK/y+niv8vp4r/L6eK/y+niv8vp4r/L6eK/y+niv8vp4r/L6OG/4+bf + vv/p4sH/7OXK/+znzP/u6M//7+nQ/+/q0f/v6tD/7+rQ/+/p0P/v6dD/7+nQ/+/p0P/v6c//7+nP/+/p + z//v6c//7+nP/+7pz//u6c7/7ujO/+7ozv/u6M3/7ujN/+3ny//q47//6OC6/+jguv/o4Ln/6OC5/+jg + uf/o4Lj/59+3/+fft//n37b/5962/+bdtP/m3bT/5d60/+Xds//l3LL/5dyy/+Tcsf/k27D/5Nqv/+PZ + rP/g1aj/3tSk/93Sov/d06L/39Wl/+DWqP/h2Kr/5Nuw/+ffuP/m37j/5t63/+betv/m3rb/5t20/+Xd + s//l3LP/5Nyx/+Tbsf/k27D/5Nqv/+Parv/j2q3/4tms/+LZq//i2Kr/4tip/+HYqP/h16f/4Nal/+DW + pP/g1qP/39Wi/97Uov/e06D/3tOg/97Tnv/d0Z7/3NGc/9zRm//c0Zr/3NCZ/9vPmP/bz5j/2s+W/9rO + lf/azZT/2s2T/9jMkP/Wyo3/1MSH/9HBgv/Qv4D/z79+/9LBgv/UxIb/1smL/9bIif/WyIn/1siI/9XI + h//Vx4b/1cSG/9TEhP/UxIP/1MSC/9PDgf/TwoD/4tiq/9zRm/+2o07/t6ZU/5OBKv/c063/7ujR/+3n + 0f/u6dL/7+rW//Ds2//x7eD/8vDl//Py6f/z8uv/9PTt//T07//09O//9PPv/768sv+qp5v/n5yO/6Wi + lf+joJP/qKWY/6Wilf+qp5v/oZ6Q/6ajlv8wTVv/DDNO/wwzTv8MNE//L3mY/x9Vdf8fVXX/H1V1b/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Abek + T8fRwYKd8u3Z2+vkw8/p4b3J6eK+yenivsvp4r7L6eK+y+niv8vp4r/L6eK/y+niv8vq48DL6uPBy+rj + wcvq48HL6uPBy+rjwcvq48DN6uPAzerjwM3q48DN6uPAzerjwMvq48HL6uPBy+rjwcvp48DL6ePAy+ni + wd3p48f/8OvS//Dq0v/w6tL/7+rS/+/q0v/v6tL/7+rS/+/q0v/v6tH/7+rR/+/q0f/v6tD/7+rR/+/q + 0f/v6dD/7+nQ/+/p0P/v6dD/7+nQ/+7pz//u6c//7unP/+3nyv/p4r7/6eG8/+ngu//o4bv/6OG7/+jg + uv/o4Lr/6OC5/+jguP/n37j/59+3/+fftv/n3rb/5961/+Xds//k27D/4tmt/+HXqv/f1af/4Nap/+HY + q//j2q3/49qv/+Parv/j2a3/49mt/+LZrP/j2q7/59+4/+jguv/o37n/59+5/+ffuP/n3rf/5t62/+be + tv/m3bT/5d20/+Xcs//l3LL/5Nyw/+TbsP/k2q//49qu/+ParP/i2az/4tiq/+LYqv/h2Kn/4dio/+HW + p//h1qX/4Nak/+DWpP/f1aL/39Si/97ToP/e05//3tOe/9zRnf/c0Zz/3NGb/9zQmv/azpf/2MyT/9bJ + jv/VxIr/08KH/9PDif/VyIv/2MqO/9jMkf/YzJD/2MuP/9jLjv/Xyo3/18qM/9fKi//WyYv/1siJ/9bI + iP/VyIj/1ciG/9XEhv/VxIX/1MSE/9TEg//UxIP/0sJ//9jLj//g1qX/ybh1/7ShSv+jkTj/p5ZK/+7o + 0f/t6NH/7unS/+/q1v/w7Nv/8e7g//Lw5f/z8un/9fLs//X07v/09O//9PTv//T07//Jx73/p6SX/6Cd + j/+lopX/pKGU/6ekl/+lopX/q6ic/6GekP+lopX/NFBd/wwzTv8MM07/DTRP/yN5nf8fVXX/H1V1/x9V + dWH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wG3pE89uKVRy+/r08/x7Nfb6eK+y+nivsvq4r/L6uPAy+rjwM3q48DN6uPAzerjwc3q5MLN6uTCzerk + ws3q5MLN6uTCzerkws3q5MLN6uTCzevkw83r5MPN6+TDzevkw83r5MPN6uPCzerjws3q48LN6uTCzerj + ws3t58zZ6+bP//Dr0//w69P/8OvT//Dr0//w69P/8OrT//Dr0//w69P/8OvT//Dq0v/w6tP/8OrS/+/q + 0v/v6tH/7+rS/+/q0v/v6tH/7+rR/+/q0f/v6tH/7+nQ/+zmyP/q4r7/6eK9/+nivf/p4b3/6eG8/+nh + vP/o4bv/6OG7/+jguv/n37j/5d22/+Tbs//j2bD/4tiu/+PZr//l3LL/5dyz/+betP/m3bT/5d2z/+Xc + sv/l3LH/5Nuw/+TbsP/j2q//49qu/+Parv/m3rb/6OG9/+jhvP/o4Lz/6OC6/+jguv/n4Ln/59+4/+fe + t//n3rf/5t62/+Xdtf/l3bT/5dyy/+Xcsv/l3LH/5Nuw/+Par//j2q7/49qt/+ParP/i2Kv/4tiq/+HY + qf/h2Kj/4dan/+HWpv/h1qT/4Nak/9/Uov/e1KL/3dKd/9vOmf/YzJX/1sqR/9XIj//XypH/2c2U/9rO + lv/bz5j/2s+X/9rOlv/azpX/2s2T/9rNk//ZzJL/2MyR/9jMkP/Yy4//2MuO/9fKjf/Xyoz/18qL/9bI + iv/WyIn/1siI/9XIiP/VyIb/1cSG/9XEhf/UxIT/08OA/9LBf//SwX7/4tmr/9zRmv+2o07/uadY/5OA + Kf/h2bX/7efR/+7p0v/v6tb/8Oza//Hu4P/y8OT/8/Lp//Ty6//19O7/9fTw//X08P/09O//1dbP/6aj + lv+gnY//pKGU/6Wilf+lopX/pqOW/6ypnf+hnpD/pqOW/zlTX/8MM07/DDNO/w00T/8Zcpf/H1V1/x9V + df8fVXVR////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AbekT6XHtWyZ8u7Z2e7ozdPq48HN6uTCzerkws3r5MPN6+TDzevkw83r5MPN6+TDzevk + w83r5MPN6+TDzevkw83r5MPN6+TDzevkw83r5MTN6+TEzevkxM3r5MTN6+TEzevkxM3r5MPN6+TDzevl + xM/u6c/V7+rS1+zn0P/w69T/8ezV//Hs1P/x7NX/8OvU//Dr1P/w69T/8OvU//Dr1P/w69T/8OvU//Dr + 0//w69P/8OvT/+/r0v/w69P/8OrS//Dq0v/w6tL/7+nQ/+vlxP/q48D/6uO//+rivv/p4r7/6eG8/+jg + uv/m3rj/5Ny1/+Tbsv/k3LX/5t64/+ffuf/o4Ln/6OC4/+ffuP/n37f/59+2/+fetf/m3rX/5t61/+bd + tP/m3bP/5dyy/+Xcsf/k27D/5Nuw/+XetP/p4r7/6eK//+nivv/p4r7/6OG8/+jgvP/o4Lv/5+C6/+fg + uf/n37n/5963/+fet//m3rb/5d21/+XdtP/l3LP/5dyy/+Xcsf/k2q//49qv/+Parf/j2q3/49mr/+LY + q//i2Kn/4deo/9/Vpf/d0qD/28+b/9rOmf/azZj/2s+Z/9zRnP/d0p//39Of/97Sn//d0p3/3NGb/9zR + m//c0Jn/3NCZ/9vPmP/az5f/2s6V/9rOlf/azZP/2c2T/9nMkv/YzJH/2MyQ/9jLjv/Xyo7/18qN/9fK + i//Xyov/1siK/9bIiP/VyIj/1ciH/9XHhv/VxIX/08OB/9PCgP/Twn//0sF//9nNkv/f1aT/xLVv/7Sh + Sv+ikDj/q5tS/+3n0f/u6NH/7+rW/+/s2v/x7eD/8u/k//Px5//s59r/49zJ/+LbyP/l38//6eTX/9vc + 1v+mo5b/oZ6Q/6Wilf+lopX/o6CT/6ajlv+tqp7/oZ6Q/6ajlv9EW2T/DDNO/wwzTv8ONVD/HWOC/x9V + df8fVXX/H1V1Rf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wG3pE8bt6RP5evlw8Pz793f6uXDz+rkws3r5MPN6+XEzevlxM3r5cTP6+XEz+vl + xM/r5cTP6+XEz+vlx8/r5cfP6+XHz+vlx8/r5cfP7OXHz+zlx8/s5cfP7OXHz+zlx8/s5cfP7OXHz+zm + ydHw6tLX8OvU2fDr1Nnt6NL98OvV//Hs1v/x7NX/8ezV//Hs1f/x7NX/8ezV//Dr1f/w69X/8OzV//Ds + 1f/w69X/8OvU//Dr1P/w69P/8OvT//Dr0//w69P/7unP/+rjwv/o4b3/59+7/+feuv/l3bf/5965/+jg + vP/p4r3/6eK9/+nhvf/p4bz/6eG8/+jhu//o4Lr/6OC6/+jguf/o4Lj/59+4/+fft//n37b/5962/+be + tf/m3rX/5t60/+bds//m3LL/5t2z/+jhvf/r5ML/6uPB/+rjwP/p48D/6eK//+nhvf/p4b3/6OG8/+jg + u//n4Lr/5+C5/+ffuf/n37j/5963/+betv/l3bX/5dyz/+Xcs//l3LL/5dyx/+Tbr//j2a3/39Wn/93U + pP/c0qH/3dGg/97Sov/g1qX/4Nen/+HXp//h1qb/4Nak/9/VpP/f1aL/39Sh/9/UoP/f05//3tOe/9zR + nf/c0Zv/3NCb/9zQmf/c0Jn/28+X/9rPl//azpb/2s6U/9rNk//ZzZP/2MyR/9jMkP/YzJD/2MuO/9fK + jv/Xyoz/18qM/9fJiv/WyIr/1siI/9XIiP/Vx4b/08OC/9PDgf/TwoD/08J//9LBf//SwX7/4tms/9rQ + mf+2pE7/uala/5KAKf/j2rj/5Ny9/93Tsv/f1rj/5NzD/+jhz//s6Nn/8e7l//X07v/19PD/9fTw//X0 + 8P/j5eD/qKWY/6Ogkv+mo5b/paKV/6Ogk/+mo5b/raqe/6GekP+lopX/R11l/wwzTv8MM07/DjZR/yZg + fP8fVXX/H1V1/x9VdDn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AbekT4fArmGh8u7Z2fDr1Nfr5cTP6+XHz+vlx8/s5cfP7OXHz+zl + x8/s5cfP7OXHz+zmyc/s5sjR7ObI0ezmyNHs5sjR7ObJ0ezmydHs5snR7ObJ0ezmyM/s5sjP7ObIz+3o + zNPw69XZ8ezV2fHs1tnw7NXZ7unT+fDr1f/x7Nb/8ezX//Lt1//x7db/8e3W//Hs1v/x7Nb/8ezW//Hs + 1v/x7Nb/8ezW//Hs1f/x69X/7+rT/+/p0f/u6dD/6+TH/+jhvv/q48H/6+TC/+vkwf/q48H/6uPA/+rj + wP/q47//6uO//+rivv/p4r3/6eK9/+nhvf/p4bz/6OG7/+jhu//o4Lr/6OC5/+jguf/n37j/59+3/+ff + tv/n3rb/5961/+betf/m3rT/6OC5/+vkw//r5cP/6+TD/+vkwv/q5ML/6uTB/+njwP/p47//6eG+/+nh + vf/o4bz/6OG8/+fguv/n4Lr/59+5/+ffuP/m3rb/5Nuy/+PZrv/h16v/4daq/+DXqv/h2Kv/49qu/+Pb + r//j2q7/49qt/+PZrP/i2av/4dip/+HYqf/h16j/4den/+HXpv/g1qT/39Wk/9/Vov/f1KH/39Sf/97T + n//d053/3dKd/9zRm//c0Jv/3NCZ/9vQmP/bz5f/2s6W/9rOlf/azpT/2c2T/9nMkv/ZzJL/2MyQ/9jL + j//Xyo7/18qN/9fKjP/Xyov/18mK/9bIiv/VyIf/1MSD/9PDgv/Tw4H/08OB/9HAff/OvXj/yrlx/9LC + h//Yy5X/v69l/7ShSv+gjjb/r6Ba/+7nzv/v6tX/8OzZ//Lu3//y7+P/8/Hn//Ty6//19O7/9fTw//X0 + 8P/19PD/6urm/6mmmv+koZT/pKGU/6ajlv+joJL/pqOW/6qnm/+in5H/paKV/1Fkav8MM07/DDNO/w42 + Uf8kXXr/H1V1/x9Vdf8gVnQr////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wG3pE8Nt6RP5eDXqrP08N/h7efL0ezmyM/s5snP7ObJ0ezm + ydHs5snR7ObJ0ezmydHs5snR7ObK0ezmytHs5srR7ObK0ezmytHs5srR7ObK0ezmytHs5srR7ObK0e/p + 0NXx7Nbb8ezW2/Hs1tvx7Nbb8e3X2+/q1ffw69b/8u3Y//Lt2P/y7dj/8u3X//Lt2P/x7df/8ezX//Dr + 1P/v6tP/7+rT/+7p0f/v6tL/8evV//Hs1v/x7NX/7efM/+zlx//s5cT/6+XE/+vkw//r5ML/6+TC/+vk + wf/q48H/6uPA/+rjwP/q47//6uK+/+nivv/p4r3/6eG9/+nhvP/p4bz/6OG7/+jguv/o4Ln/6OC5/+jg + uP/n37f/59+3/+fetv/n37j/6+TC/+zmyP/s5cj/7OXH/+zlxP/r5MT/6+TD/+rkwv/q5MH/6ePA/+nj + v//p4r//6OG8/+ffuf/l3bb/49qz/+Pasf/j27L/5dy0/+bdtf/m3rb/5t21/+XdtP/l3bP/5dyy/+Xb + sf/k27D/5Nuv/+Parv/j2q3/49ms/+LZqv/h2Kr/4deo/+HXqP/h16b/4dem/+DVpP/f1aT/39Wj/9/U + of/f06D/3tOf/97Tnv/d05z/3dKb/9zQmv/c0Jn/29CY/9vPl//azpb/2s6U/9rOlP/ZzZP/2cyS/9jM + kP/YzJD/2MuO/9fKjv/Xyoz/18qM/9fJiv/Uw4T/z758/826df/LuXT/yrlx/8y6df/Pvnn/0cB9/9LB + fv/TwoD/49qu/9rOl/+3pE7/uapc/5OBKv/o4sL/7+rV//Dr2f/y79//8/Dj//Ty5//08uv/9PPt//X0 + 7//19PD/9fTw//Dw7P+opZj/pqOW/6ShlP+koZT/o6CS/6mmmv+qp5v/op+R/6ShlP9SZWr/DDNO/wwz + Tv8OOFP/Hl18/x9Vdf8fVXX/H1V1Gf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AbekT2G6qFaz8u7Z1/Lt2d3s5snR7ObJ0ezm + ydHs5snR7ObJ0e3ny9Ht58vR7efL0e3nzNHt58zR7efM0e3nzNHt58zR7efM0e3nzNHt58vT7efM0/Dr + 09fx7Nfb8e3X2/Ht2Nvx7djb8e3Y2/Ht2Nvv69fz8OvX//Ht2P/w69b/8OvV//Dq1P/v6tT/8OvW//Ht + 1//y7dj/8u3Y//Lt2P/y7dj/8u3X//Ht1//w69T/7efL/+zmyP/s5sj/7OXH/+zlx//r5cT/6+TD/+vk + w//r5ML/6+TC/+vkwf/q48D/6uPA/+rjwP/q47//6eK+/+nivv/p4r7/6eG9/+nhvP/o4bz/6OC6/+jg + uv/o4Ln/6OC4/+ffuP/q48D/7efK/+3ny//t5sr/7ObI/+zmyP/s5sf/7OXH/+vkw//p4sD/59+8/+be + uf/m3bn/5t+5/+jgu//o4L3/6OG8/+jhu//n4Lr/59+6/+ffuf/n37j/5t+3/+betv/m3bX/5t20/+Xd + s//l3LL/5dux/+TbsP/j267/49qu/+PZrf/j2az/4tmq/+HYqf/h16j/4den/+HXp//g1qX/4NWk/9/V + o//f1aL/39Sg/9/ToP/e057/3dOd/93SnP/d0Zv/3dGa/9zRmP/b0Jj/286W/9rOlv/azpT/2c2T/9nM + kv/ZzJL/2MyQ/9jKjf/RwoT/0L5//9C/gP/RwID/08OD/9TDhP/UxIX/1MSD/9PDgv/Tw4H/08OB/9PC + gP/Twn//0sF+/9rPl//d06D/wK9l/7SiS/+fjjb/t6hn/+/q1v/w7Nn/8u3e//Lv4v/08ub/9fPr//b0 + 7f/19O7/9fTw//X08P/19PD/qqeb/6ilmP+koZT/pKGU/6Ogkv+qp5v/qqeb/6Kfkf+lopX/Vmhs/wwz + Tv8MM07/EDlV/xddf/8fVXX/H1V1/x9VdQn///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wG3pE8Dt6RPz9bKkaX08eDh7+nQ1e3n + zNHt58zR7efM0e3nzNPt58zT7efM0+3nzNPt6M3T7ejN0+3ozdPt6M3T7ejN0+3ozdPt6MzT7ujO0/Hs + 1tvy7dnd8u3Z3fLt2d3y7dnd8u7a3fLt2d3y7dnd8OzY7+/r1//y7dn/8u7Z//Lu2v/z7tr/8+7a//Lu + 2f/y7tn/8u7Z//Lt2f/y7tn/8u7Z//Lt2f/w69L/7efL/+3nyv/t5sn/7ObJ/+zmyf/s5cf/7OXH/+zl + x//r5cT/6+TD/+vkw//r5ML/6+TB/+rjwf/q48H/6uPA/+rjv//q4r//6eK+/+nivv/p4b3/6eG8/+jh + vP/o4Lv/6OC6/+nhvf/t58r/7ujN/+3nzP/t5sr/6+TH/+niwv/p4cD/6eHA/+niwf/q48P/6+TD/+vk + w//r5ML/6+TC/+rjwP/q48D/6eK//+nivv/o4r7/6OG8/+jgu//o4Lr/59+5/+ffuP/m37f/5t62/+bd + tf/m3bT/5d2z/+Xcsv/k27H/5Nuv/+Tbr//j2q3/49ms/+LZq//i2av/4dip/+HXqP/h16f/4dem/+DW + pf/g1aT/39Wj/9/Vov/f1KD/3tOf/97Tnv/e053/3dKc/93Rmv/c0Zr/3NGY/9zQmP/ZzJP/1smO/9PD + hv/Tw4f/1ceJ/9TEif/WyYv/2MuP/9fLj//WyYr/1ciI/9XIh//Vx4b/1cSF/9TEhP/UxIP/08OC/9PD + gf/TwoD/08J//9LBfv/Sw4D/49qv/9jMlf+3pE//ualc/5SCLP/s5s//8OvZ//Lt3v/y7+P/9PLn//Xz + 6//29O3/9vXu//b18P/19PD/9fTw/6uonP+qp5v/oZ6Q/6ShlP+joJL/qqeb/6qnm/+joJL/p6SX/1lq + bv8MM07/DDNO/xI8V/8SWn//H1V1/x9Vdfn///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AbekTz24pVHL8+7b1/Tw + 3uHt6M3T7ejN0+3ozdPu6M7T7ujO0+7oztPu6M7T7ujO0+7oztXu6M7V7ujO1e7oztXu6c7V7+nQ1fHt + 2Nvy7trd8u7a3fLu2t3y7trd8u7a3fLu2t3y7trd8u7a3fHt2uvw7Nj/8+7b//Pv2//z7tv/8+7b//Pu + 2v/z7tr/8+/a//Pu2v/y7tr/8u7a//Lt2f/v6dD/7ujM/+7ny//t58v/7efL/+3nyv/s5sn/7ObJ/+zm + yP/s5cj/7OXH/+zlx//r5cT/6+TD/+vkw//r5ML/6+TC/+rjwf/q48D/6uPA/+riv//p4r7/6eK+/+nh + vf/p4b3/6OC7/+niwP/r5cn/6+XJ/+vlyf/s5sn/7ebM/+3ny//t58v/7ebK/+3myv/t5sj/7ObI/+zl + x//r5cT/6+TD/+vkwv/r48H/6uPA/+rjwP/q47//6eK+/+jhvf/o4bz/6OG7/+jguv/n37n/59+3/+be + t//m3rb/5t21/+bdtP/l3bP/5dyy/+Tbsf/k26//5Nuv/+Parf/j2a3/4tmr/+LZqv/i2Kn/4deo/+HX + p//h16f/4NWl/+DVpP/f1aP/39Wi/9/ToP/e05//29Ca/9jLk//WyY//1smQ/9fKkP/ZzJP/2c2V/9vO + lv/azpX/2s6U/9nMkv/ZzJL/2cyR/9jLj//XyYv/1siK/9XIiP/VyIj/1ciG/9XEhv/UxIX/1MSD/9PD + gv/Tw4H/08KA/9PCf//Twn//0cF9/9vPmf/d0p7/vq1h/7WjTf+fjTf/u69x//Dr2P/y7d7/8u/j//Ty + 5//08+r/9vTu//b17v/29fD/9vXw//b18P+ysKT/qaaa/6GekP+koZT/op+R/6ypnf+npJf/o6CS/6ek + l/9aa2//DDNO/wwzTv8VQFv/EVBw/x9Vdf8fVXXt////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bt6RPr8q5 + dJv08eDf8evV2e7oztPu6M7V7ujO1e7oztXu6M7V7unP1e7p0NXu6dDV7unQ1e7p0NXu6dDV7+vT2fLu + 293y7trd8u7b3fLu293z7tvf8+/c3/Lu29/z7tvf8u7b3/Pv29/y7tzp8OzZ//Pv3P/z79z/8+/b//Pv + 3P/z79v/8+/b//Pv3P/z79z/8+/b//Lu2P/v6c//7ujN/+7ozf/u6M3/7ujM/+3ny//t58v/7efK/+3n + yv/s5sn/7ObJ/+zmyP/s5cj/7OXH/+vlx//r5MT/6+TD/+vkwv/r5ML/6uPB/+rivv/n37v/5t24/+be + uP/m3rj/6eG//+7ozv/v6tH/7+nR/+/p0P/v6c//7unO/+7ozf/u6M3/7ufM/+3nzP/t58r/7efK/+3m + yf/s5cj/7OXH/+vlxP/r5cP/6+TD/+vjwf/r48H/6uPA/+njv//p4r7/6OG9/+jhvP/o4bv/6OG6/+ff + uP/n37j/5t63/+betv/m3bX/5t20/+Xcsv/l27H/5Nux/+TbsP/k26//49qt/+PZrf/i2av/4tip/+LY + qf/h16f/4Nal/97Tov/az5r/2c2X/9rOmf/azpn/29Ca/9zSnf/d0p3/3tKd/93Rm//c0Zv/3NGZ/9zQ + mP/c0Jf/28+W/9rPlf/ZzZP/2c2T/9nMkf/Xyo3/18qL/9fIiv/VyIj/1ciI/9XIh//Vx4b/1cSF/9TE + hP/TxIL/08OC/9PDgf/Twn//08J//9LBff/UwoH/4tms/9fKkv+3pE//uahd/5aEL//u6dX/8u3e//Lv + 4v/08eb/9PPq//X07v/29e//9vXx//b18P/08+z/ubes/6qnm/+gnY//pqOW/6Ogkv+tqp7/pqOW/6Og + kv+npJf/b3p5/wwzTv8MM07/F0Rf/xZObP8fVXX/H1V14f///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Abek + TyW3pFDf7+rSz/Xy4uPu6c/V7unQ1e7p0NXu6dDV7+nR1e/q0dXv6tHV7+rR1e/q0dXv6tHV8ezV2/Pu + 29/z7tvf8+/c3/Pv3N/z79zf8+/c3/Pv3N/z79zf8+/c3/Pv3d/z793f8+/c4/Ds2v/0793/8+/d//Pv + 3P/z79z/8+/c//Pv3f/z793/8+/c//Ht1//v6c//7+nO/+7pzv/u6c7/7ujN/+7ozf/u6M3/7ufM/+3n + y//t58v/7efK/+3nyv/s5sn/7ObJ/+vlx//r5MT/6eG//+fgvf/o4L3/6OG+/+riv//q48H/6uPB/+rj + wP/q5MH/7ujN//Dr0//v69L/7+rS/+/q0f/v6dH/7+nQ/+/p0P/u6c//7unO/+7ozf/u58z/7ufM/+3n + y//t58r/7ebJ/+zlyP/s5cj/7OXE/+vlw//r5MP/6+PB/+rjwf/q48D/6eO//+nivv/o4b3/6OG8/+jh + u//o4Lr/5+C4/+bfuP/m3rb/5t62/+bdtP/m3bT/5dyz/+Tcsv/k27D/5Nuw/+LZq//g1af/3tKi/93R + of/d0qH/3tOi/9/VpP/g1qX/4Nam/+DWpP/g1aT/39Wi/9/Uof/e05//3tOf/97Tnv/e0pz/3dKc/9zR + mv/c0Zr/3NCY/9zQl//bz5X/2s+V/9rNkv/Yy47/18qN/9fKi//XyYr/1siK/9XIiP/VyIj/1ciG/9XE + hf/UxIX/1MSD/9PDgv/Tw4H/08KA/9PCf//SwX3/0sB8/9zRm//d053/vaxd/7elUf+ejTj/wrZ+//Ht + 3f/y7+L/9PHm//Tz6v/z8Oj/6OPT/+TezP/m4dD/7ene/8PCuf+opZj/oZ6Q/6ShlP+in5H/raqe/6aj + lv+joJL/p6SX/3N9e/8MM07/DDNO/xZHY/8YTmz/H1V1/yBWdNf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bt6RPh8CvYaH08eDf8u7b3+/p0Nfv6dHX7+nR1+/q0dfv6tLX7+rS1+/q0tfv6tPX8u3Z3fPv + 3N/z79zf8+/d3/Pv3d/z793h8+/d3/Pw3uHz8N7h8/De4fPv3eHz797h8+/d4fPv3eHw7Nr/8/De//Tw + 3f/08N3/9PDe//Pw3v/0793/8+/c//Hs1f/v6tD/7+nQ/+/pz//v6c//7+nO/+7pzv/u6M3/7ujN/+7o + zf/t58v/7OXJ/+rjw//p4sL/6uPD/+vkw//s5cf/7ObH/+zlyP/s5cf/6+XH/+vkxP/r5MP/6+TC/+rj + wf/t58r/8OvU//Hr1f/w69T/8OvU//Dr0//w6tP/7+rR/+/q0f/v6dD/7+nQ/+7pz//u6M7/7ujN/+7o + zf/u58z/7efL/+3nyv/t5sn/7ObI/+zlx//s5cf/6+XE/+vkwv/r48L/6uPB/+rjwP/p47//6eK+/+nh + vf/o4bz/6OG7/+jguv/n37j/5t+4/+betv/l3LP/49mu/+DWqv/h1qv/4dep/+HXq//i2a3/5Nqt/+Pa + rf/i2az/4tmr/+LYqf/i2Kj/4deo/+DWpv/g1qb/4Nak/+DVo//f1KL/39Sh/97Tn//e05//3tKd/97S + nP/c0Zv/3NGa/9zQmf/c0Jj/3NCY/9rPlP/YzY//2MuO/9jLjf/Xyoz/18qL/9fIiv/VyIj/1ciI/9XI + h//VxIb/1cSF/9TEhP/TxIL/08OC/9PDgf/TwoD/08J//9LBff/UxIP/4tms/9bKj/+3pE//tqZY/5mH + M//g2Lz/5d7I/+nl0//t6t3/8+/m//b17//29fH/9vXx//b18f/P0sz/pqOW/6Kfkf+lopX/o6CS/6qn + m/+mo5b/o6CS/6ekl/91f33/DDNO/wwzTv8VSGX/GU5t/x9Vdf8gVnXF////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AbekTw+3pE/v6OC9wfbz5ufw69PZ7+rS1/Dr09fw69PX8OvT1/Dr09fw69TZ8u7b3/Pv + 3d/z793h8+/d4fPw3uH08N7h9PDf4fPw3uH08N/h9PDe4fTw3uH08N/h9PDf4fTw3uH08N/h8e3c/fTw + 3//08N//9PDf//Tw3//08N//8+/c//Dr1P/w6tL/7+rR/+/q0f/v6tD/7unP/+3mzP/r5cn/6+XJ/+vk + yf/s5sr/7efM/+3nzP/u6Mz/7ufM/+3oy//t58v/7efK/+3myf/s5sj/7OXI/+zlx//r5cf/6+XH/+zm + yP/w6tL/8e3X//Hs1v/x7Nb/8ezV//Ds1f/w69T/8OvT//Dq0//w6tL/8OrR/+/q0P/v6tD/7unP/+7o + zv/u6M7/7ujN/+7ozP/t58v/7efK/+zmyv/s5sn/7ObH/+zlx//s5cT/6+TC/+vkwv/q48D/6uPA/+nj + v//p4b3/6N+7/+Tctv/j2rL/49uy/+Tbsv/l3LT/5t21/+betf/m3bX/5dyz/+Xcsv/k3LH/5Nuw/+Tb + r//k2q7/4tqs/+LZrP/i2Kr/4tip/+LYqP/h16f/4Nam/+DWpP/g1qT/4NWj/9/Uov/e1KH/3tOf/97T + nv/e0pz/3dKc/9zRmv/c0Zr/3NCZ/9vPl//azZL/2c2Q/9jLjv/Yy43/2MuN/9jLi//XyYr/1siK/9XI + iP/VyIj/1ceG/9XEhf/UxIT/08SC/9HAfv/PvXv/zLlz/8q2bf/KuHD/yrlw/9nNl//ZzZb/u6la/7in + Vf+djDj/yr6M//Lu4f/08Ob/9PPq//bz7f/29fD/9vXy//b18v/29fL/19zX/6ekl/+in5H/paKV/6Og + k/+pppr/pqOW/6ShlP+lopX/dX99/wwzTv8MM07/Fk5r/xdQcP8fVXX/H1V1s////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Bt6RPabupWK/08eHf9PDf4fDr09nw69TZ8OvU2fDr1Nnx7Nfb8+/d3/Pw + 3uHz8N7h9PDe4fTw3uH08N7h9PDf4fTw3+H08ODh9PDf4fTx4OH08N/j9PHg4fTw3+P08N/j9PDf4/Lu + 3vv08N//9PHg//Xx4P/08eD/8u7b//Dr0//u6M//7efN/+3nzv/t587/7ujO/+/p0P/v6tD/7+nQ/+/p + z//v6c//7+nO/+7pzv/u6M3/7ujN/+7ozf/u58z/7ejM/+3oy//t58r/7ebJ/+3myf/s5sj/7ObI/+/p + 0P/x7dj/8e3Y//Lt2P/y7dj/8ezW//Hs1v/x7Nb/8OzV//Dr1P/w69T/8OrT//Dq0v/w6tL/7+rR/+/p + 0P/u6c//7unP/+7ozv/u6M3/7ujM/+3ny//t58r/7ObK/+zmyP/s5sj/6+TE/+nhv//n4L3/5t66/+be + uv/n37v/6OC9/+jhvf/p4r3/6eG8/+jhu//n4Ln/59+4/+bft//m37f/5t61/+bdtP/l3LP/5dyy/+Tc + sf/k26//5Nqv/+Parf/i2qz/4tmr/+LYqv/i2Kn/4deo/+DWp//g1qb/4Nak/+DWpP/g1KL/39Si/97U + oP/e05//3tKe/97SnP/c0pz/3NGa/9vPmP/azZP/2s2S/9rNkf/YzZD/2MuO/9jLjf/Yy4v/18qL/9bI + if/Tw4T/0L99/827eP/Nu3b/zbt3/8+9ev/RwH7/0sF//9PDgf/Twn//08J//9HBfP/VxIX/4dip/9TE + iv+3pVD/tqZZ/5yLOf/z7+H/8/Dl//Tz6//28+7/9vXw//b18//29fP/9vXz/97j4P+npJf/o6CS/6Sh + lP+joJP/qKWY/6ajlv+lopX/p6SX/3V/ff8MM07/DDNO/x5Wc/8YUnP/H1V1/x9VdaP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AbekTwO3pE/P2MyUp/bz5eXx7tnd8OzV2fHs1tny7dnd9PDf4fTw + 3+H08N/h9PDg4/Tx4OP08ODj9PHg4/Tx4OP08eHj9PHh4/Xx4eP08eHj9fHh4/Xx4eP18eHj9PHh4/Tx + 4ePy79/58u/d//Lu3P/z793/8OzW/+/q0v/w69T/8OvU//Dr1P/w69P/8OvT//Dq0v/w6tL/7+rR/+/q + 0f/v6tD/7+nQ/+/pz//v6c//7+nO/+7pzv/u6c3/7ujN/+7ozf/u6Mz/7ejL/+3ny//t58r/7ujN//Lt + 2P/y7tr/8u7a//Lt2f/y7dn/8u3Y//Lt2P/x7Nf/8ezW//Hs1v/x7NX/8evV//Dr0//w69P/8OvT//Dr + 0v/v6tH/7+nQ/+7pz//u6c//7ujO/+3nzP/r5cj/6uPD/+njwv/p4sL/6uPD/+vlxP/r5cT/7OTE/+vk + w//q5MH/6uPB/+rjwP/q4r//6uK+/+nivf/p4bz/6OC7/+jguf/n37j/5t+3/+bftv/m3rX/5t20/+Xd + s//l3LL/5Nyx/+Tbr//k2q//49qt/+LarP/i2Kv/4tiq/+LYqf/h16f/4Nam/+DWpf/g1qT/4NWj/9/U + ov/e1KH/3tSf/97Tnv/e0p3/3dKc/9vQmP/az5T/2s6U/9rNk//azZL/2MyP/9bKjf/SwYP/0cCA/9G/ + fv/SwoL/1MSG/9XIh//WyIf/1ceG/9XEhf/UxIT/08SC/9PDgv/Tw4H/08J//9PCf//SwX3/0sB8/97U + n//d0Zv/uqlY/7uqWv+cizf/0cea//Ty5//18+v/9fPu//b18v/29fP/9vX0//b19P/j5+T/qaaa/6Og + k/+opZj/o6CS/6ekl/+mo5b/paKV/6ekl/91f33/DDNO/wwzTv8rXHb/GlFx/x9Vdf8fVXWT////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bt6RPSbimUsH18uLd9fPk5fHs1tvz79vf9PDg4fTx + 4OH08eDj9PHg4/Tx4eP08eHj9PHh4/Tx4eP18eHj9fHh4/Xx4uP18eLj9fHi4/Xx4uP18eLl9fHi4/Xx + 4uX18eLj8+/g9/Pw4P/08eD/8u3Y//Hs1f/x7NX/8ezV//Hs1f/x7NT/8OvU//Dr1P/w69P/8OvT//Dq + 0v/w6tL/7+rR/+/q0f/v6tD/7+rQ/+/pz//v6c7/7unO/+7pzv/u6c3/7ujN/+7ozP/u6Mz/8ezV//Pv + 3P/z79z/8+/b//Pv2//z7tr/8u7a//Lt2v/y7dn/8u3Z//Ht2P/x7df/8ezW//Hs1v/x69X/8OvU//Dr + 0//v6tH/7ejO/+zmzP/s5cv/7ebM/+3nzf/u587/7ujO/+3nzP/t58v/7efL/+3myf/t5sn/7ObI/+zl + x//r5MT/6+TC/+rkwv/q5MH/6uO//+riv//p4r7/6eK9/+jhu//o4Lv/6OC6/+jguP/n37f/5t62/+be + tf/l3bT/5d2y/+Xcsv/k27H/5Nqv/+Parv/j2q3/49ms/+LYq//i2Kn/4dio/+HXp//g1qb/4Nal/+DW + pP/g1KP/39Si/97Uof/e1J//3tKe/9zQmv/YzJL/1ciL/9PEh//UxIn/1ciK/9XHiv/Xyoz/18qN/9jL + jf/Yy43/18qM/9bJiv/WyYj/1smI/9bIhv/Wx4b/1cSE/9TEg//Tw4L/08OB/9PCf//Twn//0sF9/9HA + fP/Vx4b/4deo/9PEif+4pVH/s6NW/6GQQf/08uj/9fPr//b07//39vL/9/b0//b19P/29fT/7O7s/6qn + m/+koZT/paKV/6Wilf+lopX/p6SX/6ajlv+npJf/eoOB/wwzTv8MM07/MGJ8/xxScf8fVXX/H1V1hf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wG3pE+1zL16nff05+X18uLl9PHg4/Tx + 4OP18eHj9fHh4/Xx4uP18uLj9fLj4/Xy4+P18uPl9fLi5fXy4+X18uPl9fLj5fXy4uX18uPl9fLj5fXy + 4+X18uPl9fLj5fTx4vXy7t3/8u3Y//Lt1//x7db/8ezW//Hs1v/x7Nb/8ezV//Hs1f/x7NT/8OvU//Dr + 1P/w69P/8OvT//Dq0v/w6tL/7+rR/+/q0f/v6tD/7+rQ/+/pz//v6c7/7unO/+7pzf/w6tL/8+/b//Tw + 3f/z793/8+/c//Pv3P/z79v/8+/b//Pu2//z7tr/8u3a//Lt2f/y7dj/8OvW/+/q0//v6dL/7unR/+/p + 0f/w69P/8OvU//Dr0//w6tL/7+rR/+/q0f/v6dD/7+nP/+7ozv/u6M7/7efM/+3nzP/t58v/7efK/+zm + yf/s5cj/7OXH/+vlxP/r5ML/6uTC/+rjwP/q48D/6uK//+nivv/p4rz/6OC7/+jgu//o4Lj/6OC4/+ff + tv/n3rb/5t60/+XdtP/l3bL/5dyy/+TbsP/k2q//49qu/+Parf/i2av/4tir/+LYqf/h16f/4den/+DW + pf/g1aT/3dKf/9nNlv/ZzZf/2s6Y/9nNlf/ZzZT/286W/9vPlv/az5T/2s2T/9rNkv/ZzZH/2M2Q/9jL + j//Yy47/2MuM/9fKjP/XyYv/1smK/9bJiP/WyIb/1seG/9bHhf/Ux4P/08SC/9PDgv/Tw4D/08J//9PC + f//RwHz/0cB8/9/Uov/d0Zv/uqhW/72tYf+bijb/2NCq//Xz6//29O//9/by//f29P/39vT/9/b0/+3t + 6/+opZj/pqOW/6ShlP+lopX/paKV/6ajlv+mo5b/p6SX/4SLh/8MM07/DDNO/ydfe/8dU3P/H1V1/x9V + dXn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bt6RPJbekUN/z8N3b+fft7fTx + 4eP18uLj9fLi4/Xy4uX18uLl9fLj5fXy4+X18uPl9fLk5fXy4+X18uPl9vLj5fby4+X28+Tl9fLj5fbz + 5OX18uTl9vPk5fby5OXy7tzx7+vW//Lt2P/y7dj/8u3X//Lt1//y7df/8e3W//Hs1v/x7Nb/8ezV//Hs + 1f/x7NT/8OvU//Dr1P/w69P/8OvT//Dr0v/v6tL/7+rR/+/q0P/v6tD/7+rQ/+/q0P/z7tr/9PDe//Tw + 3//08N7/9PDe//Pv3f/z793/8+/c//Lt2f/x7Nf/8OzX//Dr1v/x7Nf/8u3Z//Lu2f/x7dj/8e3Y//Hs + 1//x7Nf/8ezW//Ds1f/w69P/8OvT//Dq0v/v6tH/7+rR/+/q0P/v6c//7ujO/+7ozf/t58z/7efM/+3n + y//t58r/7ebI/+zlyP/s5cf/6+XD/+vkw//r5MH/6uPA/+riwP/q4r7/6eK9/+nivP/o4bz/6OC6/+jg + uf/o37f/59+3/+betf/m3rX/5d2z/+Xdsv/l3LH/5Nuw/+Tbr//j2q7/4dep/97UpP/d0qD/3dGg/93T + oP/f1KL/39Si/+DWpP/g1aP/39Si/93SnP/c0Zr/3NGZ/9zPmP/bz5b/28+V/9rOlP/azZP/2s2S/9nN + kP/YzJD/2MuO/9jLjf/Yy4z/18mL/9bJiv/WyYn/1smI/9bIh//Wx4X/1ceE/9THg//UxIL/08OB/9PC + gP/Twn//0cB8/9LAfP/WyYn/4Nem/9DBhf+4plP/sKFU/6WVSP/18+v/9fTv//f28v/39vP/9/b0//f2 + 9P/08/L/q6ic/6ekl/+mo5b/pKGU/6Wilf+npJf/p6SX/6ajlv+Ei4f/DDNO/wwzTv8eXHz/H1V1/x9V + df8gVnRp////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wG3pE+Xw7Nqn/j2 + 7Ov39Ofp9fLj5fXy4+X18uPl9fLj5fXy5OX18uTl9vLk5fby5OX28uTn9vPk5fby5Of28+Tn9vPk5/bz + 5ef28+Xn9vPk5/by4+Xz79zf8e3Z6e/r1//y7tr/8u7Z//Lt2f/y7dj/8u3Y//Lt2P/y7df/8e3X//Hs + 1v/x7Nb/8ezV//Hs1f/x7NX/8OvU//Dr1P/w69P/8OvS//Dr0v/v6tL/7+rR//Ht1//08N//9PDg//Pw + 3v/z793/8u7c//Lt2v/y7dv/8+/c//Pv3P/z79z/8+/c//Pv3P/z79v/8+/b//Pu2//z7tr/8u7Z//Lt + 2f/x7df/8ezX//Hs1//x7NX/8OzV//Dr1P/w69P/8OrS//Dq0v/v6tH/7+rQ/+/pz//u6M7/7ujN/+3o + zf/t58v/7efL/+3nyv/t5sj/7OXI/+vlxP/r5MP/6+TD/+rkwf/q48D/6uO//+nivv/p4r3/6OG8/+jh + u//o4Lr/6OC4/+jft//n3rb/5t20/+Xbsf/h16r/4Nap/+HXqv/h16r/4diq/+Larf/j2az/4tmr/+LY + qv/h16j/4den/+DWpv/g1qT/4NWi/97Tnf/d0Zz/3NGb/9zRmv/c0Jj/3M+X/9vPlv/az5T/2s2T/9rN + kv/ZzZH/2M2Q/9jLjv/Yy43/2MuM/9fKjP/XyYv/1smJ/9bJif/WyIf/1seG/9bHhf/Ux4T/1MeD/9TD + gv/TwoD/08J//9LBfv/SwHz/0cB7/9/Wpf/c0p3/uadU/8CwZ/+ZiTX/39i5//b07//39vL/9/bz//X0 + 8f/w7ef/5uHR/6ypnf+pppr/o6CT/6ShlP+koZT/p6SX/6ilmP+lopX/hIuH/wwzTv8MM07/GF1+/x9V + df8fVXX/H1V1W////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bt6RPE7ek + T+/t58zN+vfv7/Xy5ef28+Tl9vPk5fbz5eX28+Xl9vPl5/bz5ef28+bn9vPm5/bz5ef28+bn9vPm5/bz + 5uf28+bn9vPm5/Xy4uXz7tvf8u7a3fHt2ufv69f/8+7a//Lu2v/y7tr/8u7Z//Lu2f/y7dn/8u3Y//Lt + 2P/y7df/8e3X//Hs1v/x7Nb/8ezV//Hs1f/w7NT/8OvU//Dr0//u6dD/7+nR//Ht2f/y793/9PDf//Tx + 4P/08eD/9fHg//Xx4P/08d//9PDf//Tw3v/08N7/9PDd//Tw3f/z793/8+/c//Pv2//z79v/8+7b//Pu + 2v/z7tr/8u3Z//Lt2P/y7dj/8ezX//Hs1v/w7NX/8OvV//Dr0//w6tL/8OrS/+/q0f/v6tD/7+nP/+7o + zv/u6M3/7ejM/+3ny//t58v/7ebJ/+zlyP/s5cf/6+XE/+vlw//r5ML/6+PB/+rjwP/q47//6eK+/+fg + uv/l3bf/5Nqy/+Pbsv/l27P/5Ny0/+bdtP/l3bX/5t60/+bds//l3LH/5Nyx/+Tbr//j267/49qt/+Pa + q//i2ar/4dip/+HXqP/h16f/4Nak/97Tn//e057/3dGc/9zRnP/c0Zr/3NCY/9zPmP/bz5b/2s6U/9rO + lP/azZL/2c2R/9nNkP/Yy47/2MuO/9jLjf/Xyoz/18mL/9bJiv/WyYn/1siH/9bHhv/Wx4X/1ceF/9TH + g//Uw4L/08KA/9PCf//Twn7/0sB8/9HAfP/Xyov/4Nan/86/gf+5p1P/r55P/6aWTP/e1bv/4dnD/+bf + zv/r5tr/8vDr//Xz8f+2tKn/qKWY/6Ogk/+joJP/pKGU/6ekl/+opZj/paKV/4OKhv8MM07/DDNO/xla + fP8fVXX/H1V1/x9VdUv///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wG3pE9tvKpZrfj37Ov49uzt9vPl5/bz5ef28+bn9vPm5/bz5uf28+bn9vPm5/b05uf29Obn9vTm5/f0 + 5+f39Ofp9/Tn5/Xx4ePz79zf8+/c3/Pv3N/y7tvj7+vY//Pv2//z7tv/8+7a//Lu2v/y7tr/8u7a//Lu + 2f/y7dn/8u3Y//Ht1//x7Nf/8OvU/+/q0v/u6dH/7unR/+/q0v/w69T/8+/b//Xy4v/18uL/9fLi//Xy + 4v/18uL/9fHh//Xx4P/18eH/9fHg//Tx4P/08N//9PDf//Tw3v/08N7/9PDd//Pv3f/z79z/8+/c//Pv + 2//z7tv/8+7a//Lu2f/y7tn/8u7Y//Ht1//x7Nf/8ezW//Ds1f/w69X/8OvU//Dr0//w6tL/7+rR/+/p + 0P/u6c//7ujO/+7ozf/t6Mz/7efM/+3nyv/t5sn/7OXI/+zlxP/q48H/5+C9/+ffu//n4Lv/5+C7/+jg + vP/p4r3/6OG9/+jhu//o4Lr/6OC6/+jft//n37f/5t62/+betP/m3rP/5tyy/+Xcsf/k3LD/49uv/+Pa + rf/j2qz/49qr/+LZqv/h16n/4Nal/97Uof/e05//3tOe/97Tnf/d0Zz/3NGa/9zRmf/c0Jj/3M+W/9vP + lv/azpT/2s2T/9rNkv/ZzZD/2MyQ/9jLjv/Yy43/2MuM/9fKjP/WyYr/1smJ/9bJif/WyIb/1seG/9XH + hf/TxIL/08OB/9C/fP/PvXn/z714/8q5b//ItWz/ybVt/9zQoP/Xy5T/uKZT/8KzbP+YhzT/5d/K//f1 + 8//39vX/9/b2//f39v/39/b/v8K5/6ilmP+joJP/pKGU/6ShlP+opZj/qKWY/6Wilf+Diob/DDNO/wwz + Tv8mW3f/H1V1/x9Vdf8fVXU9////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bt6RPB7ekT9vi2rC7+vjw7/f05+n28+bn9vPm5/b05+f39Ofn9/Tn6ff05+n39Ofp9/Tn6ff0 + 5+n39Ofp9/Tn5/Tw3+Pz793h8+/d3/Pv3d/z79zf8+/c3+/r2f/z79z/8+/c//Pv2//y7tv/8u3Z//Hs + 1//x7Nf/8OvV//Dr1f/x7Nf/8e3Y//Lt2P/x7df/8e3X//Ht1v/y7tn/9fHh//bz5P/28uP/9vLj//Xy + 4//18uP/9fLi//Xy4v/18eH/9fHh//Xx4f/18eD/9PHg//Tx4P/08d//9PDf//Tw3v/08N7/8/Dd//Pw + 3f/z79z/8+/c//Pu2//z7tr/8u7a//Lu2f/y7tj/8u3Y//Hs1//x7Nb/8OvV//Dr1f/w69T/8OvT//Dq + 0f/v6tH/7+nQ/+7pz//u6M3/7OXJ/+rjxP/q5MT/6uPD/+vkxP/s5cf/7OXE/+vlxP/r5MP/6+PC/+rj + wf/q47//6eK//+nivf/p4bz/6OG7/+jhuv/o4Ln/59+4/+fftv/m3rX/5t60/+bds//m3LL/5Nyx/+Tc + r//k26//5Nqt/+Paq//j2qv/4dem/+DWov/f1aL/3tOg/97Tnv/e057/3dGc/9zRnP/c0Zr/3NCY/9zP + l//bz5b/2s6U/9rOlP/azZL/2c2R/9jMkP/Yy47/2MuO/9jLjP/Xyoz/1siJ/9TDhf/SwYD/0b9+/868 + ef/Nunf/zr14/9DAff/TwoD/0sF//9HAfP/TwX7/0sF8/9HBff/YzJD/4Nam/829f/+6p1b/rZ5P/66f + W//39vP/9/f0//f39v/39/b/9/f2/83Px/+pppr/o6CS/6ShlP+koZT/qqeb/6ajlv+mo5b/g4qG/wwz + Tv8MM07/KVx1/x9Vdf8fVXX/H1V1Lf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wG3pE9LuaZTwfn37uv59+7v9/Tn6ff05+n39Ofp9/To6ff06On39Ojp9/To6ff0 + 6On39Ojp9vPm5/Tw3+P08N7h9PDe4fPw3uHz8N7h8+/d4fPv3eHw7Nr98u3a//Hs2f/y7dr/8u/b//Pv + 2//z79v/8+/b//Pv2//y7tr/8u7Z//Lt2f/y7tj/8u3Y//Lt2P/08N//9vPl//bz5f/28+T/9vPk//bz + 5P/28uP/9vLj//Xy4//18uL/9fLi//Xy4v/18uH/9fHh//Xx4P/08eD/9PHg//Tx3//08OD/9PDf//Tw + 3v/z8N3/8+/d//Pv3P/z79z/8+/b//Pu2v/y7tr/8u7Z//Lt2P/y7dj/8u3X//Hs1v/w69T/8OrS/+7n + z//t587/7efO/+3nzv/t587/7ujP/+7ozf/u6M3/7ufM/+3ny//t5sr/7ObJ/+zmyP/s5cf/6+TD/+vk + wv/r48H/6uPA/+rjv//p4r7/6eG9/+nhvP/o4bv/6OG6/+jfuf/n37f/59+2/+betP/m3rT/5tyy/+Xc + sf/k3LD/5Nyv/+Tarv/k2q3/4tio/+DWpP/g1qP/39Wi/97UoP/e1J//3tOe/93SnP/c0Zz/3NGa/9zQ + mf/c0Jj/28+W/9vPlf/azpT/2s2T/9nNkf/ZzY//18mL/9LBg//RwID/z79+/9THhf/VyIn/1smJ/9bJ + if/Wx4b/1seF/9THhP/Ux4P/08OC/9PCgP/Twn//08J+/9LBff/RwX3/0cF+/+LZrP/d0p//uKZS/8S2 + cv+XhjP/6ubW//f39P/39/b/9/f2//f39v/W19D/p6SX/6Ogkv+koZT/pKGU/6qnm/+mo5b/pqOW/42R + i/8MM07/DDNO/yNadv8fVXX/H1V1/x9VdR////8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AbekT7vRw4al+vjx7/j16+v39Ojp9/To6ff16en39enp9/Xp6/f1 + 6ev39enr9vPk5/Tx4OP08eDj9PHg4fTx4OH08N/h9PDf4fTw3uH08N/h8e3c+/Pv3f/08N7/9PDe//Pv + 3f/z79z/8+/c//Pv3P/z79v/8+/b//Lu2v/y7tr/8u7Z//Tw3f/28+X/9/Tm//bz5f/28+X/9vPl//bz + 5f/28+T/9vPk//bz5P/28+T/9fLj//Xy4//28uP/9fLi//Xy4v/18eH/9fHh//Xx4f/18eD/9PHg//Tw + 4P/08N//9PDe//Tw3v/0793/9O/d//Pv3P/z7tv/8u7a//Ds1//w6tT/8OvV/+/r1P/w69T/8OzU//Hs + 1f/x7NX/8OvU//Dr0//v6tL/7+nR/+/p0P/u6c7/7unO/+7ozf/u58z/7efL/+3myv/s5sn/7ObI/+zl + xP/r5MT/6+TC/+vjwf/q48D/6eO//+nivv/p4bz/6eG8/+jhuv/o4Ln/59+4/+fft//m3rX/5t60/+bd + s//m3LL/5Nyx/+TcsP/k26//4tmp/+HXp//h1qT/4dak/+DWov/e1KH/3tSg/97Un//e05//3dGc/9zR + m//c0Zr/2s6V/9fKj//UxIr/0sKG/9TDh//Ux4j/1ceJ/9fKjf/Yy47/2MuO/9fKjP/Xyoz/1smL/9bJ + if/WyYn/1siH/9bHh//VxIT/1MeD/9PDg//Tw4H/08KA/9PCf//SwHz/0cF9/9HBfv/ZzpT/4Nan/8u7 + e/+6qFf/rJtM/7OmZv/39/T/9/f3//f39//39/f/39/a/6ilmP+joJL/paKV/6ShlP+rqJz/pqOW/6Sh + lP+QlI3/DDNO/wwzTv8aWHf/H1V1/x9Vdf8fVXUP////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wG3pE8xuKVQ1fj26+f6+PHx9/Xp6ff16ev39enr9/Xp6/f1 + 6ev39enr9vLk5fXx4eP18eHj9PHh4/Tx4eP08eHj9PHg4/Tx4OP08eDh9PHg4fLu3fvz797/9PDf//Tw + 3v/08N7/9PDe//Pv3f/z793/8+/c//Pv3P/z79v/8+/c//by4//39Of/9/Tn//f05//39Ob/9/Tm//b0 + 5v/28+b/9vPl//bz5f/28+T/9vPl//bz5P/28uT/9vLj//by4//18uP/9fLi//Xy4v/18uH/9fHh//Xx + 4P/08eD/9PDf//Pw3v/y7tv/8e3a//Lu2v/y7dr/8u7a//Pu2v/z79r/8u7a//Lu2f/y7dj/8u3X//Lt + 1//x7db/8ezV//Hs1f/w69T/8OrT/+/q0v/v6dH/7+nQ/+7pzv/u6M3/7ujN/+7ny//t58v/7ObJ/+zm + yf/s5cf/7OTE/+vkw//r5ML/6+PB/+rjwP/p4r7/6eG9/+nhvP/o4bv/6OG6/+jfuf/n37j/59+3/+be + tf/m3bT/5t2z/+Xcsv/k3LD/4tmr/+LYqf/h2Kf/4dal/+HWpP/g1qP/39Of/9vPmf/YzJX/1smQ/9jL + k//Xy5L/2MyS/9rPl//czpf/28+X/9rOlf/azpT/2s2S/9nNkf/ZzJH/2MuP/9jLj//Yy43/18qM/9fJ + i//WyYr/1smJ/9bIif/Wx4j/1seH/9THhf/TxIP/08OD/9PCgP/Twn//08F//9LAff/RwX7/0sKA/+Pb + r//c06H/uKVR/8e3dv+WhjL/7uzh//f39//39/f/9/f3/+fn4/+opZj/o6CS/6ajlv+lopX/rKmd/6aj + lv+mo5b/kJSN/wwzTv8MM07/E1V3/x9Vdf8fVXX/////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AbekT5fEtGqf+vjx7/n37u349err+PXq6/j1 + 6uv39enp9vLk5fXy4uX18uLj9fLi4/Xy4uX18uLj9fLi4/Tx4eP08eHj9PHh4/Tx4OPy79758/Df//Tw + 3//08N//9PDf//Tw3v/08N7/9PDe//Pw3f/z793/9fHh//f06P/39ej/9/To//f05//39Of/9/Tn//f0 + 5//39Ob/9vTm//fz5v/38+b/9vPm//bz5f/28+X/9vPl//bz5P/28+P/9vLk//Xy4//08OD/8+/f//Pv + 3//z797/9PDf//Tx4P/08N//9PHf//Tw3//08N7/9O/d//Pv3f/z79z/8+/b//Lu2v/y7tr/8u7Z//Lt + 2P/y7dj/8u3X//Hs1v/x7NX/8OvU//Dr0//v6tP/7+rR/+/p0f/u6c//7unP/+7ozf/u58z/7efL/+3n + yv/s5sn/7ObI/+zlx//s5MT/6+TD/+vkwf/q48H/6eO//+nivv/p4b3/6eG8/+jhu//o4Lr/59+4/+ff + uP/n37b/5t61/+bdtP/l3LH/49mr/+DXp//e0qH/3NCc/9vQnf/b0Jv/3NGd/9/ToP/e06D/39Sg/97T + n//d053/3dKc/9zSm//c0Zn/3NCY/9vPl//bz5b/2s6V/9rNk//ZzZL/2c2R/9jMkP/Yy4//2MuN/9fK + jP/XyYz/1smL/9bJiv/WyIn/1seI/9bHh//Ux4X/08eD/9PEg//Tw4D/08J//9PCf//SwX3/0cF+/9LC + f//az5f/4Nan/8m5d/+7qln/qplL/7iscv/4+Pj/+Pj4//j4+P/u7uv/qqeb/6Ogk/+mo5b/pqOW/6qn + m/+lopX/pqOW/4+TjP8MM07/DDNO/xNVef8fVXX/H1V18////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wG3pE8Tt6RP7/Lv3Nv7+vPz+Pbr6/j2 + 6+v39Ofp9fLj5fXy4+X18uPl9fLj5fXy4+X18uPl9fLj5fXy4+X18uLl9fLi5fXy4uP08eHj8/Dg9/Pw + 3//08eD/9PHg//Tx4P/08N//9PDf//Tw3//18eD/9/Tn//j16v/49en/9/Xp//f16f/39ej/9/Xo//f0 + 6P/39Of/9/Tn//f05//39Of/9/Tm//b05v/28+X/9fLj//Tx4v/08eL/9fHi//Xy4//18uP/9vLj//by + 4//18uL/9fLi//Xx4f/18eH/9PHg//Tx4P/18OD/9PDf//Tw3v/08N3/8/Dd//Pv3P/z79v/8u7a//Lu + 2v/y7dn/8u3Y//Lt2P/x7db/8ezW//Hs1f/w69T/8OvT//Dr0//v6tH/7+nQ/+/p0P/u6c7/7ujN/+7n + zP/t58v/7OfK/+zmyf/s5cf/7OXH/+vkw//r5ML/6+PC/+rjwf/p4r//6eK+/+nhvf/p4bv/6OC6/+fe + t//k27H/4tmu/+HYrv/h1qv/4Nao/+HXqf/i2Kr/4tiq/+HYqP/h2Kf/4dal/+HWpP/g1qP/39Wi/9/U + of/e05//3tOf/93SnP/c0pz/3NGa/9zQmf/b0Jj/28+W/9rOlf/azZP/2s2T/9nNkv/YzJD/2MuQ/9jL + jv/Xyo3/18qN/9bJi//WyYr/1smK/9bIiP/WyIj/1MiF/9THhP/TxIP/08OA/9PCgP/Twn//0sF9/9HB + fv/Rwn//08OC/+Tcsv/d06H/uKVR/8i4ev+XhjP/8fDp//j4+P/4+Pj/9PPy/6qnm/+koZT/qKWY/6Sh + lP+sqZ3/paKV/6ajlv+Okoz/DDNO/wwzTv8bU3D/H1V1/x9VdOf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AbekT3m+rF2n+vnx8fr4 + 8O/39Ofp9vPk5/bz5Of28+Tn9vPk5fbz5OX28+Tl9vPk5fXy4+X18uPl9fLk5fXy5OX18uPl9fLi5fTw + 4fXz8OD/9fHh//Xx4f/08eD/9PHg//Xx4P/28+X/+PXq//j26v/49er/+PXq//j16v/49en/9/Xp//f1 + 6P/39ej/9vTn//bz5f/28+X/9vPl//bz5f/28+X/9vPm//b05v/28+X/9/Pm//bz5f/28+T/9vPk//bz + 5P/28+P/9vLj//Xy4v/18uL/9fLi//Xy4f/18eD/9fHg//Xx4P/08N//9PDe//Tw3v/z79z/8+/c//Pv + 2//y7tr/8u7Z//Lt2P/y7dj/8u3X//Hs1v/x7Nb/8ezV//Dr1P/w69P/8OvS/+/q0f/v6dD/7+nP/+7o + zv/u6M3/7efM/+3ny//s5sr/7ObI/+zlyP/s5MT/7OTD/+rjwf/o37z/5t65/+bdt//l3bf/5963/+be + t//o37n/59+5/+ffuP/m3rX/5Nuw/+Tbr//j2q3/49qs/+PZqv/i2Kn/4din/+HWpv/h1qX/4Naj/9/V + ov/f1KH/39Sf/97Tn//e053/3dKc/93Rmv/c0Zn/3NCY/9vPl//az5b/2s+W/9nNkv/ZzZP/2cyR/9jL + kP/Yy4//2MuO/9fKjf/Xyoz/1sqL/9bJiv/WyIj/1siI/9bIh//Ux4X/1MeD/9PDgf/TwoD/08J//9PC + fv/RwX7/0cJ//9LBgP/c0Zv/39an/8e2c/+8q1z/qZhK/76zff/4+Pj/+Pj4//b29f+qp5v/pqOW/6aj + lv+koZT/rKmd/6Wilf+mo5b/j5OM/wwzTv8MM07/HVJt/x9Vdf8fVXTd////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wG3pE8Ht6RP2+Lb + s736+PDv9/Xn5/b05uf28+bn9vPm5/bz5uf28+bn9vPm5/bz5Of28+Tn9vPk5/bz5OX18uTl9fLk5fXy + 5OX08eHz8/Dh//Xy4v/18uL/9fHh//bz4//49en/+Pbr//j26//49uv/9/Xq//f06f/39Oj/9/Tn//f0 + 6P/39Oj/9/Xp//f16f/39ej/9/Xo//f06P/39Oj/9/Tn//f05//39Of/9/Tm//f05v/39Ob/9vPl//bz + 5P/28+X/9vPk//by5P/28uP/9fLj//Xy4v/18uL/9fLh//Xx4f/18eD/9PHf//Tw3//08N7/9PDe//Pv + 3P/z79z/8+7b//Lu2v/y7tn/8u3Y//Lt2P/x7df/8ezW//Hs1v/w69T/8OvU//Dr0//w69L/8OrR/+/p + 0P/v6c//7ujN/+3ny//r5cn/6uPD/+jhwP/p4sH/6eLA/+niwP/r5ML/6+TC/+rjwf/q4sD/6eK+/+ni + vf/p4bz/6OC7/+fguv/m3rb/5d2y/+Xbsf/k26//49qt/+Parf/j2ar/4tip/+HYqP/h16f/4dal/+DW + pP/g1qP/39Sh/9/Uof/e05//3tOd/97SnP/d0Zv/3dGa/9zQmf/b0Jj/28+X/9rPlf/azpT/2c2T/9nM + kf/YzJH/2MyP/9jLjv/Xy43/18qM/9bKi//Wyor/1smJ/9bIiP/WyIf/1MeF/9THg//Uw4L/08KA/9PC + f//Twn7/0cF+/9HCfv/SwX//1MeF/+XctP/d0qL/uKVR/8S4ev+ZiTf/9fTx//j4+P/49/f/rKmd/6aj + lv+mo5b/pKGU/6ypnf+lopX/pqOW/4+TjP8MM07/DDNO/x5TcP8fVXX/IFZ00f///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Abek + T1W6p1S7+ffu6/n37u339Ofn9/Tn5/f05+f29Obn9vTm5/b05uf28+bn9vPm5/bz5uf28+bn9vPk5/bz + 5Of28+Tl9fLj7/Pw4f/18uP/9fLj//bz5v/39er/9/Xq//f16v/49er/+Pbr//j26//49uv/+Pbr//j2 + 6//49er/+Pbq//j16v/49er/+PXp//f16f/49en/9/Xo//f16P/39Oj/9/Tn//f05//39Of/9/Tm//bz + 5v/28+X/9vPl//bz5P/28+T/9vLk//by4//18uP/9fLj//Xy4v/18eH/9fHh//Xx4P/08d//9PDf//Tw + 3v/z8N3/8+/d//Pv3P/z7tv/8u7Z//Lu2f/y7tj/8u3Y//Ht1//x7Nb/8ezV//Dr1P/v6tH/7ufO/+zm + y//t58z/7ObL/+3ny//u58z/7efM/+3ny//s58r/7ObJ/+zlyP/s5cT/6+TD/+vkwv/q48H/6uPB/+ri + v//p4r7/6eG8/+nhu//n37f/5t20/+Xdsv/l3LH/5Nuw/+Par//j2q3/49ms/+LYqv/i2Kn/4din/+HW + pf/h1qT/4Naj/9/Vov/f1KH/39Sg/97Tn//e0p3/3dKc/93Rm//c0Jn/3NCY/9vPl//az5b/2s6U/9nN + k//ZzZP/2M2R/9jMkP/Yy47/18uN/9fLjf/Wyov/1sqK/9bJiv/WyIj/1siI/9THhf/Ux4T/1MSD/9PC + gP/Twn//08J//9LBfv/Rwn7/0sKA/9PCgP/d0p//4Nao/8O0bv++rWD/p5hK/8S6if/4+Pj/+Pj4/6mo + nf+npJf/p6SX/6ShlP+pppr/pqOW/6ajlv+bnJL/DDNO/wwzTv8ZUnD/H1V1/yBWdL3///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bt6RPw9TJjaf6+PDv+PXq6/f06On39Ofp9/Tn6ff05+n39Ofp9/Tn5/f05+f29Obn9vTm5/bz + 5uf28+bn9vPm5/Xz5e3z8OL/9/Tm//j27P/59+3/+fft//n37f/59+3/+ffs//n27P/59+z/+fbs//j2 + 7P/49uv/+Pbr//j26//49uv/+PXq//j26v/49er/+PXp//j16f/39en/9/Xo//f06P/39Oj/9/Tn//f0 + 5//39Of/9vPm//bz5v/38+b/9vPl//bz5f/28+T/9vPj//Xy4//18uL/9fLh//Xx4f/18eH/9fHg//Tx + 3//08N//9PDe//Pv3f/z79z/8+/b//Lu2v/y7dn/8OvW/+/q0//v69P/7+rT//Dq0//w69T/8OvU//Dr + 0//w69L/8OrR/+/p0P/v6c//7unO/+7ozP/t6Mz/7efL/+zmyv/s5cn/7OXI/+zkxP/r5MP/6uTC/+rj + wf/q4sD/6uLA/+nivv/n37n/5t62/+bdtf/m3bP/5dyy/+TbsP/j2q//49qu/+Parf/j2Kv/4tip/+HY + p//h16f/4dam/+DWpP/f1aL/39Sh/9/UoP/e05//3tOd/93SnP/d0Zv/3dGa/9zQmP/cz5f/28+W/9vP + lf/ZzZP/2c2T/9nNkf/YzJD/2MyP/9fLjf/Xy43/18qL/9bKiv/WyYr/1siI/9bIiP/Vx4X/1MeF/9TE + g//TwoD/08J//9PCf//SwX7/0sJ+/9LCgP/SwoH/1ciI/+Xcs//c0aD/uKZS/8e4ef+bjDv/9vb0//j4 + +P+vraL/qKWY/6ajlv+koZT/qKWY/6ShlP+mo5b/m5yS/wwzTv8MNFD/FlBx/x9Vdf8fVXWp////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AbekTzG4pVDV9/Xq5/r48fH39enp9/To6ff06On39Ojp9/To6ff06On39Ojp9/Tn6ff0 + 5+n39Ofn9vTm5/f05+f29Obt9vTp//n37v/59+7/+ffu//n37v/59+7/+fft//n37f/59+3/+fft//n3 + 7P/59uz/+fbs//j27P/59uz/+Pbr//j26//49uv/+Pbq//j16v/49er/+PXp//f16f/39en/9/Xo//f1 + 6P/39Oj/9/Tn//f05//39Ob/9/Tm//bz5f/28+X/9vPl//bz5P/18+P/9fLj//Xy4v/18uL/9fHh//Xx + 4P/08N//8+/c//Lt2//x7dr/8e3Z//Lt2v/y7tr/8u7a//Pu2v/y7tn/8u3Y//Ht1//x7Nb/8ezV//Dr + 1P/w69P/8OvT//Dq0v/w6tH/7+nQ/+7pz//u6c7/7ujN/+3nzP/t58r/7ObK/+zlyP/s5cf/6+TE/+vk + w//q48L/6uLA/+niv//n4Lr/59+4/+betv/m3bX/5t20/+Xdsv/l27H/5Nuv/+Parv/j2q3/49mr/+LY + qv/h2Kj/4den/+HWpv/g1qT/4NWj/9/Uof/f1KH/3tOf/97Tnf/e0p3/3dGb/93Rmv/c0Jn/3M+X/9vP + l//bz5X/2s6U/9rNk//ZzZH/2MyQ/9jMj//Xy43/18uN/9fKjP/Wyov/1smK/9bIiP/WyIj/1ciG/9TH + hf/Ux4P/08KB/9PCgP/Tw4D/08J//9LCf//Swn//08OC/9PDg//e1KL/39an/8Gyav/AsGX/ppZJ/8zB + lv/4+Pj/srCl/6ilmP+mo5b/pKGU/6mmmv+mo5b/pqOW/5ydlP8MM07/DTZR/xdRcf8fVXX/H1V1mf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Bt6RPo8m3cZ/6+PDv+Pfs7ff16ev39enr9/Xp6/f16en39enp9/To6ff0 + 6On39Ofp9/Tn6ff05+n49uvr+fjv8fj27f/6+O//+ffu//n37v/59+7/+ffu//n37v/59+7/+ffu//n3 + 7f/59+3/+fft//n37f/59+z/+fbs//n27P/49uz/+Pbr//j26//49uv/+Pbr//j16v/49er/+PXp//f1 + 6P/39ej/9/Xo//f06P/39Of/9/Tn//f05//39Ob/9vPl//bz5f/28uT/9fHi//Tw4f/08N//9PDg//Tw + 3//08OD/9fHg//Tx4P/08N//9PDe//Pv3f/z793/8+/c//Pu2//z7tv/8u7Z//Lu2P/y7df/8ezX//Hs + 1v/x7NX/8OvU//Dr0//w69P/8OrR/+/p0P/v6dD/7unO/+7pzv/t6Mz/7efL/+3myv/t5sn/7OXI/+zl + x//r5MP/6uTC/+rjwf/p4bz/6OC6/+ffuP/m3rf/5t21/+bdtP/l3bL/5dyy/+TbsP/j2q//49qt/+PZ + q//i2Kr/4tip/+HYqf/h1qf/4del/+DWpf/f1aL/39Sh/97Tn//e05//3tKd/93RnP/d0Zv/3NCa/9zQ + mP/bz5f/28+W/9rOlP/azZT/2s2S/9nNkv/YzI//2MuO/9fLjf/Xyoz/1sqL/9bKiv/WyYn/1siI/9bI + h//Ux4X/1MeD/9PCgf/Tw4D/08KA/9PCf//Swn//0sKA/9LDgf/TxIP/1sqM/+Tcs//a0J//uadU/8O2 + d/+ej0D/+Pj4/7i0qv+opZj/pqOW/6ShlP+qp5v/pqOW/6ajlv+dnZX/DDNO/w83Uv8aUW//H1V1/x5U + c5H///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AbekTxu3pE/l8u3Z2fv58/P49err+PXq6/j16uv49err+PXq6/f1 + 6ev39enr9/Xp6fj16uv5+O/v+vjx8fr48PH49u7/+vjv//r47//6+O//+fjv//n37//5+O//+ffu//n3 + 7v/59+7/+ffu//n37f/59+3/+fft//n37f/59+3/+ffs//j27P/49uz/+Pbr//j26//49uv/+PXq//j1 + 6v/49er/+PXp//f16f/39ej/9/Tn//bz5f/18uT/9vPk//Xy5P/18uT/9vPl//bz5P/28+T/9vLj//by + 4//18uL/9fLi//Xx4f/08eD/9PHf//Tw3//08N7/8+/d//Pv3f/z79z/8+7b//Pu2v/y7tn/8u3Y//Ht + 1//x7Nb/8ezW//Hs1f/w69P/8OvT//Dq0v/w6tH/7+nQ/+7pz//u6c7/7ujN/+3nzP/t58z/7ebK/+3m + yf/s5sj/6+XE/+vjwv/p4b3/6OC7/+jguv/n37j/5t+3/+betv/m3bX/5t2z/+Xcsf/k27H/49qw/+Pa + rv/j2q3/49mr/+LZqf/h2Kn/4den/+HXpv/g1qX/39Wj/9/Vov/e06D/3tOf/97Tnv/d0p3/3dGb/9zR + mv/c0Jj/3M+Y/9vPlv/az5X/2s2U/9rNk//ZzZL/2cyQ/9nLj//Yy47/18uN/9fKi//WyYr/1smJ/9bI + iP/WyIj/1MeF/9THg//UxIP/08OA/9PCf//Twn//08J//9LCgP/Sw4H/08SD/9TEhf/g1ab/4Nep/8Gx + af/Ds2v/pJVH/9LKov/Oy8D/p6SX/6Wilf+koZT/qKWY/6ajlv+npJf/nJ2U/wwzTv8ROlX/HFFv/x9V + df8fVXKH////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bt6RPeb6sXaf6+fHv+vjw7/j26+v49uvr+Pbr6/j1 + 6uv49err+Pbr6/n37u/6+PHx+vnx8fr58fH6+fHx+Pfv//r47//6+PD/+vjw//r47//6+O//+vjv//n4 + 7//59+//+fju//n37v/59+7/+ffu//n37v/59+3/+fft//n37f/59+z/+Pbs//n27P/49uv/+Pbr//f0 + 6P/29Oj/9/To//f06P/39Oj/9/Xo//f06P/39Oj/9/Tn//f05//39Ob/9vPm//bz5v/28+X/9vPk//bz + 5P/28uP/9vLj//Xy4v/18uH/9fHh//Tx4P/08d//9PDf//Tw3v/z793/8+/c//Pv3P/z7tv/8u7a//Lu + 2f/y7dj/8ezX//Hs1v/x7NX/8ezU//Dr0//w69P/8OrS/+/p0P/u6dD/7unP/+7ozf/u58z/7efM/+3n + yv/t5sr/7ObI/+vlxP/q4r//6eG9/+jgu//o4Lr/6N+6/+ffuP/m3rf/5t21/+bdtP/l3LP/5dux/+Pb + sP/j267/49qt/+PZq//i2av/4dip/+HXp//h16b/4Nal/+DWpP/f1aL/3tSh/97UoP/e057/3dKd/93R + nP/d0Zv/3NCZ/9zPmP/bz5f/28+W/9rNlP/azZP/2s2S/9nMkf/Zy5D/2MuO/9jLjf/Xyoz/1sqL/9bJ + if/WyIj/1siI/9XHhf/Ux4T/1MOC/9PDgP/Twn//08J//9LCf//Swn//0sOB/9PDg//UxIX/18uO/+Tb + s//Z0Jz/uqhY/8G0c/+ik0f/3drU/6ekl/+npJf/pKGU/6qnm/+mo5b/p6SX/5+flv8MM07/ETxY/x1S + cf8fVXX/IVdyef///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AbekTw23pE/l6eG/xfv69PP49uzt+Pbr7fj2 + 6+349uzr+fft7fr48fH6+fLz+vny8/r58vP6+fLz+vnx8/n37//6+PD/+vjw//r48P/6+PD/+vjw//r4 + 7//6+O//+vjv//r47//5+O//+fjv//n37v/59+7/+fft//j27P/49uv/+PXr//j16//49uv/+Pbr//j2 + 6//49uv/+Pbr//j26v/49ur/+PXq//f16f/39en/9/Xo//f16P/39Of/9/Tn//f05//29Ob/9vTm//bz + 5f/28+T/9vLk//by4//18uP/9fLi//Xy4f/18eH/9PHg//Tw3//08N7/8+/d//Pv3f/z79z/8+7b//Pu + 2v/y7tn/8u3Z//Ht1//x7Nb/8ezW//Hs1f/w69T/8OvT//Dq0v/v6tH/7+nQ/+7pz//u6c7/7ujN/+7n + zP/t58v/7ebK/+zlx//q48H/6uO//+nhvv/p4b3/6eG7/+jfuv/n37n/5t63/+betv/m3rX/5d2z/+Xc + sv/k27D/49uv/+Pbrv/j2az/4tmr/+LYqf/h2Kj/4den/+DWpf/g1qT/39Wi/9/Uov/e1KD/3tSf/97S + nv/d0Zz/3dGb/9zQmf/cz5j/28+X/9vPlv/azpT/2s2U/9rNkv/ZzZL/2cuQ/9jLjv/Yy43/18qN/9fK + jP/XyYr/1siI/9bIiP/Vx4X/1MeE/9THg//Tw4H/08KA/9PCgP/Tw3//3NGd/+vkxP/n49D/1cqf/8q3 + c//MvYr/4Nep/7mpZP/Ht3H/o5NF/87DoP+mo5b/pqOW/6ShlP+pppr/paKV/6mmmv+iopf/DDNO/xA/ + XP8eVHP/H1V1/yBWdGP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bt6RPW7qoVbf6+fHx+vjx8/j2 + 7O349uzt+vjw8fv58vP7+fPz+/ny8/v58/P7+fPz+vny8/v58vP5+PH9+vjx//r58f/6+fH/+vjx//r4 + 8P/6+PD/+vjv//n47//59+7/+ffu//n37f/59+3/+ffu//n37v/59+7/+ffu//n37f/59+3/+fft//n3 + 7P/59uz/+Pbs//j26//49uv/+Pbq//j16v/49er/+PXq//f16f/49en/9/To//f05//39Of/9/Tm//b0 + 5v/28+X/9vPl//bz5P/28uP/9vLj//Xy4v/18uL/9fHh//Tx4P/08eD/9PDf//Tw3v/z793/8+/d//Pv + 3P/z7tv/8u7a//Lt2f/x7dj/8ezX//Hs1v/x7NX/8ezV//Dr0//w6tP/8OrS/+/q0P/u6c//7unP/+7o + zf/u583/7efM/+zmyP/r5ML/6uPB/+rjwP/q4r//6eG+/+nhu//o4Lv/5+C6/+bfuP/m3rb/5t61/+Xd + s//l3LL/5Nyx/+Pbr//j267/49qt/+PZq//i2Kn/4dio/+HXp//g1qb/4Nak/9/Vov/f1KL/3tSg/97U + n//e057/3dKc/9zSm//c0Zn/3M+Y/9vPl//bz5b/2s6U/9rNlP/azZL/2c2S/9nLkP/Yy47/2MuO/9fK + jf/Xyoz/18mL/+HXpv/t58z/8OzW/93Tpv/JuHL/y7ly/9PCgP/TwoD/2c2R/+7q0v+3sZb/bmlR/1VQ + PP92bEb/r51W/83Clv/KvpL/vKtc/7+xcP+llk3/pqOW/6ekl/+koZT/qqeb/6ajlv+qp5v/qqeb/wwz + Tv8OQ2H/H1V1/x9Vdf8fVXVR////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wG3pE/H1sqSq/v6 + 9PP6+fHx+/nz8/v69PP7+vPz+/rz8/v58/P7+fPz+/nz8/v58/P7+fPz+vjx/fr48f/6+PH/+vjw//r4 + 8P/6+PD/+vjw//r48P/6+PD/+vjw//r48P/6+PD/+vjv//r47//6+O//+fju//n37v/59+7/+ffu//n3 + 7f/59+3/+ffs//j27P/59+z/+Pbs//j26//49uv/+Pbr//j16v/49er/+PXp//j16f/39Oj/9/To//f0 + 5//29Ob/9vTm//bz5f/28+X/9vLk//by5P/28uP/9fLi//Xy4v/18eH/9PHg//Tw3//08N7/9O/e//Pv + 3f/z79z/8+7b//Lu2v/y7tn/8u3Z//Hs1//x7Nf/8ezW//Hs1f/x69T/8OvT//Dq0v/v6tH/7+nQ/+7p + z//u6c7/7ujN/+zmyf/s5MT/6+TD/+rjwv/q48H/6uO//+nhvv/p4bz/6eC8/+jguv/n37n/5963/+be + tf/l3bT/5d2z/+Xbsf/j27D/49uu/+Parf/j2av/4tmq/+HYqf/h16f/4dem/+DWpP/g1qT/39Wi/97U + oP/e1KD/3tOe/93SnP/d0pz/3NGZ/9zQmP/cz5j/28+W/9rPlf/j2q7/7+rU//b16P/q48n/1suU/9TE + iP/Yy43/18qM/9/Uov/o5dv/vLac/3FrUv9zbE3/qZ1w/7WfRP/Kt27/08KA/9zRoP++t5j/d29N/0E9 + Lf8hHxf/FBMQ/3RrS/+imXf/4Neo/72sXv/JuXj/oZFD/6igff+lopX/pKGU/6ilmP+mo5b/qqeb/6qn + m/8MM07/EERi/x9Vdf8fVXX/H1V1Q////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bt6RPPbil + Ucv8+vbz/Pz39/v69PX7+vTz+/r09fv69PP7+vT1+/r08/v68/P7+vPz+/rz8/r58v36+fL/+/ny//r5 + 8v/6+fL/+vnx//r58f/6+fH/+vnx//r58f/6+PH/+vjw//r48P/6+PD/+vjv//r47//5+O//+ffu//n3 + 7v/59+7/+fft//n37f/59+3/+fft//n27P/49uz/+Pbs//j26//49uv/+PXq//j16v/49en/9/Xp//f0 + 6P/39Of/9/Tn//b05v/28+b/9vPl//bz5P/28uT/9vLk//Xy4//18uL/9fHh//Tx4f/08eD/9PDe//Tw + 3v/z793/8+/c//Pv2//z7tv/8u7a//Lt2f/x7dn/8e3Y//Hs1v/x7NX/8ezV//Dr0//w6tP/8OrS/+/q + 0f/u6c//7unO/+3my//s5cf/7OTH/+vkw//q5ML/6uPB/+rjv//p4b7/6eG9/+nhvP/o4Lr/59+5/+fe + t//m3rb/5t60/+Xds//l3LL/5Nuw/+Pbr//j2q3/49mr/+LZqv/h2Kn/4den/+HXpv/g1qX/4Nak/9/V + ov/e1KH/5t+3//Ht1//18eT/6uTK/9vSov/azpj/3NCY/9vQl//i2av/9PDg/8nBq/+poX7/q6F5/827 + eP+5pk//z755/9fKjP/QyrP/vLab/2JcQ/84NSj/GRcT/ywqIP/Jtmr/wq9f/9PCf//g1qv/nZNs/1pU + Pf87OCv/Kicg/w8PDP87OS7/w7qT/+PbsP/Vy5b/vKtb/7uua/+hk0v/pqOW/6ajlv+pppr/pqOW/6uo + nP+qp5v/DDNO/xNDXv8fVXX/H1V1/x9VdTP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wG3pE+ly7p3o/38+Pf8+/b3+/r19fv69fX7+vT1+/r09fv69PX7+vT1+/r09fv69PX6+fP9+vny//v5 + 8v/7+fL/+vny//v58v/6+fL/+vnx//r58f/6+fH/+vnx//r58f/6+PD/+vjw//r48P/6+O//+fjv//n4 + 7//5+O7/+fju//n37v/59+7/+ffu//n37f/59+3/+fbs//j27P/49uv/+Pbr//j26//49er/+PXq//j1 + 6f/39Oj/9/To//f05//39Of/9/Tm//bz5v/28+X/9vPk//bz5P/28uP/9fLi//Xx4v/08eH/9PHg//Tw + 3//08N//9O/e//Pv3f/z79z/8+/c//Lu2v/y7tn/8u3Z//Ht2P/x7Nf/8ezW//Hs1f/w69T/8OrT//Dq + 0v/v6tH/7unQ/+3nzP/s5sn/7ObI/+zlx//r5MT/6+TC/+rjwv/q48D/6eK+/+nhvv/p4bz/6OC7/+fg + uf/n37j/5t62/+bdtf/m3bP/5dyy/+TbsP/j26//49uu/+PZq//i2ar/4tip/+HYqP/h16b/4Nal/+DW + p//f1aL/5d61//Xy4//p48H/tKyO/6yjgf/Ovn3/uaZS/9PEh//b0Jf/6OC+/8S+pf9/eFn/RUEy/zAt + I/9JRTT/zr15/8e0aP/Xyoz/1c2t/5KKav9BPS//ISAa/xMTEf8JCQf/pJp2/8u4b//Uw4D/4tis/46H + aP9ZVET/W1ZL/09LQf9WUT7/XFdG/87Biv/e1qz/2tGk/7elWP/MvH7/nY4//6eggv+mo5b/qKWY/6aj + lv+rqJz/qqeb/wwzTv8WRGD/H1V1/x9Vdf8eVHAp////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bt6RPG7ekT+X29enp/fz5+fz69fX7+vX1+/r19fv69fX7+vX1+/r19fv69fX7+vX1+/nz+/r5 + 8//7+vP/+/rz//v58//7+fL/+/ny//r58v/6+fL/+vny//r58f/6+fH/+vnx//r48P/6+PD/+vjw//r4 + 8P/6+O//+vjv//n47//59+7/+ffu//n37v/59+3/+fft//n37f/49uz/+Pbs//j26//49uv/+Pbq//j1 + 6v/49en/9/Xp//f16f/39Oj/9/Tn//f05//28+b/9vPl//bz5f/28+T/9vLj//Xy4//18uL/9fHh//Tx + 4f/08OD/9PDf//Tw3v/0793/8+/d//Pv3P/z7tv/8u7a//Lt2f/x7dn/8e3X//Hs1//x7NX/8evU//Dr + 1P/w6tP/7+nR/+3ozf/t58v/7ebK/+zmyf/s5cf/7OTE/+vkwv/q48L/6uPA/+nivv/p4b7/6eG8/+jg + u//n4Ln/59+4/+betv/m3rX/5t20/+bds//l27H/5Nuw/+Pbr//q47//8+7b//Lu3v/f1q//z7+D/9bJ + kP/g1qT/39Wi/+niw//Kwq//k4xs/1ZSQP9JRTb/W1dD/7CkeP/Ar2L/29CX/9/Zwf+aknP/VE89/zQy + J/8ZFxP/DAwK/6SbdP/NvHf/18qM/9DJq/99dl7/TUk8/1FNQ/9EQTf/MS8k/6qkkv/TwoD/1MOA/93R + m/+uqJb/amVX/05JP/9JRDf/YlxE/5iQdP+/sXv/v7aH/9vTqv/Tx5D/vaxe/7SmYf+ilVD/p6SX/6aj + lv+npJf/qaaa/6qnm/8MM07/FEZj/x9Vdf8fVXX/IVRoHf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wG3pE+HwbBko/38+ff9/Pf3/Pv29fz69fX8+/X1/Pr19fv69fX7+vX1+/r19fv5 + 9Pv6+fP/+/rz//v68//7+vP/+/nz//v58//7+fP/+/ny//v58v/7+fL/+vnx//r58f/6+fH/+vjx//r5 + 8P/6+PD/+vjw//r48P/6+O//+fjv//n37v/59+7/+ffu//n37v/59+3/+fbs//j27P/49uv/+Pbr//j2 + 6//49er/+PXq//j16f/39en/9/Xo//f06P/39Of/9/Tm//fz5v/28+X/9vPl//bz5P/18uP/9fLj//Xx + 4v/08eH/9PHg//Tw4P/08N//9PDe//Pw3f/z793/8+/c//Lu2v/y7tr/8e3Z//Ht2P/x7df/8ezW//Hs + 1f/w69T/7+rS/+7ozv/t583/7efL/+3ny//s5sn/7OXH/+zkxP/r5MP/6uPC/+rjwP/p4r//6eG+/+ng + vP/p4Lv/7ujN//Xy4v/38+j/7ObP/97Uqf/e1Kf/5du1/+Pbtf/m37z/9fLj/8jBrP+AemX/WFNA/5uO + V/+1okn/08SH/+DWo//h2LL/pZ6A/3RvVv89Oi7/HhwX/xUTEv+imXH/wa9l/9zQl//WzrX/jIZq/01J + O/8+OzL/Pzw0/zMwJv+on3f/18qN/9jLjf/g16j/jol6/2BbT/9EQTf/S0Y3/11XQP/UxIP/1ceE/9PC + gv+zrJP/n5uP/3NvZf9XU0P/t6p1/7+0f/+7r33/vLB5/7isdf/d1av/2tCj/7elVv+/tHb/nIw9/6ii + h/+mo5b/qKWY/6ilmP+rqJz/DDNO/xFHZf8fVXX/H1V1/x9VdQf///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Bt6RPDbekT+Xr58zT/fz5+fz79vf8+/b3/Pv29fz79vX8+/b1/Pv29fz7 + 9fX7+vT7+/n0//v69P/7+vT/+/r0//v68//7+vP/+/nz//v58//7+fL/+/ny//v58v/6+fL/+vnx//r5 + 8f/6+fH/+vjx//r48P/6+PD/+vjv//r47//5+O//+ffv//n37v/59+7/+fft//n37f/49uz/+Pbs//j2 + 7P/49uv/+Pbq//j16v/49en/9/Xp//f16f/39Oj/9/Tn//f05//38+b/9vPm//bz5f/28+T/9vLk//Xy + 4//18uL/9fHh//Tx4P/08eD/9PHf//Tw3v/08N3/8+/d//Pv3P/y7tv/8u7a//Lt2f/x7dj/8e3X//Hs + 1//x7NX/8OvT/+/pz//u6M7/7ejN/+3nzP/t58v/7ObJ//Ds1P/18uP/9fHk/+rky//i2bL/5d21/+ni + vv/p4bz/7eXI//f16P/MyLv/opyF/21pVf+mmmn/uaZS/9bKlf/j27X/4dmx/8jAqv+Jg2r/TEk7/ycl + H/8ZGBT/l4tZ/8S0a//g1qP/2c2d/5+Xev9bV0X/NjQr/zc0Lf8tKyP/ioNi/9PDiP/c0Jf/4dmr/4mF + dv9gW0//SUU8/0lFOP9pY0r/q6WS/9rPlP/Wyo7/nZaB/6+pnP9saGD/ZF5M/5OLZv+vp4z/0cKG/9TE + hv+0rZr/h4Bt/3FtYf97d2n/0MSd/8zBl//DuIb/v7J9/7qteP+1qnX/wbaA/8e5hf+yolf/r51L/7yv + bv+rpor/qKWY/6ajlv+qp5v/qqeb/wwzTv8MRmb/H1V1/x9Vdfn///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wG3pE9hu6hWs/38+ff9/Pn5/Pv29/z79vf8+/b3/Pv29/z7 + 9vf8+/b1+/r1+/v59P/7+vT/+/r0//v69P/7+vT/+/r0//v68//7+vP/+/rz//v58//7+fL/+vny//v5 + 8v/6+fH/+vnx//r58f/6+PH/+vjw//r48P/6+O//+fjv//n37//59+//+ffu//n37v/59+3/+fbt//j2 + 7P/49uz/+Pbr//j26//49ev/+PXq//j16f/39en/9/Xo//f06P/39Of/9/Tm//fz5v/28+X/9vPl//bz + 5P/18uP/9fLj//Xx4v/08eH/9PHg//Tx3//08N7/9PDe//Pv3f/z79z/8+7b//Lu2v/y7tr/8e3Z//Ht + 2P/x7Nf/9PDe//f06P/39On/7+rV/+niw//p48f/7efL/+znzP/08eL/8OvV/7WumP+rpIv/s6h+/8m2 + c//e1Kb/6eG9/+niwv/u6ND/jolz/1ZSRf88OjH/KSch/5OHV//HtnL/5Ny1/9nOof+lnoP/aWRR/0E9 + M/8sKiT/HRwY/xMTDv/MvHn/4Naj/9vQnf+jnYT/ZWBQ/15ZTf9FQjn/TEk6/5+XdP/c0Jn/3NCX/97U + n/+emo//aGVd/2BcTP+AeV3/rqSB/9rQoP/a0qX/n5d6/4+IdP+zrJT/pJ6K/9DEnf/NwZb/x7mH/87A + h//Kwqn/k4t2/3dxYv9UUET/u6+D/8G3if/DuZD/yr+Z/9LJov/Nwpz/1s6j/9rRp/+5rnj/u7KA/66c + Tf+zqX7/q6eW/6ajlv+mo5b/q6ic/6qnm/8MM07/DERj/x9Vdf8fVXTv////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bt6RPA7ekT8/g1qq7/fz6+/z7+Pf8+/f3/Pv29/z7 + 9/f8+/b3/Pv29/z79vn7+vT//Pr1//z69f/7+vT/+/r0//v69P/7+vT/+/rz//v68//7+fP/+/nz//v5 + 8v/7+fL/+/ny//r58v/6+fH/+vnx//r48f/6+PD/+vjw//r47//5+O//+fjv//n37v/59+7/+fft//n3 + 7f/49uz/+Pbs//j27P/49uv/+Pbr//j16v/49en/9/Xp//f16f/39Oj/9/To//f05//39Ob/9vTm//bz + 5f/28+T/9vLk//Xy4//18uL/9fHh//Tx4P/08eD/9PDf//f05v/59+3/9vPp/+zm0P/m377/7ObM//Ht + 2f/x7dj/8+/b//n37v/z79z/urSf/7Ksm//h1qz/z7+E/+Tctv/i2bL/7ObM/6agi/98d2f/TktB/zg2 + L/+dlGr/zr+B/+nhvv/f1qz/tK6W/3VwX/9EQjj/JCId/w0NC/8REAv/sKV6/+Tctv/f1an/pZ2F/1xY + Sv9YVEn/TEg//0lGO/9kXkz/2M2a/+HXq//f1aP/pZ+O/397b/9RTUP/V1JE/5WOcP/d057/3dGc/9rP + mf+DfGz/ZGBW/4F9cf/DvJ7/0smh/87DmP/Vy5T/trCa/5OLeP+ooYf/vLen/7Kne//AtYX/wreI/8O5 + jf/AvKn/tbGh/5eQgP9QTEL/j4hu/8O6jP+vo3n/o5lt/52Uaf+akmf/nJNp/6edcf+uo3X/r6Nv/6uc + X/+/tY3/7erY/8/Oy/+XlYv/p6SX/6ypnf+rqJz/DDNO/w09Wv8fVXX/HlRz4////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wG3pE89uKVRy/38+vn9/Pr5/Pv39/z7 + 9/f8+/f3/Pv39/z79/f8+/b5+/r1//z79f/8+/X//Pr1//v69f/7+vT/+/r0//v69P/7+vT/+/r0//v6 + 8//7+vP/+/nz//v58v/6+fL/+vny//r58f/6+PH/+vjx//r48P/6+PD/+fjv//n47//6+O//+ffu//n3 + 7v/59+3/+fft//j37P/49uz/+Pbr//j26//49ev/+PXq//j16v/39en/9/Xo//f06P/39Of/9/Tn//f0 + 5v/28+b/9vPl//by5P/18uP/9fLi//Xx4f/18eH/9PHg//bz5P/7+vP/9vPm//Lu3P/v6tX/39at/8y7 + fP/n377/8ezW//Ds1//LyLn/nZmI/1xZT/9NS0L/m5eF/9PInf/Qv4X/0MCG/7q1qP+SjXr/Uk9F/zUz + LP8UExL/EhEM/6qecv/p4b7/4NWs/6+pkf9gXE7/T0tB/01KP/9WUkX/BQUE/9/VpP/l27L/49y6/62n + kv9iXFD/SEQ7/1BMQP9ZVUX/sKiL/97UqP/f1KT/i4Rw/4R+cP90cWj/iYZ7/7ixlf/b0aL/29Gf/9DI + nv+Ph3f/amVX/1NQQf+4rXz/v7SD/8G2hv/Lv5D/vLWa/6qmlv+YkX3/pJ2G/7ixmP/MwJn/x7uS/7as + gv+ron3/sa6i/5aQfP+dl4j/RkM3/56UZ/+bkGD/mY5a/5+QUf+hkEn/o5JI/6SWWf+pnGr/r6V7/7iw + kP/Kw67/0c27/+3t6//6+vn/6+rp/5GQjv+WlY3/rquf/wwzTv8OPFn/H1V1/x5Tcdv///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AbekT6/PwIGl/v36+fz8 + +Pn8+/f3/Pv39/z79/f8+/f3/Pv3+fv69f/8+/b//Pv2//z79f/8+/X/+/r1//v69P/7+vT/+/r0//v6 + 9P/7+vT/+/rz//v58//7+fP/+/ny//r58v/6+fL/+vnx//r58f/6+PH/+vjw//r48P/6+O//+vjv//n3 + 7//59+7/+ffu//n37f/59+3/+Pbs//j27P/49uz/+Pbr//j16v/49er/9/Xp//f16f/39Oj/9/Tn//f0 + 5//39Ob/9/Xp//n37//z8OH/5t2+/+DXr//q48j/9fHh//Tx4f/08OH/9vTn/6yomf9+fHH/VFJL/6Ke + j//d06X/1smT//Dr1P/q48j/m5eI/2FeU/9DQDn/ISAc/xMTEf+tpY3/zbx+/9LCiv++uaT/bmtd/1RQ + Rv9EQTj/SEU7/woKCf+upor/6eG+/+feu/+vqpr/aWRW/0hEO/9OS0D/YFxN/5eReP/j27T/4dm4/6Oc + hv+UkIT/aGVc/2VgU/+Efmn/vbSU/9LJqP/e1Kb/opqD/4R9bP9VUUb/YV1N/8S5iv/Ct4f/0seX/83H + p/+yr6H/h4Bv/09LQP+zrY//zcOj/8vAnf/Jv5r/w7mY/7Kuof+hm43/YVxP/4B5Yv+mnnf/nJNo/5uQ + Y/+bj1//oJdy/6iijP+0r6D/kot7/29oUP+jl2f/npVu/52Vd/+Tj37/kpCH/6Cemv+mpJ//pKKf/6yq + pv+0sq//v725/9DPyv/Z19L/9PTz/+3t7P/k4+L/r6+u/5qal/8TM0f/EEFd/xtOafMdU22z////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wG3pE8lt6RQ3/n4 + 8fH9/fr7/Pz4+fz8+Pf8/Pj3/Pv39/z79/n7+vb//Pv2//z79v/8+/b//Pv1//z79f/7+vX//Pr1//v6 + 9P/7+vT/+/r0//v69P/7+vP/+/nz//v58//7+fP/+/ny//r58v/6+fH/+vnx//r48P/6+PD/+vjv//r4 + 7//6+O//+ffu//n37v/59+3/+fft//n37P/49uz/+Pbs//n47//8+/X/+/nz//Lu3//q48r/7efR//f0 + 6P/39Of/8+/e//Xz5//Py77/r6ud/6Wgj/+zqIH/yrh3/+ffvv/z8OH/6uPK/7m1pP+XlIj/UlBI/zU0 + Lv8kIyD/r6mT/9vRoP/w7NX/6eLD/3BsYP9GQzn/Q0A3/0tIQP8PDw3/raaQ/9zSpP/i2bD/6+TH/2di + VP9fWk7/RUI5/15aTv9GQzj/5t+4/+fgvf+hmof/mJOH/2NgWP9fW07/hYBs/6Sdg//DvKf/5Nux/7Cp + kv9+eGf/WFVM/46JfP/Y0LH/1M2r/8/HoP/TyZ//uLOh/5aOff9pZFb/YVxQ/9DJpv/Nw6T/z8io/8zD + pf+4tKj/pZ+R/2RfUv9sZ1b/rqWB/6igef+hl23/nZNo/56Yef+rp5f/3tzX/1lUQ/+ikEX/nY1K/5yP + VP+bkGH/mZFt/6Cbif+hnY7/6+rn/3lzZP+Xk4z/t7Wx/7e1sf+3tbH/tbOw/6elov+bmZX/nJqW/52b + l/+hn5z/pKOf/7W0sv/Lysj/3d3c/9LSz//e3tz/29rZ/9rZ2P/R3tz/PWR2/yBRZZs5coaDQn6UR/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Abek + T4fBsGSl/f36+f39+fn8/Pj5/Pz4+fz8+Pf8/Pj3+/r2//z79//8+/b//Pv2//z79v/8+/b//Pr1//z6 + 9f/7+vX/+/r0//v69P/7+vT/+/rz//v68//7+fP/+/nz//v58v/7+fL/+vnx//r58f/6+PH/+vjw//r4 + 8P/6+PD/+vjv//n37//59+7/+ffu//n37f/59+3/+fbt//f06f/6+fL/+vjw/8C7rv+5tKT/x7yg/869 + hP/o4MD/9/To/+jhwv/08eL/iod9/1xaU/9CQTv/Ly4q/6qigf/c0aP/8/Dh/+bevf+gnZD/cG1k/0pH + P/8qKCL/ExMS/5GNff/r5cn/8OzV/+7o0P9+em7/Y15R/1hUSf9iX1T/RkQ8/6+okf/o4b//6ePD/5mT + hP+BfXD/U1BH/1xZTv+Pi3f/t7CX/+fhv/+lnon/gHlp/2VhV/+Ggnf/29S5/9fQsv/Qx6b/0sqm/7u3 + q/+Wj3v/YFtP/2diVf/Ox6T/zsSk/8/Hp//Ryav/uren/6qll/+Si3v/Pzw0/7ewkf+zq4j/raaD/6yj + gf+hmnz/qaWV/9rY0v9STkL/lYpY/6CQT/+gjkP/opNS/52QV/+moY7/vbqw/9LPyf9TUEb/jIuJ/5eW + k/+ko6D/qqml/6uppv+lo5f/qaWb//v7+/9val3/rqym/8rIw//OzMj/ycjB/8rIwv/Ix8L/wsG//7Kx + sP+urq3/sbGw/6Oopv+XoaD/gpib/3OVnf9fhpP/OmR4/x1Ra/8KQl//CUFe/wJAX/lHhZ6BR4WegUeF + nlf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wG3pE8Pt6RP7/Lv3uH+/fv7/fz4+f38+Pn8/Pj5/Pz4+fv79v/8+/f//Pv3//z79v/8+/b//Pv2//z7 + 9v/8+/X//Pr1//v69f/7+vT/+/r0//v69P/7+vP/+/nz//v58//7+fP/+/ny//r58v/6+fL/+vnx//r4 + 8P/6+PD/+vjw//v48f/z7uD/4diy/9nOn//p4cT/+fft//n37f/x7dz/+ffu/5+ckf91c2z/TUxG/z08 + OP+yqYb/18mX//f06P/g1a7/u7an/21qYv9BPjj/KSci/yIhHf81Mi3/5t69//Tw4f/t6NH/rKia/2xo + Xf9aVUr/SUU8/1pXTv+cl4T/7enS/+3p1P+dlob/k4+D/25rYf9gXVL/gX1v/6yok//n4cP/6+XK/4B6 + af+GgHH/dnNq/5qXjf/Mx7L/xL+u/9HLsP+8t6L/kIl3/3p0ZP9ZVUn/0Mmo/9HKqP/Pyan/z8mr/766 + q/+uq5z/kIl5/1NPRP+9tp3/0cus/7u1lv+1ro7/r6iK/7Kvov/V08z/bGdZ/3NtVP+fkl//oZJV/6OS + Tf+ikET/oZp8/7Gtn//h39v/U09C/5mUff+qppj/uLay/7Syrv+mpKH/sq+l/9vZ1P+4tKr/YF5X/4+O + jP+fnpv/srGt/8LBvf/KyMH/o6CT/767sv/+/v7/b2lb/9bW1P/o6Oj/5ujn/8jV1f+mwcT/jrG5/2CP + oP89b4T/KFt1/wA8W/8APFv/ADxb/wA9XP8APl7/AEBh/ww/WO0AOlb/AB8v/wAdLf8FJTXNL2V7LUeF + nhX///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AbekT2m8qlmv/f37+/39+vv9/Pj5/fz4+fz8+Pn8+/f//Pv3//z79//8+/b//Pv2//z7 + 9v/8+/b//Pv2//z69f/8+vX//Pr1//v69P/7+vT/+/r0//v69P/7+vT/9/Tr/+ffwP/Swoz/1ciU/+vl + zP/6+PH/9fLl//b06v/Oy73/n5yT/29rYf93cFL/tKJl/+vly//59+3/7OfR/724rf90cWn/R0U//yUk + IP8VFBP/Hx4X/9nNnv/39Oj/5dy7/62nmP9eWk//WlVK/0dEO/9cWVL/XVxV//Ht2f/y7t//wbuv/6Wh + lP98eG3/UExD/1tYTv9taVz/y8Ku/+zo0v+Oh3b/eHJj/2ZjWP+Sj4T/19O+/97Yv//UzrX/ysOx/5GK + ef+IgXD/WlZK/3t3Z//NyK7/0Mmr/9LLrf+7tqT/p6OV/5CJef9KRj3/rqiV/+zn0P/Oya3/xL6k/7iz + mv+yr6L/ramb/4qDcf9mYFD/o5hs/5+UZf+glF//n5BR/6GWZ/+tqZj/2NbQ/1xWSf+UimH/nZR0/6ah + jf+rqJz/q6qm/6Shlv/Oy8L/wr+2/1xZUv+gnpv/u7m2/8nIwf/IxMD/wL+7/7a0qf/o5+P/uLSq/1xZ + UP+qqaj/urq6/9DQ0P/p6en/1NjZ/7i2q/2yrqT7/////21oWv9KWFvnI0NR4w0/WO8CPVv9Aj1b/QA8 + W/8CP179AkBg+wVCX/UGPVnxCiQy4w4oNccuMjLPNjMt9ygqJsUTLjhfASgtTZfP6wP///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wG3pE8Dt6RPz+DXq73+/fz7/fz5+f38+fn9/Pj5/Pv3//z79//8+/f//Pv3//z7 + 9//8+/b//Pv3//n37//q5M3/2s2g/93Rp//v6tb/+/r0//v69P/6+fL/+vn0/8rEuP+NioD/iYZ4/7aq + gP/Kt3j/7ujT/+vlzf++urD/iIZ//2poYf8+PDf/IiEd/0I8Jf/g17D/+fft/+3o0v/CvrL/XlpQ/09L + Qf9UUEb/X11W/2hmXf/q5Mn/8/Dk/+3o0/+tp5f/a2ZY/0hFPP9dWlL/bmtj/766q//y7t3/yse3/4F7 + bf96dWj/bGpi/5SQh//KxLX/3djA/+jizv+uqJv/jIZ1/1lVS/96dmn/xMCv/9TOs//TzbP/vLil/7Sw + ov+WkID/cWtd/11aUf/e2cj/3NfB/9XPuP/EwKr/sK2g/7OwpP+AeWn/X1tP/6+niP+km3P/nJJm/5yQ + YP+flnH/pJ+M/+bl4f9NST//kIRX/6GVZf+lnHP/o5x8/56Zh/+opZr/vbqx/8zJv/9gXFP/kpCN/6Cf + nP+6ubb/w8K+/8jHwP+rqJ3/5OPe/725sP9dWVH/ubi3/9XV1P/g4N//4eHg/+Tk4/+2tKn/7ezq/8G+ + tf9PS0H/YnqF/zthaf8fVVj/AEMy/wBFLP+oraPthJGJ4f////+ZlIX9RktH5wNDY/cIPlvtJzc8zy0t + KeUOJjSrEx0ioQ0jKHcSHR11EyEeUbPT1hO21tIpNTIs6ygmIe0xLynHr+rKFZf/zAX///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AbekT0m5plLD/f37+/79+/v9/Pn5/fz5+fz79//8+/j//Pz4//z7 + 9//8+/f//fz5//v79//NyLn/s6+h/62omf+0qH//zbuA//Dr2f/7+vT/9/br/9HOwv+DgXv/UU9L/zc2 + Mv8nJiT/tauH/+DWr//l3bz/fHpz/1VTTf9IRT3/Qj82/0A9Nv8wLSj/49m0//j27f/x7t3/+Pbs/21o + Wv9jXlL/WVZP/4SCe//Py73/8/Df//f06P+YkX//tbCl/3p3b/9raGD/npqO/87Kt//d2cn/x8G0/5iT + hP+Bemr/T0tB/3x3af/d18L/1tC5/9jUu/++u6z/qKSX/29pW/9nZFr/u7Wn//Lu3v/b1sT/0c25/7Cu + of+sp5r/pqGT/1dTSf/BvKf/ycKs/6ihff2jmnH/oJh7/6yol//c2tX/aGJU/4F1Rf+ikk7/n5BU/5iN + Xv+Xjmn/o56N/6qlmP/X1c//WVVL/5mYlf+urKn/wsC9/8C/u/++vLj/s7Gm/9zb1v/a2NL/V1NM/5+e + m/+1tLL/1tbU/93c2v/g393/rKme/+zr6f/g3tr/UExC/4+do/9tg479V3eE/zFkaP8DQkD/qqyj8+bl + 4v/d29b/SUc/+QAuQv8CLUL9Ayg/+QsvRekhMzrRk5iS1Y6XlMX7+/v/y8i+/2JdUd01WmRfPTw4sRkY + FfEYFxTxteDNI7PmyQ+z5skJs+bJCbPmyQ+15ckhREQ7tzUyLOU9OjLpREg+j7PmyRWX/8wD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8Bt6RPtdLEian+/vv7/fz6+/38+fn8+/j//Pz4//38 + +P/8+/f//Pv3//79+//W08v/kpCK/1pYVP9DQj7/ODc1/7yykP/m3bz/+/r1//Xy5f+Wk4v/WVZP/zs4 + Mf89OjT/NzYy/62omP/f1a3/6uPK/3BtZf84NS//Y15R/0dEO/9bWVL/WllS/+/q1//29Ov/8/Hl/8rE + uv+al4z/YV9Y/6upoP/U0MH/2NO//9DNwP+Vjn7/hn9u/4aCd/+uraX/6OXa/+Hd0P/d2sr/yMO1/7Cs + n/+QiXj/ZWBT/3FtYP/k4dH/2tXH/9rVxP/Z1sn/srCk/6Gbjv9fXFL/qaWV/9/cyv/U0Lv/yMGu/6eh + hv+no4//6ejl/3lzY/9kXkT/n5BO/6ORRP+gkE//npBW/6Cagf/Hwrn/09DK/2BcUP+dnZr/pqSh/6Gf + nP+amZb/oaCd/6yqn//Iw7r/zcrA/1tYTv+npqP/vry5/9XT0P/V09D/19XS/6upnv/s6+n/7ezq/1lV + Sv+iqKn/jpqf/4SYof9rhpT/NWNs/6uwp+/m5eL/8fDu/2lkV/0RKkftADFE/wAxPf8ELTn7CTRC8Zeb + k+Pb2dT//f39/1lUSuseNTefFzcvcxs5NncgHhrxFxYT8XJxacu4uK676unm//r6+v9bVkvpnayaezQy + LNcpJyLpKykj27XlySWz5skNs+bJB7PmyQ215ckbfI13W0A9NeM/PDTlPDkx5bbkySuz5skP////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AbekTyW3pFDf+vnz8/7+/Pv9/Pn5/Pz4//z8 + +P/9/Pj//fz4//z8+P/+/vz/trGm/11aU/9APTf/NDIs/0NCPv+gnZH/6uPK//r59P/29Or/kIt9/2Vg + U/9cV0z/V1RN/3d1b/+5tqn/7ejU//Hu3v+HhHn/WFNI/0I/N/9nZF3/dHJs/8C7rf/h3tD/9/Xs/4uE + c/+Pin7/q6mk/+Tj3f/q6N3/4t3Q/9rXy/+yrqL/kot7/3x2Z/+EgXj/4N3Q/97bzv/a18r/1NHC/7Sy + pf+zrqH/jod2/0VCOv/c2Mz/2tfI/9POu//QzLn/ural/8C+tP+moZP/XVhG/5+Vaf+cjlL/n49L/6GQ + Q/+jnH7/rKeU//f39v9TT0T/jIZx/5GNfv+Tko//lJOQ/4+Oi/+pp5z/6Ofk/9TRy/9aVk//oZ+c/7Sz + r/+3trL/tbSw/7u5tf+joJX/3NrV/9rY0v9bVkv/wMHB/7/Ex/+zvsD/nK21/2+Klv+ysaf77u3r//X0 + 8/9aVUr/CCFG9wIjQf0AKz3/ATM4/wQ0Nv2Qm5Xd2NfR//////+Vj3/7OTw1yRE9J48TMyCNKCYh5SYk + H/F0cmnXyce9//////+xrKH1iYh5m7biyjVHST+nKSci6SQiHu1hY1mZtrWq1dHPyO3/////uLSq9Wxn + Wd1EQTjlOTYv5UNDOru15Mkls+bJFbPmyRe15ckjcHlnd0pGPd9TT0TlQ0A36VFQRbW15ckds+bJCf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bt6RPl8e1bqP9/fv7/f37+/z8 + +P/9/Pj//fz4//38+P/8+/f//v79/6ijlf9gW0//YVxQ/1pWTP93dW//qqec//f06f/49/H/y8e7/5SP + gv9rZlj/Yl9W/2VjXv/LycH/4NzR/+jj2f+clYX/qKWZ/2xpYf94dW3/rKmf/9/cz//Tz77/yMS4/5SN + ff+Ce2z/WVZP/7m2q//c2Mz/29jL/9XSx/+2tKj/pZ+S/5CJeP9iYFj/3NrO//Tx6P/b2Mv/1NHB/7+8 + sP+2s6f/x8K5/2plV/95c1z/n5Vn/5+SX/+klFX/o5JL/6umjf/h4Nv/dW5f/29pU/+Wjm3/lpF9/5uY + jP+XlpP/oqCV/8G+tf/j4d3/TUpD/4+Oi/+VlJH/o6Kf/6qopf+rqqf/sq+k//n5+P/Cv7b/VlJI/6+v + r//Q0ND/z9LS/7nAwv+cq7H/trWq/d3b1//m5eH/VVFG/xQ2ROkAJ0D/ASs1/wIxNP8AME7/qKyl7djW + 0P//////bmha+ztEP8sNMym9EiwopTAuKc8xLijxbmtj5cfDu+v/////1tPN/3NuYMW248kza3dlcSYk + H+0kIh7pT05Hwbq4rvPy8e//9vb1/4F7a9uetKBrQD013To3MOU2MyzjtuTJNbe6rYW6ua7L8fDv//// + //+DfGzlXllN315ZTeV0gm59t+PJNbbkyS+asp1RW1dNxVNPROVqZVflTEg/5U1JP+GJootHs+bJEbPm + yQX///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AbekTxO3pE/v8/Df4/7+ + /Pv9/Pn//fz5//38+P/9/Pj//fz4//39+/+sp5r/b2lb/2hlW/9kYl3/e3p1/7Wunf/w7+b/tbCl/4+I + ef+rp53/iIZ//5yalP/f3NH/3djO/9XSxP+2sqT/jYZ1/2ZjW/+enJb/5+Xf/+nn3v/f3NH/vruv/7Ww + pf+Zk4T/ZGBV/52bk//r6eD/3drP/9nWy//CvrP/sKyg/9za1f+CfGz/lZF+/6+ng/+jmm//nZFi/56R + W/+knYL/1tTO/7i0qv9ZVUb/mI1c/52Tav+gmHj/o56M/6ajmf+0sqb/8fHv/3FtYf+Afnb/j46M/5ua + l/+qqaX/rqyp/5+ckP/b2dT/zcrA/2BbT/+fnpz/o6Kh/8DAwP/X2Nj/wMfI/7WzqP/7+/r/v7uy/1hV + S/snTmH/BC9F/wApQP8AKD3/BDI2/aispO3Jx77//////3BqXP08RT7VBTMj6xAtJ8EmKSXRJCIe5ZCO + heHKyL7f/////7SwpfVwa17NtuTJL7fjyTUqKCPjIyEd7UpIQcu5t6zr8vHv//r6+v+alIXrnbKea0pJ + QL04NS7pMzAq6WJsXIG7u7Czzs3D///////NysD/WVVK3UpGPd9JRTzlT05EvbfjyTm32MA9t7itr7Ov + pOv6+vn/+vr5/6ahlO1eWU3fYl1R32llV9lgXFDbVVFG6X13Z+l9d2flVlJH5VFNQ+l8gnGBtd/DH7Pm + yQmz5skD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bt6RPbbyq + Wq39/fz7/f36//38+f/9/Pn//Pv3//38+P+kn5H/vbqy/5COhv+DgX3/19TN/+Ldzv/v69z/ycK4/4+I + eP+IgXD/gX12/8zLx//v7ef/7eri/9TSyP/Hwrf/lo9//3FrXf9bWVH/5ePd/9/c0//e2tH/wr+1/7y5 + r//CvrX/lI19/2poX//Z1sz/vLeZ/6mgfP+il23/opuC/8K/tf/Rzsf/fXVe/5eJSv+hklX/nJFj/52U + b/+dlXj/s7Cl/+rp5/++urH/VVJK/5GQjf+enJr/sK+s/7q5tv/BwL3/trSp//v7+v94cmP/eXZs/5+f + nf+ysbH/zc3N/97e3v+2tKr/4+Le/9/d2P9gW0//WWuF/ztVb/UON0//ADs9/wA6Of+oq6Px8/Lx/+Lg + 3P9OS0H7BDA0+wQuMfkFJyvvGCUkySAgHd+Hhn3vt7Sp2//////Kx73/dG9hy7bkyS1ealltIR8b7R8e + Gu15eG/JvLuxz/v7+//6+vr/e3Vl5ZuolntXWk6jNzQt6TIvKelDRTurubywmc3Lwvn/////6+rn/4F6 + at9EQTjlSkY95UJAN9e348lBuNrBS768sufg4Nv//////8rHvf9uaFrfVVFG5W9sXsOAfm6zaGRXyWVh + VueinpL1ubas/fPz8P//////8fDv/7SwpfGSi3vtjod26ZmThO2IgXDpTEg/5WFcUOmFhnWXteHEIbPm + yQuz5skD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Abek + Twe3pE/b6OHBy/79+//9/Pn/+Pf0/+Xk3v+XkYH/ioNy/4WDfP/Pzsr/8e/p/+/s5P/r6N7/1dLJ/6ml + mP+Ujn7/aGVa/7W0r//r6uT/4d/X/9fTyv+uq5//qaSX/6Kdj/9TT0X/0c7C/9jWzf/Y1cz/tayM/6Wg + i/+loIv/393Y/1tWSf+HfE7/opBE/52OTf+bjVT/mo5f/6CcjP/n5uP/yse9/21pXv+FhIL/lZSS/6em + o/+3trP/wL+8/7e0qv/4+Pf/v7uy/1RRR/+cm5j/tra1/9HR0P/f397/397e/7e1qv/8/Pv/hn9u/1la + VfVje4j/O2Bz/xxTW/8AQUH/qK2k7dfVz//o5+T/YVxQ/wdARP0CMDT9AjQ0/wUvL/UdNznTkZCG793b + 1///////enRk9UtXRpdliWY3tuTJJywqJNMdHBjxaGZe5bOxptH4+Pf//////3RuX+Wdqpl7SUlAtS8t + J+krKSPpdHlribe1qtnd3Nb1/////+Lg3P92cGHdU09E4VNPROVCPzbpeol0bbjZwUW8u7Hb397Z//// + ///k49//hH1s5VBMQuVubF69jpSDk35/bqN/em3Ts7Cl+dvZ1P/39/b/6Ofk/6mkl+uIgXDlamVX5YuE + c+mUjn7teHJl5YmGe/G1sqf7z83E+e7u6//7+/r//////7m1q/WNhnXtV1NI6XhzZMuYqZZbteXJHbPm + yQ2z5skF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bt6RPS7mmU8H9/fv//fz6/93b1f+0sKX/l5GB/3h0aP+sq6f/393V/+Dd1v/f3db/2tfP/7Sx + pv+2sqf/hH1u/4B+ef/n5eD/5+Xe/9rY0P/BvrL/qaSQ/87Lwf+Gf27/aWJP/6GTVv+djUv/oI5D/6GS + U/+inor/qKOP/+7t6/9GQzr/kIx9/46Ni/+WlZL/np2a/56dm/+lopX/9/f2/7+7sv9wbF//gn94/56c + mf/Bwb//19fV/+Df3v+2tKn//Pz7/8TBuP9LSD//h5Sa/2l/if9Qb3//N2Jx9QBGTv+rr6jt8/Lx/6yn + m/89PznvAjk4/wI2PP8CMjn/Ai47/5OcmNPEwbj//////4Z/bvVaWlG7IUlJXUFcYlFEREChIB4a7WBe + V/W/vLP3/////8G9tP13cmTJt+PJN3mIc2kuLCbpKykj6VBOR8O3tarX3dzW9f/////p6OX/gnxs20RB + OOVKRj3lPzw017fjyTm4uq6Jvbyy0fj49///////5OPf/3lzY+VLRz7fY19T0anHr2OcpZWHkpCBtaai + lffZ2NL/9/f2/+vq5/+hm43rbmha5WVgU+V1b2DleXNj5X54aeWinY/xw8G4/9rZ0//u7uv/2tjT/7m1 + q/eHgG/pSkY95VRQRemBfG3Fpq6ee7e5rZmzsaXdsq+k97WzqP+wrqP3l5SHx5mnlWG15ckjs+bJFbPm + yQuz5skF////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wG3pE+73NOk7e7t6v+7ua//wb61/42Gdv+bmJH/4uDZ/+jn4f/e3NT/4d/Y/8K/ + tv+1sqf/3NrV/11YSf+ek2b/nZFe/56PUf+fjkn/o5t4/6Oad//5+fj/Yl1R/4V+Zv+SjHf/ko+D/5ST + kP+enZn/paOW/8K/tv/u7ev/REE7/4+MhP+RkI3/qKek/7e2sv/HxMP/paKX//z8+//a2NL/Yl5S/5qe + n/+Ml5r/f5CY/2mBjf07YXb/sK+k+/Py8f/a2NL/QkA4+w8yPvUDMzP/BD0x/wI4Lv8IPTf/pqyk0+bl + 4f/c2tX/TEhA4w9BNo8YR09XHktLZSspI/FiYFn1nZqN9//////Z19H/amVX37fjyTe348k3ODYv0y0r + JeU/PTfjtrSp6+7u7P//////fHZm7YyKe69eW1DJQT415To3MOlUWEyXuLuui7q5r9H4+Pf//////+Ph + 3f+Ujn7jVFBF311bT8G448lFuNrBS62soMuXkoTtxMG4///////u7ev/s66j72tmWOVXU0jlRUI55VNP + ROV+eGnlraqd9cG/tv/a2dP/7+7s//Dv7v/Z19H/trKn82JdUeVNST/ldW9g46mom7uzsKXhqaaZ+a6s + of21s6j/sK2i+6WhldGaoZJ7teTJJbbkyRez5skVtuTJF7XlyRu15ckdteXJG7bkyRez5skTs+bJC7Pm + yQWz5skD////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Bt6RPMbSjWvfc29T/wb+1/8/Mw/90bmD/v7eY/7qvhP+zp3b/rqJs/6yd + Xv+qpIr/1dTN/7q2qv9ZVEH/lo1k/5iQb/+alYP/mJWL/6GflP+xrqf/+/v7/2JdUf+Pin3/jIuJ/5WU + kP+ioJz/vLu3/6Ogk//q6eX//////3hyY/+OjYz9oaSk/5+pq/+Uo6j/cYiR/Z2flfXz8vH/5OPf/2Vi + V/cgN0TjBjE++wYuN/sEOjP/Az0w/5+knd/m5eH/8fDu/0RBOfkuNjO9B0YzhwtIO3UoJiHbKSci7YiE + ePXT0sz/+vr6/46HdueXqppbtuDMMUhKQaUrKSPpPDo0666soOvh39v//f39/3lzY+mOi3u3b3Nkm0E+ + NeU8OTHlRkU8vba5rJ/My8D1/////+fm4v9nYlXlWlVK31VRRt9XU0jVuOLJR7jZwUmwr6PBiIR47fv7 + +///////7u3r/6ynm+tpZFblSUU85VdTSOljYFXnnZqO8bOwpffr6uj////////////v7uz/wr+2/8K/ + tv+cloframVX5U1JP+minpHNtbOo4a+soPmxrqP9tbOo/62roP2TjoDtl5WGtZurmVu25MknteXJJbbk + ySe25MkrtuTJK7bkySe15ckfs+bJF7PmyQ2z5skHs+bJBbPmyQWz5skHs+bJB7PmyQez5skFs+bJBbPm + yQP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wGrm1NHtrCW+djX0f/Ewbj/a2VS/7ChY/+6r37/s6mD/7Os + jv+vqpn/srCl/+3t6v+Vj4D/amZd/46Ni/+XlpP/pqSh/7Kwrf+hnpL/0tDK//////9uaFr/e3hy/52d + nf+mqKj/q7Gy/5yprv+ztKz33NvW//////+WkID/QERC6RMzSOsQL0LtBjE7+wUwNfuXoZvh4+Le//X0 + 8/94cmP7Hjo0xQw/Kr0ISy+JE0Y0kS4sJvF5dmv30M/I//////96dGTxiJB+ebbkyS1vfGltKigj6Scl + IOlaWU/Jv760/fLx7//h39v/eXRlyZGmkWdMSD/dPDkx5Tc0LemtsKKfwL206/v7+//6+vn/Y15R5W9p + W+FcV0zfTUk/5W13ZYu42sJRurmvydrZ1P//////9fTz/5eRgeNjXlHfX1pO32tnWdVcV0zfZ2JX55+c + j/W3tKn78fHv////////////5eTg/8PAt/+oo5brrKeb7YmDcuuMiH3xraqe97y6sOWxraL3l5GC7Xlz + Y+1gW0/tX1pO7XRvYc14eWqXtuTJLbbkySe25MkptuTJK7bkyS225MkrteTJJbXlyR2z5skVs+bJDbPm + yQuz5skLs+bJDbPmyQ2z5skLs+bJCbPmyQWz5skD////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Abi2qevt7er/r6qe/1dUS+nh4uLN39/f/8jI + yP+0tLT/rKyr/7e1qv/7+/r/nJaH/21oXP+goKD/sbGx/8PEw//Eysr/t7Wr/dvZ1f//////hH1s/0ZJ + RO0HL1H/BC5J/wAsQf8DMUD/jZuX46+0ruf/////tLCl/0lIQeMEOy3lDT4vvRIyKKcfIBzNZ2Vd78vK + v///////vbmw+X18bZ+15ckltuTJJ0VGPKcpJyLpPDo067q4rv/y8e//4+Hd/2JdUd244slHT05EwT06 + MuU3NC3pVFtOlby6sNHW1c7//////83KwP96dGTfTUk/30xIP+VSUUa9uNrCUba2q8HLyb/5/////+rp + 5v+Oh3bpW1ZL31ZSR+VvalzVdnFj0WxnW+WUkof109HL//f39v//////5eTg/7i0qvWYkoLtlI5+7ZaQ + gO2Si3vrkY6B86WjmPvIxLvv3dvW/+rp5v/m5eH/q6aa8W1oWulVUUbpamlbt6GomW+3ua2Lt7aqvbWz + qO22tKn9trSp67e9r3O15ckjs+bJF7PmyQ+z5skLs+bJC7PmyQ2z5skNs+bJDbPmyQuz5skHs+bJBbPm + yQOz5skDs+bJA7PmyQOz5skDs+bJA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wG3tar5+/v6/7Ktov9pZFbz////Aays + rCexsbGRoKCg46Ojo923tar//Pz7/6qlmP99fHLjOXZx/wNHU/8AQ1D/ATg+/6ispe3PzMT//////52X + if9DRT3nATQy/wEzN/EPOT69Ez09z3NyatWloZP9/////+Tj3/9walzhtuTJK7XkySVVW06BJiQf7Tk3 + Muu1sqf78vHv//X08/92cGHft+PJO4yljlk/PDTdODUu5TYzLN+9vbPF09HK///////c2tX/bWha2VBM + QuVKRj3lSEU817jiyUezzLhnw8G48+Pi3v//////0c7H/5mThOdcV0zfZGBUz3JxYrlval7fp6OV98nH + vP/39/b///////Tz8v+1sabxjIV05WdiVeV1b2DlkIl55ZeThvG0sab90M/H/+rq5//7+/r/7+7s/87L + wv+RinrtY15R5WlmWb+msaBtt7mtjbWzqMW0sqfvtrSp/bOxpfGpqp2TtuTJJ7XlyRuz5skTs+bJDbPm + yQ+z5skRs+bJE7PmyRGz5skNs+bJCbPmyQWz5skDs+bJA7PmyQOz5skDs+bJA7PmyQOz5skD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bt7Wq9/z8+//Kx73/aWRW57Pm + yQP///8B////Af///wGz5skDuLar7fPy8f/Ewbj/amdb3RxgWakCPjD/ADQy/wk4M9+XmpLTrqqe+/// + ///b2dT/W1ZL37XlySG25MkXtuTJKSspI984NjHvoqCV++no5f//////hH1s7YqHd7G348k/R0Y9wTYz + LOUyLynlp6WXy9HQyf//////wb61/WRgU9lbV03JTEg/5UhEO+VPTkS9udrCWcG+tfHg4Nv//////9LP + yf9zbl/fTEg/5WJeUtGMkoKRd3VmuWhjWOW3tKn729nU//f39v/t7Or/v7uy+5WPf+2LhHLplI5+7ZSO + fuubl4rxr6yg+8/NxP/r6+j/+vr5///////i4Nz/kIl57VpVSullYVTZk5OEn7GxpamsqZ3hsa+j97Wz + qP+wrqL3m5mMs7bkySu15ckds+bJFbPmyQ+z5skRs+bJE7PmyRWz5skVs+bJEbPmyQuz5skHs+bJBbPm + yQOz5skDs+bJBbPmyQWz5skDs+bJA7PmyQP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bs+bJA7i1q9/v7uzh8fDv/2Fc + UPmz5skNs+bJBbPmyQOz5skDs+bJB7m3rM/h4Nz//f39/2ZhVOlmiGdBVHpWMbXlyR8+PzalYmBZ9ZSR + hvf7+/v//////4+Id/GXo5JxtuTJL1xgU481MizlMzAq5YKBdtHHw7vr//////Lx8P9walzlaWZZx09L + QeVFQjnlQkA317nawlvAvrXt4ODb///////T0Mr/d3Fi5VhTSN9YU0jfe35up3+CcaFnY1jdvLqw/9nY + 0v/39/b/9fTz/8rHvf+Ffm3ldG5f5XRuX+WIgXDplY9/67m2rP3CwLf/2tnT/+7u6//29vT/5uXh/5SO + f+1eWU3pV1NI5ZSUhaW1tqulsK2i47OxpfW1s6j/sK6j95OQg8mPl4Z1teTJJbXlyRuz5skXtuTJF7Xl + yRu15ckbteTJGbPmyRWz5skPs+bJCbPmyQWz5skDs+bJA7PmyQWz5skFs+bJBbPmyQOz5skD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AbPmyQW3tqu14eDc//// + //9vaVv5mJyOcbPmyROz5skHs+bJA7PmyQu4uq6Fy8q///////+nopX1enZnu7bkyS+348k1NzQt4UdE + Peehn5T53dzW9f/////i4Nz/a2ZY35GfjHlST0TTRkM65T88NOVsdGSNuLitw9bVz///////+fn4/5OM + fOlaVUrfU09E5WhoWrmAhXObfn1wu7u5r//Z2NL/9/f2//X08/+6tqz5fXdn5W9pW+V3cWLlkYp66ZWP + f+u4tav7v760/9fW0P/u7uv/+/v6//Tz8v/BvbT9hH1s6T88NOmLhXXPqKqdn7q4rsuzsKXtsa+j+7Wz + qP+wrqP3o6GUuZuxnUe15ckftuTJF7XkyRm15ckdteXJIbXlyR215MkZs+bJE7PmyQ2z5skHs+bJBbPm + yQWz5skHs+bJB7PmyQez5skFs+bJA////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wGz5skHtrisc8rI + vu//////s66j9WpmWNm25Mkns+bJE7PmyQez5skLtsi1O7q4rfHy8e///////3x2ZuWUnIyLXF5Sq0ZD + OuVAPTXlhYN41by7sNP4+Pf//////8/Mw/9kX1LlTUk/31VRRt9RUEXJueLJS7nRvGOppprlysi+//f3 + 9v//////19XP/5OMfONYU0jfgXpq6ZaQgO2XkYLpubas/cG/tv/a2dP/7u7r//b29P/j4d3/y8i+/6Ca + jOt9d2fti4Ry46Silbu1sqfXsa6i77Guo/21s6j/rqyh+5CMf9mPkIGbtuTJK7XlySG15ckdteXJIbXl + ySO15ckjteXJH7bkyRez5skRs+bJCbPmyQez5skHs+bJB7PmyQmz5skHs+bJB7PmyQWz5skD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8Bs+bJBbbD + szW4tqzn7u7s//7+/v+Oh3btiIZ2r7bkySu25MkXs+bJE7XlyR25u7CfzczC///////x8O//ZF9S5VdT + SOVbVkvfT0tB5YGQfH+4ua2zvrux4ejn4///////6Ofk/5qUhednYlXfaWRW3WhkVtleWU3lcWxe5aik + l/W+vLL/19bQ/+/u7P/6+vn/6unm/9HOx/+tqJzxbmha5XVvYO2clofhtLGm2a+soPWxrqP9tbOo/62r + oP2FgnXlf3xtrZOplE+15MklteXJI7XkySW25MkptuTJKbXkySW15ckhtuTJF7PmyQ+z5skJs+bJB7Pm + yQmz5skJs+bJCbPmyQmz5skFs+bJA7PmyQP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AbPm + yQOz5skPt7mtg8rJv/X/////8/Lx/313Z+lxbF7Xkp2LcbbkyS+25MkvuNnBSbGvo9mJhXnr+vr6//Tz + 8v+dl4nrYVxQ32JdUd11cGLTeHRm5ZKQhfGdmYzx9PPy///////6+vr/4N7a/766sfuhm43rmpSF7YuE + c+ljXlHlf3pt8bOwpeG+vLLxubes/7a0qf+urKH9gX1x8YB6a8l3dmentuTJL7bkySe25MkntuTJK7bk + ySu25MkpteXJI7XkyRmz5skRs+bJC7PmyQmz5skLs+bJC7PmyQuz5skLs+bJCbPmyQWz5skDs+bJA/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8Bs+bJB7bSuyO5uK2919XP9///////////z8zD/46Hdu16dGTjYV1R22JeUdlwa1/nqaaZ89TS + zP/39/b//////+vq5/+ppJfrh4Bv5X13Z+WJg3LlnJiK8aimmvmvq5/55uTh//j49//i4Nz/p6KV8XZw + Ye1ZVEnpc25gzY6Ug4G25MkttuTJKbbkySu25MkttuTJK7bkySe15ckjtuTJF7PmyRGz5skLs+bJC7Pm + yQuz5skNs+bJC7PmyQmz5skHs+bJBbPmyQP///8Bs+bJA7PmyQOz5skDs+bJA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AbPmyQOz5skLt8S0Obm4rb/OzMP59/f2///////6+vn/29nU/7+7svurpprtl5GB7ZSO + fuuloJP1s7Ck/dPRyv/u7uv/+/v6///////JxLz/bmha6VhTSOeKhni/sLKlnbSzqMezsKXxtrSp/bSy + pu+np5qnqcOvQbXlySO25MkXs+bJD7PmyQuz5skNs+bJDbPmyQ2z5skLs+bJCbPmyQez5skDs+bJA7Pm + yQOz5skDs+bJA7PmyQP///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8Bs+bJA7PmyQu2zLgruLmul7m3revNy8L54eDc/+jn4//q6eb/1tTO/7Cr + oPWQiXnteHNky4yMfaO3uq2PtrSp0bWzqO+2tKn/srCl8aWlmJ+25MkpteXJHbPmyRWz5skTs+bJFbPm + yRWz5skVs+bJE7PmyQ+z5skLs+bJBbPmyQOz5skDs+bJA7PmyQOz5skDs+bJA////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wG2tKkztrSpeba0qbW2tKnjtrSp/ba0 + qeO2tKlb////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + \ No newline at end of file diff --git a/MovieFinder.Viewer/Movie.ico b/MovieFinder.Viewer/Movie.ico new file mode 100644 index 0000000000000000000000000000000000000000..f90277bd968379797b770c677b8a8edad7038b83 Binary files /dev/null and b/MovieFinder.Viewer/Movie.ico differ diff --git a/MovieFinder.Viewer/Program.cs b/MovieFinder.Viewer/Program.cs new file mode 100644 index 0000000000000000000000000000000000000000..5123f4e715d031c0420494634b58a76a9e4c3627 --- /dev/null +++ b/MovieFinder.Viewer/Program.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; +using DZ.MediaPlayer.Vlc.Deployment; +using System.Net; +using ComponentFactory.Krypton.Toolkit; +using System.Diagnostics; +using System.Reflection; +using System.Threading; + +namespace BlueTube.Viewer +{ + static class Program + { + + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main(string[] args) + { + bool createdNew; + var mutex = new Mutex(true, "BlueTubeViewer", out createdNew); + if (!createdNew) + { + KryptonMessageBox.Show("Another instance of BlueTube is running.", Constants.AppTitle); + return; + } + + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + VlcDeployment deployment = VlcDeployment.Default; + if (!deployment.CheckVlcLibraryExistence(true, false)) + deployment.Install(true, true, false, false); + + ServicePointManager.DefaultConnectionLimit = int.MaxValue; + ServicePointManager.MaxServicePoints = int.MaxValue; + ServicePointManager.MaxServicePointIdleTime = 0; + + Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException); + AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); + try + { + Application.Run(new MainForm()); + } + catch(Exception Exception){ + + } + + + } + + static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) + { + LogManager.LogError(e.ExceptionObject.ToString(),e.ExceptionObject as Exception); + Debug.WriteLine("Unhandled Exception: " + e.ExceptionObject.ToString()); + } + + static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) + { + LogManager.LogError("Thread Exception", e.Exception); + } + + public static void SetBusy() + { + Application.UseWaitCursor = true; + Cursor.Current = Cursors.WaitCursor; + } + + public static void SetIdle() + { + Application.UseWaitCursor = false; + Cursor.Current = Cursors.Default; + } + } +} diff --git a/MovieFinder.Viewer/Properties/AssemblyInfo.cs b/MovieFinder.Viewer/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000000000000000000000000000000000..3078dc18619f7d91f05ff696a3fb58242d7d8e0b --- /dev/null +++ b/MovieFinder.Viewer/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +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("BlueTube")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("BlueTube")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[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("8439e70d-9959-40a7-9271-fb8c033b2c3b")] + +// 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.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/MovieFinder.Viewer/Properties/Resources.Designer.cs b/MovieFinder.Viewer/Properties/Resources.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..bcb5d4ccec891a68a4a4fc95d60c879c0035efee --- /dev/null +++ b/MovieFinder.Viewer/Properties/Resources.Designer.cs @@ -0,0 +1,198 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.1008 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace BlueTube.Viewer.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("BlueTube.Viewer.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 browse { + get { + object obj = ResourceManager.GetObject("browse", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap favourite { + get { + object obj = ResourceManager.GetObject("favourite", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap favourite_16 { + get { + object obj = ResourceManager.GetObject("favourite_16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap fullscreen { + get { + object obj = ResourceManager.GetObject("fullscreen", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap movie_zoom { + get { + object obj = ResourceManager.GetObject("movie_zoom", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap mute { + get { + object obj = ResourceManager.GetObject("mute", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap next { + get { + object obj = ResourceManager.GetObject("next", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap pause { + get { + object obj = ResourceManager.GetObject("pause", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap play { + get { + object obj = ResourceManager.GetObject("play", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap playing { + get { + object obj = ResourceManager.GetObject("playing", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap previous { + get { + object obj = ResourceManager.GetObject("previous", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap related { + get { + object obj = ResourceManager.GetObject("related", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap search { + get { + object obj = ResourceManager.GetObject("search", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap search_32 { + get { + object obj = ResourceManager.GetObject("search_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap stop { + get { + object obj = ResourceManager.GetObject("stop", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized string similar to <html><head><style>.thumbBlock{background: none repeat scroll 0 0 #EAEAEA;position: relative;}.thumbBlock .thumbInside{padding: 0px;}body, table, div{margin:0px;padding:0px;}table{border-spacing:0;} + ///td{vertical-align:top;}.thumbBlock p{line-height: 16px;margin: 0px;}.thumbBlock p.metadata .duration{font-weight: bold;padding: 0px;}img{height:135px;width:180px;}</style></head> + ///<body> + /// <div style="" class="thumbBlock" id="video_6478446"> + /// + /// <div class="thumbInside" > + /// <table> + /// [rest of string was truncated]";. + /// + internal static string TestHtml { + get { + return ResourceManager.GetString("TestHtml", resourceCulture); + } + } + + internal static System.Drawing.Bitmap video { + get { + object obj = ResourceManager.GetObject("video", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap volume { + get { + object obj = ResourceManager.GetObject("volume", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/MovieFinder.Viewer/Properties/Resources.resx b/MovieFinder.Viewer/Properties/Resources.resx new file mode 100644 index 0000000000000000000000000000000000000000..500307f68761935d845630143c65b480d626ee59 --- /dev/null +++ b/MovieFinder.Viewer/Properties/Resources.resx @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\browse.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\favourite.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\movie_zoom.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\mute.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\next.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\pause.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\play.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\playing.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\previous.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\related.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\search.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\stop.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + <html><head><style>.thumbBlock{background: none repeat scroll 0 0 #EAEAEA;position: relative;}.thumbBlock .thumbInside{padding: 0px;}body, table, div{margin:0px;padding:0px;}table{border-spacing:0;} +td{vertical-align:top;}.thumbBlock p{line-height: 16px;margin: 0px;}.thumbBlock p.metadata .duration{font-weight: bold;padding: 0px;}img{height:135px;width:180px;}</style></head> +<body> + <div style="" class="thumbBlock" id="video_6478446"> + + <div class="thumbInside" > + <table> + <tr><td><div class="thumb"><a href="{0}"><img src="{1}" id="pic_6478446"/></a></div></td> + <td><div style="padding:4px"><p>{2}</p><p class="metadata"><span class="bg" ><span >Duration:<span class="duration">{3}</span></span><br /><span>Quality: 99% </span></span></p> + </div> + </td> + </tr> + </table> + </div> + + </div> +</body> +</html> + + + ..\Resources\video.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\volume.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\search_32.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\favourite_16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\fullscreen.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/MovieFinder.Viewer/Properties/Settings.Designer.cs b/MovieFinder.Viewer/Properties/Settings.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..290755732786207cf2c5930e4e5dcc55f37dabb6 --- /dev/null +++ b/MovieFinder.Viewer/Properties/Settings.Designer.cs @@ -0,0 +1,36 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.1008 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace BlueTube.Viewer.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + 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.ApplicationScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)] + [global::System.Configuration.DefaultSettingValueAttribute("Data Source=|DataDirectory|\\Data\\db.sdf")] + public string dbConnectionString { + get { + return ((string)(this["dbConnectionString"])); + } + } + } +} diff --git a/MovieFinder.Viewer/Properties/Settings.settings b/MovieFinder.Viewer/Properties/Settings.settings new file mode 100644 index 0000000000000000000000000000000000000000..22e79b2a82dbdfde58ab32f001b378a7aa1d6cca --- /dev/null +++ b/MovieFinder.Viewer/Properties/Settings.settings @@ -0,0 +1,14 @@ + + + + + + <?xml version="1.0" encoding="utf-16"?> +<SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <ConnectionString>Data Source=|DataDirectory|\Data\db.sdf</ConnectionString> + <ProviderName>Microsoft.SqlServerCe.Client.3.5</ProviderName> +</SerializableConnectionString> + Data Source=|DataDirectory|\Data\db.sdf + + + \ No newline at end of file diff --git a/MovieFinder.Viewer/Resources/Actions-media-playback-pause-icon.png b/MovieFinder.Viewer/Resources/Actions-media-playback-pause-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7c93ba6fbe1b04756fc661e376a1bf325bbbb860 Binary files /dev/null and b/MovieFinder.Viewer/Resources/Actions-media-playback-pause-icon.png differ diff --git a/MovieFinder.Viewer/Resources/browse.png b/MovieFinder.Viewer/Resources/browse.png new file mode 100644 index 0000000000000000000000000000000000000000..194e5511ccffafdb1f4f52025b84830d4ccb01e2 Binary files /dev/null and b/MovieFinder.Viewer/Resources/browse.png differ diff --git a/MovieFinder.Viewer/Resources/favourite.png b/MovieFinder.Viewer/Resources/favourite.png new file mode 100644 index 0000000000000000000000000000000000000000..2ef14e910dd71fe0a4ba28e725a0961d78c48688 Binary files /dev/null and b/MovieFinder.Viewer/Resources/favourite.png differ diff --git a/MovieFinder.Viewer/Resources/favourite_16.png b/MovieFinder.Viewer/Resources/favourite_16.png new file mode 100644 index 0000000000000000000000000000000000000000..3f3c7b5a60b45122eee00a96b2e7d9505a31656f Binary files /dev/null and b/MovieFinder.Viewer/Resources/favourite_16.png differ diff --git a/MovieFinder.Viewer/Resources/fullscreen-new.png b/MovieFinder.Viewer/Resources/fullscreen-new.png new file mode 100644 index 0000000000000000000000000000000000000000..a53193ead4e4834cd4debe12b5c64c805afac133 Binary files /dev/null and b/MovieFinder.Viewer/Resources/fullscreen-new.png differ diff --git a/MovieFinder.Viewer/Resources/fullscreen.gif b/MovieFinder.Viewer/Resources/fullscreen.gif new file mode 100644 index 0000000000000000000000000000000000000000..9eafa3c13c64accd19a98b5b4b28604bc0badd61 Binary files /dev/null and b/MovieFinder.Viewer/Resources/fullscreen.gif differ diff --git a/MovieFinder.Viewer/Resources/fullscreen.png b/MovieFinder.Viewer/Resources/fullscreen.png new file mode 100644 index 0000000000000000000000000000000000000000..15457a5bd38262a8f8cce0b230072b73190a9d24 Binary files /dev/null and b/MovieFinder.Viewer/Resources/fullscreen.png differ diff --git a/MovieFinder.Viewer/Resources/movie_zoom.png b/MovieFinder.Viewer/Resources/movie_zoom.png new file mode 100644 index 0000000000000000000000000000000000000000..9596d53100481b7b518396a514ff9480ae669c67 Binary files /dev/null and b/MovieFinder.Viewer/Resources/movie_zoom.png differ diff --git a/MovieFinder.Viewer/Resources/mute.png b/MovieFinder.Viewer/Resources/mute.png new file mode 100644 index 0000000000000000000000000000000000000000..70b413680eed1f39a8dbb2c673e5d8901840832c Binary files /dev/null and b/MovieFinder.Viewer/Resources/mute.png differ diff --git a/MovieFinder.Viewer/Resources/next.png b/MovieFinder.Viewer/Resources/next.png new file mode 100644 index 0000000000000000000000000000000000000000..cecfd84c686e8f1df4f9c2d3275160d3f3c1923d Binary files /dev/null and b/MovieFinder.Viewer/Resources/next.png differ diff --git a/MovieFinder.Viewer/Resources/original.png b/MovieFinder.Viewer/Resources/original.png new file mode 100644 index 0000000000000000000000000000000000000000..64bfb1f802edd03b0c46ea1488baf8c89c2c7121 Binary files /dev/null and b/MovieFinder.Viewer/Resources/original.png differ diff --git a/MovieFinder.Viewer/Resources/pause.png b/MovieFinder.Viewer/Resources/pause.png new file mode 100644 index 0000000000000000000000000000000000000000..7c93ba6fbe1b04756fc661e376a1bf325bbbb860 Binary files /dev/null and b/MovieFinder.Viewer/Resources/pause.png differ diff --git a/MovieFinder.Viewer/Resources/play.png b/MovieFinder.Viewer/Resources/play.png new file mode 100644 index 0000000000000000000000000000000000000000..3370fc31387956f89c9426a3bffcb814ab8733c3 Binary files /dev/null and b/MovieFinder.Viewer/Resources/play.png differ diff --git a/MovieFinder.Viewer/Resources/playing.png b/MovieFinder.Viewer/Resources/playing.png new file mode 100644 index 0000000000000000000000000000000000000000..2408cdd588ba1ccf28cfd9169ff35c0e1add65cb Binary files /dev/null and b/MovieFinder.Viewer/Resources/playing.png differ diff --git a/MovieFinder.Viewer/Resources/previous.png b/MovieFinder.Viewer/Resources/previous.png new file mode 100644 index 0000000000000000000000000000000000000000..e8a638b371de1b32267a85811734f39e49cbdb6a Binary files /dev/null and b/MovieFinder.Viewer/Resources/previous.png differ diff --git a/MovieFinder.Viewer/Resources/related.png b/MovieFinder.Viewer/Resources/related.png new file mode 100644 index 0000000000000000000000000000000000000000..9e7117e75c55880bc983eb548c387a43650695e9 Binary files /dev/null and b/MovieFinder.Viewer/Resources/related.png differ diff --git a/MovieFinder.Viewer/Resources/search.png b/MovieFinder.Viewer/Resources/search.png new file mode 100644 index 0000000000000000000000000000000000000000..65214bccb0ff42f7fadc0dee4f869c4feb055c91 Binary files /dev/null and b/MovieFinder.Viewer/Resources/search.png differ diff --git a/MovieFinder.Viewer/Resources/search_32.png b/MovieFinder.Viewer/Resources/search_32.png new file mode 100644 index 0000000000000000000000000000000000000000..baba23ef8493052380f0a6c1f7207ed31c75c143 Binary files /dev/null and b/MovieFinder.Viewer/Resources/search_32.png differ diff --git a/MovieFinder.Viewer/Resources/stop.png b/MovieFinder.Viewer/Resources/stop.png new file mode 100644 index 0000000000000000000000000000000000000000..74cb05b6a621a836c12b97d4fd5fafc7becfa809 Binary files /dev/null and b/MovieFinder.Viewer/Resources/stop.png differ diff --git a/MovieFinder.Viewer/Resources/video.png b/MovieFinder.Viewer/Resources/video.png new file mode 100644 index 0000000000000000000000000000000000000000..cfb3899c4c0b8a28b6fbf6e44f604dd3e2979c52 Binary files /dev/null and b/MovieFinder.Viewer/Resources/video.png differ diff --git a/MovieFinder.Viewer/Resources/volume.png b/MovieFinder.Viewer/Resources/volume.png new file mode 100644 index 0000000000000000000000000000000000000000..a984b1612eae7e1ca220267f34e6db7b275d37e9 Binary files /dev/null and b/MovieFinder.Viewer/Resources/volume.png differ diff --git a/MovieFinder.Viewer/Views/BrowseWindow.Designer.cs b/MovieFinder.Viewer/Views/BrowseWindow.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..4c1d8fa09fc5bffee3dcf809eb7c0090afd553e1 --- /dev/null +++ b/MovieFinder.Viewer/Views/BrowseWindow.Designer.cs @@ -0,0 +1,59 @@ +namespace BlueTube.Viewer +{ + partial class BrowseWindow + { + /// + /// 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(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.browseGalleryWidget = new BlueTube.Viewer.Controls.BrowseGalleryWidget(); + this.SuspendLayout(); + // + // browseGalleryWidget + // + this.browseGalleryWidget.Dock = System.Windows.Forms.DockStyle.Fill; + this.browseGalleryWidget.Location = new System.Drawing.Point(0, 0); + this.browseGalleryWidget.Name = "browseGalleryWidget"; + this.browseGalleryWidget.Size = new System.Drawing.Size(150, 150); + this.browseGalleryWidget.TabIndex = 0; + this.browseGalleryWidget.ItemSelected += new System.EventHandler(this.browseGalleryWidget_ItemSelected); + this.browseGalleryWidget.PageSelected += new System.EventHandler(this.browseGalleryWidget_PageSelected); + // + // BrowseWindow + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.browseGalleryWidget); + this.Name = "BrowseWindow"; + this.ResumeLayout(false); + + } + + #endregion + + private Controls.BrowseGalleryWidget browseGalleryWidget; + + } +} diff --git a/MovieFinder.Viewer/Views/BrowseWindow.cs b/MovieFinder.Viewer/Views/BrowseWindow.cs new file mode 100644 index 0000000000000000000000000000000000000000..aeb37510ac4a16da4c5cb569a9cc64bdc3a62a56 --- /dev/null +++ b/MovieFinder.Viewer/Views/BrowseWindow.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using Client.Scraper; +using ComponentFactory.Krypton.Toolkit; + +namespace BlueTube.Viewer +{ + public partial class BrowseWindow : UserControl, IScraperServiceCallback,IView + { + public BrowseWindow() + { + InitializeComponent(); + } + + public void ActivateView() + { + this.browseGalleryWidget.RefreshView(); + this.BringToFront(); + + } + + public void DeactivateView() + { + + } + + public void Initialize(ScrapedPage page) + { + this.browseGalleryWidget.ClearItems(); + this.browseGalleryWidget.AddItems(page); + } + + public void OnScrapVideoCompleted(ScrapedPage page) + { + Program.SetIdle(); + this.InvokeEx(() => + { + Initialize(page); + }); + + } + + public void OnScrapVideoDetailsCompleted(ScrapedVideo video) + { + + } + public void OnScrapError(Exception ex) + { + Program.SetIdle(); + KryptonMessageBox.Show("An error occurred: " + ex.Message, Constants.AppTitle, + MessageBoxButtons.OK, MessageBoxIcon.Warning); + + } + + private void browseGalleryWidget_ItemSelected(object sender, GalleryItemSelectedEventArgs e) + { + //ugly.. should have a IViewContainer to route + (this.FindForm() as IViewContainer).PlayVideo(e.Video); + } + + + public void TriggerSearch(SearchParameters param) + { + Program.SetBusy(); + new ScraperService().ScrapVideosAsync(this, param); + } + + private void browseGalleryWidget_PageSelected(object sender, GalleryPageSelectedEventArgs e) + { + new ScraperService().ScrapVideosAsync(this, new SearchParameters + { + Url = e.Link.Url + }); + } + } +} diff --git a/MovieFinder.Viewer/Views/BrowseWindow.resx b/MovieFinder.Viewer/Views/BrowseWindow.resx new file mode 100644 index 0000000000000000000000000000000000000000..5ea0895e324fa7a86681adc56938bad2f2367ba0 --- /dev/null +++ b/MovieFinder.Viewer/Views/BrowseWindow.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/MovieFinder.Viewer/Views/FavouriteWindow.Designer.cs b/MovieFinder.Viewer/Views/FavouriteWindow.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..265b84c4998eb413ec0ca11894d6c66b449e3bb8 --- /dev/null +++ b/MovieFinder.Viewer/Views/FavouriteWindow.Designer.cs @@ -0,0 +1,57 @@ +namespace BlueTube.Viewer.Views +{ + partial class FavouriteWindow + { + /// + /// 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(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.browseGalleryWidget = new BlueTube.Viewer.Controls.BrowseGalleryWidget(); + this.SuspendLayout(); + // + // browseGalleryWidget + // + this.browseGalleryWidget.Dock = System.Windows.Forms.DockStyle.Fill; + this.browseGalleryWidget.Location = new System.Drawing.Point(0, 0); + this.browseGalleryWidget.Name = "browseGalleryWidget"; + this.browseGalleryWidget.Size = new System.Drawing.Size(150, 150); + this.browseGalleryWidget.TabIndex = 1; + this.browseGalleryWidget.ItemSelected += new System.EventHandler(this.browseGalleryWidget_ItemSelected); + // + // FavouriteWindow + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.browseGalleryWidget); + this.Name = "FavouriteWindow"; + this.ResumeLayout(false); + + } + + #endregion + + private Controls.BrowseGalleryWidget browseGalleryWidget; + } +} diff --git a/MovieFinder.Viewer/Views/FavouriteWindow.cs b/MovieFinder.Viewer/Views/FavouriteWindow.cs new file mode 100644 index 0000000000000000000000000000000000000000..4941a05b00d2fdf854b26ef4e57b2d73de77fb81 --- /dev/null +++ b/MovieFinder.Viewer/Views/FavouriteWindow.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using Client.Scraper; +using BlueTube.Viewer.Data; + +namespace BlueTube.Viewer.Views +{ + public partial class FavouriteWindow : UserControl,IView + { + public FavouriteWindow() + { + InitializeComponent(); + } + + public void ActivateView() + { + this.BringToFront(); + Initialize(new ScrapedPage + { + Videos = DataService.Create().GetAllFavourites() + }); + } + + public void DeactivateView() + { + + } + + public void Initialize(ScrapedPage page) + { + this.browseGalleryWidget.ClearItems(); + this.browseGalleryWidget.AddItems(page); + } + + private void browseGalleryWidget_ItemSelected(object sender, GalleryItemSelectedEventArgs e) + { + (this.FindForm() as IViewContainer).PlayVideo(e.Video); + } + + + public void TriggerSearch(SearchParameters param) + { + Initialize(new ScrapedPage { Videos = DataService.Create().SearchVideos(param.Query) }); + } + + } +} diff --git a/MovieFinder.Viewer/Views/FavouriteWindow.resx b/MovieFinder.Viewer/Views/FavouriteWindow.resx new file mode 100644 index 0000000000000000000000000000000000000000..5ea0895e324fa7a86681adc56938bad2f2367ba0 --- /dev/null +++ b/MovieFinder.Viewer/Views/FavouriteWindow.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/MovieFinder.Viewer/Views/ViewWindow.Designer.cs b/MovieFinder.Viewer/Views/ViewWindow.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..954a296b182475bca77e7b502ef343ff9a1ec0d5 --- /dev/null +++ b/MovieFinder.Viewer/Views/ViewWindow.Designer.cs @@ -0,0 +1,223 @@ +namespace BlueTube.Viewer +{ + partial class ViewWindow + { + /// + /// 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(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kryptonSplitContainerMain = new ComponentFactory.Krypton.Toolkit.KryptonSplitContainer(); + this.headerGroupSearchResult = new ComponentFactory.Krypton.Toolkit.KryptonHeaderGroup(); + this.buttonSpecHeaderGroupSearchResult = new ComponentFactory.Krypton.Toolkit.ButtonSpecHeaderGroup(); + this.buttonSpecHeaderGroupMore = new ComponentFactory.Krypton.Toolkit.ButtonSpecHeaderGroup(); + this.verticalSingleColumnGalleryWidget1 = new BlueTube.Viewer.VerticalSingleColumnGalleryWidget(); + this.tableLayoutPanelRight = new System.Windows.Forms.TableLayoutPanel(); + this.kryptonHeaderGroup = new ComponentFactory.Krypton.Toolkit.KryptonHeaderGroup(); + this.buttonSpecHeaderGroupCollapse = new ComponentFactory.Krypton.Toolkit.ButtonSpecHeaderGroup(); + this.relatedVideoGalleryWidget = new BlueTube.Viewer.HorizontalSingleRowGalleryWidget(); + this.videoPlayerWidget = new BlueTube.Viewer.VideoPlayerWidget(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonSplitContainerMain)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonSplitContainerMain.Panel1)).BeginInit(); + this.kryptonSplitContainerMain.Panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonSplitContainerMain.Panel2)).BeginInit(); + this.kryptonSplitContainerMain.Panel2.SuspendLayout(); + this.kryptonSplitContainerMain.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.headerGroupSearchResult)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.headerGroupSearchResult.Panel)).BeginInit(); + this.headerGroupSearchResult.Panel.SuspendLayout(); + this.headerGroupSearchResult.SuspendLayout(); + this.tableLayoutPanelRight.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonHeaderGroup)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonHeaderGroup.Panel)).BeginInit(); + this.kryptonHeaderGroup.Panel.SuspendLayout(); + this.kryptonHeaderGroup.SuspendLayout(); + this.SuspendLayout(); + // + // kryptonSplitContainerMain + // + this.kryptonSplitContainerMain.Cursor = System.Windows.Forms.Cursors.Default; + this.kryptonSplitContainerMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonSplitContainerMain.Location = new System.Drawing.Point(0, 0); + this.kryptonSplitContainerMain.Name = "kryptonSplitContainerMain"; + // + // kryptonSplitContainerMain.Panel1 + // + this.kryptonSplitContainerMain.Panel1.Controls.Add(this.headerGroupSearchResult); + this.kryptonSplitContainerMain.Panel1MinSize = 200; + // + // kryptonSplitContainerMain.Panel2 + // + this.kryptonSplitContainerMain.Panel2.Controls.Add(this.tableLayoutPanelRight); + this.kryptonSplitContainerMain.Panel2MinSize = 500; + this.kryptonSplitContainerMain.Size = new System.Drawing.Size(935, 473); + this.kryptonSplitContainerMain.SplitterDistance = 213; + this.kryptonSplitContainerMain.TabIndex = 0; + // + // headerGroupSearchResult + // + this.headerGroupSearchResult.ButtonSpecs.AddRange(new ComponentFactory.Krypton.Toolkit.ButtonSpecHeaderGroup[] { + this.buttonSpecHeaderGroupSearchResult, + this.buttonSpecHeaderGroupMore}); + this.headerGroupSearchResult.Dock = System.Windows.Forms.DockStyle.Fill; + this.headerGroupSearchResult.HeaderStyleSecondary = ComponentFactory.Krypton.Toolkit.HeaderStyle.Calendar; + this.headerGroupSearchResult.Location = new System.Drawing.Point(0, 0); + this.headerGroupSearchResult.Margin = new System.Windows.Forms.Padding(0); + this.headerGroupSearchResult.Name = "headerGroupSearchResult"; + // + // headerGroupSearchResult.Panel + // + this.headerGroupSearchResult.Panel.Controls.Add(this.verticalSingleColumnGalleryWidget1); + this.headerGroupSearchResult.Size = new System.Drawing.Size(213, 473); + this.headerGroupSearchResult.TabIndex = 0; + this.headerGroupSearchResult.ValuesPrimary.Heading = "Search Results"; + this.headerGroupSearchResult.ValuesPrimary.Image = global::BlueTube.Viewer.Properties.Resources.search; + this.headerGroupSearchResult.ValuesSecondary.Heading = ""; + // + // buttonSpecHeaderGroupSearchResult + // + this.buttonSpecHeaderGroupSearchResult.Type = ComponentFactory.Krypton.Toolkit.PaletteButtonSpecStyle.ArrowLeft; + this.buttonSpecHeaderGroupSearchResult.UniqueName = "90FF6DCCE41046173AA0902A801FBF30"; + this.buttonSpecHeaderGroupSearchResult.Click += new System.EventHandler(this.buttonSpecHeaderGroupSearchResult_Click); + // + // buttonSpecHeaderGroupMore + // + this.buttonSpecHeaderGroupMore.Edge = ComponentFactory.Krypton.Toolkit.PaletteRelativeEdgeAlign.Far; + this.buttonSpecHeaderGroupMore.ExtraText = "More"; + this.buttonSpecHeaderGroupMore.HeaderLocation = ComponentFactory.Krypton.Toolkit.HeaderLocation.SecondaryHeader; + this.buttonSpecHeaderGroupMore.Orientation = ComponentFactory.Krypton.Toolkit.PaletteButtonOrientation.Auto; + this.buttonSpecHeaderGroupMore.Style = ComponentFactory.Krypton.Toolkit.PaletteButtonStyle.NavigatorStack; + this.buttonSpecHeaderGroupMore.Type = ComponentFactory.Krypton.Toolkit.PaletteButtonSpecStyle.RibbonExpand; + this.buttonSpecHeaderGroupMore.UniqueName = "C2B83C55CBE14DE3F1994DD155091842"; + this.buttonSpecHeaderGroupMore.Click += new System.EventHandler(this.buttonSpecHeaderGroupMore_Click); + // + // verticalSingleColumnGalleryWidget1 + // + this.verticalSingleColumnGalleryWidget1.Dock = System.Windows.Forms.DockStyle.Fill; + this.verticalSingleColumnGalleryWidget1.Location = new System.Drawing.Point(0, 0); + this.verticalSingleColumnGalleryWidget1.Name = "verticalSingleColumnGalleryWidget1"; + this.verticalSingleColumnGalleryWidget1.Size = new System.Drawing.Size(211, 412); + this.verticalSingleColumnGalleryWidget1.TabIndex = 2; + this.verticalSingleColumnGalleryWidget1.ItemSelected += new System.EventHandler(this.verticalSingleColumnGalleryWidget1_ItemSelected); + // + // tableLayoutPanelRight + // + this.tableLayoutPanelRight.ColumnCount = 1; + this.tableLayoutPanelRight.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelRight.Controls.Add(this.kryptonHeaderGroup, 0, 1); + this.tableLayoutPanelRight.Controls.Add(this.videoPlayerWidget, 0, 0); + this.tableLayoutPanelRight.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanelRight.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanelRight.Name = "tableLayoutPanelRight"; + this.tableLayoutPanelRight.RowCount = 2; + this.tableLayoutPanelRight.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanelRight.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanelRight.Size = new System.Drawing.Size(717, 473); + this.tableLayoutPanelRight.TabIndex = 4; + // + // kryptonHeaderGroup + // + this.kryptonHeaderGroup.ButtonSpecs.AddRange(new ComponentFactory.Krypton.Toolkit.ButtonSpecHeaderGroup[] { + this.buttonSpecHeaderGroupCollapse}); + this.kryptonHeaderGroup.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonHeaderGroup.HeaderVisibleSecondary = false; + this.kryptonHeaderGroup.Location = new System.Drawing.Point(3, 280); + this.kryptonHeaderGroup.Name = "kryptonHeaderGroup"; + // + // kryptonHeaderGroup.Panel + // + this.kryptonHeaderGroup.Panel.Controls.Add(this.relatedVideoGalleryWidget); + this.kryptonHeaderGroup.Size = new System.Drawing.Size(711, 190); + this.kryptonHeaderGroup.TabIndex = 3; + this.kryptonHeaderGroup.ValuesPrimary.Heading = "Related Videos"; + this.kryptonHeaderGroup.ValuesPrimary.Image = global::BlueTube.Viewer.Properties.Resources.related; + // + // buttonSpecHeaderGroupCollapse + // + this.buttonSpecHeaderGroupCollapse.Type = ComponentFactory.Krypton.Toolkit.PaletteButtonSpecStyle.ArrowDown; + this.buttonSpecHeaderGroupCollapse.UniqueName = "FDD12D6B57164510EF8A4AFC8131F8CA"; + this.buttonSpecHeaderGroupCollapse.Click += new System.EventHandler(this.buttonSpecHeaderGroupCollapse_Click); + // + // relatedVideoGalleryWidget + // + this.relatedVideoGalleryWidget.AutoScroll = true; + this.relatedVideoGalleryWidget.Dock = System.Windows.Forms.DockStyle.Fill; + this.relatedVideoGalleryWidget.Location = new System.Drawing.Point(0, 0); + this.relatedVideoGalleryWidget.MinimumSize = new System.Drawing.Size(0, 156); + this.relatedVideoGalleryWidget.Name = "relatedVideoGalleryWidget"; + this.relatedVideoGalleryWidget.Size = new System.Drawing.Size(709, 158); + this.relatedVideoGalleryWidget.TabIndex = 0; + this.relatedVideoGalleryWidget.ItemSelected += new System.EventHandler(this.relatedVideoGalleryWidget_ItemSelected); + // + // videoPlayerWidget + // + this.videoPlayerWidget.Dock = System.Windows.Forms.DockStyle.Fill; + this.videoPlayerWidget.Location = new System.Drawing.Point(3, 3); + this.videoPlayerWidget.Name = "videoPlayerWidget"; + this.videoPlayerWidget.Size = new System.Drawing.Size(711, 271); + this.videoPlayerWidget.TabIndex = 2; + this.videoPlayerWidget.ToggelFavourite += new System.EventHandler(this.videoPlayerWidget_ToggelFavourite); + this.videoPlayerWidget.PlayNext += new System.EventHandler(this.videoPlayerWidget_PlayNext); + this.videoPlayerWidget.PlayPrevious += new System.EventHandler(this.videoPlayerWidget_PlayPrevious); + // + // ViewWindow + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.kryptonSplitContainerMain); + this.Name = "ViewWindow"; + this.Size = new System.Drawing.Size(935, 473); + ((System.ComponentModel.ISupportInitialize)(this.kryptonSplitContainerMain.Panel1)).EndInit(); + this.kryptonSplitContainerMain.Panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonSplitContainerMain.Panel2)).EndInit(); + this.kryptonSplitContainerMain.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonSplitContainerMain)).EndInit(); + this.kryptonSplitContainerMain.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.headerGroupSearchResult.Panel)).EndInit(); + this.headerGroupSearchResult.Panel.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.headerGroupSearchResult)).EndInit(); + this.headerGroupSearchResult.ResumeLayout(false); + this.tableLayoutPanelRight.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonHeaderGroup.Panel)).EndInit(); + this.kryptonHeaderGroup.Panel.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonHeaderGroup)).EndInit(); + this.kryptonHeaderGroup.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private ComponentFactory.Krypton.Toolkit.KryptonSplitContainer kryptonSplitContainerMain; + private ComponentFactory.Krypton.Toolkit.KryptonHeaderGroup headerGroupSearchResult; + private ComponentFactory.Krypton.Toolkit.ButtonSpecHeaderGroup buttonSpecHeaderGroupSearchResult; + private VerticalSingleColumnGalleryWidget verticalSingleColumnGalleryWidget1; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanelRight; + private ComponentFactory.Krypton.Toolkit.KryptonHeaderGroup kryptonHeaderGroup; + private ComponentFactory.Krypton.Toolkit.ButtonSpecHeaderGroup buttonSpecHeaderGroupCollapse; + private HorizontalSingleRowGalleryWidget relatedVideoGalleryWidget; + private VideoPlayerWidget videoPlayerWidget; + private ComponentFactory.Krypton.Toolkit.ButtonSpecHeaderGroup buttonSpecHeaderGroupMore; + } +} diff --git a/MovieFinder.Viewer/Views/ViewWindow.cs b/MovieFinder.Viewer/Views/ViewWindow.cs new file mode 100644 index 0000000000000000000000000000000000000000..33cb1356df75eb1008c5d099a76ee8c6a40f8181 --- /dev/null +++ b/MovieFinder.Viewer/Views/ViewWindow.cs @@ -0,0 +1,245 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using System.Linq; +using ComponentFactory.Krypton.Toolkit; +using Client.Scraper; + + +namespace BlueTube.Viewer +{ + public partial class ViewWindow : UserControl, IScraperServiceCallback, IView + { + #region Fields + + private int widthLeftRight; + private ScrapedVideo currentRequestedVideo; + private ScrapedPage lastPage; + + #endregion + + #region Constrctor + + + public ViewWindow() + { + InitializeComponent(); + } + + #endregion + + #region Events + + + private void buttonSpecHeaderGroupSearchResult_Click(object sender, EventArgs e) + { + // Suspend layout changes until all splitter properties have been updated + kryptonSplitContainerMain.SuspendLayout(); + + // Is the left header group currently expanded? + if (kryptonSplitContainerMain.FixedPanel == FixedPanel.None) + { + // Make the left panel of the splitter fixed in size + kryptonSplitContainerMain.FixedPanel = FixedPanel.Panel1; + kryptonSplitContainerMain.IsSplitterFixed = true; + + // Remember the current height of the header group + widthLeftRight = headerGroupSearchResult.Width; + + // We have not changed the orientation of the header yet, so the width of + // the splitter panel is going to be the height of the collapsed header group + int newWidth = headerGroupSearchResult.PreferredSize.Height; + + // Make the header group fixed just as the new height + kryptonSplitContainerMain.Panel1MinSize = newWidth; + kryptonSplitContainerMain.SplitterDistance = newWidth; + + // Change header to be vertical and button to near edge + headerGroupSearchResult.HeaderPositionPrimary = VisualOrientation.Right; + headerGroupSearchResult.ButtonSpecs[0].Edge = PaletteRelativeEdgeAlign.Near; + } + else + { + // Make the bottom panel not-fixed in size anymore + kryptonSplitContainerMain.FixedPanel = FixedPanel.None; + kryptonSplitContainerMain.IsSplitterFixed = false; + + // Put back the minimise size to the original + kryptonSplitContainerMain.Panel1MinSize = 100; + + // Calculate the correct splitter we want to put back + kryptonSplitContainerMain.SplitterDistance = widthLeftRight; + + // Change header to be horizontal and button to far edge + headerGroupSearchResult.HeaderPositionPrimary = VisualOrientation.Top; + headerGroupSearchResult.ButtonSpecs[0].Edge = PaletteRelativeEdgeAlign.Far; + } + + kryptonSplitContainerMain.ResumeLayout(); + } + + private void buttonSpecHeaderGroupCollapse_Click(object sender, EventArgs e) + { + this.tableLayoutPanelRight.SuspendLayout(); + kryptonHeaderGroup.Height = kryptonHeaderGroup.Height == kryptonHeaderGroup.PreferredSize.Height ? + this.relatedVideoGalleryWidget.MinimumSize.Height + + kryptonHeaderGroup.PreferredSize.Height + : kryptonHeaderGroup.PreferredSize.Height; + this.tableLayoutPanelRight.ResumeLayout(); + } + + private void verticalSingleColumnGalleryWidget1_ItemSelected(object sender, GalleryItemSelectedEventArgs e) + { + LoadVideo(e.Video); + } + + private void relatedVideoGalleryWidget_ItemSelected(object sender, GalleryItemSelectedEventArgs e) + { + LoadVideo(e.Video); + } + + private void buttonSpecHeaderGroupMore_Click(object sender, EventArgs e) + { + var page = GetNextPage(); + if (page!= null) + { + new ScraperService().ScrapVideosAsync(this, new SearchParameters { Url = page.Url }); + } + } + + private void videoPlayerWidget_ToggelFavourite(object sender, ToggleFavouriteEventArgs e) + { + this.verticalSingleColumnGalleryWidget1.RefreshView(); + } + + private void videoPlayerWidget_PlayNext(object sender, PlayEventArgs e) + { + var next = this.verticalSingleColumnGalleryWidget1.GetNextVideo(e.Current); + if (next != null) + LoadVideo(next); + + } + + private void videoPlayerWidget_PlayPrevious(object sender, PlayEventArgs e) + { + var pevious = this.verticalSingleColumnGalleryWidget1.GetPreviousVideo(e.Current); + if (pevious != null) + LoadVideo(pevious); + } + + #endregion + + #region Methods + + public void LoadVideo(ScrapedVideo video) + { + if (this.currentRequestedVideo == video && !video.FullyLoaded) + return; + Program.SetBusy(); + this.videoPlayerWidget.PlayStop(); + + this.currentRequestedVideo = video; + if (video.FullyLoaded) + OnScrapVideoDetailsCompleted(video); + else + new ScraperService().ScrapVideosDetailsAsync(video, this); + + } + + private PagingLink GetNextPage() + { + if (this.lastPage != null && this.lastPage.Links.Count > 0) + { + if (this.lastPage.Links.Count == 1 && !this.lastPage.Links[0].IsSelected) + return this.lastPage.Links[0]; + var index = this.lastPage.Links.IndexOf(this.lastPage.Links.FirstOrDefault(x => x.IsSelected)); + if ( this.lastPage.Links.Count > index + 1) + return this.lastPage.Links[index + 1]; + } + return null; + + } + public void Initialize(ScrapedPage page) + { + LogManager.Log("Initializing view window"); + this.lastPage = page; + this.buttonSpecHeaderGroupMore.Visible = GetNextPage() != null; + this.verticalSingleColumnGalleryWidget1.AddItems(page); + } + + public void OnScrapVideoCompleted(ScrapedPage page) + { + Program.SetIdle(); + this.InvokeEx(() => + { + Initialize(page); + + }); + + } + + public void OnScrapVideoDetailsCompleted(ScrapedVideo video) + { + this.InvokeEx(() => + { + if (this.currentRequestedVideo == video) + { + + var played = this.videoPlayerWidget.PlayStart(video); + + if (played) + { + this.verticalSingleColumnGalleryWidget1.AddItem(video, true); + this.relatedVideoGalleryWidget.ClearItems(); + this.relatedVideoGalleryWidget.AddItems(new ScrapedPage { Videos = video.RelatedVideos }); + } + else + { + this.currentRequestedVideo = null; + } + } + Program.SetIdle(); + }); + + } + + + public void OnScrapError(Exception ex) + { + Program.SetIdle(); + KryptonMessageBox.Show("An error occurred: " + ex.Message, Constants.AppTitle, MessageBoxButtons.OK, MessageBoxIcon.Warning); + + } + + public void ActivateView() + { + this.videoPlayerWidget.ActivateView(); + this.verticalSingleColumnGalleryWidget1.RefreshView(); + this.BringToFront(); + + } + + public void DeactivateView() + { + this.videoPlayerWidget.DeactivateView(); + } + + public void TriggerSearch(SearchParameters param) + { + Program.SetBusy(); + this.verticalSingleColumnGalleryWidget1.ClearItems(); + new ScraperService().ScrapVideosAsync(this, param); + } + + + #endregion + + + + + } +} diff --git a/MovieFinder.Viewer/Views/ViewWindow.resx b/MovieFinder.Viewer/Views/ViewWindow.resx new file mode 100644 index 0000000000000000000000000000000000000000..5ea0895e324fa7a86681adc56938bad2f2367ba0 --- /dev/null +++ b/MovieFinder.Viewer/Views/ViewWindow.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/MovieFinder.Viewer/app.config b/MovieFinder.Viewer/app.config new file mode 100644 index 0000000000000000000000000000000000000000..98eb247e79187696484f642f06e01f2e1947cf30 --- /dev/null +++ b/MovieFinder.Viewer/app.config @@ -0,0 +1,14 @@ + + + + + + + + + + + + diff --git a/MovieFinder.Viewer/packages.config b/MovieFinder.Viewer/packages.config new file mode 100644 index 0000000000000000000000000000000000000000..142409d6ca060bfd59575d78d3c90e655ad23af2 --- /dev/null +++ b/MovieFinder.Viewer/packages.config @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/MovieFinder.Web/App_Data/MovieTube.zip b/MovieFinder.Web/App_Data/MovieTube.zip new file mode 100644 index 0000000000000000000000000000000000000000..2f8cade41b31721d2e9a1ed7c473925e478e9068 --- /dev/null +++ b/MovieFinder.Web/App_Data/MovieTube.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c3cbf5067a8658918a27298d6394be61581314e01a5f8763d11da5fe5f2519e7 +size 440779 diff --git a/MovieFinder.Web/App_Data/install.txt b/MovieFinder.Web/App_Data/install.txt new file mode 100644 index 0000000000000000000000000000000000000000..5f282702bb03ef11d7184d19c80927b47f919764 --- /dev/null +++ b/MovieFinder.Web/App_Data/install.txt @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/MovieFinder.Web/App_Start/FilterConfig.cs b/MovieFinder.Web/App_Start/FilterConfig.cs new file mode 100644 index 0000000000000000000000000000000000000000..b323afe455698bf669e52632898656337faff6c4 --- /dev/null +++ b/MovieFinder.Web/App_Start/FilterConfig.cs @@ -0,0 +1,13 @@ +using System.Web; +using System.Web.Mvc; + +namespace MovieFinder.Web +{ + public class FilterConfig + { + public static void RegisterGlobalFilters(GlobalFilterCollection filters) + { + filters.Add(new HandleErrorAttribute()); + } + } +} \ No newline at end of file diff --git a/MovieFinder.Web/App_Start/RouteConfig.cs b/MovieFinder.Web/App_Start/RouteConfig.cs new file mode 100644 index 0000000000000000000000000000000000000000..bcf71731a7fb89fd81ae546d0e1c4606f5eb847d --- /dev/null +++ b/MovieFinder.Web/App_Start/RouteConfig.cs @@ -0,0 +1,23 @@ + using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.Mvc; +using System.Web.Routing; + +namespace MovieFinder.Web +{ + public class RouteConfig + { + public static void RegisterRoutes(RouteCollection routes) + { + routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); + + routes.MapRoute( + name: "Default", + url: "{controller}/{action}/{id}", + defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } + ); + } + } +} \ No newline at end of file diff --git a/MovieFinder.Web/App_Start/WebApiConfig.cs b/MovieFinder.Web/App_Start/WebApiConfig.cs new file mode 100644 index 0000000000000000000000000000000000000000..6fa2fef7496e673f440671a9c6899f83a9990dc4 --- /dev/null +++ b/MovieFinder.Web/App_Start/WebApiConfig.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web.Http; + +namespace MovieFinder.Web +{ + public static class WebApiConfig + { + public static void Register(HttpConfiguration config) + { + //config.Routes.MapHttpRoute( + // name: "DefaultApi", + // routeTemplate: "api/{controller}/{id}", + // defaults: new { id = RouteParameter.Optional } + //); + } + } +} diff --git a/MovieFinder.Web/Content/bin/MovieFinder.Client.exe b/MovieFinder.Web/Content/bin/MovieFinder.Client.exe new file mode 100644 index 0000000000000000000000000000000000000000..f9bca5e14bc69b209e56260e46d0c849624d922b --- /dev/null +++ b/MovieFinder.Web/Content/bin/MovieFinder.Client.exe @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2cdf9a1ebf5b6955e395593eb62a19d2412e343e667766c36004cc8e254e7069 +size 269824 diff --git a/MovieFinder.Web/Content/bin/MovieFinder.UpService.exe b/MovieFinder.Web/Content/bin/MovieFinder.UpService.exe new file mode 100644 index 0000000000000000000000000000000000000000..1ee8860713079b403617b82e2dbfd7f6c59da61d Binary files /dev/null and b/MovieFinder.Web/Content/bin/MovieFinder.UpService.exe differ diff --git a/MovieFinder.Web/Content/css/Eq7wALxAWtsfw2qbWlA1PxLPQhMKVmDrcdQXNRIn1lo.woff b/MovieFinder.Web/Content/css/Eq7wALxAWtsfw2qbWlA1PxLPQhMKVmDrcdQXNRIn1lo.woff new file mode 100644 index 0000000000000000000000000000000000000000..067ba3c910d4aab1954e1d5db287062f2cc759d2 Binary files /dev/null and b/MovieFinder.Web/Content/css/Eq7wALxAWtsfw2qbWlA1PxLPQhMKVmDrcdQXNRIn1lo.woff differ diff --git a/MovieFinder.Web/Content/css/HneVUreQiTIycRF0RRhYCSG38VOLuGRyzOUUDXpI0yy.eot b/MovieFinder.Web/Content/css/HneVUreQiTIycRF0RRhYCSG38VOLuGRyzOUUDXpI0yy.eot new file mode 100644 index 0000000000000000000000000000000000000000..dd6fd2cb3af3a5502a8287fb270c294608a5915d Binary files /dev/null and b/MovieFinder.Web/Content/css/HneVUreQiTIycRF0RRhYCSG38VOLuGRyzOUUDXpI0yy.eot differ diff --git a/MovieFinder.Web/Content/css/KdcnxcdkykTdkBAp7tq0zmpvg1tHU5Wup4KbCJcRmOM.ttf b/MovieFinder.Web/Content/css/KdcnxcdkykTdkBAp7tq0zmpvg1tHU5Wup4KbCJcRmOM.ttf new file mode 100644 index 0000000000000000000000000000000000000000..05951e7b36b2352b1a69e2052d08fbffd77d5151 Binary files /dev/null and b/MovieFinder.Web/Content/css/KdcnxcdkykTdkBAp7tq0zmpvg1tHU5Wup4KbCJcRmOM.ttf differ diff --git a/MovieFinder.Web/Content/css/KyH7BRohMXDyEE1lvRMbBW845WmOJ3liv9Jj2KX5bR.woff b/MovieFinder.Web/Content/css/KyH7BRohMXDyEE1lvRMbBW845WmOJ3liv9Jj2KX5bR.woff new file mode 100644 index 0000000000000000000000000000000000000000..cd86852d0a0c1930dab144b687318df762aa7ad3 Binary files /dev/null and b/MovieFinder.Web/Content/css/KyH7BRohMXDyEE1lvRMbBW845WmOJ3liv9Jj2KX5bR.woff differ diff --git a/MovieFinder.Web/Content/css/bootstrap-responsive.css b/MovieFinder.Web/Content/css/bootstrap-responsive.css new file mode 100644 index 0000000000000000000000000000000000000000..c0bba15b36ec511ed667d80f98bfd06c787ba037 --- /dev/null +++ b/MovieFinder.Web/Content/css/bootstrap-responsive.css @@ -0,0 +1,1109 @@ +/*! + * Bootstrap Responsive v2.3.2 + * + * Copyright 2013 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world by @mdo and @fat. + */ + +.clearfix { + *zoom: 1; +} + +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +.clearfix:after { + clear: both; +} + +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.input-block-level { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +@-ms-viewport { + width: device-width; +} + +.hidden { + display: none; + visibility: hidden; +} + +.visible-phone { + display: none !important; +} + +.visible-tablet { + display: none !important; +} + +.hidden-desktop { + display: none !important; +} + +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + .hidden-desktop { + display: inherit !important; + } + .visible-desktop { + display: none !important ; + } + .visible-tablet { + display: inherit !important; + } + .hidden-tablet { + display: none !important; + } +} + +@media (max-width: 767px) { + .hidden-desktop { + display: inherit !important; + } + .visible-desktop { + display: none !important; + } + .visible-phone { + display: inherit !important; + } + .hidden-phone { + display: none !important; + } +} + +.visible-print { + display: none !important; +} + +@media print { + .visible-print { + display: inherit !important; + } + .hidden-print { + display: none !important; + } +} + +@media (min-width: 1200px) { + .row { + margin-left: -30px; + *zoom: 1; + } + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + .row:after { + clear: both; + } + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 30px; + } + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 1170px; + } + .span12 { + width: 1170px; + } + .span11 { + width: 1070px; + } + .span10 { + width: 970px; + } + .span9 { + width: 870px; + } + .span8 { + width: 770px; + } + .span7 { + width: 670px; + } + .span6 { + width: 570px; + } + .span5 { + width: 470px; + } + .span4 { + width: 370px; + } + .span3 { + width: 270px; + } + .span2 { + width: 170px; + } + .span1 { + width: 70px; + } + .offset12 { + margin-left: 1230px; + } + .offset11 { + margin-left: 1130px; + } + .offset10 { + margin-left: 1030px; + } + .offset9 { + margin-left: 930px; + } + .offset8 { + margin-left: 830px; + } + .offset7 { + margin-left: 730px; + } + .offset6 { + margin-left: 630px; + } + .offset5 { + margin-left: 530px; + } + .offset4 { + margin-left: 430px; + } + .offset3 { + margin-left: 330px; + } + .offset2 { + margin-left: 230px; + } + .offset1 { + margin-left: 130px; + } + .row-fluid { + width: 100%; + *zoom: 1; + } + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + .row-fluid:after { + clear: both; + } + .row-fluid [class*="span"] { + display: block; + float: left; + width: 100%; + min-height: 30px; + margin-left: 2.564102564102564%; + *margin-left: 2.5109110747408616%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.564102564102564%; + } + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + .row-fluid .span11 { + width: 91.45299145299145%; + *width: 91.39979996362975%; + } + .row-fluid .span10 { + width: 82.90598290598291%; + *width: 82.8527914166212%; + } + .row-fluid .span9 { + width: 74.35897435897436%; + *width: 74.30578286961266%; + } + .row-fluid .span8 { + width: 65.81196581196582%; + *width: 65.75877432260411%; + } + .row-fluid .span7 { + width: 57.26495726495726%; + *width: 57.21176577559556%; + } + .row-fluid .span6 { + width: 48.717948717948715%; + *width: 48.664757228587014%; + } + .row-fluid .span5 { + width: 40.17094017094017%; + *width: 40.11774868157847%; + } + .row-fluid .span4 { + width: 31.623931623931625%; + *width: 31.570740134569924%; + } + .row-fluid .span3 { + width: 23.076923076923077%; + *width: 23.023731587561375%; + } + .row-fluid .span2 { + width: 14.52991452991453%; + *width: 14.476723040552828%; + } + .row-fluid .span1 { + width: 5.982905982905983%; + *width: 5.929714493544281%; + } + .row-fluid .offset12 { + margin-left: 105.12820512820512%; + *margin-left: 105.02182214948171%; + } + .row-fluid .offset12:first-child { + margin-left: 102.56410256410257%; + *margin-left: 102.45771958537915%; + } + .row-fluid .offset11 { + margin-left: 96.58119658119658%; + *margin-left: 96.47481360247316%; + } + .row-fluid .offset11:first-child { + margin-left: 94.01709401709402%; + *margin-left: 93.91071103837061%; + } + .row-fluid .offset10 { + margin-left: 88.03418803418803%; + *margin-left: 87.92780505546462%; + } + .row-fluid .offset10:first-child { + margin-left: 85.47008547008548%; + *margin-left: 85.36370249136206%; + } + .row-fluid .offset9 { + margin-left: 79.48717948717949%; + *margin-left: 79.38079650845607%; + } + .row-fluid .offset9:first-child { + margin-left: 76.92307692307693%; + *margin-left: 76.81669394435352%; + } + .row-fluid .offset8 { + margin-left: 70.94017094017094%; + *margin-left: 70.83378796144753%; + } + .row-fluid .offset8:first-child { + margin-left: 68.37606837606839%; + *margin-left: 68.26968539734497%; + } + .row-fluid .offset7 { + margin-left: 62.393162393162385%; + *margin-left: 62.28677941443899%; + } + .row-fluid .offset7:first-child { + margin-left: 59.82905982905982%; + *margin-left: 59.72267685033642%; + } + .row-fluid .offset6 { + margin-left: 53.84615384615384%; + *margin-left: 53.739770867430444%; + } + .row-fluid .offset6:first-child { + margin-left: 51.28205128205128%; + *margin-left: 51.175668303327875%; + } + .row-fluid .offset5 { + margin-left: 45.299145299145295%; + *margin-left: 45.1927623204219%; + } + .row-fluid .offset5:first-child { + margin-left: 42.73504273504273%; + *margin-left: 42.62865975631933%; + } + .row-fluid .offset4 { + margin-left: 36.75213675213675%; + *margin-left: 36.645753773413354%; + } + .row-fluid .offset4:first-child { + margin-left: 34.18803418803419%; + *margin-left: 34.081651209310785%; + } + .row-fluid .offset3 { + margin-left: 28.205128205128204%; + *margin-left: 28.0987452264048%; + } + .row-fluid .offset3:first-child { + margin-left: 25.641025641025642%; + *margin-left: 25.53464266230224%; + } + .row-fluid .offset2 { + margin-left: 19.65811965811966%; + *margin-left: 19.551736679396257%; + } + .row-fluid .offset2:first-child { + margin-left: 17.094017094017094%; + *margin-left: 16.98763411529369%; + } + .row-fluid .offset1 { + margin-left: 11.11111111111111%; + *margin-left: 11.004728132387708%; + } + .row-fluid .offset1:first-child { + margin-left: 8.547008547008547%; + *margin-left: 8.440625568285142%; + } + input, + textarea, + .uneditable-input { + margin-left: 0; + } + .controls-row [class*="span"] + [class*="span"] { + margin-left: 30px; + } + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 1156px; + } + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 1056px; + } + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 956px; + } + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 856px; + } + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 756px; + } + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 656px; + } + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 556px; + } + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 456px; + } + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 356px; + } + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 256px; + } + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 156px; + } + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 56px; + } + .thumbnails { + margin-left: -30px; + } + .thumbnails > li { + margin-left: 30px; + } + .row-fluid .thumbnails { + margin-left: 0; + } +} + +@media (min-width: 768px) and (max-width: 979px) { + .row { + margin-left: -20px; + *zoom: 1; + } + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + .row:after { + clear: both; + } + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + .span12 { + width: 724px; + } + .span11 { + width: 662px; + } + .span10 { + width: 600px; + } + .span9 { + width: 538px; + } + .span8 { + width: 476px; + } + .span7 { + width: 414px; + } + .span6 { + width: 352px; + } + .span5 { + width: 290px; + } + .span4 { + width: 228px; + } + .span3 { + width: 166px; + } + .span2 { + width: 104px; + } + .span1 { + width: 42px; + } + .offset12 { + margin-left: 764px; + } + .offset11 { + margin-left: 702px; + } + .offset10 { + margin-left: 640px; + } + .offset9 { + margin-left: 578px; + } + .offset8 { + margin-left: 516px; + } + .offset7 { + margin-left: 454px; + } + .offset6 { + margin-left: 392px; + } + .offset5 { + margin-left: 330px; + } + .offset4 { + margin-left: 268px; + } + .offset3 { + margin-left: 206px; + } + .offset2 { + margin-left: 144px; + } + .offset1 { + margin-left: 82px; + } + .row-fluid { + width: 100%; + *zoom: 1; + } + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + .row-fluid:after { + clear: both; + } + .row-fluid [class*="span"] { + display: block; + float: left; + width: 100%; + min-height: 30px; + margin-left: 2.7624309392265194%; + *margin-left: 2.709239449864817%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + input, + textarea, + .uneditable-input { + margin-left: 0; + } + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} + +@media (max-width: 767px) { + body { + padding-right: 20px; + padding-left: 20px; + } + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + .container-fluid { + padding: 0; + } + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + .dl-horizontal dd { + margin-left: 0; + } + .container { + width: auto; + } + .row-fluid { + width: 100%; + } + .row, + .thumbnails { + margin-left: 0; + } + .thumbnails > li { + float: none; + margin-left: 0; + } + [class*="span"], + .uneditable-input[class*="span"], + .row-fluid [class*="span"] { + display: block; + float: none; + width: 100%; + margin-left: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + .input-large, + .input-xlarge, + .input-xxlarge, + input[class*="span"], + select[class*="span"], + textarea[class*="span"], + .uneditable-input { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + .modal.fade { + top: -100px; + } + .modal.fade.in { + top: 20px; + } +} + +@media (max-width: 480px) { + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + .page-header h1 small { + display: block; + line-height: 20px; + } + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + .form-horizontal .controls { + margin-left: 0; + } + .form-horizontal .control-list { + padding-top: 0; + } + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + .media-object { + margin-right: 0; + margin-left: 0; + } + .modal { + top: 10px; + right: 10px; + left: 10px; + } + .modal-header .close { + padding: 10px; + margin: -10px; + } + .carousel-caption { + position: static; + } +} + +@media (max-width: 979px) { + body { + padding-top: 0; + } + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + .navbar-fixed-top { + margin-bottom: 20px; + } + .navbar-fixed-bottom { + margin-top: 20px; + } + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + .navbar .container { + width: auto; + padding: 0; + } + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + .nav-collapse { + clear: both; + } + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + .nav-collapse .nav > li { + float: none; + } + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + .nav-collapse .nav > .divider-vertical { + display: none; + } + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + .nav-collapse .nav > li > a, + .nav-collapse .dropdown-menu a { + padding: 9px 15px; + font-weight: bold; + color: #777777; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + } + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + .nav-collapse .nav > li > a:hover, + .nav-collapse .nav > li > a:focus, + .nav-collapse .dropdown-menu a:hover, + .nav-collapse .dropdown-menu a:focus { + background-color: #f2f2f2; + } + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + .navbar-inverse .nav-collapse .nav > li > a:hover, + .navbar-inverse .nav-collapse .nav > li > a:focus, + .navbar-inverse .nav-collapse .dropdown-menu a:hover, + .navbar-inverse .nav-collapse .dropdown-menu a:focus { + background-color: #111111; + } + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + .nav-collapse .dropdown-menu { + position: static; + top: auto; + left: auto; + display: none; + float: none; + max-width: none; + padding: 0; + margin: 0 15px; + background-color: transparent; + border: none; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + } + .nav-collapse .open > .dropdown-menu { + display: block; + } + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + .nav-collapse .dropdown-menu .divider { + display: none; + } + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + .nav-collapse .navbar-form, + .nav-collapse .navbar-search { + float: none; + padding: 10px 15px; + margin: 10px 0; + border-top: 1px solid #f2f2f2; + border-bottom: 1px solid #f2f2f2; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + } + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + .navbar .btn-navbar { + display: block; + } + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} + +@media (min-width: 980px) { + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} diff --git a/MovieFinder.Web/Content/css/bootstrap-responsive.min.css b/MovieFinder.Web/Content/css/bootstrap-responsive.min.css new file mode 100644 index 0000000000000000000000000000000000000000..96a435be907ed88c540fd2f512cf01316a7157c9 --- /dev/null +++ b/MovieFinder.Web/Content/css/bootstrap-responsive.min.css @@ -0,0 +1,9 @@ +/*! + * Bootstrap Responsive v2.3.2 + * + * Copyright 2013 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@-ms-viewport{width:device-width}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:inherit!important}.hidden-print{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade{top:-100px}.modal.fade.in{top:20px}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.media .pull-left,.media .pull-right{display:block;float:none;margin-bottom:10px}.media-object{margin-right:0;margin-left:0}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .nav>li>a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .dropdown-menu a:focus{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .nav>li>a:focus,.navbar-inverse .nav-collapse .dropdown-menu a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:focus{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:none;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .open>.dropdown-menu{display:block}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}} diff --git a/MovieFinder.Web/Content/css/bootstrap.css b/MovieFinder.Web/Content/css/bootstrap.css new file mode 100644 index 0000000000000000000000000000000000000000..5b7fe7e8562e97d4e959322617ed1feb45b2fd6d --- /dev/null +++ b/MovieFinder.Web/Content/css/bootstrap.css @@ -0,0 +1,6167 @@ +/*! + * Bootstrap v2.3.2 + * + * Copyright 2013 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world by @mdo and @fat. + */ + +.clearfix { + *zoom: 1; +} + +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +.clearfix:after { + clear: both; +} + +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.input-block-level { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +nav, +section { + display: block; +} + +audio, +canvas, +video { + display: inline-block; + *display: inline; + *zoom: 1; +} + +audio:not([controls]) { + display: none; +} + +html { + font-size: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +a:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +a:hover, +a:active { + outline: 0; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +img { + width: auto\9; + height: auto; + max-width: 100%; + vertical-align: middle; + border: 0; + -ms-interpolation-mode: bicubic; +} + +#map_canvas img, +.google-maps img { + max-width: none; +} + +button, +input, +select, +textarea { + margin: 0; + font-size: 100%; + vertical-align: middle; +} + +button, +input { + *overflow: visible; + line-height: normal; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; +} + +label, +select, +button, +input[type="button"], +input[type="reset"], +input[type="submit"], +input[type="radio"], +input[type="checkbox"] { + cursor: pointer; +} + +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} + +input[type="search"]::-webkit-search-decoration, +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +textarea { + overflow: auto; + vertical-align: top; +} + +@media print { + * { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + .ir a:after, + a[href^="javascript:"]:after, + a[href^="#"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + @page { + margin: 0.5cm; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } +} + +body { + margin: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 20px; + color: #333333; + background-color: #ffffff; +} + +a { + color: #0088cc; + text-decoration: none; +} + +a:hover, +a:focus { + color: #005580; + text-decoration: underline; +} + +.img-rounded { + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.img-polaroid { + padding: 4px; + background-color: #fff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} + +.img-circle { + -webkit-border-radius: 500px; + -moz-border-radius: 500px; + border-radius: 500px; +} + +.row { + margin-left: -20px; + *zoom: 1; +} + +.row:before, +.row:after { + display: table; + line-height: 0; + content: ""; +} + +.row:after { + clear: both; +} + +[class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; +} + +.container, +.navbar-static-top .container, +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { + width: 940px; +} + +.span12 { + width: 940px; +} + +.span11 { + width: 860px; +} + +.span10 { + width: 780px; +} + +.span9 { + width: 700px; +} + +.span8 { + width: 620px; +} + +.span7 { + width: 540px; +} + +.span6 { + width: 460px; +} + +.span5 { + width: 380px; +} + +.span4 { + width: 300px; +} + +.span3 { + width: 220px; +} + +.span2 { + width: 140px; +} + +.span1 { + width: 60px; +} + +.offset12 { + margin-left: 980px; +} + +.offset11 { + margin-left: 900px; +} + +.offset10 { + margin-left: 820px; +} + +.offset9 { + margin-left: 740px; +} + +.offset8 { + margin-left: 660px; +} + +.offset7 { + margin-left: 580px; +} + +.offset6 { + margin-left: 500px; +} + +.offset5 { + margin-left: 420px; +} + +.offset4 { + margin-left: 340px; +} + +.offset3 { + margin-left: 260px; +} + +.offset2 { + margin-left: 180px; +} + +.offset1 { + margin-left: 100px; +} + +.row-fluid { + width: 100%; + *zoom: 1; +} + +.row-fluid:before, +.row-fluid:after { + display: table; + line-height: 0; + content: ""; +} + +.row-fluid:after { + clear: both; +} + +.row-fluid [class*="span"] { + display: block; + float: left; + width: 100%; + min-height: 30px; + margin-left: 2.127659574468085%; + *margin-left: 2.074468085106383%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.row-fluid [class*="span"]:first-child { + margin-left: 0; +} + +.row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.127659574468085%; +} + +.row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; +} + +.row-fluid .span11 { + width: 91.48936170212765%; + *width: 91.43617021276594%; +} + +.row-fluid .span10 { + width: 82.97872340425532%; + *width: 82.92553191489361%; +} + +.row-fluid .span9 { + width: 74.46808510638297%; + *width: 74.41489361702126%; +} + +.row-fluid .span8 { + width: 65.95744680851064%; + *width: 65.90425531914893%; +} + +.row-fluid .span7 { + width: 57.44680851063829%; + *width: 57.39361702127659%; +} + +.row-fluid .span6 { + width: 48.93617021276595%; + *width: 48.88297872340425%; +} + +.row-fluid .span5 { + width: 40.42553191489362%; + *width: 40.37234042553192%; +} + +.row-fluid .span4 { + width: 31.914893617021278%; + *width: 31.861702127659576%; +} + +.row-fluid .span3 { + width: 23.404255319148934%; + *width: 23.351063829787233%; +} + +.row-fluid .span2 { + width: 14.893617021276595%; + *width: 14.840425531914894%; +} + +.row-fluid .span1 { + width: 6.382978723404255%; + *width: 6.329787234042553%; +} + +.row-fluid .offset12 { + margin-left: 104.25531914893617%; + *margin-left: 104.14893617021275%; +} + +.row-fluid .offset12:first-child { + margin-left: 102.12765957446808%; + *margin-left: 102.02127659574467%; +} + +.row-fluid .offset11 { + margin-left: 95.74468085106382%; + *margin-left: 95.6382978723404%; +} + +.row-fluid .offset11:first-child { + margin-left: 93.61702127659574%; + *margin-left: 93.51063829787232%; +} + +.row-fluid .offset10 { + margin-left: 87.23404255319149%; + *margin-left: 87.12765957446807%; +} + +.row-fluid .offset10:first-child { + margin-left: 85.1063829787234%; + *margin-left: 84.99999999999999%; +} + +.row-fluid .offset9 { + margin-left: 78.72340425531914%; + *margin-left: 78.61702127659572%; +} + +.row-fluid .offset9:first-child { + margin-left: 76.59574468085106%; + *margin-left: 76.48936170212764%; +} + +.row-fluid .offset8 { + margin-left: 70.2127659574468%; + *margin-left: 70.10638297872339%; +} + +.row-fluid .offset8:first-child { + margin-left: 68.08510638297872%; + *margin-left: 67.9787234042553%; +} + +.row-fluid .offset7 { + margin-left: 61.70212765957446%; + *margin-left: 61.59574468085106%; +} + +.row-fluid .offset7:first-child { + margin-left: 59.574468085106375%; + *margin-left: 59.46808510638297%; +} + +.row-fluid .offset6 { + margin-left: 53.191489361702125%; + *margin-left: 53.085106382978715%; +} + +.row-fluid .offset6:first-child { + margin-left: 51.063829787234035%; + *margin-left: 50.95744680851063%; +} + +.row-fluid .offset5 { + margin-left: 44.68085106382979%; + *margin-left: 44.57446808510638%; +} + +.row-fluid .offset5:first-child { + margin-left: 42.5531914893617%; + *margin-left: 42.4468085106383%; +} + +.row-fluid .offset4 { + margin-left: 36.170212765957444%; + *margin-left: 36.06382978723405%; +} + +.row-fluid .offset4:first-child { + margin-left: 34.04255319148936%; + *margin-left: 33.93617021276596%; +} + +.row-fluid .offset3 { + margin-left: 27.659574468085104%; + *margin-left: 27.5531914893617%; +} + +.row-fluid .offset3:first-child { + margin-left: 25.53191489361702%; + *margin-left: 25.425531914893618%; +} + +.row-fluid .offset2 { + margin-left: 19.148936170212764%; + *margin-left: 19.04255319148936%; +} + +.row-fluid .offset2:first-child { + margin-left: 17.02127659574468%; + *margin-left: 16.914893617021278%; +} + +.row-fluid .offset1 { + margin-left: 10.638297872340425%; + *margin-left: 10.53191489361702%; +} + +.row-fluid .offset1:first-child { + margin-left: 8.51063829787234%; + *margin-left: 8.404255319148938%; +} + +[class*="span"].hide, +.row-fluid [class*="span"].hide { + display: none; +} + +[class*="span"].pull-right, +.row-fluid [class*="span"].pull-right { + float: right; +} + +.container { + margin-right: auto; + margin-left: auto; + *zoom: 1; +} + +.container:before, +.container:after { + display: table; + line-height: 0; + content: ""; +} + +.container:after { + clear: both; +} + +.container-fluid { + padding-right: 20px; + padding-left: 20px; + *zoom: 1; +} + +.container-fluid:before, +.container-fluid:after { + display: table; + line-height: 0; + content: ""; +} + +.container-fluid:after { + clear: both; +} + +p { + margin: 0 0 10px; +} + +.lead { + margin-bottom: 20px; + font-size: 21px; + font-weight: 200; + line-height: 30px; +} + +small { + font-size: 85%; +} + +strong { + font-weight: bold; +} + +em { + font-style: italic; +} + +cite { + font-style: normal; +} + +.muted { + color: #999999; +} + +a.muted:hover, +a.muted:focus { + color: #808080; +} + +.text-warning { + color: #c09853; +} + +a.text-warning:hover, +a.text-warning:focus { + color: #a47e3c; +} + +.text-error { + color: #b94a48; +} + +a.text-error:hover, +a.text-error:focus { + color: #953b39; +} + +.text-info { + color: #3a87ad; +} + +a.text-info:hover, +a.text-info:focus { + color: #2d6987; +} + +.text-success { + color: #468847; +} + +a.text-success:hover, +a.text-success:focus { + color: #356635; +} + +.text-left { + text-align: left; +} + +.text-right { + text-align: right; +} + +.text-center { + text-align: center; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 10px 0; + font-family: inherit; + font-weight: bold; + line-height: 20px; + color: inherit; + text-rendering: optimizelegibility; +} + +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small { + font-weight: normal; + line-height: 1; + color: #999999; +} + +h1, +h2, +h3 { + line-height: 40px; +} + +h1 { + font-size: 38.5px; +} + +h2 { + font-size: 31.5px; +} + +h3 { + font-size: 24.5px; +} + +h4 { + font-size: 17.5px; +} + +h5 { + font-size: 14px; +} + +h6 { + font-size: 11.9px; +} + +h1 small { + font-size: 24.5px; +} + +h2 small { + font-size: 17.5px; +} + +h3 small { + font-size: 14px; +} + +h4 small { + font-size: 14px; +} + +.page-header { + padding-bottom: 9px; + margin: 20px 0 30px; + border-bottom: 1px solid #eeeeee; +} + +ul, +ol { + padding: 0; + margin: 0 0 10px 25px; +} + +ul ul, +ul ol, +ol ol, +ol ul { + margin-bottom: 0; +} + +li { + line-height: 20px; +} + +ul.unstyled, +ol.unstyled { + margin-left: 0; + list-style: none; +} + +ul.inline, +ol.inline { + margin-left: 0; + list-style: none; +} + +ul.inline > li, +ol.inline > li { + display: inline-block; + *display: inline; + padding-right: 5px; + padding-left: 5px; + *zoom: 1; +} + +dl { + margin-bottom: 20px; +} + +dt, +dd { + line-height: 20px; +} + +dt { + font-weight: bold; +} + +dd { + margin-left: 10px; +} + +.dl-horizontal { + *zoom: 1; +} + +.dl-horizontal:before, +.dl-horizontal:after { + display: table; + line-height: 0; + content: ""; +} + +.dl-horizontal:after { + clear: both; +} + +.dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; +} + +.dl-horizontal dd { + margin-left: 180px; +} + +hr { + margin: 20px 0; + border: 0; + border-top: 1px solid #eeeeee; + border-bottom: 1px solid #ffffff; +} + +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #999999; +} + +abbr.initialism { + font-size: 90%; + text-transform: uppercase; +} + +blockquote { + padding: 0 0 0 15px; + margin: 0 0 20px; + border-left: 5px solid #eeeeee; +} + +blockquote p { + margin-bottom: 0; + font-size: 17.5px; + font-weight: 300; + line-height: 1.25; +} + +blockquote small { + display: block; + line-height: 20px; + color: #999999; +} + +blockquote small:before { + content: '\2014 \00A0'; +} + +blockquote.pull-right { + float: right; + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; +} + +blockquote.pull-right p, +blockquote.pull-right small { + text-align: right; +} + +blockquote.pull-right small:before { + content: ''; +} + +blockquote.pull-right small:after { + content: '\00A0 \2014'; +} + +q:before, +q:after, +blockquote:before, +blockquote:after { + content: ""; +} + +address { + display: block; + margin-bottom: 20px; + font-style: normal; + line-height: 20px; +} + +code, +pre { + padding: 0 3px 2px; + font-family: Monaco, Menlo, Consolas, "Courier New", monospace; + font-size: 12px; + color: #333333; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +code { + padding: 2px 4px; + color: #d14; + white-space: nowrap; + background-color: #f7f7f9; + border: 1px solid #e1e1e8; +} + +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 20px; + word-break: break-all; + word-wrap: break-word; + white-space: pre; + white-space: pre-wrap; + background-color: #f5f5f5; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +pre.prettyprint { + margin-bottom: 20px; +} + +pre code { + padding: 0; + color: inherit; + white-space: pre; + white-space: pre-wrap; + background-color: transparent; + border: 0; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +form { + margin: 0 0 20px; +} + +fieldset { + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: 40px; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} + +legend small { + font-size: 15px; + color: #999999; +} + +label, +input, +button, +select, +textarea { + font-size: 14px; + font-weight: normal; + line-height: 20px; +} + +input, +button, +select, +textarea { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +label { + display: block; + margin-bottom: 5px; +} + +select, +textarea, +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"], +.uneditable-input { + display: inline-block; + height: 20px; + padding: 4px 6px; + margin-bottom: 10px; + font-size: 14px; + line-height: 20px; + color: #555555; + vertical-align: middle; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +input, +textarea, +.uneditable-input { + width: 206px; +} + +textarea { + height: auto; +} + +textarea, +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"], +.uneditable-input { + background-color: #ffffff; + border: 1px solid #cccccc; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; + -moz-transition: border linear 0.2s, box-shadow linear 0.2s; + -o-transition: border linear 0.2s, box-shadow linear 0.2s; + transition: border linear 0.2s, box-shadow linear 0.2s; +} + +textarea:focus, +input[type="text"]:focus, +input[type="password"]:focus, +input[type="datetime"]:focus, +input[type="datetime-local"]:focus, +input[type="date"]:focus, +input[type="month"]:focus, +input[type="time"]:focus, +input[type="week"]:focus, +input[type="number"]:focus, +input[type="email"]:focus, +input[type="url"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="color"]:focus, +.uneditable-input:focus { + border-color: rgba(82, 168, 236, 0.8); + outline: 0; + outline: thin dotted \9; + /* IE6-9 */ + + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); +} + +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + *margin-top: 0; + line-height: normal; +} + +input[type="file"], +input[type="image"], +input[type="submit"], +input[type="reset"], +input[type="button"], +input[type="radio"], +input[type="checkbox"] { + width: auto; +} + +select, +input[type="file"] { + height: 30px; + /* In IE7, the height of the select element cannot be changed by height, only font-size */ + + *margin-top: 4px; + /* For IE7, add top margin to align select with labels */ + + line-height: 30px; +} + +select { + width: 220px; + background-color: #ffffff; + border: 1px solid #cccccc; +} + +select[multiple], +select[size] { + height: auto; +} + +select:focus, +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.uneditable-input, +.uneditable-textarea { + color: #999999; + cursor: not-allowed; + background-color: #fcfcfc; + border-color: #cccccc; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); +} + +.uneditable-input { + overflow: hidden; + white-space: nowrap; +} + +.uneditable-textarea { + width: auto; + height: auto; +} + +input:-moz-placeholder, +textarea:-moz-placeholder { + color: #999999; +} + +input:-ms-input-placeholder, +textarea:-ms-input-placeholder { + color: #999999; +} + +input::-webkit-input-placeholder, +textarea::-webkit-input-placeholder { + color: #999999; +} + +.radio, +.checkbox { + min-height: 20px; + padding-left: 20px; +} + +.radio input[type="radio"], +.checkbox input[type="checkbox"] { + float: left; + margin-left: -20px; +} + +.controls > .radio:first-child, +.controls > .checkbox:first-child { + padding-top: 5px; +} + +.radio.inline, +.checkbox.inline { + display: inline-block; + padding-top: 5px; + margin-bottom: 0; + vertical-align: middle; +} + +.radio.inline + .radio.inline, +.checkbox.inline + .checkbox.inline { + margin-left: 10px; +} + +.input-mini { + width: 60px; +} + +.input-small { + width: 90px; +} + +.input-medium { + width: 150px; +} + +.input-large { + width: 210px; +} + +.input-xlarge { + width: 270px; +} + +.input-xxlarge { + width: 530px; +} + +input[class*="span"], +select[class*="span"], +textarea[class*="span"], +.uneditable-input[class*="span"], +.row-fluid input[class*="span"], +.row-fluid select[class*="span"], +.row-fluid textarea[class*="span"], +.row-fluid .uneditable-input[class*="span"] { + float: none; + margin-left: 0; +} + +.input-append input[class*="span"], +.input-append .uneditable-input[class*="span"], +.input-prepend input[class*="span"], +.input-prepend .uneditable-input[class*="span"], +.row-fluid input[class*="span"], +.row-fluid select[class*="span"], +.row-fluid textarea[class*="span"], +.row-fluid .uneditable-input[class*="span"], +.row-fluid .input-prepend [class*="span"], +.row-fluid .input-append [class*="span"] { + display: inline-block; +} + +input, +textarea, +.uneditable-input { + margin-left: 0; +} + +.controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; +} + +input.span12, +textarea.span12, +.uneditable-input.span12 { + width: 926px; +} + +input.span11, +textarea.span11, +.uneditable-input.span11 { + width: 846px; +} + +input.span10, +textarea.span10, +.uneditable-input.span10 { + width: 766px; +} + +input.span9, +textarea.span9, +.uneditable-input.span9 { + width: 686px; +} + +input.span8, +textarea.span8, +.uneditable-input.span8 { + width: 606px; +} + +input.span7, +textarea.span7, +.uneditable-input.span7 { + width: 526px; +} + +input.span6, +textarea.span6, +.uneditable-input.span6 { + width: 446px; +} + +input.span5, +textarea.span5, +.uneditable-input.span5 { + width: 366px; +} + +input.span4, +textarea.span4, +.uneditable-input.span4 { + width: 286px; +} + +input.span3, +textarea.span3, +.uneditable-input.span3 { + width: 206px; +} + +input.span2, +textarea.span2, +.uneditable-input.span2 { + width: 126px; +} + +input.span1, +textarea.span1, +.uneditable-input.span1 { + width: 46px; +} + +.controls-row { + *zoom: 1; +} + +.controls-row:before, +.controls-row:after { + display: table; + line-height: 0; + content: ""; +} + +.controls-row:after { + clear: both; +} + +.controls-row [class*="span"], +.row-fluid .controls-row [class*="span"] { + float: left; +} + +.controls-row .checkbox[class*="span"], +.controls-row .radio[class*="span"] { + padding-top: 5px; +} + +input[disabled], +select[disabled], +textarea[disabled], +input[readonly], +select[readonly], +textarea[readonly] { + cursor: not-allowed; + background-color: #eeeeee; +} + +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"][readonly], +input[type="checkbox"][readonly] { + background-color: transparent; +} + +.control-group.warning .control-label, +.control-group.warning .help-block, +.control-group.warning .help-inline { + color: #c09853; +} + +.control-group.warning .checkbox, +.control-group.warning .radio, +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { + color: #c09853; +} + +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { + border-color: #c09853; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.warning input:focus, +.control-group.warning select:focus, +.control-group.warning textarea:focus { + border-color: #a47e3c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; +} + +.control-group.warning .input-prepend .add-on, +.control-group.warning .input-append .add-on { + color: #c09853; + background-color: #fcf8e3; + border-color: #c09853; +} + +.control-group.error .control-label, +.control-group.error .help-block, +.control-group.error .help-inline { + color: #b94a48; +} + +.control-group.error .checkbox, +.control-group.error .radio, +.control-group.error input, +.control-group.error select, +.control-group.error textarea { + color: #b94a48; +} + +.control-group.error input, +.control-group.error select, +.control-group.error textarea { + border-color: #b94a48; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.error input:focus, +.control-group.error select:focus, +.control-group.error textarea:focus { + border-color: #953b39; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; +} + +.control-group.error .input-prepend .add-on, +.control-group.error .input-append .add-on { + color: #b94a48; + background-color: #f2dede; + border-color: #b94a48; +} + +.control-group.success .control-label, +.control-group.success .help-block, +.control-group.success .help-inline { + color: #468847; +} + +.control-group.success .checkbox, +.control-group.success .radio, +.control-group.success input, +.control-group.success select, +.control-group.success textarea { + color: #468847; +} + +.control-group.success input, +.control-group.success select, +.control-group.success textarea { + border-color: #468847; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.success input:focus, +.control-group.success select:focus, +.control-group.success textarea:focus { + border-color: #356635; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; +} + +.control-group.success .input-prepend .add-on, +.control-group.success .input-append .add-on { + color: #468847; + background-color: #dff0d8; + border-color: #468847; +} + +.control-group.info .control-label, +.control-group.info .help-block, +.control-group.info .help-inline { + color: #3a87ad; +} + +.control-group.info .checkbox, +.control-group.info .radio, +.control-group.info input, +.control-group.info select, +.control-group.info textarea { + color: #3a87ad; +} + +.control-group.info input, +.control-group.info select, +.control-group.info textarea { + border-color: #3a87ad; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.info input:focus, +.control-group.info select:focus, +.control-group.info textarea:focus { + border-color: #2d6987; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; +} + +.control-group.info .input-prepend .add-on, +.control-group.info .input-append .add-on { + color: #3a87ad; + background-color: #d9edf7; + border-color: #3a87ad; +} + +input:focus:invalid, +textarea:focus:invalid, +select:focus:invalid { + color: #b94a48; + border-color: #ee5f5b; +} + +input:focus:invalid:focus, +textarea:focus:invalid:focus, +select:focus:invalid:focus { + border-color: #e9322d; + -webkit-box-shadow: 0 0 6px #f8b9b7; + -moz-box-shadow: 0 0 6px #f8b9b7; + box-shadow: 0 0 6px #f8b9b7; +} + +.form-actions { + padding: 19px 20px 20px; + margin-top: 20px; + margin-bottom: 20px; + background-color: #f5f5f5; + border-top: 1px solid #e5e5e5; + *zoom: 1; +} + +.form-actions:before, +.form-actions:after { + display: table; + line-height: 0; + content: ""; +} + +.form-actions:after { + clear: both; +} + +.help-block, +.help-inline { + color: #595959; +} + +.help-block { + display: block; + margin-bottom: 10px; +} + +.help-inline { + display: inline-block; + *display: inline; + padding-left: 5px; + vertical-align: middle; + *zoom: 1; +} + +.input-append, +.input-prepend { + display: inline-block; + margin-bottom: 10px; + font-size: 0; + white-space: nowrap; + vertical-align: middle; +} + +.input-append input, +.input-prepend input, +.input-append select, +.input-prepend select, +.input-append .uneditable-input, +.input-prepend .uneditable-input, +.input-append .dropdown-menu, +.input-prepend .dropdown-menu, +.input-append .popover, +.input-prepend .popover { + font-size: 14px; +} + +.input-append input, +.input-prepend input, +.input-append select, +.input-prepend select, +.input-append .uneditable-input, +.input-prepend .uneditable-input { + position: relative; + margin-bottom: 0; + *margin-left: 0; + vertical-align: top; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-append input:focus, +.input-prepend input:focus, +.input-append select:focus, +.input-prepend select:focus, +.input-append .uneditable-input:focus, +.input-prepend .uneditable-input:focus { + z-index: 2; +} + +.input-append .add-on, +.input-prepend .add-on { + display: inline-block; + width: auto; + height: 20px; + min-width: 16px; + padding: 4px 5px; + font-size: 14px; + font-weight: normal; + line-height: 20px; + text-align: center; + text-shadow: 0 1px 0 #ffffff; + background-color: #eeeeee; + border: 1px solid #ccc; +} + +.input-append .add-on, +.input-prepend .add-on, +.input-append .btn, +.input-prepend .btn, +.input-append .btn-group > .dropdown-toggle, +.input-prepend .btn-group > .dropdown-toggle { + vertical-align: top; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.input-append .active, +.input-prepend .active { + background-color: #a9dba9; + border-color: #46a546; +} + +.input-prepend .add-on, +.input-prepend .btn { + margin-right: -1px; +} + +.input-prepend .add-on:first-child, +.input-prepend .btn:first-child { + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-append input, +.input-append select, +.input-append .uneditable-input { + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-append input + .btn-group .btn:last-child, +.input-append select + .btn-group .btn:last-child, +.input-append .uneditable-input + .btn-group .btn:last-child { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-append .add-on, +.input-append .btn, +.input-append .btn-group { + margin-left: -1px; +} + +.input-append .add-on:last-child, +.input-append .btn:last-child, +.input-append .btn-group:last-child > .dropdown-toggle { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append input, +.input-prepend.input-append select, +.input-prepend.input-append .uneditable-input { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.input-prepend.input-append input + .btn-group .btn, +.input-prepend.input-append select + .btn-group .btn, +.input-prepend.input-append .uneditable-input + .btn-group .btn { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append .add-on:first-child, +.input-prepend.input-append .btn:first-child { + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-prepend.input-append .add-on:last-child, +.input-prepend.input-append .btn:last-child { + margin-left: -1px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append .btn-group:first-child { + margin-left: 0; +} + +input.search-query { + padding-right: 14px; + padding-right: 4px \9; + padding-left: 14px; + padding-left: 4px \9; + /* IE7-8 doesn't have border-radius, so don't indent the padding */ + + margin-bottom: 0; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +/* Allow for input prepend/append in search forms */ + +.form-search .input-append .search-query, +.form-search .input-prepend .search-query { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.form-search .input-append .search-query { + -webkit-border-radius: 14px 0 0 14px; + -moz-border-radius: 14px 0 0 14px; + border-radius: 14px 0 0 14px; +} + +.form-search .input-append .btn { + -webkit-border-radius: 0 14px 14px 0; + -moz-border-radius: 0 14px 14px 0; + border-radius: 0 14px 14px 0; +} + +.form-search .input-prepend .search-query { + -webkit-border-radius: 0 14px 14px 0; + -moz-border-radius: 0 14px 14px 0; + border-radius: 0 14px 14px 0; +} + +.form-search .input-prepend .btn { + -webkit-border-radius: 14px 0 0 14px; + -moz-border-radius: 14px 0 0 14px; + border-radius: 14px 0 0 14px; +} + +.form-search input, +.form-inline input, +.form-horizontal input, +.form-search textarea, +.form-inline textarea, +.form-horizontal textarea, +.form-search select, +.form-inline select, +.form-horizontal select, +.form-search .help-inline, +.form-inline .help-inline, +.form-horizontal .help-inline, +.form-search .uneditable-input, +.form-inline .uneditable-input, +.form-horizontal .uneditable-input, +.form-search .input-prepend, +.form-inline .input-prepend, +.form-horizontal .input-prepend, +.form-search .input-append, +.form-inline .input-append, +.form-horizontal .input-append { + display: inline-block; + *display: inline; + margin-bottom: 0; + vertical-align: middle; + *zoom: 1; +} + +.form-search .hide, +.form-inline .hide, +.form-horizontal .hide { + display: none; +} + +.form-search label, +.form-inline label, +.form-search .btn-group, +.form-inline .btn-group { + display: inline-block; +} + +.form-search .input-append, +.form-inline .input-append, +.form-search .input-prepend, +.form-inline .input-prepend { + margin-bottom: 0; +} + +.form-search .radio, +.form-search .checkbox, +.form-inline .radio, +.form-inline .checkbox { + padding-left: 0; + margin-bottom: 0; + vertical-align: middle; +} + +.form-search .radio input[type="radio"], +.form-search .checkbox input[type="checkbox"], +.form-inline .radio input[type="radio"], +.form-inline .checkbox input[type="checkbox"] { + float: left; + margin-right: 3px; + margin-left: 0; +} + +.control-group { + margin-bottom: 10px; +} + +legend + .control-group { + margin-top: 20px; + -webkit-margin-top-collapse: separate; +} + +.form-horizontal .control-group { + margin-bottom: 20px; + *zoom: 1; +} + +.form-horizontal .control-group:before, +.form-horizontal .control-group:after { + display: table; + line-height: 0; + content: ""; +} + +.form-horizontal .control-group:after { + clear: both; +} + +.form-horizontal .control-label { + float: left; + width: 160px; + padding-top: 5px; + text-align: right; +} + +.form-horizontal .controls { + *display: inline-block; + *padding-left: 20px; + margin-left: 180px; + *margin-left: 0; +} + +.form-horizontal .controls:first-child { + *padding-left: 180px; +} + +.form-horizontal .help-block { + margin-bottom: 0; +} + +.form-horizontal input + .help-block, +.form-horizontal select + .help-block, +.form-horizontal textarea + .help-block, +.form-horizontal .uneditable-input + .help-block, +.form-horizontal .input-prepend + .help-block, +.form-horizontal .input-append + .help-block { + margin-top: 10px; +} + +.form-horizontal .form-actions { + padding-left: 180px; +} + +table { + max-width: 100%; + background-color: transparent; + border-collapse: collapse; + border-spacing: 0; +} + +.table { + width: 100%; + margin-bottom: 20px; +} + +.table th, +.table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #dddddd; +} + +.table th { + font-weight: bold; +} + +.table thead th { + vertical-align: bottom; +} + +.table caption + thead tr:first-child th, +.table caption + thead tr:first-child td, +.table colgroup + thead tr:first-child th, +.table colgroup + thead tr:first-child td, +.table thead:first-child tr:first-child th, +.table thead:first-child tr:first-child td { + border-top: 0; +} + +.table tbody + tbody { + border-top: 2px solid #dddddd; +} + +.table .table { + background-color: #ffffff; +} + +.table-condensed th, +.table-condensed td { + padding: 4px 5px; +} + +.table-bordered { + border: 1px solid #dddddd; + border-collapse: separate; + *border-collapse: collapse; + border-left: 0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.table-bordered th, +.table-bordered td { + border-left: 1px solid #dddddd; +} + +.table-bordered caption + thead tr:first-child th, +.table-bordered caption + tbody tr:first-child th, +.table-bordered caption + tbody tr:first-child td, +.table-bordered colgroup + thead tr:first-child th, +.table-bordered colgroup + tbody tr:first-child th, +.table-bordered colgroup + tbody tr:first-child td, +.table-bordered thead:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child td { + border-top: 0; +} + +.table-bordered thead:first-child tr:first-child > th:first-child, +.table-bordered tbody:first-child tr:first-child > td:first-child, +.table-bordered tbody:first-child tr:first-child > th:first-child { + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; +} + +.table-bordered thead:first-child tr:first-child > th:last-child, +.table-bordered tbody:first-child tr:first-child > td:last-child, +.table-bordered tbody:first-child tr:first-child > th:last-child { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; +} + +.table-bordered thead:last-child tr:last-child > th:first-child, +.table-bordered tbody:last-child tr:last-child > td:first-child, +.table-bordered tbody:last-child tr:last-child > th:first-child, +.table-bordered tfoot:last-child tr:last-child > td:first-child, +.table-bordered tfoot:last-child tr:last-child > th:first-child { + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; +} + +.table-bordered thead:last-child tr:last-child > th:last-child, +.table-bordered tbody:last-child tr:last-child > td:last-child, +.table-bordered tbody:last-child tr:last-child > th:last-child, +.table-bordered tfoot:last-child tr:last-child > td:last-child, +.table-bordered tfoot:last-child tr:last-child > th:last-child { + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-bottomright: 4px; +} + +.table-bordered tfoot + tbody:last-child tr:last-child td:first-child { + -webkit-border-bottom-left-radius: 0; + border-bottom-left-radius: 0; + -moz-border-radius-bottomleft: 0; +} + +.table-bordered tfoot + tbody:last-child tr:last-child td:last-child { + -webkit-border-bottom-right-radius: 0; + border-bottom-right-radius: 0; + -moz-border-radius-bottomright: 0; +} + +.table-bordered caption + thead tr:first-child th:first-child, +.table-bordered caption + tbody tr:first-child td:first-child, +.table-bordered colgroup + thead tr:first-child th:first-child, +.table-bordered colgroup + tbody tr:first-child td:first-child { + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; +} + +.table-bordered caption + thead tr:first-child th:last-child, +.table-bordered caption + tbody tr:first-child td:last-child, +.table-bordered colgroup + thead tr:first-child th:last-child, +.table-bordered colgroup + tbody tr:first-child td:last-child { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; +} + +.table-striped tbody > tr:nth-child(odd) > td, +.table-striped tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +.table-hover tbody tr:hover > td, +.table-hover tbody tr:hover > th { + background-color: #f5f5f5; +} + +table td[class*="span"], +table th[class*="span"], +.row-fluid table td[class*="span"], +.row-fluid table th[class*="span"] { + display: table-cell; + float: none; + margin-left: 0; +} + +.table td.span1, +.table th.span1 { + float: none; + width: 44px; + margin-left: 0; +} + +.table td.span2, +.table th.span2 { + float: none; + width: 124px; + margin-left: 0; +} + +.table td.span3, +.table th.span3 { + float: none; + width: 204px; + margin-left: 0; +} + +.table td.span4, +.table th.span4 { + float: none; + width: 284px; + margin-left: 0; +} + +.table td.span5, +.table th.span5 { + float: none; + width: 364px; + margin-left: 0; +} + +.table td.span6, +.table th.span6 { + float: none; + width: 444px; + margin-left: 0; +} + +.table td.span7, +.table th.span7 { + float: none; + width: 524px; + margin-left: 0; +} + +.table td.span8, +.table th.span8 { + float: none; + width: 604px; + margin-left: 0; +} + +.table td.span9, +.table th.span9 { + float: none; + width: 684px; + margin-left: 0; +} + +.table td.span10, +.table th.span10 { + float: none; + width: 764px; + margin-left: 0; +} + +.table td.span11, +.table th.span11 { + float: none; + width: 844px; + margin-left: 0; +} + +.table td.span12, +.table th.span12 { + float: none; + width: 924px; + margin-left: 0; +} + +.table tbody tr.success > td { + background-color: #dff0d8; +} + +.table tbody tr.error > td { + background-color: #f2dede; +} + +.table tbody tr.warning > td { + background-color: #fcf8e3; +} + +.table tbody tr.info > td { + background-color: #d9edf7; +} + +.table-hover tbody tr.success:hover > td { + background-color: #d0e9c6; +} + +.table-hover tbody tr.error:hover > td { + background-color: #ebcccc; +} + +.table-hover tbody tr.warning:hover > td { + background-color: #faf2cc; +} + +.table-hover tbody tr.info:hover > td { + background-color: #c4e3f3; +} + +[class^="icon-"], +[class*=" icon-"] { + display: inline-block; + width: 14px; + height: 14px; + margin-top: 1px; + *margin-right: .3em; + line-height: 14px; + vertical-align: text-top; + background-image: url("../img/glyphicons-halflings.png"); + background-position: 14px 14px; + background-repeat: no-repeat; +} + +/* White icons with optional class, or on hover/focus/active states of certain elements */ + +.icon-white, +.nav-pills > .active > a > [class^="icon-"], +.nav-pills > .active > a > [class*=" icon-"], +.nav-list > .active > a > [class^="icon-"], +.nav-list > .active > a > [class*=" icon-"], +.navbar-inverse .nav > .active > a > [class^="icon-"], +.navbar-inverse .nav > .active > a > [class*=" icon-"], +.dropdown-menu > li > a:hover > [class^="icon-"], +.dropdown-menu > li > a:focus > [class^="icon-"], +.dropdown-menu > li > a:hover > [class*=" icon-"], +.dropdown-menu > li > a:focus > [class*=" icon-"], +.dropdown-menu > .active > a > [class^="icon-"], +.dropdown-menu > .active > a > [class*=" icon-"], +.dropdown-submenu:hover > a > [class^="icon-"], +.dropdown-submenu:focus > a > [class^="icon-"], +.dropdown-submenu:hover > a > [class*=" icon-"], +.dropdown-submenu:focus > a > [class*=" icon-"] { + background-image: url("../img/glyphicons-halflings-white.png"); +} + +.icon-glass { + background-position: 0 0; +} + +.icon-music { + background-position: -24px 0; +} + +.icon-search { + background-position: -48px 0; +} + +.icon-envelope { + background-position: -72px 0; +} + +.icon-heart { + background-position: -96px 0; +} + +.icon-star { + background-position: -120px 0; +} + +.icon-star-empty { + background-position: -144px 0; +} + +.icon-user { + background-position: -168px 0; +} + +.icon-film { + background-position: -192px 0; +} + +.icon-th-large { + background-position: -216px 0; +} + +.icon-th { + background-position: -240px 0; +} + +.icon-th-list { + background-position: -264px 0; +} + +.icon-ok { + background-position: -288px 0; +} + +.icon-remove { + background-position: -312px 0; +} + +.icon-zoom-in { + background-position: -336px 0; +} + +.icon-zoom-out { + background-position: -360px 0; +} + +.icon-off { + background-position: -384px 0; +} + +.icon-signal { + background-position: -408px 0; +} + +.icon-cog { + background-position: -432px 0; +} + +.icon-trash { + background-position: -456px 0; +} + +.icon-home { + background-position: 0 -24px; +} + +.icon-file { + background-position: -24px -24px; +} + +.icon-time { + background-position: -48px -24px; +} + +.icon-road { + background-position: -72px -24px; +} + +.icon-download-alt { + background-position: -96px -24px; +} + +.icon-download { + background-position: -120px -24px; +} + +.icon-upload { + background-position: -144px -24px; +} + +.icon-inbox { + background-position: -168px -24px; +} + +.icon-play-circle { + background-position: -192px -24px; +} + +.icon-repeat { + background-position: -216px -24px; +} + +.icon-refresh { + background-position: -240px -24px; +} + +.icon-list-alt { + background-position: -264px -24px; +} + +.icon-lock { + background-position: -287px -24px; +} + +.icon-flag { + background-position: -312px -24px; +} + +.icon-headphones { + background-position: -336px -24px; +} + +.icon-volume-off { + background-position: -360px -24px; +} + +.icon-volume-down { + background-position: -384px -24px; +} + +.icon-volume-up { + background-position: -408px -24px; +} + +.icon-qrcode { + background-position: -432px -24px; +} + +.icon-barcode { + background-position: -456px -24px; +} + +.icon-tag { + background-position: 0 -48px; +} + +.icon-tags { + background-position: -25px -48px; +} + +.icon-book { + background-position: -48px -48px; +} + +.icon-bookmark { + background-position: -72px -48px; +} + +.icon-print { + background-position: -96px -48px; +} + +.icon-camera { + background-position: -120px -48px; +} + +.icon-font { + background-position: -144px -48px; +} + +.icon-bold { + background-position: -167px -48px; +} + +.icon-italic { + background-position: -192px -48px; +} + +.icon-text-height { + background-position: -216px -48px; +} + +.icon-text-width { + background-position: -240px -48px; +} + +.icon-align-left { + background-position: -264px -48px; +} + +.icon-align-center { + background-position: -288px -48px; +} + +.icon-align-right { + background-position: -312px -48px; +} + +.icon-align-justify { + background-position: -336px -48px; +} + +.icon-list { + background-position: -360px -48px; +} + +.icon-indent-left { + background-position: -384px -48px; +} + +.icon-indent-right { + background-position: -408px -48px; +} + +.icon-facetime-video { + background-position: -432px -48px; +} + +.icon-picture { + background-position: -456px -48px; +} + +.icon-pencil { + background-position: 0 -72px; +} + +.icon-map-marker { + background-position: -24px -72px; +} + +.icon-adjust { + background-position: -48px -72px; +} + +.icon-tint { + background-position: -72px -72px; +} + +.icon-edit { + background-position: -96px -72px; +} + +.icon-share { + background-position: -120px -72px; +} + +.icon-check { + background-position: -144px -72px; +} + +.icon-move { + background-position: -168px -72px; +} + +.icon-step-backward { + background-position: -192px -72px; +} + +.icon-fast-backward { + background-position: -216px -72px; +} + +.icon-backward { + background-position: -240px -72px; +} + +.icon-play { + background-position: -264px -72px; +} + +.icon-pause { + background-position: -288px -72px; +} + +.icon-stop { + background-position: -312px -72px; +} + +.icon-forward { + background-position: -336px -72px; +} + +.icon-fast-forward { + background-position: -360px -72px; +} + +.icon-step-forward { + background-position: -384px -72px; +} + +.icon-eject { + background-position: -408px -72px; +} + +.icon-chevron-left { + background-position: -432px -72px; +} + +.icon-chevron-right { + background-position: -456px -72px; +} + +.icon-plus-sign { + background-position: 0 -96px; +} + +.icon-minus-sign { + background-position: -24px -96px; +} + +.icon-remove-sign { + background-position: -48px -96px; +} + +.icon-ok-sign { + background-position: -72px -96px; +} + +.icon-question-sign { + background-position: -96px -96px; +} + +.icon-info-sign { + background-position: -120px -96px; +} + +.icon-screenshot { + background-position: -144px -96px; +} + +.icon-remove-circle { + background-position: -168px -96px; +} + +.icon-ok-circle { + background-position: -192px -96px; +} + +.icon-ban-circle { + background-position: -216px -96px; +} + +.icon-arrow-left { + background-position: -240px -96px; +} + +.icon-arrow-right { + background-position: -264px -96px; +} + +.icon-arrow-up { + background-position: -289px -96px; +} + +.icon-arrow-down { + background-position: -312px -96px; +} + +.icon-share-alt { + background-position: -336px -96px; +} + +.icon-resize-full { + background-position: -360px -96px; +} + +.icon-resize-small { + background-position: -384px -96px; +} + +.icon-plus { + background-position: -408px -96px; +} + +.icon-minus { + background-position: -433px -96px; +} + +.icon-asterisk { + background-position: -456px -96px; +} + +.icon-exclamation-sign { + background-position: 0 -120px; +} + +.icon-gift { + background-position: -24px -120px; +} + +.icon-leaf { + background-position: -48px -120px; +} + +.icon-fire { + background-position: -72px -120px; +} + +.icon-eye-open { + background-position: -96px -120px; +} + +.icon-eye-close { + background-position: -120px -120px; +} + +.icon-warning-sign { + background-position: -144px -120px; +} + +.icon-plane { + background-position: -168px -120px; +} + +.icon-calendar { + background-position: -192px -120px; +} + +.icon-random { + width: 16px; + background-position: -216px -120px; +} + +.icon-comment { + background-position: -240px -120px; +} + +.icon-magnet { + background-position: -264px -120px; +} + +.icon-chevron-up { + background-position: -288px -120px; +} + +.icon-chevron-down { + background-position: -313px -119px; +} + +.icon-retweet { + background-position: -336px -120px; +} + +.icon-shopping-cart { + background-position: -360px -120px; +} + +.icon-folder-close { + width: 16px; + background-position: -384px -120px; +} + +.icon-folder-open { + width: 16px; + background-position: -408px -120px; +} + +.icon-resize-vertical { + background-position: -432px -119px; +} + +.icon-resize-horizontal { + background-position: -456px -118px; +} + +.icon-hdd { + background-position: 0 -144px; +} + +.icon-bullhorn { + background-position: -24px -144px; +} + +.icon-bell { + background-position: -48px -144px; +} + +.icon-certificate { + background-position: -72px -144px; +} + +.icon-thumbs-up { + background-position: -96px -144px; +} + +.icon-thumbs-down { + background-position: -120px -144px; +} + +.icon-hand-right { + background-position: -144px -144px; +} + +.icon-hand-left { + background-position: -168px -144px; +} + +.icon-hand-up { + background-position: -192px -144px; +} + +.icon-hand-down { + background-position: -216px -144px; +} + +.icon-circle-arrow-right { + background-position: -240px -144px; +} + +.icon-circle-arrow-left { + background-position: -264px -144px; +} + +.icon-circle-arrow-up { + background-position: -288px -144px; +} + +.icon-circle-arrow-down { + background-position: -312px -144px; +} + +.icon-globe { + background-position: -336px -144px; +} + +.icon-wrench { + background-position: -360px -144px; +} + +.icon-tasks { + background-position: -384px -144px; +} + +.icon-filter { + background-position: -408px -144px; +} + +.icon-briefcase { + background-position: -432px -144px; +} + +.icon-fullscreen { + background-position: -456px -144px; +} + +.dropup, +.dropdown { + position: relative; +} + +.dropdown-toggle { + *margin-bottom: -3px; +} + +.dropdown-toggle:active, +.open .dropdown-toggle { + outline: 0; +} + +.caret { + display: inline-block; + width: 0; + height: 0; + vertical-align: top; + border-top: 4px solid #000000; + border-right: 4px solid transparent; + border-left: 4px solid transparent; + content: ""; +} + +.dropdown .caret { + margin-top: 8px; + margin-left: 2px; +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + *border-right-width: 2px; + *border-bottom-width: 2px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + +.dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.dropdown-menu .divider { + *width: 100%; + height: 1px; + margin: 9px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} + +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 20px; + color: #333333; + white-space: nowrap; +} + +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus, +.dropdown-submenu:hover > a, +.dropdown-submenu:focus > a { + color: #ffffff; + text-decoration: none; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); +} + +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #ffffff; + text-decoration: none; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + outline: 0; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); +} + +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #999999; +} + +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: default; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.open { + *z-index: 1000; +} + +.open > .dropdown-menu { + display: block; +} + +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} + +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} + +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0; + border-bottom: 4px solid #000000; + content: ""; +} + +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} + +.dropdown-submenu { + position: relative; +} + +.dropdown-submenu > .dropdown-menu { + top: 0; + left: 100%; + margin-top: -6px; + margin-left: -1px; + -webkit-border-radius: 0 6px 6px 6px; + -moz-border-radius: 0 6px 6px 6px; + border-radius: 0 6px 6px 6px; +} + +.dropdown-submenu:hover > .dropdown-menu { + display: block; +} + +.dropup .dropdown-submenu > .dropdown-menu { + top: auto; + bottom: 0; + margin-top: 0; + margin-bottom: -2px; + -webkit-border-radius: 5px 5px 5px 0; + -moz-border-radius: 5px 5px 5px 0; + border-radius: 5px 5px 5px 0; +} + +.dropdown-submenu > a:after { + display: block; + float: right; + width: 0; + height: 0; + margin-top: 5px; + margin-right: -10px; + border-color: transparent; + border-left-color: #cccccc; + border-style: solid; + border-width: 5px 0 5px 5px; + content: " "; +} + +.dropdown-submenu:hover > a:after { + border-left-color: #ffffff; +} + +.dropdown-submenu.pull-left { + float: none; +} + +.dropdown-submenu.pull-left > .dropdown-menu { + left: -100%; + margin-left: 10px; + -webkit-border-radius: 6px 0 6px 6px; + -moz-border-radius: 6px 0 6px 6px; + border-radius: 6px 0 6px 6px; +} + +.dropdown .dropdown-menu .nav-header { + padding-right: 20px; + padding-left: 20px; +} + +.typeahead { + z-index: 1051; + margin-top: 2px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} + +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} + +.well-large { + padding: 24px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.well-small { + padding: 9px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -moz-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} + +.fade.in { + opacity: 1; +} + +.collapse { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + -moz-transition: height 0.35s ease; + -o-transition: height 0.35s ease; + transition: height 0.35s ease; +} + +.collapse.in { + height: auto; +} + +.close { + float: right; + font-size: 20px; + font-weight: bold; + line-height: 20px; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); +} + +.close:hover, +.close:focus { + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.4; + filter: alpha(opacity=40); +} + +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} + +.btn { + display: inline-block; + *display: inline; + padding: 4px 12px; + margin-bottom: 0; + *margin-left: .3em; + font-size: 14px; + line-height: 20px; + color: #333333; + text-align: center; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + vertical-align: middle; + cursor: pointer; + background-color: #f5f5f5; + *background-color: #e6e6e6; + background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); + background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); + background-repeat: repeat-x; + border: 1px solid #cccccc; + *border: 0; + border-color: #e6e6e6 #e6e6e6 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + border-bottom-color: #b3b3b3; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + *zoom: 1; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn:hover, +.btn:focus, +.btn:active, +.btn.active, +.btn.disabled, +.btn[disabled] { + color: #333333; + background-color: #e6e6e6; + *background-color: #d9d9d9; +} + +.btn:active, +.btn.active { + background-color: #cccccc \9; +} + +.btn:first-child { + *margin-left: 0; +} + +.btn:hover, +.btn:focus { + color: #333333; + text-decoration: none; + background-position: 0 -15px; + -webkit-transition: background-position 0.1s linear; + -moz-transition: background-position 0.1s linear; + -o-transition: background-position 0.1s linear; + transition: background-position 0.1s linear; +} + +.btn:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.btn.active, +.btn:active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn.disabled, +.btn[disabled] { + cursor: default; + background-image: none; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.btn-large { + padding: 11px 19px; + font-size: 17.5px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.btn-large [class^="icon-"], +.btn-large [class*=" icon-"] { + margin-top: 4px; +} + +.btn-small { + padding: 2px 10px; + font-size: 11.9px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.btn-small [class^="icon-"], +.btn-small [class*=" icon-"] { + margin-top: 0; +} + +.btn-mini [class^="icon-"], +.btn-mini [class*=" icon-"] { + margin-top: -1px; +} + +.btn-mini { + padding: 0 6px; + font-size: 10.5px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.btn-block { + display: block; + width: 100%; + padding-right: 0; + padding-left: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.btn-block + .btn-block { + margin-top: 5px; +} + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} + +.btn-primary.active, +.btn-warning.active, +.btn-danger.active, +.btn-success.active, +.btn-info.active, +.btn-inverse.active { + color: rgba(255, 255, 255, 0.75); +} + +.btn-primary { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #006dcc; + *background-color: #0044cc; + background-image: -moz-linear-gradient(top, #0088cc, #0044cc); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); + background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); + background-image: -o-linear-gradient(top, #0088cc, #0044cc); + background-image: linear-gradient(to bottom, #0088cc, #0044cc); + background-repeat: repeat-x; + border-color: #0044cc #0044cc #002a80; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-primary:hover, +.btn-primary:focus, +.btn-primary:active, +.btn-primary.active, +.btn-primary.disabled, +.btn-primary[disabled] { + color: #ffffff; + background-color: #0044cc; + *background-color: #003bb3; +} + +.btn-primary:active, +.btn-primary.active { + background-color: #003399 \9; +} + +.btn-warning { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #faa732; + *background-color: #f89406; + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); + background-image: -webkit-linear-gradient(top, #fbb450, #f89406); + background-image: -o-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(to bottom, #fbb450, #f89406); + background-repeat: repeat-x; + border-color: #f89406 #f89406 #ad6704; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-warning:hover, +.btn-warning:focus, +.btn-warning:active, +.btn-warning.active, +.btn-warning.disabled, +.btn-warning[disabled] { + color: #ffffff; + background-color: #f89406; + *background-color: #df8505; +} + +.btn-warning:active, +.btn-warning.active { + background-color: #c67605 \9; +} + +.btn-danger { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #da4f49; + *background-color: #bd362f; + background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); + background-image: linear-gradient(to bottom, #ee5f5b, #bd362f); + background-repeat: repeat-x; + border-color: #bd362f #bd362f #802420; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-danger:hover, +.btn-danger:focus, +.btn-danger:active, +.btn-danger.active, +.btn-danger.disabled, +.btn-danger[disabled] { + color: #ffffff; + background-color: #bd362f; + *background-color: #a9302a; +} + +.btn-danger:active, +.btn-danger.active { + background-color: #942a25 \9; +} + +.btn-success { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #5bb75b; + *background-color: #51a351; + background-image: -moz-linear-gradient(top, #62c462, #51a351); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); + background-image: -webkit-linear-gradient(top, #62c462, #51a351); + background-image: -o-linear-gradient(top, #62c462, #51a351); + background-image: linear-gradient(to bottom, #62c462, #51a351); + background-repeat: repeat-x; + border-color: #51a351 #51a351 #387038; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-success:hover, +.btn-success:focus, +.btn-success:active, +.btn-success.active, +.btn-success.disabled, +.btn-success[disabled] { + color: #ffffff; + background-color: #51a351; + *background-color: #499249; +} + +.btn-success:active, +.btn-success.active { + background-color: #408140 \9; +} + +.btn-info { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #49afcd; + *background-color: #2f96b4; + background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); + background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); + background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); + background-repeat: repeat-x; + border-color: #2f96b4 #2f96b4 #1f6377; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-info:hover, +.btn-info:focus, +.btn-info:active, +.btn-info.active, +.btn-info.disabled, +.btn-info[disabled] { + color: #ffffff; + background-color: #2f96b4; + *background-color: #2a85a0; +} + +.btn-info:active, +.btn-info.active { + background-color: #24748c \9; +} + +.btn-inverse { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #363636; + *background-color: #222222; + background-image: -moz-linear-gradient(top, #444444, #222222); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222)); + background-image: -webkit-linear-gradient(top, #444444, #222222); + background-image: -o-linear-gradient(top, #444444, #222222); + background-image: linear-gradient(to bottom, #444444, #222222); + background-repeat: repeat-x; + border-color: #222222 #222222 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-inverse:hover, +.btn-inverse:focus, +.btn-inverse:active, +.btn-inverse.active, +.btn-inverse.disabled, +.btn-inverse[disabled] { + color: #ffffff; + background-color: #222222; + *background-color: #151515; +} + +.btn-inverse:active, +.btn-inverse.active { + background-color: #080808 \9; +} + +button.btn, +input[type="submit"].btn { + *padding-top: 3px; + *padding-bottom: 3px; +} + +button.btn::-moz-focus-inner, +input[type="submit"].btn::-moz-focus-inner { + padding: 0; + border: 0; +} + +button.btn.btn-large, +input[type="submit"].btn.btn-large { + *padding-top: 7px; + *padding-bottom: 7px; +} + +button.btn.btn-small, +input[type="submit"].btn.btn-small { + *padding-top: 3px; + *padding-bottom: 3px; +} + +button.btn.btn-mini, +input[type="submit"].btn.btn-mini { + *padding-top: 1px; + *padding-bottom: 1px; +} + +.btn-link, +.btn-link:active, +.btn-link[disabled] { + background-color: transparent; + background-image: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.btn-link { + color: #0088cc; + cursor: pointer; + border-color: transparent; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-link:hover, +.btn-link:focus { + color: #005580; + text-decoration: underline; + background-color: transparent; +} + +.btn-link[disabled]:hover, +.btn-link[disabled]:focus { + color: #333333; + text-decoration: none; +} + +.btn-group { + position: relative; + display: inline-block; + *display: inline; + *margin-left: .3em; + font-size: 0; + white-space: nowrap; + vertical-align: middle; + *zoom: 1; +} + +.btn-group:first-child { + *margin-left: 0; +} + +.btn-group + .btn-group { + margin-left: 5px; +} + +.btn-toolbar { + margin-top: 10px; + margin-bottom: 10px; + font-size: 0; +} + +.btn-toolbar > .btn + .btn, +.btn-toolbar > .btn-group + .btn, +.btn-toolbar > .btn + .btn-group { + margin-left: 5px; +} + +.btn-group > .btn { + position: relative; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-group > .btn + .btn { + margin-left: -1px; +} + +.btn-group > .btn, +.btn-group > .dropdown-menu, +.btn-group > .popover { + font-size: 14px; +} + +.btn-group > .btn-mini { + font-size: 10.5px; +} + +.btn-group > .btn-small { + font-size: 11.9px; +} + +.btn-group > .btn-large { + font-size: 17.5px; +} + +.btn-group > .btn:first-child { + margin-left: 0; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-topleft: 4px; +} + +.btn-group > .btn:last-child, +.btn-group > .dropdown-toggle { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-bottomright: 4px; +} + +.btn-group > .btn.large:first-child { + margin-left: 0; + -webkit-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -webkit-border-top-left-radius: 6px; + border-top-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + -moz-border-radius-topleft: 6px; +} + +.btn-group > .btn.large:last-child, +.btn-group > .large.dropdown-toggle { + -webkit-border-top-right-radius: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + -moz-border-radius-topright: 6px; + -moz-border-radius-bottomright: 6px; +} + +.btn-group > .btn:hover, +.btn-group > .btn:focus, +.btn-group > .btn:active, +.btn-group > .btn.active { + z-index: 2; +} + +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + +.btn-group > .btn + .dropdown-toggle { + *padding-top: 5px; + padding-right: 8px; + *padding-bottom: 5px; + padding-left: 8px; + -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn-group > .btn-mini + .dropdown-toggle { + *padding-top: 2px; + padding-right: 5px; + *padding-bottom: 2px; + padding-left: 5px; +} + +.btn-group > .btn-small + .dropdown-toggle { + *padding-top: 5px; + *padding-bottom: 4px; +} + +.btn-group > .btn-large + .dropdown-toggle { + *padding-top: 7px; + padding-right: 12px; + *padding-bottom: 7px; + padding-left: 12px; +} + +.btn-group.open .dropdown-toggle { + background-image: none; + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn-group.open .btn.dropdown-toggle { + background-color: #e6e6e6; +} + +.btn-group.open .btn-primary.dropdown-toggle { + background-color: #0044cc; +} + +.btn-group.open .btn-warning.dropdown-toggle { + background-color: #f89406; +} + +.btn-group.open .btn-danger.dropdown-toggle { + background-color: #bd362f; +} + +.btn-group.open .btn-success.dropdown-toggle { + background-color: #51a351; +} + +.btn-group.open .btn-info.dropdown-toggle { + background-color: #2f96b4; +} + +.btn-group.open .btn-inverse.dropdown-toggle { + background-color: #222222; +} + +.btn .caret { + margin-top: 8px; + margin-left: 0; +} + +.btn-large .caret { + margin-top: 6px; +} + +.btn-large .caret { + border-top-width: 5px; + border-right-width: 5px; + border-left-width: 5px; +} + +.btn-mini .caret, +.btn-small .caret { + margin-top: 8px; +} + +.dropup .btn-large .caret { + border-bottom-width: 5px; +} + +.btn-primary .caret, +.btn-warning .caret, +.btn-danger .caret, +.btn-info .caret, +.btn-success .caret, +.btn-inverse .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.btn-group-vertical { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; +} + +.btn-group-vertical > .btn { + display: block; + float: none; + max-width: 100%; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-group-vertical > .btn + .btn { + margin-top: -1px; + margin-left: 0; +} + +.btn-group-vertical > .btn:first-child { + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +.btn-group-vertical > .btn:last-child { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} + +.btn-group-vertical > .btn-large:first-child { + -webkit-border-radius: 6px 6px 0 0; + -moz-border-radius: 6px 6px 0 0; + border-radius: 6px 6px 0 0; +} + +.btn-group-vertical > .btn-large:last-child { + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; +} + +.alert { + padding: 8px 35px 8px 14px; + margin-bottom: 20px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + background-color: #fcf8e3; + border: 1px solid #fbeed5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.alert, +.alert h4 { + color: #c09853; +} + +.alert h4 { + margin: 0; +} + +.alert .close { + position: relative; + top: -2px; + right: -21px; + line-height: 20px; +} + +.alert-success { + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.alert-success h4 { + color: #468847; +} + +.alert-danger, +.alert-error { + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7; +} + +.alert-danger h4, +.alert-error h4 { + color: #b94a48; +} + +.alert-info { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1; +} + +.alert-info h4 { + color: #3a87ad; +} + +.alert-block { + padding-top: 14px; + padding-bottom: 14px; +} + +.alert-block > p, +.alert-block > ul { + margin-bottom: 0; +} + +.alert-block p + p { + margin-top: 5px; +} + +.nav { + margin-bottom: 20px; + margin-left: 0; + list-style: none; +} + +.nav > li > a { + display: block; +} + +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} + +.nav > li > a > img { + max-width: none; +} + +.nav > .pull-right { + float: right; +} + +.nav-header { + display: block; + padding: 3px 15px; + font-size: 11px; + font-weight: bold; + line-height: 20px; + color: #999999; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-transform: uppercase; +} + +.nav li + .nav-header { + margin-top: 9px; +} + +.nav-list { + padding-right: 15px; + padding-left: 15px; + margin-bottom: 0; +} + +.nav-list > li > a, +.nav-list .nav-header { + margin-right: -15px; + margin-left: -15px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); +} + +.nav-list > li > a { + padding: 3px 15px; +} + +.nav-list > .active > a, +.nav-list > .active > a:hover, +.nav-list > .active > a:focus { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + background-color: #0088cc; +} + +.nav-list [class^="icon-"], +.nav-list [class*=" icon-"] { + margin-right: 2px; +} + +.nav-list .divider { + *width: 100%; + height: 1px; + margin: 9px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} + +.nav-tabs, +.nav-pills { + *zoom: 1; +} + +.nav-tabs:before, +.nav-pills:before, +.nav-tabs:after, +.nav-pills:after { + display: table; + line-height: 0; + content: ""; +} + +.nav-tabs:after, +.nav-pills:after { + clear: both; +} + +.nav-tabs > li, +.nav-pills > li { + float: left; +} + +.nav-tabs > li > a, +.nav-pills > li > a { + padding-right: 12px; + padding-left: 12px; + margin-right: 2px; + line-height: 14px; +} + +.nav-tabs { + border-bottom: 1px solid #ddd; +} + +.nav-tabs > li { + margin-bottom: -1px; +} + +.nav-tabs > li > a { + padding-top: 8px; + padding-bottom: 8px; + line-height: 20px; + border: 1px solid transparent; + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +.nav-tabs > li > a:hover, +.nav-tabs > li > a:focus { + border-color: #eeeeee #eeeeee #dddddd; +} + +.nav-tabs > .active > a, +.nav-tabs > .active > a:hover, +.nav-tabs > .active > a:focus { + color: #555555; + cursor: default; + background-color: #ffffff; + border: 1px solid #ddd; + border-bottom-color: transparent; +} + +.nav-pills > li > a { + padding-top: 8px; + padding-bottom: 8px; + margin-top: 2px; + margin-bottom: 2px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} + +.nav-pills > .active > a, +.nav-pills > .active > a:hover, +.nav-pills > .active > a:focus { + color: #ffffff; + background-color: #0088cc; +} + +.nav-stacked > li { + float: none; +} + +.nav-stacked > li > a { + margin-right: 0; +} + +.nav-tabs.nav-stacked { + border-bottom: 0; +} + +.nav-tabs.nav-stacked > li > a { + border: 1px solid #ddd; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.nav-tabs.nav-stacked > li:first-child > a { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; +} + +.nav-tabs.nav-stacked > li:last-child > a { + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -moz-border-radius-bottomright: 4px; + -moz-border-radius-bottomleft: 4px; +} + +.nav-tabs.nav-stacked > li > a:hover, +.nav-tabs.nav-stacked > li > a:focus { + z-index: 2; + border-color: #ddd; +} + +.nav-pills.nav-stacked > li > a { + margin-bottom: 3px; +} + +.nav-pills.nav-stacked > li:last-child > a { + margin-bottom: 1px; +} + +.nav-tabs .dropdown-menu { + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; +} + +.nav-pills .dropdown-menu { + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.nav .dropdown-toggle .caret { + margin-top: 6px; + border-top-color: #0088cc; + border-bottom-color: #0088cc; +} + +.nav .dropdown-toggle:hover .caret, +.nav .dropdown-toggle:focus .caret { + border-top-color: #005580; + border-bottom-color: #005580; +} + +/* move down carets for tabs */ + +.nav-tabs .dropdown-toggle .caret { + margin-top: 8px; +} + +.nav .active .dropdown-toggle .caret { + border-top-color: #fff; + border-bottom-color: #fff; +} + +.nav-tabs .active .dropdown-toggle .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} + +.nav > .dropdown.active > a:hover, +.nav > .dropdown.active > a:focus { + cursor: pointer; +} + +.nav-tabs .open .dropdown-toggle, +.nav-pills .open .dropdown-toggle, +.nav > li.dropdown.open.active > a:hover, +.nav > li.dropdown.open.active > a:focus { + color: #ffffff; + background-color: #999999; + border-color: #999999; +} + +.nav li.dropdown.open .caret, +.nav li.dropdown.open.active .caret, +.nav li.dropdown.open a:hover .caret, +.nav li.dropdown.open a:focus .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; + opacity: 1; + filter: alpha(opacity=100); +} + +.tabs-stacked .open > a:hover, +.tabs-stacked .open > a:focus { + border-color: #999999; +} + +.tabbable { + *zoom: 1; +} + +.tabbable:before, +.tabbable:after { + display: table; + line-height: 0; + content: ""; +} + +.tabbable:after { + clear: both; +} + +.tab-content { + overflow: auto; +} + +.tabs-below > .nav-tabs, +.tabs-right > .nav-tabs, +.tabs-left > .nav-tabs { + border-bottom: 0; +} + +.tab-content > .tab-pane, +.pill-content > .pill-pane { + display: none; +} + +.tab-content > .active, +.pill-content > .active { + display: block; +} + +.tabs-below > .nav-tabs { + border-top: 1px solid #ddd; +} + +.tabs-below > .nav-tabs > li { + margin-top: -1px; + margin-bottom: 0; +} + +.tabs-below > .nav-tabs > li > a { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} + +.tabs-below > .nav-tabs > li > a:hover, +.tabs-below > .nav-tabs > li > a:focus { + border-top-color: #ddd; + border-bottom-color: transparent; +} + +.tabs-below > .nav-tabs > .active > a, +.tabs-below > .nav-tabs > .active > a:hover, +.tabs-below > .nav-tabs > .active > a:focus { + border-color: transparent #ddd #ddd #ddd; +} + +.tabs-left > .nav-tabs > li, +.tabs-right > .nav-tabs > li { + float: none; +} + +.tabs-left > .nav-tabs > li > a, +.tabs-right > .nav-tabs > li > a { + min-width: 74px; + margin-right: 0; + margin-bottom: 3px; +} + +.tabs-left > .nav-tabs { + float: left; + margin-right: 19px; + border-right: 1px solid #ddd; +} + +.tabs-left > .nav-tabs > li > a { + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.tabs-left > .nav-tabs > li > a:hover, +.tabs-left > .nav-tabs > li > a:focus { + border-color: #eeeeee #dddddd #eeeeee #eeeeee; +} + +.tabs-left > .nav-tabs .active > a, +.tabs-left > .nav-tabs .active > a:hover, +.tabs-left > .nav-tabs .active > a:focus { + border-color: #ddd transparent #ddd #ddd; + *border-right-color: #ffffff; +} + +.tabs-right > .nav-tabs { + float: right; + margin-left: 19px; + border-left: 1px solid #ddd; +} + +.tabs-right > .nav-tabs > li > a { + margin-left: -1px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.tabs-right > .nav-tabs > li > a:hover, +.tabs-right > .nav-tabs > li > a:focus { + border-color: #eeeeee #eeeeee #eeeeee #dddddd; +} + +.tabs-right > .nav-tabs .active > a, +.tabs-right > .nav-tabs .active > a:hover, +.tabs-right > .nav-tabs .active > a:focus { + border-color: #ddd #ddd #ddd transparent; + *border-left-color: #ffffff; +} + +.nav > .disabled > a { + color: #999999; +} + +.nav > .disabled > a:hover, +.nav > .disabled > a:focus { + text-decoration: none; + cursor: default; + background-color: transparent; +} + +.navbar { + *position: relative; + *z-index: 2; + margin-bottom: 20px; + overflow: visible; +} + +.navbar-inner { + min-height: 40px; + padding-right: 20px; + padding-left: 20px; + background-color: #fafafa; + background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); + background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -o-linear-gradient(top, #ffffff, #f2f2f2); + background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); + background-repeat: repeat-x; + border: 1px solid #d4d4d4; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); + *zoom: 1; + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); +} + +.navbar-inner:before, +.navbar-inner:after { + display: table; + line-height: 0; + content: ""; +} + +.navbar-inner:after { + clear: both; +} + +.navbar .container { + width: auto; +} + +.nav-collapse.collapse { + height: auto; + overflow: visible; +} + +.navbar .brand { + display: block; + float: left; + padding: 10px 20px 10px; + margin-left: -20px; + font-size: 20px; + font-weight: 200; + color: #777777; + text-shadow: 0 1px 0 #ffffff; +} + +.navbar .brand:hover, +.navbar .brand:focus { + text-decoration: none; +} + +.navbar-text { + margin-bottom: 0; + line-height: 40px; + color: #777777; +} + +.navbar-link { + color: #777777; +} + +.navbar-link:hover, +.navbar-link:focus { + color: #333333; +} + +.navbar .divider-vertical { + height: 40px; + margin: 0 9px; + border-right: 1px solid #ffffff; + border-left: 1px solid #f2f2f2; +} + +.navbar .btn, +.navbar .btn-group { + margin-top: 5px; +} + +.navbar .btn-group .btn, +.navbar .input-prepend .btn, +.navbar .input-append .btn, +.navbar .input-prepend .btn-group, +.navbar .input-append .btn-group { + margin-top: 0; +} + +.navbar-form { + margin-bottom: 0; + *zoom: 1; +} + +.navbar-form:before, +.navbar-form:after { + display: table; + line-height: 0; + content: ""; +} + +.navbar-form:after { + clear: both; +} + +.navbar-form input, +.navbar-form select, +.navbar-form .radio, +.navbar-form .checkbox { + margin-top: 5px; +} + +.navbar-form input, +.navbar-form select, +.navbar-form .btn { + display: inline-block; + margin-bottom: 0; +} + +.navbar-form input[type="image"], +.navbar-form input[type="checkbox"], +.navbar-form input[type="radio"] { + margin-top: 3px; +} + +.navbar-form .input-append, +.navbar-form .input-prepend { + margin-top: 5px; + white-space: nowrap; +} + +.navbar-form .input-append input, +.navbar-form .input-prepend input { + margin-top: 0; +} + +.navbar-search { + position: relative; + float: left; + margin-top: 5px; + margin-bottom: 0; +} + +.navbar-search .search-query { + padding: 4px 14px; + margin-bottom: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + font-weight: normal; + line-height: 1; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +.navbar-static-top { + position: static; + margin-bottom: 0; +} + +.navbar-static-top .navbar-inner { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; + margin-bottom: 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-static-top .navbar-inner { + border-width: 0 0 1px; +} + +.navbar-fixed-bottom .navbar-inner { + border-width: 1px 0 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-fixed-bottom .navbar-inner { + padding-right: 0; + padding-left: 0; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.navbar-static-top .container, +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { + width: 940px; +} + +.navbar-fixed-top { + top: 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-static-top .navbar-inner { + -webkit-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); +} + +.navbar-fixed-bottom { + bottom: 0; +} + +.navbar-fixed-bottom .navbar-inner { + -webkit-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); + box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); +} + +.navbar .nav { + position: relative; + left: 0; + display: block; + float: left; + margin: 0 10px 0 0; +} + +.navbar .nav.pull-right { + float: right; + margin-right: 0; +} + +.navbar .nav > li { + float: left; +} + +.navbar .nav > li > a { + float: none; + padding: 10px 15px 10px; + color: #777777; + text-decoration: none; + text-shadow: 0 1px 0 #ffffff; +} + +.navbar .nav .dropdown-toggle .caret { + margin-top: 8px; +} + +.navbar .nav > li > a:focus, +.navbar .nav > li > a:hover { + color: #333333; + text-decoration: none; + background-color: transparent; +} + +.navbar .nav > .active > a, +.navbar .nav > .active > a:hover, +.navbar .nav > .active > a:focus { + color: #555555; + text-decoration: none; + background-color: #e5e5e5; + -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); + -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); +} + +.navbar .btn-navbar { + display: none; + float: right; + padding: 7px 10px; + margin-right: 5px; + margin-left: 5px; + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #ededed; + *background-color: #e5e5e5; + background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5)); + background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5); + background-repeat: repeat-x; + border-color: #e5e5e5 #e5e5e5 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); +} + +.navbar .btn-navbar:hover, +.navbar .btn-navbar:focus, +.navbar .btn-navbar:active, +.navbar .btn-navbar.active, +.navbar .btn-navbar.disabled, +.navbar .btn-navbar[disabled] { + color: #ffffff; + background-color: #e5e5e5; + *background-color: #d9d9d9; +} + +.navbar .btn-navbar:active, +.navbar .btn-navbar.active { + background-color: #cccccc \9; +} + +.navbar .btn-navbar .icon-bar { + display: block; + width: 18px; + height: 2px; + background-color: #f5f5f5; + -webkit-border-radius: 1px; + -moz-border-radius: 1px; + border-radius: 1px; + -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); +} + +.btn-navbar .icon-bar + .icon-bar { + margin-top: 3px; +} + +.navbar .nav > li > .dropdown-menu:before { + position: absolute; + top: -7px; + left: 9px; + display: inline-block; + border-right: 7px solid transparent; + border-bottom: 7px solid #ccc; + border-left: 7px solid transparent; + border-bottom-color: rgba(0, 0, 0, 0.2); + content: ''; +} + +.navbar .nav > li > .dropdown-menu:after { + position: absolute; + top: -6px; + left: 10px; + display: inline-block; + border-right: 6px solid transparent; + border-bottom: 6px solid #ffffff; + border-left: 6px solid transparent; + content: ''; +} + +.navbar-fixed-bottom .nav > li > .dropdown-menu:before { + top: auto; + bottom: -7px; + border-top: 7px solid #ccc; + border-bottom: 0; + border-top-color: rgba(0, 0, 0, 0.2); +} + +.navbar-fixed-bottom .nav > li > .dropdown-menu:after { + top: auto; + bottom: -6px; + border-top: 6px solid #ffffff; + border-bottom: 0; +} + +.navbar .nav li.dropdown > a:hover .caret, +.navbar .nav li.dropdown > a:focus .caret { + border-top-color: #333333; + border-bottom-color: #333333; +} + +.navbar .nav li.dropdown.open > .dropdown-toggle, +.navbar .nav li.dropdown.active > .dropdown-toggle, +.navbar .nav li.dropdown.open.active > .dropdown-toggle { + color: #555555; + background-color: #e5e5e5; +} + +.navbar .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: #777777; + border-bottom-color: #777777; +} + +.navbar .nav li.dropdown.open > .dropdown-toggle .caret, +.navbar .nav li.dropdown.active > .dropdown-toggle .caret, +.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} + +.navbar .pull-right > li > .dropdown-menu, +.navbar .nav > li > .dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu:before, +.navbar .nav > li > .dropdown-menu.pull-right:before { + right: 12px; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu:after, +.navbar .nav > li > .dropdown-menu.pull-right:after { + right: 13px; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu .dropdown-menu, +.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { + right: 100%; + left: auto; + margin-right: -1px; + margin-left: 0; + -webkit-border-radius: 6px 0 6px 6px; + -moz-border-radius: 6px 0 6px 6px; + border-radius: 6px 0 6px 6px; +} + +.navbar-inverse .navbar-inner { + background-color: #1b1b1b; + background-image: -moz-linear-gradient(top, #222222, #111111); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111)); + background-image: -webkit-linear-gradient(top, #222222, #111111); + background-image: -o-linear-gradient(top, #222222, #111111); + background-image: linear-gradient(to bottom, #222222, #111111); + background-repeat: repeat-x; + border-color: #252525; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0); +} + +.navbar-inverse .brand, +.navbar-inverse .nav > li > a { + color: #999999; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} + +.navbar-inverse .brand:hover, +.navbar-inverse .nav > li > a:hover, +.navbar-inverse .brand:focus, +.navbar-inverse .nav > li > a:focus { + color: #ffffff; +} + +.navbar-inverse .brand { + color: #999999; +} + +.navbar-inverse .navbar-text { + color: #999999; +} + +.navbar-inverse .nav > li > a:focus, +.navbar-inverse .nav > li > a:hover { + color: #ffffff; + background-color: transparent; +} + +.navbar-inverse .nav .active > a, +.navbar-inverse .nav .active > a:hover, +.navbar-inverse .nav .active > a:focus { + color: #ffffff; + background-color: #111111; +} + +.navbar-inverse .navbar-link { + color: #999999; +} + +.navbar-inverse .navbar-link:hover, +.navbar-inverse .navbar-link:focus { + color: #ffffff; +} + +.navbar-inverse .divider-vertical { + border-right-color: #222222; + border-left-color: #111111; +} + +.navbar-inverse .nav li.dropdown.open > .dropdown-toggle, +.navbar-inverse .nav li.dropdown.active > .dropdown-toggle, +.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { + color: #ffffff; + background-color: #111111; +} + +.navbar-inverse .nav li.dropdown > a:hover .caret, +.navbar-inverse .nav li.dropdown > a:focus .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: #999999; + border-bottom-color: #999999; +} + +.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret, +.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret, +.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar-inverse .navbar-search .search-query { + color: #ffffff; + background-color: #515151; + border-color: #111111; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + -webkit-transition: none; + -moz-transition: none; + -o-transition: none; + transition: none; +} + +.navbar-inverse .navbar-search .search-query:-moz-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query:-ms-input-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query:focus, +.navbar-inverse .navbar-search .search-query.focused { + padding: 5px 15px; + color: #333333; + text-shadow: 0 1px 0 #ffffff; + background-color: #ffffff; + border: 0; + outline: 0; + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); +} + +.navbar-inverse .btn-navbar { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e0e0e; + *background-color: #040404; + background-image: -moz-linear-gradient(top, #151515, #040404); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404)); + background-image: -webkit-linear-gradient(top, #151515, #040404); + background-image: -o-linear-gradient(top, #151515, #040404); + background-image: linear-gradient(to bottom, #151515, #040404); + background-repeat: repeat-x; + border-color: #040404 #040404 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.navbar-inverse .btn-navbar:hover, +.navbar-inverse .btn-navbar:focus, +.navbar-inverse .btn-navbar:active, +.navbar-inverse .btn-navbar.active, +.navbar-inverse .btn-navbar.disabled, +.navbar-inverse .btn-navbar[disabled] { + color: #ffffff; + background-color: #040404; + *background-color: #000000; +} + +.navbar-inverse .btn-navbar:active, +.navbar-inverse .btn-navbar.active { + background-color: #000000 \9; +} + +.breadcrumb { + padding: 8px 15px; + margin: 0 0 20px; + list-style: none; + background-color: #f5f5f5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.breadcrumb > li { + display: inline-block; + *display: inline; + text-shadow: 0 1px 0 #ffffff; + *zoom: 1; +} + +.breadcrumb > li > .divider { + padding: 0 5px; + color: #ccc; +} + +.breadcrumb > .active { + color: #999999; +} + +.pagination { + margin: 20px 0; +} + +.pagination ul { + display: inline-block; + *display: inline; + margin-bottom: 0; + margin-left: 0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + *zoom: 1; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.pagination ul > li { + display: inline; +} + +.pagination ul > li > a, +.pagination ul > li > span { + float: left; + padding: 4px 12px; + line-height: 20px; + text-decoration: none; + background-color: #ffffff; + border: 1px solid #dddddd; + border-left-width: 0; +} + +.pagination ul > li > a:hover, +.pagination ul > li > a:focus, +.pagination ul > .active > a, +.pagination ul > .active > span { + background-color: #f5f5f5; +} + +.pagination ul > .active > a, +.pagination ul > .active > span { + color: #999999; + cursor: default; +} + +.pagination ul > .disabled > span, +.pagination ul > .disabled > a, +.pagination ul > .disabled > a:hover, +.pagination ul > .disabled > a:focus { + color: #999999; + cursor: default; + background-color: transparent; +} + +.pagination ul > li:first-child > a, +.pagination ul > li:first-child > span { + border-left-width: 1px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-topleft: 4px; +} + +.pagination ul > li:last-child > a, +.pagination ul > li:last-child > span { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-bottomright: 4px; +} + +.pagination-centered { + text-align: center; +} + +.pagination-right { + text-align: right; +} + +.pagination-large ul > li > a, +.pagination-large ul > li > span { + padding: 11px 19px; + font-size: 17.5px; +} + +.pagination-large ul > li:first-child > a, +.pagination-large ul > li:first-child > span { + -webkit-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -webkit-border-top-left-radius: 6px; + border-top-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + -moz-border-radius-topleft: 6px; +} + +.pagination-large ul > li:last-child > a, +.pagination-large ul > li:last-child > span { + -webkit-border-top-right-radius: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + -moz-border-radius-topright: 6px; + -moz-border-radius-bottomright: 6px; +} + +.pagination-mini ul > li:first-child > a, +.pagination-small ul > li:first-child > a, +.pagination-mini ul > li:first-child > span, +.pagination-small ul > li:first-child > span { + -webkit-border-bottom-left-radius: 3px; + border-bottom-left-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-top-left-radius: 3px; + -moz-border-radius-bottomleft: 3px; + -moz-border-radius-topleft: 3px; +} + +.pagination-mini ul > li:last-child > a, +.pagination-small ul > li:last-child > a, +.pagination-mini ul > li:last-child > span, +.pagination-small ul > li:last-child > span { + -webkit-border-top-right-radius: 3px; + border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-bottom-right-radius: 3px; + -moz-border-radius-topright: 3px; + -moz-border-radius-bottomright: 3px; +} + +.pagination-small ul > li > a, +.pagination-small ul > li > span { + padding: 2px 10px; + font-size: 11.9px; +} + +.pagination-mini ul > li > a, +.pagination-mini ul > li > span { + padding: 0 6px; + font-size: 10.5px; +} + +.pager { + margin: 20px 0; + text-align: center; + list-style: none; + *zoom: 1; +} + +.pager:before, +.pager:after { + display: table; + line-height: 0; + content: ""; +} + +.pager:after { + clear: both; +} + +.pager li { + display: inline; +} + +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #f5f5f5; +} + +.pager .next > a, +.pager .next > span { + float: right; +} + +.pager .previous > a, +.pager .previous > span { + float: left; +} + +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #999999; + cursor: default; + background-color: #fff; +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000000; +} + +.modal-backdrop.fade { + opacity: 0; +} + +.modal-backdrop, +.modal-backdrop.fade.in { + opacity: 0.8; + filter: alpha(opacity=80); +} + +.modal { + position: fixed; + top: 10%; + left: 50%; + z-index: 1050; + width: 560px; + margin-left: -280px; + background-color: #ffffff; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.3); + *border: 1px solid #999; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + outline: none; + -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} + +.modal.fade { + top: -25%; + -webkit-transition: opacity 0.3s linear, top 0.3s ease-out; + -moz-transition: opacity 0.3s linear, top 0.3s ease-out; + -o-transition: opacity 0.3s linear, top 0.3s ease-out; + transition: opacity 0.3s linear, top 0.3s ease-out; +} + +.modal.fade.in { + top: 10%; +} + +.modal-header { + padding: 9px 15px; + border-bottom: 1px solid #eee; +} + +.modal-header .close { + margin-top: 2px; +} + +.modal-header h3 { + margin: 0; + line-height: 30px; +} + +.modal-body { + position: relative; + max-height: 400px; + padding: 15px; + overflow-y: auto; +} + +.modal-form { + margin-bottom: 0; +} + +.modal-footer { + padding: 14px 15px 15px; + margin-bottom: 0; + text-align: right; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; + *zoom: 1; + -webkit-box-shadow: inset 0 1px 0 #ffffff; + -moz-box-shadow: inset 0 1px 0 #ffffff; + box-shadow: inset 0 1px 0 #ffffff; +} + +.modal-footer:before, +.modal-footer:after { + display: table; + line-height: 0; + content: ""; +} + +.modal-footer:after { + clear: both; +} + +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} + +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} + +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} + +.tooltip { + position: absolute; + z-index: 1030; + display: block; + font-size: 11px; + line-height: 1.4; + opacity: 0; + filter: alpha(opacity=0); + visibility: visible; +} + +.tooltip.in { + opacity: 0.8; + filter: alpha(opacity=80); +} + +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} + +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} + +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} + +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} + +.tooltip-inner { + max-width: 200px; + padding: 8px; + color: #ffffff; + text-align: center; + text-decoration: none; + background-color: #000000; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-top-color: #000000; + border-width: 5px 5px 0; +} + +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-right-color: #000000; + border-width: 5px 5px 5px 0; +} + +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-left-color: #000000; + border-width: 5px 0 5px 5px; +} + +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-bottom-color: #000000; + border-width: 0 5px 5px; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1010; + display: none; + max-width: 276px; + padding: 1px; + text-align: left; + white-space: normal; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + +.popover.top { + margin-top: -10px; +} + +.popover.right { + margin-left: 10px; +} + +.popover.bottom { + margin-top: 10px; +} + +.popover.left { + margin-left: -10px; +} + +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + font-weight: normal; + line-height: 18px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + -webkit-border-radius: 5px 5px 0 0; + -moz-border-radius: 5px 5px 0 0; + border-radius: 5px 5px 0 0; +} + +.popover-title:empty { + display: none; +} + +.popover-content { + padding: 9px 14px; +} + +.popover .arrow, +.popover .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.popover .arrow { + border-width: 11px; +} + +.popover .arrow:after { + border-width: 10px; + content: ""; +} + +.popover.top .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, 0.25); + border-bottom-width: 0; +} + +.popover.top .arrow:after { + bottom: 1px; + margin-left: -10px; + border-top-color: #ffffff; + border-bottom-width: 0; +} + +.popover.right .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999; + border-right-color: rgba(0, 0, 0, 0.25); + border-left-width: 0; +} + +.popover.right .arrow:after { + bottom: -10px; + left: 1px; + border-right-color: #ffffff; + border-left-width: 0; +} + +.popover.bottom .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, 0.25); + border-top-width: 0; +} + +.popover.bottom .arrow:after { + top: 1px; + margin-left: -10px; + border-bottom-color: #ffffff; + border-top-width: 0; +} + +.popover.left .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, 0.25); + border-right-width: 0; +} + +.popover.left .arrow:after { + right: 1px; + bottom: -10px; + border-left-color: #ffffff; + border-right-width: 0; +} + +.thumbnails { + margin-left: -20px; + list-style: none; + *zoom: 1; +} + +.thumbnails:before, +.thumbnails:after { + display: table; + line-height: 0; + content: ""; +} + +.thumbnails:after { + clear: both; +} + +.row-fluid .thumbnails { + margin-left: 0; +} + +.thumbnails > li { + float: left; + margin-bottom: 20px; + margin-left: 20px; +} + +.thumbnail { + display: block; + padding: 4px; + line-height: 20px; + border: 1px solid #ddd; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} + +a.thumbnail:hover, +a.thumbnail:focus { + border-color: #0088cc; + -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); +} + +.thumbnail > img { + display: block; + max-width: 100%; + margin-right: auto; + margin-left: auto; +} + +.thumbnail .caption { + padding: 9px; + color: #555555; +} + +.media, +.media-body { + overflow: hidden; + *overflow: visible; + zoom: 1; +} + +.media, +.media .media { + margin-top: 15px; +} + +.media:first-child { + margin-top: 0; +} + +.media-object { + display: block; +} + +.media-heading { + margin: 0 0 5px; +} + +.media > .pull-left { + margin-right: 10px; +} + +.media > .pull-right { + margin-left: 10px; +} + +.media-list { + margin-left: 0; + list-style: none; +} + +.label, +.badge { + display: inline-block; + padding: 2px 4px; + font-size: 11.844px; + font-weight: bold; + line-height: 14px; + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + white-space: nowrap; + vertical-align: baseline; + background-color: #999999; +} + +.label { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.badge { + padding-right: 9px; + padding-left: 9px; + -webkit-border-radius: 9px; + -moz-border-radius: 9px; + border-radius: 9px; +} + +.label:empty, +.badge:empty { + display: none; +} + +a.label:hover, +a.label:focus, +a.badge:hover, +a.badge:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} + +.label-important, +.badge-important { + background-color: #b94a48; +} + +.label-important[href], +.badge-important[href] { + background-color: #953b39; +} + +.label-warning, +.badge-warning { + background-color: #f89406; +} + +.label-warning[href], +.badge-warning[href] { + background-color: #c67605; +} + +.label-success, +.badge-success { + background-color: #468847; +} + +.label-success[href], +.badge-success[href] { + background-color: #356635; +} + +.label-info, +.badge-info { + background-color: #3a87ad; +} + +.label-info[href], +.badge-info[href] { + background-color: #2d6987; +} + +.label-inverse, +.badge-inverse { + background-color: #333333; +} + +.label-inverse[href], +.badge-inverse[href] { + background-color: #1a1a1a; +} + +.btn .label, +.btn .badge { + position: relative; + top: -1px; +} + +.btn-mini .label, +.btn-mini .badge { + top: 0; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-moz-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-ms-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-o-keyframes progress-bar-stripes { + from { + background-position: 0 0; + } + to { + background-position: 40px 0; + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f7f7f7; + background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); + background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9); + background-repeat: repeat-x; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0); + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} + +.progress .bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + color: #ffffff; + text-align: center; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e90d2; + background-image: -moz-linear-gradient(top, #149bdf, #0480be); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); + background-image: -webkit-linear-gradient(top, #149bdf, #0480be); + background-image: -o-linear-gradient(top, #149bdf, #0480be); + background-image: linear-gradient(to bottom, #149bdf, #0480be); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0); + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-transition: width 0.6s ease; + -moz-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.6s ease; +} + +.progress .bar + .bar { + -webkit-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -moz-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); +} + +.progress-striped .bar { + background-color: #149bdf; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + -moz-background-size: 40px 40px; + -o-background-size: 40px 40px; + background-size: 40px 40px; +} + +.progress.active .bar { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -moz-animation: progress-bar-stripes 2s linear infinite; + -ms-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} + +.progress-danger .bar, +.progress .bar-danger { + background-color: #dd514c; + background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); + background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0); +} + +.progress-danger.progress-striped .bar, +.progress-striped .bar-danger { + background-color: #ee5f5b; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-success .bar, +.progress .bar-success { + background-color: #5eb95e; + background-image: -moz-linear-gradient(top, #62c462, #57a957); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); + background-image: -webkit-linear-gradient(top, #62c462, #57a957); + background-image: -o-linear-gradient(top, #62c462, #57a957); + background-image: linear-gradient(to bottom, #62c462, #57a957); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0); +} + +.progress-success.progress-striped .bar, +.progress-striped .bar-success { + background-color: #62c462; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-info .bar, +.progress .bar-info { + background-color: #4bb1cf; + background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); + background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); + background-image: -o-linear-gradient(top, #5bc0de, #339bb9); + background-image: linear-gradient(to bottom, #5bc0de, #339bb9); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0); +} + +.progress-info.progress-striped .bar, +.progress-striped .bar-info { + background-color: #5bc0de; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-warning .bar, +.progress .bar-warning { + background-color: #faa732; + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); + background-image: -webkit-linear-gradient(top, #fbb450, #f89406); + background-image: -o-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(to bottom, #fbb450, #f89406); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); +} + +.progress-warning.progress-striped .bar, +.progress-striped .bar-warning { + background-color: #fbb450; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.accordion { + margin-bottom: 20px; +} + +.accordion-group { + margin-bottom: 2px; + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.accordion-heading { + border-bottom: 0; +} + +.accordion-heading .accordion-toggle { + display: block; + padding: 8px 15px; +} + +.accordion-toggle { + cursor: pointer; +} + +.accordion-inner { + padding: 9px 15px; + border-top: 1px solid #e5e5e5; +} + +.carousel { + position: relative; + margin-bottom: 20px; + line-height: 1; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: 0.6s ease-in-out left; + -moz-transition: 0.6s ease-in-out left; + -o-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} + +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + line-height: 1; +} + +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} + +.carousel-inner > .active { + left: 0; +} + +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} + +.carousel-inner > .next { + left: 100%; +} + +.carousel-inner > .prev { + left: -100%; +} + +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} + +.carousel-inner > .active.left { + left: -100%; +} + +.carousel-inner > .active.right { + left: 100%; +} + +.carousel-control { + position: absolute; + top: 40%; + left: 15px; + width: 40px; + height: 40px; + margin-top: -20px; + font-size: 60px; + font-weight: 100; + line-height: 30px; + color: #ffffff; + text-align: center; + background: #222222; + border: 3px solid #ffffff; + -webkit-border-radius: 23px; + -moz-border-radius: 23px; + border-radius: 23px; + opacity: 0.5; + filter: alpha(opacity=50); +} + +.carousel-control.right { + right: 15px; + left: auto; +} + +.carousel-control:hover, +.carousel-control:focus { + color: #ffffff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} + +.carousel-indicators { + position: absolute; + top: 15px; + right: 15px; + z-index: 5; + margin: 0; + list-style: none; +} + +.carousel-indicators li { + display: block; + float: left; + width: 10px; + height: 10px; + margin-left: 5px; + text-indent: -999px; + background-color: #ccc; + background-color: rgba(255, 255, 255, 0.25); + border-radius: 5px; +} + +.carousel-indicators .active { + background-color: #fff; +} + +.carousel-caption { + position: absolute; + right: 0; + bottom: 0; + left: 0; + padding: 15px; + background: #333333; + background: rgba(0, 0, 0, 0.75); +} + +.carousel-caption h4, +.carousel-caption p { + line-height: 20px; + color: #ffffff; +} + +.carousel-caption h4 { + margin: 0 0 5px; +} + +.carousel-caption p { + margin-bottom: 0; +} + +.hero-unit { + padding: 60px; + margin-bottom: 30px; + font-size: 18px; + font-weight: 200; + line-height: 30px; + color: inherit; + background-color: #eeeeee; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.hero-unit h1 { + margin-bottom: 0; + font-size: 60px; + line-height: 1; + letter-spacing: -1px; + color: inherit; +} + +.hero-unit li { + line-height: 30px; +} + +.pull-right { + float: right; +} + +.pull-left { + float: left; +} + +.hide { + display: none; +} + +.show { + display: block; +} + +.invisible { + visibility: hidden; +} + +.affix { + position: fixed; +} diff --git a/MovieFinder.Web/Content/css/bootstrap.min.css b/MovieFinder.Web/Content/css/bootstrap.min.css new file mode 100644 index 0000000000000000000000000000000000000000..df96c86485dd20f436bd7a79808cae66579501f8 --- /dev/null +++ b/MovieFinder.Web/Content/css/bootstrap.min.css @@ -0,0 +1,9 @@ +/*! + * Bootstrap v2.3.2 + * + * Copyright 2013 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:hover,a:focus{color:#005580;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}a.muted:hover,a.muted:focus{color:#808080}.text-warning{color:#c09853}a.text-warning:hover,a.text-warning:focus{color:#a47e3c}.text-error{color:#b94a48}a.text-error:hover,a.text-error:focus{color:#953b39}.text-info{color:#3a87ad}a.text-info:hover,a.text-info:focus{color:#2d6987}.text-success{color:#468847}a.text-success:hover,a.text-success:focus{color:#356635}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#f5f5f5}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#dff0d8}.table tbody tr.error>td{background-color:#f2dede}.table tbody tr.warning>td{background-color:#fcf8e3}.table tbody tr.info>td{background-color:#d9edf7}.table-hover tbody tr.success:hover>td{background-color:#d0e9c6}.table-hover tbody tr.error:hover>td{background-color:#ebcccc}.table-hover tbody tr.warning:hover>td{background-color:#faf2cc}.table-hover tbody tr.info:hover>td{background-color:#c4e3f3}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006dcc;*background-color:#04c;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary:active,.btn-primary.active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;*background-color:#f89406;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;*background-color:#bd362f;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffbd362f',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;*background-color:#51a351;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff51a351',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;*background-color:#2f96b4;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff2f96b4',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#363636;*background-color:#222;background-image:-moz-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444',endColorstr='#ff222222',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#08c;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#005580;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#04c}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert,.alert h4{color:#c09853}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success h4{color:#468847}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info h4{color:#3a87ad}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#08c}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#08c}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#08c;border-bottom-color:#08c}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#005580;border-bottom-color:#005580}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff2f2f2',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px;color:#777}.navbar-link{color:#777}.navbar-link:hover,.navbar-link:focus{color:#333}.navbar .divider-vertical{height:40px;margin:0 9px;border-right:1px solid #fff;border-left:1px solid #f2f2f2}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777;text-decoration:none;text-shadow:0 1px 0 #fff}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#333;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ededed;*background-color:#e5e5e5;background-image:-moz-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#e5e5e5));background-image:-webkit-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-o-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:linear-gradient(to bottom,#f2f2f2,#e5e5e5);background-repeat:repeat-x;border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#ffe5e5e5',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#e5e5e5;*background-color:#d9d9d9}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#ccc \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#555;background-color:#e5e5e5}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777;border-bottom-color:#777}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top,#222,#111);background-image:-webkit-gradient(linear,0 0,0 100%,from(#222),to(#111));background-image:-webkit-linear-gradient(top,#222,#111);background-image:-o-linear-gradient(top,#222,#111);background-image:linear-gradient(to bottom,#222,#111);background-repeat:repeat-x;border-color:#252525;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff111111',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#999}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#111}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#222;border-left-color:#111}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#111}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e0e0e;*background-color:#040404;background-image:-moz-linear-gradient(top,#151515,#040404);background-image:-webkit-gradient(linear,0 0,0 100%,from(#151515),to(#040404));background-image:-webkit-linear-gradient(top,#151515,#040404);background-image:-o-linear-gradient(top,#151515,#040404);background-image:linear-gradient(to bottom,#151515,#040404);background-repeat:repeat-x;border-color:#040404 #040404 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515',endColorstr='#ff040404',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#040404;*background-color:#000}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#08c;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f89406}.label-warning[href],.badge-warning[href]{background-color:#c67605}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress .bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed} diff --git a/MovieFinder.Web/Content/css/bqJRmLoxjIZOT74wHuJCHlQrgUNMWgYheMtxK8fm1bk.eot b/MovieFinder.Web/Content/css/bqJRmLoxjIZOT74wHuJCHlQrgUNMWgYheMtxK8fm1bk.eot new file mode 100644 index 0000000000000000000000000000000000000000..e1c7674430d0dc4eb95a461948412adcd3194385 Binary files /dev/null and b/MovieFinder.Web/Content/css/bqJRmLoxjIZOT74wHuJCHlQrgUNMWgYheMtxK8fm1bk.eot differ diff --git a/MovieFinder.Web/Content/css/cxhmU2aAHGSy03wjkHZumeF7aTfhOScbWjKU3LimXkA.ttf b/MovieFinder.Web/Content/css/cxhmU2aAHGSy03wjkHZumeF7aTfhOScbWjKU3LimXkA.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2d94f0629db751b8412a814df98fbe82f6fdd1df Binary files /dev/null and b/MovieFinder.Web/Content/css/cxhmU2aAHGSy03wjkHZumeF7aTfhOScbWjKU3LimXkA.ttf differ diff --git a/MovieFinder.Web/Content/css/font.css b/MovieFinder.Web/Content/css/font.css new file mode 100644 index 0000000000000000000000000000000000000000..86288b1ef42eec02a7fa5115c3ccaa54f141a978 --- /dev/null +++ b/MovieFinder.Web/Content/css/font.css @@ -0,0 +1,21 @@ +@font-face{font-family:'OpenSans'; +src:url('Z2KONHeZJz06LM8PViPLE8u0JbxmD0ODH20d1OW7Dyj.svg#OpenSansRegular') format('svg'); +src:url('HneVUreQiTIycRF0RRhYCSG38VOLuGRyzOUUDXpI0yy.eot?#iefix') format('embedded-opentype'),url('odTaAqBIh7FmzqwxfszheMxZL66z7AjJnSuCxRVxKDr.woff') format('woff'),url('KdcnxcdkykTdkBAp7tq0zmpvg1tHU5Wup4KbCJcRmOM.ttf') format('truetype'),url('HneVUreQiTIycRF0RRhYCSG38VOLuGRyzOUUDXpI0yy.eot?#iefix'); +font-weight:normal; +font-style:normal} +@font-face{font-family:'OpenSansBold'; +src:url('lMB4T5U6rWGuB28Dg6Fkj0Z85yLxt5BOYhEeYYFrE5s.svg#OpenSansBold') format('svg'); +src:url('bqJRmLoxjIZOT74wHuJCHlQrgUNMWgYheMtxK8fm1bk.eot?#iefix') format('embedded-opentype'),url('KyH7BRohMXDyEE1lvRMbBW845WmOJ3liv9Jj2KX5bR.woff') format('woff'),url('cxhmU2aAHGSy03wjkHZumeF7aTfhOScbWjKU3LimXkA.ttf') format('truetype'),url('bqJRmLoxjIZOT74wHuJCHlQrgUNMWgYheMtxK8fm1bk.eot?#iefix'); +font-weight:normal; +font-style:normal} +@font-face{font-family:'OpenSansLight'; +src:url('6cxAk0bUISppt54Ohogzi4EfecE3K8IqJeC2YIXqFsB.svg#OpenSansLight') format('svg'); +src:url('qWBFOkmtFOuGpFRFMYJXomadZGZsQgyfPtjaJH4LGwE.eot?#iefix') format('embedded-opentype'),url('p8xW5ik03xCyEgPbUIrPLtczopR8s1cj124HD9F8EJb.woff') format('woff'),url('JXUF6dGJ2AaE90C8kMIEfuWrN3iuhTfMBsVquriUunJ.ttf') format('truetype'),url('qWBFOkmtFOuGpFRFMYJXomadZGZsQgyfPtjaJH4LGwE.eot?#iefix'); +font-weight:normal; +font-style:normal} +p,li,a{font-family:'OpenSans',Arial,sans-serif;-webkit-font-smoothing:antialiased}p,li{font-size:13px;line-height:21px;-webkit-font-smoothing:antialiased}h1,h2,h3,h4,h5,h6{font-family:'OpenSansBold',Arial,sans-serif;-webkit-font-smoothing:antialiased}h4{line-height:29px}p.center{text-align:center}.hero{padding:30px 0px 60px;background:url('/Content/img/logo.jpeg') repeat center center;-webkit-background-size:cover;-moz-background-size:cover;background-size:cover;border-bottom:1px solid #222}.hero .marketing{margin:30px -20px 30px -20px}.hero .marketing h1,.hero .marketing h2,.hero .marketing h3,.hero .marketing h4,.hero .marketing h5,.hero .marketing h6{color:#fff;text-align:center;display:block;margin:30px auto}.hero .marketing h1.headline{color:#fff;font-family:'OpenSans',Arial,sans-serif;letter-spacing:2px;text-transform:uppercase;font-size:46px;line-height:62px}.hero .marketing p.call-to-action{text-align:center;margin-top:60px;float:none}.hero .marketing p.call-to-action a.btn{margin-right:20px}.hero div.row{margin-bottom:20px}.hero div.row:last-of-type{margin-bottom:0px}.block{padding:60px 0px;border-bottom:1px solid #ccc}.block h1,.block h2,.block h3,.block h4,.block h5,.block h6{text-transform:uppercase;letter-spacing:1px}.block h1.headline,.block h2.headline,.block h3.headline,.block h4.headline,.block h5.headline,.block h6.headline{text-align:center;display:block;margin:10px auto}.block img.highlight{display:block;margin:0px auto}.block p.headline-caption{text-align:center;display:block;margin:10px auto;font-size:13px;line-height:21px;color:#3c3c3c}.block div.row{margin-bottom:50px}.block div.row:last-of-type{margin-bottom:0px}.block.alt{background-color:#fafafa}.block.maps{padding:0px;margin-bottom:-6px}.block.maps .map{width:100%;height:350px}footer{padding:30px 0px;background-color:#222;color:#fff}footer .brand{font-family:'OpenSans',Arial,sans-serif;font-size:17px;color:#fff;text-transform:uppercase;letter-spacing:2px;padding:0;margin-top:10px;margin-left:0}.hero .navbar{margin:0 0 15px}.hero .navbar .brand{font-family:'OpenSans',Arial,sans-serif;font-size:17px;color:#fff;text-shadow:none;text-transform:uppercase;letter-spacing:2px;padding:0;margin-top:10px;margin-left:0}.hero .navbar .nav{float:right;display:inline-block}.hero .navbar .nav li{margin-left:15px}.hero .navbar .nav li a{font-family:'OpenSansBold',Arial,sans-serif;font-size:14px;line-height:23px;color:#888;text-shadow:none}.hero .navbar .nav li a:hover{color:#fff;text-shadow:none}.hero .navbar .nav li a.btn-bordered{margin-top:0px;border:2px solid #888;padding:4px 10px 4px;margin:4px 0px;background:transparent;background-color:transparent;background-image:none}.hero .navbar .nav li a.btn-bordered:hover{color:#fff;border:2px solid #fff}.hero .navbar .nav .active a{color:#fff;text-shadow:none;background-color:transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.hero .navbar .nav .active a:hover{color:#fff;text-shadow:none;background-color:transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.hero .navbar .navbar-inner{background:transparent;border:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.btn{border:none;background:#d8e0c6;background-image:none;color:#222;text-decoration:none;text-transform:uppercase;text-shadow:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;padding:7px 14px 7px;font-family:'OpenSansBold',Arial,sans-serif;font-size:13px;line-height:21px}.btn [class^="icon-"],.btn [class*=" icon-"]{margin-top:1px}.btn:hover,.btn:focus{background-color:#cdd7b6;color:#222}.btn:active,.btn.active{background-color:#b6c595;color:#222}.btn.btn-large{padding:15px 24px 15px;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;font-size:18px}.btn.btn-large.rounded{-webkit-border-radius:8px;-moz-border-radius:8px;border-radius:8px}.btn.rounded{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn.disabled,.btn[disabled]{background-color:#d8e0c6;color:#222}.btn.btn-blue{color:#fff;background-color:#69d2e7}.btn.btn-blue:hover,.btn.btn-blue:focus{background-color:#20adca}.btn.btn-blue:active,.btn.btn-blue.active{background-color:#19889e}.btn.btn-blue.disabled,.btn.btn-blue[disabled]{background-color:#7fd9eb}.btn.btn-green{color:#fff;background-color:#62c462}.btn.btn-green:hover,.btn.btn-green:focus{background-color:#348c34}.btn.btn-green:active,.btn.btn-green.active{background-color:#276627}.btn.btn-green.disabled,.btn.btn-green[disabled]{background-color:#75cb75}.btn.btn-red{color:#fff;background-color:#f02311}.btn.btn-red:hover,.btn.btn-red:focus{background-color:#921409}.btn.btn-red:active,.btn.btn-red.active{background-color:#620e06}.btn.btn-red.disabled,.btn.btn-red[disabled]{background-color:#f23929}.carousel{margin-bottom:0px}.carousel a.carousel-control{color:#222;background:transparent;-webkit-border-radius:0px;-moz-border-radius:0px;border-radius:0px;border:none;font-size:80px}.carousel .item a{color:#69d2e7}.carousel-caption{position:static;background:transparent;padding:0px}.carousel-caption h1,.carousel-caption h2,.carousel-caption h3,.carousel-caption h4,.carousel-caption h5,.carousel-caption h6{text-align:center;font-family:'OpenSans',Arial,sans-serif}.carousel .item>p,.carousel-caption p{font-size:13px;line-height:21px;text-shadow:none;color:#222;text-align:center}label,input,button,select,textarea{font-family:'OpenSans',Arial,sans-serif;font-size:13px;line-height:21px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{font-family:'OpenSans',Arial,sans-serif;font-size:13px;color:#3c3c3c;-webkit-border-radius:0px;-moz-border-radius:0px;border-radius:0px;height:26px}input,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],select,textarea{font-family:'OpenSans',Arial,sans-serif;font-size:13px;border-color:#ccc;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;height:26px}input:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,select:focus,textarea:focus{border-color:#999;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}input,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],input[type=file],textarea,select{font-family:'OpenSans',Arial,sans-serif;font-size:13px;height:26px;margin-bottom:0px}span.required{color:#f02311}label{font-weight:bold}form div.actions{margin-top:25px}@font-face{font-family:'icomoon'; +src:url('tpHCbMLhG80dLWmBz5T6DPyFgWgCxQR2giOjwtVVakr.eot'); +src:url('tpHCbMLhG80dLWmBz5T6DPyFgWgCxQR2giOjwtVVakr.eot?#iefix') format('embedded-opentype'),url('Eq7wALxAWtsfw2qbWlA1PxLPQhMKVmDrcdQXNRIn1lo.woff') format('woff'),url('vjldUzp0ifddnBOTiLqMmmOz6jn7ZfcKW7Dxeh5Fcvb.ttf') format('truetype'),url('2nyePEkdW5HxMOnEoy07B28FhYxkifnVXAptzCg5m16.svg#icomoon') format('svg'); +font-weight:normal; +font-style:normal} +[data-icon]:before{font-family:'icomoon';content:attr(data-icon);speak:none;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased}.icon-airplane,.icon-twitter,.icon-facebook,.icon-android,.icon-windows8,.icon-github,.icon-tumblr,.icon-google-plus,.icon-wordpress,.icon-pinterest,.icon-google-drive,.icon-envelope,.icon-apple{font-family:'icomoon';speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased}.icon-airplane:before{content:"\e000"}.icon-twitter:before{content:"\e001"}.icon-facebook:before{content:"\e002"}.icon-android:before{content:"\e003"}.icon-windows8:before{content:"\e004"}.icon-github:before{content:"\e005"}.icon-tumblr:before{content:"\e006"}.icon-google-plus:before{content:"\e008"}.icon-wordpress:before{content:"\e007"}.icon-pinterest:before{content:"\e009"}.icon-google-drive:before{content:"\e00a"}.icon-envelope:before{content:"\e00b"}.icon-apple:before{content:"\e00c"}@media (max-width:767px){body{padding-right:0px;padding-left:0px}.block .container,.hero .container,.marketing,footer{padding-right:20px;padding-left:20px}img{display:block;margin-left:auto;margin-right:auto}.hero .navbar-inner{padding-left:0px;padding-right:0px}.hero .navbar .nav li{margin-left:0px}.hero .navbar .nav li:first-child{margin-left:-15px}.hero .marketing p.call-to-action a.btn{margin-bottom:10px}.hero .marketing h1.headline{font-size:32px;line-height:46px}}@media (max-width:480px){.hero{padding-left:20px;padding-right:20px}.hero .navbar-inner,.hero .container{padding-left:0px;padding-right:0px;text-align:center}.hero .navbar .nav{margin:20px auto 0px;float:none}.hero .navbar .nav li{display:inline}.hero .brand{float:none}.hero .marketing p.call-to-action a.btn{margin-right:0px}.block.maps .map{height:0px}}body{font-size:13px}#hide-image{margin-top:40px;margin-bottom:-61px}#huge-phone{margin-bottom:40px}.glyph{font-size:2em;float:left;display:inline-block;margin:10px 25px 10px 0px} \ No newline at end of file diff --git a/MovieFinder.Web/Content/css/odTaAqBIh7FmzqwxfszheMxZL66z7AjJnSuCxRVxKDr.woff b/MovieFinder.Web/Content/css/odTaAqBIh7FmzqwxfszheMxZL66z7AjJnSuCxRVxKDr.woff new file mode 100644 index 0000000000000000000000000000000000000000..274664b28e8ed522cf1753f933ca085d8c8cc330 Binary files /dev/null and b/MovieFinder.Web/Content/css/odTaAqBIh7FmzqwxfszheMxZL66z7AjJnSuCxRVxKDr.woff differ diff --git a/MovieFinder.Web/Content/css/vjldUzp0ifddnBOTiLqMmmOz6jn7ZfcKW7Dxeh5Fcvb.ttf b/MovieFinder.Web/Content/css/vjldUzp0ifddnBOTiLqMmmOz6jn7ZfcKW7Dxeh5Fcvb.ttf new file mode 100644 index 0000000000000000000000000000000000000000..ab2799a8d68f581b71ee9c7d7886be73df622f5f Binary files /dev/null and b/MovieFinder.Web/Content/css/vjldUzp0ifddnBOTiLqMmmOz6jn7ZfcKW7Dxeh5Fcvb.ttf differ diff --git a/MovieFinder.Web/Content/img/ad_banner.jpg b/MovieFinder.Web/Content/img/ad_banner.jpg new file mode 100644 index 0000000000000000000000000000000000000000..40d26333cedbc54977c8f993c83564fed80d9d67 Binary files /dev/null and b/MovieFinder.Web/Content/img/ad_banner.jpg differ diff --git a/MovieFinder.Web/Content/img/app_main.png b/MovieFinder.Web/Content/img/app_main.png new file mode 100644 index 0000000000000000000000000000000000000000..89c69981752e0f87af557ae1700c4e169c7d8a30 --- /dev/null +++ b/MovieFinder.Web/Content/img/app_main.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a9469a84890835ec793947fce1c987ae30dfdcea71d9b16e62260f3e48e51d70 +size 435790 diff --git a/MovieFinder.Web/Content/img/favicon.ico b/MovieFinder.Web/Content/img/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..f90277bd968379797b770c677b8a8edad7038b83 Binary files /dev/null and b/MovieFinder.Web/Content/img/favicon.ico differ diff --git a/MovieFinder.Web/Content/img/filter.png b/MovieFinder.Web/Content/img/filter.png new file mode 100644 index 0000000000000000000000000000000000000000..d6ec186e62dceba823ea5ae0f82db76496fce4e4 --- /dev/null +++ b/MovieFinder.Web/Content/img/filter.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5079b702b6ddd405258ee0b917161d35c963347cfca1b8abd16edcd58a5903de +size 1857434 diff --git a/MovieFinder.Web/Content/img/glyphicons-halflings-white.png b/MovieFinder.Web/Content/img/glyphicons-halflings-white.png new file mode 100644 index 0000000000000000000000000000000000000000..3bf6484a29d8da269f9bc874b25493a45fae3bae Binary files /dev/null and b/MovieFinder.Web/Content/img/glyphicons-halflings-white.png differ diff --git a/MovieFinder.Web/Content/img/glyphicons-halflings.png b/MovieFinder.Web/Content/img/glyphicons-halflings.png new file mode 100644 index 0000000000000000000000000000000000000000..a9969993201f9cee63cf9f49217646347297b643 Binary files /dev/null and b/MovieFinder.Web/Content/img/glyphicons-halflings.png differ diff --git a/MovieFinder.Web/Content/img/logo.jpeg b/MovieFinder.Web/Content/img/logo.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..488362127e2ac051a57ad459b65f0ee9bc09a21c Binary files /dev/null and b/MovieFinder.Web/Content/img/logo.jpeg differ diff --git a/MovieFinder.Web/Content/img/malayalam.png b/MovieFinder.Web/Content/img/malayalam.png new file mode 100644 index 0000000000000000000000000000000000000000..b8ff8615153b7a0f044c1df574a0e409b979f049 --- /dev/null +++ b/MovieFinder.Web/Content/img/malayalam.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a7376b9b31837181f11b4e5bb347149edf8c788fa62d6d8d15f86a40d067008 +size 1544650 diff --git a/MovieFinder.Web/Content/img/suggestions.png b/MovieFinder.Web/Content/img/suggestions.png new file mode 100644 index 0000000000000000000000000000000000000000..0ca98d84305b5ce125ff589f36c56a6181e019d7 --- /dev/null +++ b/MovieFinder.Web/Content/img/suggestions.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08ad966d499654b5f76ce585a692c264bbf355c97e22c33a20a48c618ed75002 +size 467313 diff --git a/MovieFinder.Web/Content/img/systray.png b/MovieFinder.Web/Content/img/systray.png new file mode 100644 index 0000000000000000000000000000000000000000..ace0e56a2923d959aca68c9ef6d1bcb94b645dac --- /dev/null +++ b/MovieFinder.Web/Content/img/systray.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42181b0d34d52f40a8f8838875d5fc8d5c6a8b51c6f714789f265c4c1e3a6397 +size 1297167 diff --git a/MovieFinder.Web/Content/js/Custom.js b/MovieFinder.Web/Content/js/Custom.js new file mode 100644 index 0000000000000000000000000000000000000000..124365e2c952c40d5b8ca6d1cc7fe4c1453c4140 --- /dev/null +++ b/MovieFinder.Web/Content/js/Custom.js @@ -0,0 +1 @@ +!function ($) { $(function () { $.support.transition = (function () { var transitionEnd = (function () { var el = document.createElement("bootstrap"), transEndEventNames = { WebkitTransition: "webkitTransitionEnd", MozTransition: "transitionend", OTransition: "oTransitionEnd otransitionend", transition: "transitionend" }, name; for (name in transEndEventNames) { if (el.style[name] !== undefined) { return transEndEventNames[name] } } } ()); return transitionEnd && { end: transitionEnd} })() }) } (window.jQuery); !function ($) { var dismiss = '[data-dismiss="alert"]', Alert = function (el) { $(el).on("click", dismiss, this.close) }; Alert.prototype.close = function (e) { var $this = $(this), selector = $this.attr("data-target"), $parent; if (!selector) { selector = $this.attr("href"); selector = selector && selector.replace(/.*(?=#[^\s]*$)/, "") } $parent = $(selector); e && e.preventDefault(); $parent.length || ($parent = $this.hasClass("alert") ? $this : $this.parent()); $parent.trigger(e = $.Event("close")); if (e.isDefaultPrevented()) { return } $parent.removeClass("in"); function removeElement() { $parent.trigger("closed").remove() } $.support.transition && $parent.hasClass("fade") ? $parent.on($.support.transition.end, removeElement) : removeElement() }; var old = $.fn.alert; $.fn.alert = function (option) { return this.each(function () { var $this = $(this), data = $this.data("alert"); if (!data) { $this.data("alert", (data = new Alert(this))) } if (typeof option == "string") { data[option].call($this) } }) }; $.fn.alert.Constructor = Alert; $.fn.alert.noConflict = function () { $.fn.alert = old; return this }; $(document).on("click.alert.data-api", dismiss, Alert.prototype.close) } (window.jQuery); !function ($) { var Button = function (element, options) { this.$element = $(element); this.options = $.extend({}, $.fn.button.defaults, options) }; Button.prototype.setState = function (state) { var d = "disabled", $el = this.$element, data = $el.data(), val = $el.is("input") ? "val" : "html"; state = state + "Text"; data.resetText || $el.data("resetText", $el[val]()); $el[val](data[state] || this.options[state]); setTimeout(function () { state == "loadingText" ? $el.addClass(d).attr(d, d) : $el.removeClass(d).removeAttr(d) }, 0) }; Button.prototype.toggle = function () { var $parent = this.$element.closest('[data-toggle="buttons-radio"]'); $parent && $parent.find(".active").removeClass("active"); this.$element.toggleClass("active") }; var old = $.fn.button; $.fn.button = function (option) { return this.each(function () { var $this = $(this), data = $this.data("button"), options = typeof option == "object" && option; if (!data) { $this.data("button", (data = new Button(this, options))) } if (option == "toggle") { data.toggle() } else { if (option) { data.setState(option) } } }) }; $.fn.button.defaults = { loadingText: "loading..." }; $.fn.button.Constructor = Button; $.fn.button.noConflict = function () { $.fn.button = old; return this }; $(document).on("click.button.data-api", "[data-toggle^=button]", function (e) { var $btn = $(e.target); if (!$btn.hasClass("btn")) { $btn = $btn.closest(".btn") } $btn.button("toggle") }) } (window.jQuery); !function ($) { var Carousel = function (element, options) { this.$element = $(element); this.$indicators = this.$element.find(".carousel-indicators"); this.options = options; this.options.pause == "hover" && this.$element.on("mouseenter", $.proxy(this.pause, this)).on("mouseleave", $.proxy(this.cycle, this)) }; Carousel.prototype = { cycle: function (e) { if (!e) { this.paused = false } if (this.interval) { clearInterval(this.interval) } this.options.interval && !this.paused && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)); return this }, getActiveIndex: function () { this.$active = this.$element.find(".item.active"); this.$items = this.$active.parent().children(); return this.$items.index(this.$active) }, to: function (pos) { var activeIndex = this.getActiveIndex(), that = this; if (pos > (this.$items.length - 1) || pos < 0) { return } if (this.sliding) { return this.$element.one("slid", function () { that.to(pos) }) } if (activeIndex == pos) { return this.pause().cycle() } return this.slide(pos > activeIndex ? "next" : "prev", $(this.$items[pos])) }, pause: function (e) { if (!e) { this.paused = true } if (this.$element.find(".next, .prev").length && $.support.transition.end) { this.$element.trigger($.support.transition.end); this.cycle(true) } clearInterval(this.interval); this.interval = null; return this }, next: function () { if (this.sliding) { return } return this.slide("next") }, prev: function () { if (this.sliding) { return } return this.slide("prev") }, slide: function (type, next) { var $active = this.$element.find(".item.active"), $next = next || $active[type](), isCycling = this.interval, direction = type == "next" ? "left" : "right", fallback = type == "next" ? "first" : "last", that = this, e; this.sliding = true; isCycling && this.pause(); $next = $next.length ? $next : this.$element.find(".item")[fallback](); e = $.Event("slide", { relatedTarget: $next[0], direction: direction }); if ($next.hasClass("active")) { return } if (this.$indicators.length) { this.$indicators.find(".active").removeClass("active"); this.$element.one("slid", function () { var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]); $nextIndicator && $nextIndicator.addClass("active") }) } if ($.support.transition && this.$element.hasClass("slide")) { this.$element.trigger(e); if (e.isDefaultPrevented()) { return } $next.addClass(type); $next[0].offsetWidth; $active.addClass(direction); $next.addClass(direction); this.$element.one($.support.transition.end, function () { $next.removeClass([type, direction].join(" ")).addClass("active"); $active.removeClass(["active", direction].join(" ")); that.sliding = false; setTimeout(function () { that.$element.trigger("slid") }, 0) }) } else { this.$element.trigger(e); if (e.isDefaultPrevented()) { return } $active.removeClass("active"); $next.addClass("active"); this.sliding = false; this.$element.trigger("slid") } isCycling && this.cycle(); return this } }; var old = $.fn.carousel; $.fn.carousel = function (option) { return this.each(function () { var $this = $(this), data = $this.data("carousel"), options = $.extend({}, $.fn.carousel.defaults, typeof option == "object" && option), action = typeof option == "string" ? option : options.slide; if (!data) { $this.data("carousel", (data = new Carousel(this, options))) } if (typeof option == "number") { data.to(option) } else { if (action) { data[action]() } else { if (options.interval) { data.pause().cycle() } } } }) }; $.fn.carousel.defaults = { interval: 5000, pause: "hover" }; $.fn.carousel.Constructor = Carousel; $.fn.carousel.noConflict = function () { $.fn.carousel = old; return this }; $(document).on("click.carousel.data-api", "[data-slide], [data-slide-to]", function (e) { var $this = $(this), href, $target = $($this.attr("data-target") || (href = $this.attr("href")) && href.replace(/.*(?=#[^\s]+$)/, "")), options = $.extend({}, $target.data(), $this.data()), slideIndex; $target.carousel(options); if (slideIndex = $this.attr("data-slide-to")) { $target.data("carousel").pause().to(slideIndex).cycle() } e.preventDefault() }) } (window.jQuery); !function ($) { var Collapse = function (element, options) { this.$element = $(element); this.options = $.extend({}, $.fn.collapse.defaults, options); if (this.options.parent) { this.$parent = $(this.options.parent) } this.options.toggle && this.toggle() }; Collapse.prototype = { constructor: Collapse, dimension: function () { var hasWidth = this.$element.hasClass("width"); return hasWidth ? "width" : "height" }, show: function () { var dimension, scroll, actives, hasData; if (this.transitioning || this.$element.hasClass("in")) { return } dimension = this.dimension(); scroll = $.camelCase(["scroll", dimension].join("-")); actives = this.$parent && this.$parent.find("> .accordion-group > .in"); if (actives && actives.length) { hasData = actives.data("collapse"); if (hasData && hasData.transitioning) { return } actives.collapse("hide"); hasData || actives.data("collapse", null) } this.$element[dimension](0); this.transition("addClass", $.Event("show"), "shown"); $.support.transition && this.$element[dimension](this.$element[0][scroll]) }, hide: function () { var dimension; if (this.transitioning || !this.$element.hasClass("in")) { return } dimension = this.dimension(); this.reset(this.$element[dimension]()); this.transition("removeClass", $.Event("hide"), "hidden"); this.$element[dimension](0) }, reset: function (size) { var dimension = this.dimension(); this.$element.removeClass("collapse")[dimension](size || "auto")[0].offsetWidth; this.$element[size !== null ? "addClass" : "removeClass"]("collapse"); return this }, transition: function (method, startEvent, completeEvent) { var that = this, complete = function () { if (startEvent.type == "show") { that.reset() } that.transitioning = 0; that.$element.trigger(completeEvent) }; this.$element.trigger(startEvent); if (startEvent.isDefaultPrevented()) { return } this.transitioning = 1; this.$element[method]("in"); $.support.transition && this.$element.hasClass("collapse") ? this.$element.one($.support.transition.end, complete) : complete() }, toggle: function () { this[this.$element.hasClass("in") ? "hide" : "show"]() } }; var old = $.fn.collapse; $.fn.collapse = function (option) { return this.each(function () { var $this = $(this), data = $this.data("collapse"), options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == "object" && option); if (!data) { $this.data("collapse", (data = new Collapse(this, options))) } if (typeof option == "string") { data[option]() } }) }; $.fn.collapse.defaults = { toggle: true }; $.fn.collapse.Constructor = Collapse; $.fn.collapse.noConflict = function () { $.fn.collapse = old; return this }; $(document).on("click.collapse.data-api", "[data-toggle=collapse]", function (e) { var $this = $(this), href, target = $this.attr("data-target") || e.preventDefault() || (href = $this.attr("href")) && href.replace(/.*(?=#[^\s]+$)/, ""), option = $(target).data("collapse") ? "toggle" : $this.data(); $this[$(target).hasClass("in") ? "addClass" : "removeClass"]("collapsed"); $(target).collapse(option) }) } (window.jQuery); !function ($) { var toggle = "[data-toggle=dropdown]", Dropdown = function (element) { var $el = $(element).on("click.dropdown.data-api", this.toggle); $("html").on("click.dropdown.data-api", function () { $el.parent().removeClass("open") }) }; Dropdown.prototype = { constructor: Dropdown, toggle: function (e) { var $this = $(this), $parent, isActive; if ($this.is(".disabled, :disabled")) { return } $parent = getParent($this); isActive = $parent.hasClass("open"); clearMenus(); if (!isActive) { $parent.toggleClass("open") } $this.focus(); return false }, keydown: function (e) { var $this, $items, $active, $parent, isActive, index; if (!/(38|40|27)/.test(e.keyCode)) { return } $this = $(this); e.preventDefault(); e.stopPropagation(); if ($this.is(".disabled, :disabled")) { return } $parent = getParent($this); isActive = $parent.hasClass("open"); if (!isActive || (isActive && e.keyCode == 27)) { if (e.which == 27) { $parent.find(toggle).focus() } return $this.click() } $items = $("[role=menu] li:not(.divider):visible a", $parent); if (!$items.length) { return } index = $items.index($items.filter(":focus")); if (e.keyCode == 38 && index > 0) { index-- } if (e.keyCode == 40 && index < $items.length - 1) { index++ } if (! ~index) { index = 0 } $items.eq(index).focus() } }; function clearMenus() { $(toggle).each(function () { getParent($(this)).removeClass("open") }) } function getParent($this) { var selector = $this.attr("data-target"), $parent; if (!selector) { selector = $this.attr("href"); selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, "") } $parent = selector && $(selector); if (!$parent || !$parent.length) { $parent = $this.parent() } return $parent } var old = $.fn.dropdown; $.fn.dropdown = function (option) { return this.each(function () { var $this = $(this), data = $this.data("dropdown"); if (!data) { $this.data("dropdown", (data = new Dropdown(this))) } if (typeof option == "string") { data[option].call($this) } }) }; $.fn.dropdown.Constructor = Dropdown; $.fn.dropdown.noConflict = function () { $.fn.dropdown = old; return this }; $(document).on("click.dropdown.data-api", clearMenus).on("click.dropdown.data-api", ".dropdown form", function (e) { e.stopPropagation() }).on("click.dropdown-menu", function (e) { e.stopPropagation() }).on("click.dropdown.data-api", toggle, Dropdown.prototype.toggle).on("keydown.dropdown.data-api", toggle + ", [role=menu]", Dropdown.prototype.keydown) } (window.jQuery); !function ($) { var Modal = function (element, options) { this.options = options; this.$element = $(element).delegate('[data-dismiss="modal"]', "click.dismiss.modal", $.proxy(this.hide, this)); this.options.remote && this.$element.find(".modal-body").load(this.options.remote) }; Modal.prototype = { constructor: Modal, toggle: function () { return this[!this.isShown ? "show" : "hide"]() }, show: function () { var that = this, e = $.Event("show"); this.$element.trigger(e); if (this.isShown || e.isDefaultPrevented()) { return } this.isShown = true; this.escape(); this.backdrop(function () { var transition = $.support.transition && that.$element.hasClass("fade"); if (!that.$element.parent().length) { that.$element.appendTo(document.body) } that.$element.show(); if (transition) { that.$element[0].offsetWidth } that.$element.addClass("in").attr("aria-hidden", false); that.enforceFocus(); transition ? that.$element.one($.support.transition.end, function () { that.$element.focus().trigger("shown") }) : that.$element.focus().trigger("shown") }) }, hide: function (e) { e && e.preventDefault(); var that = this; e = $.Event("hide"); this.$element.trigger(e); if (!this.isShown || e.isDefaultPrevented()) { return } this.isShown = false; this.escape(); $(document).off("focusin.modal"); this.$element.removeClass("in").attr("aria-hidden", true); $.support.transition && this.$element.hasClass("fade") ? this.hideWithTransition() : this.hideModal() }, enforceFocus: function () { var that = this; $(document).on("focusin.modal", function (e) { if (that.$element[0] !== e.target && !that.$element.has(e.target).length) { that.$element.focus() } }) }, escape: function () { var that = this; if (this.isShown && this.options.keyboard) { this.$element.on("keyup.dismiss.modal", function (e) { e.which == 27 && that.hide() }) } else { if (!this.isShown) { this.$element.off("keyup.dismiss.modal") } } }, hideWithTransition: function () { var that = this, timeout = setTimeout(function () { that.$element.off($.support.transition.end); that.hideModal() }, 500); this.$element.one($.support.transition.end, function () { clearTimeout(timeout); that.hideModal() }) }, hideModal: function () { var that = this; this.$element.hide(); this.backdrop(function () { that.removeBackdrop(); that.$element.trigger("hidden") }) }, removeBackdrop: function () { this.$backdrop && this.$backdrop.remove(); this.$backdrop = null }, backdrop: function (callback) { var that = this, animate = this.$element.hasClass("fade") ? "fade" : ""; if (this.isShown && this.options.backdrop) { var doAnimate = $.support.transition && animate; this.$backdrop = $('
  • ', minLength: 1 }; $.fn.typeahead.Constructor = Typeahead; $.fn.typeahead.noConflict = function () { $.fn.typeahead = old; return this }; $(document).on("focus.typeahead.data-api", '[data-provide="typeahead"]', function (e) { var $this = $(this); if ($this.data("typeahead")) { return } $this.typeahead($this.data()) }) } (window.jQuery); !function ($) { var Affix = function (element, options) { this.options = $.extend({}, $.fn.affix.defaults, options); this.$window = $(window).on("scroll.affix.data-api", $.proxy(this.checkPosition, this)).on("click.affix.data-api", $.proxy(function () { setTimeout($.proxy(this.checkPosition, this), 1) }, this)); this.$element = $(element); this.checkPosition() }; Affix.prototype.checkPosition = function () { if (!this.$element.is(":visible")) { return } var scrollHeight = $(document).height(), scrollTop = this.$window.scrollTop(), position = this.$element.offset(), offset = this.options.offset, offsetBottom = offset.bottom, offsetTop = offset.top, reset = "affix affix-top affix-bottom", affix; if (typeof offset != "object") { offsetBottom = offsetTop = offset } if (typeof offsetTop == "function") { offsetTop = offset.top() } if (typeof offsetBottom == "function") { offsetBottom = offset.bottom() } affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? false : offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? "bottom" : offsetTop != null && scrollTop <= offsetTop ? "top" : false; if (this.affixed === affix) { return } this.affixed = affix; this.unpin = affix == "bottom" ? position.top - scrollTop : null; this.$element.removeClass(reset).addClass("affix" + (affix ? "-" + affix : "")) }; var old = $.fn.affix; $.fn.affix = function (option) { return this.each(function () { var $this = $(this), data = $this.data("affix"), options = typeof option == "object" && option; if (!data) { $this.data("affix", (data = new Affix(this, options))) } if (typeof option == "string") { data[option]() } }) }; $.fn.affix.Constructor = Affix; $.fn.affix.defaults = { offset: 0 }; $.fn.affix.noConflict = function () { $.fn.affix = old; return this }; $(window).on("load", function () { $('[data-spy="affix"]').each(function () { var $spy = $(this), data = $spy.data(); data.offset = data.offset || {}; data.offsetBottom && (data.offset.bottom = data.offsetBottom); data.offsetTop && (data.offset.top = data.offsetTop); $spy.affix(data) }) }) } (window.jQuery); \ No newline at end of file diff --git a/MovieFinder.Web/Content/js/bootstrap.js b/MovieFinder.Web/Content/js/bootstrap.js new file mode 100644 index 0000000000000000000000000000000000000000..44109f62d47997d0d3ee4c65384cf8fac5dfc026 --- /dev/null +++ b/MovieFinder.Web/Content/js/bootstrap.js @@ -0,0 +1,2280 @@ +/* =================================================== + * bootstrap-transition.js v2.3.2 + * http://getbootstrap.com/2.3.2/javascript.html#transitions + * =================================================== + * Copyright 2013 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* CSS TRANSITION SUPPORT (http://www.modernizr.com/) + * ======================================================= */ + + $(function () { + + $.support.transition = (function () { + + var transitionEnd = (function () { + + var el = document.createElement('bootstrap') + , transEndEventNames = { + 'WebkitTransition' : 'webkitTransitionEnd' + , 'MozTransition' : 'transitionend' + , 'OTransition' : 'oTransitionEnd otransitionend' + , 'transition' : 'transitionend' + } + , name + + for (name in transEndEventNames){ + if (el.style[name] !== undefined) { + return transEndEventNames[name] + } + } + + }()) + + return transitionEnd && { + end: transitionEnd + } + + })() + + }) + +}(window.jQuery);/* ========================================================== + * bootstrap-alert.js v2.3.2 + * http://getbootstrap.com/2.3.2/javascript.html#alerts + * ========================================================== + * Copyright 2013 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* ALERT CLASS DEFINITION + * ====================== */ + + var dismiss = '[data-dismiss="alert"]' + , Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.prototype.close = function (e) { + var $this = $(this) + , selector = $this.attr('data-target') + , $parent + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 + } + + $parent = $(selector) + + e && e.preventDefault() + + $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent()) + + $parent.trigger(e = $.Event('close')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + $parent + .trigger('closed') + .remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent.on($.support.transition.end, removeElement) : + removeElement() + } + + + /* ALERT PLUGIN DEFINITION + * ======================= */ + + var old = $.fn.alert + + $.fn.alert = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('alert') + if (!data) $this.data('alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + $.fn.alert.Constructor = Alert + + + /* ALERT NO CONFLICT + * ================= */ + + $.fn.alert.noConflict = function () { + $.fn.alert = old + return this + } + + + /* ALERT DATA-API + * ============== */ + + $(document).on('click.alert.data-api', dismiss, Alert.prototype.close) + +}(window.jQuery);/* ============================================================ + * bootstrap-button.js v2.3.2 + * http://getbootstrap.com/2.3.2/javascript.html#buttons + * ============================================================ + * Copyright 2013 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* BUTTON PUBLIC CLASS DEFINITION + * ============================== */ + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, $.fn.button.defaults, options) + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + , $el = this.$element + , data = $el.data() + , val = $el.is('input') ? 'val' : 'html' + + state = state + 'Text' + data.resetText || $el.data('resetText', $el[val]()) + + $el[val](data[state] || this.options[state]) + + // push to event loop to allow forms to submit + setTimeout(function () { + state == 'loadingText' ? + $el.addClass(d).attr(d, d) : + $el.removeClass(d).removeAttr(d) + }, 0) + } + + Button.prototype.toggle = function () { + var $parent = this.$element.closest('[data-toggle="buttons-radio"]') + + $parent && $parent + .find('.active') + .removeClass('active') + + this.$element.toggleClass('active') + } + + + /* BUTTON PLUGIN DEFINITION + * ======================== */ + + var old = $.fn.button + + $.fn.button = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('button') + , options = typeof option == 'object' && option + if (!data) $this.data('button', (data = new Button(this, options))) + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + $.fn.button.defaults = { + loadingText: 'loading...' + } + + $.fn.button.Constructor = Button + + + /* BUTTON NO CONFLICT + * ================== */ + + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } + + + /* BUTTON DATA-API + * =============== */ + + $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) { + var $btn = $(e.target) + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') + $btn.button('toggle') + }) + +}(window.jQuery);/* ========================================================== + * bootstrap-carousel.js v2.3.2 + * http://getbootstrap.com/2.3.2/javascript.html#carousel + * ========================================================== + * Copyright 2013 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* CAROUSEL CLASS DEFINITION + * ========================= */ + + var Carousel = function (element, options) { + this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.options.pause == 'hover' && this.$element + .on('mouseenter', $.proxy(this.pause, this)) + .on('mouseleave', $.proxy(this.cycle, this)) + } + + Carousel.prototype = { + + cycle: function (e) { + if (!e) this.paused = false + if (this.interval) clearInterval(this.interval); + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + return this + } + + , getActiveIndex: function () { + this.$active = this.$element.find('.item.active') + this.$items = this.$active.parent().children() + return this.$items.index(this.$active) + } + + , to: function (pos) { + var activeIndex = this.getActiveIndex() + , that = this + + if (pos > (this.$items.length - 1) || pos < 0) return + + if (this.sliding) { + return this.$element.one('slid', function () { + that.to(pos) + }) + } + + if (activeIndex == pos) { + return this.pause().cycle() + } + + return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) + } + + , pause: function (e) { + if (!e) this.paused = true + if (this.$element.find('.next, .prev').length && $.support.transition.end) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + clearInterval(this.interval) + this.interval = null + return this + } + + , next: function () { + if (this.sliding) return + return this.slide('next') + } + + , prev: function () { + if (this.sliding) return + return this.slide('prev') + } + + , slide: function (type, next) { + var $active = this.$element.find('.item.active') + , $next = next || $active[type]() + , isCycling = this.interval + , direction = type == 'next' ? 'left' : 'right' + , fallback = type == 'next' ? 'first' : 'last' + , that = this + , e + + this.sliding = true + + isCycling && this.pause() + + $next = $next.length ? $next : this.$element.find('.item')[fallback]() + + e = $.Event('slide', { + relatedTarget: $next[0] + , direction: direction + }) + + if ($next.hasClass('active')) return + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + this.$element.one('slid', function () { + var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) + $nextIndicator && $nextIndicator.addClass('active') + }) + } + + if ($.support.transition && this.$element.hasClass('slide')) { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + this.$element.one($.support.transition.end, function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { that.$element.trigger('slid') }, 0) + }) + } else { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger('slid') + } + + isCycling && this.cycle() + + return this + } + + } + + + /* CAROUSEL PLUGIN DEFINITION + * ========================== */ + + var old = $.fn.carousel + + $.fn.carousel = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('carousel') + , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option) + , action = typeof option == 'string' ? option : options.slide + if (!data) $this.data('carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + $.fn.carousel.defaults = { + interval: 5000 + , pause: 'hover' + } + + $.fn.carousel.Constructor = Carousel + + + /* CAROUSEL NO CONFLICT + * ==================== */ + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + /* CAROUSEL DATA-API + * ================= */ + + $(document).on('click.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { + var $this = $(this), href + , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 + , options = $.extend({}, $target.data(), $this.data()) + , slideIndex + + $target.carousel(options) + + if (slideIndex = $this.attr('data-slide-to')) { + $target.data('carousel').pause().to(slideIndex).cycle() + } + + e.preventDefault() + }) + +}(window.jQuery);/* ============================================================= + * bootstrap-collapse.js v2.3.2 + * http://getbootstrap.com/2.3.2/javascript.html#collapse + * ============================================================= + * Copyright 2013 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* COLLAPSE PUBLIC CLASS DEFINITION + * ================================ */ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, $.fn.collapse.defaults, options) + + if (this.options.parent) { + this.$parent = $(this.options.parent) + } + + this.options.toggle && this.toggle() + } + + Collapse.prototype = { + + constructor: Collapse + + , dimension: function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + , show: function () { + var dimension + , scroll + , actives + , hasData + + if (this.transitioning || this.$element.hasClass('in')) return + + dimension = this.dimension() + scroll = $.camelCase(['scroll', dimension].join('-')) + actives = this.$parent && this.$parent.find('> .accordion-group > .in') + + if (actives && actives.length) { + hasData = actives.data('collapse') + if (hasData && hasData.transitioning) return + actives.collapse('hide') + hasData || actives.data('collapse', null) + } + + this.$element[dimension](0) + this.transition('addClass', $.Event('show'), 'shown') + $.support.transition && this.$element[dimension](this.$element[0][scroll]) + } + + , hide: function () { + var dimension + if (this.transitioning || !this.$element.hasClass('in')) return + dimension = this.dimension() + this.reset(this.$element[dimension]()) + this.transition('removeClass', $.Event('hide'), 'hidden') + this.$element[dimension](0) + } + + , reset: function (size) { + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + [dimension](size || 'auto') + [0].offsetWidth + + this.$element[size !== null ? 'addClass' : 'removeClass']('collapse') + + return this + } + + , transition: function (method, startEvent, completeEvent) { + var that = this + , complete = function () { + if (startEvent.type == 'show') that.reset() + that.transitioning = 0 + that.$element.trigger(completeEvent) + } + + this.$element.trigger(startEvent) + + if (startEvent.isDefaultPrevented()) return + + this.transitioning = 1 + + this.$element[method]('in') + + $.support.transition && this.$element.hasClass('collapse') ? + this.$element.one($.support.transition.end, complete) : + complete() + } + + , toggle: function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + } + + + /* COLLAPSE PLUGIN DEFINITION + * ========================== */ + + var old = $.fn.collapse + + $.fn.collapse = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('collapse') + , options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option) + if (!data) $this.data('collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.collapse.defaults = { + toggle: true + } + + $.fn.collapse.Constructor = Collapse + + + /* COLLAPSE NO CONFLICT + * ==================== */ + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + /* COLLAPSE DATA-API + * ================= */ + + $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) { + var $this = $(this), href + , target = $this.attr('data-target') + || e.preventDefault() + || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 + , option = $(target).data('collapse') ? 'toggle' : $this.data() + $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed') + $(target).collapse(option) + }) + +}(window.jQuery);/* ============================================================ + * bootstrap-dropdown.js v2.3.2 + * http://getbootstrap.com/2.3.2/javascript.html#dropdowns + * ============================================================ + * Copyright 2013 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* DROPDOWN CLASS DEFINITION + * ========================= */ + + var toggle = '[data-toggle=dropdown]' + , Dropdown = function (element) { + var $el = $(element).on('click.dropdown.data-api', this.toggle) + $('html').on('click.dropdown.data-api', function () { + $el.parent().removeClass('open') + }) + } + + Dropdown.prototype = { + + constructor: Dropdown + + , toggle: function (e) { + var $this = $(this) + , $parent + , isActive + + if ($this.is('.disabled, :disabled')) return + + $parent = getParent($this) + + isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement) { + // if mobile we we use a backdrop because click events don't delegate + $('