From 33583523034014c1bf944b001308dc1cfbcb56bd Mon Sep 17 00:00:00 2001 From: RKrom Date: Sun, 21 Oct 2012 15:19:59 +0000 Subject: [PATCH] Preparations for RC5, removed all the non 1.0 plug-ins out and the 1.0 in. git-svn-id: http://svn.code.sf.net/p/greenshot/code/trunk@2184 7dccd23d-a4a3-4e1f-8c07-b4c1b4018ab4 --- Greenshot/AssemblyInfo.cs.template | 2 +- Greenshot/Greenshot.sln | 8 +- GreenshotBoxPlugin/Box.png | Bin 0 -> 571 bytes .../BoxConfiguration.cs | 34 +- GreenshotBoxPlugin/BoxCredentials.cs | 31 ++ GreenshotBoxPlugin/BoxCredentials.private.cs | 31 ++ .../BoxDestination.cs | 33 +- .../BoxPlugin.cs | 90 +++-- .../BoxPlugin.resx | 13 +- GreenshotBoxPlugin/BoxUtils.cs | 132 ++++++++ .../Forms/BoxForm.cs | 15 +- .../Forms/SettingsForm.Designer.cs | 67 ++-- .../Forms/SettingsForm.cs | 19 +- .../GreenshotBoxPlugin.csproj | 77 +++-- .../LanguageKeys.cs | 12 +- .../Languages/language_Boxplugin-en-US.xml | 32 ++ .../Languages/language_Boxplugin-fr-FR.xml | 14 + .../Languages/language_Boxplugin-ru-RU.xml | 32 ++ .../Languages/language_Boxplugin-uk-UA.xml | 14 + .../Languages/language_Boxplugin-zh-CN.xml | 14 + .../Properties/AssemblyInfo.cs.template | 16 +- GreenshotBoxPlugin/app.config | 19 ++ .../Properties/AssemblyInfo.cs.template | 2 +- GreenshotDropboxPlugin/DropBoxCredentials.cs | 31 ++ .../DropBoxCredentials.private.cs | 9 + GreenshotDropboxPlugin/Dropbox.gif | Bin 0 -> 2185 bytes .../DropboxDestination.cs | 43 +-- .../DropboxPlugin.cs | 88 +++-- .../DropboxPlugin.resx | 258 +++++++-------- .../DropboxPluginConfiguration.cs | 43 +-- GreenshotDropboxPlugin/DropboxUtils.cs | 80 +++++ .../Forms/DropboxForm.cs | 13 +- .../Forms/SettingsForm.Designer.cs | 98 +++--- .../Forms/SettingsForm.cs | 16 +- .../GreenshotDropboxPlugin.csproj | 108 ++++++ .../LanguageKeys.cs | 19 +- .../language_dropboxplugin-en-US.xml | 35 ++ .../language_dropboxplugin-fr-FR.xml | 14 + .../language_dropboxplugin-ru-RU.xml | 35 ++ .../language_dropboxplugin-uk-UA.xml | 14 + .../language_dropboxplugin-zh-CN.xml | 14 + .../Properties/AssemblyInfo.cs.template | 16 +- .../Properties/AssemblyInfo.cs.template | 2 +- .../FlickrConfiguration.cs | 73 +++-- GreenshotFlickrPlugin/FlickrCredentials.cs | 31 ++ .../FlickrCredentials.private.cs | 8 + GreenshotFlickrPlugin/FlickrDestination.cs | 64 ++++ .../FlickrPlugin.cs | 104 +++--- GreenshotFlickrPlugin/FlickrPlugin.resx | 124 +++++++ GreenshotFlickrPlugin/FlickrUtils.cs | 129 ++++++++ .../Forms/FlickrForm.cs | 14 +- .../Forms/SettingsForm.Designer.cs | 244 ++++++++++++++ .../Forms/SettingsForm.cs | 16 +- .../GreenshotFlickrPlugin.csproj | 88 ++--- .../LanguageKeys.cs | 21 +- .../Languages/language_flickrplugin-en-US.xml | 47 +++ .../Languages/language_flickrplugin-fr-FR.xml | 19 ++ .../Languages/language_flickrplugin-it-IT.xml | 47 +++ .../Languages/language_flickrplugin-ru-RU.xml | 40 +++ .../Languages/language_flickrplugin-uk-UA.xml | 19 ++ .../Languages/language_flickrplugin-zh-CN.xml | 19 ++ .../Properties/AssemblyInfo.cs.template | 19 +- GreenshotFlickrPlugin/flickr.png | Bin 0 -> 776 bytes .../Properties/AssemblyInfo.cs.template | 2 +- GreenshotImmioPlugin/ImmioUtils.cs | 65 ---- .../Properties/AssemblyInfo.cs.template | 2 +- .../Browser-Plugins/Chrome/background.html | 9 - .../Browser-Plugins/Chrome/background.js | 29 -- .../Browser-Plugins/Chrome/greenshot.png | Bin 8020 -> 0 bytes .../Chrome/jquery-1.7.1.min.js | 4 - .../Browser-Plugins/Chrome/manifest.json | 17 - .../Browser-Plugins/Firefox/greenshot.xpi | Bin 45797 -> 0 bytes .../Firefox/greenshot/chrome.manifest | 3 - .../greenshot/content/jquery-1.7.1.min.js | 4 - .../Firefox/greenshot/content/overlay.js | 181 ---------- .../Firefox/greenshot/content/overlay.xul | 14 - .../defaults/preferences/greenshot.js | 4 - .../Firefox/greenshot/install.rdf | 28 -- .../Firefox/greenshot/skin/greenshot16.png | Bin 1115 -> 0 bytes .../Firefox/greenshot/skin/greenshot90.png | Bin 8020 -> 0 bytes .../GreenshotNetworkImportPlugin.csproj | 46 --- GreenshotNetworkImportPlugin/HTTPReceiver.cs | 152 --------- .../NetworkImportPlugin.cs | 105 ------ .../NetworkImportPluginConfiguration.cs | 37 --- .../Properties/AssemblyInfo.cs.template | 2 +- .../Communicator.cs | 187 ----------- .../CommunicatorConversation.cs | 84 ----- .../DLL/CommunicatorAPI.dll | Bin 75112 -> 0 bytes .../DLL/CommunicatorPrivate.dll | Bin 54640 -> 0 bytes .../Forms/SettingsForm.Designer.cs | 96 ------ .../GreenshotOfficeCommunicatorPlugin.csproj | 92 ------ ...anguage_officecommunicatorplugin-en-US.xml | 32 -- .../OfficeCommunicatorDestination.cs | 125 ------- .../Properties/AssemblyInfo.cs.template | 2 +- .../language_photobucketplugin-de-DE.xml | 50 --- .../language_photobucketplugin-en-US.xml | 53 --- .../language_photobucketplugin-fr_FR.xml | 41 --- .../language_photobucketplugin-it-IT.xml | 50 --- .../language_photobucketplugin-nl-NL.xml | 50 --- .../language_photobucketplugin-ru-RU.xml | 50 --- .../language_photobucketplugin-uk-UA.xml | 20 -- .../language_photobucketplugin-zh-CN.xml | 38 --- GreenshotPhotobucketPlugin/PhotobucketInfo.cs | 98 ------ .../PhotobucketUtils.cs | 117 ------- GreenshotPicasaPlugin/Forms/PicasaForm.cs | 25 ++ .../Forms/SettingsForm.Designer.cs | 153 +++++++++ GreenshotPicasaPlugin/Forms/SettingsForm.cs | 51 +++ .../GreenshotPicasaPlugin.csproj | 117 +++++++ GreenshotPicasaPlugin/LanguageKeys.cs | 34 ++ .../Languages/language_Picasaplugin-en-US.xml | 62 ++-- .../Languages/language_Picasaplugin-fr-FR.xml | 14 + .../Languages/language_Picasaplugin-it-IT.xml | 32 ++ .../Languages/language_Picasaplugin-ru-RU.xml | 32 ++ .../Languages/language_Picasaplugin-uk-UA.xml | 14 + .../Languages/language_Picasaplugin-zh-CN.xml | 14 + GreenshotPicasaPlugin/Picasa.png | Bin 0 -> 4954 bytes GreenshotPicasaPlugin/PicasaConfiguration.cs | 58 ++++ GreenshotPicasaPlugin/PicasaCredentials.cs | 31 ++ .../PicasaCredentials.private.cs | 8 + GreenshotPicasaPlugin/PicasaDestination.cs | 69 ++++ GreenshotPicasaPlugin/PicasaPlugin.cs | 128 ++++++++ GreenshotPicasaPlugin/PicasaPlugin.resx | 124 +++++++ GreenshotPicasaPlugin/PicasaUtils.cs | 106 ++++++ .../Properties/AssemblyInfo.cs.template | 108 +++--- GreenshotPicasaPlugin/README | 3 + .../Properties/AssemblyInfo.cs.template | 2 +- .../GreenshotRemotePlugin.csproj | 45 --- GreenshotRemotePlugin/HttpServer.cs | 308 ------------------ .../Properties/AssemblyInfo.cs.template | 53 --- GreenshotRemotePlugin/RemoteConfiguration.cs | 39 --- GreenshotRemotePlugin/RemotePlugin.cs | 107 ------ 131 files changed, 3209 insertions(+), 3186 deletions(-) create mode 100644 GreenshotBoxPlugin/Box.png rename GreenshotImmioPlugin/ImmioConfiguration.cs => GreenshotBoxPlugin/BoxConfiguration.cs (62%) create mode 100644 GreenshotBoxPlugin/BoxCredentials.cs create mode 100644 GreenshotBoxPlugin/BoxCredentials.private.cs rename GreenshotImmioPlugin/ImmioDestination.cs => GreenshotBoxPlugin/BoxDestination.cs (70%) rename GreenshotOfficeCommunicatorPlugin/OfficeCommunicatorPlugin.cs => GreenshotBoxPlugin/BoxPlugin.cs (51%) rename GreenshotImmioPlugin/ImmioPlugin.resx => GreenshotBoxPlugin/BoxPlugin.resx (86%) create mode 100644 GreenshotBoxPlugin/BoxUtils.cs rename GreenshotOfficeCommunicatorPlugin/Forms/OfficeCommunicatorForm.cs => GreenshotBoxPlugin/Forms/BoxForm.cs (73%) rename {GreenshotImmioPlugin => GreenshotBoxPlugin}/Forms/SettingsForm.Designer.cs (59%) rename {GreenshotPhotobucketPlugin => GreenshotBoxPlugin}/Forms/SettingsForm.cs (83%) rename GreenshotPhotobucketPlugin/GreenshotPhotobucketPlugin.csproj => GreenshotBoxPlugin/GreenshotBoxPlugin.csproj (60%) rename {GreenshotImmioPlugin => GreenshotBoxPlugin}/LanguageKeys.cs (87%) create mode 100644 GreenshotBoxPlugin/Languages/language_Boxplugin-en-US.xml create mode 100644 GreenshotBoxPlugin/Languages/language_Boxplugin-fr-FR.xml create mode 100644 GreenshotBoxPlugin/Languages/language_Boxplugin-ru-RU.xml create mode 100644 GreenshotBoxPlugin/Languages/language_Boxplugin-uk-UA.xml create mode 100644 GreenshotBoxPlugin/Languages/language_Boxplugin-zh-CN.xml rename {GreenshotPhotobucketPlugin => GreenshotBoxPlugin}/Properties/AssemblyInfo.cs.template (79%) create mode 100644 GreenshotBoxPlugin/app.config create mode 100644 GreenshotDropboxPlugin/DropBoxCredentials.cs create mode 100644 GreenshotDropboxPlugin/DropBoxCredentials.private.cs create mode 100644 GreenshotDropboxPlugin/Dropbox.gif rename GreenshotPhotobucketPlugin/PhotobucketDestination.cs => GreenshotDropboxPlugin/DropboxDestination.cs (66%) rename GreenshotImmioPlugin/ImmioPlugin.cs => GreenshotDropboxPlugin/DropboxPlugin.cs (56%) rename GreenshotPhotobucketPlugin/PhotobucketPlugin.resx => GreenshotDropboxPlugin/DropboxPlugin.resx (80%) rename GreenshotOfficeCommunicatorPlugin/OfficeCommunicatorConfiguration.cs => GreenshotDropboxPlugin/DropboxPluginConfiguration.cs (53%) create mode 100644 GreenshotDropboxPlugin/DropboxUtils.cs rename GreenshotImmioPlugin/Forms/ImmioForm.cs => GreenshotDropboxPlugin/Forms/DropboxForm.cs (78%) rename {GreenshotPhotobucketPlugin => GreenshotDropboxPlugin}/Forms/SettingsForm.Designer.cs (62%) rename {GreenshotOfficeCommunicatorPlugin => GreenshotDropboxPlugin}/Forms/SettingsForm.cs (76%) create mode 100644 GreenshotDropboxPlugin/GreenshotDropboxPlugin.csproj rename {GreenshotPhotobucketPlugin => GreenshotDropboxPlugin}/LanguageKeys.cs (82%) create mode 100644 GreenshotDropboxPlugin/Languages/language_dropboxplugin-en-US.xml create mode 100644 GreenshotDropboxPlugin/Languages/language_dropboxplugin-fr-FR.xml create mode 100644 GreenshotDropboxPlugin/Languages/language_dropboxplugin-ru-RU.xml create mode 100644 GreenshotDropboxPlugin/Languages/language_dropboxplugin-uk-UA.xml create mode 100644 GreenshotDropboxPlugin/Languages/language_dropboxplugin-zh-CN.xml rename {GreenshotOfficeCommunicatorPlugin => GreenshotDropboxPlugin}/Properties/AssemblyInfo.cs.template (78%) rename GreenshotPhotobucketPlugin/PhotobucketConfiguration.cs => GreenshotFlickrPlugin/FlickrConfiguration.cs (50%) create mode 100644 GreenshotFlickrPlugin/FlickrCredentials.cs create mode 100644 GreenshotFlickrPlugin/FlickrCredentials.private.cs create mode 100644 GreenshotFlickrPlugin/FlickrDestination.cs rename GreenshotPhotobucketPlugin/PhotobucketPlugin.cs => GreenshotFlickrPlugin/FlickrPlugin.cs (50%) create mode 100644 GreenshotFlickrPlugin/FlickrPlugin.resx create mode 100644 GreenshotFlickrPlugin/FlickrUtils.cs rename GreenshotPhotobucketPlugin/Forms/PhotobucketForm.cs => GreenshotFlickrPlugin/Forms/FlickrForm.cs (76%) create mode 100644 GreenshotFlickrPlugin/Forms/SettingsForm.Designer.cs rename {GreenshotImmioPlugin => GreenshotFlickrPlugin}/Forms/SettingsForm.cs (82%) rename GreenshotImmioPlugin/GreenshotImmioPlugin.csproj => GreenshotFlickrPlugin/GreenshotFlickrPlugin.csproj (64%) rename {GreenshotOfficeCommunicatorPlugin => GreenshotFlickrPlugin}/LanguageKeys.cs (81%) create mode 100644 GreenshotFlickrPlugin/Languages/language_flickrplugin-en-US.xml create mode 100644 GreenshotFlickrPlugin/Languages/language_flickrplugin-fr-FR.xml create mode 100644 GreenshotFlickrPlugin/Languages/language_flickrplugin-it-IT.xml create mode 100644 GreenshotFlickrPlugin/Languages/language_flickrplugin-ru-RU.xml create mode 100644 GreenshotFlickrPlugin/Languages/language_flickrplugin-uk-UA.xml create mode 100644 GreenshotFlickrPlugin/Languages/language_flickrplugin-zh-CN.xml rename {GreenshotNetworkImportPlugin => GreenshotFlickrPlugin}/Properties/AssemblyInfo.cs.template (73%) create mode 100644 GreenshotFlickrPlugin/flickr.png delete mode 100644 GreenshotImmioPlugin/ImmioUtils.cs delete mode 100644 GreenshotNetworkImportPlugin/Browser-Plugins/Chrome/background.html delete mode 100644 GreenshotNetworkImportPlugin/Browser-Plugins/Chrome/background.js delete mode 100644 GreenshotNetworkImportPlugin/Browser-Plugins/Chrome/greenshot.png delete mode 100644 GreenshotNetworkImportPlugin/Browser-Plugins/Chrome/jquery-1.7.1.min.js delete mode 100644 GreenshotNetworkImportPlugin/Browser-Plugins/Chrome/manifest.json delete mode 100644 GreenshotNetworkImportPlugin/Browser-Plugins/Firefox/greenshot.xpi delete mode 100644 GreenshotNetworkImportPlugin/Browser-Plugins/Firefox/greenshot/chrome.manifest delete mode 100644 GreenshotNetworkImportPlugin/Browser-Plugins/Firefox/greenshot/content/jquery-1.7.1.min.js delete mode 100644 GreenshotNetworkImportPlugin/Browser-Plugins/Firefox/greenshot/content/overlay.js delete mode 100644 GreenshotNetworkImportPlugin/Browser-Plugins/Firefox/greenshot/content/overlay.xul delete mode 100644 GreenshotNetworkImportPlugin/Browser-Plugins/Firefox/greenshot/defaults/preferences/greenshot.js delete mode 100644 GreenshotNetworkImportPlugin/Browser-Plugins/Firefox/greenshot/install.rdf delete mode 100644 GreenshotNetworkImportPlugin/Browser-Plugins/Firefox/greenshot/skin/greenshot16.png delete mode 100644 GreenshotNetworkImportPlugin/Browser-Plugins/Firefox/greenshot/skin/greenshot90.png delete mode 100644 GreenshotNetworkImportPlugin/GreenshotNetworkImportPlugin.csproj delete mode 100644 GreenshotNetworkImportPlugin/HTTPReceiver.cs delete mode 100644 GreenshotNetworkImportPlugin/NetworkImportPlugin.cs delete mode 100644 GreenshotNetworkImportPlugin/NetworkImportPluginConfiguration.cs delete mode 100644 GreenshotOfficeCommunicatorPlugin/Communicator.cs delete mode 100644 GreenshotOfficeCommunicatorPlugin/CommunicatorConversation.cs delete mode 100644 GreenshotOfficeCommunicatorPlugin/DLL/CommunicatorAPI.dll delete mode 100644 GreenshotOfficeCommunicatorPlugin/DLL/CommunicatorPrivate.dll delete mode 100644 GreenshotOfficeCommunicatorPlugin/Forms/SettingsForm.Designer.cs delete mode 100644 GreenshotOfficeCommunicatorPlugin/GreenshotOfficeCommunicatorPlugin.csproj delete mode 100644 GreenshotOfficeCommunicatorPlugin/Languages/language_officecommunicatorplugin-en-US.xml delete mode 100644 GreenshotOfficeCommunicatorPlugin/OfficeCommunicatorDestination.cs delete mode 100644 GreenshotPhotobucketPlugin/Languages/language_photobucketplugin-de-DE.xml delete mode 100644 GreenshotPhotobucketPlugin/Languages/language_photobucketplugin-en-US.xml delete mode 100644 GreenshotPhotobucketPlugin/Languages/language_photobucketplugin-fr_FR.xml delete mode 100644 GreenshotPhotobucketPlugin/Languages/language_photobucketplugin-it-IT.xml delete mode 100644 GreenshotPhotobucketPlugin/Languages/language_photobucketplugin-nl-NL.xml delete mode 100644 GreenshotPhotobucketPlugin/Languages/language_photobucketplugin-ru-RU.xml delete mode 100644 GreenshotPhotobucketPlugin/Languages/language_photobucketplugin-uk-UA.xml delete mode 100644 GreenshotPhotobucketPlugin/Languages/language_photobucketplugin-zh-CN.xml delete mode 100644 GreenshotPhotobucketPlugin/PhotobucketInfo.cs delete mode 100644 GreenshotPhotobucketPlugin/PhotobucketUtils.cs create mode 100644 GreenshotPicasaPlugin/Forms/PicasaForm.cs create mode 100644 GreenshotPicasaPlugin/Forms/SettingsForm.Designer.cs create mode 100644 GreenshotPicasaPlugin/Forms/SettingsForm.cs create mode 100644 GreenshotPicasaPlugin/GreenshotPicasaPlugin.csproj create mode 100644 GreenshotPicasaPlugin/LanguageKeys.cs rename GreenshotImmioPlugin/Languages/language_immioplugin-en-US.xml => GreenshotPicasaPlugin/Languages/language_Picasaplugin-en-US.xml (56%) create mode 100644 GreenshotPicasaPlugin/Languages/language_Picasaplugin-fr-FR.xml create mode 100644 GreenshotPicasaPlugin/Languages/language_Picasaplugin-it-IT.xml create mode 100644 GreenshotPicasaPlugin/Languages/language_Picasaplugin-ru-RU.xml create mode 100644 GreenshotPicasaPlugin/Languages/language_Picasaplugin-uk-UA.xml create mode 100644 GreenshotPicasaPlugin/Languages/language_Picasaplugin-zh-CN.xml create mode 100644 GreenshotPicasaPlugin/Picasa.png create mode 100644 GreenshotPicasaPlugin/PicasaConfiguration.cs create mode 100644 GreenshotPicasaPlugin/PicasaCredentials.cs create mode 100644 GreenshotPicasaPlugin/PicasaCredentials.private.cs create mode 100644 GreenshotPicasaPlugin/PicasaDestination.cs create mode 100644 GreenshotPicasaPlugin/PicasaPlugin.cs create mode 100644 GreenshotPicasaPlugin/PicasaPlugin.resx create mode 100644 GreenshotPicasaPlugin/PicasaUtils.cs rename {GreenshotImmioPlugin => GreenshotPicasaPlugin}/Properties/AssemblyInfo.cs.template (80%) create mode 100644 GreenshotPicasaPlugin/README delete mode 100644 GreenshotRemotePlugin/GreenshotRemotePlugin.csproj delete mode 100644 GreenshotRemotePlugin/HttpServer.cs delete mode 100644 GreenshotRemotePlugin/Properties/AssemblyInfo.cs.template delete mode 100644 GreenshotRemotePlugin/RemoteConfiguration.cs delete mode 100644 GreenshotRemotePlugin/RemotePlugin.cs diff --git a/Greenshot/AssemblyInfo.cs.template b/Greenshot/AssemblyInfo.cs.template index 1996bede2..2e15ddb95 100644 --- a/Greenshot/AssemblyInfo.cs.template +++ b/Greenshot/AssemblyInfo.cs.template @@ -47,4 +47,4 @@ using System.Runtime.InteropServices; // You can specify all values by your own or you can build default build and revision // numbers with the '*' character (the default): -[assembly: AssemblyVersion("1.0.4.$WCREV$")] +[assembly: AssemblyVersion("1.0.5.$WCREV$")] diff --git a/Greenshot/Greenshot.sln b/Greenshot/Greenshot.sln index 60ae08ba3..250a07fc3 100644 --- a/Greenshot/Greenshot.sln +++ b/Greenshot/Greenshot.sln @@ -18,13 +18,13 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GreenshotOCRPlugin", "..\Gr EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GreenshotOCRCommand", "..\GreenshotOCRCommand\GreenshotOCRCommand.csproj", "{D61E6ECE-E0B6-4467-B492-F08A06BA8F02}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GreenshotBoxPlugin", "..\..\Greenshot-Plugins\GreenshotBoxPlugin\GreenshotBoxPlugin.csproj", "{697CF066-9077-4F22-99D9-D989CCE7282B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GreenshotBoxPlugin", "..\GreenshotBoxPlugin\GreenshotBoxPlugin.csproj", "{697CF066-9077-4F22-99D9-D989CCE7282B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GreenshotDropboxPlugin", "..\..\Greenshot-Plugins\GreenshotDropboxPlugin\GreenshotDropboxPlugin.csproj", "{AD7CFFE2-40E7-46CF-A172-D48CF7AE9A12}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GreenshotDropboxPlugin", "..\GreenshotDropboxPlugin\GreenshotDropboxPlugin.csproj", "{AD7CFFE2-40E7-46CF-A172-D48CF7AE9A12}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GreenshotFlickrPlugin", "..\..\Greenshot-Plugins\GreenshotFlickrPlugin\GreenshotFlickrPlugin.csproj", "{7EC72A5A-D73A-4B4B-9CA1-2216C7D92D5E}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GreenshotFlickrPlugin", "..\GreenshotFlickrPlugin\GreenshotFlickrPlugin.csproj", "{7EC72A5A-D73A-4B4B-9CA1-2216C7D92D5E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GreenshotPicasaPlugin", "..\..\Greenshot-Plugins\GreenshotPicasaPlugin\GreenshotPicasaPlugin.csproj", "{1893A2E4-A78A-4713-A8E7-E70058DABEE0}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GreenshotPicasaPlugin", "..\GreenshotPicasaPlugin\GreenshotPicasaPlugin.csproj", "{1893A2E4-A78A-4713-A8E7-E70058DABEE0}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GreenshotOfficePlugin", "..\GreenshotOfficePlugin\GreenshotOfficePlugin.csproj", "{92599C09-FF29-4ABD-B6E6-C48ECD781BAB}" EndProject diff --git a/GreenshotBoxPlugin/Box.png b/GreenshotBoxPlugin/Box.png new file mode 100644 index 0000000000000000000000000000000000000000..199a09dfdce121c1bd338d18d439e549daf4a3a3 GIT binary patch literal 571 zcmV-B0>u4^P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf0nkZAK~y+Tol_xC z!$1^%BNY`D6%_?4CJ+;diIGf9OhAG_OdudZAdm>e0*HwT3<-iCfFOi`K}<{#Kuj!z z0AgaIVqzf!Dk>^YOe`7id$+Oy1;LlR?e5+8zWeUoH8o_+?%mRV@OrpJshQoIq3hV> zSe9s{9aH|hVgFCfP$>$+NDIuTJt-^~-OnP&GN{>AbmuGb1C=P&?)J1mwUnjJyh8@l zGL?pq{evP621EuYuUZi`x{>4+8w(=s4gy9g>(Uk%2Wmhr@2XHWLXUI6YSxyB0q)5| zC<0UYv`rw6%f@a!+aN@r7ts>%5SD3BWznUzoF}gJ&jbw4RBAreTcI2Qn^Z~}vbj*P zngsK+o<&n4z$`=z_&I&($rLB5wF6o_YRcKo5jW;*fdm)Z#Wc051qqBJ-u39ZL)@k> z{E-9Q?HCqM%FA)7rw*KRqs74_KmZXB49^*X`)=&#zZAzc zsf)+AVPVcrT>LIRIfv6`hd(BK&X-T`eBViL@plQlgY|`J`T+AIy9asZ>*)Xh002ov JPDHLkV1k7Y^}+xE literal 0 HcmV?d00001 diff --git a/GreenshotImmioPlugin/ImmioConfiguration.cs b/GreenshotBoxPlugin/BoxConfiguration.cs similarity index 62% rename from GreenshotImmioPlugin/ImmioConfiguration.cs rename to GreenshotBoxPlugin/BoxConfiguration.cs index 7a969c684..80b5b9512 100644 --- a/GreenshotImmioPlugin/ImmioConfiguration.cs +++ b/GreenshotBoxPlugin/BoxConfiguration.cs @@ -1,6 +1,6 @@ /* * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom, Francis Noel * * For more information see: http://getgreenshot.org/ * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ @@ -20,41 +20,37 @@ */ using System.Windows.Forms; using Greenshot.IniFile; -using GreenshotPlugin.Controls; using GreenshotPlugin.Core; -namespace GreenshotImmioPlugin { +namespace GreenshotBoxPlugin { /// - /// Description of ImmioConfiguration. + /// Description of ImgurConfiguration. /// - [IniSection("Immio", Description="Greenshot Immio Plugin configuration")] - public class ImmioConfiguration : IniSection { + [IniSection("Box", Description = "Greenshot Box Plugin configuration")] + public class BoxConfiguration : IniSection { [IniProperty("UploadFormat", Description="What file type to use for uploading", DefaultValue="png")] public OutputFormat UploadFormat; + [IniProperty("UploadJpegQuality", Description="JPEG file save quality in %.", DefaultValue="80")] public int UploadJpegQuality; - [IniProperty("UploadReduceColors", Description="Reduce color amount of the uploaded image to 256", DefaultValue="False")] - public bool UploadReduceColors; - [IniProperty("UsePageLink", Description = "Use pagelink instead of direct link on the clipboard", DefaultValue = "False")] - public bool UsePageLink; + + [IniProperty("AfterUploadLinkToClipBoard", Description = "After upload send Box link to clipboard.", DefaultValue = "true")] + public bool AfterUploadLinkToClipBoard; + + [IniProperty("BoxToken", Description = "Token.", DefaultValue = "")] + public string BoxToken; /// - /// A form for username/password + /// A form for token /// /// bool true if OK was pressed, false if cancel public bool ShowConfigDialog() { - SettingsForm settingsForm = null; - - new PleaseWaitForm().ShowAndWait(ImmioPlugin.Attributes.Name, Language.GetString("immio", LangKey.communication_wait), - delegate() { - settingsForm = new SettingsForm(this); - } - ); - DialogResult result = settingsForm.ShowDialog(); + DialogResult result = new SettingsForm(this).ShowDialog(); if (result == DialogResult.OK) { return true; } return false; } + } } diff --git a/GreenshotBoxPlugin/BoxCredentials.cs b/GreenshotBoxPlugin/BoxCredentials.cs new file mode 100644 index 000000000..1b6b21674 --- /dev/null +++ b/GreenshotBoxPlugin/BoxCredentials.cs @@ -0,0 +1,31 @@ +/* + * Greenshot - a free and open source screenshot tool + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * + * For more information see: http://getgreenshot.org/ + * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ + * + * 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 1 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, see . + */ +using System; + +namespace GreenshotBoxPlugin { + /// + /// This class is merely a placeholder for the file keeping the API key and secret for Box integration. + /// Copy this file to BoxCredentials.private.cs and fill in valid credentials. (Or empty strings, but of course you won't be able to use the plugin then.) + /// + public static class BoxCredentials { + public static string API_KEY = empty; + } +} \ No newline at end of file diff --git a/GreenshotBoxPlugin/BoxCredentials.private.cs b/GreenshotBoxPlugin/BoxCredentials.private.cs new file mode 100644 index 000000000..83d4005f2 --- /dev/null +++ b/GreenshotBoxPlugin/BoxCredentials.private.cs @@ -0,0 +1,31 @@ +/* + * Greenshot - a free and open source screenshot tool + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * + * For more information see: http://getgreenshot.org/ + * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ + * + * 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 1 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, see . + */ +using System; + +namespace GreenshotBoxPlugin { + /// + /// This class is merely a placeholder for the file keeping the API key and secret for Box integration. + /// Copy this file to BoxCredentials.private.cs and fill in valid credentials. (Or empty strings, but of course you won't be able to use the plugin then.) + /// + public static class BoxCredentials { + public static string API_KEY = "gwjm9lx8df7y2xskay4f1yxkrakhgy7n"; + } +} \ No newline at end of file diff --git a/GreenshotImmioPlugin/ImmioDestination.cs b/GreenshotBoxPlugin/BoxDestination.cs similarity index 70% rename from GreenshotImmioPlugin/ImmioDestination.cs rename to GreenshotBoxPlugin/BoxDestination.cs index 978600cf6..36d817548 100644 --- a/GreenshotImmioPlugin/ImmioDestination.cs +++ b/GreenshotBoxPlugin/BoxDestination.cs @@ -1,6 +1,6 @@ /* * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom, Francis Noel * * For more information see: http://getgreenshot.org/ * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ @@ -24,44 +24,43 @@ using Greenshot.IniFile; using Greenshot.Plugin; using GreenshotPlugin.Core; -namespace GreenshotImmioPlugin { - /// - /// Description of ImmioDestination. - /// - public class ImmioDestination : AbstractDestination { - private static log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(ImmioDestination)); - private static ImmioConfiguration config = IniConfig.GetIniSection(); - private ImmioPlugin plugin = null; +namespace GreenshotBoxPlugin { + public class BoxDestination : AbstractDestination { + private static log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(BoxDestination)); + private static BoxConfiguration config = IniConfig.GetIniSection(); - public ImmioDestination(ImmioPlugin plugin) { + private BoxPlugin plugin = null; + public BoxDestination(BoxPlugin plugin) { this.plugin = plugin; } public override string Designation { get { - return "Immio"; + return "Box"; } } public override string Description { get { - return Language.GetString("immio", LangKey.upload_menu_item); + return Language.GetString("box", LangKey.upload_menu_item); } } public override Image DisplayIcon { get { - ComponentResourceManager resources = new ComponentResourceManager(typeof(ImmioPlugin)); - return (Image)resources.GetObject("Immio"); + ComponentResourceManager resources = new ComponentResourceManager(typeof(BoxPlugin)); + return (Image)resources.GetObject("Box"); } } public override ExportInformation ExportCapture(bool manuallyInitiated, ISurface surface, ICaptureDetails captureDetails) { ExportInformation exportInformation = new ExportInformation(this.Designation, this.Description); using (Image image = surface.GetImageForExport()) { - string uploadURL = null; - exportInformation.ExportMade = plugin.Upload(captureDetails, image, out uploadURL); - exportInformation.Uri = uploadURL; + string uploadUrl = plugin.Upload(captureDetails, image); + if (uploadUrl != null) { + exportInformation.ExportMade = true; + exportInformation.Uri = uploadUrl; + } } ProcessExport(exportInformation, surface); return exportInformation; diff --git a/GreenshotOfficeCommunicatorPlugin/OfficeCommunicatorPlugin.cs b/GreenshotBoxPlugin/BoxPlugin.cs similarity index 51% rename from GreenshotOfficeCommunicatorPlugin/OfficeCommunicatorPlugin.cs rename to GreenshotBoxPlugin/BoxPlugin.cs index 54747e3da..07f0bdbb2 100644 --- a/GreenshotOfficeCommunicatorPlugin/OfficeCommunicatorPlugin.cs +++ b/GreenshotBoxPlugin/BoxPlugin.cs @@ -1,6 +1,6 @@ /* * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom, Francis Noel * * For more information see: http://getgreenshot.org/ * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ @@ -24,47 +24,30 @@ using System.ComponentModel; using System.Drawing; using System.IO; using System.Windows.Forms; -using System.Threading; - +using Greenshot.IniFile; using Greenshot.Plugin; using GreenshotPlugin.Controls; using GreenshotPlugin.Core; -using Greenshot.IniFile; -using CommunicatorAPI; -using System.Runtime.InteropServices; -namespace GreenshotOfficeCommunicatorPlugin { +namespace GreenshotBoxPlugin { /// - /// This is the OfficeCommunicatorPlugin + /// This is the Box base code /// - public class OfficeCommunicatorPlugin : IGreenshotPlugin { - private static readonly log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(OfficeCommunicatorPlugin)); + public class BoxPlugin : IGreenshotPlugin { + private static readonly log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(BoxPlugin)); + private static BoxConfiguration config; public static PluginAttribute Attributes; - private OfficeCommunicatorConfiguration config = IniConfig.GetIniSection(); private IGreenshotHost host; - private Communicator communicator; - public IGreenshotHost Host { - get { - return host; - } - } + private ComponentResourceManager resources; - public Communicator Communicator { - get { - return communicator; - } - set { - communicator = value; - } - } - - public OfficeCommunicatorPlugin() { + public BoxPlugin() { } public IEnumerable Destinations() { - yield return new OfficeCommunicatorDestination(this); + yield return new BoxDestination(this); } + public IEnumerable Processors() { yield break; } @@ -73,20 +56,27 @@ namespace GreenshotOfficeCommunicatorPlugin { /// Implementation of the IGreenshotPlugin.Initialize /// /// Use the IGreenshotPluginHost interface to register events - /// Use the ICaptureHost interface to register in the MainContextMenu /// My own attributes - /// true if plugin is initialized, false if not (doesn't show) public virtual bool Initialize(IGreenshotHost pluginHost, PluginAttribute myAttributes) { this.host = (IGreenshotHost)pluginHost; Attributes = myAttributes; - communicator = new Communicator(); - communicator.Signin(null, null); + // Register configuration (don't need the configuration itself) + config = IniConfig.GetIniSection(); + resources = new ComponentResourceManager(typeof(BoxPlugin)); + + ToolStripMenuItem itemPlugInConfig = new ToolStripMenuItem(); + itemPlugInConfig.Image = (Image)resources.GetObject("Box"); + itemPlugInConfig.Text = Language.GetString("box", LangKey.Configure); + itemPlugInConfig.Click += new System.EventHandler(ConfigMenuClick); + + PluginUtils.AddToContextMenu(host, itemPlugInConfig); + return true; } public virtual void Shutdown() { - LOG.Debug("OfficeCommunicator Plugin shutdown."); + LOG.Debug("Box Plugin shutdown."); } /// @@ -102,8 +92,40 @@ namespace GreenshotOfficeCommunicatorPlugin { /// /// public void Closing(object sender, FormClosingEventArgs e) { - LOG.Debug("Application closing, de-registering OfficeCommunicator Plugin!"); + LOG.Debug("Application closing, de-registering Box Plugin!"); Shutdown(); } + + public void ConfigMenuClick(object sender, EventArgs eventArgs) { + config.ShowConfigDialog(); + } + + /// + /// This will be called when the menu item in the Editor is clicked + /// + public string Upload(ICaptureDetails captureDetails, Image image) { + OutputSettings outputSettings = new OutputSettings(config.UploadFormat, config.UploadJpegQuality, false); + try { + string url = null; + string filename = Path.GetFileName(FilenameHelper.GetFilename(config.UploadFormat, captureDetails)); + ImageContainer imageToUpload = new ImageContainer(image, outputSettings, filename); + + new PleaseWaitForm().ShowAndWait(BoxPlugin.Attributes.Name, Language.GetString("box", LangKey.communication_wait), + delegate() { + url = BoxUtils.UploadToBox(imageToUpload, captureDetails.Title, filename); + } + ); + + if (url != null && config.AfterUploadLinkToClipBoard) { + ClipboardHelper.SetClipboardData(url); + } + + return url; + } catch (Exception ex) { + LOG.Error("Error uploading.", ex); + MessageBox.Show(Language.GetString("box", LangKey.upload_failure) + " " + ex.ToString()); + return null; + } + } } } diff --git a/GreenshotImmioPlugin/ImmioPlugin.resx b/GreenshotBoxPlugin/BoxPlugin.resx similarity index 86% rename from GreenshotImmioPlugin/ImmioPlugin.resx rename to GreenshotBoxPlugin/BoxPlugin.resx index 00ce7ed3d..57b6289de 100644 --- a/GreenshotImmioPlugin/ImmioPlugin.resx +++ b/GreenshotBoxPlugin/BoxPlugin.resx @@ -117,15 +117,8 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAMVJREFUOE9jDA0J - ZSAJADW8ffeOSAQyHaJhzvHXaGjR6TdoCKgMi4Zzj79+/vH3Pxg8ePfz2cdfQBGgTqBx2DVAlKKB9Zfe - 49QAlIOofvP1N9BsINp69QPEtdhtAEoAHbDi3FtMX+HUgKkUiw29m6e0rshsWORfO88WSLatyp+4fRqa - ThQbgKqBStuWO6ChpcdTFx+vXnh8IbofkFUvPOKDhhYciVlwtATFBojBmEqRRdA14FcNlEXRQFA1ugbS - Eh8wSRGPAL2C6QdnoO9oAAAAAElFTkSuQmCC - + + + box.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a \ No newline at end of file diff --git a/GreenshotBoxPlugin/BoxUtils.cs b/GreenshotBoxPlugin/BoxUtils.cs new file mode 100644 index 000000000..3c6352ad1 --- /dev/null +++ b/GreenshotBoxPlugin/BoxUtils.cs @@ -0,0 +1,132 @@ +/* + * Greenshot - a free and open source screenshot tool + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom, Francis Noel + * + * For more information see: http://getgreenshot.org/ + * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ + * + * 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 1 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, see . + */ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Net; +using System.Xml; +using Greenshot.IniFile; +using GreenshotPlugin.Controls; +using GreenshotPlugin.Core; + +namespace GreenshotBoxPlugin { + /// + /// Description of ImgurUtils. + /// + public class BoxUtils { + private static readonly log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(BoxUtils)); + private static BoxConfiguration config = IniConfig.GetIniSection(); + + private BoxUtils() { + } + + private static string ParseTicket(string response) { + try { + XmlDocument doc = new XmlDocument(); + doc.LoadXml(response); + XmlNodeList nodes = doc.GetElementsByTagName("ticket"); + if(nodes.Count > 0) { + return nodes.Item(0).InnerText; + } + } catch (Exception ex) { + LOG.Error("Error parsing Box Response.", ex); + } + return null; + } + + private static bool Authorize() { + string ticketUrl = string.Format("https://www.box.com/api/1.0/rest?action=get_ticket&api_key={0}", BoxCredentials.API_KEY); + string ticketXML = NetworkHelper.GetAsString(new Uri(ticketUrl)); + string ticket = ParseTicket(ticketXML); + string authorizeUrl = string.Format("https://www.box.com/api/1.0/auth/{0}", ticket); + OAuthLoginForm loginForm = new OAuthLoginForm("Box Authorize", new Size(1060,600), authorizeUrl, "http://getgreenshot.org"); + loginForm.ShowDialog(); + if (loginForm.isOk) { + if (loginForm.CallbackParameters != null && loginForm.CallbackParameters.ContainsKey("auth_token")) { + config.BoxToken = loginForm.CallbackParameters["auth_token"]; + IniConfig.Save(); + return true; + } + } + return false; + } + + + /// + /// Upload file by post + /// + /// + /// + /// response + public static string HttpUploadFile(string url, Dictionary parameters) { + HttpWebRequest webRequest = (HttpWebRequest)NetworkHelper.CreateWebRequest(url); + webRequest.Method = "POST"; + webRequest.KeepAlive = true; + webRequest.Credentials = System.Net.CredentialCache.DefaultCredentials; + NetworkHelper.WriteMultipartFormData(webRequest, parameters); + + return NetworkHelper.GetResponse(webRequest); + } + + /// + /// Do the actual upload to Box + /// For more details on the available parameters, see: http://developers.box.net/w/page/12923951/ApiFunction_Upload%20and%20Download + /// + /// byte[] with image data + /// url to uploaded image + public static string UploadToBox(ImageContainer image, string title, string filename) { + string folderId = "0"; + if (string.IsNullOrEmpty(config.BoxToken)) { + if (!Authorize()) { + return null; + } + } + + string strUrl = string.Format("https://upload.box.net/api/1.0/upload/{0}/{1}?file_name={2}&new_copy=1", config.BoxToken, folderId, filename); + + Dictionary parameters = new Dictionary(); + parameters.Add("share", "1"); + parameters.Add("new_file", image); + + string response = HttpUploadFile(strUrl, parameters); + // Check if the token is wrong + if ("wrong auth token".Equals(response)) { + config.BoxToken = null; + IniConfig.Save(); + return UploadToBox(image, title, filename); + } + LOG.DebugFormat("Box response: {0}", response); + XmlDocument doc = new XmlDocument(); + doc.LoadXml(response); + XmlNodeList nodes = doc.GetElementsByTagName("status"); + if(nodes.Count > 0) { + if ("upload_ok".Equals(nodes.Item(0).InnerText)) { + nodes = doc.GetElementsByTagName("file"); + if (nodes.Count > 0) { + long id = long.Parse(nodes.Item(0).Attributes["id"].Value); + return string.Format("http://www.box.com/files/0/f/0/1/f_{0}", id); + } + } + } + return null; + } + } +} diff --git a/GreenshotOfficeCommunicatorPlugin/Forms/OfficeCommunicatorForm.cs b/GreenshotBoxPlugin/Forms/BoxForm.cs similarity index 73% rename from GreenshotOfficeCommunicatorPlugin/Forms/OfficeCommunicatorForm.cs rename to GreenshotBoxPlugin/Forms/BoxForm.cs index 126f4d2bc..b8aa634be 100644 --- a/GreenshotOfficeCommunicatorPlugin/Forms/OfficeCommunicatorForm.cs +++ b/GreenshotBoxPlugin/Forms/BoxForm.cs @@ -1,6 +1,6 @@ /* * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom, Francis Noel * * For more information see: http://getgreenshot.org/ * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ @@ -18,14 +18,9 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -using System; +using GreenshotPlugin.Controls; -namespace GreenshotOfficeCommunicatorPlugin { - /// - /// This class is needed for design-time resolving of the language files - /// - public class OfficeCommunicatorForm : GreenshotPlugin.Controls.GreenshotForm { - public OfficeCommunicatorForm() : base() { - } +namespace GreenshotBoxPlugin.Forms { + public class BoxForm : GreenshotForm { } -} +} \ No newline at end of file diff --git a/GreenshotImmioPlugin/Forms/SettingsForm.Designer.cs b/GreenshotBoxPlugin/Forms/SettingsForm.Designer.cs similarity index 59% rename from GreenshotImmioPlugin/Forms/SettingsForm.Designer.cs rename to GreenshotBoxPlugin/Forms/SettingsForm.Designer.cs index 18595162b..a1a0d777e 100644 --- a/GreenshotImmioPlugin/Forms/SettingsForm.Designer.cs +++ b/GreenshotBoxPlugin/Forms/SettingsForm.Designer.cs @@ -1,6 +1,6 @@ /* * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom, Francis Noel * * For more information see: http://getgreenshot.org/ * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ @@ -18,7 +18,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -namespace GreenshotImmioPlugin { +namespace GreenshotBoxPlugin { partial class SettingsForm { /// /// Designer variable used to keep track of non-visual components. @@ -50,70 +50,99 @@ namespace GreenshotImmioPlugin { this.buttonCancel = new GreenshotPlugin.Controls.GreenshotButton(); this.combobox_uploadimageformat = new GreenshotPlugin.Controls.GreenshotComboBox(); this.label_upload_format = new GreenshotPlugin.Controls.GreenshotLabel(); + this.label_AfterUpload = new GreenshotPlugin.Controls.GreenshotLabel(); + this.checkboxAfterUploadLinkToClipBoard = new GreenshotPlugin.Controls.GreenshotCheckBox(); this.SuspendLayout(); // // buttonOK // this.buttonOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.buttonOK.LanguageKey = "immio.OK"; - this.buttonOK.Location = new System.Drawing.Point(222, 88); + this.buttonOK.LanguageKey = "OK"; + this.buttonOK.Location = new System.Drawing.Point(267, 72); this.buttonOK.Name = "buttonOK"; this.buttonOK.Size = new System.Drawing.Size(75, 23); - this.buttonOK.TabIndex = 2; + this.buttonOK.TabIndex = 12; this.buttonOK.UseVisualStyleBackColor = true; this.buttonOK.Click += new System.EventHandler(this.ButtonOKClick); // // buttonCancel // this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.buttonCancel.LanguageKey = "immio.CANCEL"; - this.buttonCancel.Location = new System.Drawing.Point(303, 88); + this.buttonCancel.LanguageKey = "CANCEL"; + this.buttonCancel.Location = new System.Drawing.Point(348, 72); this.buttonCancel.Name = "buttonCancel"; this.buttonCancel.Size = new System.Drawing.Size(75, 23); - this.buttonCancel.TabIndex = 3; + this.buttonCancel.TabIndex = 13; this.buttonCancel.UseVisualStyleBackColor = true; this.buttonCancel.Click += new System.EventHandler(this.ButtonCancelClick); // // combobox_uploadimageformat // + this.combobox_uploadimageformat.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); this.combobox_uploadimageformat.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.combobox_uploadimageformat.FormattingEnabled = true; - this.combobox_uploadimageformat.Location = new System.Drawing.Point(102, 7); + this.combobox_uploadimageformat.Location = new System.Drawing.Point(208, 12); this.combobox_uploadimageformat.Name = "combobox_uploadimageformat"; this.combobox_uploadimageformat.PropertyName = "UploadFormat"; - this.combobox_uploadimageformat.SectionName = "Immio"; - this.combobox_uploadimageformat.Size = new System.Drawing.Size(276, 21); - this.combobox_uploadimageformat.TabIndex = 8; + this.combobox_uploadimageformat.SectionName = "Box"; + this.combobox_uploadimageformat.Size = new System.Drawing.Size(215, 21); + this.combobox_uploadimageformat.TabIndex = 5; // // label_upload_format // - this.label_upload_format.LanguageKey = "immio.label_upload_format"; - this.label_upload_format.Location = new System.Drawing.Point(12, 10); + this.label_upload_format.LanguageKey = "box.label_upload_format"; + this.label_upload_format.Location = new System.Drawing.Point(10, 12); this.label_upload_format.Name = "label_upload_format"; - this.label_upload_format.Size = new System.Drawing.Size(84, 20); - this.label_upload_format.TabIndex = 9; + this.label_upload_format.Size = new System.Drawing.Size(192, 20); + this.label_upload_format.TabIndex = 4; + // + // label_AfterUpload + // + this.label_AfterUpload.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.label_AfterUpload.LanguageKey = "box.label_AfterUpload"; + this.label_AfterUpload.Location = new System.Drawing.Point(10, 46); + this.label_AfterUpload.Name = "label_AfterUpload"; + this.label_AfterUpload.Size = new System.Drawing.Size(84, 21); + this.label_AfterUpload.TabIndex = 8; + // + // checkboxAfterUploadLinkToClipBoard + // + this.checkboxAfterUploadLinkToClipBoard.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.checkboxAfterUploadLinkToClipBoard.AutoSize = true; + this.checkboxAfterUploadLinkToClipBoard.LanguageKey = "box.label_AfterUploadLinkToClipBoard"; + this.checkboxAfterUploadLinkToClipBoard.Location = new System.Drawing.Point(208, 48); + this.checkboxAfterUploadLinkToClipBoard.Name = "checkboxAfterUploadLinkToClipBoard"; + this.checkboxAfterUploadLinkToClipBoard.PropertyName = "AfterUploadLinkToClipBoard"; + this.checkboxAfterUploadLinkToClipBoard.SectionName = "Box"; + this.checkboxAfterUploadLinkToClipBoard.Size = new System.Drawing.Size(15, 14); + this.checkboxAfterUploadLinkToClipBoard.TabIndex = 10; + this.checkboxAfterUploadLinkToClipBoard.UseVisualStyleBackColor = true; // // SettingsForm // this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.ClientSize = new System.Drawing.Size(387, 123); + this.ClientSize = new System.Drawing.Size(432, 104); + this.Controls.Add(this.checkboxAfterUploadLinkToClipBoard); + this.Controls.Add(this.label_AfterUpload); this.Controls.Add(this.label_upload_format); this.Controls.Add(this.combobox_uploadimageformat); this.Controls.Add(this.buttonCancel); this.Controls.Add(this.buttonOK); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; - this.LanguageKey = "immio.settings_title"; + this.LanguageKey = "box.settings_title"; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "SettingsForm"; this.ResumeLayout(false); this.PerformLayout(); - } private GreenshotPlugin.Controls.GreenshotComboBox combobox_uploadimageformat; private GreenshotPlugin.Controls.GreenshotLabel label_upload_format; private GreenshotPlugin.Controls.GreenshotButton buttonCancel; private GreenshotPlugin.Controls.GreenshotButton buttonOK; + private GreenshotPlugin.Controls.GreenshotLabel label_AfterUpload; + private GreenshotPlugin.Controls.GreenshotCheckBox checkboxAfterUploadLinkToClipBoard; } } diff --git a/GreenshotPhotobucketPlugin/Forms/SettingsForm.cs b/GreenshotBoxPlugin/Forms/SettingsForm.cs similarity index 83% rename from GreenshotPhotobucketPlugin/Forms/SettingsForm.cs rename to GreenshotBoxPlugin/Forms/SettingsForm.cs index 8c04847f5..af76b4593 100644 --- a/GreenshotPhotobucketPlugin/Forms/SettingsForm.cs +++ b/GreenshotBoxPlugin/Forms/SettingsForm.cs @@ -1,6 +1,6 @@ /* * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom, Francis Noel * * For more information see: http://getgreenshot.org/ * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ @@ -19,23 +19,28 @@ * along with this program. If not, see . */ using System; +using System.Drawing; using System.Windows.Forms; -using GreenshotPlugin.Core; -using GreenshotPlugin.Controls; -namespace GreenshotPhotobucketPlugin { +using GreenshotBoxPlugin.Forms; +using GreenshotPlugin.Core; + +namespace GreenshotBoxPlugin { /// /// Description of PasswordRequestForm. /// - public partial class SettingsForm : PhotobucketForm { - public SettingsForm(PhotobucketConfiguration config) : base() { + public partial class SettingsForm : BoxForm { + string boxTicket = string.Empty; + + public SettingsForm(BoxConfiguration config) { // // The InitializeComponent() call is required for Windows Forms designer support. // InitializeComponent(); this.Icon = GreenshotPlugin.Core.GreenshotResources.getGreenshotIcon(); + } - + void ButtonOKClick(object sender, EventArgs e) { this.DialogResult = DialogResult.OK; } diff --git a/GreenshotPhotobucketPlugin/GreenshotPhotobucketPlugin.csproj b/GreenshotBoxPlugin/GreenshotBoxPlugin.csproj similarity index 60% rename from GreenshotPhotobucketPlugin/GreenshotPhotobucketPlugin.csproj rename to GreenshotBoxPlugin/GreenshotBoxPlugin.csproj index c15664559..275f9fb6d 100644 --- a/GreenshotPhotobucketPlugin/GreenshotPhotobucketPlugin.csproj +++ b/GreenshotBoxPlugin/GreenshotBoxPlugin.csproj @@ -2,10 +2,10 @@ - {9C0ECC4C-7807-4111-916A-4F57BB29788A} + {697CF066-9077-4F22-99D9-D989CCE7282B} Library - GreenshotPhotobucketPlugin - GreenshotPhotobucketPlugin + GreenshotBoxPlugin + GreenshotBoxPlugin v2.0 Properties False @@ -13,16 +13,14 @@ 4 false OnBuildSuccess - - - 3.5 + - ..\Greenshot\Lib\log4net.dll + ..\lib\log4net.dll @@ -30,7 +28,12 @@ - + + + + + + Form @@ -39,45 +42,47 @@ SettingsForm.cs - - - - - - - Never - - - Never - - - Never - - - Never - - - - - PhotobucketPlugin.cs + + BoxPlugin.cs Designer - + + + + + + + + + + + {5B924697-4DCD-4F98-85F1-105CB84B7341} GreenshotPlugin - "$(SolutionDir)\tools\TortoiseSVN\SubWCRev.exe" "$(ProjectDir)\" "$(ProjectDir)\Properties\AssemblyInfo.cs.template" "$(ProjectDir)\Properties\AssemblyInfo.cs" - mkdir "$(SolutionDir)bin\$(Configuration)\Plugins\$(ProjectName)" -copy "$(ProjectDir)bin\$(Configuration)\$(TargetFileName)" "$(SolutionDir)bin\$(Configuration)\Plugins\$(ProjectName)\*.gsp" + if exist "$(ProjectDir)BoxCredentials.orig.cs" ( + rename "$(ProjectDir)BoxCredentials.cs" "BoxCredentials.private.cs" + rename "$(ProjectDir)BoxCredentials.orig.cs" "BoxCredentials.cs" +) else exit /b -1 + +mkdir "$(SolutionDir)bin\$(Configuration)\Plugins\$(ProjectName)" +copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).dll" "$(SolutionDir)bin\$(Configuration)\Plugins\$(ProjectName)\*.gsp" copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).pdb" "$(SolutionDir)bin\$(Configuration)\Plugins\$(ProjectName)\" mkdir "$(SolutionDir)bin\$(Configuration)\Languages\Plugins\$(ProjectName)" -copy "$(ProjectDir)\Languages\*.xml" "$(SolutionDir)bin\$(Configuration)\Languages\Plugins\$(ProjectName)\" +copy "$(ProjectDir)Languages\*.xml" "$(SolutionDir)bin\$(Configuration)\Languages\Plugins\$(ProjectName)\" + + "$(SolutionDir)\tools\TortoiseSVN\SubWCRev.exe" "$(ProjectDir)\" "$(ProjectDir)\Properties\AssemblyInfo.cs.template" "$(ProjectDir)\Properties\AssemblyInfo.cs" + +if exist "$(ProjectDir)BoxCredentials.private.cs" ( + rename "$(ProjectDir)BoxCredentials.cs" "BoxCredentials.orig.cs" + rename "$(ProjectDir)BoxCredentials.private.cs" "BoxCredentials.cs" +) else exit /b -1 False @@ -97,8 +102,8 @@ copy "$(ProjectDir)\Languages\*.xml" "$(SolutionDir)bin\$(Configuration)\Languag DEBUG;TRACE False True - None - false + Full + true TRACE diff --git a/GreenshotImmioPlugin/LanguageKeys.cs b/GreenshotBoxPlugin/LanguageKeys.cs similarity index 87% rename from GreenshotImmioPlugin/LanguageKeys.cs rename to GreenshotBoxPlugin/LanguageKeys.cs index f1799de38..db2c2516b 100644 --- a/GreenshotImmioPlugin/LanguageKeys.cs +++ b/GreenshotBoxPlugin/LanguageKeys.cs @@ -1,6 +1,6 @@ /* * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom, Francis Noel * * For more information see: http://getgreenshot.org/ * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ @@ -18,18 +18,16 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - -namespace GreenshotImmioPlugin { +namespace GreenshotBoxPlugin { public enum LangKey { upload_menu_item, settings_title, - label_url, label_upload_format, - OK, - CANCEL, upload_success, upload_failure, communication_wait, - configure + Configure, + label_AfterUpload, + label_AfterUploadLinkToClipBoard } } diff --git a/GreenshotBoxPlugin/Languages/language_Boxplugin-en-US.xml b/GreenshotBoxPlugin/Languages/language_Boxplugin-en-US.xml new file mode 100644 index 000000000..181603529 --- /dev/null +++ b/GreenshotBoxPlugin/Languages/language_Boxplugin-en-US.xml @@ -0,0 +1,32 @@ + + + + + Link to clipboard + + + After upload + + + Configure Box + + + Upload to Box + + + Box settings + + + Successfully uploaded image to Box! + + + An error occured while uploading to Box: + + + Image format + + + Communicating with Box. Please wait... + + + \ No newline at end of file diff --git a/GreenshotBoxPlugin/Languages/language_Boxplugin-fr-FR.xml b/GreenshotBoxPlugin/Languages/language_Boxplugin-fr-FR.xml new file mode 100644 index 000000000..fd8e7a72f --- /dev/null +++ b/GreenshotBoxPlugin/Languages/language_Boxplugin-fr-FR.xml @@ -0,0 +1,14 @@ + + + + Communication en cours avec le service de stockage en ligne. Veuillez patientez... + Configurer Box + Après téléversement + Copier le lien dans le presse-papier + Format image + Paramètres du stockage en ligne + Une erreur s'est produite lors du téléversement vers le stockage en ligne : + Téléverser vers le stockage en ligne + Image téléversée aves succès vers le stockage en ligne ! + + \ No newline at end of file diff --git a/GreenshotBoxPlugin/Languages/language_Boxplugin-ru-RU.xml b/GreenshotBoxPlugin/Languages/language_Boxplugin-ru-RU.xml new file mode 100644 index 000000000..712c01cbc --- /dev/null +++ b/GreenshotBoxPlugin/Languages/language_Boxplugin-ru-RU.xml @@ -0,0 +1,32 @@ + + + + + Ссылка в буфер обмена + + + После загрузки + + + Настройка Box + + + Загрузить на Box + + + Параметры Box + + + Изображение успешно загружено на Box! + + + Произошла ошибка при загрузке на Box: + + + Формат изображения + + + Обмен данными с Box. Подождите... + + + \ No newline at end of file diff --git a/GreenshotBoxPlugin/Languages/language_Boxplugin-uk-UA.xml b/GreenshotBoxPlugin/Languages/language_Boxplugin-uk-UA.xml new file mode 100644 index 000000000..6bf188bc8 --- /dev/null +++ b/GreenshotBoxPlugin/Languages/language_Boxplugin-uk-UA.xml @@ -0,0 +1,14 @@ + + + + Посилання в буфер обміну + Після вивантаження + Налаштувати Box + Вивантажити на Box + Параметри Box + Зображення вдало вивантажено на Box! + Відбулась помилка під час вивантаження на Box: + Формат зображення + З’єднання з Box. Будь ласка, зачекайте... + + diff --git a/GreenshotBoxPlugin/Languages/language_Boxplugin-zh-CN.xml b/GreenshotBoxPlugin/Languages/language_Boxplugin-zh-CN.xml new file mode 100644 index 000000000..1eb7f88f2 --- /dev/null +++ b/GreenshotBoxPlugin/Languages/language_Boxplugin-zh-CN.xml @@ -0,0 +1,14 @@ + + + + 正在连接Box。请稍后... + 配置Box + 上传之后 + 复制链接到剪贴板 + 图片格式 + Box设置 + 上传图片到Box时发生错误: + 上传到Box + 图片已成功上传到Box! + + \ No newline at end of file diff --git a/GreenshotPhotobucketPlugin/Properties/AssemblyInfo.cs.template b/GreenshotBoxPlugin/Properties/AssemblyInfo.cs.template similarity index 79% rename from GreenshotPhotobucketPlugin/Properties/AssemblyInfo.cs.template rename to GreenshotBoxPlugin/Properties/AssemblyInfo.cs.template index bd52d0b85..4784236a0 100644 --- a/GreenshotPhotobucketPlugin/Properties/AssemblyInfo.cs.template +++ b/GreenshotBoxPlugin/Properties/AssemblyInfo.cs.template @@ -1,6 +1,6 @@ /* * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom, Francis Noel * * For more information see: http://getgreenshot.org/ * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ @@ -30,16 +30,16 @@ using Greenshot.Plugin; // 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("Greenshot-Photobucket-Plugin")] -[assembly: AssemblyDescription("A plugin to upload images to Photobucket")] +[assembly: AssemblyTitle("Greenshot-Box-Plugin")] +[assembly: AssemblyDescription("A plugin to upload images to Box")] [assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Greenshot")] -[assembly: AssemblyProduct("Photobucket Plugin")] -[assembly: AssemblyCopyright("Copyright (C) 2007-2012")] +[assembly: AssemblyCompany("Greenshot & F. Noel")] +[assembly: AssemblyProduct("Box Plugin")] +[assembly: AssemblyCopyright("Copyright (C) 2012")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // The PluginAttribute describes the "entryType" and if the plugin is configurable -[assembly: PluginAttribute("GreenshotPhotobucketPlugin.PhotobucketPlugin", true)] +[assembly: PluginAttribute("GreenshotBoxPlugin.BoxPlugin", true)] // This sets the default COM visibility of types in the assembly to invisible. // If you need to expose a type to COM, use [ComVisible(true)] on that type. @@ -51,4 +51,4 @@ using Greenshot.Plugin; // // You can specify all the values or you can use the default the Revision and // Build Numbers by using the '*' as shown below: -[assembly: AssemblyVersion("1.0.3.$WCREV$")] +[assembly: AssemblyVersion("1.0.5.$WCREV$")] diff --git a/GreenshotBoxPlugin/app.config b/GreenshotBoxPlugin/app.config new file mode 100644 index 000000000..3e588c04a --- /dev/null +++ b/GreenshotBoxPlugin/app.config @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/GreenshotConfluencePlugin/Properties/AssemblyInfo.cs.template b/GreenshotConfluencePlugin/Properties/AssemblyInfo.cs.template index 622cc5d9a..a7c771743 100644 --- a/GreenshotConfluencePlugin/Properties/AssemblyInfo.cs.template +++ b/GreenshotConfluencePlugin/Properties/AssemblyInfo.cs.template @@ -51,4 +51,4 @@ using Greenshot.Plugin; // // You can specify all the values or you can use the default the Revision and // Build Numbers by using the '*' as shown below: -[assembly: AssemblyVersion("1.0.4.$WCREV$")] \ No newline at end of file +[assembly: AssemblyVersion("1.0.5.$WCREV$")] \ No newline at end of file diff --git a/GreenshotDropboxPlugin/DropBoxCredentials.cs b/GreenshotDropboxPlugin/DropBoxCredentials.cs new file mode 100644 index 000000000..b22d73e00 --- /dev/null +++ b/GreenshotDropboxPlugin/DropBoxCredentials.cs @@ -0,0 +1,31 @@ +/* + * Greenshot - a free and open source screenshot tool + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * + * For more information see: http://getgreenshot.org/ + * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ + * + * 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 1 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, see . + */ + +namespace GreenshotDropboxPlugin { + /// + /// This class is merely a placeholder for the file keeping the API key and secret for dropbox integration. + /// Copy this file to DropBoxCredentials.private.cs and fill in valid credentials. (Or empty strings, but of course you won't be able to use the DropBox plugin then.) + /// + public static class DropBoxCredentials { + public static string CONSUMER_KEY = empty; + public static string CONSUMER_SECRET = empty; + } +} diff --git a/GreenshotDropboxPlugin/DropBoxCredentials.private.cs b/GreenshotDropboxPlugin/DropBoxCredentials.private.cs new file mode 100644 index 000000000..1be011828 --- /dev/null +++ b/GreenshotDropboxPlugin/DropBoxCredentials.private.cs @@ -0,0 +1,9 @@ +using System; + +namespace GreenshotDropboxPlugin +{ + public static class DropBoxCredentials { + public static string CONSUMER_KEY = "u7c1rpxht2x5s1r"; + public static string CONSUMER_SECRET = "apitf6xvdaysaww"; + } +} diff --git a/GreenshotDropboxPlugin/Dropbox.gif b/GreenshotDropboxPlugin/Dropbox.gif new file mode 100644 index 0000000000000000000000000000000000000000..e09205da8ee2b67ad29dc3e3d41739aac2c33f9d GIT binary patch literal 2185 zcmV;42zK{JNk%w1VK4wJ0Qdg@%;fbzq3*NT^_*7ZcA?xD}~cDnL9o$YkK^h&4hTC(%n?fjL__|fY8 zP^s^^-}`R1@u<`EsnqqxigL2`)j!Iz~1$Z%lA#C?(Fsatkm>ww({ol z{cpVVhsN`9xA3Lb`J2r2X}a{i;roKX@?5U)iNo{4;PtlN`c^_9%?Y_;*b-1S(#Rj=`NyYqd%^6&Tj?e_fd_WYE{ z@rAhtMG%u^SImf^7;Sd^ZtCn^Tgr!a=h}6#_@T(^3CS^rP1`X-TJoL`R?}p z@Am!p`~CU+{iV|Oh{EtPnCxx4^m@PZlgII~*z{+!@oBX2X|?icxAK$6^J=y7@%a67 zy7P3q^7Q)uA^8LW00930EC2ui05AY7000R80RIUbNN^w(c^wKWEVzh>23HFsM%?ft zPm@kUBo@TQpu`hLBQ$CRN27oND^+-i$RYBdhFDj0@iCB(5UiF3`~2{y57VV8O(H-O zQ!An?D2njlIkn>CwI7Rc{_{nHfsqv}p#5y}ftsZR$rOfjWY64_rA?(&p)76{-Ja-gyk_nuKW%hbRWD^1j_Nf33RFAbjBFgcD4>QzkF*?;Sj%#ob|&=^yL4?cWB=ao9%nI{V|?C^^TGNJc@03r|~ zQU@4_azzP9Oi@h(1P~B|q;*#Rif02XxVpm*AzWg>5a@i+$pbhkGe#XNyn_r2w7Lo_ zrCDC8tP1?x@l6$%$kP{2a&Q4nA_O@5>ZEqgTI;tvyy4C`pqwdH297Wj04wLjkSw{( zS~{XK0F(1v-9p?O9o{lS?kPfWScoIxI1Hjf# zyCH>GI3OPrNWvfgk^qSwJi!Bzvt1Wp2m)#h;0Mpq$ObWBx<)Wz5K@qWEKIPOAr_GW zc({cdI50U6H0^1vu^~?25`YQ_?uvte!vuB%1~2x20-`8E9PHr+KoDaSkAO!sesBP( z3_1v8iH{KLk{Et_MiYU25|vmTp|rEh-4j! zct=yMU7B$u$L zgcSOb9ZU>Um6LR(Fh7NZHi&};WXR<}C}DvDAOQu|B<3o=sLf=i02VbIjocP*{dXr80{ISONflP~j_1kinHo1r{2>h8`%e3;5VnoP7|( L4`$)ffB*nHWeB9D literal 0 HcmV?d00001 diff --git a/GreenshotPhotobucketPlugin/PhotobucketDestination.cs b/GreenshotDropboxPlugin/DropboxDestination.cs similarity index 66% rename from GreenshotPhotobucketPlugin/PhotobucketDestination.cs rename to GreenshotDropboxPlugin/DropboxDestination.cs index d363ade98..8dea2a10a 100644 --- a/GreenshotPhotobucketPlugin/PhotobucketDestination.cs +++ b/GreenshotDropboxPlugin/DropboxDestination.cs @@ -1,6 +1,6 @@ /* * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom, Francis Noel * * For more information see: http://getgreenshot.org/ * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ @@ -18,58 +18,51 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -using System; -using System.Collections.Generic; using System.ComponentModel; -using System.Diagnostics; using System.Drawing; -using System.IO; -using System.Windows; - +using Greenshot.IniFile; using Greenshot.Plugin; using GreenshotPlugin.Core; -using Greenshot.IniFile; +namespace GreenshotDropboxPlugin { + class DropboxDestination : AbstractDestination { + private static log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(DropboxDestination)); + private static DropboxPluginConfiguration config = IniConfig.GetIniSection(); -namespace GreenshotPhotobucketPlugin { - /// - /// Description of PhotobucketDestination. - /// - public class PhotobucketDestination : AbstractDestination { - private static log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(PhotobucketDestination)); - private static PhotobucketConfiguration config = IniConfig.GetIniSection(); - private PhotobucketPlugin plugin = null; - - public PhotobucketDestination(PhotobucketPlugin plugin) { + private DropboxPlugin plugin = null; + public DropboxDestination(DropboxPlugin plugin) { this.plugin = plugin; } public override string Designation { get { - return "Photobucket"; + return "Dropbox"; } } public override string Description { get { - return Language.GetString("photobucket", LangKey.upload_menu_item); + return Language.GetString("dropbox", LangKey.upload_menu_item); } } public override Image DisplayIcon { get { - ComponentResourceManager resources = new ComponentResourceManager(typeof(PhotobucketPlugin)); - return (Image)resources.GetObject("Photobucket"); + ComponentResourceManager resources = new ComponentResourceManager(typeof(DropboxPlugin)); + return (Image)resources.GetObject("Dropbox"); } } - - public override ExportInformation ExportCapture(bool manuallyInitiated, ISurface surface, ICaptureDetails captureDetails) { + + public override ExportInformation ExportCapture(bool manually, ISurface surface, ICaptureDetails captureDetails) { ExportInformation exportInformation = new ExportInformation(this.Designation, this.Description); using (Image image = surface.GetImageForExport()) { string uploadURL = null; bool uploaded = plugin.Upload(captureDetails, image, out uploadURL); if (uploaded) { - exportInformation.ExportMade = true; exportInformation.Uri = uploadURL; + exportInformation.ExportMade = true; + if (config.AfterUploadLinkToClipBoard) { + ClipboardHelper.SetClipboardData(uploadURL); + } } } ProcessExport(exportInformation, surface); diff --git a/GreenshotImmioPlugin/ImmioPlugin.cs b/GreenshotDropboxPlugin/DropboxPlugin.cs similarity index 56% rename from GreenshotImmioPlugin/ImmioPlugin.cs rename to GreenshotDropboxPlugin/DropboxPlugin.cs index ebd9acc72..c3233cc72 100644 --- a/GreenshotImmioPlugin/ImmioPlugin.cs +++ b/GreenshotDropboxPlugin/DropboxPlugin.cs @@ -1,6 +1,6 @@ /* * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom, Francis Noel * * For more information see: http://getgreenshot.org/ * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ @@ -29,24 +29,25 @@ using Greenshot.Plugin; using GreenshotPlugin.Controls; using GreenshotPlugin.Core; -namespace GreenshotImmioPlugin { +namespace GreenshotDropboxPlugin { /// - /// This is the ImmioPlugin code + /// This is the Dropbox base code /// - public class ImmioPlugin : IGreenshotPlugin { - private static readonly log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(ImmioPlugin)); - private static ImmioConfiguration config; + public class DropboxPlugin : IGreenshotPlugin { + private static readonly log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(DropboxPlugin)); + private static DropboxPluginConfiguration config; public static PluginAttribute Attributes; private IGreenshotHost host; private ComponentResourceManager resources; - public ImmioPlugin() { + public DropboxPlugin() { } public IEnumerable Destinations() { - yield return new ImmioDestination(this); + yield return new DropboxDestination(this); } + public IEnumerable Processors() { yield break; } @@ -55,29 +56,28 @@ namespace GreenshotImmioPlugin { /// Implementation of the IGreenshotPlugin.Initialize /// /// Use the IGreenshotPluginHost interface to register events - /// Use the ICaptureHost interface to register in the MainContextMenu /// My own attributes - /// true if plugin is initialized, false if not (doesn't show) public virtual bool Initialize(IGreenshotHost pluginHost, PluginAttribute myAttributes) { this.host = (IGreenshotHost)pluginHost; Attributes = myAttributes; - // Get configuration - config = IniConfig.GetIniSection(); - resources = new ComponentResourceManager(typeof(ImmioPlugin)); - - ToolStripMenuItem itemPlugInRoot = new ToolStripMenuItem(Language.GetString("immio", LangKey.configure)); - itemPlugInRoot.Image = (Image)resources.GetObject("Immio"); - itemPlugInRoot.Click += delegate { - config.ShowConfigDialog(); - }; + // Register configuration (don't need the configuration itself) + config = IniConfig.GetIniSection(); + resources = new ComponentResourceManager(typeof(DropboxPlugin)); + + ToolStripMenuItem itemPlugInConfig = new ToolStripMenuItem(); + itemPlugInConfig.Text = Language.GetString("dropbox", LangKey.Configure); + itemPlugInConfig.Tag = host; + itemPlugInConfig.Click += new System.EventHandler(ConfigMenuClick); + itemPlugInConfig.Image = (Image)resources.GetObject("Dropbox"); + + PluginUtils.AddToContextMenu(host, itemPlugInConfig); - PluginUtils.AddToContextMenu(host, itemPlugInRoot); return true; } - + public virtual void Shutdown() { - LOG.Debug("Immio Plugin shutdown."); + LOG.Debug("Dropbox Plugin shutdown."); } /// @@ -93,44 +93,38 @@ namespace GreenshotImmioPlugin { /// /// public void Closing(object sender, FormClosingEventArgs e) { - LOG.Debug("Application closing, de-registering Immio Plugin!"); + LOG.Debug("Application closing, de-registering Dropbox Plugin!"); Shutdown(); } - + + public void ConfigMenuClick(object sender, EventArgs eventArgs) { + config.ShowConfigDialog(); + } + /// - /// Upload the capture to Immio + /// This will be called when the menu item in the Editor is clicked /// - /// - /// - /// out string for the url - /// true if the upload succeeded - public bool Upload(ICaptureDetails captureDetails, Image image, out string uploadURL) { - OutputSettings outputSettings = new OutputSettings(config.UploadFormat, config.UploadJpegQuality, config.UploadReduceColors); - uploadURL = null; + public bool Upload(ICaptureDetails captureDetails, Image image, out string uploadUrl) { + uploadUrl = null; + OutputSettings outputSettings = new OutputSettings(config.UploadFormat, config.UploadJpegQuality, false); try { - string filename = Path.GetFileName(FilenameHelper.GetFilename(config.UploadFormat, captureDetails)); - string url = null; - - // Run upload in the background - new PleaseWaitForm().ShowAndWait(Attributes.Name, Language.GetString("immio", LangKey.communication_wait), + string dropboxUrl = null; + new PleaseWaitForm().ShowAndWait(Attributes.Name, Language.GetString("dropbox", LangKey.communication_wait), delegate() { - url = ImmioUtils.UploadToImmio(image, outputSettings, captureDetails.Title, filename); + string filename = Path.GetFileName(FilenameHelper.GetFilename(config.UploadFormat, captureDetails)); + dropboxUrl = DropboxUtils.UploadToDropbox(image, outputSettings, filename); } ); - uploadURL = url; - - IniConfig.Save(); - try { - ClipboardHelper.SetClipboardData(url); - } catch (Exception ex) { - LOG.Error("Can't write to clipboard: ", ex); + if (dropboxUrl == null) { + return false; } + uploadUrl = dropboxUrl; return true; } catch (Exception e) { LOG.Error(e); - MessageBox.Show(Language.GetString("immio", LangKey.upload_failure) + " " + e.Message); + MessageBox.Show(Language.GetString("dropbox", LangKey.upload_failure) + " " + e.ToString()); + return false; } - return false; } } } diff --git a/GreenshotPhotobucketPlugin/PhotobucketPlugin.resx b/GreenshotDropboxPlugin/DropboxPlugin.resx similarity index 80% rename from GreenshotPhotobucketPlugin/PhotobucketPlugin.resx rename to GreenshotDropboxPlugin/DropboxPlugin.resx index 1727301b6..f386b11fa 100644 --- a/GreenshotPhotobucketPlugin/PhotobucketPlugin.resx +++ b/GreenshotDropboxPlugin/DropboxPlugin.resx @@ -1,136 +1,124 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - YQUAAAIsSURBVDhPjZLfT1JhHMbP39DOUcKy0LpptRi57hC6YToTwzIsl26tm35dJl2oQaiX0axs1ECE - xC1CLHWzBZLVlKy2qDZFsqX/xrl4ep+XaK6rc/GMd9/383nO+x6O0tQdsllcg5vW8/d1a/eYsQiWzsme - BzbF4hoqByKrGHhSgG98xVDI0qGr1LeM6oe8z2DumEDdmZihkKVDV9FOjejmjpgoiMHknkBte1SW7RXr - o5emZbjmrMpVf+mKgmFZcOLyczzOfMfL979w494ylta2kZz/hqm5InJrv3Ez9A59wzkZsnToKpozqPMJ - 4+kiQokCMtl1vMqXUO9+CmtvElMLP+APf5CzTG5DMmTp0FVU511Z8OhFEc7rM3j7ZQcHOytXMLmjUFvC - uDa6iGCkgPznHcmQ5T5dRXUExBUqBZ2355Fe2kTN6agEqqlpi2D69TpS2ZJkyNKhKwvqPDE59PjmkM6X - ZQFfaDW17eKFXoiL8rJkyNL5V7DfMymHzVfTyH/aRsO5BExC2h3OuEeGLJ2/BX79wNlJPEx9xViqiIy4 - wuJHUdIVhyqOznDNGffIkKWjOvziCs1+vaErgWMX4/D6ZuHtn8WVwALerPzEzPKWTHZ1S864R4YsHbqi - 4I5+WHxVvPfu7HGFYRF/JcP1//t06CqafVA/0pOEJo6qtUUNJgLpCFfZ5+gvN/XFcby38tkaCVk6dJXG - 1qDNbL9V0uwDuiaOZCiCpdPYOmL7A+GxSANdcOqRAAAAAElFTkSuQmCC - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + dropbox.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/GreenshotOfficeCommunicatorPlugin/OfficeCommunicatorConfiguration.cs b/GreenshotDropboxPlugin/DropboxPluginConfiguration.cs similarity index 53% rename from GreenshotOfficeCommunicatorPlugin/OfficeCommunicatorConfiguration.cs rename to GreenshotDropboxPlugin/DropboxPluginConfiguration.cs index d5b33907e..bde33ff4e 100644 --- a/GreenshotOfficeCommunicatorPlugin/OfficeCommunicatorConfiguration.cs +++ b/GreenshotDropboxPlugin/DropboxPluginConfiguration.cs @@ -1,6 +1,6 @@ /* * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom, Francis Noel * * For more information see: http://getgreenshot.org/ * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ @@ -18,36 +18,37 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -using System; -using System.Collections.Generic; using System.Windows.Forms; - -using GreenshotPlugin.Controls; -using GreenshotPlugin.Core; using Greenshot.IniFile; +using GreenshotPlugin.Core; -namespace GreenshotOfficeCommunicatorPlugin { + +namespace GreenshotDropboxPlugin { /// - /// Description of OfficeCommunicatorConfiguration. + /// Description of ImgurConfiguration. /// - [IniSection("OfficeCommunicator", Description="Greenshot OfficeCommunicator Plugin configuration")] - public class OfficeCommunicatorConfiguration : IniSection { - [IniProperty("Destination", Description = "The designation of the destination which is used to export via, the returned URL is used in the message.", DefaultValue = "FileDialog")] - public string DestinationDesignation; + [IniSection("Dropbox", Description = "Greenshot Dropbox Plugin configuration")] + public class DropboxPluginConfiguration : IniSection { + [IniProperty("UploadFormat", Description="What file type to use for uploading", DefaultValue="png")] + public OutputFormat UploadFormat; + [IniProperty("UploadJpegQuality", Description="JPEG file save quality in %.", DefaultValue="80")] + public int UploadJpegQuality; + + [IniProperty("AfterUploadLinkToClipBoard", Description = "After upload send Dropbox link to clipboard.", DefaultValue = "true")] + public bool AfterUploadLinkToClipBoard; + + [IniProperty("DropboxToken", Description = "The Dropbox token", Encrypted = true, ExcludeIfNull = true)] + public string DropboxToken; + [IniProperty("DropboxTokenSecret", Description = "The Dropbox token secret", Encrypted = true, ExcludeIfNull = true)] + public string DropboxTokenSecret; + /// - /// A form for username/password + /// A form for token /// /// bool true if OK was pressed, false if cancel public bool ShowConfigDialog() { - SettingsForm settingsForm = null; - - new PleaseWaitForm().ShowAndWait(OfficeCommunicatorPlugin.Attributes.Name, Language.GetString("officecommunicator", LangKey.communication_wait), - delegate() { - settingsForm = new SettingsForm(this); - } - ); - DialogResult result = settingsForm.ShowDialog(); + DialogResult result = new SettingsForm().ShowDialog(); if (result == DialogResult.OK) { return true; } diff --git a/GreenshotDropboxPlugin/DropboxUtils.cs b/GreenshotDropboxPlugin/DropboxUtils.cs new file mode 100644 index 000000000..e098ab3e3 --- /dev/null +++ b/GreenshotDropboxPlugin/DropboxUtils.cs @@ -0,0 +1,80 @@ +/* + * Greenshot - a free and open source screenshot tool + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom, Francis Noel + * + * For more information see: http://getgreenshot.org/ + * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ + * + * 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 1 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, see . + */ +using System; +using System.Collections.Generic; +using System.Drawing; +using Greenshot.IniFile; +using Greenshot.Plugin; +using GreenshotPlugin.Core; + +namespace GreenshotDropboxPlugin { + /// + /// Description of DropboxUtils. + /// + public class DropboxUtils { + private static readonly log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(DropboxUtils)); + private static DropboxPluginConfiguration config = IniConfig.GetIniSection(); + + private DropboxUtils() { + } + + public static string UploadToDropbox(Image image, OutputSettings outputSettings, string filename) { + OAuthSession oAuth = new OAuthSession(DropBoxCredentials.CONSUMER_KEY, DropBoxCredentials.CONSUMER_SECRET); + oAuth.BrowserSize = new Size(1080, 650); + oAuth.CheckVerifier = false; + oAuth.AccessTokenUrl = "https://api.dropbox.com/1/oauth/access_token"; + oAuth.AuthorizeUrl = "https://api.dropbox.com/1/oauth/authorize"; + oAuth.RequestTokenUrl = "https://api.dropbox.com/1/oauth/request_token"; + oAuth.LoginTitle = "Dropbox authorization"; + oAuth.Token = config.DropboxToken; + oAuth.TokenSecret = config.DropboxTokenSecret; + + try { + ImageContainer imageToUpload = new ImageContainer(image, outputSettings, filename); + string uploadResponse = oAuth.MakeOAuthRequest(HTTPMethod.POST, "https://api-content.dropbox.com/1/files_put/sandbox/" + OAuthSession.UrlEncode3986(filename), null, null, imageToUpload); + LOG.DebugFormat("Upload response: {0}", uploadResponse); + } catch (Exception ex) { + LOG.Error("Upload error: ", ex); + throw ex; + } finally { + if (!string.IsNullOrEmpty(oAuth.Token)) { + config.DropboxToken = oAuth.Token; + } + if (!string.IsNullOrEmpty(oAuth.TokenSecret)) { + config.DropboxTokenSecret = oAuth.TokenSecret; + } + } + + // Try to get a URL to the uploaded image + try { + string responseString = oAuth.MakeOAuthRequest(HTTPMethod.GET, "https://api.dropbox.com/1/shares/sandbox/" + OAuthSession.UrlEncode3986(filename), null, null, null); + LOG.DebugFormat("Parsing output: {0}", responseString); + IDictionary returnValues = JSONHelper.JsonDecode(responseString); + if (returnValues.ContainsKey("url")) { + return returnValues["url"] as string; + } + } catch (Exception ex) { + LOG.Error("Can't parse response.", ex); + } + return null; + } + } +} diff --git a/GreenshotImmioPlugin/Forms/ImmioForm.cs b/GreenshotDropboxPlugin/Forms/DropboxForm.cs similarity index 78% rename from GreenshotImmioPlugin/Forms/ImmioForm.cs rename to GreenshotDropboxPlugin/Forms/DropboxForm.cs index ed117daf5..faaaae165 100644 --- a/GreenshotImmioPlugin/Forms/ImmioForm.cs +++ b/GreenshotDropboxPlugin/Forms/DropboxForm.cs @@ -1,6 +1,6 @@ /* * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom, Francis Noel * * For more information see: http://getgreenshot.org/ * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ @@ -19,16 +19,9 @@ * along with this program. If not, see . */ using System; -using System.Windows.Forms; -using GreenshotPlugin.Core; using GreenshotPlugin.Controls; -namespace GreenshotImmioPlugin { - /// - /// Description of ImmioForm. - /// - public class ImmioForm : GreenshotForm { - public ImmioForm() : base() { - } +namespace GreenshotDropboxPlugin.Forms { + public class DropboxForm : GreenshotForm { } } diff --git a/GreenshotPhotobucketPlugin/Forms/SettingsForm.Designer.cs b/GreenshotDropboxPlugin/Forms/SettingsForm.Designer.cs similarity index 62% rename from GreenshotPhotobucketPlugin/Forms/SettingsForm.Designer.cs rename to GreenshotDropboxPlugin/Forms/SettingsForm.Designer.cs index fb1b23364..89d0711d2 100644 --- a/GreenshotPhotobucketPlugin/Forms/SettingsForm.Designer.cs +++ b/GreenshotDropboxPlugin/Forms/SettingsForm.Designer.cs @@ -1,6 +1,6 @@ /* * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * Copyright (C) 2007-2011 Thomas Braun, Jens Klingen, Robin Krom * * For more information see: http://getgreenshot.org/ * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ @@ -18,7 +18,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -namespace GreenshotPhotobucketPlugin { +namespace GreenshotDropboxPlugin { partial class SettingsForm { /// /// Designer variable used to keep track of non-visual components. @@ -44,115 +44,109 @@ namespace GreenshotPhotobucketPlugin { /// Do not change the method contents inside the source code editor. The Forms designer might /// not be able to load this method if it was changed manually. /// - private void InitializeComponent() - { + private void InitializeComponent() { this.buttonOK = new GreenshotPlugin.Controls.GreenshotButton(); this.buttonCancel = new GreenshotPlugin.Controls.GreenshotButton(); - this.label_url = new GreenshotPlugin.Controls.GreenshotLabel(); - this.textBoxUrl = new GreenshotPlugin.Controls.GreenshotTextBox(); this.combobox_uploadimageformat = new GreenshotPlugin.Controls.GreenshotComboBox(); this.label_upload_format = new GreenshotPlugin.Controls.GreenshotLabel(); - this.checkbox_usepagelink = new GreenshotPlugin.Controls.GreenshotCheckBox(); + this.label_AfterUpload = new GreenshotPlugin.Controls.GreenshotLabel(); + this.checkboxAfterUploadLinkToClipBoard = new GreenshotPlugin.Controls.GreenshotCheckBox(); this.SuspendLayout(); // // buttonOK // this.buttonOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.buttonOK.LanguageKey = "photobucket.OK"; - this.buttonOK.Location = new System.Drawing.Point(222, 129); + this.buttonOK.LanguageKey = "OK"; + this.buttonOK.Location = new System.Drawing.Point(267, 64); this.buttonOK.Name = "buttonOK"; this.buttonOK.Size = new System.Drawing.Size(75, 23); this.buttonOK.TabIndex = 2; + this.buttonOK.Text = "OK"; this.buttonOK.UseVisualStyleBackColor = true; this.buttonOK.Click += new System.EventHandler(this.ButtonOKClick); // // buttonCancel // this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.buttonCancel.LanguageKey = "photobucket.CANCEL"; - this.buttonCancel.Location = new System.Drawing.Point(303, 129); + this.buttonCancel.LanguageKey = "CANCEL"; + this.buttonCancel.Location = new System.Drawing.Point(348, 64); this.buttonCancel.Name = "buttonCancel"; this.buttonCancel.Size = new System.Drawing.Size(75, 23); this.buttonCancel.TabIndex = 3; + this.buttonCancel.Text = "Cancel"; this.buttonCancel.UseVisualStyleBackColor = true; this.buttonCancel.Click += new System.EventHandler(this.ButtonCancelClick); // - // label_url - // - this.label_url.LanguageKey = "photobucket.label_url"; - this.label_url.Location = new System.Drawing.Point(12, 21); - this.label_url.Name = "label_url"; - this.label_url.Size = new System.Drawing.Size(84, 20); - this.label_url.TabIndex = 7; - // - // textBoxUrl - // - this.textBoxUrl.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.textBoxUrl.Location = new System.Drawing.Point(102, 21); - this.textBoxUrl.Name = "textBoxUrl"; - this.textBoxUrl.PropertyName = "PhotobucketApiUrl"; - this.textBoxUrl.SectionName = "Photobucket"; - this.textBoxUrl.Size = new System.Drawing.Size(276, 20); - this.textBoxUrl.TabIndex = 6; - // // combobox_uploadimageformat // + this.combobox_uploadimageformat.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); this.combobox_uploadimageformat.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.combobox_uploadimageformat.FormattingEnabled = true; - this.combobox_uploadimageformat.Location = new System.Drawing.Point(102, 47); + this.combobox_uploadimageformat.Location = new System.Drawing.Point(116, 9); this.combobox_uploadimageformat.Name = "combobox_uploadimageformat"; this.combobox_uploadimageformat.PropertyName = "UploadFormat"; - this.combobox_uploadimageformat.SectionName = "Photobucket"; - this.combobox_uploadimageformat.Size = new System.Drawing.Size(276, 21); + this.combobox_uploadimageformat.SectionName = "Dropbox"; + this.combobox_uploadimageformat.Size = new System.Drawing.Size(309, 21); this.combobox_uploadimageformat.TabIndex = 8; // // label_upload_format // - this.label_upload_format.LanguageKey = "photobucket.label_upload_format"; - this.label_upload_format.Location = new System.Drawing.Point(12, 50); + this.label_upload_format.LanguageKey = "dropbox.label_upload_format"; + this.label_upload_format.Location = new System.Drawing.Point(11, 12); this.label_upload_format.Name = "label_upload_format"; this.label_upload_format.Size = new System.Drawing.Size(84, 20); this.label_upload_format.TabIndex = 9; + this.label_upload_format.Text = "Image format"; // - // checkbox_usepagelink + // label_AfterUpload // - this.checkbox_usepagelink.AutoSize = true; - this.checkbox_usepagelink.LanguageKey = "photobucket.use_page_link"; - this.checkbox_usepagelink.Location = new System.Drawing.Point(15, 97); - this.checkbox_usepagelink.Name = "checkbox_usepagelink"; - this.checkbox_usepagelink.PropertyName = "UsePageLink"; - this.checkbox_usepagelink.SectionName = "Photobucket"; - this.checkbox_usepagelink.Size = new System.Drawing.Size(297, 17); - this.checkbox_usepagelink.TabIndex = 13; - this.checkbox_usepagelink.UseVisualStyleBackColor = true; + this.label_AfterUpload.LanguageKey = "dropbox.label_AfterUpload"; + this.label_AfterUpload.Location = new System.Drawing.Point(10, 37); + this.label_AfterUpload.Name = "label_AfterUpload"; + this.label_AfterUpload.Size = new System.Drawing.Size(84, 21); + this.label_AfterUpload.TabIndex = 22; + this.label_AfterUpload.Text = "After upload"; + // + // checkboxAfterUploadLinkToClipBoard + // + this.checkboxAfterUploadLinkToClipBoard.AutoSize = true; + this.checkboxAfterUploadLinkToClipBoard.LanguageKey = "dropbox.label_AfterUploadLinkToClipBoard"; + this.checkboxAfterUploadLinkToClipBoard.Location = new System.Drawing.Point(116, 37); + this.checkboxAfterUploadLinkToClipBoard.Name = "checkboxAfterUploadLinkToClipBoard"; + this.checkboxAfterUploadLinkToClipBoard.PropertyName = "AfterUploadLinkToClipBoard"; + this.checkboxAfterUploadLinkToClipBoard.SectionName = "Dropbox"; + this.checkboxAfterUploadLinkToClipBoard.Size = new System.Drawing.Size(104, 17); + this.checkboxAfterUploadLinkToClipBoard.TabIndex = 24; + this.checkboxAfterUploadLinkToClipBoard.Text = "Link to clipboard"; + this.checkboxAfterUploadLinkToClipBoard.UseVisualStyleBackColor = true; // // SettingsForm // this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.ClientSize = new System.Drawing.Size(387, 168); - this.Controls.Add(this.checkbox_usepagelink); + this.ClientSize = new System.Drawing.Size(432, 96); + this.Controls.Add(this.checkboxAfterUploadLinkToClipBoard); + this.Controls.Add(this.label_AfterUpload); this.Controls.Add(this.label_upload_format); this.Controls.Add(this.combobox_uploadimageformat); - this.Controls.Add(this.label_url); - this.Controls.Add(this.textBoxUrl); this.Controls.Add(this.buttonCancel); this.Controls.Add(this.buttonOK); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; - this.LanguageKey = "photobucket.settings_title"; + this.LanguageKey = "dropbox.settings_title"; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "SettingsForm"; + this.Text = "Dropbox settings"; this.ResumeLayout(false); this.PerformLayout(); } private GreenshotPlugin.Controls.GreenshotComboBox combobox_uploadimageformat; private GreenshotPlugin.Controls.GreenshotLabel label_upload_format; - private GreenshotPlugin.Controls.GreenshotTextBox textBoxUrl; - private GreenshotPlugin.Controls.GreenshotLabel label_url; private GreenshotPlugin.Controls.GreenshotButton buttonCancel; private GreenshotPlugin.Controls.GreenshotButton buttonOK; - private GreenshotPlugin.Controls.GreenshotCheckBox checkbox_usepagelink; + private GreenshotPlugin.Controls.GreenshotLabel label_AfterUpload; + private GreenshotPlugin.Controls.GreenshotCheckBox checkboxAfterUploadLinkToClipBoard; } } diff --git a/GreenshotOfficeCommunicatorPlugin/Forms/SettingsForm.cs b/GreenshotDropboxPlugin/Forms/SettingsForm.cs similarity index 76% rename from GreenshotOfficeCommunicatorPlugin/Forms/SettingsForm.cs rename to GreenshotDropboxPlugin/Forms/SettingsForm.cs index 5cf2826b1..1c02aa711 100644 --- a/GreenshotOfficeCommunicatorPlugin/Forms/SettingsForm.cs +++ b/GreenshotDropboxPlugin/Forms/SettingsForm.cs @@ -1,6 +1,6 @@ /* * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom, Francis Noel * * For more information see: http://getgreenshot.org/ * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ @@ -20,22 +20,26 @@ */ using System; using System.Windows.Forms; +using GreenshotDropboxPlugin.Forms; using GreenshotPlugin.Core; -using GreenshotPlugin.Controls; +using Greenshot.IniFile; -namespace GreenshotOfficeCommunicatorPlugin { +namespace GreenshotDropboxPlugin { /// /// Description of PasswordRequestForm. /// - public partial class SettingsForm : OfficeCommunicatorForm { - public SettingsForm(OfficeCommunicatorConfiguration config) : base() { + public partial class SettingsForm : DropboxForm { + private static readonly log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(SettingsForm)); + private static DropboxPluginConfiguration config = IniConfig.GetIniSection(); + + public SettingsForm() { // // The InitializeComponent() call is required for Windows Forms designer support. // InitializeComponent(); this.Icon = GreenshotPlugin.Core.GreenshotResources.getGreenshotIcon(); } - + void ButtonOKClick(object sender, EventArgs e) { this.DialogResult = DialogResult.OK; } diff --git a/GreenshotDropboxPlugin/GreenshotDropboxPlugin.csproj b/GreenshotDropboxPlugin/GreenshotDropboxPlugin.csproj new file mode 100644 index 000000000..395cb230f --- /dev/null +++ b/GreenshotDropboxPlugin/GreenshotDropboxPlugin.csproj @@ -0,0 +1,108 @@ + + + + + {AD7CFFE2-40E7-46CF-A172-D48CF7AE9A12} + Library + GreenshotDropboxPlugin + GreenshotDropboxPlugin + v2.0 + Properties + False + False + 4 + false + Always + 3.5 + + + + + + False + ..\lib\log4net.dll + + + + + + + + + + + + + + Form + + + Form + + + SettingsForm.cs + + + + + DropboxPlugin.cs + + + + + + + + + {5B924697-4DCD-4F98-85F1-105CB84B7341} + GreenshotPlugin + + + + if exist "$(ProjectDir)DropBoxCredentials.orig.cs" ( + rename "$(ProjectDir)DropBoxCredentials.cs" "DropBoxCredentials.private.cs" + rename "$(ProjectDir)DropBoxCredentials.orig.cs" "DropBoxCredentials.cs" +) else exit /b -1 + +mkdir "$(SolutionDir)bin\$(Configuration)\Plugins\$(ProjectName)" +copy "$(ProjectDir)bin\$(Configuration)\$(TargetFileName)" "$(SolutionDir)bin\$(Configuration)\Plugins\$(ProjectName)\*.gsp" +copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).pdb" "$(SolutionDir)bin\$(Configuration)\Plugins\$(ProjectName)\" +mkdir "$(SolutionDir)bin\$(Configuration)\Languages\Plugins\$(ProjectName)" +copy "$(ProjectDir)Languages\*.xml" "$(SolutionDir)bin\$(Configuration)\Languages\Plugins\$(ProjectName)\" + + "$(SolutionDir)\tools\TortoiseSVN\SubWCRev.exe" "$(ProjectDir)\" "$(ProjectDir)\Properties\AssemblyInfo.cs.template" "$(ProjectDir)\Properties\AssemblyInfo.cs" + +if exist "$(ProjectDir)DropBoxCredentials.private.cs" ( + rename "$(ProjectDir)DropBoxCredentials.cs" "DropBoxCredentials.orig.cs" + rename "$(ProjectDir)DropBoxCredentials.private.cs" "DropBoxCredentials.cs" +) else exit /b -1 + + + False + Off + 4194304 + x86 + 4096 + + + False + Off + 4194304 + AnyCPU + 4096 + + + DEBUG;TRACE + False + True + Full + true + + + TRACE + True + False + None + false + + \ No newline at end of file diff --git a/GreenshotPhotobucketPlugin/LanguageKeys.cs b/GreenshotDropboxPlugin/LanguageKeys.cs similarity index 82% rename from GreenshotPhotobucketPlugin/LanguageKeys.cs rename to GreenshotDropboxPlugin/LanguageKeys.cs index 82debdf6d..38bfa6505 100644 --- a/GreenshotPhotobucketPlugin/LanguageKeys.cs +++ b/GreenshotDropboxPlugin/LanguageKeys.cs @@ -1,6 +1,6 @@ /* * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom, Francis Noel * * For more information see: http://getgreenshot.org/ * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ @@ -18,25 +18,16 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -using System; - -namespace GreenshotPhotobucketPlugin { +namespace GreenshotDropboxPlugin { public enum LangKey { upload_menu_item, settings_title, - label_url, label_upload_format, - label_clear, - OK, - CANCEL, upload_success, upload_failure, communication_wait, - delete_question, - clear_question, - delete_title, - use_page_link, - history, - configure + Configure, + label_AfterUpload, + label_AfterUploadLinkToClipBoard } } diff --git a/GreenshotDropboxPlugin/Languages/language_dropboxplugin-en-US.xml b/GreenshotDropboxPlugin/Languages/language_dropboxplugin-en-US.xml new file mode 100644 index 000000000..682135288 --- /dev/null +++ b/GreenshotDropboxPlugin/Languages/language_dropboxplugin-en-US.xml @@ -0,0 +1,35 @@ + + + + + Link to clipboard + + + Open history + + + After upload + + + Configure Dropbox + + + Upload to Dropbox + + + Dropbox settings + + + Successfully uploaded image to Dropbox! + + + An error occured while uploading to Dropbox: + + + Image format + + + Communicating with Dropbox. Please wait... + + + \ No newline at end of file diff --git a/GreenshotDropboxPlugin/Languages/language_dropboxplugin-fr-FR.xml b/GreenshotDropboxPlugin/Languages/language_dropboxplugin-fr-FR.xml new file mode 100644 index 000000000..9f50c56d7 --- /dev/null +++ b/GreenshotDropboxPlugin/Languages/language_dropboxplugin-fr-FR.xml @@ -0,0 +1,14 @@ + + + + Communication en cours avec Dropbox. Veuillez patientez... + Configurer Dropbox + Après téléversement + Copier le lien dans le presse-papier + Format image + Paramètres Dropbox + Une erreur s'est produite lors du téléversement vers Dropbox : + Téléverser vers Dropbox + Image téléversée aves succès vers Dropbox ! + + \ No newline at end of file diff --git a/GreenshotDropboxPlugin/Languages/language_dropboxplugin-ru-RU.xml b/GreenshotDropboxPlugin/Languages/language_dropboxplugin-ru-RU.xml new file mode 100644 index 000000000..c63760cae --- /dev/null +++ b/GreenshotDropboxPlugin/Languages/language_dropboxplugin-ru-RU.xml @@ -0,0 +1,35 @@ + + + + +Ссылку в буфер обмена + + +Открыть историию + +После загрузки + + Настройка Dropbox + + + +Добавить в Dropbox + + + +Настройки Dropbox + + + +Изображение успешно загружено на Dropbox! + + + +Произошла ошибка при загрузке на Dropbox: + + + +Формат изображения + Обмен информацией с Dropbox. Подождите... + + \ No newline at end of file diff --git a/GreenshotDropboxPlugin/Languages/language_dropboxplugin-uk-UA.xml b/GreenshotDropboxPlugin/Languages/language_dropboxplugin-uk-UA.xml new file mode 100644 index 000000000..ee63423e9 --- /dev/null +++ b/GreenshotDropboxPlugin/Languages/language_dropboxplugin-uk-UA.xml @@ -0,0 +1,14 @@ + + + + Посилання в буфер обміну + Після вивантаження + Налаштувати Dropbox + Вивантажити на Dropbox + Параметри Dropbox + Зображення вдало вивантажено на Dropbox! + Відбулась помилка при вивантаженні зображення на Dropbox: + Формат зображення + З’єднання з Dropbox. Будь ласка, зачекайте... + + diff --git a/GreenshotDropboxPlugin/Languages/language_dropboxplugin-zh-CN.xml b/GreenshotDropboxPlugin/Languages/language_dropboxplugin-zh-CN.xml new file mode 100644 index 000000000..eacbbdd4c --- /dev/null +++ b/GreenshotDropboxPlugin/Languages/language_dropboxplugin-zh-CN.xml @@ -0,0 +1,14 @@ + + + + 正在连接Dropbox。请稍后... + 配置Dropbox + 上传之后 + 复制链接到剪贴板 + 图片格式 + Dropbox设置 + 在上传到Dropbox时发生错误: + 上传到Dropbox + 图片已成功上传到了Dropbox! + + \ No newline at end of file diff --git a/GreenshotOfficeCommunicatorPlugin/Properties/AssemblyInfo.cs.template b/GreenshotDropboxPlugin/Properties/AssemblyInfo.cs.template similarity index 78% rename from GreenshotOfficeCommunicatorPlugin/Properties/AssemblyInfo.cs.template rename to GreenshotDropboxPlugin/Properties/AssemblyInfo.cs.template index e67db7f4e..f38f7c889 100644 --- a/GreenshotOfficeCommunicatorPlugin/Properties/AssemblyInfo.cs.template +++ b/GreenshotDropboxPlugin/Properties/AssemblyInfo.cs.template @@ -1,6 +1,6 @@ /* * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom, Francis Noel * * For more information see: http://getgreenshot.org/ * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ @@ -30,16 +30,16 @@ using Greenshot.Plugin; // 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("Greenshot-OfficeCommunicator-Plugin")] -[assembly: AssemblyDescription("A plugin to upload images to office communicator")] +[assembly: AssemblyTitle("Greenshot-Dropbox-Plugin")] +[assembly: AssemblyDescription("A plugin to upload images to Dropbox")] [assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Greenshot")] -[assembly: AssemblyProduct("OfficeCommunicator Plugin")] -[assembly: AssemblyCopyright("Copyright (C) 2007-2012")] +[assembly: AssemblyCompany("Greenshot & F. Noel")] +[assembly: AssemblyProduct("Dropbox Plugin")] +[assembly: AssemblyCopyright("Copyright (C) 2012")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // The PluginAttribute describes the "entryType" and if the plugin is configurable -[assembly: PluginAttribute("GreenshotOfficeCommunicatorPlugin.OfficeCommunicatorPlugin", true)] +[assembly: PluginAttribute("GreenshotDropboxPlugin.DropboxPlugin", true)] // This sets the default COM visibility of types in the assembly to invisible. // If you need to expose a type to COM, use [ComVisible(true)] on that type. @@ -51,4 +51,4 @@ using Greenshot.Plugin; // // You can specify all the values or you can use the default the Revision and // Build Numbers by using the '*' as shown below: -[assembly: AssemblyVersion("1.0.3.$WCREV$")] +[assembly: AssemblyVersion("1.0.5.$WCREV$")] diff --git a/GreenshotExternalCommandPlugin/Properties/AssemblyInfo.cs.template b/GreenshotExternalCommandPlugin/Properties/AssemblyInfo.cs.template index e07958dcf..6e99cd4b6 100644 --- a/GreenshotExternalCommandPlugin/Properties/AssemblyInfo.cs.template +++ b/GreenshotExternalCommandPlugin/Properties/AssemblyInfo.cs.template @@ -50,4 +50,4 @@ using Greenshot.Plugin; // // You can specify all the values or you can use the default the Revision and // Build Numbers by using the '*' as shown below: -[assembly: AssemblyVersion("1.0.4.$WCREV$")] +[assembly: AssemblyVersion("1.0.5.$WCREV$")] diff --git a/GreenshotPhotobucketPlugin/PhotobucketConfiguration.cs b/GreenshotFlickrPlugin/FlickrConfiguration.cs similarity index 50% rename from GreenshotPhotobucketPlugin/PhotobucketConfiguration.cs rename to GreenshotFlickrPlugin/FlickrConfiguration.cs index 7a327bc30..7424e6778 100644 --- a/GreenshotPhotobucketPlugin/PhotobucketConfiguration.cs +++ b/GreenshotFlickrPlugin/FlickrConfiguration.cs @@ -1,6 +1,6 @@ /* * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom, Francis Noel * * For more information see: http://getgreenshot.org/ * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ @@ -18,53 +18,56 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -using System; -using System.Collections.Generic; using System.Windows.Forms; - -using GreenshotPlugin.Controls; -using GreenshotPlugin.Core; using Greenshot.IniFile; +using GreenshotPlugin.Core; -namespace GreenshotPhotobucketPlugin { +namespace GreenshotFlickrPlugin { + public enum SafetyLevel { + Safe = 1, + Moderate = 2, + Restricted = 3 + } /// - /// Description of PhotobucketConfiguration. + /// Description of FlickrConfiguration. /// - [IniSection("Photobucket", Description="Greenshot Photobucket Plugin configuration")] - public class PhotobucketConfiguration : IniSection { + [IniSection("Flickr", Description = "Greenshot Flickr Plugin configuration")] + public class FlickrConfiguration : IniSection { + [IniProperty("flickrIsPublic", Description = "IsPublic.", DefaultValue = "true")] + public bool IsPublic; + + [IniProperty("flickrIsFamily", Description = "IsFamily.", DefaultValue = "true")] + public bool IsFamily; + + [IniProperty("flickrIsFriend", Description = "IsFriend.", DefaultValue = "true")] + public bool IsFriend; + + [IniProperty("SafetyLevel", Description = "Safety level", DefaultValue = "Safe")] + public SafetyLevel SafetyLevel; + + [IniProperty("HiddenFromSearch", Description = "Hidden from search", DefaultValue = "false")] + public bool HiddenFromSearch; + [IniProperty("UploadFormat", Description="What file type to use for uploading", DefaultValue="png")] public OutputFormat UploadFormat; + [IniProperty("UploadJpegQuality", Description="JPEG file save quality in %.", DefaultValue="80")] public int UploadJpegQuality; - [IniProperty("UploadReduceColors", Description="Reduce color amount of the uploaded image to 256", DefaultValue="False")] - public bool UploadReduceColors; - [IniProperty("UsePageLink", Description = "Use pagelink instead of direct link on the clipboard", DefaultValue = "False")] - public bool UsePageLink; - [IniProperty("Token", Description = "The Photobucket token", Encrypted=true, ExcludeIfNull=true)] - public string Token; - [IniProperty("TokenSecret", Description = "The Photobucket token secret", Encrypted=true, ExcludeIfNull=true)] - public string TokenSecret; - [IniProperty("SubDomain", Description = "The Photobucket api subdomain", Encrypted = true, ExcludeIfNull = true)] - public string SubDomain; - - public int Credits { - get; - set; - } - /// - /// A form for username/password + [IniProperty("AfterUploadLinkToClipBoard", Description = "After upload send flickr link to clipboard.", DefaultValue = "true")] + public bool AfterUploadLinkToClipBoard; + + [IniProperty("FlickrToken", Description = "The Flickr token", Encrypted = true, ExcludeIfNull = true)] + public string FlickrToken; + [IniProperty("FlickrTokenSecret", Description = "The Flickr token secret", Encrypted = true, ExcludeIfNull = true)] + public string FlickrTokenSecret; + + /// + /// A form for token /// /// bool true if OK was pressed, false if cancel public bool ShowConfigDialog() { - SettingsForm settingsForm = null; - - new PleaseWaitForm().ShowAndWait(PhotobucketPlugin.Attributes.Name, Language.GetString("photobucket", LangKey.communication_wait), - delegate() { - settingsForm = new SettingsForm(this); - } - ); - DialogResult result = settingsForm.ShowDialog(); + DialogResult result = new SettingsForm(this).ShowDialog(); if (result == DialogResult.OK) { return true; } diff --git a/GreenshotFlickrPlugin/FlickrCredentials.cs b/GreenshotFlickrPlugin/FlickrCredentials.cs new file mode 100644 index 000000000..8cbbac87c --- /dev/null +++ b/GreenshotFlickrPlugin/FlickrCredentials.cs @@ -0,0 +1,31 @@ +/* + * Greenshot - a free and open source screenshot tool + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * + * For more information see: http://getgreenshot.org/ + * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ + * + * 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 1 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, see . + */ + +namespace GreenshotFlickrPlugin { + /// + /// This class is merely a placeholder for the file keeping the API key and secret for dropbox integration. + /// Copy this file to FlickrCredentials.private.cs and fill in valid credentials. (Or empty strings, but of course you won't be able to use the DropBox plugin then.) + /// + public static class FlickrCredentials { + public static string ConsumerKey = empty; + public static string ConsumerSecret = empty; + } +} diff --git a/GreenshotFlickrPlugin/FlickrCredentials.private.cs b/GreenshotFlickrPlugin/FlickrCredentials.private.cs new file mode 100644 index 000000000..6d4b25296 --- /dev/null +++ b/GreenshotFlickrPlugin/FlickrCredentials.private.cs @@ -0,0 +1,8 @@ +using System; + +namespace GreenshotFlickrPlugin { + public static class FlickrCredentials { + public static string ConsumerKey = "f967e5148945cb3c4e149cc5be97796a"; + public static string ConsumerSecret = "4180a21a1d2f8666"; + } +} diff --git a/GreenshotFlickrPlugin/FlickrDestination.cs b/GreenshotFlickrPlugin/FlickrDestination.cs new file mode 100644 index 000000000..609c962cb --- /dev/null +++ b/GreenshotFlickrPlugin/FlickrDestination.cs @@ -0,0 +1,64 @@ +/* + * Greenshot - a free and open source screenshot tool + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom, Francis Noel + * + * For more information see: http://getgreenshot.org/ + * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ + * + * 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 1 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, see . + */ +using System.ComponentModel; +using System.Drawing; +using Greenshot.IniFile; +using Greenshot.Plugin; +using GreenshotPlugin.Core; + +namespace GreenshotFlickrPlugin { + public class FlickrDestination : AbstractDestination { + private static log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(FlickrDestination)); + private static FlickrConfiguration config = IniConfig.GetIniSection(); + private FlickrPlugin plugin = null; + public FlickrDestination(FlickrPlugin plugin) { + this.plugin = plugin; + } + + public override string Designation { + get { + return "Flickr"; + } + } + + public override string Description { + get { + return Language.GetString("flickr", LangKey.upload_menu_item); + } + } + + public override Image DisplayIcon { + get { + ComponentResourceManager resources = new ComponentResourceManager(typeof(FlickrPlugin)); + return (Image)resources.GetObject("flickr"); + } + } + + public override ExportInformation ExportCapture(bool manuallyInitiated, ISurface surface, ICaptureDetails captureDetails) { + ExportInformation exportInformation = new ExportInformation(this.Designation, this.Description); + using (Image image = surface.GetImageForExport()) { + plugin.Upload(captureDetails, image, exportInformation); + } + ProcessExport(exportInformation, surface); + return exportInformation; + } + } +} diff --git a/GreenshotPhotobucketPlugin/PhotobucketPlugin.cs b/GreenshotFlickrPlugin/FlickrPlugin.cs similarity index 50% rename from GreenshotPhotobucketPlugin/PhotobucketPlugin.cs rename to GreenshotFlickrPlugin/FlickrPlugin.cs index 98b106f90..b5090b715 100644 --- a/GreenshotPhotobucketPlugin/PhotobucketPlugin.cs +++ b/GreenshotFlickrPlugin/FlickrPlugin.cs @@ -1,6 +1,6 @@ /* * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom, Francis Noel * * For more information see: http://getgreenshot.org/ * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ @@ -24,31 +24,31 @@ using System.ComponentModel; using System.Drawing; using System.IO; using System.Windows.Forms; -using System.Threading; - +using Greenshot.IniFile; using Greenshot.Plugin; using GreenshotPlugin.Controls; using GreenshotPlugin.Core; -using Greenshot.IniFile; -namespace GreenshotPhotobucketPlugin { +namespace GreenshotFlickrPlugin +{ /// - /// This is the GreenshotPhotobucketPlugin base code + /// This is the Flickr base code /// - public class PhotobucketPlugin : IGreenshotPlugin { - private static readonly log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(PhotobucketPlugin)); - private static PhotobucketConfiguration config; + public class FlickrPlugin : IGreenshotPlugin { + private static readonly log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(FlickrPlugin)); + private static FlickrConfiguration config; public static PluginAttribute Attributes; private IGreenshotHost host; private ComponentResourceManager resources; - public PhotobucketPlugin() { + public FlickrPlugin() { } public IEnumerable Destinations() { - yield return new PhotobucketDestination(this); + yield return new FlickrDestination(this); } + public IEnumerable Processors() { yield break; } @@ -57,31 +57,29 @@ namespace GreenshotPhotobucketPlugin { /// Implementation of the IGreenshotPlugin.Initialize /// /// Use the IGreenshotPluginHost interface to register events - /// Use the ICaptureHost interface to register in the MainContextMenu /// My own attributes - /// true if plugin is initialized, false if not (doesn't show) public virtual bool Initialize(IGreenshotHost pluginHost, PluginAttribute myAttributes) { this.host = (IGreenshotHost)pluginHost; Attributes = myAttributes; - // Get configuration - config = IniConfig.GetIniSection(); - resources = new ComponentResourceManager(typeof(PhotobucketPlugin)); - - ToolStripMenuItem itemPlugInConfig = new ToolStripMenuItem("Photobucket " + Language.GetString("photobucket", LangKey.configure)); + + // Register configuration (don't need the configuration itself) + config = IniConfig.GetIniSection(); + resources = new ComponentResourceManager(typeof(FlickrPlugin)); + + ToolStripMenuItem itemPlugInConfig = new ToolStripMenuItem(); + itemPlugInConfig.Text = Language.GetString("flickr", LangKey.Configure); itemPlugInConfig.Tag = host; - itemPlugInConfig.Click += delegate { - config.ShowConfigDialog(); - }; - itemPlugInConfig.Image = (Image)resources.GetObject("Photobucket"); + itemPlugInConfig.Image = (Image)resources.GetObject("flickr"); + itemPlugInConfig.Click += new System.EventHandler(ConfigMenuClick); PluginUtils.AddToContextMenu(host, itemPlugInConfig); return true; } - + public virtual void Shutdown() { - LOG.Debug("Photobucket Plugin shutdown."); + LOG.Debug("Flickr Plugin shutdown."); } /// @@ -97,50 +95,38 @@ namespace GreenshotPhotobucketPlugin { /// /// public void Closing(object sender, FormClosingEventArgs e) { - LOG.Debug("Application closing, de-registering Photobucket Plugin!"); + LOG.Debug("Application closing, de-registering Flickr Plugin!"); Shutdown(); } - - /// - /// Upload the capture to Photobucket - /// - /// - /// - /// out string for the url - /// true if the upload succeeded - public bool Upload(ICaptureDetails captureDetails, Image image, out string uploadURL) { - OutputSettings outputSettings = new OutputSettings(config.UploadFormat, config.UploadJpegQuality, config.UploadReduceColors); + + public void ConfigMenuClick(object sender, EventArgs eventArgs) { + config.ShowConfigDialog(); + } + + public void Upload(ICaptureDetails captureDetails, Image image, ExportInformation exportInformation) { + OutputSettings outputSettings = new OutputSettings(config.UploadFormat, config.UploadJpegQuality, false); try { - string filename = Path.GetFileName(FilenameHelper.GetFilename(config.UploadFormat, captureDetails)); - PhotobucketInfo photobucketInfo = null; - - // Run upload in the background - new PleaseWaitForm().ShowAndWait(Attributes.Name, Language.GetString("photobucket", LangKey.communication_wait), + string flickrUrl = null; + new PleaseWaitForm().ShowAndWait(Attributes.Name, Language.GetString("flickr", LangKey.communication_wait), delegate() { - photobucketInfo = PhotobucketUtils.UploadToPhotobucket(image, outputSettings, captureDetails.Title, filename); + string filename = Path.GetFileName(FilenameHelper.GetFilename(config.UploadFormat, captureDetails)); + flickrUrl = FlickrUtils.UploadToFlickr(image, outputSettings, captureDetails.Title, filename); } ); - // This causes an exeption if the upload failed :) - LOG.DebugFormat("Uploaded to Photobucket page: " + photobucketInfo.Page); - uploadURL = null; - try { - if (config.UsePageLink) { - uploadURL = photobucketInfo.Page; - Clipboard.SetText(photobucketInfo.Page); - } else { - uploadURL = photobucketInfo.Original; - Clipboard.SetText(photobucketInfo.Original); - } - } catch (Exception ex) { - LOG.Error("Can't write to clipboard: ", ex); + + if (flickrUrl == null) { + exportInformation.ExportMade = false; + return; + } + exportInformation.ExportMade = true; + exportInformation.Uri = flickrUrl; + + if (config.AfterUploadLinkToClipBoard) { + ClipboardHelper.SetClipboardData(flickrUrl); } - return true; } catch (Exception e) { - LOG.Error(e); - MessageBox.Show(Language.GetString("photobucket", LangKey.upload_failure) + " " + e.Message); + MessageBox.Show(Language.GetString("flickr", LangKey.upload_failure) + " " + e.Message); } - uploadURL = null; - return false; } } } diff --git a/GreenshotFlickrPlugin/FlickrPlugin.resx b/GreenshotFlickrPlugin/FlickrPlugin.resx new file mode 100644 index 000000000..d4a65b3e2 --- /dev/null +++ b/GreenshotFlickrPlugin/FlickrPlugin.resx @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + flickr.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/GreenshotFlickrPlugin/FlickrUtils.cs b/GreenshotFlickrPlugin/FlickrUtils.cs new file mode 100644 index 000000000..0119e7bde --- /dev/null +++ b/GreenshotFlickrPlugin/FlickrUtils.cs @@ -0,0 +1,129 @@ +/* + * Greenshot - a free and open source screenshot tool + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom, Francis Noel + * + * For more information see: http://getgreenshot.org/ + * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ + * + * 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 1 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, see . + */ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Xml; +using Greenshot.IniFile; +using Greenshot.Plugin; +using GreenshotPlugin.Core; + +namespace GreenshotFlickrPlugin { + /// + /// Description of FlickrUtils. + /// + public class FlickrUtils { + private static readonly log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(FlickrUtils)); + private static FlickrConfiguration config = IniConfig.GetIniSection(); + + private FlickrUtils() { + } + + + /// + /// Do the actual upload to Flickr + /// For more details on the available parameters, see: http://flickrnet.codeplex.com + /// + /// byte[] with image data + /// url to image + public static string UploadToFlickr(Image image, OutputSettings outputSettings, string title, string filename) { + OAuthSession oAuth = new OAuthSession(FlickrCredentials.ConsumerKey, FlickrCredentials.ConsumerSecret); + oAuth.BrowserSize = new Size(520, 800); + oAuth.CheckVerifier = false; + oAuth.AccessTokenUrl = "http://api.flickr.com/services/oauth/access_token"; + oAuth.AuthorizeUrl = "http://api.flickr.com/services/oauth/authorize"; + oAuth.RequestTokenUrl = "http://api.flickr.com/services/oauth/request_token"; + oAuth.LoginTitle = "Flickr authorization"; + oAuth.Token = config.FlickrToken; + oAuth.TokenSecret = config.FlickrTokenSecret; + if (string.IsNullOrEmpty(oAuth.Token)) { + if (!oAuth.Authorize()) { + return null; + } + if (!string.IsNullOrEmpty(oAuth.Token)) { + config.FlickrToken = oAuth.Token; + } + if (!string.IsNullOrEmpty(oAuth.TokenSecret)) { + config.FlickrTokenSecret = oAuth.TokenSecret; + } + IniConfig.Save(); + } + try { + IDictionary signedParameters = new Dictionary(); + signedParameters.Add("content_type","2"); // Screenshot + signedParameters.Add("tags","Greenshot"); + signedParameters.Add("is_public", config.IsPublic?"1":"0"); + signedParameters.Add("is_friend", config.IsFriend?"1":"0"); + signedParameters.Add("is_family", config.IsFamily?"1":"0"); + signedParameters.Add("safety_level", string.Format("{0}", (int)config.SafetyLevel)); + signedParameters.Add("hidden", config.HiddenFromSearch?"1":"2"); + IDictionary otherParameters = new Dictionary(); + otherParameters.Add("photo", new ImageContainer(image, outputSettings, filename)); + string response = oAuth.MakeOAuthRequest(HTTPMethod.POST, "http://api.flickr.com/services/upload/", signedParameters, otherParameters, null); + string photoId = GetPhotoId(response); + + // Get Photo Info + signedParameters = new Dictionary(); + signedParameters.Add("photo_id", photoId); + string photoInfo = oAuth.MakeOAuthRequest(HTTPMethod.POST, "http://api.flickr.com/services/rest/?method=flickr.photos.getInfo", signedParameters, null, null); + return GetUrl(photoInfo); + } catch (Exception ex) { + LOG.Error("Upload error: ", ex); + throw ex; + } finally { + if (!string.IsNullOrEmpty(oAuth.Token)) { + config.FlickrToken = oAuth.Token; + } + if (!string.IsNullOrEmpty(oAuth.TokenSecret)) { + config.FlickrTokenSecret = oAuth.TokenSecret; + } + } + } + + private static string GetUrl(string response) { + try { + XmlDocument doc = new XmlDocument(); + doc.LoadXml(response); + XmlNodeList nodes = doc.GetElementsByTagName("url"); + if(nodes.Count > 0) { + return nodes.Item(0).InnerText; + } + } catch (Exception ex) { + LOG.Error("Error parsing Flickr Response.", ex); + } + return null; + } + + private static string GetPhotoId(string response) { + try { + XmlDocument doc = new XmlDocument(); + doc.LoadXml(response); + XmlNodeList nodes = doc.GetElementsByTagName("photoid"); + if(nodes.Count > 0) { + return nodes.Item(0).InnerText; + } + } catch (Exception ex) { + LOG.Error("Error parsing Flickr Response.", ex); + } + return null; + } + } +} diff --git a/GreenshotPhotobucketPlugin/Forms/PhotobucketForm.cs b/GreenshotFlickrPlugin/Forms/FlickrForm.cs similarity index 76% rename from GreenshotPhotobucketPlugin/Forms/PhotobucketForm.cs rename to GreenshotFlickrPlugin/Forms/FlickrForm.cs index 5a2d509bc..da4ef5a13 100644 --- a/GreenshotPhotobucketPlugin/Forms/PhotobucketForm.cs +++ b/GreenshotFlickrPlugin/Forms/FlickrForm.cs @@ -1,6 +1,6 @@ /* * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom, Francis Noel * * For more information see: http://getgreenshot.org/ * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ @@ -19,13 +19,9 @@ * along with this program. If not, see . */ using System; +using GreenshotPlugin.Controls; -namespace GreenshotPhotobucketPlugin { - /// - /// This class is needed for design-time resolving of the language files - /// - public class PhotobucketForm : GreenshotPlugin.Controls.GreenshotForm { - public PhotobucketForm() : base() { - } +namespace GreenshotFlickrPlugin.Forms { + public class FlickrForm : GreenshotForm { } -} +} \ No newline at end of file diff --git a/GreenshotFlickrPlugin/Forms/SettingsForm.Designer.cs b/GreenshotFlickrPlugin/Forms/SettingsForm.Designer.cs new file mode 100644 index 000000000..b5f8d1b2b --- /dev/null +++ b/GreenshotFlickrPlugin/Forms/SettingsForm.Designer.cs @@ -0,0 +1,244 @@ +/* + * Greenshot - a free and open source screenshot tool + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom, Francis Noel + * + * For more information see: http://getgreenshot.org/ + * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ + * + * 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 1 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, see . + */ +namespace GreenshotFlickrPlugin { + partial class SettingsForm { + /// + /// Designer variable used to keep track of non-visual components. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Disposes resources used by the form. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing) { + if (components != null) { + components.Dispose(); + } + } + base.Dispose(disposing); + } + + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() + { + this.buttonOK = new GreenshotPlugin.Controls.GreenshotButton(); + this.buttonCancel = new GreenshotPlugin.Controls.GreenshotButton(); + this.combobox_uploadimageformat = new GreenshotPlugin.Controls.GreenshotComboBox(); + this.label_upload_format = new GreenshotPlugin.Controls.GreenshotLabel(); + this.checkBoxPublic = new GreenshotPlugin.Controls.GreenshotCheckBox(); + this.checkBoxFamily = new GreenshotPlugin.Controls.GreenshotCheckBox(); + this.checkBoxFriend = new GreenshotPlugin.Controls.GreenshotCheckBox(); + this.label_SafetyLevel = new GreenshotPlugin.Controls.GreenshotLabel(); + this.combobox_safetyLevel = new GreenshotPlugin.Controls.GreenshotComboBox(); + this.label_AfterUpload = new GreenshotPlugin.Controls.GreenshotLabel(); + this.checkboxAfterUploadLinkToClipBoard = new GreenshotPlugin.Controls.GreenshotCheckBox(); + this.checkBox_hiddenfromsearch = new GreenshotPlugin.Controls.GreenshotCheckBox(); + this.SuspendLayout(); + // + // buttonOK + // + this.buttonOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonOK.LanguageKey = "OK"; + this.buttonOK.Location = new System.Drawing.Point(270, 151); + this.buttonOK.Name = "buttonOK"; + this.buttonOK.Size = new System.Drawing.Size(75, 23); + this.buttonOK.TabIndex = 18; + this.buttonOK.Text = "OK"; + this.buttonOK.UseVisualStyleBackColor = true; + this.buttonOK.Click += new System.EventHandler(this.ButtonOKClick); + // + // buttonCancel + // + this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonCancel.LanguageKey = "CANCEL"; + this.buttonCancel.Location = new System.Drawing.Point(351, 151); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(75, 23); + this.buttonCancel.TabIndex = 19; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.ButtonCancelClick); + // + // combobox_uploadimageformat + // + this.combobox_uploadimageformat.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.combobox_uploadimageformat.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.combobox_uploadimageformat.FormattingEnabled = true; + this.combobox_uploadimageformat.Location = new System.Drawing.Point(174, 6); + this.combobox_uploadimageformat.Name = "combobox_uploadimageformat"; + this.combobox_uploadimageformat.PropertyName = "UploadFormat"; + this.combobox_uploadimageformat.SectionName = "Flickr"; + this.combobox_uploadimageformat.Size = new System.Drawing.Size(251, 21); + this.combobox_uploadimageformat.TabIndex = 4; + // + // label_upload_format + // + this.label_upload_format.LanguageKey = "flickr.label_upload_format"; + this.label_upload_format.Location = new System.Drawing.Point(11, 9); + this.label_upload_format.Name = "label_upload_format"; + this.label_upload_format.Size = new System.Drawing.Size(157, 20); + this.label_upload_format.TabIndex = 3; + this.label_upload_format.Text = "Image format"; + // + // checkBoxPublic + // + this.checkBoxPublic.AutoSize = true; + this.checkBoxPublic.LanguageKey = "flickr.public"; + this.checkBoxPublic.Location = new System.Drawing.Point(174, 88); + this.checkBoxPublic.Name = "checkBoxPublic"; + this.checkBoxPublic.PropertyName = "IsPublic"; + this.checkBoxPublic.SectionName = "Flickr"; + this.checkBoxPublic.Size = new System.Drawing.Size(55, 17); + this.checkBoxPublic.TabIndex = 11; + this.checkBoxPublic.Text = "Public"; + this.checkBoxPublic.UseVisualStyleBackColor = true; + // + // checkBoxFamily + // + this.checkBoxFamily.AutoSize = true; + this.checkBoxFamily.LanguageKey = "flickr.family"; + this.checkBoxFamily.Location = new System.Drawing.Point(265, 88); + this.checkBoxFamily.Name = "checkBoxFamily"; + this.checkBoxFamily.PropertyName = "IsFamily"; + this.checkBoxFamily.SectionName = "Flickr"; + this.checkBoxFamily.Size = new System.Drawing.Size(55, 17); + this.checkBoxFamily.TabIndex = 12; + this.checkBoxFamily.Text = "Family"; + this.checkBoxFamily.UseVisualStyleBackColor = true; + // + // checkBoxFriend + // + this.checkBoxFriend.AutoSize = true; + this.checkBoxFriend.LanguageKey = "flickr.friend"; + this.checkBoxFriend.Location = new System.Drawing.Point(350, 88); + this.checkBoxFriend.Name = "checkBoxFriend"; + this.checkBoxFriend.PropertyName = "IsFriend"; + this.checkBoxFriend.SectionName = "Flickr"; + this.checkBoxFriend.Size = new System.Drawing.Size(52, 17); + this.checkBoxFriend.TabIndex = 13; + this.checkBoxFriend.Text = "Fiend"; + this.checkBoxFriend.UseVisualStyleBackColor = true; + // + // label_SafetyLevel + // + this.label_SafetyLevel.LanguageKey = "flickr.label_SafetyLevel"; + this.label_SafetyLevel.Location = new System.Drawing.Point(11, 36); + this.label_SafetyLevel.Name = "label_SafetyLevel"; + this.label_SafetyLevel.Size = new System.Drawing.Size(157, 21); + this.label_SafetyLevel.TabIndex = 7; + this.label_SafetyLevel.Text = "Safety level"; + // + // combobox_safetyLevel + // + this.combobox_safetyLevel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.combobox_safetyLevel.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.combobox_safetyLevel.FormattingEnabled = true; + this.combobox_safetyLevel.Location = new System.Drawing.Point(174, 33); + this.combobox_safetyLevel.Name = "combobox_safetyLevel"; + this.combobox_safetyLevel.PropertyName = "SafetyLevel"; + this.combobox_safetyLevel.SectionName = "Flickr"; + this.combobox_safetyLevel.Size = new System.Drawing.Size(251, 21); + this.combobox_safetyLevel.TabIndex = 8; + // + // label_AfterUpload + // + this.label_AfterUpload.LanguageKey = "flickr.label_AfterUpload"; + this.label_AfterUpload.Location = new System.Drawing.Point(12, 117); + this.label_AfterUpload.Name = "label_AfterUpload"; + this.label_AfterUpload.Size = new System.Drawing.Size(155, 21); + this.label_AfterUpload.TabIndex = 14; + this.label_AfterUpload.Text = "After upload"; + // + // checkboxAfterUploadLinkToClipBoard + // + this.checkboxAfterUploadLinkToClipBoard.AutoSize = true; + this.checkboxAfterUploadLinkToClipBoard.LanguageKey = "flickr.label_AfterUploadLinkToClipBoard"; + this.checkboxAfterUploadLinkToClipBoard.Location = new System.Drawing.Point(173, 116); + this.checkboxAfterUploadLinkToClipBoard.Name = "checkboxAfterUploadLinkToClipBoard"; + this.checkboxAfterUploadLinkToClipBoard.PropertyName = "AfterUploadLinkToClipBoard"; + this.checkboxAfterUploadLinkToClipBoard.SectionName = "Flickr"; + this.checkboxAfterUploadLinkToClipBoard.Size = new System.Drawing.Size(104, 17); + this.checkboxAfterUploadLinkToClipBoard.TabIndex = 16; + this.checkboxAfterUploadLinkToClipBoard.Text = "Link to clipboard"; + this.checkboxAfterUploadLinkToClipBoard.UseVisualStyleBackColor = true; + // + // checkBox_hiddenfromsearch + // + this.checkBox_hiddenfromsearch.AutoSize = true; + this.checkBox_hiddenfromsearch.LanguageKey = "flickr.label_HiddenFromSearch"; + this.checkBox_hiddenfromsearch.Location = new System.Drawing.Point(174, 60); + this.checkBox_hiddenfromsearch.Name = "checkBox_hiddenfromsearch"; + this.checkBox_hiddenfromsearch.PropertyName = "HiddenFromSearch"; + this.checkBox_hiddenfromsearch.SectionName = "Flickr"; + this.checkBox_hiddenfromsearch.Size = new System.Drawing.Size(118, 17); + this.checkBox_hiddenfromsearch.TabIndex = 20; + this.checkBox_hiddenfromsearch.Text = "Hidden from search"; + this.checkBox_hiddenfromsearch.UseVisualStyleBackColor = true; + // + // SettingsForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.ClientSize = new System.Drawing.Size(432, 186); + this.Controls.Add(this.checkBox_hiddenfromsearch); + this.Controls.Add(this.checkboxAfterUploadLinkToClipBoard); + this.Controls.Add(this.label_AfterUpload); + this.Controls.Add(this.label_SafetyLevel); + this.Controls.Add(this.combobox_safetyLevel); + this.Controls.Add(this.checkBoxFriend); + this.Controls.Add(this.checkBoxFamily); + this.Controls.Add(this.checkBoxPublic); + this.Controls.Add(this.label_upload_format); + this.Controls.Add(this.combobox_uploadimageformat); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonOK); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.LanguageKey = "flickr.settings_title"; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "SettingsForm"; + this.Text = "Flickr settings"; + this.ResumeLayout(false); + this.PerformLayout(); + } + private GreenshotPlugin.Controls.GreenshotCheckBox checkBox_hiddenfromsearch; + private GreenshotPlugin.Controls.GreenshotComboBox combobox_uploadimageformat; + private GreenshotPlugin.Controls.GreenshotLabel label_upload_format; + private GreenshotPlugin.Controls.GreenshotButton buttonCancel; + private GreenshotPlugin.Controls.GreenshotButton buttonOK; + private GreenshotPlugin.Controls.GreenshotCheckBox checkBoxPublic; + private GreenshotPlugin.Controls.GreenshotCheckBox checkBoxFamily; + private GreenshotPlugin.Controls.GreenshotCheckBox checkBoxFriend; + private GreenshotPlugin.Controls.GreenshotLabel label_SafetyLevel; + private GreenshotPlugin.Controls.GreenshotComboBox combobox_safetyLevel; + private GreenshotPlugin.Controls.GreenshotLabel label_AfterUpload; + private GreenshotPlugin.Controls.GreenshotCheckBox checkboxAfterUploadLinkToClipBoard; + } +} diff --git a/GreenshotImmioPlugin/Forms/SettingsForm.cs b/GreenshotFlickrPlugin/Forms/SettingsForm.cs similarity index 82% rename from GreenshotImmioPlugin/Forms/SettingsForm.cs rename to GreenshotFlickrPlugin/Forms/SettingsForm.cs index b8d3e3236..7da2a02af 100644 --- a/GreenshotImmioPlugin/Forms/SettingsForm.cs +++ b/GreenshotFlickrPlugin/Forms/SettingsForm.cs @@ -1,6 +1,6 @@ /* * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom, Francis Noel * * For more information see: http://getgreenshot.org/ * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ @@ -19,16 +19,20 @@ * along with this program. If not, see . */ using System; +using System.Drawing; using System.Windows.Forms; -using GreenshotPlugin.Core; -using GreenshotPlugin.Controls; -namespace GreenshotImmioPlugin { +using GreenshotFlickrPlugin.Forms; +using GreenshotPlugin.Core; + +namespace GreenshotFlickrPlugin { /// /// Description of PasswordRequestForm. /// - public partial class SettingsForm : ImmioForm { - public SettingsForm(ImmioConfiguration config) : base() { + public partial class SettingsForm : FlickrForm { + private string flickrFrob = string.Empty; + + public SettingsForm(FlickrConfiguration config) { // // The InitializeComponent() call is required for Windows Forms designer support. // diff --git a/GreenshotImmioPlugin/GreenshotImmioPlugin.csproj b/GreenshotFlickrPlugin/GreenshotFlickrPlugin.csproj similarity index 64% rename from GreenshotImmioPlugin/GreenshotImmioPlugin.csproj rename to GreenshotFlickrPlugin/GreenshotFlickrPlugin.csproj index 4c4a8c046..d94e10010 100644 --- a/GreenshotImmioPlugin/GreenshotImmioPlugin.csproj +++ b/GreenshotFlickrPlugin/GreenshotFlickrPlugin.csproj @@ -2,10 +2,10 @@ - {B7B30064-1034-4C53-AB7C-17A007360C19} + {7EC72A5A-D73A-4B4B-9CA1-2216C7D92D5E} Library - GreenshotImmioPlugin - GreenshotImmioPlugin + GreenshotFlickrPlugin + GreenshotFlickrPlugin v2.0 Properties False @@ -13,16 +13,12 @@ 4 false Always - - - 3.5 - - ..\Greenshot\Lib\log4net.dll + ..\lib\log4net.dll @@ -30,56 +26,56 @@ - + + + + Form + Form SettingsForm.cs - - - - + + + - - Never + + Always + Designer - - - ImmioPlugin.cs + + FlickrPlugin.cs - + + + + {5B924697-4DCD-4F98-85F1-105CB84B7341} GreenshotPlugin - "$(SolutionDir)\tools\TortoiseSVN\SubWCRev.exe" "$(ProjectDir)\" "$(ProjectDir)\Properties\AssemblyInfo.cs.template" "$(ProjectDir)\Properties\AssemblyInfo.cs" - - mkdir "$(SolutionDir)bin\$(Configuration)\Plugins\$(ProjectName)" + if exist "$(ProjectDir)FlickrCredentials.orig.cs" ( + rename "$(ProjectDir)FlickrCredentials.cs" "FlickrCredentials.private.cs" + rename "$(ProjectDir)FlickrCredentials.orig.cs" "FlickrCredentials.cs" +) else exit /b -1 + +mkdir "$(SolutionDir)bin\$(Configuration)\Plugins\$(ProjectName)" copy "$(ProjectDir)bin\$(Configuration)\$(TargetFileName)" "$(SolutionDir)bin\$(Configuration)\Plugins\$(ProjectName)\*.gsp" copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).pdb" "$(SolutionDir)bin\$(Configuration)\Plugins\$(ProjectName)\" mkdir "$(SolutionDir)bin\$(Configuration)\Languages\Plugins\$(ProjectName)" -copy "$(ProjectDir)\Languages\*.xml" "$(SolutionDir)bin\$(Configuration)\Languages\Plugins\$(ProjectName)\" - - - - True - False - Full - true - TRACE - - - False - Off - 4194304 - AnyCPU - 4096 +copy "$(ProjectDir)Languages\*.xml" "$(SolutionDir)bin\$(Configuration)\Languages\Plugins\$(ProjectName)\" + "$(SolutionDir)\tools\TortoiseSVN\SubWCRev.exe" "$(ProjectDir)\" "$(ProjectDir)\Properties\AssemblyInfo.cs.template" "$(ProjectDir)\Properties\AssemblyInfo.cs" + +if exist "$(ProjectDir)FlickrCredentials.private.cs" ( + rename "$(ProjectDir)FlickrCredentials.cs" "FlickrCredentials.orig.cs" + rename "$(ProjectDir)FlickrCredentials.private.cs" "FlickrCredentials.cs" +) else exit /b -1 False @@ -88,11 +84,25 @@ copy "$(ProjectDir)\Languages\*.xml" "$(SolutionDir)bin\$(Configuration)\Languag x86 4096 + + False + Off + 4194304 + AnyCPU + 4096 + + DEBUG;TRACE False True Full true - DEBUG;TRACE + + + TRACE + True + False + None + false \ No newline at end of file diff --git a/GreenshotOfficeCommunicatorPlugin/LanguageKeys.cs b/GreenshotFlickrPlugin/LanguageKeys.cs similarity index 81% rename from GreenshotOfficeCommunicatorPlugin/LanguageKeys.cs rename to GreenshotFlickrPlugin/LanguageKeys.cs index 8dc67c329..6f3fd2b92 100644 --- a/GreenshotOfficeCommunicatorPlugin/LanguageKeys.cs +++ b/GreenshotFlickrPlugin/LanguageKeys.cs @@ -1,6 +1,6 @@ /* * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom, Francis Noel * * For more information see: http://getgreenshot.org/ * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ @@ -18,25 +18,18 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -using System; - -namespace GreenshotOfficeCommunicatorPlugin { +namespace GreenshotFlickrPlugin { public enum LangKey { upload_menu_item, settings_title, - label_url, label_upload_format, - label_clear, - OK, - CANCEL, upload_success, upload_failure, communication_wait, - delete_question, - clear_question, - delete_title, - use_page_link, - history, - configure + Configure, + label_HiddenFromSearch, + label_SafetyLevel, + label_AfterUpload, + label_AfterUploadLinkToClipBoard } } diff --git a/GreenshotFlickrPlugin/Languages/language_flickrplugin-en-US.xml b/GreenshotFlickrPlugin/Languages/language_flickrplugin-en-US.xml new file mode 100644 index 000000000..448920b39 --- /dev/null +++ b/GreenshotFlickrPlugin/Languages/language_flickrplugin-en-US.xml @@ -0,0 +1,47 @@ + + + + + Hidden form search + + + Safety level + + + Link to clipboard + + + After upload + + + Configure Flickr + + + Upload to Flickr + + + Flickr settings + + + Successfully uploaded image to Flickr! + + + An error occured while uploading to Flickr: + + + Image format + + + Communicating with Flickr. Please wait... + + + Public + + + Family + + + Fiend + + + \ No newline at end of file diff --git a/GreenshotFlickrPlugin/Languages/language_flickrplugin-fr-FR.xml b/GreenshotFlickrPlugin/Languages/language_flickrplugin-fr-FR.xml new file mode 100644 index 000000000..c464fc191 --- /dev/null +++ b/GreenshotFlickrPlugin/Languages/language_flickrplugin-fr-FR.xml @@ -0,0 +1,19 @@ + + + + Communication en cours avec Flickr. Veuillez patientez... + Configurer Flickr + Famille + Ami + Après téléversement + Copier le lien dans le presse-papier + Caché dans les recherches + Niveau de sécurité + Format image + Publique + Paramètres Flickr + Une erreur s'est produite lors du téléversement vers Flickr : + Téléverser vers Flickr + Image téléversée aves succès vers Flickr ! + + \ No newline at end of file diff --git a/GreenshotFlickrPlugin/Languages/language_flickrplugin-it-IT.xml b/GreenshotFlickrPlugin/Languages/language_flickrplugin-it-IT.xml new file mode 100644 index 000000000..88347e287 --- /dev/null +++ b/GreenshotFlickrPlugin/Languages/language_flickrplugin-it-IT.xml @@ -0,0 +1,47 @@ + + + + + Visibilità + + + Liv. sicurezza + + + Collegamento agli appunti + + + Dopo il carico + + + Configurazione Flickr + + + Carica su Flickr + + + Impostazioni di Flickr + + + Immagine caricata correttamente su Flickr! + + + Si è verificato un errore durante il caricamento su Flickr: + + + Formato immagine + + + Comunicazione con Flickr. Attendere prego... + + + Pubblica + + + Famiglia + + + Amici + + + \ No newline at end of file diff --git a/GreenshotFlickrPlugin/Languages/language_flickrplugin-ru-RU.xml b/GreenshotFlickrPlugin/Languages/language_flickrplugin-ru-RU.xml new file mode 100644 index 000000000..11a82f1b4 --- /dev/null +++ b/GreenshotFlickrPlugin/Languages/language_flickrplugin-ru-RU.xml @@ -0,0 +1,40 @@ + + + + + Поиск скрытых форм + + Уровень безопасности + + Ссылка в буфер обмена + + После загрузки + + Настройка Flickr + + + Загрузить на Flickr + + + Параметры Flickr + + + Изображение успешно загружено на Flickr! + + + Произошла ошибка при загрузке на Flickr: + + + Формат изображения + + Общение с Flickr. Подождите... + + + Общество + + Семья + + Друг + + + \ No newline at end of file diff --git a/GreenshotFlickrPlugin/Languages/language_flickrplugin-uk-UA.xml b/GreenshotFlickrPlugin/Languages/language_flickrplugin-uk-UA.xml new file mode 100644 index 000000000..01a72f6b6 --- /dev/null +++ b/GreenshotFlickrPlugin/Languages/language_flickrplugin-uk-UA.xml @@ -0,0 +1,19 @@ + + + + Приховати з пошуку + Рівень безпеки + Посилання в буфер обміну + Після вивантаження + Налаштувати Flickr + Вивантажити на Flickr + Параметри Flickr + Зображення вдало вивантажено на Flickr! + Відбулась помилка при вивантаженні зображення на Flickr: + Формат зображення + З’єднання з Flickr. Будь ласка, зачекайте... + Загальне + Родина + Друзі + + diff --git a/GreenshotFlickrPlugin/Languages/language_flickrplugin-zh-CN.xml b/GreenshotFlickrPlugin/Languages/language_flickrplugin-zh-CN.xml new file mode 100644 index 000000000..6c3e41a0c --- /dev/null +++ b/GreenshotFlickrPlugin/Languages/language_flickrplugin-zh-CN.xml @@ -0,0 +1,19 @@ + + + + 正在连接到Flickr。请稍后... + 配置Flickr + 家庭 + 朋友 + 上传之后 + 复制链接到剪贴板 + 从搜索结果中隐藏 + 安全级别 + 图片格式 + 公开 + Flickr设置 + 上除到Flickr时发生错误! + 上传到Flickr + 图片已成功上传到了Flickr! + + \ No newline at end of file diff --git a/GreenshotNetworkImportPlugin/Properties/AssemblyInfo.cs.template b/GreenshotFlickrPlugin/Properties/AssemblyInfo.cs.template similarity index 73% rename from GreenshotNetworkImportPlugin/Properties/AssemblyInfo.cs.template rename to GreenshotFlickrPlugin/Properties/AssemblyInfo.cs.template index f8dbc4b26..5efcf88fb 100644 --- a/GreenshotNetworkImportPlugin/Properties/AssemblyInfo.cs.template +++ b/GreenshotFlickrPlugin/Properties/AssemblyInfo.cs.template @@ -1,6 +1,6 @@ -/* +/* * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2011 Thomas Braun, Jens Klingen, Robin Krom + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom, Francis Noel * * For more information see: http://getgreenshot.org/ * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ @@ -30,15 +30,16 @@ using Greenshot.Plugin; // 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("GreenshotNetworkImportPlugin")] -[assembly: AssemblyDescription("")] +[assembly: AssemblyTitle("Greenshot-Flickr-Plugin")] +[assembly: AssemblyDescription("A plugin to upload images to Flickr")] [assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Greenshot")] -[assembly: AssemblyProduct("Network import Plugin")] -[assembly: AssemblyCopyright("Copyright (C) 2007-2011")] +[assembly: AssemblyCompany("Greenshot & F. Noel")] +[assembly: AssemblyProduct("Flickr Plugin")] +[assembly: AssemblyCopyright("Copyright (C) 2012")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] -[assembly: PluginAttribute("GreenshotNetworkImportPlugin.NetworkImportPlugin", false)] +// The PluginAttribute describes the "entryType" and if the plugin is configurable +[assembly: PluginAttribute("GreenshotFlickrPlugin.FlickrPlugin", true)] // This sets the default COM visibility of types in the assembly to invisible. // If you need to expose a type to COM, use [ComVisible(true)] on that type. @@ -50,4 +51,4 @@ using Greenshot.Plugin; // // You can specify all the values or you can use the default the Revision and // Build Numbers by using the '*' as shown below: -[assembly: AssemblyVersion("1.0.0.$WCREV$")] +[assembly: AssemblyVersion("1.0.5.$WCREV$")] diff --git a/GreenshotFlickrPlugin/flickr.png b/GreenshotFlickrPlugin/flickr.png new file mode 100644 index 0000000000000000000000000000000000000000..578575f9abde037f95b11aa7675a633859af9e05 GIT binary patch literal 776 zcmV+j1NZ!iP)SPqZPAMtdoW5;a*_I@1oG2l zH_o@sWH;$9YY;aD2VR)n_w9V&ym>Qk!d40e5^Y{sPFRY9X=P!H!j=?}r_$+sGMS`M zC=>|0VHl}OrIIg~N?8cVB@zkZoKw5q4n#mC5+QI30XYaraWV6t$kD(RQB|_I@!RY5 zDCj0R73;w?0~Y~KTYw-BT)DW-M2P?wuj+5A9jZ$HtwN7q~haAyuk!^~f9AEIyJ zX)>5yAJE4;_<)gk%=~!4p!AQ}fZUp$=;IxHz&JT%4sd4#q}^YuQH$%I>jxh&63-ug zr2Xx%CmudvMtSTd7&(r=(v)u!0VBUTyruf$fpK!ko+Y5$=?s@k=3kb98O*|DzIb3v zhXBc`{7o?$_d7SdYYs#e|G|Kfcr)rBF<{(sz*WHQiwArM1V-Z3Tc>^Tz<3K7*@kz{ z$LQ3w<~bOAz(~BYFhhLCJ8|Iy#&a8*Bg&f1Cav5^(7j7j6xZzVqK|j*0prAnU(8eZ z?ipfndq<#;ckns!*0S{@z{IV%m&s&^alU(D!$ zG2$*6+GsQ^`_ncKes?)$EYNB=T#m(q+Y+)C2weRL zlo5f&dcB_4b)9~RJsZgE`&$;=5U^CORbHj0000. - */ -using System.Collections.Generic; -using System.Drawing; -using System.Net; -using Greenshot.IniFile; -using Greenshot.Plugin; -using GreenshotPlugin.Core; - -namespace GreenshotImmioPlugin { - /// - /// Description of ImmioUtils. - /// - public class ImmioUtils { - private static readonly log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(ImmioUtils)); - private static ImmioConfiguration config = IniConfig.GetIniSection(); - - private ImmioUtils() { - } - - /// - /// Do the actual upload to Immio - /// - /// Image to upload - /// OutputSettings for the image file format - /// Title - /// Filename - /// ImmioInfo with details - public static string UploadToImmio(Image image, OutputSettings outputSettings, string title, string filename) { - - string responseString = null; - HttpWebRequest webRequest = (HttpWebRequest)NetworkHelper.CreateWebRequest("http://imm.io/store/"); - webRequest.Method = "POST"; - webRequest.ServicePoint.Expect100Continue = false; - - IDictionary uploadParameters = new Dictionary(); - uploadParameters.Add("name", filename); - uploadParameters.Add("image", new ImageContainer(image, outputSettings, null)); - NetworkHelper.WriteMultipartFormData(webRequest, uploadParameters); - - responseString = NetworkHelper.GetResponse(webRequest); - - IDictionary parsedResponse = JSONHelper.JsonDecode(responseString); - return (string)parsedResponse["uri"]; - } - } -} diff --git a/GreenshotJiraPlugin/Properties/AssemblyInfo.cs.template b/GreenshotJiraPlugin/Properties/AssemblyInfo.cs.template index dfebd3150..cabc03a13 100644 --- a/GreenshotJiraPlugin/Properties/AssemblyInfo.cs.template +++ b/GreenshotJiraPlugin/Properties/AssemblyInfo.cs.template @@ -51,4 +51,4 @@ using Greenshot.Plugin; // // You can specify all the values or you can use the default the Revision and // Build Numbers by using the '*' as shown below: -[assembly: AssemblyVersion("1.0.4.$WCREV$")] \ No newline at end of file +[assembly: AssemblyVersion("1.0.5.$WCREV$")] \ No newline at end of file diff --git a/GreenshotNetworkImportPlugin/Browser-Plugins/Chrome/background.html b/GreenshotNetworkImportPlugin/Browser-Plugins/Chrome/background.html deleted file mode 100644 index f2ed0af1d..000000000 --- a/GreenshotNetworkImportPlugin/Browser-Plugins/Chrome/background.html +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/GreenshotNetworkImportPlugin/Browser-Plugins/Chrome/background.js b/GreenshotNetworkImportPlugin/Browser-Plugins/Chrome/background.js deleted file mode 100644 index dd22a4c93..000000000 --- a/GreenshotNetworkImportPlugin/Browser-Plugins/Chrome/background.js +++ /dev/null @@ -1,29 +0,0 @@ -function sendCaptureToGreenshot(dataURL) { - window.console.info('Sending data...'); - $.ajax({ - cache: false, - type: "POST", - contentType: "image/png;base64", - dataType: "text", - processData: false, - data: dataURL, - url: 'http://localhost:11234', - success : function (text) { - window.console.info('Got: ' + text); - }, - error : function () { - alert("Couldn't send capture, please check if Greenshot is running!"); - } - }); -} - -function capture() { - window.console.info('Starting capture'); - try { - chrome.tabs.captureVisibleTab(null, {format:'png'}, captureTaken); - } catch(exception) { - alert( exception.toString()); - } -} - -chrome.browserAction.onClicked.addListener(function(tab) {capture();}); diff --git a/GreenshotNetworkImportPlugin/Browser-Plugins/Chrome/greenshot.png b/GreenshotNetworkImportPlugin/Browser-Plugins/Chrome/greenshot.png deleted file mode 100644 index 2087c5b1366725b078399a38b76a6fa88da491e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8020 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 W{>L87kzHT_0000").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
"+""+"
",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
t
",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; -f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() -{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file diff --git a/GreenshotNetworkImportPlugin/Browser-Plugins/Chrome/manifest.json b/GreenshotNetworkImportPlugin/Browser-Plugins/Chrome/manifest.json deleted file mode 100644 index 85e4c53ba..000000000 --- a/GreenshotNetworkImportPlugin/Browser-Plugins/Chrome/manifest.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "Greenshot", - "version": "1.0", - "description": "Adds a Greenshot capture button", - "icons": { "128": "greenshot.png" }, - "permissions": [ - "tabs", - "clipboardRead", - "clipboardWrite", - "http://*/*" - ], - "background_page": "background.html", - "browser_action": { - "default_icon": "greenshot.png", - "default_title": "Greenshot" - } -} \ No newline at end of file diff --git a/GreenshotNetworkImportPlugin/Browser-Plugins/Firefox/greenshot.xpi b/GreenshotNetworkImportPlugin/Browser-Plugins/Firefox/greenshot.xpi deleted file mode 100644 index a2106658821f4d7c7ad4984c04861ace669600c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45797 zcmV)NK)1h8O9KQH000080Ih2}KxkLZgj4_k0FwX!01p5F0Apx!Z*65RZDDR{W@U49 zMT|=dfG`Y1_kwrm3C!NxXbD!V38eLRd#$9+CS+zF&ogDD>=r?!6gWF=pzqSQk`4C# zeK{Y)CrX?i=Y#N$BfuM7U@P)h>@6aWAK0084iNk9Mq00000 z00000000O8003ieZggdCbT3d#0|XQR000O8t!p|!R7EZEpM3xTtZo4S8vp+~Rb5?GT~&Slq;oR+?QOaFc=G$?S$gy?nJe*_*&>GdZ7EdAZz{Cr{456OM0}`L0?m!&GI_y$PM7`+eG5r<-!QlM->~ z^5ANHPqkL#u#;a8(@}K)KHZ#TN#4s=#Ya^n<1ly{bklC|EQosPdR;DycdIaqRGAdL ze7g;UqS~(K>Bk`I7rjlnSiLX9sE-P%C&6;HEQ9@?zk}#LpYQi!K1cQWrc8I`t9iLV zzrvszZ_-5>L@J;6`1AACrYJWFf_GK1o6^U$tR~Z4auKOa_vFR2nir@K?a=@h`+W!b zYE?)1A_*ySwcObm*zaA;%T<2M8GD8PQu(5Hx2bkz80NH6>vZ?)Rl!4e@%HWI3yui} z!P5>(>@ejg)7@hJEQm3}Zt#=?PiguvWmH!_Uu|hliUfiBxKqwRd21soXnMyyy@j$9 zjB)D;w&OnVq9x@)g9Qh@#l0mMk~Phf`$K=+E7N=$<~KC@Jl#>N^N-Usv;8xj8)z^Tdw`b0tCAYEjgunJp3*wN)kN zSxwYbRoEc&ayi*e)l6L{#qeUJ=4zpqYNgiw@oE!JlFR<&Y1N-}ySxP_0I|!6Ql=-> z@+752dS7nP>^34eTa8bq0K)BVQ!OU}`c@97z1`|ptGjaZA|)6bC4QmdbQJaH$u+k= z8PO)WCMbRqMAyl@U(SJW5I65o9O|Qw>*#)w%)7x!(7jg6q#Q0r*uKNy2}N)fon>^t zPBI?Biuzeb_p@Zx1CUm`5CwTR&M;iGh5b%n(kjZK!rAb0g!)Z&>*#)k*wsj_kgIbs zSSIUu&7TrS^b}yc*`WF0H>(pF?v_??yjd+!?*h978zwKQ zGb%XQt92_l~UX=EEOBSOY#?(~%Y_IB6+NXN<2yIo3a zm6>DYq|Q)Zqgg_q3?=urvO>-ZO4;vguvYP!Qo@Mfq0%*8@Am+@Dmu)P*?!M0%#hwm zsCIP8bz)|5L@}I={Ee9s7L&z5aXR{*Z#L;i?B7Tuw9Fzbd;%Wx{XToeBcEx%UStnWE&gZA6x}wZg#PiM| zL(`Q-w$YNS%ZBBMYSi@=jGx_5vu^|kF}6ClfUmVS6!?snMo+unGd?!H`8-tB&W ze_#+RsHHs0hsCHPFcVJj4XU8T71 zgt}_k5QmHw?&jV^{KX@-9Bk3rm^JVCUCfhAWxRv?8bn{4LV2XuGs)`6T4T)YD?05j z)Wn__f$E6n zs=Fl)vIwKR0OdrDF4E1US_Xrnd#qgU^2f((Ha+2t-QbTr1}Ap`PcELE(`lY*mgYCB0vOE? z)oA1za$SX~=5N{zNKw7V-p!^y9ZqbH*BvY}$XWR|^ON<))n>cn>|RSt*HS2~*>Awp z@ObJtpwBy}TCQ(**f|Rni!-dYnKXOCq;&4<&Tc>d_%5ALg`EU@8k}CWEDPkt{9>}g z<9S2f3Wl`sCuJf0A4*YE)SG--=GWQk0}e$Oxk-y^6-1V?d_kE?0{mRQyej7&?)>)s zA3V@+!e_CqhFRvfY`#eAz{TtkW15C>?Frr0v5z{(cV`7H?JTJXR%SfBu|$(j&@xopA? zP3C(Pr;excMJ46S#6*3~{<`@MiIQ2TVCf_O9Gl4kx0V)kKxf>WrrVc5PFNZZ1IkcZ z-xLzBrZ$kN2_2@BUiqG&l2)vW?hDM<4s3sKiniyan(E|4Q)D?&WEG?PBDui%SPk=$ zISPxXWxoLaA4{Pg@H!C|-H|sABiRO zK(0wtRGX-ZCd!dH7EI|h*`?VW+{A;saz|2&AQDEPhBX1XcR-m&uu{jgwqO*et|z~D z`0@{ik=zHgcT!#4)b@IlPUu(fo`$eT_^C`!b<{{k!g{q1qhoT6cZT-Kk_-o6lZqo= zLl-hw*0CI^V-q_afOk5dQ=Cd|Lj->LA*y4We^H@MW%Ah-H`J#ikPW$Zq#9RAZ68QY zUosI{8`xN692xrF$?0tJqoTvN>Mv$($$S*U*0bb7`tD}>t?O4O1$~}+XZL>ZhiaYn zWR|}SZ3P!D_7^VJ%e!pQwA}#csN8_Dqi>uRwEyV>e644oDi0!K`yt(AV+i;v23ylQt zQKzU4c8mIFu1urE? z1bHx^zcG#cH@7&Fs~lALphlC&GX{T(ANM$ghEEBFmJWjbJ&YM?>S6QQMlfVHf=BaA z9Riz>ME3qbMfz!yYIJsfwe6lqaysBhz`)IUkUuT@InIM@m;#v-OKpkEg9vU@E1KqV z%k+IUNkQJIl4@DyDRlv2DG$cHT_F;i5_9o8$csM8Oy;IagW3^(3jr$;O!IQQv%=N1 zCd&PVx->ZL079GU3vr^zs@Lu?!_np}*q{Ol7Jm!5we4&ve0 z-+elI5*PEbeodK{SDVq3U{64}XV}{lujGCFZ_w-mSfYc-$i!h@5|``DzTL+X8UeijbXv%ik^ zG~!WoUQN^;=ICs(Jv&z)jxK4Kb%l-j{d#RS@k#&K72V=Z-`tY*i1^7n%o03Zn3z;Kg6XXu#NqLPK{-wPZZ1bSt6dABb07RC?<7> z{5{2q@c6?np#VvHQ$=4I1>hRMD}SK!gvppr!ubFyTCU?7b>+&`CdpFeR`WjpstLnU z`8bvca^iBri-?Ydr#RAVl)+bLmz?$tX(sCF_Xm@t0L>3VtBo0M{&`&B%ce>13AUmL2lDMD?i$PH*BOz^xb8P&DX-CZlgw(#8r`3{S ziIF*`ZrCLIX4KY5F&av7)G&o+j@BqfiR+^!;&2Ag$ZkQ@TC#IU9UrOT^(azl63$Q; zm>8m!(VKjZ>rTXtb?zwkzA=%gi0GQFqYH&$3~5mm5%5Xwk=vhtd{bbeJ{yTh|MYa~ z5l1|W(_U3zH7Jiy#ew1n?O9uX3oFw@9f+Dxvw9t{JBi8OHF!mW}qcg7;Kc10mK2{#0ScX zsJGQ$OSi@C$>mMoLG4yt@sVt=8Jc7TFVG^EFFrPqGwd&eJz~0jfjv9Kcb<+_~ zD_!L(!g+6ZX?|@gZ4k7r`GK3N9Ox^mb4T2M4T=SS#^ubc#Z@V~6LQsm`APSt+@u28hC$1kqcAY6rCY*0i z6vI+&(y?pN-`@#+qMj3vjc6aV(ZWrwNSbuhzQ=Q&UGl=n=^~KsLMrWEqG6W(Jp?-C zO-S%CPan;4M)h#54`s3t5WbeR)I;A)7%y%k6>#}LX;5@2z1gZ-hPVSIzG0EBy#YVe z2JND?v{1kHFjK>AP!vr))eFA=p{_ds+wWU|%93*d@c5P5t~NV}>3a05wrd&?1?3Bk z7!uMusVNQ#BI4kX`L^AWT_V>#V|^=criZX0Uu4aI9j{%qxrCV~oy)#HB`ZFTSC9cN z1HMG6Y873YiaxV9SXIY}_2>w%p}~r{yo#>n6kW&9IK(r4b~Y0hp+9?i-Jf;4bafl1 zUQ4qPPG6omD`&z|7A#;Qsv18mqe8u7$K%bx1)`PaaXE&lA4&%nUmzmF2|B_5F?O)R zpge3M9j*nIB#Jq{QJ17*4yYrES(I>&8Aqk@SmSn19a~94g@v^us^toI0Ann-w_P%# zNj||~NFGREkj9}N!#wB&8yvgC;Gi_WgUbj(5PwWT$zfEhxgdu6?#JnEb9KA14&jEh zgH`Dz%&V``{(ggx-@ZCwg_sVWi)lwns|1hE9pOHp}-%j z-4xfSxE+jmn-JMMnUL;Ei7O`)3Inbni0JCh1`Y>h5v3cTbohC6{~Rm%0^2X(6ii-G+>jCE2@g)H%OOa$Wcx;$bl2Gz1l7IfH+G737P1KB{KEM3(*ZN}U zSF5yugdbc*=Mt3Hk-T8+k*=GeTuz!zR3FX^E)d<d%4E=3{h|Fn4qgzZt&J=UfD|t2>2p)bLSrx00mMj=tmTeK=N)a+t|*w5qHy z?|A?C!Ulh7_=v!Z4<= zd$R;QSH%gBkCM%Rp*`rvYt?hc3>aw-Na`!fwHbutgj%u@q(3Wzcn#Gw4Z^wN%e34gB1{+w$)sW8WR@hK3_AsJ+CI+FEc64HIcx4NPeTxy z+mqAN*36(anwZ?D)R(K(+CMuE%H8tUpaghsX6_v5)MiHhEnRe@XMRScpsWULCNo1? ziX2^?L*8^8PuP{eQvsw`9w@w5A5hxdZ5?MS+$H_#sr#-AxoE@HV_IyA(-<6!28k2b-xEG>)` z{rt;jbb-kT^fWhCD`HuwgQC42|9tQWQV)Xo=LVM_;>RpFa>x;Wo$jXK-adr5UceTO^Z0@f4s*l6%g0)Y zpgD*T$7OqD`y(G`mj}hY^}1y{Wr3OW)x3L}Tu1Zm%OW#+UAzqvlL$?=F>A7=L)?Co zHexvv3QaC;DNI~~myRE|B!vfAbpQB(JY)ztUq8n^Y~HthAmuuD-!g_q-5CAg%UTWj z5$jlC?-$GpbF9O0%sW4{%dy9YTJzDiLF{Brt_dw@8k?o2W^Ss031`nPfOWu*(%;z` zag)f9K*7uxis>EvNHIJ9 zY0Fq(N^-8-ssK9$s^-JT2C#UL(YmG<78Q3|ke(I?qRbu;5oUc^yQWY>eHLLg+X9DF zcQ03C-QTcTlvKU@lOB4GZumb?FV(*#|8~1(?305^^Ss<{-4H!#f{dwhu;q>1(U^|< znu(@v*^@d^)lB8X832%1!a+El2?Q{tf!mof_gv9c8y8rhX2vpE5amErDhHMB6;xy6V>hFzk!v|K5hG;cltbyMNsB<4xWer%j{h7|y{*V>s8EtR>Yii6h~s_w zKS{Z8#_9B-Y;z8p`F3fH^{!zLa1>!JCS^T=B!$4nNjyw#o;(`Wv4Au^B0Zxxy)G#z zNDsT3S-n3%LZzjx!RI3VI{6J_trMYTElqvGNQ$B3n695G&yIMvb+V1NApSS&?rcj3k_^1Wo1qDiEqQ*1gbRVHY8@vnHM72+MpB*s8tUpe{`jY3nH4$ z81hzQ8$j@y6xK>;Nq^^OdxPJXp zko11QaEc~0nLI?&2qKJ*iSLj?o0O2pQXSK^6?P;ex98AuYAf5^nEf;is zr}+AkwEg@loTAqFLD{y-A4@Fii8da3Z=?iE#4h1Y7zM88*cKV~2g~Df&{ex?{1F;v zKx6mCYKcTTG1NG%<}n{0L{CpPL~j-xWJKKhTlPUf<3h+R}DqA(~DYY@$Oxv=8V@W3X z!yu**G@W*_6z&V8_;Xk$X6=dq0zHkNXf6mP2?W*i>xJd~Su?-F{e-@d#)WLuch`z{ zb+Gry{>4$lJ~V}iZCwICyBt(a{_`TjmY(S~V+3|hHk36r*>(%0S^jUdkmD|R0x^Jr z7H(%o#QZ^!*O5X>6iYKFq%jw_WLrqrxgcSRrwNfH4Tw!0#HO*g3+aY>=73Dh_@L%n z6DyG{NhC@pXQOsXat*kU+ZA)7o@Zu5EJ9*bF#-MKQ@~(M0u>CSnOqDo%kj`jZ?1`p z857&KhH61mH6Rn?4`Z_J4D{8_12$sN)ofkn_2E3h*J2KsKO_lq0AWAM+;~=G!O6+V z(|NVLK7aOaeV|=;(&>z#iSxl9h3ddHU=r+vcMDaP6NE_sqb!GN|GtdZWS%0(IEV%w6Zsw!p zfG=gw(?FT^J^%UwOKhv=%6d8xn|-_GyHxbnq?sti5b)(PuCxUe$)c82v9PG?!i?w~JdrR|+I@bTVQ*|>@L|HRdJ$u6!)>*+F_%g#vtEf&7-df(Bt@&#kJg3_Rc1Zi z$O|1;)dy+vs);_oOfjs-OB*q@iFB=KOw4Y0_4V!EmTVJiBTT??bZ%Nwhtt!Wy1an* zNvQ*2Es?2P5Y5+tqmif`f8wYaAhG(eY?ZDG+02cFcZR1L92uml2F7IH70OsGVsiLP zObjg;A1$e87lq9ix>`d$6&+*wLxyBXtmVGxk;)!_Q$M&;o{HqUJ^}TRD`nQ(x+$`7 zVNoFx26y8)$q2dUoBf zuhb1e(gZiTv*aeJn6Osku&HiXrzwP@AhO|sL&X|W_B$K&T+|VR^=ezOCQzDzzQGv! zL<(H=i3Gq8FBnq>;uecPWonTcK;jm>ueMcI&FLtaRz*=R`{E&h(=ltB!hj>5ZlF_s zxc+d0)^OAR-HVHhzVs&;>aZXo20WH`yo`COMzKE3#q z!*potu;kx>1S(L0{MlGa2mt>OY^Uz9dq=9ui*6uuaiM1dA9n7DeXequIXydP6bQQD zSqRoQ*k+LY?mjO8Y^2z`@hA%H!Uuct=zi67ogSYdo-GiBU{Q zkNsBw-XyrBnIHE+qLN=Vcw}*(H@=?{RR5XLr!^J*b+uYF+#ZBC&5_6RW?cpRet`Y=so4u?s!2}N8|k1C08Imyue*y{Gb<+F9YB)PJwG@_ zaEXF%aZiTXbxE~c70H^)?Qd4Q=SA_kfL^IP^KP|9SAM7{gH3(C+PotGcn_8D%u>oJ!gD-_ zRA@jhli6{6U*eXpAbMGD=wfiRTh#yZvmd{B`T37tojrf`qnBrwm-+bYr$74qCucwS z!4H1;!|(s_2N(D+P$VTQg;3Vc7Mj#8cQLL%5K1B4is=u;4mb|k@>?7~ z1Vp^RGalIE1!xNVtVjbK{}9yP8BR}eWx-mTMt>XGL#Z`cCf)A1$7{GuKypbfA%57F zc&@*DVx^67kk(xk9alKm?@e5dxG4u*orN8Q_`=_I(Iwd^r1y#5;k*#=YtIt)1DzvQ zUjh(~Yd!xd*3YQx(ak9Q-Em)OR;I(;8mn2q8rK8ZEKmxtmDWZsC9owxGW2$3JHc*@d{+3?zQUn^CV477dhU8pML^feQSi}v({|H^u z9X}k{BEdQ`sdXHCjKVgrm7UdDPr&%B=jnkDbX|5P1m9Iy$OmdLC3tevrf-))D+d0~ zV&s*I$#j9;COmwXK&cX`*o?ygLQ_WWG(O$kkYK{0OKN!9l*KpLTi=v|5o*f;tAb@a zne(WCJwsU8BJmbJtAi=;`)Q)bu1!8^=b7)Cy9Vcb!Xzuv1TJU@ z+aMwVyeXJkr$$!wh?U-~k2kB728*I$#m;KbeXG%bmpxOM4cMbQKhVnw{TU$Gr4QIQ z8vjih%{dh{#x`G&TOiWxn3N1}QlcAl0yQKH=aF^qNu}J)eskqiN*U)asHW~-RoB3s zq6|_J)suRGH4Pe_G06A&&CyRhpwaW>k-YR;C9>Cbq{o||S z3b{4nZDjY*H{^q*q4!I!kl=wWgDTkgLl7AsFV5i#Zp^&^%Obj$q(1S@?UM4gkc(Jk z8HbOg(?y!k`XGQJuC%1x0_Uc|5{fbxv26;M4ruB!I=k$b122-Cl-Aw9WZL};U#Tmp zEh5y%?r0uV9j5uLjhnO6Wq?0g);#GHp6gS(_N?VmV`o&&mooa|-@D!~NOcB1D#~`B z#G8_v61rCBT+%*f$SSgwq-a!#+c9&6OT3+z2L%uz*2o`_mRt9qewoN$URW4!ZkG(S zg|R27@A}g9=YVXO6noR*mcrIXnMuH5D(1zJ>6bLDP7AxY=EXS?P3ulX8J>8_9BR?i zY$ncOhW@wM;$9(98&B=*(dBoiIo)OecJ7+IUC_GBB-1>+~Mgj z9EAN{k!I!cY6mAf;&q4p``qAngYZU}V~`=c)pF1G3gC?^wQa}m<=EfLHP_zwFXZey zWKWTw!UKx9mGbHBZpD)2J$;ejXU{fQdo8!$lSMU*Hn)48?!CFO*^BsLKL=B`U%=O4 z1qOJ(S|f_|Dq%bN5g#|V)dqRDITG-ruiv;s?-NHOH?HH$WD`fYxY=QN^)debGyYLkP4Vi%CcwK!E9PlW1qYEz-T4|DQ@B=v;&pLO^-_{lyt+>ka@p=BbP?trOwohN zahg-u7fjLo-#l`jPC+nZRD|6KbQ2rw`)!TI=5vA_eoSlh_~PXL70Q3SIMTv@xjukJ zA@TEs4}ls}L7R4c2SowNGsm55cqQCGc!|2CoQ8qr!RRP0kB~ z7?Yc;%7+!Nh!mW(S7oY|Y5b%hXe`ujHJQxqLbcWC%$%vhd}f}zjDK(Sa<_WYYY^+BDU`uwg6zWK%`ee+Gwgx^LusRspuJC|fd`B<$H zK{w${GrTs=WQ372NVSku%hph1ss`LMVCtmDA>HB{xDh?Ow7S-Pr)v$d(?h7k$SwLJ z25hR`5hkrerNVNoTIU*JCPHf9j$K#C(Fpd-H zf?3422hl-M_YDviZt9A|p)O1?eTwfzOD(=f^GCKr>WRf_9q534$%v`Rt8rBpgH%%E zl%3rljAJsc_hHfm^&2wr4ebSOYl>*;))wf>xoDTHXLO6p2hP)rn)`)3nGGf}HZA>j zFXQUizNLLp8S=t5?#pm}t))SyG+Ik-r8bkmU_w10U`7G!!p@ZiuzAj>{Va;q1Sgx- z?HX%Nq!PLn@s^TThMcwNR3sCmAxjB#(O?B@W~e4N4B^4INIg!TMvJmLdct{95b{QW z(^{O|IVHx{fkV5(d0KZ)kp*q&rd3W3k`FbZLu1L|hs<+V4ZtCQdkug@1*{Xd-QtJ! z?&z1Gi+%~o(=Xpm(}(Cr&==oS(wEfLx<{+un7L~ans2^@BhB0I%g;~b=QBQFacHr5 z`M4*2bhDjC0I9I>udC{k^4iI0$_Yon-J+riwRFj#Qf=BE1mI zlG9zuzH{J@ruk^Zu{u-YmNlbI&yjpsw8whaY*(ZpfhDu=G(2Ul zPM%qNC=t}Ok)O)HZS^Rr3-nF@xz`#3uu^Hpv|JqEi_u!3j9?@V=<7>-1&XwZK|&KU zdyOw>bP7@J>(j%*g|<)(@cAqL43wu`hTI6el>kz-9-2-0N&@J?>JCMgae$Av_(0y( zTw?GcF>q;2z8?bo{yJR;ik*CE^{v2rs1jwxg10OxR@g!v67fn$1Uw(d-AHIw_ZYIR z2-(WdPvqw_;uNc+xNutEdW`pSHPJB!7g{i2^f#C|q&8ve(n%AeVQ2CdEMm$#spW0q zDxFy`zuu~5*^kpZc^#>VN^M|(CUEB;aDqouS^d*ofR40D<85o_LmT2KHXx;Y+{$E{ z_H)NY&$R5%Th9yuUa`#}+Sj$Zgnw?Fh&iU!$tXKDSCYlCvF9XV6@vywGaY8%8fRRb zxjoyy1j>ZvYo2E0Z>j|#g+sK(h^^mSCs(6w?+FdUPB>jZCiisV%PRH-6BlAGUCi8T6>hY>^3To7y>sNOhtBJcR5^sC^ zigrL_4>Zu3tQ?;tM}aQmrs#Uk_$P~$e=yXHuzGcKnEl?)1|?uJ@RAt*J~lOZeQNT? z)VO$c6ysQMa}fTS12#uU73jC$bI~r`@BKz7&P>n|4!xnTT;E6g{Sh#Is3<15o7E@M zv*_VYIdtV%4>vFERP`WV>u9BZM$1~~N*;NBt)9_NDorT*?seYS458x|A(^-&z{iS@ zX}^TFYjOaiDKF)oz#94YyAAoq=)py5K!cGo7(gHcgIJR`d|Ldc?c2p@q_lT%)_&{M z_LUoJaFwZMDdo)_^ikiZ{Z($Z%=MSP8{;*StFz~nVfgh`ZzQi)T=l|UH{#baKF6(F zHYFw75U*Oi#Tyn^*|~aw0@vlobM;cHUaUYI?X|OT$k=Y9JsSg^t5=di+iLL7p8w(k zHk;pWNUilX<+-|h5+S2`;{(m>p13fw{yb>|>TBZ`NT8Iobog)ksXemo`2HxNKc}bg z_M`pOgaN$<;s_t*OMv)AR$U{*4XFI8b-``UDL!stwTHR3grVu=?B~>Jwz*=hLjBHCXmcnXSGV~ z>unWMO(3aS6X>LgF;j5Y<{H7Y%e8TM^K$q;ZbW!`v>M2LUGKBr>4~ z1I_Ks8&E)o@3vPz;_u5|{almGZk{}seUOvlCi}8kBxK?NwdHU={7i2Lr_aW2*0CkF zNdq>93x+5Zha2!M>uchvAzr3<%TD#_6HP20F1vDQPI&Z%T48dy4(gN$r%I*QFfPQG zoGhSwv0(xwC!mq|=j8UszI+!i*{MB`0xSlZW6#hq!`LRemk>!wH@5RHR=0rM3(i7E z-|iL$V*0}<1(g8UO8c=)+g_a7QQ-o>j?8gdx3p}zjmCTAsQIv^8UQlNpS06IwN3g!!?Pbrcd3KGrx&%;2KxU8m?yv^sxzu z=J@$c)*TOuTlW+z`>vu4j(qI#MKuo$yiMPD#XqcD06a5({6lb;b>Lt7z&``jt&m&q zw2gZ*U_PiFEp)K-aInnVdryNg()n#B$~PcYy%1k~_OMunr)G(%Sw1zb^p}{LZL%Sa z{1DU=y&l>z}5&0)YH=jWFo^_ufyr7`7*!{u;`mHiBd2OyX;)jE9RXwdYf+GQWYeh`!*HKWxo<& z`hL~etKvlOqR426&~inG=396x8qiH*a;qB(G9nhat7@nK4voEs3Zz6Z0!*=B5@gM8 zwV)ozt34__s22W-K66R*jTqwN$pO+syYiKO zGQ8V5uMA)X#?~Qu`1yk^d^$47-a#w~Vz`;A2fP@wXmE>~} zsqbOrjgZ|ON##x(KmMCdnRvnDo4)#XTO8-5H=i-NyBzSjG1V&O9iZb`q770QAZwbRqaIx}!l9u4XY^z$#7UIhk4;=Q0!aygjr)Z zh^01xjq|=-;<(u+4t?vAz|(pUY`fD4Qp(yj<1(?>w!i2vl7)X+pbyp|Xr57otc(5< zECfA1Qh%cC^wi{B+DDPA@@~Ih>e{4-pna*L1Fs}d``n^-41^$)wBynVzv}oFYKUvn z{bUz|IBKwh&}z_-%t1N~ZxX9qzEB27Ma&xvB`YAp=CH^sB7}D%(~oF2cwPYy4_6~f zso72~A}_01DR!&4;r3q2fYDRC%Q_Q1Af5J=uQM>+xUnf+#+l+!u%sYuxm6>>}4ZswPmKg8%(rdTm*xd`O zhqI`?Sk`}S?$=30qswtFZ)j@tYOVRO@VL))Pq$dF z_|0Mgc`;V`SPR0bZW3E|c+I#RIuAZHp{k7w?f11q7pe8IAoPt-&E{g4y3yvV`nUtV zmu!d|4x2~Q#*)q=OOXO-d1HkP8YRgzDB?!7nX5fBm#A9sVc159N=y;FNeLq&85?_E zF3h%ZKmw%~Oe&txC!w|zwqh^&^~e)Q$F&oPlXSlOW%=qeVrpCzEASqW==`9 zl|12&eFdJ56!do~GMJim20p_ndMDu>%q8Ggc(FctkCTjC_2<*NPv`1`zT-P6NCow` z9tk}idP09*P`{B(|LD6`g*-9dv<>NTThLcHmA=r14NF-5iU0ojWSegwG5eGL{qxCgrAs|NJa_9W z&j%D5*QpAhUfZ}#=hn;|6g}Nh>#v_KvSgu}s4vH3aAng?9T|?uOR=VATP55C(6PDY zC#m4216APgp41{PqBG8=%eY)R!sODm|Jm05=UVOXks!rfxK+2!hA#2C$+t z(};u+FR?R&OF_FXafKQ*B+2QYd7w2ty&PP|)6>re-^bq{3_go5d_W>lZy64I{D+m# z_pR+NseJk;wg~*uGlOkd49P&rCYgM>?^+y!cu?#nr6!|2J#{6_hj(UDDUC$*>1V^puJMoeh=lBef%)L) z?qj%{*N8a2muL3wSuPik-3y-NuQ{l1G?Ix14m*-v&(x6=W7UocsTQ{c&5a&ewBf|7 z9(#*)5w@oA0{m9jKo{{Wd##q~T#F_SWZXPxa)%|m>q4jFrp(&BI)n8tA0Xx1M;=C@ z>oIcmX0@s&vq_G6#vin-Z;$0VJv|!D7PDX&4s9D=-z7duo1l}}QZ^ca^sRL(*WvZ^ zA7s#3?H!$47_E2(?F!lU16ljpqUfi(IbGi!NJM+Okz6#QhzXEpSpk9R5Q@WY{mNe! z8mfzQYc=>~{EH~|IzTUM8W7V4GupzyQUeK%#|25Cv&24;Yz`-q+}X~f|HgU^UTV+d zJ~ZxM_Qi93d-nRBlyO_V&OzD&%D6sH1RJVBn6-M+rk1}|UmDe(p0=X+g%F|F1gl}H zbbl-v{dmW0wqrfyg=n>j2HH~_|3bA#DbcQtW9bKT4Sw(L4o>4Gs(?iNu;3-Yb+ zrv^PvCVh3ho$(W;`ctq;TZ2qLV4XB50kXVz901Wjj%}M7=eBfXmlK!I%w&pf9TKvQ zv}S#283cOf!!QL8xB}N@GN)8tSJQP3Tq}L|%HA_30Df$5LlLB6S(!UMxTbk})Zw9IK;mu$>*xU>Ty*@Hx4R#%V%Cgok z1YNhFt)k_2PCMSlI9RnjlS9&vBG?D^>(RYvC)e^I$97Ubj&}?O^A|Oa zqOBVwhQa<+wpJ=r7TtPWBC_&A^_xdyHadbKpz9*Hr>)1Q*xCX$JuqqD6Lmp7Z^z5F z+?lMFk0}84kNaM_HH1tK~74QCFv@)w4}C${s`pqw_7p1TlzjlF^89d(|+c zUKAO}HKhGAH>G!7Dle{f$(5ED9ZR(GXf#W1)ghn;W9?@aCk~Rh=?Mlz&t0}E$$8Bm zaF?i|qhD|)hSpzvyVdd0P->Qkso2K))K`aMg$)<}^LE)PVhfnD*%HVJ_!Bp{ASl?DwQCg3R^0G%WmU&?Ia~@jUVeO4%|^dv5H^fj1}A zlPES3`psOcanTstw^>qMk_zysc}0DvXRTVD&pm@gj@6~J5T-Sb7QA}ePpIYg#ZrSY zRO6h<^`>mz1(JLEciceGl{(nn+4qY6zsje|E;K({LLR%$ zVU@h1jGy{7$^JSpiAeWY3d*XFu9)LJNe9}ooFUOCk*BQ97riHZWXoS533Gs-kOb}o zyb>kXq+Wi@67DL8$k=0#x_;2uh3{6}i6H)L%BDY?dvUl- zm-K8+E)my2_x)KigD65kmJ%pgKSCJYU!%yZ2Vem;Hqvi7Qig^NEnY8@Lb)=zlc{e6 zojGbqS`be&*Y1T#>pf&)#O9eIO*Xq)lzV0}OQ#Pso&-VnB-P#jZCYkckE6KNd0Fvv(;n(mj(Y=cH@)6PJ)sT{guyhz+jYe>)y&rxWjD}z1&lCFE zOA5Xy|A=(B5Owmb`!^LL;fkX7Lj*@rc(r|^@GlxrbG`l5W`DJep1?6Tka2)9v8EPW zZ`a&y*PgEj>BDx=;?kG35uJdP#xD=-lH$dsJVH8yF~${IxW@11YKgBozW#XLA6}@7 zk!aZYf&&yZd;CJ%g7~knGTA;RcMrJg<_BAGrsRErih_;fowgybTrK=leW=NU`sD56 z2uK_2IIh*`3oltYWT$RvQ16q47_gF!-5u#&d?1Qzb)SmfFQy2i*MScVB~^6)0k>S= zAE`UhgCK2SNg;EI`#C3?9dQsytvJJ-*)pk^-!Iw5~1f_DfNhZ;bH#MD!6$-T4*rkQvcl92B65{;Un}J0@5>`u6 zpr=<$V*a9bwA*VuuRFM>JTX=X#;_4vxNSp>Bi4D(p&N33IJ#TmoD1R?22h>TheYnPXa82Ib@v+bj2yP%L;fb3FYj#cO&OVIIDwd;wUAx^z zB?G+Gmb`Y(35o_ZT=LsFJ5tse?nWI^ZrlO2QxN^7A8nRQpA8(naDwncQ99|=N#o%R zLEY}7O|+^#R>PK`PVCbRE}$$mWt5~A`pw?AKxs8A+e6<^N*Z_Zw`>=$QbC2cJgHNj z2O**_@q({;sGlD4<(DtfGyGr=fUh-r?HTK}AKZiJ3!}1>93?{+nhCRuU6yhh= zaiki9Iyyoo{4%PUmrMPoa;2Shy>fg-us@*TCwIa6fwP}IgO0UO+V?}Px zHUP;T7wC-P0G=ooi=4)cX>1z@ii(U~3uxXgELrrh*tTWH)&$o8nK5Q|OZw#H*A+Q` zuC&hAdN4taF%`s6<27|yBNrG-QDXwA;@*cKW}CoP@L}*0rEEO^WU%_KaTo5roV)N#iZw_9HIA*xFdTZw*En$sG%w~6{`9})f=Mp4;KFe-g;>aKrZy8Z*(g!8v>ut!k_Xvz~p z>Wtmjj-aF(ml zxqANY-S4R2)%IVMKnA3TS8oT2`KC&uu=ivTU44Haes}Ol`6tmH|3f)y6Z3!vNsl)7 zq&E65-uw!)6o>5ecnOzgBv9J(l1FDbEjqJk)E#2#_p74VQ>|UpGPo+begGWS5*bYl zK9M0BMBFJDg`cahzI;oKQ9I?$ezM!obz9P`X(1BckZQbQEH$-{! zu>nnD2v!fm7S`&Ps@ato*HR4pnqxme6+sp7$aG*ng5z$5FmAMhMf}ijPmDha#{hwD z-ca-oM|2ptegyQ)guW+1%YXadH(iG-uYDRik*9>|kNHA7LUsPLxhwB(+c@I?_fwdt zs{rQea?`#RG|cC?Y2&sz8as_!TFJvD5E2iW)L~m>KYM>OvlkA^N{`pRXN$mM@132U znVsXa_b-Z;TY!P-a?;L-H97X&Z#DT^mK{(i4L%sUw+a0uZ-?GB+m>ZIJ(;-=Zchp@ z7i~770PwU>297Cli9!{CfE9v^GCK1m&zyHm)KZ*dI5;})JDMH>-qID_tZq1H#S*3Q zEuX-x^)vFWR9qONP?I%b*XK-`8jNYDh@C`_fReIFWeL@a+-(z8@k2QE-8P3*{dAXO z;Q`q5`2K^E!=U+Qev5TpxN~j|n!r7`{8C?#$njxw&7qa*lV^ z-H%x&gX5OmO0i=JOAix&qbMz*KW@lBycuqAUQ2+%k?`V&;r=+{;}|FDB6R0H&Q9TU zs16ff4|^(jynsx|B;rJuwBa#Q2Nb@LcR!bk@a1SR42IG_P8xB^4Ba1w86G+M&XG!u zN0|L1p(BwEpxqeKi2f4lai#!5fc3+d01Qu5calegQxef>a$r)SEtyjlH^9o?&fkDpoRued`zg}<2_orFYK}rYccU3YMWYyyYP}{Kg_Mmq?^*t6E7AIQ<>iky ztMRSX8jY_kmhSY$We2L0ZLLzEr~SdeXV$i=B-aT&`C8dvU)I_kuEKek6BMKds*t-( ziS6pvdN_Sk9M&D*jazYY+`T35r*T!TRqE~VcN12kIGBDn8~kV+4aFL5 zjUN1zy16te*ZtZmqYn2k*Jvtml`<%o|8j*?*stsYr`ZkI5AJgO?+-XoVeuHsw& zgzwsmG2O#A0{VE<%;%}+pk3uCQdmXEz+3N{+R0yi5c`Q z*g648s)Cpw8TNu$gb;8M(2+r~9NoXxa(%<6bEN1x92r6_a^t@r?e)XTRV#xUo6R$$zEga=NTbtJU_Y zZ=&t?b3YD6l4Gl8U6_f1LuvSWhXiITV&2~RnFS0}KLAf}T;L#zhTS+fhP&v3vjA|B z%$Zpjx}wBZX8O^S2}z(_~ii_K05X_$opO^5Gx&!1E*waw|(^+Ck}ot?Y+ZWk}PtJ)|$@ zdaE?J-=LJp^=D(cx7pbIN6KUz9&^@Vu#fQ_#{hwXJ#RAuaR+vNEZ9{JvAYp0yTwmD zo<_axy&I-mIk2kxN9fbmqRJIt6H4Jo|4vpXiRXUGr5-@Bag~?D!*Dzx-6py_h~zoM za}*uw9Fa0tjos=F!ykMVr?D+G>@?&!{x@$zlGB6Ze;WzM-@Z9d6V_~S8cz++GwR4h z)XjYUFjJ|ca@_U&h@t`BQC;44gK)sN5QGcYXvq(Xtz!pXk^`yk29$_b8L3No3L9y! z!bYn<{xAwGftdhdL<8(8$@uGICYXF`^9 zIv@;r_RVr#)6mCPUEAl>#JhG3_R*G=5O&o9w3_YuW`%7#yRd&8ACEqki=@7va@K7e z{)A4a0=jZA!9dA>wO#WQ_ZwM8Hk3*-ArvrapS2WG&VM~iDux_%r#AIpQ!kqr(EG>y zYO@?$eaq4aF7S-n&ir%zEU9h2(>wCzR^gLvJmt}%80}sb3Ooo1buM&RIXP!i0YA3a zoT!lGK#ZuLe2npMGPw(kb+(L+Os?C?EN*EGMIf#-nm58SDDNUWbJJ8Lg`ah6CakF) z%nG8`ufGO*3Q%>;Dk%XJzUzxi;9Ej`zeASjppt099CNp`Uq+hx{o>V^e@=oY=>xvO z{UjLT{QTtbX`o7cU&BuFGqxxsQ!0;=id5dd7GU?Bq8S4Xy`*c2V~v?Ua`RvhrTosD zhmy|GLW}ZUWQtBugjV(43_@ z$cf`otCT2!f&7b|QI2(xYe77;=0_hA^d$mLD6BgwOj8@a>2^8! zvO93Zk3T}M`@@XlWR9}N^jth(YCieo)#oo?(G*=g4MZur)9Pl^O@k^p6*Pb$J_m1o zRc&EowW@Y*{a+fzvNF=fm*Po(_%Pc1U|r|)+t1yLzFm<6hwraiEKuY9x2T%(5x^Pk zrm*aX$_yJwYUMi=4cg2l?d`S7JU5(CyVh);f~=3)sgX^fPe=d z@^CMRVo=oWs?~zshh7j6H7bvoBByzTa`Q!W*GvSHx}bw|frIk|+@L=*E6faF2sHNl zTMXe`qwd!DTvX}Q?v$-Vf?^3e2a*$=i%f7rKf3SuOM|qvt;xIDAZhvG%WmpTnVr{{ zJs;-lRw6Su24xR2;UjjS9{oe^YIs_8?rvX$2`%Fw`Q($6SWs19W|GZ3NNCm`Ovg|x z_n5eZG_S}$hRkI|4U7OH`Q+j8CnusZX>m{*MS9JFqO7rjh$T(fMWC$1L2_tbwH|FE z1L6)a&n!_OQairAJ@?#D|2ekY^;VCw0>oI=>U^ha_4cP7_CBshn!)xoj0Yv*dn7(> ze=+HS4&=52yJ2v<@Lo{1js&oQsXjOTXx$|@ai3~DvEoSUfIA)GBNZ^N2CVt0JGq}0 zjNfEe8%EmfFW^)-ROTwH?_^7l ze~s4q>aZ0+yrj2LPkfs&9j9&Ijw$>Sw!3fTB4g)^giZ;9TM}l82J!n|a{|l11_4R^ z>?RveGEnh`{Ysj<+Uld94wC{hl#X(>%gUM$sc$Qlo{ZBW$ksUh*ew9rR#Y5S)H71I z3I(UC1hN+~qz?G1JdIwXR6$OCPsN;KjtA1NPP}Y7X%fW2Ng~hE0DlsLlf<_?K`LE_ zICX60!Y~?xHYC|Kcgqjh=7soka`+vz;b(|y^rZwzlH+r|p$iB8#7{UQNl`dCREO$o zWIUMs5dR#CzX$5%5z2nkFGf>;F~e|T#&45b7JH!;>;Mz3a!t<*9W$63#P4?0aQDIb za9zOEq4*15E4*v^cZvdbu^i;nqHAfIUT{Bd{HeEHDS{g{Wz{;2En~?&U>*i8=wK@j z;0>s+U{4}#8)KW{yzQ25D<=pM=+GVwsLhfOqa60N5}Tv~M3!D`5>Bq^dJ8J7wGorl z#EzA0Cs7*IIwfl&YrkR`a8Z)zPU~qq5PkpT$&rO+bQ739$wz5t0>ynFHk?0!xQ1Nz zhCyph=_@Iok{d-8pbX8expn+W<&RKaib)mqx?kJGxot^3w=I9s*UizG1nIsb3Vm^4 zJT1umf|)bP>JI*xUhPMhj{fAc<+^O&Iy*&5aptNU88zavrI!0LQaW;5+eFz&phHQP zt^m*!&Je92SOVpO3OW2{WHl>qZ6qX0SM2Q@M!&eup2bt_f-0$eiXK4eSa{)Z?7VF@ z-7U&>m{~KT_wsl@< zHt5n1zUHpfEciM!fE9}vw+qjvMi;(MSE)`3oJO6`>A@LuPU94rVgYNSmx`hnV7o2K zT1T-Lw?lmUxT8Kr#U$uJmU2~z^BOwdI7t1D8GIS$qKo%3Ea+ie#CGC~h6O$p?n~}Z}JD@Oh>ks%pH^?lU&qU}3w4k)!f#rEModUF6-0stEDb81?LZJ) zxg?#M&{SDkk(mwim5)iga7)Leew=9`-v62eX_l=v>FTo1XXPec*9HDwK`(Zbr;F=! zy&;cOvl=FR>`=iXN|4B|^zA0Tmn8AI49$S|YIHJYAh{<|Tbtq}Lnx zU?M$6Fh~_y)Iy;#=PK4$bL4!#As5!0YqY)$)c48ZgR{TTK@07Lgu=k$cf%^b0VH3q zS!6mqRDVkjpFod-6(TW+d^y{cxU(-d)77S)S31NlW`;YGZZ1-wh$ti>e0%~k&L5tV zJniu5VO^=eqb~E|P(8%kC5fyLYxN_ZH+w%HL!v)AR9VW6#&T7;;keKda%EW~U4+8A zJ4=}@mpAt{I|3>e4F5{I252mZR8}O1THRb5UH*`qY!W;l=;Q;gri9;_!|*J3Z7{1S9ACht1o7_Kh;l= zsRj6aDBqt3C!l#NpaCg$T9>l|vS`WU-iS>sQ=N%JmP-zPM3+fxQm(5>HP#Ak+2slvSZ6%aT{@8_w`h6nm$B4fo92g6AQAk3Y&yBNo(bJuft_Hfg~cw0M1(}oFrMSwEmst0W>BC)HBj`hGR;xk z)rq_d6xrAx1$bR)>T2N{>vCPP1PXkA9V zt97_S`!ZeB7mnM zE+621J<>R!?ZDA&PYR_}rVIBSGI(DN(Zn2CG8?j+QcsOz^uYIHjAcFrjrG4Ae}e?Q zdoEf-66odu1ZwyEbZ5}B73>Y3?S!)|b{>KF7lE=h8x|3_1dexdN|O7TE)PIC7j4aY z-4%{!S?ty=ijDM&Q{E@cKHpk?1rPfn6?|CAJyk@%k ziyip)Cu6J=-G#EfFZ*5vIv8-j#E^mtq#ldyC^SrNfgImY>q`?caq!yYjHp~S3IA>` z>!7+U1Z0F8*QQFzNz?n*-$2nlJO+LG@bS}t6*}zt@4ivduznZt>MVDGu*u@?-BY8; z0OwnMv>U#Q3Qg-U9p8_nq-AZ9l#(bUW!&3jYrA+yqX!`$MT$R}j%oBA%V0W+VR&6= zjizAorh5gz;uDfN>j+q3bRQz9jeAwjNxn!{_s=*&2MIYQjhBN=<8Mf!!`xrK#)dZ3 zR10f&W@?;6>-{V@{-gL60#aOGp3@OET^C)NVuJkDmi$ z0L8WsAql0YXaCIK)L9`r_3W-icT}G{HMJ2vt!fK^?yjpe26$4X_HA(H0ZXa!aiw7@ z&LDqkwc2Jp>IB}}eD!k2JvPpr8vmO2Hb`*vqc>MR1eD1w#H*ErZrsKsx6H0kD;Q>-g3Z9I*(=Qg~qz7aWB z*+pZkh?vyPNjqF!KLn5Ht^~jAXD{pFbtx@UwPtutI<+9*QH+B|x~c64@H3s`$*+zd zW4*Wha!Gy01i2w=HBKZkL<2v5{DQ&hk}GUDyz8s)=4uN9=-QRG zZfB9uyBG1H^xmRd@_=m6O7m>JpR@ANc&>Lsj+k+rTw>x#V!aG%<%|x_LPuG}+qR$a zDOBo(B5B=7a3eb$Rq|D*~*Srh6AD)Yt zmO#I4+S+_SCeqL;EwL6uM!epXU1iP0Gy=aT9165YklQ@rgO)9hTZRwKUk$d%DYY$|XjO*O<2nfuTj2GT3+ z6Hn;032KY@&j5kvqwpL^^vtk55;$FV;oRBpk(1?NVqA-!I}fXPwYi;20A>17AmcoW zV5{C1Hfm?jaQJ$@i%6HV$x!>}cTxK|zrYyGVEf~VbmZTc2%2X`=WdwZ|Vm@%lP@S_76ug!Y%q3usW1X9%><(6%TTT?CTW-tf7oueLm zoQJE#P$7{6ZcqDd#oBM#0>x@$jY@Bb_wTezri@mR7*DN&$yA*)+9*h;s7D#h`YS1A zD&$@3_Mf5cDK_EgOsn2C2sZknj8z{Y!vUq}`s`!Z=L^a359waZ6xANrxk6vx$Gvw~ zm%c?Y|CJqEpK@9&Hi)*0KB%yn`FlT0Y)3)9v8Gz5P)n$$YH~J&=Jts>%GTiX3bUZD zGuy30sFo9t`#lJs3ULaY-3mUZDtDrBd@o=J3G&-i;T?rF(BssiM;y_jA!e6HmWui? zafvNqghQ8kQhV`)^~sV!nNfu}t{Rb!cg2Y%<`x@Dq*(w(Hx=8u%FgT}Jmn!E7~ra9^CVw#eJ*$9UE zeCN7K4wt|T_2v6SlIcQq4L^F5XZwFY+59kHlev9%i3`|$@}f%`#qXl=Ln?cv6H($C zkGO8$AD%=B{~o+4O1^r|ZV;7O>#c)`%+|{pdK;+g8ae^>3=PM|y%~8o!vTbZY_`nL zDV+MdWD-#Le;ha8*46YfI8oVqq#bKkfiJ}MxA>I0K`$)fa|9kzInYpitLHtw#Rl#A zv2@0oACMO4%z=A~e0L{7Fblj70PLC`Z)&I=@zV!3Sm&qZa*khWh@(DZgu&@-nO+95+u->2drBJz z^dw&c?y9_O6~Dw?=lEjo;_DU;SpJc=+;Jn5j9uoB*;B?o^K!;WASc6hokyMHlUWg* zGou{urvG@~Z0eCQ4(BeM!}S%GD*zriXFl+p*#OdHCWR;eGPpA9b4J^6ni!2KknoN^ z<2tfyK50ec35^Xo%mEy9JQ`LYZH71y)-pe#gDOZS+_5R0WE_HnDDkPq8m2H`p=x8G z<9}sZ-NFUNOU;A0ym)8GOE3dCD)fL^{|h5t^N0%>F573(5R*a+QxR`L!`m*Q*C=nV zNad{q>QeqX;GL*(0&@p79CS?JOZr;5m8qBkuguCos@z%x#=t{KwY;4T228>~rmBknq3T1oSCgr_vQL`}VZNX^rX9< zx-=YI@-1TreM@|ULL1Rys%pp7Fz<@TM)KWF->qj}R0=z;FG{(|fOnu}8N zST31ev$ynq-E0i`66h3-n-&l;V*9qbO&kJh@8jWn2Z-;6)%jg=_>0F!#JGH(P&|_p z*feIp$Kz`JWmMtE?#B_}D3nS1cA`EzwO@4TC!qHsDgC}neCG~0agp;F3 zF6ppB2fvp3TdrK0tNaFalSXs)7vdzxdneJ42#m6K@(4-aq8R%P8NN9n-yv~?N~ljX z^M~V~$7l*EF}r$;#u4@LWx|Xd#m!aOE4tpuzT>}tRoV9{dkv28(P3~h#7}S{?hO8# zh;J87lxBa6kk&QEPlE`xP);^eMi%|H&Av~vZ-p>NQZw=hxoT_bqf*!UBAxeLj%P0| z-Se_HzOfMB-rY!pL)FgPtiwW_zFeRLL1q2Ki@`3LLzpT?sZBj1^JbB(1OSgt>r4Z8e{rI)7WYaM<<25NlKiVV(xy1$|Y%hVVQt!H`6DZLxL zeH=sLhJ#bxtrOB;xO5S)0y*n$cgba=iEy3HLPuN3VK4DMoM9|LQw)^yhCIgf{g%2N zXWV;rO@vRJx)uGs3JALgv}SQn*1SI}vyzRN-wg0Tc$W|4X?ej9&o!*_3&&%V?^i5L zl4k(fPYSi&7th}B%Y^w}6+p@c`B-aGPA9ovmslJl+28C1Uum=NQu5VG7jdkod=!Uw_rw@%^RF*2@Kz z(J1Ju$-)ySko}0KCXR~YFyolztz^Y{Ge63O|2<}eg;S?q{}~599{;F$-S5fOh^l7G z45@=7L1~O!jm@86HbVDxo>KP?-|gSr-0VXZD@|In4oXoE+BX%7oM~jQo#CRi zPVF2@JKV&fRLGSaZk0jGzb7ji(_xc{n_<%WJ0c{|7uE z%!YpD#Rqa=cAY>*r=vxij0Qnl!b8Z{Y@340wN*N*VSt9vQkMCfRjFkH+26zLRm6#} zK(Vcf-sQyaB(Vj}jd16%da=;~cCpqgQKeb@NED21;)j<_HBH zsU_|ZS4=X9f@7&BD|Mr;an(j2h}tpf*GRuQiEK^Jv0cRtYNp5)0|{TMs$9w8fEJeH zKqG$0az5wIMO00JR#!1qRnw(v={0~fR26!4`KL<2rIBZU|5S%M*lhF-lq+ElB(`=n z^ksz!c8LLNl?IUDUkDqrh@#~r?`l{lIc^EI zd9s|OtuI^eiYPOI)6^1Jc2yVUm-U>Nu+gD43HcA^`cu-@M@}b7zX zp3WzaS(zXcM}22RQcdWuO7Z7J>l5Hc*;IIfs$sH7)K%6p11Jt~N+e;3aq?p{^uuOl ze^8CrKPx5%hQZ-s5TUH0jn;`4&$=Yc+oQJhPg923H&ixXEkOt@=Qy)nNO;SZa%Y;Q z+l2<<0K(!GtEq6e_V!i)7J9)C)doM4SaHdbfbqJ#h=cKOj^a;0{Ur%!K-q8({Pt&w z%os^d?U624(}TY@mBS^;GLZ7BiU#8dQtTnlV2Ylot|PlcT=vOW3UKk@r-5C#K4|0GFwhn3Qx-7qjS|YIMKD>= zHq)C)b*PR0+FzVn5@r8ojdLUDmW-58A$L{s6|l@c`^^koZa`aK_Ge6S2i_(YgNx!o z)8donmy_|%FT=2zFktt}<3N#f($~Xa^x$oBba2GiN>S{pK_(qk^NKJTR!WYYsHeYI z%6^`Jx)7KWU0yJqn0EhFE0Y7`sv=5cm1Tzk_B0CjqUM<%+#06uSTUl;ua(chJNh*m z4hwGmBB2fZowtDp7tu|)e~b{=%LkUK4zxB?g91M8A*iU&mH;Xam@T5ExD<+-{a(LK zFe!$_wx@#|P#~F^$FwCQF+*CT)r*5Qaji3TV=RL{M7MI9NY_7TO*9F*{=sTMU2hfR zGN0mTDm*tyk(PZf?g6uqi27n;B21km!VrGYyEM2eqScoJ>(*6Cutk^w7 z0`@G;dc^*jR|RjYwKe) zZY2PeTPaGE_dw!v>p1qLNs#wA$AaN>7(9F&j9NWDOU^88TMM^!!Wz;b7Lna?}v0>r%X!!o0f{6>SJGfP zPBr28ImwGtPgvKxC5BY0cl?&%MQQ1x9f(V0(R$Lv~IavzwEi01pGq-l26a4Bx1Q_5+Rr8 zr1gyouUBB4c>@;^MAMyDLJxd$6B|{cEUq`Z+Lt+b-}X*;MEs@FxIr+~gWjTkrYO3* z6?Vbhv^~dL%luqIw4?nhgq%!SDO0pO=^lZz1qf{I=|hSP&-kQz zEobMr&$B8Wi1{?ir$8i9Lp%ThRguTl>8N#TzniY^s#E|#u4lA38VJ1(BS6bph??`d z0f**9brx>wmPMJ+n8d!rj${4G;0DsD=aAN5LU9qb4r+F!vJJbvBX-kP#$WgL+FQc* zK;U4I`&(hNamA?zdTaE| zG?(#Fd`A(cl(;1kW3xDcHNgEuQiM;u1iX%ND?Wii;DMF4+>sW#B9Us&5va0q61?8m zq&~PGHn$_*y*E7xAn*PHJi7kijO?ZJWi;(_4rhv#*$vHm4h7DsP{MhGGtBv<*@){h zRruSy)b?^Du~T!k;6_EMEF|LypSn+yPb0SCQZ>F#dl3jox#fk*5e!f>%-A!v@HA!Q z*ET?Hm{P;B2s3e(Otn}?&G6VOxCnIG$yCr|2-3G(UEu}j zZ(uXxMqsl$2cHzutj`q%kRE8@?auhP096*&$#9rgJg*`2Pd4~NbHKLxSAy8`Q*3LV z?F7iPcXf6l#|~CJr^<6|skzD*qAqf|tg0ClV5Z9(Qj{r4EhS&#n*{4mpm;EW<_D{W zMByae|L}{GN30Q(10LQc6IPA&b@^ZmV4t-`0QpWW$n*){+>13An21uXEd|xAmTI6Y zgm2!Pd_)aa4gUme&8q3yoW{1xgp;pqIwdnX*j16k5!1yl_&`|^{>?66gGM6>O}?1Sz(p1aA;aJtiFPzJ*qehK8p?) zYOuwF!KMvGI*v{Mz`RKHqOoEjU4Vtj`qkz$<2Mx&(0EmJHCc^H*W zon&L#W3epbNl5NkI!i2Faf{rVmD3bAV9Oq-sa-ewULSa+ojDJj=TT2W?d8n2Z>@u} ztXLj(cM2+m;?@obR}|Rh7fXHs{L}v1Ucafh+w(}?D#8F1$k8HokZ>N!JhPL zIm%483$1Znmuq7(QHv1hwrZGs)F9pf;H1V&lA$EUabrZ|^h|nV^g%gM)f6W~Uqe)! z0*OfpJQJ%O@5-4OyTi}Zb-h6QtpwyD!AZ$4z!&QqBWEGQ837j@bYf*AKtyWuR-w<{ zS2^D&5v$i#$Zt+AaXGIKp$H!{rU+rpa+6G`h-^xmsCv>~_a*-AL4vMknrPT!L<>L$N#>U;V1^Tuo;m8PD4>~d%e23%CT85o$0 zuAcEFfq_CFw$9l7ERfSXP!^8O`)@0KTLfJx~%%@lq4X-(-KLqV!HG`g);x- zd|$CztEvIU(Fn*030Dh7 z^H6D$RLr(ME!{nM6~STxt4x2n5uiV(MofkX65`&tDj>#6prlfn7Ve{Lk`5)aUsW?J zH|cz;Wc&N0s6J@EDVsr#DUDs0@W*v}T{1Hh(t(9x+CVs&ItJ{8 z6y0r*GhI=XT$LstqHQDi!+M4-`a9UX#E#U4+>evLyNC^K=MrBDrDG`q{=}#Mi-oh| zm70Vq`1Gdo?k<2A2pgO{@A)U;jOoWJcF30s~0qG?y~sS-s|Nw zu>h6LrbEM}s<>LE^cts14$WAyW;hmG6duyIxU4oM62jPIaWXzKD(3E^Gg2M9#MnI& zICFU(=X&ftPh75(*h{zmNSMVCXfyC3qqjOOjan{*@$#=n z2`F9lxCx^sIf@OUu^U>-ZC$i=Gt0MhqNc0enJa4AS9CVPi>9dHtjWKpY3GG(>QlT@BBKzjj|;&8`JZX!RV*TtZU zm2m;alH03`qCwm?YX^=gfnz#JGP$;4X?CGWrbva<3TK?y4&g+#sTL+8<6}F&YB`^E zm3viKB4uE|%Ava1v=Y2R0&L!q*R7WcbWE;rgx5cu+}LNDqtZ} z$2Yov^0&I+L5M#qyytu%1mWTcz%F>HMq#R&4qJ9}FGQArl9Uzd6^DiY#n$C`oXy51 zIyPv0j9YzIPo%uPX4vAkgeJPZYjF3QpPw=T)H+STj-iu_Puea0UT>7QL$u34*J9lO zUM&}d4OeYXuVHhyVd!pa$#(1AR>zVm_!KSIeXOvXGg8R56k=cAsJDU)I1oj}8RBuI zU0l{3HqNn=SW(c|=ikGHJhPN*>wc2miM_`Ezjgc^Of?n_OufMnnw+i~x{=2a%^t=k z5ure@V4HA9oz$pW*-u)`{oc=m0lG>viFjelAXnIW< zOtIaqo>lEpKra@sJOi0Hw(DNTWZJ#ogbU@ZeSYXFaKM3S7U9N6K;a~GRRMk>%vY|u zs1LIbLj#Ilr=mxu<){gYjzM%DarlH*w}b&Z=uTyh>&Z>{q5O&APuMqf%AAxMq=azk zkr)U(8SWsLFqx)|J^Pmzgj@{9jgNn+D9!Hz+iO@PodYufZ;MX15R@@^2_WfT<68L? zx=AtJFB^ISmpDg)8XUFn;|Oa`FUY_N1XG&fXzMESOG$1c!u8)KsZW@U`#vRH^)Tf# zHkKUCZ(EN~a(5(xtvfr@QC8THcML64OjpifMRue|r~5!0%e{@*4dC_}#%XV77FKMQ z%w}PC>fE8N@rZ9Oscvxjbjg<1Am573R4$v|$#oSu_gG{(fjX?yw}(|Z${F=xd8kr*Songje7D|_F4JXJtM-=O7&($s0ZzY|f| z%5p%XGx>BYlBk=>$A% zzJP)K-(&_n4F$CF4(f*`d7mK7nB{CH4Y(II*QHaVMYrImaQac0i0ylO=LZ-1 znJ8fX80av0`A_TTevU5gEquJ1cv?IYqP%J0fXtxCSepfY{1U{Dt6?U0t*3eBts zpzOVMbRKWqy12zRQRN8<^I<5H5kiLHYG!LqRl5Z099u+&)RJ?X2}z|}b8Ivh%UR?- zYBE*z35Cj5ta~%VA6CaY8;7&Rb&!>xW_-Xd@Jr1_aq|vJz<=Q<)dKAuu`c07=4Du} zRIxHOs{Q#iKHSI{m}hYa7CO8kyshj%=yJM1-HK?PuMvq z$)-CNGtQPMZ=laa|L78tn*~MMgOf|9${1 zlW;GnRs~OJCogwQ1x<`*ipcEVU51+Q3i+EyhElZYvwf)-YvIq{JzbdaDs<-_(i1-1 zO+Y{h6wJ&!FZTe!o=xhb+B8WU)jE}N|8B_onx&;UQGK>NfnZ5kfQFZ4naEgypSC|HA0=3Apu7eBLy4 zmDvy27d#fDVLj2<&~~NA8cC0Pc2!{&`~ufcj6}G7X$qPTuBk4m?b>2YwX3a66__2p zi-TD2wVkaN-PU#hRO)-np&X-sD+JUiN89b-RouPEiw-35#{t5|?^L-P@&aMBXa*^$ zP7?;r%(-Nil%-_w#d?15kb3-_Qv$&EW<#-7{3-#}M1hsQ7SnIdcrC?K-r1{Cwu9Z` zNa_}FUtIygEd2%iujW=h(X(w1{8AM->zgO7nGxSzDD0Qc;@aP*T5qr$*$paiDSI2_ zt(G20{ApmphsmkQE2ba%^FFE^2elSm%<{ zFcAI?GrYs%VTc39p_ilgGIYWKLmS0bVu2$WNlpmm-Px7ok`UU!4{q*qw!D46EzW2( zf;((sGA$|#rJ9Khrb>e?INa2nOH(Kd{G-Jyq2!+33#MV#Jb0-2^ufe%z2F+o!{vk_&K`+gr!#JYl(;8D zNVI>-NS`#fA9kvSXB$6UgoH`oPBfEQfi3|v@9~V;4WA78&;`(>^HqD30+Tspg(!2R zCE062&-dLVTd%nDIO<7jQ;|lkb@$bh4Ej*>nmcP+hah8RiD3_Jd3i@u7^B)A72f2W zATdE&W_AF7g6wFW6;Pg98puk4p>ugt9uMdilQWk}=LRfTSz|;a6t&@K`l#l5b=#}| zX(~F!T`Gh`8&<$_ho(loPPgbmng*?L6eTW&2~1gOd}_ZY_)*IrLs(29-rE;B1kG)& z<=O9aX+BpA{++r`kLE1D#*Ib$NyYcdykv+9Ypb2nD1w7)m?J=3EtsaD#8IJ)jfO}P z?QA2&;Ci}BX{2>s1z6q4+79mSTD(AUcbDRB#f!Tain|wgm*Vd3?(SB+xE3k)v%7b9 zyL@;G-A3+XNcs z`|lAGj)bgTriwGcLOe~grAATB-qzFPJMbUb`jWs(sLQBnlXlO)-%N&Gvenuz;^P!p zWj9shVJGQP2{1r@9Fu}S_9X>0rP4TR&@q1ucyxR+8nr!FSk3l}8v8=lM`wS>+y!+u z@hJ^`fq(Zg^vzvRhvtLXa_3~#>C&1Zw7pa0$WL>s>RUo;Q=tI6{fP4;++DO0ODhWL z7ys4)y~a_SiKXxX&i=h3I+WV(gw>0t{#0kWuKN=|y_O@@ie<)g@VUEwk!C$&Y=%Zw zLVo{&N8vAN<&m?vCIB0aBrM~p)Drg%qxEGxhWo&R^_J{$akt<1O~1F>gPDesAC5^3 zUOEqORqQ`~^2Oo)%!3@A>(l*F7oi|n@R&0YxjLWB8H$+Wxp01W{DV4T_qUv|<$Dkv z2fxid#t6{(tAcI30)sbG+52oxVxd_j0>MLwZ|tTEt6d{>t4 z2d5NoiGeT^BjXbCIb?b2i*+^%+0^z~iP}h=s;i7yNmRVn3P*GCAyXpQ5yK{$s0L0} zBZ5sXh%$Krb!VL68Az&O?s|NCd0sE*#?eYd53lDPp+DHr9LY=4Md%JEvoFe;8P@=I zHpJlUEIb|EDOkBH3pbBZ-8?ptJVxRoSc1@=`N5#+G^84|c6z|6Sp|5?)_EY&wvt~A z@=sqGNo#kUtesU%lOCC_zS7FEwE?J^qRo>N^CwJ3oR}&FH1?(diUl2>W2Bgn?##3x zk1A(sgm1EV8TyCsg)%R~`3r7Ye2CTUFf10PQ;4ue{f*wOW>>xmmSi5ln8ZQidCH<+ zY%ogvDwc+l39WEi7`=lS(lhfFyK!WGi%?OM5Gl>iuU8x@?ztnnf!oQ70d-;+ZBQVoyPCIF<;4olGTR_Nx{Zhl#RN;f_*ThFDh&el9BYqAx{! zik?4wiVYk!Pm?c9Y>dVBt=KY_UdV_ZDGn{!7ZCZ40sd9jt$jMel8qdXO;ay1M%9bW zo!2Rna);L?^eCvrWOS*X{+f*Y#h)0@nNwVY7`onNkn$#&8IQ!54Ey2?_;y_}B6Eyh zfEmOCr)@nF58wCffdZ8UQ%K%+JZA@5 zTnheDd3J|15B|~J$W-fwGBVra^UX>&_YLN@fbonfSgWO>o1%N&m7(UY0~_Z=gm$kr z%XyGy+IqsIjQRqHP=emFL8Y=i?;{B`7bxF7R^uL5)%tfqq<&W$XyA9YtAXHHXOfEK>#1Qj6jNy2=Tx=KLHOQis$yc8q-%+w8hJ@2x?JD2JTqz`N1+KJy#&0=bt%(0}oyKmNYCT@chk712oFIYjL4 zLuztf_RRkIrf0}tQ25jB$vs-SctnhMu6X22{&fFz`{{<^nsJ4=%2mu8GWP|IOmy?l zQai2MY6o*?Y!UrQ^p#y!jtj|W#1WLNgNKy4H?${{_;2uYhC(;QN>ScP7+oV#f3170 zM^~*>bU(E0Sa-L=ut|kYXN6vT)BeL>-wsDyWa7CnXz#SvNAE1S9kf|Cx<#sDzR_)p zokT@jp_0Ky;c`1Th(1*4=QEwG{-uYFbdfqCIX{BVM1;-XU3r-Wmw@rWCVmzO07!uW z0NVf4mAg2-J|9RX^0hDL_3QPjbpL=@7ZN3)jjLJ+)eGXId|G10MP~gJz`I2Da8wmr zON>>^K9QQtZnN%kJBc@z!6340IRtkR!SC*Q<+_jhRbTH=`I3uhd6DBMqfc5MA)eGa z^1T~XOF3FU@4GU=M)?sqL`V|-C{|=0WDi$GKahaXZVlex_BrMe4`H#2!sc62sj4+= zqs$r}7}vTm75NNo1VSm<#aNymG-*l`MrCsT7c)lqR3Uft0EXdEhn>s3v8#TmNWm4? zeNFz9sN4bF@q;^NgWUWgF_e@#IfK4i&c5V8(tM2DZ$$`$T%rgMTnqUJ!(#A`y&H67 zb||GJKf07Yi)d{1J(GXE}Y|K&9sL57AOY3r+#q$ZrGD@txBWf+o!g@f6-Rp6y~wg1A3-UC<8T&93}can>&c>rNhnsS1F)o=#*dL_?Nukz@2L*s?2mpY4Ev1>Y zgQLEsC7r#Y@t3$2>sbcmzzV@Fg1{39D5@Y{ftC_0Ni#E*B3p$z+Y=dzkhxyO`k6J_ ztu>st2V6_Oy)rvJk5^s>ku^L^aS%LN(^{e1Q;SIAZ>LHUM^dlgvIw#x#b2K%O9DNA zRM(O5Q_-l)g)b9olPpP^C;n^3I&2SH#w1j(YE7p-(Yswzdf0i>xB47#m9^b|D4ZZP z6AA;NYJt$+WrkJ};&rHDvUT5t@Kn)thQQ?%QdLEp7c!uneP2pZ%EyW0VQmfM7bV>} z3_w+(wSbrytj-vb?0L3wLrBV>ml1|*vsW3_ADg~O#8G{fZeqz~VrdB})5Bpw@d$nw zeV&9ft7mWgy{E43s*sQyHNxV%K|O{Tn&cwl169W{x^Fx*%z{c+ebS<@?8>ZevK~&c zz9b%jHs6Kfq4B|4(Meqcrc;y9ZjV(2EZ$BVEgjROU4%$=JZoGXo1?8L@q+NJEJna{ zQmOM*`-4dzV?eL={ma5UnrK1RXAKN!#u90nS+VZ&W1Tn1foP}M?lo`UDPcW{3Fo;C z%_abEDx>0g<7?7FMsXLHRUF<3m#Y&qD~c{0>)2hH4j8s*o@qXJVkj#wmE*~j8>a78 zj(<+$Mr{UnqZ7MOv0}h^mD7l%?wsy%9qKGyQ4sY1z_GS+GY?PgnYaUs!N7GTNkR1U zE>zB^B(5x`F08Oh^Pm_@Aax%RT{&Q!Y4nCGXNbp3YPHbUWkI4!=x!cpBEj5R6@>hm z0mq&mNZb(<=+nsXef zK)hyS&22q4QOo@-#re?de1l!V+KxZPDubgD z%QTYYG_|`|#j?X-msOM$L90Lt2 zU5gvtitHW10Z6X_$1aREpp!AMoocK=6DBbD^PS3-5b)?DU5s9NwRq2f$rj#au2if$xInSnfhboor@9xs4F%(2>458Tdu5u5z%{WfgZC`#(yZDAs zgN8 z4?5R4;f&Cd@UTx*!l{sD5KLd{r=qmT z+{!w~1>c}LPV=s2o@ z%_iECevnI}Gs%Op^Wfk<3~OG6@B(p)Y01K6nnDypHDV0whh5zUh6H z5oU*!Pw)NJHL>z7P0w*CQ#pOB3EH5YMh}80kkbt$VnuY_sVPPU$dmCdjOCtbqSx#3nQC2#@ z$Nunc&FbbyMX|jal{xP zScEk*rgiJ#k+Fked^bmO0MQaqC?k@a>9Aq&A8dgI&cQI+}%Q3j4x5>V^W&k7K*bSjtz z#@Zs%b*nTY^4cQ()Q8UKqHOhn0T&#EM$;!=4hH!cs!kdKjg=g5N8I%u95sxLXebz6 z;q{^3tnV2WLzRhC-VXdo3C0`g??`IA~yE4MwU+O5scT zaVu3z!CFFo7)(?-gQNP0cEYfMI|~u%6AHdpmsXcud|ya}PsW0>48sls=C9EGmL#@N zs+OV|<-QmDBNJng`g;Q7r%|WHrmYo84`_-~ zS>EH4#ttnTT2w=E#?cVH8w}V<-|5+5-oe`;zSM+G|0rPh^-gJvQgPT^5@#2Amt_~y zD2Yi>B{xNJtuR{|g*EbnP+4}pVueCbAsUNQ3g?&~ri4^pSx)>6t|^x3ty#r)$7YnZ zctY94Nww*b1M%;P-@&e(;SmBc{04$eC~;D;p|DMGoUtpCr1NoR!f*zZ8Q2+*lJ=94 zl5JGfsq3lTF`|cI<0a!M;_;~Im5Yk=i`R?cRIXG;UN3y=D0!5NsW2;T7s1RXl&BP^ z%O5G>DVY>;7X}rZ6xt~BfA!RO3W3z+68$?h)AQ5I&OvLNxwGjtvOjB1Mt zFP}xaiP1>QqBtQjLA~UCi9(6^Q5#$NNkMvkn`n#1gAbzMfaF`Px8f#|;}GflN=r&> z1+WE}GQ3?V+I74$q-_e;Kez4w#P^_oQhu`fS@1&~ULCRq zo(ysYejJ;pkJZkGhk$-yqQn*>a);8I;Rlik# zE(Ih7F@==Oq0DKDqD)ghRX(>gxAef+=vdC!d@^e)FXIB!e(HYeLh43?-UpWtH1&n` zjYbmHJ0J2jPU~B(13qwS9Qm^bOEyr>_lFKWQ4 z++BoRDX+Jx_s}=_h-K2ySKf0P+ZOB5?D6G^7YZS039*FW1A(VQtvx!ID%X0-c-kqy zN8feA0lkU(1oFfp^L9Pj2vx6Hx>D+lxCxd?lY`$?a9D_x?+9HYA6+V5|Jq>Nj-=xc zJMB%^=^yE-HL2Yvg)0@OY^P?YL93agESXdp8q5xpJ%hsE6n3Zh;WFbHEH+9#<%H#Y zOzQSY=?&@Gq?G+dDz#P)-`lT**hBs8%E@MY%+8MHiW%M zUkqPdU#5TpZ*mY5un-?XA5GAQJ6Ct&jtG9P6{DN#r4zyMtR_JW!ARdS-`%bxJ^aD}SI|poXe8F;X+` z7z-KZOeo2C_xg^Sn&Fiw_O!FimlM=()XkXsyg(^6S_1XGwo-G>Y971KE3n%b5bpw2 zAxn80L+h!n=HyCF)Dp`*+bCRREPQmjhJCy0KrD{nRA6@lJdRcuPPFCJ=`}X$^nV7X zI< zt@VcGcy2|r_4bKxsC`8RL`7!Kc+TiS;-Ti2zdWS);4b08O1n(f%I;(UY#QtdiWISa zp=oxGV47E1F>?OhkvQVOoA&4QGiO=^HUyO~Y5iNIwj!T*4sKyKZV3^%mOq8Nm2N`K zy!k|6LO^dWlyaFOma3HUp!rd=S#FeXYW{HD^-+A~4N@8lkH%-oE9D`xXltIwMMm+3NBr% zL&rm&=hzv!ftIwEl=3Dmi>6c8wmLWC+XK7|_VKmrw$B%sFY|L5oV;soSFSdP&E!yMZLP<4)v7`C@us^+Rd0;2{<# zHueP^Ea~defSGpXb-YPr@Lo{{09?rdz}pW1?q6Q*0RT8L0KlOh0B|J%0G3URZlBoe zu+~dLL{Qmf`B=-$QET_JXU8sGjRo14gelWHnxX1|ix2PL6A?QR1(NZ?@Da;WLC8XL z%1~-Z#O8C#$fVe(1fU7cbQ8lM_*D0?_~#*mGKP8U8PqO*5XUVe{bHQiv~uh5WM@S@ zgo`qiU{!fGRZ%h(zIVTV`#ICO#dM)uJ6RfXTnDgjNTrA!(xP+5gah=#^@RpCh>pXM zeJ64lZn@wFG&sh)?Jy&1Y|{d^Y4A-pIp7Akkr6Mf{rt+0CmKVNeHc-M0NYNcffx?b zO=P{@5N8=Sm(AJ+;`y-Q{;+5(X5N)m{_c_~v z6NJsS_}Q*;B92m?qKA?T8QsHeU@z?chucEi6pH z9V8ym^LAPYB9A2JNMR+n{+N%FzujQnZt+bIl5Q!^G4UuYgAeR{-sI_MX0;RObR3mF zE*^%eA9y;NR^L*MNPEtjG|~ua;fjPE(1PjI$hHd<$v|(&`%sQUy_S|G+fN%u@Cos> z4BMp=7F$Rp?bH@JurUMzOu(Dmhurg63I&w8MVUMrEJ>rAMXQap*+VXI%MjBW=v2PL ztxmN$yk#}IJu?FZfllwYRp%tZO3u?nJxxhVPCyM>JrKmo!Jqj&5KK;ZcAkRStsLCf zDmxMFQm}wA%eKBs%9+eLV2cfasnIBsjBbFn2IWut3#}ht7?LE+u9txA_q1%mesFL`B;)H3 zLQr0dgO}j?h3#aAB@-8YeDEN)fq`$zM&&5iS(mP!>nu*nr*i5voaNtHkNfj+sJL63 z|NKEhN=JJ>6YD?~DiqTD1=NSxQKI&29eD<(+cz}{FSt2rhq(-%_xvfp$9bXIH|1MY zrs60%IqU!vJ2MNO0vrlCC_{`QAN9Mwy_+*<%!OUdJLSIo-g;hbdUsFKhI6V5+-84$ zZqVjjAvvVRq=>b-`{u|miB^&C$OAD|aw_hi-js(syA}EolNiTSCfqNcfmt|55>-R5 zDSC(SC+zg&<5?f`zwTEIAj2PKSQBNgU${iHEoEng0caE-D&4u-?^cdbpp}hS`K;rrj!usEz z6%EUzEA1ieY@3d}qb3V>Gse&5C1?T8YwMk~vyB$Y3iqXDGVPn(=WY3`jm791l2yd8 zJ=t;C>YLI%%DZC=@bfx+n=~^h-bI^>&pD?p<|gas(Q`u>RLl$so9eYNorAGP_f&bi z&BP1tG!b7NfOV#})9r0-{<49%v20CZj>A@~u|c%m-Ti^JInH-d1v=7Maa{-vnHx^jUPb&&z%u~%9$TgSL#^ZZQ|^)JhanmwzjT)EE=A=1VHz9nuNg@MTpxHkrMR z9AQbc0|6wM;QEmHG7#^_W`d>soExzmmbj&NCX>G{N| zNFNF^3ZMi=V%uLka4#dj`26aDn6^Ds^a}Lk*)A)Ty7Mw4S#9Y{^_UeBL^eFCN;1ed z@aA0oVfxV{ljp)J5#BlvQx~FnB@o{b%rVZw7@r357zk1|K;i8IM`@DVI)tbRT(Zm` zk@E6VW6I^%hogIm<%%Z)$Yhm`jfNc{6Q$O z2OqJB2{L(Q_(Cf)q@#Ax|FuR)cMJOwPjPcYd09)dno*;T^iU%f0;Gt~d1t6P8IfLL z36_bp`CzX{N#Ee{K4xkok%WW+Lmjn7r0>%3GHSl=JJj^Qno}FWGxMkW`)46rjBKp5LhNZ3g+(CCW68I38iQNQM`^@?3;= z6FOBV`>o&jm6;b2f2Ls;tuw5sDC+u7M@!mQW{tqCjkvY*f?@Z*aQgYnj{`duNFo5+8+Z>C1#i!J zna<_MVZfQ^*yh-h5*u~Pl2W1kfLzEm*UiX^Y~2A#Y#d|dJ_;o5Ng!N8s0rjK=$ zQh}o=1>comLbx-1#z8Y_X(r#wN8r)K!CthL8%~Rj3M}dGf3L|C3j~EU&QZ>6@v_XC%s0>{Zd&Czn~%6epgJlv;d)m)zZP9>b&=TK zDwwK@Sw@)QB7#l_F0vB#R+k16oCtWgYAjB3mF%a(8(HK>{~=|DiRC%px#{Jtj<>0$ z7mA7L6Bgt!`&W2?+oWb_2%xkYE`90t=D?9}Rmmc!&ZQGe4{u(iLD8e0);Dpnk*BsD z+!Uv-$vw0;Bb4I5D#$1-=y|9G`*m>E_a-n>qsuJo2$ zMhu4m!#B4J%CF}|llVazV2DATVN}4;nPOn|xahAhs*KKzLxDWhlO|0L_VXFj3R4?m z5|(vb4j)=vszKHxdmU8LL=;GbZ?6&ZQY^)flisTou(R%vLBzye7aHWx7Bq@cHwvu2aeV>gjl?p&Z76yZ<0s2)KQ0Y zoIgp^T1!#MiUG%&tF^5!^L4MohK&PZe5sJ@x|X1xiG{I*8cQoW4&1xU;v%)juCRO$ zS~KvdV~0q7wG;xCjj3%s8@aspz0wlu%n%M_kc5G8$+kvXayMyGDFd53#0_m>bnBM> zQWAIe9v^bL&$QP1zAjgF!e7+FIl;I}lk_Vr02i_U>>=&|6_ zQKBJ$U_bGdr?%UGulI9|Eiy|lrn`&GKF%c!x=A&q+AZ@8@czUX$w`C;bC0z(AgXFVjcYBwxY=)rD+e;6P!=>oLK#fJ9CxHrepL4d7Q zo9nnTxm5A}v=fnNuv#5fEsukpqA?7+?3Qv#tEL&i#*HyO&RRk_gWrG-G7d0ZCp8Mc3&{tQ3`*-5D$RW%OM?wwPcit|SJl*%Vlc&IE$n5#FPE0Zn(~}DGtZb z67FN;Fm=*y_ajy}&jZD_P!OE}bf@+FFfh|r?$=PxYk$;>3xzTDsY4};T?BY-S;I(f zmnp}m@gWH2RnXVW)>5-tY+Wo&6?b|S=IO!q@TbiM6uigZ@L@of?CKuYC&P4k-m*7Q zqv4BeULa0<%f*=fxHATh-(He{$Kg1%mB)z}cZeijw!68HKByM zL&R)cA$v$PKRV7oWMmyp)1gmYK`NzCD^e46Kxv-9oUB0el92J0MMo3s`mRQoEfkQ&?e9gAaX*u>cd;)ir=uY3orkjG0S;AeKm*f) zV7)uoq;kNk`&m2_vCWf#QwT zpK?JwKbm6MXZ*amu$>qLK+y!XEkBU~D2$KlO-<^jAK81lk<>`wEz0qU!!E)gzEzB= zX!F!Dt@&H2oSv(HQ4?$Ykq~bWrpfuyC?x)E_lGhXPy)1$;BFJHRsw#rN|TsL1tMqw z;(HT6%T17X3!B<(nts3!se}2u;ck-jF(uFy)R=)SOwhojkTwJjFN+UUOw6R_tuv{S z)NfBdql@ge-6~tm*w3h-oGphF7)_H#tm_7KBSA6l-oW;vW)MA;Zu^409%>ZcF60{y zS=4)!cNp*cZ|SiuF2U68cL;+asp^MR9QxL_c?TQ$kTc%N+g=}3=Qx>(CznsWKM+hL zOf2++3BSf!dM~M%tYi9-7tgMgp}KX~>D41>)w_DlW}%hsy)@&p5}}pLc)lS6f}a)5 zbFjQON{YBO*&X3OHD`h^uf5%NiaKX4Jf#ELF0H&+NQAs ze~bUp`(D$tr|j{SBb30;Zs;P{>q^=e?MXF*S`3?%VDP-UT=&&pMn0G;>ZTggwGwZ*# zV?u@&=|UMMT_;9nFnv(eohcAA#)9O*aNV63*%hr?XkYudJ6J7=x+?PQWM<we|tT} zGZ(OFwfCnt7Nigu8z0Kq8?}s9VKCecNzOM8WI}+eYDBHMG&I|0V~#s$badGAT|tDL zNF|1CKoX{6(){!#b7EVL0t}EyNG$DW9pjLL}n_&JAckGI3(IaeXW^Q!8hwlxdV|UXx-Ske3>>~HC+(Gn=Rw%u1seZqr-&E z>_rqvEkC|0D|aXPNPHOVj-1>ImIu-(9fn0&6TjHp?{R>}`*1y!ESJeYZb#o#luvwV z+Jhw8^bHZ8SF3%W4Og(_K9kP51GBNT^@EdoB3ZRd*K|Pghw$ex^p!L1I~^mPm6`Rc@a$KzrdG4x!T)W4CHwC=4Zqftm*?MZ{5`|rR}Q(g z>+s(k;;;Y1GWwhTzYhIVZ22pPWZ-{uyh<;BC26)d`5pA%_HRf2TS5f$SFQcl9(cjO z==^?#*7+*;JM^D6HbClM<^OMJjDJ82{R;i7gz#6I83~o&VgIy$(*5nhAMO56q2aI9 zmp|J(iz{@>LG@sDa- z3j2@5>sMI9Z=%1${%M&vcz$308}|Pbg8f?N$3J2Js+K=wVZX8zjEnq^no#gh`v=Sa w(((Mtk{j`#!vDqchpOjS7KElhe0hxir").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
"+""+"
",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
t
",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; -f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() -{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file diff --git a/GreenshotNetworkImportPlugin/Browser-Plugins/Firefox/greenshot/content/overlay.js b/GreenshotNetworkImportPlugin/Browser-Plugins/Firefox/greenshot/content/overlay.js deleted file mode 100644 index e67ce99b1..000000000 --- a/GreenshotNetworkImportPlugin/Browser-Plugins/Firefox/greenshot/content/overlay.js +++ /dev/null @@ -1,181 +0,0 @@ -/// Javscript logic for the Greenshot extension -var greenshotPrefObserver = { - register: function() { - // First we'll need the preference services to look for preferences. - var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); - // For this._branch we ask that the preferences for extensions.myextension. and children - this._branch = prefService.getBranch("extensions.greenshot."); - // Now we queue the interface called nsIPrefBranch2. This interface is described as: - // "nsIPrefBranch2 allows clients to observe changes to pref values." - this._branch.QueryInterface(Components.interfaces.nsIPrefBranch2); - // Finally add the observer. - this._branch.addObserver("", this, false); - }, - unregister: function() { - if (!this._branch) return; - this._branch.removeObserver("", this); - }, - readDestination: function() { - return "http://" + this._branch.getCharPref("host") + ":" + this._branch.getIntPref("port"); - }, - observe: function(aSubject, aTopic, aData) { - if(aTopic != "nsPref:changed") return; - // aSubject is the nsIPrefBranch we're observing (after appropriate QI) - // aData is the name of the pref that's been changed (relative to aSubject) - switch (aData) { - case "host": - this.readDestination(); - break; - case "port": - this.readDestination(); - break; - } - } -} -greenshotPrefObserver.register(); - -function doMenuClick() { - capture(); -} -function doStatusbarClick() { - capture(); -} - -function sendImage(dataUrl, title) { - var destination = greenshotPrefObserver.readDestination(); - try { - // Send the image via a HTTP Request to our localhost - $.ajax({ - cache: false, - type: "POST", - contentType: "image/png;base64", - dataType: "text", - processData: false, - data: dataUrl, - url: destination + '?title=' + escape(encodeUTF8(title)), - success : function (text) { - document.getElementById("statusbar-display").label = "Greenshot: " + text; - }, - error : function () { - alert("Couldn't send image to '" + destination + "' please check if Greenshot is running!"); - } - }); - } catch (exception) { - alert(exception.message); - } -} -/// -/// Capture the current opened window -/// and send it to Greenshot -/// -function capture() { - // Used variables - var width; - var height; - var xOffset; - var yOffset; - var context; - - try { - // Get document width & height - width = $(window.content.document).width(); - height = $(window.content.document).height(); - - // Create canvas - var canvas = window.content.document.createElement('canvas'); - - // change the canvas size to the document size - canvas.setAttribute('width', width); - canvas.setAttribute('height', height); - - // Get the drawing context - context = canvas.getContext("2d"); - - // Set the scroll location to top-left, so we don't have problems with funny banners that move while scrolling - xOffset = window.content.window.scrollX; - yOffset = window.content.window.scrollY; - window.content.window.scrollTo(0,0); - - } catch (exception) { - } - // continue after timeout, so the page is scrolled correctly and has time to move it's items, e.g. for Jira - setTimeout( function(){ - try { - // Draw the window to the context - context.drawWindow(window.content.window, 0, 0, width, height, 'rgb(255,255,255)'); - window.content.window.scrollTo(xOffset,yOffset); - - // Send the canvas - - sendImage(canvas.toDataURL("image/png"), window.content.document.title); - } catch (exception) { - alert(exception.message); - } - }, 300); -} - -function captureImage(imageToCapture) { - try { - var canvas = window.content.document.createElement('canvas'); - - // change the canvas size to the document size - canvas.setAttribute('width', imageToCapture.width); - canvas.setAttribute('height', imageToCapture.height); - - // Get the drawing context - context = canvas.getContext("2d"); - context.drawImage(imageToCapture, 0, 0); - - // Get filename from url - var title - if (imageToCapture.alt) { - title =imageToCapture.alt; - } else { - title = imageToCapture.src.replace(/\?.*/,'').replace(/^.*(\\|\/|\:)/, '').replace(/\.[^.]*/,''); - } - // Send the canvas - sendImage(canvas.toDataURL("image/png"), title); - } catch (exception) { - alert(exception.message); - } -} - -// private method for UTF-8 encoding -function encodeUTF8(string) { - string = string.replace(/\r\n/g,"\n"); - var utftext = ""; - for (var n = 0; n < string.length; n++) { - var c = string.charCodeAt(n); - if (c < 128) { - utftext += String.fromCharCode(c); - } else if((c > 127) && (c < 2048)) { - utftext += String.fromCharCode((c >> 6) | 192); - utftext += String.fromCharCode((c & 63) | 128); - } else { - utftext += String.fromCharCode((c >> 12) | 224); - utftext += String.fromCharCode(((c >> 6) & 63) | 128); - utftext += String.fromCharCode((c & 63) | 128); - } - } - return utftext; -} - -function ShowHideGreenshotMenuItem(event) { - try { - gContextMenu.showItem("greenshot-menu-item", gContextMenu.onImage); - } catch (exception) { - alert(exception.message); - } -} - -function InitializeGreenshotExtension() { - try { - var contextMenu = document.getElementById("contentAreaContextMenu"); - if (contextMenu) { - contextMenu.addEventListener("popupshowing", ShowHideGreenshotMenuItem, false); - } - } catch (exception) { - alert(exception.message); - } -} -window.addEventListener("load", InitializeGreenshotExtension, false); diff --git a/GreenshotNetworkImportPlugin/Browser-Plugins/Firefox/greenshot/content/overlay.xul b/GreenshotNetworkImportPlugin/Browser-Plugins/Firefox/greenshot/content/overlay.xul deleted file mode 100644 index f81c1787b..000000000 --- a/GreenshotNetworkImportPlugin/Browser-Plugins/Firefox/greenshot/content/overlay.xul +++ /dev/null @@ -1,14 +0,0 @@ - - -