From 0eea575a3cc68873de42e46ed2963bde3d046425 Mon Sep 17 00:00:00 2001 From: Panagiotis Kanavos Date: Mon, 22 Aug 2011 18:00:07 +0300 Subject: [PATCH] Added hammock project to debug streaming issues Added latest Castle Activerecord version to target ClientProfile Modified StatusKeeper.cs to overcome SQLite synch issues. Now only a single thread makes changes to the database --- trunk/Libraries/Castle.ActiveRecord.dll | Bin 0 -> 230912 bytes trunk/Libraries/Castle.Components.Validator.dll | Bin 0 -> 66048 bytes trunk/Libraries/Castle.Core.dll | Bin 0 -> 299008 bytes trunk/Libraries/Iesi.Collections.dll | Bin 0 -> 32768 bytes .../Src/Newtonsoft.Json/Newtonsoft.Json.csproj | 5 +- .../Src/Newtonsoft.Json/Properties/AssemblyInfo.cs | 2 +- .../Microsoft.WindowsAPICodePack.Shell.dll | Bin 0 -> 588800 bytes trunk/Libraries/Microsoft.WindowsAPICodePack.dll | Bin 0 -> 115712 bytes trunk/Libraries/NHibernate.ByteCode.Castle.dll | Bin 0 -> 8704 bytes trunk/Libraries/NHibernate.Search.dll | Bin 0 -> 145920 bytes trunk/Libraries/NHibernate.dll | Bin 0 -> 3016192 bytes .../ParallelExtensionsExtras.csproj | 9 + .../Libraries/ParallelExtensionsExtras/pithos.snk | Bin 0 -> 596 bytes trunk/Libraries/log4net.dll | Bin 0 -> 270336 bytes trunk/Pithos.Client.WPF/Pithos.Client.WPF.csproj | 7 + trunk/Pithos.Client.WPF/PreferencesView.xaml | 11 +- trunk/Pithos.Client.WPF/PreferencesViewModel.cs | 98 +- .../Properties/Settings.Designer.cs | 1 + .../Pithos.Client.WPF/Properties/Settings.settings | 1 + trunk/Pithos.Client.WPF/TaskbarViewModel.cs | 13 +- trunk/Pithos.Client.WPF/app.config | 47 +- trunk/Pithos.Client.WPF/pithos.snk | Bin 0 -> 596 bytes trunk/Pithos.Core.Test/MockStatusKeeper.cs | 5 + trunk/Pithos.Core/FileState.cs | 8 +- trunk/Pithos.Core/IStatusKeeper.cs | 6 + trunk/Pithos.Core/InMemStatusChecker.cs | 5 + trunk/Pithos.Core/Pithos.Core.csproj | 46 +- trunk/Pithos.Core/PithosMonitor.cs | 82 +- trunk/Pithos.Core/Signature.cs | 21 + trunk/Pithos.Core/StatusKeeper.cs | 213 + trunk/Pithos.Core/pithos.snk | Bin 0 -> 596 bytes trunk/Pithos.Interfaces/AccountSettings.cs | 16 +- trunk/Pithos.Interfaces/IStatusChecker.cs | 6 +- trunk/Pithos.Network/CloudFilesClient.cs | 160 +- trunk/Pithos.Network/Pithos.Network.csproj | 18 +- trunk/Pithos.Network/pithos.snk | Bin 0 -> 596 bytes trunk/Pithos.ShellExtensions/FileContext.cs | 4 +- trunk/Pithos.ShellExtensions/IoC.cs | 2 +- trunk/Pithos.ShellExtensions/LogCategories.cs | 23 + .../Menus/FileContextMenu.cs | 28 +- .../Overlays/AddedIcodOverlay.cs | 44 + .../Overlays/IconOverlayBase.cs | 62 +- .../Overlays/UnversionedIconOverlay.cs | 43 + .../Pithos.ShellExtensions.csproj | 1 + trunk/Pithos.ShellExtensions/PithosHost.cs | 57 + .../Service References/PithosService/mex2.xsd | 4 +- trunk/Pithos.ShellExtensions/ShellExtLib.cs | 6 +- trunk/Pithos.ShellExtensions/ShellSettings.cs | 3 +- trunk/Pithos.ShellExtensions/ShellStatusChecker.cs | 2 +- trunk/Pithos.sln | 17 - trunk/hammock/.gitignore | 38 + trunk/hammock/.hgignore | 56 + trunk/hammock/LICENSE | 23 + trunk/hammock/README.markdown | 413 + trunk/hammock/clean.bat | 7 + trunk/hammock/hammock.nuspec | 16 + trunk/hammock/lib/Configuration.dll | Bin 0 -> 22528 bytes trunk/hammock/lib/LinqBridge.dll | Bin 0 -> 60928 bytes trunk/hammock/lib/Newtonsoft.Json.Net20.dll | Bin 0 -> 400896 bytes trunk/hammock/lib/Newtonsoft.Json.Net35.dll | Bin 0 -> 320512 bytes trunk/hammock/lib/Newtonsoft.Json.Silverlight.dll | Bin 0 -> 291840 bytes trunk/hammock/lib/Newtonsoft.Json.WindowsPhone.dll | Bin 0 -> 290304 bytes trunk/hammock/lib/Newtonsoft.Json.dll | Bin 0 -> 340480 bytes trunk/hammock/lib/nunit.framework.dll | Bin 0 -> 131072 bytes trunk/hammock/lib/nunit.framework.silverlight.dll | Bin 0 -> 73728 bytes trunk/hammock/pack-nuget.bat | 2 + trunk/hammock/src/Hammock.Compact.sln | 20 + trunk/hammock/src/Hammock.Mono.sln | 75 + trunk/hammock/src/Hammock.WindowsPhone.sln | 26 + trunk/hammock/src/Hammock.sln | 301 + .../hammock/src/mono/Hammock.Mono/AssemblyInfo.cs | 26 + .../src/mono/Hammock.Mono/Hammock.Mono.csproj | 197 + .../hammock/src/mono/Hammock.Mono/Hammock.Mono.sln | 20 + .../Hammock.MonoDroid/Hammock.MonoDroid.csproj | 57 + .../Hammock.MonoTouch/Hammock.MonoTouch.csproj | 322 + trunk/hammock/src/net20/Hammock/Hammock.csproj | 390 + .../src/net20/Hammock/Properties/AssemblyInfo.cs | 37 + trunk/hammock/src/net20/Hammock/key.snk | Bin 0 -> 596 bytes .../hammock/src/net35/BuildWindowsAndRunTests.proj | 29 + .../Hammock.ClientProfile.csproj | 391 + .../Properties/AssemblyInfo.cs | 37 + .../src/net35/Hammock.ClientProfile/key.snk | Bin 0 -> 596 bytes .../src/net35/Hammock.Extras/Hammock.Extras.csproj | 114 + .../Hammock.Extras/Properties/AssemblyInfo.cs | 36 + .../Serialization/JsonConventionResolver.cs | 79 + .../Hammock.Extras/Serialization/JsonSerializer.cs | 97 + .../Hammock.Extras/Serialization/SerializerBase.cs | 188 + .../Hammock.Extras/Serialization/XmlSerializer.cs | 42 + trunk/hammock/src/net35/Hammock.Extras/key.snk | Bin 0 -> 596 bytes .../Caching/IsolatedStorageCache.cs | 18 + .../Compat/DecompressionMethods.cs | 12 + .../Compat/GzipHttpWebResponse.cs | 129 + .../Compat/NameValueCollection.cs | 56 + .../src/net35/Hammock.Silverlight/Compat/Trace.cs | 61 + .../Hammock.Silverlight/Hammock.Silverlight.csproj | 446 + .../Hammock.Silverlight/Properties/AssemblyInfo.cs | 35 + .../hammock/src/net35/Hammock.Silverlight/key.snk | Bin 0 -> 596 bytes .../Attributes/Validation/BooleanToIntegerTests.cs | 37 + .../Attributes/Validation/DateTimeFormatTests.cs | 38 + .../Validation/RequiredAttributeTests.cs | 40 + .../Validation/SpecificationAttributeTests.cs | 41 + .../src/net35/Hammock.Tests/Hammock.Tests.csproj | 157 + .../net35/Hammock.Tests/Helpers/TestExtensions.cs | 62 + .../net35/Hammock.Tests/Helpers/TimeExtensions.cs | 53 + .../net35/Hammock.Tests/OAuth/OAuthToolsTests.cs | 241 + .../Converters/NameValueCollectionConverter.cs | 67 + .../Converters/UnicodeJsonStringConverter.cs | 54 + .../Hammock.Tests/Postmark/PostmarkMessage.cs | 70 + .../Hammock.Tests/Postmark/PostmarkResponse.cs | 8 + .../net35/Hammock.Tests/Postmark/PostmarkStatus.cs | 10 + .../net35/Hammock.Tests/Properties/AssemblyInfo.cs | 36 + .../src/net35/Hammock.Tests/RestClientTests.cs | 264 + .../hammock/src/net35/Hammock.Tests/_failwhale.jpg | Bin 0 -> 97982 bytes trunk/hammock/src/net35/Hammock.Tests/_profile.jpg | Bin 0 -> 4114 bytes trunk/hammock/src/net35/Hammock.Tests/app.config | 11 + .../src/net35/Hammock.Tests/app.config.example | 11 + trunk/hammock/src/net35/Hammock.Tests/key.snk | Bin 0 -> 596 bytes .../net35/Hammock/Attributes/INamedAttribute.cs | 7 + .../Hammock/Attributes/IValidatingAttribute.cs | 9 + .../Attributes/Specialized/EntityAttribute.cs | 21 + .../Attributes/Specialized/HeaderAttribute.cs | 22 + .../Attributes/Specialized/ParameterAttribute.cs | 22 + .../Attributes/Specialized/UserAgentAttribute.cs | 13 + .../Hammock/Attributes/Specialized/_Specialized.cd | 46 + .../Validation/BooleanToIntegerAttribute.cs | 31 + .../Validation/DateTimeFormatAttribute.cs | 40 + .../Attributes/Validation/RequiredAttribute.cs | 22 + .../Validation/SpecificationAttribute.cs | 39 + .../Attributes/Validation/ValidationAttribute.cs | 19 + .../Hammock/Attributes/Validation/_Validation.cd | 40 + .../Authentication/Basic/BasicAuthCredentials.cs | 40 + .../Hammock/Authentication/IWebCredentials.cs | 19 + .../Authentication/OAuth/OAuthCredentials.cs | 214 + .../Authentication/OAuth/OAuthParameterHandling.cs | 35 + .../Authentication/OAuth/OAuthSignatureMethod.cs | 21 + .../Hammock/Authentication/OAuth/OAuthToken.cs | 17 + .../Hammock/Authentication/OAuth/OAuthTools.cs | 315 + .../Hammock/Authentication/OAuth/OAuthType.cs | 23 + .../Hammock/Authentication/OAuth/OAuthWebQuery.cs | 441 + .../Authentication/OAuth/OAuthWebQueryInfo.cs | 63 + .../Hammock/Authentication/OAuth/OAuthWorkflow.cs | 466 + .../net35/Hammock/Authentication/OAuth/_OAuth.cd | 84 + .../Hammock/Authentication/_Authentication.cd | 27 + .../src/net35/Hammock/Caching/AspNetCache.cs | 132 + .../src/net35/Hammock/Caching/CacheFactory.cs | 29 + .../hammock/src/net35/Hammock/Caching/CacheMode.cs | 21 + .../src/net35/Hammock/Caching/CacheOptions.cs | 13 + trunk/hammock/src/net35/Hammock/Caching/ICache.cs | 14 + .../src/net35/Hammock/Caching/IDependencyCache.cs | 32 + .../src/net35/Hammock/Caching/SimpleCache.cs | 68 + .../hammock/src/net35/Hammock/Caching/_Caching.cd | 55 + .../Hammock/Extensions/CollectionExtensions.cs | 112 + .../net35/Hammock/Extensions/FormatExtensions.cs | 18 + .../net35/Hammock/Extensions/OAuthExtensions.cs | 37 + .../net35/Hammock/Extensions/ObjectExtensions.cs | 80 + .../Hammock/Extensions/ReflectionExtensions.cs | 32 + .../Hammock/Extensions/SpecificationExtensions.cs | 41 + .../net35/Hammock/Extensions/StringExtensions.cs | 138 + .../src/net35/Hammock/Extensions/TimeExtensions.cs | 28 + .../src/net35/Hammock/Extensions/WebExtensions.cs | 106 + trunk/hammock/src/net35/Hammock/Hammock.csproj | 254 + trunk/hammock/src/net35/Hammock/IRestClient.cs | 69 + .../src/net35/Hammock/Model/PropertyChangedBase.cs | 32 + trunk/hammock/src/net35/Hammock/Model/_Model.cd | 12 + .../hammock/src/net35/Hammock/Mono/HttpUtility.cs | 1300 +++ .../src/net35/Hammock/Mono/WebHeaderCollection.cs | 625 ++ .../src/net35/Hammock/Properties/AssemblyInfo.cs | 37 + trunk/hammock/src/net35/Hammock/RestBase.cs | 260 + trunk/hammock/src/net35/Hammock/RestCallback.cs | 14 + trunk/hammock/src/net35/Hammock/RestClient.cs | 2748 ++++++ trunk/hammock/src/net35/Hammock/RestRequest.cs | 134 + trunk/hammock/src/net35/Hammock/RestResponse.cs | 312 + .../src/net35/Hammock/Retries/ConnectionClosed.cs | 23 + .../src/net35/Hammock/Retries/IRetryCondition.cs | 14 + .../net35/Hammock/Retries/IRetryCustomCondition.cs | 7 + .../src/net35/Hammock/Retries/NetworkError.cs | 28 + .../src/net35/Hammock/Retries/RetryCondition.cs | 9 + .../net35/Hammock/Retries/RetryCustomCondition.cs | 21 + .../net35/Hammock/Retries/RetryErrorCondition.cs | 15 + .../src/net35/Hammock/Retries/RetryPolicy.cs | 41 + .../net35/Hammock/Retries/RetryResultCondition.cs | 16 + trunk/hammock/src/net35/Hammock/Retries/Timeout.cs | 23 + .../hammock/src/net35/Hammock/Retries/_Retries.cd | 57 + .../Hammock/Serialization/DefaultJsonSerializer.cs | 30 + .../HammockDataContractJsonSerializer.cs | 90 + .../Serialization/HammockDataContractSerializer.cs | 117 + .../Serialization/HammockJavaScriptSerializer.cs | 51 + .../Hammock/Serialization/HammockXmlSerializer.cs | 123 + .../net35/Hammock/Serialization/IDeserializer.cs | 16 + .../src/net35/Hammock/Serialization/ISerializer.cs | 12 + .../src/net35/Hammock/Serialization/JsonParser.cs | 976 ++ .../net35/Hammock/Serialization/Utf8Serializer.cs | 16 + .../Hammock/Specifications/AndSpecification.cs | 14 + .../Specifications/CompositeSpecificationBase.cs | 14 + .../Hammock/Specifications/HammockSpecification.cs | 36 + .../net35/Hammock/Specifications/ISpecification.cs | 15 + .../Hammock/Specifications/NotSpecification.cs | 17 + .../Hammock/Specifications/OrSpecification.cs | 14 + .../src/net35/Hammock/Streaming/StreamOptions.cs | 13 + .../src/net35/Hammock/Tasks/IRateLimitStatus.cs | 21 + .../src/net35/Hammock/Tasks/IRateLimitingRule.cs | 14 + .../src/net35/Hammock/Tasks/ITaskOptions.cs | 20 + .../hammock/src/net35/Hammock/Tasks/ITaskState.cs | 14 + .../hammock/src/net35/Hammock/Tasks/ITimedTask.cs | 23 + .../src/net35/Hammock/Tasks/RateLimitType.cs | 19 + .../src/net35/Hammock/Tasks/RateLimitingRule.cs | 94 + .../hammock/src/net35/Hammock/Tasks/TaskOptions.cs | 46 + trunk/hammock/src/net35/Hammock/Tasks/TaskState.cs | 24 + trunk/hammock/src/net35/Hammock/Tasks/TimedTask.cs | 243 + trunk/hammock/src/net35/Hammock/Tasks/_Tasks.cd | 67 + .../Hammock/Validation/ValidEmailSpecification.cs | 35 + .../Hammock/Validation/ValidationException.cs | 20 + .../src/net35/Hammock/Web/BasicAuthWebQuery.cs | 62 + trunk/hammock/src/net35/Hammock/Web/GetOrDelete.cs | 10 + .../src/net35/Hammock/Web/HttpCookieParameter.cs | 14 + .../src/net35/Hammock/Web/HttpPostParameter.cs | 55 + .../src/net35/Hammock/Web/HttpPostParameterType.cs | 19 + .../hammock/src/net35/Hammock/Web/IWebQueryInfo.cs | 7 + .../src/net35/Hammock/Web/Mocks/IMockable.cs | 7 + .../src/net35/Hammock/Web/Mocks/IWebResponse.cs | 7 + .../net35/Hammock/Web/Mocks/MockHttpWebRequest.cs | 135 + .../net35/Hammock/Web/Mocks/MockHttpWebResponse.cs | 79 + .../Hammock/Web/Mocks/MockWebRequestFactory.cs | 139 + .../hammock/src/net35/Hammock/Web/Mocks/_Mocks.cd | 42 + trunk/hammock/src/net35/Hammock/Web/Pair.cs | 8 + trunk/hammock/src/net35/Hammock/Web/PostOrPut.cs | 8 + trunk/hammock/src/net35/Hammock/Web/Triplet.cs | 9 + trunk/hammock/src/net35/Hammock/Web/WebCallback.cs | 4 + trunk/hammock/src/net35/Hammock/Web/WebEntity.cs | 11 + trunk/hammock/src/net35/Hammock/Web/WebHeader.cs | 18 + .../src/net35/Hammock/Web/WebHeaderCollection.cs | 47 + trunk/hammock/src/net35/Hammock/Web/WebMethod.cs | 12 + trunk/hammock/src/net35/Hammock/Web/WebPair.cs | 14 + .../src/net35/Hammock/Web/WebPairCollection.cs | 205 + .../hammock/src/net35/Hammock/Web/WebParameter.cs | 20 + .../net35/Hammock/Web/WebParameterCollection.cs | 41 + .../src/net35/Hammock/Web/WebQuery.Async.cs | 1366 +++ trunk/hammock/src/net35/Hammock/Web/WebQuery.cs | 1819 ++++ .../src/net35/Hammock/Web/WebQueryAsyncResult.cs | 45 + .../net35/Hammock/Web/WebQueryRequestEventArgs.cs | 14 + .../net35/Hammock/Web/WebQueryResponseEventArgs.cs | 23 + .../src/net35/Hammock/Web/WebQueryResult.cs | 35 + trunk/hammock/src/net35/Hammock/Web/_Web.cd | 1 + trunk/hammock/src/net35/Hammock/_Hammock.cd | 89 + trunk/hammock/src/net35/Hammock/key.snk | Bin 0 -> 596 bytes .../BZip2/Bzip2Tests.cs | 86 + .../Base/InflaterDeflaterTests.cs | 334 + .../GZip/GZipTests.cs | 259 + ...CSharpCode.SharpZipLib.Silverlight.Tests.csproj | 155 + .../Properties/AssemblyInfo.cs | 35 + .../Tar/TarTests.cs | 559 ++ .../TestSupport/RingBuffer.cs | 558 ++ .../TestSupport/Streams.cs | 242 + .../Zip/ZipTests.cs | 3693 +++++++ .../key.snk | Bin 0 -> 596 bytes .../packages.config | 4 + .../BZip2/BZip2.cs | 118 + .../BZip2/BZip2Constants.cs | 192 + .../BZip2/BZip2Exception.cs | 81 + .../BZip2/BZip2InputStream.cs | 1087 ++ .../BZip2/BZip2OutputStream.cs | 1911 ++++ .../Checksums/Adler32.cs | 221 + .../Checksums/CRC32.cs | 218 + .../Checksums/IChecksum.cs | 92 + .../Checksums/StrangeCRC.cs | 200 + .../Compat/Extensions.cs | 19 + .../Core/FileSystemScanner.cs | 558 ++ .../Core/INameTransform.cs | 57 + .../Core/IScanFilter.cs | 52 + .../Core/NameFilter.cs | 267 + .../Core/PathFilter.cs | 335 + .../Core/StreamUtils.cs | 209 + .../Encryption/PkzipClassic.cs | 489 + .../GZip/GZIPConstants.cs | 97 + .../GZip/GZipException.cs | 82 + .../GZip/GzipInputStream.cs | 405 + .../GZip/GzipOutputStream.cs | 248 + .../ICSharpCode.SharpZipLib.Silverlight.csproj | 198 + .../ICSharpCode.SharpZipLib.Silverlight/Main.cs | 36 + .../Properties/AssemblyInfo.cs | 35 + .../Serialization/ISerializable.cs | 13 + .../Serialization/NonSerializedAttribute.cs | 15 + .../Serialization/SerializableAttribute.cs | 15 + .../Serialization/SerializableBase.cs | 102 + .../Serialization/SerializableDateTime.cs | 60 + .../Serialization/SerializableString.cs | 58 + .../Serialization/SerializationInfo.cs | 122 + .../Serialization/XmlFormatter.Deserialize.cs | 86 + .../Serialization/XmlFormatter.Serialize.cs | 79 + .../SharpZipBaseException.cs | 85 + .../Tar/InvalidHeaderException.cs | 98 + .../Tar/TarArchive.cs | 953 ++ .../Tar/TarBuffer.cs | 595 ++ .../Tar/TarEntry.cs | 549 ++ .../Tar/TarException.cs | 85 + .../Tar/TarHeader.cs | 1130 +++ .../Tar/TarInputStream.cs | 722 ++ .../Tar/TarOutputStream.cs | 500 + .../Zip/Compression/Deflater.cs | 555 ++ .../Zip/Compression/DeflaterConstants.cs | 185 + .../Zip/Compression/DeflaterEngine.cs | 769 ++ .../Zip/Compression/DeflaterHuffman.cs | 858 ++ .../Zip/Compression/DeflaterPending.cs | 58 + .../Zip/Compression/Inflater.cs | 856 ++ .../Zip/Compression/InflaterDynHeader.cs | 213 + .../Zip/Compression/InflaterHuffmanTree.cs | 230 + .../Zip/Compression/PendingBuffer.cs | 248 + .../Compression/Streams/DeflaterOutputStream.cs | 500 + .../Zip/Compression/Streams/InflaterInputStream.cs | 715 ++ .../Zip/Compression/Streams/OutputWindow.cs | 258 + .../Zip/Compression/Streams/StreamManipulator.cs | 279 + .../Zip/FastZip.cs | 624 ++ .../Zip/IEntryFactory.cs | 83 + .../Zip/ZipConstants.cs | 577 ++ .../Zip/ZipEntry.cs | 1124 +++ .../Zip/ZipEntryFactory.cs | 384 + .../Zip/ZipException.cs | 85 + .../Zip/ZipExtraData.cs | 978 ++ .../Zip/ZipFile.cs | 4108 ++++++++ .../Zip/ZipHelperStream.cs | 622 ++ .../Zip/ZipInputStream.cs | 701 ++ .../Zip/ZipNameTransform.cs | 250 + .../Zip/ZipOutputStream.cs | 917 ++ .../ICSharpCode.SharpZipLib.Silverlight/key.snk | Bin 0 -> 596 bytes .../Hammock.ClientProfile.csproj | 420 + .../Hammock.ClientProfile/Mono/HttpUtility.cs | 1300 +++ .../Mono/WebHeaderCollection.cs | 625 ++ .../Properties/AssemblyInfo.cs | 37 + .../src/net40/Hammock.ClientProfile/key.snk | Bin 0 -> 596 bytes .../Hammock.Silverlight/Hammock.Silverlight.csproj | 474 + .../Hammock.Silverlight/Properties/AssemblyInfo.cs | 35 + .../hammock/src/net40/Hammock.Silverlight/key.snk | Bin 0 -> 596 bytes .../Hammock.WindowsPhone.csproj | 437 + .../net40/Hammock.WindowsPhone/Mono/HttpUtility.cs | 1271 +++ .../Properties/AssemblyInfo.cs | 35 + .../src/net40/Hammock/GlobalSuppressions.cs | 20 + trunk/hammock/src/net40/Hammock/Hammock.csproj | 424 + .../hammock/src/net40/Hammock/Mono/HttpUtility.cs | 1300 +++ .../src/net40/Hammock/Mono/WebHeaderCollection.cs | 625 ++ .../src/net40/Hammock/Properties/AssemblyInfo.cs | 38 + trunk/hammock/src/net40/Hammock/key.snk | Bin 0 -> 596 bytes .../ICSharpCode.SharpZipLib.Silverlight.csproj | 279 + .../Properties/AssemblyInfo.cs | 35 + .../ICSharpCode.SharpZipLib.Silverlight/key.snk | Bin 0 -> 596 bytes .../ICSharpCode.SharpZipLib.WindowsPhone.csproj | 257 + .../Properties/AssemblyInfo.cs | 35 + .../netCF/Hammock.Compact/Hammock.Compact.csproj | 403 + .../Mono/Security/Cryptography/BlockProcessor.cs | 66 + .../Mono/Security/Cryptography/HMACAlgorithm.cs | 111 + .../Mono/Security/Cryptography/KeyBuilder.cs | 28 + .../Hammock.Compact/Properties/AssemblyInfo.cs | 35 + .../Security/Cryptography/HMACSHA1.cs | 112 + .../Security/Cryptography/KeyedHashAlgorithm.cs | 55 + .../src/packages/NUnit.2.5.10.11092/Logo.ico | Bin 0 -> 1078 bytes .../NUnit.2.5.10.11092/NUnit.2.5.10.11092.nupkg | Bin 0 -> 824211 bytes .../packages/NUnit.2.5.10.11092/NUnitFitTests.html | 277 + .../packages/NUnit.2.5.10.11092/fit-license.txt | 342 + .../NUnit.2.5.10.11092/lib/nunit.framework.dll | Bin 0 -> 139264 bytes .../NUnit.2.5.10.11092/lib/nunit.framework.xml |10407 ++++++++++++++++++++ .../NUnit.2.5.10.11092/lib/nunit.mocks.dll | Bin 0 -> 20480 bytes .../NUnit.2.5.10.11092/lib/pnunit.framework.dll | Bin 0 -> 6656 bytes .../src/packages/NUnit.2.5.10.11092/license.txt | 15 + .../tools/NUnitTests.VisualState.xml | 124 + .../NUnit.2.5.10.11092/tools/NUnitTests.config | 85 + .../NUnit.2.5.10.11092/tools/NUnitTests.nunit | 14 + .../packages/NUnit.2.5.10.11092/tools/agent.conf | 4 + .../NUnit.2.5.10.11092/tools/agent.log.conf | 18 + .../NUnit.2.5.10.11092/tools/launcher.log.conf | 18 + .../NUnit.2.5.10.11092/tools/lib/Failure.png | Bin 0 -> 1445 bytes .../NUnit.2.5.10.11092/tools/lib/Ignored.png | Bin 0 -> 1444 bytes .../NUnit.2.5.10.11092/tools/lib/Inconclusive.png | Bin 0 -> 1436 bytes .../NUnit.2.5.10.11092/tools/lib/Skipped.png | Bin 0 -> 1405 bytes .../NUnit.2.5.10.11092/tools/lib/Success.png | Bin 0 -> 1439 bytes .../packages/NUnit.2.5.10.11092/tools/lib/fit.dll | Bin 0 -> 49152 bytes .../NUnit.2.5.10.11092/tools/lib/log4net.dll | Bin 0 -> 258048 bytes .../tools/lib/nunit-console-runner.dll | Bin 0 -> 36864 bytes .../tools/lib/nunit-gui-runner.dll | Bin 0 -> 188416 bytes .../NUnit.2.5.10.11092/tools/lib/nunit.core.dll | Bin 0 -> 139264 bytes .../tools/lib/nunit.core.interfaces.dll | Bin 0 -> 57344 bytes .../tools/lib/nunit.fixtures.dll | Bin 0 -> 9728 bytes .../tools/lib/nunit.uiexception.dll | Bin 0 -> 90112 bytes .../NUnit.2.5.10.11092/tools/lib/nunit.uikit.dll | Bin 0 -> 258048 bytes .../NUnit.2.5.10.11092/tools/lib/nunit.util.dll | Bin 0 -> 126976 bytes .../tools/nunit-agent-x86.exe.config | 69 + .../tools/nunit-agent.exe.config | 69 + .../tools/nunit-console-x86.exe.config | 69 + .../tools/nunit-console.exe.config | 69 + .../NUnit.2.5.10.11092/tools/nunit-x86.exe.config | 83 + .../NUnit.2.5.10.11092/tools/nunit.exe.config | 83 + .../NUnit.2.5.10.11092/tools/nunit.framework.dll | Bin 0 -> 139264 bytes .../tools/pnunit-agent.exe.config | 77 + .../tools/pnunit-launcher.exe.config | 77 + .../NUnit.2.5.10.11092/tools/pnunit.framework.dll | Bin 0 -> 6656 bytes .../NUnit.2.5.10.11092/tools/pnunit.tests.dll | Bin 0 -> 4608 bytes .../NUnit.2.5.10.11092/tools/runFile.exe.config | 43 + .../NUnit.2.5.10.11092/tools/runpnunit.bat | 2 + .../packages/NUnit.2.5.10.11092/tools/test.conf | 24 + trunk/hammock/src/packages/repositories.config | 4 + 398 files changed, 76441 insertions(+), 299 deletions(-) create mode 100644 trunk/Libraries/Castle.ActiveRecord.dll create mode 100644 trunk/Libraries/Castle.Components.Validator.dll create mode 100644 trunk/Libraries/Castle.Core.dll create mode 100644 trunk/Libraries/Iesi.Collections.dll create mode 100644 trunk/Libraries/Microsoft.WindowsAPICodePack.Shell.dll create mode 100644 trunk/Libraries/Microsoft.WindowsAPICodePack.dll create mode 100644 trunk/Libraries/NHibernate.ByteCode.Castle.dll create mode 100644 trunk/Libraries/NHibernate.Search.dll create mode 100644 trunk/Libraries/NHibernate.dll create mode 100644 trunk/Libraries/ParallelExtensionsExtras/pithos.snk create mode 100644 trunk/Libraries/log4net.dll create mode 100644 trunk/Pithos.Client.WPF/pithos.snk create mode 100644 trunk/Pithos.Core/Signature.cs create mode 100644 trunk/Pithos.Core/StatusKeeper.cs create mode 100644 trunk/Pithos.Core/pithos.snk create mode 100644 trunk/Pithos.Network/pithos.snk create mode 100644 trunk/Pithos.ShellExtensions/LogCategories.cs create mode 100644 trunk/Pithos.ShellExtensions/Overlays/AddedIcodOverlay.cs create mode 100644 trunk/Pithos.ShellExtensions/Overlays/UnversionedIconOverlay.cs create mode 100644 trunk/Pithos.ShellExtensions/PithosHost.cs create mode 100644 trunk/hammock/.gitignore create mode 100644 trunk/hammock/.hgignore create mode 100644 trunk/hammock/LICENSE create mode 100644 trunk/hammock/README.markdown create mode 100644 trunk/hammock/clean.bat create mode 100644 trunk/hammock/hammock.nuspec create mode 100644 trunk/hammock/lib/Configuration.dll create mode 100644 trunk/hammock/lib/LinqBridge.dll create mode 100644 trunk/hammock/lib/Newtonsoft.Json.Net20.dll create mode 100644 trunk/hammock/lib/Newtonsoft.Json.Net35.dll create mode 100644 trunk/hammock/lib/Newtonsoft.Json.Silverlight.dll create mode 100644 trunk/hammock/lib/Newtonsoft.Json.WindowsPhone.dll create mode 100644 trunk/hammock/lib/Newtonsoft.Json.dll create mode 100644 trunk/hammock/lib/nunit.framework.dll create mode 100644 trunk/hammock/lib/nunit.framework.silverlight.dll create mode 100644 trunk/hammock/pack-nuget.bat create mode 100644 trunk/hammock/src/Hammock.Compact.sln create mode 100644 trunk/hammock/src/Hammock.Mono.sln create mode 100644 trunk/hammock/src/Hammock.WindowsPhone.sln create mode 100644 trunk/hammock/src/Hammock.sln create mode 100644 trunk/hammock/src/mono/Hammock.Mono/AssemblyInfo.cs create mode 100644 trunk/hammock/src/mono/Hammock.Mono/Hammock.Mono.csproj create mode 100644 trunk/hammock/src/mono/Hammock.Mono/Hammock.Mono.sln create mode 100644 trunk/hammock/src/mono/Hammock.MonoDroid/Hammock.MonoDroid.csproj create mode 100644 trunk/hammock/src/mono/Hammock.MonoTouch/Hammock.MonoTouch.csproj create mode 100644 trunk/hammock/src/net20/Hammock/Hammock.csproj create mode 100644 trunk/hammock/src/net20/Hammock/Properties/AssemblyInfo.cs create mode 100644 trunk/hammock/src/net20/Hammock/key.snk create mode 100644 trunk/hammock/src/net35/BuildWindowsAndRunTests.proj create mode 100644 trunk/hammock/src/net35/Hammock.ClientProfile/Hammock.ClientProfile.csproj create mode 100644 trunk/hammock/src/net35/Hammock.ClientProfile/Properties/AssemblyInfo.cs create mode 100644 trunk/hammock/src/net35/Hammock.ClientProfile/key.snk create mode 100644 trunk/hammock/src/net35/Hammock.Extras/Hammock.Extras.csproj create mode 100644 trunk/hammock/src/net35/Hammock.Extras/Properties/AssemblyInfo.cs create mode 100644 trunk/hammock/src/net35/Hammock.Extras/Serialization/JsonConventionResolver.cs create mode 100644 trunk/hammock/src/net35/Hammock.Extras/Serialization/JsonSerializer.cs create mode 100644 trunk/hammock/src/net35/Hammock.Extras/Serialization/SerializerBase.cs create mode 100644 trunk/hammock/src/net35/Hammock.Extras/Serialization/XmlSerializer.cs create mode 100644 trunk/hammock/src/net35/Hammock.Extras/key.snk create mode 100644 trunk/hammock/src/net35/Hammock.Silverlight/Caching/IsolatedStorageCache.cs create mode 100644 trunk/hammock/src/net35/Hammock.Silverlight/Compat/DecompressionMethods.cs create mode 100644 trunk/hammock/src/net35/Hammock.Silverlight/Compat/GzipHttpWebResponse.cs create mode 100644 trunk/hammock/src/net35/Hammock.Silverlight/Compat/NameValueCollection.cs create mode 100644 trunk/hammock/src/net35/Hammock.Silverlight/Compat/Trace.cs create mode 100644 trunk/hammock/src/net35/Hammock.Silverlight/Hammock.Silverlight.csproj create mode 100644 trunk/hammock/src/net35/Hammock.Silverlight/Properties/AssemblyInfo.cs create mode 100644 trunk/hammock/src/net35/Hammock.Silverlight/key.snk create mode 100644 trunk/hammock/src/net35/Hammock.Tests/Attributes/Validation/BooleanToIntegerTests.cs create mode 100644 trunk/hammock/src/net35/Hammock.Tests/Attributes/Validation/DateTimeFormatTests.cs create mode 100644 trunk/hammock/src/net35/Hammock.Tests/Attributes/Validation/RequiredAttributeTests.cs create mode 100644 trunk/hammock/src/net35/Hammock.Tests/Attributes/Validation/SpecificationAttributeTests.cs create mode 100644 trunk/hammock/src/net35/Hammock.Tests/Hammock.Tests.csproj create mode 100644 trunk/hammock/src/net35/Hammock.Tests/Helpers/TestExtensions.cs create mode 100644 trunk/hammock/src/net35/Hammock.Tests/Helpers/TimeExtensions.cs create mode 100644 trunk/hammock/src/net35/Hammock.Tests/OAuth/OAuthToolsTests.cs create mode 100644 trunk/hammock/src/net35/Hammock.Tests/Postmark/Converters/NameValueCollectionConverter.cs create mode 100644 trunk/hammock/src/net35/Hammock.Tests/Postmark/Converters/UnicodeJsonStringConverter.cs create mode 100644 trunk/hammock/src/net35/Hammock.Tests/Postmark/PostmarkMessage.cs create mode 100644 trunk/hammock/src/net35/Hammock.Tests/Postmark/PostmarkResponse.cs create mode 100644 trunk/hammock/src/net35/Hammock.Tests/Postmark/PostmarkStatus.cs create mode 100644 trunk/hammock/src/net35/Hammock.Tests/Properties/AssemblyInfo.cs create mode 100644 trunk/hammock/src/net35/Hammock.Tests/RestClientTests.cs create mode 100644 trunk/hammock/src/net35/Hammock.Tests/_failwhale.jpg create mode 100644 trunk/hammock/src/net35/Hammock.Tests/_profile.jpg create mode 100644 trunk/hammock/src/net35/Hammock.Tests/app.config create mode 100644 trunk/hammock/src/net35/Hammock.Tests/app.config.example create mode 100644 trunk/hammock/src/net35/Hammock.Tests/key.snk create mode 100644 trunk/hammock/src/net35/Hammock/Attributes/INamedAttribute.cs create mode 100644 trunk/hammock/src/net35/Hammock/Attributes/IValidatingAttribute.cs create mode 100644 trunk/hammock/src/net35/Hammock/Attributes/Specialized/EntityAttribute.cs create mode 100644 trunk/hammock/src/net35/Hammock/Attributes/Specialized/HeaderAttribute.cs create mode 100644 trunk/hammock/src/net35/Hammock/Attributes/Specialized/ParameterAttribute.cs create mode 100644 trunk/hammock/src/net35/Hammock/Attributes/Specialized/UserAgentAttribute.cs create mode 100644 trunk/hammock/src/net35/Hammock/Attributes/Specialized/_Specialized.cd create mode 100644 trunk/hammock/src/net35/Hammock/Attributes/Validation/BooleanToIntegerAttribute.cs create mode 100644 trunk/hammock/src/net35/Hammock/Attributes/Validation/DateTimeFormatAttribute.cs create mode 100644 trunk/hammock/src/net35/Hammock/Attributes/Validation/RequiredAttribute.cs create mode 100644 trunk/hammock/src/net35/Hammock/Attributes/Validation/SpecificationAttribute.cs create mode 100644 trunk/hammock/src/net35/Hammock/Attributes/Validation/ValidationAttribute.cs create mode 100644 trunk/hammock/src/net35/Hammock/Attributes/Validation/_Validation.cd create mode 100644 trunk/hammock/src/net35/Hammock/Authentication/Basic/BasicAuthCredentials.cs create mode 100644 trunk/hammock/src/net35/Hammock/Authentication/IWebCredentials.cs create mode 100644 trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthCredentials.cs create mode 100644 trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthParameterHandling.cs create mode 100644 trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthSignatureMethod.cs create mode 100644 trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthToken.cs create mode 100644 trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthTools.cs create mode 100644 trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthType.cs create mode 100644 trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthWebQuery.cs create mode 100644 trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthWebQueryInfo.cs create mode 100644 trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthWorkflow.cs create mode 100644 trunk/hammock/src/net35/Hammock/Authentication/OAuth/_OAuth.cd create mode 100644 trunk/hammock/src/net35/Hammock/Authentication/_Authentication.cd create mode 100644 trunk/hammock/src/net35/Hammock/Caching/AspNetCache.cs create mode 100644 trunk/hammock/src/net35/Hammock/Caching/CacheFactory.cs create mode 100644 trunk/hammock/src/net35/Hammock/Caching/CacheMode.cs create mode 100644 trunk/hammock/src/net35/Hammock/Caching/CacheOptions.cs create mode 100644 trunk/hammock/src/net35/Hammock/Caching/ICache.cs create mode 100644 trunk/hammock/src/net35/Hammock/Caching/IDependencyCache.cs create mode 100644 trunk/hammock/src/net35/Hammock/Caching/SimpleCache.cs create mode 100644 trunk/hammock/src/net35/Hammock/Caching/_Caching.cd create mode 100644 trunk/hammock/src/net35/Hammock/Extensions/CollectionExtensions.cs create mode 100644 trunk/hammock/src/net35/Hammock/Extensions/FormatExtensions.cs create mode 100644 trunk/hammock/src/net35/Hammock/Extensions/OAuthExtensions.cs create mode 100644 trunk/hammock/src/net35/Hammock/Extensions/ObjectExtensions.cs create mode 100644 trunk/hammock/src/net35/Hammock/Extensions/ReflectionExtensions.cs create mode 100644 trunk/hammock/src/net35/Hammock/Extensions/SpecificationExtensions.cs create mode 100644 trunk/hammock/src/net35/Hammock/Extensions/StringExtensions.cs create mode 100644 trunk/hammock/src/net35/Hammock/Extensions/TimeExtensions.cs create mode 100644 trunk/hammock/src/net35/Hammock/Extensions/WebExtensions.cs create mode 100644 trunk/hammock/src/net35/Hammock/Hammock.csproj create mode 100644 trunk/hammock/src/net35/Hammock/IRestClient.cs create mode 100644 trunk/hammock/src/net35/Hammock/Model/PropertyChangedBase.cs create mode 100644 trunk/hammock/src/net35/Hammock/Model/_Model.cd create mode 100644 trunk/hammock/src/net35/Hammock/Mono/HttpUtility.cs create mode 100644 trunk/hammock/src/net35/Hammock/Mono/WebHeaderCollection.cs create mode 100644 trunk/hammock/src/net35/Hammock/Properties/AssemblyInfo.cs create mode 100644 trunk/hammock/src/net35/Hammock/RestBase.cs create mode 100644 trunk/hammock/src/net35/Hammock/RestCallback.cs create mode 100644 trunk/hammock/src/net35/Hammock/RestClient.cs create mode 100644 trunk/hammock/src/net35/Hammock/RestRequest.cs create mode 100644 trunk/hammock/src/net35/Hammock/RestResponse.cs create mode 100644 trunk/hammock/src/net35/Hammock/Retries/ConnectionClosed.cs create mode 100644 trunk/hammock/src/net35/Hammock/Retries/IRetryCondition.cs create mode 100644 trunk/hammock/src/net35/Hammock/Retries/IRetryCustomCondition.cs create mode 100644 trunk/hammock/src/net35/Hammock/Retries/NetworkError.cs create mode 100644 trunk/hammock/src/net35/Hammock/Retries/RetryCondition.cs create mode 100644 trunk/hammock/src/net35/Hammock/Retries/RetryCustomCondition.cs create mode 100644 trunk/hammock/src/net35/Hammock/Retries/RetryErrorCondition.cs create mode 100644 trunk/hammock/src/net35/Hammock/Retries/RetryPolicy.cs create mode 100644 trunk/hammock/src/net35/Hammock/Retries/RetryResultCondition.cs create mode 100644 trunk/hammock/src/net35/Hammock/Retries/Timeout.cs create mode 100644 trunk/hammock/src/net35/Hammock/Retries/_Retries.cd create mode 100644 trunk/hammock/src/net35/Hammock/Serialization/DefaultJsonSerializer.cs create mode 100644 trunk/hammock/src/net35/Hammock/Serialization/HammockDataContractJsonSerializer.cs create mode 100644 trunk/hammock/src/net35/Hammock/Serialization/HammockDataContractSerializer.cs create mode 100644 trunk/hammock/src/net35/Hammock/Serialization/HammockJavaScriptSerializer.cs create mode 100644 trunk/hammock/src/net35/Hammock/Serialization/HammockXmlSerializer.cs create mode 100644 trunk/hammock/src/net35/Hammock/Serialization/IDeserializer.cs create mode 100644 trunk/hammock/src/net35/Hammock/Serialization/ISerializer.cs create mode 100644 trunk/hammock/src/net35/Hammock/Serialization/JsonParser.cs create mode 100644 trunk/hammock/src/net35/Hammock/Serialization/Utf8Serializer.cs create mode 100644 trunk/hammock/src/net35/Hammock/Specifications/AndSpecification.cs create mode 100644 trunk/hammock/src/net35/Hammock/Specifications/CompositeSpecificationBase.cs create mode 100644 trunk/hammock/src/net35/Hammock/Specifications/HammockSpecification.cs create mode 100644 trunk/hammock/src/net35/Hammock/Specifications/ISpecification.cs create mode 100644 trunk/hammock/src/net35/Hammock/Specifications/NotSpecification.cs create mode 100644 trunk/hammock/src/net35/Hammock/Specifications/OrSpecification.cs create mode 100644 trunk/hammock/src/net35/Hammock/Streaming/StreamOptions.cs create mode 100644 trunk/hammock/src/net35/Hammock/Tasks/IRateLimitStatus.cs create mode 100644 trunk/hammock/src/net35/Hammock/Tasks/IRateLimitingRule.cs create mode 100644 trunk/hammock/src/net35/Hammock/Tasks/ITaskOptions.cs create mode 100644 trunk/hammock/src/net35/Hammock/Tasks/ITaskState.cs create mode 100644 trunk/hammock/src/net35/Hammock/Tasks/ITimedTask.cs create mode 100644 trunk/hammock/src/net35/Hammock/Tasks/RateLimitType.cs create mode 100644 trunk/hammock/src/net35/Hammock/Tasks/RateLimitingRule.cs create mode 100644 trunk/hammock/src/net35/Hammock/Tasks/TaskOptions.cs create mode 100644 trunk/hammock/src/net35/Hammock/Tasks/TaskState.cs create mode 100644 trunk/hammock/src/net35/Hammock/Tasks/TimedTask.cs create mode 100644 trunk/hammock/src/net35/Hammock/Tasks/_Tasks.cd create mode 100644 trunk/hammock/src/net35/Hammock/Validation/ValidEmailSpecification.cs create mode 100644 trunk/hammock/src/net35/Hammock/Validation/ValidationException.cs create mode 100644 trunk/hammock/src/net35/Hammock/Web/BasicAuthWebQuery.cs create mode 100644 trunk/hammock/src/net35/Hammock/Web/GetOrDelete.cs create mode 100644 trunk/hammock/src/net35/Hammock/Web/HttpCookieParameter.cs create mode 100644 trunk/hammock/src/net35/Hammock/Web/HttpPostParameter.cs create mode 100644 trunk/hammock/src/net35/Hammock/Web/HttpPostParameterType.cs create mode 100644 trunk/hammock/src/net35/Hammock/Web/IWebQueryInfo.cs create mode 100644 trunk/hammock/src/net35/Hammock/Web/Mocks/IMockable.cs create mode 100644 trunk/hammock/src/net35/Hammock/Web/Mocks/IWebResponse.cs create mode 100644 trunk/hammock/src/net35/Hammock/Web/Mocks/MockHttpWebRequest.cs create mode 100644 trunk/hammock/src/net35/Hammock/Web/Mocks/MockHttpWebResponse.cs create mode 100644 trunk/hammock/src/net35/Hammock/Web/Mocks/MockWebRequestFactory.cs create mode 100644 trunk/hammock/src/net35/Hammock/Web/Mocks/_Mocks.cd create mode 100644 trunk/hammock/src/net35/Hammock/Web/Pair.cs create mode 100644 trunk/hammock/src/net35/Hammock/Web/PostOrPut.cs create mode 100644 trunk/hammock/src/net35/Hammock/Web/Triplet.cs create mode 100644 trunk/hammock/src/net35/Hammock/Web/WebCallback.cs create mode 100644 trunk/hammock/src/net35/Hammock/Web/WebEntity.cs create mode 100644 trunk/hammock/src/net35/Hammock/Web/WebHeader.cs create mode 100644 trunk/hammock/src/net35/Hammock/Web/WebHeaderCollection.cs create mode 100644 trunk/hammock/src/net35/Hammock/Web/WebMethod.cs create mode 100644 trunk/hammock/src/net35/Hammock/Web/WebPair.cs create mode 100644 trunk/hammock/src/net35/Hammock/Web/WebPairCollection.cs create mode 100644 trunk/hammock/src/net35/Hammock/Web/WebParameter.cs create mode 100644 trunk/hammock/src/net35/Hammock/Web/WebParameterCollection.cs create mode 100644 trunk/hammock/src/net35/Hammock/Web/WebQuery.Async.cs create mode 100644 trunk/hammock/src/net35/Hammock/Web/WebQuery.cs create mode 100644 trunk/hammock/src/net35/Hammock/Web/WebQueryAsyncResult.cs create mode 100644 trunk/hammock/src/net35/Hammock/Web/WebQueryRequestEventArgs.cs create mode 100644 trunk/hammock/src/net35/Hammock/Web/WebQueryResponseEventArgs.cs create mode 100644 trunk/hammock/src/net35/Hammock/Web/WebQueryResult.cs create mode 100644 trunk/hammock/src/net35/Hammock/Web/_Web.cd create mode 100644 trunk/hammock/src/net35/Hammock/_Hammock.cd create mode 100644 trunk/hammock/src/net35/Hammock/key.snk create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/BZip2/Bzip2Tests.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/Base/InflaterDeflaterTests.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/GZip/GZipTests.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/ICSharpCode.SharpZipLib.Silverlight.Tests.csproj create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/Properties/AssemblyInfo.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/Tar/TarTests.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/TestSupport/RingBuffer.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/TestSupport/Streams.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/Zip/ZipTests.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/key.snk create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/packages.config create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/BZip2/BZip2.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/BZip2/BZip2Constants.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/BZip2/BZip2Exception.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/BZip2/BZip2InputStream.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/BZip2/BZip2OutputStream.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Checksums/Adler32.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Checksums/CRC32.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Checksums/IChecksum.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Checksums/StrangeCRC.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Compat/Extensions.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Core/FileSystemScanner.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Core/INameTransform.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Core/IScanFilter.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Core/NameFilter.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Core/PathFilter.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Core/StreamUtils.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Encryption/PkzipClassic.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/GZip/GZIPConstants.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/GZip/GZipException.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/GZip/GzipInputStream.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/GZip/GzipOutputStream.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/ICSharpCode.SharpZipLib.Silverlight.csproj create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Main.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Properties/AssemblyInfo.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/ISerializable.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/NonSerializedAttribute.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/SerializableAttribute.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/SerializableBase.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/SerializableDateTime.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/SerializableString.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/SerializationInfo.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/XmlFormatter.Deserialize.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/XmlFormatter.Serialize.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/SharpZipBaseException.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Tar/InvalidHeaderException.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Tar/TarArchive.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Tar/TarBuffer.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Tar/TarEntry.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Tar/TarException.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Tar/TarHeader.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Tar/TarInputStream.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Tar/TarOutputStream.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/Deflater.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/DeflaterConstants.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/DeflaterEngine.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/DeflaterHuffman.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/DeflaterPending.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/Inflater.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/InflaterDynHeader.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/InflaterHuffmanTree.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/PendingBuffer.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/Streams/DeflaterOutputStream.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/Streams/InflaterInputStream.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/Streams/OutputWindow.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/Streams/StreamManipulator.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/FastZip.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/IEntryFactory.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipConstants.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipEntry.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipEntryFactory.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipException.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipExtraData.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipFile.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipHelperStream.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipInputStream.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipNameTransform.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipOutputStream.cs create mode 100644 trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/key.snk create mode 100644 trunk/hammock/src/net40/Hammock.ClientProfile/Hammock.ClientProfile.csproj create mode 100644 trunk/hammock/src/net40/Hammock.ClientProfile/Mono/HttpUtility.cs create mode 100644 trunk/hammock/src/net40/Hammock.ClientProfile/Mono/WebHeaderCollection.cs create mode 100644 trunk/hammock/src/net40/Hammock.ClientProfile/Properties/AssemblyInfo.cs create mode 100644 trunk/hammock/src/net40/Hammock.ClientProfile/key.snk create mode 100644 trunk/hammock/src/net40/Hammock.Silverlight/Hammock.Silverlight.csproj create mode 100644 trunk/hammock/src/net40/Hammock.Silverlight/Properties/AssemblyInfo.cs create mode 100644 trunk/hammock/src/net40/Hammock.Silverlight/key.snk create mode 100644 trunk/hammock/src/net40/Hammock.WindowsPhone/Hammock.WindowsPhone.csproj create mode 100644 trunk/hammock/src/net40/Hammock.WindowsPhone/Mono/HttpUtility.cs create mode 100644 trunk/hammock/src/net40/Hammock.WindowsPhone/Properties/AssemblyInfo.cs create mode 100644 trunk/hammock/src/net40/Hammock/GlobalSuppressions.cs create mode 100644 trunk/hammock/src/net40/Hammock/Hammock.csproj create mode 100644 trunk/hammock/src/net40/Hammock/Mono/HttpUtility.cs create mode 100644 trunk/hammock/src/net40/Hammock/Mono/WebHeaderCollection.cs create mode 100644 trunk/hammock/src/net40/Hammock/Properties/AssemblyInfo.cs create mode 100644 trunk/hammock/src/net40/Hammock/key.snk create mode 100644 trunk/hammock/src/net40/ICSharpCode.SharpZipLib.Silverlight/ICSharpCode.SharpZipLib.Silverlight.csproj create mode 100644 trunk/hammock/src/net40/ICSharpCode.SharpZipLib.Silverlight/Properties/AssemblyInfo.cs create mode 100644 trunk/hammock/src/net40/ICSharpCode.SharpZipLib.Silverlight/key.snk create mode 100644 trunk/hammock/src/net40/ICSharpCode.SharpZipLib.WindowsPhone/ICSharpCode.SharpZipLib.WindowsPhone.csproj create mode 100644 trunk/hammock/src/net40/ICSharpCode.SharpZipLib.WindowsPhone/Properties/AssemblyInfo.cs create mode 100644 trunk/hammock/src/netCF/Hammock.Compact/Hammock.Compact.csproj create mode 100644 trunk/hammock/src/netCF/Hammock.Compact/Mono/Security/Cryptography/BlockProcessor.cs create mode 100644 trunk/hammock/src/netCF/Hammock.Compact/Mono/Security/Cryptography/HMACAlgorithm.cs create mode 100644 trunk/hammock/src/netCF/Hammock.Compact/Mono/Security/Cryptography/KeyBuilder.cs create mode 100644 trunk/hammock/src/netCF/Hammock.Compact/Properties/AssemblyInfo.cs create mode 100644 trunk/hammock/src/netCF/Hammock.Compact/Security/Cryptography/HMACSHA1.cs create mode 100644 trunk/hammock/src/netCF/Hammock.Compact/Security/Cryptography/KeyedHashAlgorithm.cs create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/Logo.ico create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/NUnit.2.5.10.11092.nupkg create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/NUnitFitTests.html create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/fit-license.txt create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/lib/nunit.framework.dll create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/lib/nunit.framework.xml create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/lib/nunit.mocks.dll create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/lib/pnunit.framework.dll create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/license.txt create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/NUnitTests.VisualState.xml create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/NUnitTests.config create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/NUnitTests.nunit create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/agent.conf create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/agent.log.conf create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/launcher.log.conf create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/Failure.png create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/Ignored.png create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/Inconclusive.png create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/Skipped.png create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/Success.png create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/fit.dll create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/log4net.dll create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/nunit-console-runner.dll create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/nunit-gui-runner.dll create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/nunit.core.dll create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/nunit.core.interfaces.dll create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/nunit.fixtures.dll create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/nunit.uiexception.dll create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/nunit.uikit.dll create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/nunit.util.dll create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/nunit-agent-x86.exe.config create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/nunit-agent.exe.config create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/nunit-console-x86.exe.config create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/nunit-console.exe.config create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/nunit-x86.exe.config create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/nunit.exe.config create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/nunit.framework.dll create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/pnunit-agent.exe.config create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/pnunit-launcher.exe.config create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/pnunit.framework.dll create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/pnunit.tests.dll create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/runFile.exe.config create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/runpnunit.bat create mode 100644 trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/test.conf create mode 100644 trunk/hammock/src/packages/repositories.config diff --git a/trunk/Libraries/Castle.ActiveRecord.dll b/trunk/Libraries/Castle.ActiveRecord.dll new file mode 100644 index 0000000000000000000000000000000000000000..ee7b953df59e6e93a207b4097cfdc869fd55b49c GIT binary patch literal 230912 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 literal 0 HcmV?d00001 diff --git a/trunk/Libraries/Castle.Components.Validator.dll b/trunk/Libraries/Castle.Components.Validator.dll new file mode 100644 index 0000000000000000000000000000000000000000..bdb92b68119b85d2f4dd925490d81d1af989a0fb GIT binary patch literal 66048 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 literal 0 HcmV?d00001 diff --git a/trunk/Libraries/Castle.Core.dll b/trunk/Libraries/Castle.Core.dll new file mode 100644 index 0000000000000000000000000000000000000000..2c8811072c09aa87b5a2a618055fae60735aebfa GIT binary patch literal 299008 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

H^}POAl1h7f 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 We6t(QjH02<|7lJ8KhM@N@c#e|u3Rtx literal 0 HcmV?d00001 diff --git a/trunk/Libraries/Iesi.Collections.dll b/trunk/Libraries/Iesi.Collections.dll new file mode 100644 index 0000000000000000000000000000000000000000..848ca527ed2b08c84d85a73f217ce454392a0b4c GIT binary patch literal 32768 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 z%_TVvProperties Newtonsoft.Json Newtonsoft.Json - false - - + true + Dynamic.snk diff --git a/trunk/Libraries/Json40r2/Source/Src/Newtonsoft.Json/Properties/AssemblyInfo.cs b/trunk/Libraries/Json40r2/Source/Src/Newtonsoft.Json/Properties/AssemblyInfo.cs index 14c7126..322a6be 100644 --- a/trunk/Libraries/Json40r2/Source/Src/Newtonsoft.Json/Properties/AssemblyInfo.cs +++ b/trunk/Libraries/Json40r2/Source/Src/Newtonsoft.Json/Properties/AssemblyInfo.cs @@ -56,7 +56,7 @@ using System.Security; #elif NET35 [assembly: InternalsVisibleTo("Newtonsoft.Json.Tests.Net35")] #else -[assembly: InternalsVisibleTo("Newtonsoft.Json.Tests")] +//[assembly: InternalsVisibleTo("Newtonsoft.Json.Tests")] #endif #else diff --git a/trunk/Libraries/Microsoft.WindowsAPICodePack.Shell.dll b/trunk/Libraries/Microsoft.WindowsAPICodePack.Shell.dll new file mode 100644 index 0000000000000000000000000000000000000000..e26a9ea2fb993c249095dad6ff8850e06d3788cc GIT binary patch literal 588800 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

kNe1?l_|dY+BK@lrkFV-UYs z==rAJuh&!cXy;hij}=!@e#_>hNi}a^P~}b;9~YsI2NNRnxQL5T$9J`J zk|OkZpSXzIDE+QEo>)!txcL3f{Uq<1J3&54@^O+ck$l;iFTN!C)?7W$HCmpdzYaQ| z&)d=YG47wf?nd5U)ryVQFJ%AS+!T~E1^K6NxgI+=9q}2hQjfn3ls`Q}b9yW5@sbgt zWjgAY9-+s71~>zp&h@(a%B%?0F85uT&F%R#NxcrsfIb)ceCYF`*W26a<0kuKi}iNU zkK|WZ7NETPJU}34vi}TcWWm-B#C#QN&IL+JNrORpo}!T!KEvH6n`Ff{A zK7HQh5ax?Rm@k@zJ|3ez6z$Jwea-c!<6Sw4@_Xy5W|2ekThi#`?`E7=+|hdeO{c3w zx@wm9o?DIay#wdvsxj^hEwv6haX}%kEBY+Z>yJ{aqqCgy8MvUMvy$Y?PP3!eL(Ps} zCv|lG%;nfDb$MTsFA--gcth&r!8fEnPJBmxPVrM0?Bf2IxnMuW(SCVC39XM89APe? zbh{D-t>4~YzHULY97g(^DBam43l?~uu2-{j4e=cdx_eKOoZTOV(p0(#_|8-`Tq&_bc#u|b16)+XHl4J&!sTMUO-{GeLaO^*gk{pGublB zzLDayIX;Ku^Z5Vy{Qr4uQ@}Qh*~3!S7O}RNwI!@wX|EMqy>dXbP($ z&Y`e6B9p>R5fdrg5^*tw+ajh@Si|LsbyPWnjw(-_qskNSsQyZDuIo&_=BP3!vo?jb zsg5dbx}!=v#!;osa8zkC9aY*aN0oMxqe`3YsM6**seXFY{wP6dT)oyRFGcT^oK z9M#&Dj%w{H=P8P>=JIcGw$T5#aV=^%+|G5`!8NVr8r3;!WbSm-$gFqN$ZX&`Hged+ zt#pvn9^$lzo!7``3zuBDs^rnGYQq>;wP80`wNk9BS}EwNR*G{~DcK{i+2=mpRf;B8wf{j^_0Az~fy1t9 z{}xyEk&vp7{8II}lxkE&N!8cUQjL>tQnf>@R4o>iYRk%%k=3knoqiUYCehe)O-^3exNYU`!i|dy#@*s zyuK&57m40g6efAkQ<&`ePiaqIOdL;Ps(0ThQtb0o3paVHg%5gaOdjT#7LE}C72^-6 zu_ps+tVRXY7>Ew2-j4~Wk=hm>YPM z!o0wf6y^u2DV!JBOkqJ_D}@UKuTZ!+u${uCfww3u3cO2Uao|G=O9J&2t_~mHU`e3a9>~?g-wC;C_EU*qVP~) zGKGf&()w72p)o5wq7!jpLg+EG-85wm$ ze=2#@G796Olzn`Z8gJR{RG8CFjiTIkxqa#G;&y7Un&0jz3g?lQK2_IF`CQm;%pmI1 zcH=2r+V1>8o+x5%F>BYhQ$EYvsd=NKo!Vbiwp06#s&;Btscxrcq)qMA{$)$MlRDA9 zyWIiuP}}Ys3hUZ^KZv%|b}fUb<=bx^;)#~_uTUsDY^TuQ;VlYfhj)ii`8#|_VRVOj z3cGbsrHbvKY8ULFY8ux;jn()LY7`}OQ1e(~2eo%g>Y(;+$sJS~QaY&eq;^ncOYfk{ zIi`aub4CZXU(4*E_6}Jc)P8MJ2en7b?x1GQoDOQX%-+oT_q)EX>wY}e{aS~;_F8MNz4qSESw@C&yNz|%;YGKS z5w`pp9Oq&0g0F^UgY&}HgA2npgKviY2V54m6MQFZ54hT$YrVUiP403&aG%SE?sNG# zjC*sB`;2njXS6@;bIf(ro&GC#`ftK`PWaB{S@*eIa+i74o#t0}n%i#Wo?H3HtptU0 z{r%xw|8RFW+8r(y?rzU;cYB7r+cTW&@RU1EO?R3)?lkq?X`XYZi3{g8PjIJc>rT_r zou-F7+{YbGcBk*}PCv+9=1_O8k>T7^W5c_!tHZf>)`#<2VpBM;g+6fkVL0F2J`U%8+!M|# zkeqN{f$R_G{yh}V_r#;&ykhyvVc@Ufk>Ky)G2rd+ zV&J{-65v1KkAo_rEEp6~9`r|40t-bv35G{h1EV8q*2D1`!7cw(1h;n02=2l95!@rs zx%D`g2`<~Z({yyF>ETY($E_#3^+9fBs9Txo@>RD!FM``}VFb6^es`Kf?%1R5*st8B zeG|dG{9Od!N6tp@eI!4EXMjr)-0xQ-_&)M$1m8z0M{?bsisZ3ZGm>jwC-Mh8i~5n= zYtKdUl@%As*L6Z9w^-ZA+Zfw1l6#@6%N~*3@_iz?<&z`1<@-l+4-Sgt-W(dqy)ZJ8 z`)+I`_teBl_X^XkWVqAJbl2h4Nbb{l?z{^lx%c06r(EV%-f^eNjC7BLNbb}1k$+)L zHbp)JKX8Y0+-df^&*D%dxBpje;npZM~qCds?KRVjow$bjkjdr(fw7YGixos;) zbL%}7&8=6*owB|=<#X`NIySih0xb;5KT$AKzZoU4|+=cWDdVrM>AcZJE2Ycig3Ax=UN_E^WQL zv`y~PK8WVA^kFoQrH`X`V3{Rj_)N>h@R^p6ai3ibAN{Eq9%D6Q_)4!6Gb;+$z%kvQ z#WipYKl6SSlZoMPVy=PT#XQ{**T6AT!2Fo~;H8+t&lOQuV_pD%jadc$9&;7E9aF0j zu7P7Fga5?jfvRYs=Wz{Ov>WIz`Yu?g=oK)$XwAmB1}-`YELQY0uw>EDI9vl4?HY&m zEV>e`T=YHgsiNz^nngE(9~9+t`LHOT%N}<)#~t2ZlzZ@~TlvbZeB)NWE6V44wkY?- z@9x;!?$~?oSQX2q1;uh{h1}urSiTEK$MSu)SS;U*OUClOxJ)eHi_6FIy|{8L--~Oy z)7Nq5tsl!re=e5CPh2b?F~J?%)*ai?9oy9%+ru5(CzeN7ax9Oo{;_;*4vOU(4vpn; zJ2IBX?buizw=cTO$#9o5(_PN1?sDe2%US3y=S_Dx%iQI><1Q!DUCwHEIqTi!Y>MUa z|3NH|{|{q%{O@s>oZ~Kezq{l^?vlTX<)_GR+_B%eW6!$Gcc;1JPIJ|L^k3aa|J~(1 zclv+ac~voPPk%9P+d}Secrk9D=wjSH#fowJlq|+AP^K8SK>1?a0+ow#3p`bfTcBn! zZh`vl5}tFH5a%wTnY)CxZoQ*h@9Nfjxb;5nl9SyfpLM6ncc;1JPIJ|r=2v%`gyLMc zw#D6Rw&HwG>FQQ`6z7`vDbBS`F3wkL|KdZMV(%2^>vw2zzLrN8=Q(X`alRi-EY5eI z7mK@B9mRRZo9Qm+)#7{ynOA&yRCT40ukP2LE~h)%^kOw|9Q}iOX*_*jRh~#&x~}U` z-N<#6ZsEFw?%=vWJ)FSlR;Z)y{MqWZ>y5Jf?W(A|yxppT>pYd{`Uu9yW4_vYQZu?h zB{WNc)3H9OZhuZQn&YQSeTG}#-i&5F`(G|l=bGh7pDs{#^9wMScTwtefvVNq(%$@Z zf$H6S1}<{qt&Vm!PRs?WdK;R{&vW}d+R*G@{Fe*V%WW)N&KIant~tIO`T-ZHZ`;JX z<5gRl_0)g4Kt0)ZhVz7<}`aJY6V!iT0WPRWQHK=|0P^D(5$?@@UfhydA zc9-w=>vc$#{)~UQK&5oZcE`_k?Ji%&=ehMA9WJ^)@0#PSLR`Mnkq-1z@y%g5>C=IJ zfvVjx-kmKoxY%a~;!(=KL4`YV5H zx4Pzh>~lF6VRyaU@nPQ>m2-X0^_bu*J>${mdeQ}|Trb*v9&W!~uT&XNvu;J> z`1IfHRSxF%Ocl=%mn-UxPleNYe83mgg?8DoSPy)YK&Ka~l;RrOH$D`fj6~FYj$ESEk1+Ski&J$l0TNSnHKJ*q&v@O~fhU88GL|7F$)l=NAvVb(s4<59a&a^y=R7bPZXqxQRGLJYAe6)-`2% zaT9Thc)Iu^%;O@ymOLMrk2?eA_P$7?Z$0g~oH$;bDxM+E7UzjCimlo*zc^l;DxM+E z7UzjCimf^_zc^l;DxM+E7UzjCimkfd{JBj$Ul8XumA+WVd;RIHJ!gq?1O0YhJy(1| ztlN9_vf?J<6!CO%mN-{@L99E-{E42Mh_l2geZBg0ah5n&TsFxYUnNoJ)`+M_c z4fLEVz90@7qSRc~(N2MR+)Wo}iE{(>q2Bm8@QOmAowKCBLHfDU*TcQ(%8Hu=`Xjx1 zoVbZNS)4W28=osKJI?E;Oz@mM$#aG{XR_DNoZ>l0Jo7d0`K%V_&-KQud7iVxx#H>b zWjW$3agI1wd_i31b#MAOak4l=++?9QK39A}tQX1SWP8qE<5{isTt*xxP8Mg1a{}Yn zd($V2GsKzVe6iZ#O&2Fl7H5ic#N{{1{)gTDFU|^hvscd*Ul8}-BHLLUwAJfpeJIn5 z%kJ>{O~jdbUOz`%X1~{u6E}l-JkAs+f9{RX5a)|8!JJMV^v0Km*>5JEF7+&NuK0pj zAM)laD{dlA5l=ZNzI^%J;W4{e{65*lQhizlOmoj&JyQ}FNpO?Z+dmga~W}*I9Z$_&J^c}^8@3*_2$nMm-)`? z$BC208De!t9#5Ps&JgFH^~U25dEMtzMjR*36z7P8Zp(hYC)0~_{`UI$;+%h^FIEp^ zdT|btvfO_8V*dR$`(?z*_@L+Z3ww?eXNq&gW$>3SoGwnBEY1*TigU#IVihjS7srW{ z#TnvEagI1&tRiH7ah!NR%;UaHl&qIHQ=B8th{1iGalM-PFRv&xsaZx*Z@x@%jyONy zV%~WCF}3@=a~}7cFIJ_!ei?C&IA5&F$awM03f}te7dNZu_4|u+Cd%@~3V%7q?VTac z6z7QZ1LN@*RGcnT%)c;VKVO`QBs}{$0nd=};tV8Q-TB4&NaC@tUh|xs#wa%Naj5sdfjk278H_P(Gnc^IA+&-CJoFUE>s~mY8apvc; zyu;eP{>&8Ti1WYj#^cYR-R)3D94Af|XNc8lnNFN6&ItHBZ+xaW=Zx3S|K79uLFO07 ziIc?{;!JUlIA5&J%KYLuak4l=oGH!`t8+4+I8K}_&J^c})sHg0IA5&Jd-dcCo-@R8 zm%Qzp4D)!(5a;~vy&m)bWxgJhZ_0GyYg{gj5z0Sub(e2bKmR7i8I8RV)c*AFHRO`i1WqjfhtQ$^tsPniv`%PU z(7IuKceI{pz0nfUl2A`U8-U?7%$ttkVQ3@Jrl8G2n~gRHZ7$k;Ot%1S5!zz3C1^`g zUyimC!>h22Yz(hKTZgt4Z5!GSw4G?X&~~HkMcap#i!LM4YmC-IuWy~K-*4RyzJu|1(e9%?LJKx{{%AeT`1o;X z6VPU(zW`o>wj6B*+BUT9XuHskpq)Vb0qru{6|@_er?53PzA9QZv`J`F&}N}6LR*Zs z)EXbZ5?+V4(OMF}3oRGJr%=BL7oc57yM=ZK?LL|g8XF&s77;W)J_;=c!?AD)xHMc2 zt`M{|z8%~F{oZgYS{m9C^jE^G;EnKhw4G>|(SLw>B7(=pM+J|MFO60XtpZvVw5n(| z&>EmMMvF&lgVq7lcS7rl)*EdAS{mxZ&_RQxuyooKr--9EGvsGmZ+ zh~dj<1sJ}CX8Ex1(8ACn(2Ap#Kr4l|6>S?@o^MI~L9{a%{sHYehHs(;+e_l3&}ySK zK^tXbKcY=STY!ExybHd8b_>n%FNvS$A0PiZ+Cu-~;h*|f#IFu{zjf_UJm1i<@eScd zaO2SB@lD|7Xf09e0Cz|0iPjr!aOjHoIiaKC7oaW2_?2iIQQr*j3SAn%FLY)6LA1lD z9YZ^g;ge{mF#Zhs=g=;qUx0QU!#B}xVfZfEUzp|r`nu5Ac&E^c_`+yWXa#6D(e9(^ z!YksJ7a1GBqR9C8EI1q90B?l1!Q0_n_yF2rwBtoq#Gi!E!51*@E_@%YY#7cLVPoT~ zz}3*!ge{3*hqeK2bJ&Xbt#DfS`1rwSQ^Qxp2PyuWr8YMIxcUC(C!7D#{BCo9iy|#b zwy46W)!h9{IxsE|-Kp;kh@ zghmPR39S-3By>yYosg1{mM|<~Ov0puX$i9u<|Qmncsn60VSU2ZgpU&TChSi*lJIrH znS}g=D+#|Pm{#Gfssz<8{t=?$0qt(GyCt96ub*WWBtDCKK>yXxAt)p6(Y+bJP zldXHT?%#TB>o;4kXuYNN?$$rGzSY{aDcq)Hn~H62w~cBS-)=y=aqXtGTikASyEW~% zwcp=9zx}25zqJ3o{loTub!pypLf0)_Kks_6>z`d)c01S2dg1FA!n%Li!`CyaXU(2T zJ;(QarRUwUiWuf6Z|zTZ2jPe`BG zKBfAU>+@uv27TK08QEuYpNu|l^;z9#OP@V`KJRn3&%Hjui4_tXB=$*sBXLvWuEgBL zFA~2^JePPm@t4HAiH{QfeIxr8?_0WW)xItI_UW76cV^$$`>yNzY2O2Vzv_FlZ>6L< zNllXyl13-ZOq!qcM$)RJ?4&J8A13WeI+S!SDJ;2U^3%yZlQWXnChtkkOFou-J^6NW z;grWxUQBr(`b^A5$*P>syeuMf=>o=?48~s-I%jtKd z-#7iv_WPq>aB9ia#;F}ryQPj#osl{x^_|q+sfSWS`?u~ttpD=9hrTlOouQkDemFE|=)s}C4)qNy zIjq94>cd(L>o+WI*vMhahOHg;!LW~p;qI%${lkk4j~@Qm@K=V<8@_1xs^M#gZy&yU zc+T)|hJQaifB5gi9}X`%qQZ!$Mm#^F-G~t*CXL7#@zsbwMm!i{jjTSh?a0m}dyGsP zIbh`Eky#@TjVv*$@u<$DhL0LQ>XlI|My(mOb=1yL2S%M5b#>J3Q4dD>N0%C1ZFH;A zsiUWketq9cg+4V$H#m-=IoeX#{53!&X`AI3XhE* zTYPNYu|3E3A3JI6n`3W{eKVs2lxmoTzu<)5!S^RE{^f4?KBP7JmG^n$dx_tG+oOIS?hMz>@jO?20e%7X zl%q=Zg44wl#WP@hC8-v`_^ME?5U&$&73aX5?u7Jz65kT*W8VBl#KpxG#m|a6ic`ho z#k0lV{pLNtfFJy>)IdBgw@)LDzjDFn@#Zl5+)l6Hb2q+XM1C26VT1aw@No3YJNU~v zxTkoj_-k=s`GN73o{{O{(U|XTcs%?gJQ*%o&l|sSxA(ZbBNX?aw;nt`LUC*q!ZA@; ztyIWj((Yh#(idfYW_ZVx3`*RJ%J-^a*3AIX> zRBLr9+_UR(^^q>EKGtQ_C%P=|i1q~j`nMb|k;|(hrh*DL71aP!3HSG}tY(=iYKeJL ztu|HFTJw}zZ>p(}Om(%()KCXaP4$JTrM@*!tFxw#$~Se@1@nyh$uw0LO}x5nnyH^n zSB1a(P>)Ox6=aQ9Vb%l{ZcS7X)+7~aO;J(Siz?chs)|}KsaR{8DrPNF#jSVLW7aBF z!pc;STWeKmYaMPsySygysn%Zn zCCR7i7i*s?uyWL|R<8QZ%2PM2{pyx=K;5$rs=uv6>OSt)_Q3i zH&vzJKh%@Kw^X&@+p2o-9rbkZpZH6ayJ}$YJvB7=FEuOpZ}nR6ef4SZKk7j619dR? zp*j`(NSzK=`b@Ca7lVzqe3mZZ3)0nm!McXer)T^{1%KT${dlXR>$m-D^gI5w`d$Beo$1H`658`e{5 zA}(ZF!LPtQ;RSFqyc`}Z{n0XhviN230(c#!dsq6K#2<@4gSTP)aq(I4HSt}sRo|N~ zTwDsy#e7wzUt8P|=6bbQJm>9~VlbCm z9_D_o26MU3ikpf%!JMv#^iyF@KSKJ`Wc+I|pXUPj9^4LI4|jpLzlVpl=v~2&$}Yb`Kn9( zS#fJ|qIisWo_M8rt9Y;Y2+ZZ3lKzk4E8^?oKgGdqy!8tgml0PH*B3VzzaSnWo-SS? z-Ym`$9~Yk!|1S2m^&YphxS_a%xW9O!c#il@ap3q_CH;-!-QxK;FI>ZMl_e>?EuyepmovmUq(S%E&c_XhFDGTrAekNdA+o=?xhoUcIq zP#l2|Se(Bs%<~o^xqP{3oplVwutw^e1AI)b2*p9Te07w z(C^ySt0#$vh{uUvhPk}g#bxn7yU@qr1 z=`WG~D(SD2{%-LB@p18wFdz4(7&oVOm*PP(+}At49)r0akHcJ#YT{?5-b(tZ;wdm6e?H8| ze+%a0zc1b+;}6OBucdxP{I`s^lf31Gi%W{DiR;5$ujgT|R|j!l86UV#N|Wh^$@rJV z^JTiXU|z@H65o@0P_noG0_U{|^!fTK3G?|?5XXxX#Azws`izA6elZ2+dcGm`55>HG z;P`LQ=khLzZ@`>BsGql-D463*z(Y`f66W|uGJXKe*UNC2)BQ($M4XNc7wdt~U*pi{ z@fA2uxt;j>VfKs5StQeE!`!YPO8uzR{~q8iFKD1QJ_6?Q%ZO`<V69sd*rKDa->W$OA>Dq|9i2K5vZ-Dg2N`I<&w$xXNH%ooH z^go5&^PTihioX;8B)$f7JNyH4dzKmMy$&kEe15IRc*l1anB&vLlcYXV`frQ3z??5v zd`z4#rCw;9H~kYZ&-ayKj;|y2HsWNM^N$u!70-q_{Q{Ve`<{5a)b~mMTbSpStI~fU zNjCN&I9Qep6Jd0ILvw#>DQNjQ|WhvxgLoy z_vbkAT&b^sIsZrE<1imTALeoWhtwazT;G=_dEXoGb2Ps{;OA(1w$%Cgnf=$L&+{$& zZ%IE(%+JlN^K&xI&%^Wv8PCtf?DKOmy;JI+iupO1b$-63=S=q2@4vqfER*^M@m}#^ z@d@!c@vq{)#Ab@O+)#1H7rpJ(7v}aD2=nzdN&2&3Znwqat>Qi6L*nnn`7oDr3+8g1 zsb0S%%>I+oe^&g$OWyc?;*sJ>F!%3tn8)FpFy~(-_4P2<>l5)2n2&p2{0Qd!f%9q5 zG;e$u%Wx6@yx5a_)Cn~?}t!LnSidyLNIIk~mCT=h8DgK|nuNWcY1Fwr0rO)G< z>%AF$Zr|PFpJpnBAIQ|7a1dt}RcSE1wNB;wJKK+X4aF}&||HV45e`xL(daq3P8O-H=A^ut%SYE*QQE!U*{`>dg zue^ryi67^Ixj2WyOJFWP3m$>~`|vpUWAW$Wz;gL{bXpr>x z=KlRz#^+?>Js=YM6XtyLvOJ#^zx*Dy1;)o_d(%AubGpFxoQgizcOT5(D~4@W?r|6R z-GbNk96xjm#udf)#4zViS&!cy&<{-i%QoCiG#3Bk1J=JYdTRT+DD^a{Pn7xsslN;N#d5a5{o&p4zn^Eu4sZJ}fbU}b zTA0r_59aeb0sD&m*Xt;Dmr~0r;d?9iUHEC3$3q;<={v(*e&BT(c%7!B&O3Kz!0*G{ zPCMwz-s1&c4}s%i-6!61a>ZxGOZIrL$CWT&51TQ6DKsAM<>0{a@7wE*f4VH*!%^Q? z+FS3yaq>i-cf8bvqpIM$XSg`5qwv`j4je~GsPp**UjKpPb2RGZG2Kj<$6a85E|%#x z!8I^G@OXj8xh&&*9`%;H{TQz0tKvHGJT4{S7Vu zZ1D>52jb7fKZ-*xc+06OP8QD*Zx^2vKMJa+6@M!(5aSl8?*4jA zTut0uoGczIo+n-@-Yq^W{#zXNv$x!8;&$Tx;wj>l;(g-F;_xfp{ME%B#e>8d;#J~< z;-AGKSH1b46t@=l7Ec$i5bqYB65kg`T=SOml(@BcfOwX8z4(~;ra0yoZ~hwM7sOM< z?}+onKZ!#My!pzATZspVr-KEbc9yEM6wwEIum!Rcv4PmQzLC zQanODOT0#$C(akE-@N&s5RY7s_tvU-Z$+QyY4$h%s~@-?;rk<^8*0Z|?>uu%JQCR# zKkAcjdiD9@EVw7?8(}Ut2j+Fp(Kydf{NdFD?~k8L|B%@F3%^lU$2k<{`#|8lTtoVe z;2$x*BYX*-3iEyCzn>pZqFxMtzxoK{roy93;hF*-`j5B1GsG)ko_7Q1)g@tgAH#H; zP+tJ=mGSlVd+W3Ip;Gry=kJ7EKmHy_^Su2K^(`15RP(>CO9Jonf$Pc-9^twT;{(s@ z|MdOlBh1J5kHGsu?Pr^OmI&fe3d6?_d1@4c27_v_67ZdY(Wg+V2(SHm6pRQXj zVSLQfSRc3|9N3Tie984?j-x5+t;Ec6u+JO^&FfW~-y_n@anQ_h(9Chr%yH1nanQ_h z(9Chr%yH1nanRSqcg4(cu+AI@%^U~K90$!D2hAJ@&Ffv7IS!gR4w^X*nmG=dIS!gR z4w^X*nmG=dIS!gR4w^X*nmG=dIS!gR4w^X*nmG=dIS!gR4*D4}a~$k5$3Zj4K{Lle zGsi(Q$3Zj4K{LleGsi(Q$3Zj4K{LleGsi(Q$3gS=CYm`8nmG=dIS!gR4w^X*nmG=d zpEGIZIB4cLXy!O*<~V5PIB4cLXy!O*<~V5PIB4cLXy!O*<~V5PIB4cLXy!O*<~V5P zIB4cLXy!O*<~V5PIB4cLXy!O*<~V46UZR=fphKSX%p3>%%yH1nanQ_h(9Chr%yH1n zanQ_h(9Chr%yH1KiJ9YIpE(YiIS!gR4w^X*nmG=dIS!hi-)ZJJXnwAxnd6|DD@bGrvGHzd#3$ALbX>XMTZZet~9gfo5)jW^UnsS7)Aq*iG;WTRG;WTR zG;WTRG;WTRG;WTRG;WTRG;WTRG;?>>*B3MQz&>*iG;Pn7Ie`nR}p_ zd!U(npqYE1nR}p_d!U(np!s_j&D;ac@BQh(=N0B2*bf}1f$hZH1MAE^(9Au!(}|gT zV4t}Mnz;v>xd)oL2b#GDI$q4&1N*6B<{sE*?ty0RfoAT3-V*1Txd--liSxwFJ+RK) z1I^q6&D;ac+yl+r1I^q6&D;ac+yl+r1I^q6&D;b1qL{e{_L+O2nR}p_d!U(npqYE1 znR}p_d!U(npqYE1nR}p_d!U(np!t0V&D;ac+yl+r1I^q6&D;ac+yl+r1I^q6&EM&0 z<{oI~9%$wsXyzVh<{oI~9%$wsXyzVh<{oI~9%$wsXyzVh<{oI~9%$wsXyzX1qhjVB z*k|s6X6}Jz?ty0RfoAT3t|(^ifqmv4XyzVh<{oI~9%$wsXyzVh<{oI~9%$wsXyzVh z<{oI~9%$wsXyzVh<{oI~9_ZF$<{sE*?ty0RfoAT3X6}Jz?ty0RfoAT3X6}Jz?ty0R zfoAT3X6}Jz?ty0RfoAT3X6}Jz?ty0RfoAT3X6}Jz?ty0RfoAT3X6}Jz?ty0RfoAT3 zX6}Jz?ty0RfoAT3X6}Jz?ty0RfoAT34xQjRM$Fs;>s7_fJ+RN*1I^q6&D;ac+ylKx z%-jR}%stS|Jxd)oL2b#GDnz;v> zxd)oL2b#GDnz;v>xd(cdn7Ie`nR}p_d!P@AnR{TLxd)oL2b#GDnz;v>xd)oL2b#GD znz;v>xd)oL2b#GDnz;v>xd)oL2b#GDnz;v>xd)oL2Rd**W$uA}<{oI~9%$wsXyzVh z<{sz;8J?GkH;F$JpAlad-xXWaz4@4X;BuIIpab7WRgyk)53C2?x0!ojpScH`xd%FM zeZkxV`+@H_n0sKKxd)oL2b#GDnz;x1fBK$-xd)C9ye^n~U_WqNGxxwga}V@?|2~?( zpPoaVz67WGyzg-X-^23vMP+-({e;>$K5@^c{&n!V4IT$yhBM&6@0!=q=l8%5#bFU% zzl^wsnD=<%bREQl#goLZi?d+&`*oPVC-D1H_79=Y-xa=>@dfZJSdWlMZ~782`_IDs zUAc|ad&7L(!0*E!pwI7_-;VO0*J^kj=GzH#x`pe!@7?pH&m023*Z#7&H~xb7PdFd* z8T?N03tUWGRm|THSbtvJO59oe#wu@oFX;~uj~34sFAy&izbjrN-YniJ-XqQx^LGob z$3f|TB|anmS$s=;Ppl7k^A!>o6PFX$5;qdZi`$8NiwB8Ei6@I+5ib(25U&$|EdES< zM0{F&Nqj^6w>bE7Z@t6CCBzlQPm3Ffn}}bW?akLh`uzJXZnx?<9_ZFm?<7tV4--!n zzb;-bUL)Qj-XlIDJ|+H9%zFXy@otNK2fcn#aXE2aaZB;&1>SToNWZT*EihjEl6anY znRu;uhxjw`SK|AnaaySRUpW_k@AH3CZYc2k*u=-Qs*UyBTSBW9Fn{06f3TyI|mV!ocr>f%9JA_sl>(B#`eqUEVt%U4=(t8wGM(yGwbG z)Ae!ByDEA?S z4-xbDV10^shIpQMnRvB$i}(}q0r3&>N%2{6$=TlWf0q8E*S-E7@pY-+35*vz3%%)L z#TCWRh?|K!ij&17#nZ&|#P5jT7yn1xMz+r<(%&z3WIc{b|CIQ$_`W!Fk++^@#nr`4 z#BIgAPIR}w^!tm)h^L9?iI<71Vn1@ez0yA@{zm+x_&4$2V&@I-@rsI{5LXdDFK#97 zA?_z0EzS`0`wXtfJn1hNZx-(n9~FNqz98oHFz3G_{XfM2h|OYed|`1haV2qmaR+fv z@nG>p@f`76;|Lh>a%h3qdmtAW$N};?lJh?s=Pf6YAN;@lyc)PJ?AFw~Zt4m1 zyqPRcgL$3yRVFOAFcMTr!vI7*LeNi;tVnGxy$qLRq01cf4%e_ z@mI2(8q&{^{*q?idi?kEbs(3w3O8!mi1mq2_Vz=k7WiMf(eEuDBz^_^r(#ol9u~hX z-Y9N^=g09MOFu{ax%lTc-gRmquUEUR*PkV>-_G0r@i4brd+GDIYlr0q-dFxl-(Lf{ z!vC-GxWl?@bq4Fj^*ayqbwTrWLC?f^UYGy>y`KZeSs z6>q->`fYJ9)^UD(uery|oBr>o_v8LQ26yn80BSW!S@1+KTzz2$DZe@l8Z{Yrg2Mlt z6XZiZ5yU4Ve3Ub|vm5>=JKRkH|5u=T3N&h-!vDsoz6=gQR*9IEyKNq{OW`+8kMg> zqn4`}R8IPeqVf%B)Y~c+!`~vt*(5QD*2@HSlD~b9U(BMu+ zr7(Qg_c-eJK%?GOr7`@suMFycfkv%TWifo;_XO(yfJSAia;QA;l}F_vXjB&Ni{)33 zd=*hqc12X)Q!4l)G`Me9T~xyCXHW?Tje1|zLnXql zk4hwH)JD|+!_oG$s7HZDZBh+UDQZ85N(^Y!W<)mpD%O4;^}val08Rr9h*$sphDZv0I>08Z-)bP{Qzsb^_`J$7($p0U;2kH+%qjsyF7=9Gm3-yPfQF~Nx zRCJ*}s3_3j?pKKzHii14Zh=O9s*+F%DwK>$Flf|1m4ZrI;eMzL0*%U1si@dR`lI3p zjmlL6FdR~3AnFci)MqLU!=Xh6p+ON_v9A0E7>S3T!2h=cB zB8v=1B?2_+b2S3PQAI|g9t|4YscRI5zbG;q^~0c1htwDh+hJo-_k#vEZyyJK;hr0g z;M`!;Q8fiTrlx{ls%hYHH68p4|BI4QCvZM6>T5L{Jc;{;8TE~t3!cI`z^HH40`Rn2 z1b&DACCjKYI1?E4Jznbu|6A5_@GM@hMxDbe(x@Ntnlre^To#y**NssZ@X9diCmj0* z|GUfv@Dh$+gTV7<@Mj!@MqR;CX4F+2M@C)4kz&*@I2Md5z}`0MSL{!tu49iG#8~%% zH?Y->`W@TVsGHbwM*V?pW7I7?d!ufvBj6o8W264Wb2aKNo~2Ru@cfMW3(w4`zww+5 z{+F*a;6HdC1~*kd2R_8Q8}$fljgz^)2x@&9H2Ml?>1$w+E&zk|bc) z(RaWQeHRSXe}RSceXy{802a}Yz%Z>f&fnSsBXlqrsckSyJ7Ba91!Ht!u&53LV|4^r zOhlVFbycu}t_D`r zHNZ-`7Fb!=2CL}0;FG!@SXDOwtLcVdb=?T8p&NrWbrZ0bjt8IC&B5BbC0JLt0-w=s zz8W66Jq_%lr-NPf46vJ? z1-_tXgWdHUu!o)t_R{mgK6(L|s272K^gx&#;)H}gZdKWla?*_-{z2I2A z4;-g+!SOl|oS+YY6ZJuGl0FPh)qC*TC0w0XSD*2j}S<;Cy`(d|lrH7w9|SLVXup zr2hin(D%W``T_W+egrPj+Ti*@Ti{Y13@+0)xLiBn+d33np$miW=rC}ljsV})QQ#^a z17_-2FiRH)-_s?)Y+VXmtxJPzby;woE(fmH6~Om(C2*6j0&dn-!7aKPxK-Bxx9M8o ze{^kdyRHjY?$xcpPjwq`pKb@{ z=ni16?gW0OyMTGR8@OM02M_3;;ODwGcu*&ThjbEnSf_wr=v45C9snNIY2YzE82nPF zgU9tS@GCt6JfTN{U+Xd8Nj(nyMo$1w=}F+XdJ1@2PX)iz)4(%&I{3Yw0sf$8foJt> z@SL6l{;21I=kf?fdrq!)n~^7)a4ZN+lgLm`}@K3!HysLMC_w;V?FTEH1Tkiw! z>s;_3od-V92f&B=Aoxfh29-Gi8gmS^%yBTtoB)H(Nzi9bfqruubj%qr#QXq;nsZ>gE`UYMMKH`<2E)x2Fv45|BTWGqWv+wK<^~vJZh}S4Eil&H0gIWtU~%&o_?Wp5 zmM{;%lI9Uu3O8-Ux!PD@X%h^VF*aD%IN%c|6f9>7gXK*aSiwYq6-^Xa$;5z_O)OZ& z6bGL)CBUkt6!?@W4OTN{!Rn?QSi@8RYnn=6EmH-2+EfK=n`&SkQv*vX`Voy`ESi%A2!n!#W^;6O7Q9AxHzgUwuU zh?x(jn+4!dvj`k!7K6jh5^#iB3XU|(!BJ)fINGcP$Cy>%Sd#^gGuhyHvj&`C)`1hv z25^$u2u?Pe!6{}d_@dbcPBq)Xm&^`un%N0vm|fs>vm1Qb>;-3-ec()!3(him;49_; zINKZq=a|FbYvu?z*Bk@qnd9Jma{_$boCFt`Q{X~#8eC+~fNz)|z{Tbq_@+4zE-@Ft zx6DOwsksa;GgrXn<{J36DF9cP>)<=)2DsAP1m88cz*XiBm}%~U@0q{AY;zx6Z61JY z%p-8E(Lp#r8w*@-g24^O2H!UhxY2}yn@nMFvk3#Ymbs-n?~S4(-=Htnt+E*Jotra4jwTr!K0=Xc+9i`zclT@?z@N-G@S>RjUNV!w%VrArvzZEBG1I`SW;%Gy%m9Bev%mr~8~oMG0k506;BRI= zc*86Je>aQ3n`SZihgkyNGE2eRW;uArtN{NsE5W;F6?o5Nfq$87@NcsQyl>Wl|CkNn z1G5o)Xf}h7%vMlY+dyq?2aUA@w5*+AkhKd8wswO)YcFV9`#`^y3p!RF7-Ag&L#=~g zA?q+$#5w|oS;xR|>o^!;od6@PlVFr}3XHZ+gE7__u&DI|7;Bvai&^Kv;?@Q5G3z2& z!nzEWw61`qtZU%oRsmSrx(=4HZh%i%H^Fk&EwH?G2drS-1uI&Aft9TLU}ft8SjBn- zK55~iM^&{f@F^=8tY+C@b;|*3TA^Sqt1$Sq6$aL}BEULU6j;}a0iUsA!FpD4u)b9S zY+#iFpS4PZ4Xv`^b5=R9kyQbF-l_yPwyJLWTk+~Rw|fc4FLODX<(`~80>GQg9EK$V45`o z9Au3Ghgf64bZZng))trh}uc8Q>Ue7C6?L4UV(sfa9&X z-~?+vILTT7PPP_-Q>?|{RBH*CVJ!uxTg$Q$1Q?7Km%G!#`yDl@WZ5Yn7wqxvjAkM4S z4sf-#6P2~rE)1`6xz5^+%6bszRckMX-*>sm+K0+Um%FT741Z$fVeD=Y=SJ%Qc*Hu0 z%25#KG3zjR+ByRMXdOfS9Eh`xbsW54odAEbPJ$P$Q{W}*G*~_83|J%R2e4+)Ij~mH zdGP6=3t;V_i(s9g%V6E0E8sIh*T8x~1z`Q4>tKVR8{o4+H^GKMx4`Fu?tqPg?t;$; z{RK7-x(~($Jph{oJp$u{v=2vekmb{=Ifx@UC>X;nK^(C`HkcITppp#YxC#oza6gy* zg9@XP3TiblC=9~`T&4v@pfbqikf12k2ZLG-4T`~VI*2>E2gPD|n9C7C#W6f8s08Yx zK^$E{r7%1e#F-?xG*~*gEGlI{oGXIMVYmW_tr1)S!_R1b%;ovux~SxXIC}@z!|*K-XYb$!82&T3 zA%^d`d>Gsa!^YPbbq(T->T81G!XVD8zIZUq*BlJ@wFD!4t-wfM8!*b(4vhA70AqZe zz@ok`V63kjSj^WQEbi+GKIZEUmhdHlC4EU){^PzB43~0Q+Lww-84%aQz5y710>nAf zmxkf0AdV&9U<}vsrDM3Z%euZ{s66AczHbET^;|abjlytO-x!R2!8Z=W-CTC}O+cjw zh%=IJ5{CQureL_Y%S7K)RQiHA3;CvjDZc4oKi>>+v~LzT#Wx$%ya?i&%{K>}=9>#< z_~xTN!?ys#FT0%STZGCim$Q9~QGdndJH90te%H4Y%Ic$>@ZzOAVI2h?hZZySa` z1hx9aw;jW~K&|%pc3^lns8x<{Cx-XA%=PU;eJ zli*YKDX^M-8mw-g0c+SlfHm!NU@iMR__TcitZiQe>)4mUy7m?D8T%So&n^J#+t@cvk9RaqnqrkRy4A{<&1>4)j!47r_u%lfH>|~b)JKJT!E_OMvt6c%? zW>*4Vu&aRG?W$l8yBgTjt^xM4Yk|G(+F&2ME|_T71N+(yz$CjNm~1x!Q|!iIKf4K- zYR7~9?dISByCpc#ZUv^Wo3+xr(LVG2+$X*4$VP}Dh?QHN(dkwh6UI)HqZvdCt8^LAvW^lQ^6@1&? z2ClHTgYVcoz?Jq+@LhWsxXRuQX4-qfEPEgLo}CM3+j-z>`vADcJ_xS04}g$_&A8q zAoc|ep8)Y0#J-5(lOR5K*q1SU8pJ0K`wIBIeGUAqg% zb@`sZ0_s^Vv;CD&U+r?OzY6MWKwN|Qt73Sa%Z>hOsO<39K;=VFtDXK@82$*Td-e z^S1%N^tS_#`#XSN`8$Cp{9VAW{oTNm{_fy6{+{3|e{b+xejr_7WhYD_*efJ@Vb8-_@{pY zrn&3#FaIP|?zw#EpMv@$m)e<%I-=)bkTVSocBX?qX9j3Hvp~Ny8+4pGV2Cpp40Yy% zg`5RoVP_Fo#90i6IZMEBXDJxrEC(Z<6=0OJ5{!0MfiX@NSk%b|W1Tf%F=riE+}Qv= z=4=E@IGe$e&Q`FLvkiRQ*$$R=c7SD^onTpK7x;v;8!YGS1(mz8SrW62e7tt4y@yx2kSZ) zz-OF`U_IwDSl_tcYX)(HdKIT2ucCkpJ~#DE>0Sg?~* z9PI3r0J}J)z^+bdu$xmBe8DLPc6Ta(J)BBlPp1ml%c%0?V5-vy?C&%N2RKc@flfS_<}?QfIW57#PAhPT(*{g;+JQrz4&X4S z6FA)I0*-LHfg_#n;3%gjINIqAj&Tyfu}%^=&Pf5sJE`CVX8<_SNdqT2gTcv8Iyl7{ z2EOQw0H->mz?Ymc;526(nBhzSr#q9tmz^o#3}-4h)0qa&a;Af?I5WW6&Mfd%XEr#; znFGG&%mwE<^TBz}0&u>w2z=dH3@&h%fD4_a;38)^_=d9rTZ}2mIqSgX&Ia&pXCt`6*$lqpYz0?3+rW37?cgeB2bk&X1hbr7;Cs$)Fx%M+u6Fi; zYn)tgt&<0?a}I#(orB;8=P>xba|GPz90NBw$HC3c32=*Z65Q&X0zYt0gWH@l;D4MS z!0paC@I&W3xWl;se&k#PcRH8BkDV*vF6SEfiBkaXcCLeaoEzX?=O*~6a|_((+yQf( zyI`*K7xM(@q8OJEszO#;F2+?^FeUaH@f4 zof_adrxy65QyV<*)CKdMdf)}80r->C5WMI#0xvm@!OKn)@Mk9;yy7$muR1NkYfdZh z7pDza;IspObvl68olf9yP8aZo(+&LH=?>m>dV+sAy}?^fB6!9aubM1Nd0TMzBQ4X0T+)RwT@ z;e&vOgbx9}DSR04(C`t!b>X9chlP&;zBzmx@bK^nz$3!%10EUv5b&t*Nx-ASrvTp) zJ`H$G_%pyi51#=%HhdQFt>G^Kj|-mzTpvCUczpN*;M>9%0Z#~D0(^V;Yrx*{H-LTN z?*RM5mjMUD-vbVY*qRN7!d(D|!(9P4gu4M2!rcK+3?smk!aU%{um^A?+yih^xF_If zxEJ79xC-#(aBslza38>la9_a5a4q0exIf_L@BqN+@Ib&*!h--$4G#u9Ej$G9^zcx? zGs43F&kPR-d`EaB;7oWl;5)-(0E^+VfV1IofTi$wz;bv3U?uDY+!FQ!&V_@3^WiXH zH7o$06`lmR5RL%W!coA*@MOSxI04uQrvR72X~46?QvsXd>42^9Ou%+H1GpR(0k?)F zz-?g#aCI>yb|!E;Z=Z_g;xW9EW8Hr^6*-~kB8R*UJ+go_=)gFz$?R>0Y4eu0(ez; zE8wTX+W@Z)ZwLHzcn9D$;hlh=3BL$pXT!SzuM6)1{9O1|!0W@W1Ktqc3wUFA zAK*>l{eU-z4*>pk_#ogd;X{C*4<81+HGBl{Z^B0bZwns-{M+zxz}v$o0KX7^AMlRw zhk$<J)QfcJ%6Iq?5*7r^_&T>-xp?gsckxI5rKg%RL` zVIJ_?VGrO#;U0kh9PSDDaJU!Xzl5s*9|`vc{7$$J;G^NbfZq+*0zMY*5BRU)0f3K( z2Lk?Eco5(d;lY643l9POet0P055mI$e;6JP_@nShz$e3_0e>7G1Nc;UEZ|SV;{cxy zj|co|cmm+h!d}3ihy8%hgoA+p9u5OO8x{a}geL+1A{+tyk8l+5x$tDb{|qMppAV-1 ze;G~#z7U=Y_+R1afG>t;0{$wT0emSe0{(Yc0{nGY0sKGV9N=%lD&TL!1;F2hi-7+( zYyiF-o(=dvVGHp0;W8jDFavf)D}b+x-VL}*bPnLFqjLdwjm`u7U(xx1yG0iO{_p5Q zz}=&Z0K@2Fz$m%|Fc*CoFdtnC*d1L4*b`k2_?qYnz&)ZX0sknv3UJTpYQR5^t^wRD zx)$)Y(RF~UqU!-)7u^WBcXTu0>gX20eWF_d*F?7g?i<|>xL6wr23Ux82Rt!~08fhYfE%M8z>#PVz)jJffTPh~fMd}rz>}lB0mq|# z04Jh-0VkuifK$=_fSaQO0H>n^0Z)kz0z5T381S^{5Wv%;Ljli-4g)+hIvnsF(UE{N z(b0hKjE(^;M#loqM#lk`qT>O}(FuT+s26Zc)DJip4Fb+b!+_PO0C-k(65v8K0$7Vi z0T-i_0qfBOU?Z9WT#BXv&yG$7Y(}R8wxTlu+tCc*a#RG|8kGRIMHRs9(H!7PR0Vuj zv;g?-Xc6!|Q3LRt=xo5hh+2T>M$3TjjkW=v7p(xkFM2oN`O!Im?~l#}ydXLc@GqnD z0WXX$0Q^97A>c*PMSy=5T?}|}bP3=GqYndK5?u=Tq3ANe4@Z{+ek8gA@Y3i?z>h{( z0bUke4fwI>8orU4WmB?gqRrx(D!c(N_VlkG>9gLv%0TjnRF8H%0dY-W)vu_}9^c zfVV^s0e(Ju81UBU5x{RpkLJ6AhXBD#qsQQW7!W)&dK~bv=n23dMBfMghk)R3(GTH% z1`zx$dJ^vcjGlt~IfgGpPs9Dcaz6vyE%yvUch5Zw_y1-X=6(T8#4w+G4)`3y?%eah z_W**24^r=-eJ~AI0$Pxjo??$?XOFSZ)>EqYU4X+Z*ng+&;h;bNj;mPKL9&wZN1Z zR&x6TUuIa(9RPPDcOc+W?jXRka|Z)9bB6%7a)$!8bB6&g=MD$lnmZD3TkdGU?YUzB zS8~S!zAJYe;Jb6j1HLDB0^m8hUckS|^#h)p8w7lBZW!>qTmkTXxsw3T&y4`SKQ{_^ zLGEP0zsyYlUYMH#{6KCR@S@zQfPa-c9q{7ZnSdY6%>Z7KD*}EfR|5QSt^)Xx+#KMg zxhmjCa|?i%mjT|GyBzSQ+!cT~ z=dJ|&>)cg6g<*8~1-?nc1db2kHiA$JSl9l2Wp|1NhM z;GMbK0slUC2jCZTcLIJX_eH?Fa(4m#L+)TdmQkA+!KKRl>0v5gSj69 zemnOh;6u5m0RK7nG~lDTp8K>bpXGK3{CO?{ zd_I@&=?Z=c2uUW_1NVOcLRQJ`0r;x?o`AdL_X2!%eicG@1q8>)?+te@zYp9I!+d^U zxO?(z0T0aYkI*+T{ImQ4z#PQz;QWEWzd3&pFo!WbJby4SM*w2&&L0BzQGi&x^M}Iy z7KVSGKMa^-0P#9+{&2XDWq4fvNVtdcM*~01u#i6nm<@o~1$n737ghX5bRKMeSt{3C#m<{t(8ZvHXA$MTN@{%igTz{m672mH7E z4*{RZKMDA~{8ND6&p!?LgZ$3`f0%y;@JIP)0iVqO0`SNA=K!C|KM(km{0o3j=U)W; zY5pa^pXGlI`1Aa40H4YK4)EXeF9SZC|2^Q2eAjEBJLGo({Ez&ufY0T31N_hY?tstd zBfwwg^MEhpdjS6{zX#xp`8@%DmEQ~SrTi+u|IY6X_}lzGct7NK3}4Rg3(Wsz_&@oz zaQ{BPKVZ;(0OE83V$OCS2=^|4kZijT0_^KP7?^%Q%#Q9u01MrR0*-bc2DrKVaD<-H zeI(q|3{UMo8ko}nAz^kO1NRw#kTAQC1$<}sae&3{;{j*8PXH`+_X3u?`vEK6gMeGQ zhXLoh3xM<8CjnNwM*z?29tB+JJ{hpqJps7bJq1|ro(61mp9;9teLCRT-Dd(eyJrAf z-9^B2yGwxY?XCcx*F6XLzV0gE`P~bE@9$m&ytuo8+I|oa^R)YHxIYAl)vdb)_eU6h zw0jwtOBr6)y$$$}0bqn>*K_w2b3@Q-`$2i&XY0l?SxJP5d|=OMt?^*ju?ch4h$ zt9u>=+^6R;z%@OO1Mb`N1mJ!>-v?aV^FzSb_dE%>f6r4W_fLDChWh}9hxX9xJ?j9m zHuXFM_nQHsUG_W+_Yn+_>iGpQM>2d%554Yl48ynfJP-V_fL+1yJukq$p5X~SF9P#+ zK+M6Om*DOPgyz`uYq*C1F&}$=19t%s+G5Y|;NA!bJ+bFyxJLn@A@=+p?r}iqhCR6c z6ifkPw)X4-_bCid@7WcY(-@xFvm5a50K{zV*&Xg8Am(XL1b3O?Tu&aDEexwY^fJ*| z3>SO$0KNu@H#&OuguB78*|QfgEkMYzJ*(i}3J3|dXK%Py03o~f>;w0E03o&Z>SUdh?TL2-cY&@5NlA+;ecQ3ITG-Ro}&SO&~psnk9&>?+$v_1B~ZLU*R?-}%UeP?y8=ZvnS*8DO&qw6he&WO(Fdh42Z z0Ipy2PQbUVnFW0NnlfPDnk|3>Yvuum)|>^nVNDJ2#5Hxmjcb+wH?3&`j;(0}j<4AY zIJsso+`{_!n!N!(vSt(z2s(D#1a`@R5gXyNy- z7lH@j_ac6U4`9UO*MBi&Is8K0tbQGCAs>#LzrDC6dn#_GR&g721vfb_3f`Ol?p`mi zdh5ac2X8$1h(nG$WZ;m}o6b10cGM4!{n@eqdF%y)UmpC{;EusR9%>GKZ0OdZZx1~` z^qS#ghBptNGyJ*X2Zx^<-fhEgH>@peEHny#Rk*pZ{={#c_{fP*oVe#n-`sfM$hwiE zM?SjgxryB-51Tw@@|?-XCwENlKK0tEH%&FBwoaWh_5P`gr#?D$<YGy!OnrOm;i>OTJwEllsn=}Yu=$?Nzu&yu^fjk_^R%whSDn7!=?9*E z=II|g#Ju}o7Kmw&s1M^*2QOCb=Dnc zty)-KxOU;@g(GWAwg0aDPwg#>Z(H29_`$`mEk3dMmd2@#Qsc75&5bWLzR}1p?YH!X zr7dT#YHn_RqxqZW?ya@$6Wc#&zkNCAI%l_Ue*hB&|Igj+SL!-%w>1|LZlLRe-PXYc zF5Y$FZUc-9y6%6?(ywux9k>TxbBVehe9iUhdgwL(02ifr_%+{B*O{xn^y;qQ)xgcH z`e$_&S3Rq)l66&9?S>P$6mM>o$)&o=aVElu+@*K>+sdjsO!kp zzg5@Kt8;kWh^ThV>es64*wy>OwJY*FZuJ}C!jmCg$FF|7hMur`N?pCHYwGG>{g>(* zT>V*g4RoEi`d5G2h5OC}UFWaPA1JO1R=+`A7p^`*UC-}xE8fr99r0e+=PT^mwd=)w z9)~MLxxZMmdoOG}2z_qND!6iRJ-_B4b_HE8ta*#NUR=|wu9w#Q`-`|X9=!U!NKP%o zKY};(zm45^e^>v~A82B)H{JvuuMWvSlMDG?AG~URMJMuEpNZcPd?OQ&wdzl@^7(A; z*2}Z-8-n-aRTcT?*K+H{o|Ee(Uf%48OPIJ%rI<6KkGT(ta<~wl1{Fk_2z5}<*ci?XM4%{r?fqUgI;a2$$+$rCI8|6E2pL_>y zlkdP?@*TKIz61BjciV=8 zxG%l~x5anhuJ{hz6yJe+;yZ9ld~agX~z{N8}yLHPX{eh1_CM*I%J?@jm} zir+f?4#V%w_#KYl5%?X6-%K`zqzh0T_5h+ zio3h-#m(K1_W|6|{W)&v z{v7vne~#O^dv<*WziaXPEPmIa{@3GX_YL^n*j2}RcnJ@cKMD%3#{j{#8*dH@F|Uri1GT_v?Dc(0*MX!S5#g?!|8he!C9u*L4Jb zBlxxPy9&R5#P3=Bx;E_B^%8!sE$r9TkKbANU4Y+b3e&+|n-;qco?Pj=esVha+T`cL zm+{+W>gKMaH{aH^W%FHKw``sc?mgvSqEDW7%&R6&pAH^5yE6MoD1 zT{(MO*PW%su9r$TcRf_TW0$AP(|G%OI{3iczeK;8yRGY~>SM3E=d9bh?m25Z_>Z$b zx#q-$>EH|a-G^UeX*&2ge)lYWa?LxM1N&`j-nr{b$ZMC@&0YV|zGIh<4DE_}5kgkr zf9ppY<>gxCZNW&j)NHgGTiWZUtMzhYTdQ}h(BCLm#)_qdbrbWIT5VmqRtpMDP1Jz=!F}L&R5~n2zMwcpeO~e^Y6t|j8ybK4oR_bj{A+h_HTkXbT^<5Re z-2O(r-E7n}_KC}jOB<`LcA;Ha>~GX+l~TLfsK4{@o!4%%*jkt^HiNNdW2w??uS~QX z%?f4F+Ic!5oK3aTLXv=yimO&yE>j7P$L?KPnrc;=AbX{jh}pYbt~L_5{$j0CFZ(s+ zO#2&)i_7(DsYs1YCTT1#Ew?LP<1|UVT`aY2WFjN{C-z#*1jiewY^|0mnaDyN*={Lz z2z3pYELxiy?dle-qYKnh8l~k$ba%3x@sR{(cx)npDU^|}+Ft2^2D!IZ%cbZq|#*ZrE5{X)L$LifuGDN!yLp`a+`IkxIE*OyOFsba5lgt!gO|6EsTJYHYsI zP7VVaL&MF+@=_u>;c4_I(BqX-qgk$$CpRYoCMv~dX+DW0Zji)*b8IU%lXaU|sV7@N zQz?;nGw7de!RAH{9WHZaboMMvQ*kpzX*f6Pj~-4 z>!9HCiokfd{wLKN+v)?AR=Zl~Db-(WSLPbc6-nJ&E>AWKeE(NWaFv|YoQgOCgt5Q9KWKd}yl#WGrUQoEyta6Ka)Y^DnKxXVC95!7i zgUN`*rEupCHELiAt%>56N}Pb=li-2MmTDc%0#Ef56$%4H-x#ic<3tAbq#;F0e!{A@ zR8eqH@N(p#TCA6O@b7e`HiO%&;zNxl)~Eva60KLg&1O+Ysq@-lFxhC-Fgj)A1rvq- z4TVjULtb*v3F>jK8>_R;B1XO|gIVVg)(V;s1)F()k-K_g9&DoAS8XpAmo$+yKITF0 z)J=r}>31!u4gsg%y3xlV6u8+$yICnN29Q_kW$BH=c(pX&Kfes_%lS;z7ih+MQEdIB zKW$QjPa^so{k39?NXaZw`wJ8`2?~-?r{E5Fo9)TVmFCI>m>!R&0(-}bO)UL^?-?o9 zu}}afrFqdzNE&6!7?gF82`D_Zf4*3stI(7MJ7hO6!YeE+nH-aR5|ecibHCo!!IomA z{qvR5LSJKh&|7IXhKX#*VyV&MzL8?eTtaUXpA6yZ3~nz~c%H`@iZ{<&GJd?u`|?5} zJHK_wq9km*QZFu6{4kbgcNmG}%x`4bW zV=nt`IWi~|>X1^E#=>hT<6u*9Yjuv-;Ej#BfofCa`G7|qF+UkklFsy;neuTV0$I^Q zNlU+{e>kM4gv8^F_fH3eaS;f^!^4c3>1LHAY{m&y#Jx$R7?E)`fLiVgH^`dOCeb?i z+{z3c#;r$YNF=D68e&Ryr6L+G(nTT}m4*2}A;dM2Xn4Awl!3~0SM`uvYuUe*ENI=a z9wCD;N7od^LhCDM2bmR?i*QRTd+nOazP=5*!Y1h_WKEW7R6FN6wm~VAS(*SIN1l+R)J=4e>qs+fJ4OHl3C5s3LjrfHAZU{c zgldXtVR#64D9?IcH+1d_w-{?wp{c6WFO$KnrJT%m?Rcf#tX8%bYf?Aq4;xDCtJv0{ zf(YcE&cTvVe-crU?i4vsJ>DSiC#kB^EY5<-u~y}U6|}~b@lip)=ZguW(#9Cdw9e}d zMaeQTFg@aiQ?WT$g#v?aG$O%Zo$3Sb)mmu7e#Q1DO)rHRA38S9z zjPj<4nMESg_SdSV1%HmjIw>{Oq*rAPb$R|lE4<+bW6=1(I(dZ}YAnMx!vY>Sb#b}Y zwzE_Hw(oh$TA#}0hRi&O47&i^kNG{3$<6sd$xmHdf!d~P%6Mgt5Rk`BKz2ll*W{{W zuA}0CELmC!((42f#OzgKp|Un9n#s-zMFW8CPQ(Jp(gf3z8k6LYGaspeDDWk|Rsh{v zY(fLD0+HQEI2$ZI#)0aoSi;sEW50=8Y(%MItBg`95X%cngFVAqSDZbCXP##>kzpy_ z5KI_L2-`krdV)_X~zdRQOIYKs);4|gv!ij1b9<8k-2DDjeU>N zW=!j4+c)X zi2t@OWEM7fo20i5E~0KW_~Tfzyq1z5{+YxZml%8kr;^yn2Z2} z(^w65R<@8%6bi$AL(aBiO10dC6)A(|T2fJHhOMYtlXRR37u1D=xR*(bWMCc>OO=u< ztxyiM*Cd(5F*uV_*&RvD5{;D+O-NW1QBl%`GK5T!bRpS{VP$GAlYwwUOoxTpUrik` zH0>Hpu(*q&+MH$G*@E7Wh;pK!J+t64$xq88eYOf4{zmF?{;8E2xh zR0O+iq{aU6B8>jR7MKks=VBt9=POgnuAOyA@yK`_98a|+YoA+DMljVj);giaM0=$M z7N6iQW?o4goddBA4Vn%-+GG-$Y2uN}mvNlUf1ui0sufq5jwVs>9E_);=~=w7HZdjt31m1A; zj6_fs7O*5UcNZ?~H8NSe(by6#B@&SynX+j(r7j}{jStdS3b0}G;Ew4qaVqUpTI0m) zSkP!J1=IC1`lK{asnI~I=wx6Kc5r*LL9{%8lNj2|Jk&MAtwuCL)%Yl)u;s!e(_u>y z1*UjT-1cskF)t<$VbeKGbYrOJ5MAhyz~67EBs zCQm*#f;xp0lt3NYm8`HKY}NQ;9H|fEl`Rn9>)2#X_TWgRzMP5VMZue^)~?uFf)3vz z8zhVp_4ZiXu>_rH(hWiZ75g9vL)i@$Ti8RaRc8a4i>eP`x6SOax7H1l>VYjy*a8d^ z+6x=#MI|L&h6O@DnI9n|cpb?fIAB0F3kZ)a54ikgaX#DzLlG(^%unu)Qx<46B)_u-TNj9waCjh#bcd zqh*Q;>x8Uw4#2e!Er@BDO-#0Jjpl+Ol-5pJSx_LE!J|1A=(x|Mqfyu(8^0D;)s4X@UA6-VJ1O6*wFl{3Xs3_VuhAl8XSb)pw&cP9v0?=+KT5N zWoct{A%KJF#>0yC%wvcOyq1hI@(2@Cw1A*)wxL$R!bE5L7<9n_)Ng<`4naI-r$of% z*1S%0_%K$*ObK^F_NGL#6~;UHH7#T#Q~7`Baw4?O7sL|UCYw(HcdI;ag7KPaX7 zndH6~p|Iv2l4fXl@u{tu=ytK$ z#-74*u_or0!Ft*EjuaPYuSvEa(ScNDlMlSoEo$V0-y^_eV-5>{nUGRNK6C*=1w%)f zVwHz(hZV$^ld-58E@Ze`v0R=>W1DQ7%m|pPv}X#f@rp3DpcVI0Xg_R)Z5lFA)X2bz z8H$OBl3^AB$nN7Tnc2ZSBpjM}`WwDIvoc9>MRkcp4tWZ-- zj9^Ju7->*Ig?Ub8btblJuAhhQ&-LRRL7SPs;Y=%#0Z4GD1nW~(O|?4}gEr*I%$reo z%Mn771sjU3d6r6odF$G=T&t;|Le1(eoxO~$QxaYa1Kd#Jk9uT|R|bx?jH5nH4kpdM zL}%X!Z>3cBK;TAyNC4K`VqGJ_O;%Z(n~pfc*(I%P2g)HP55rQq_?K3i)w%h0fJLJ+ z3CV{GB9F+Jn28im5NH(SbBDlw3k)g_LGl2J#2$t_%J~Zr7@B?rh%GovXi_-SjFN3& zxk5#Akzg^_O{+UNooX;_gr{mU+F0>goQhCxaFfrs3YbK0fi;++@l7_pr7iU+&%7{l7Xv{%nQUI92VFvNLrx-9N>F`)HLU|2}&hcLoykY_h% znT@mHBM}&*EzECQV<9+6g&K$GPhOW7Y!H*xCC@LCuFIkYdn3*S*2!fjfvG_v zgw-agH8w_Oh#Mk>)?mHVTv;+BqR=8j&FOHkJ~OVQ39UlCqytS6rtFF3C2x2YT4Pm+ zr8we8O@Sc-jRr|I4e@k!impUbE3d55fC+3cPBtd7309HGS7^zJC`p7RsF$a&bRQ*T zyMdiqgt5bwJR$~BRn%%`Gm?<8Vtf7-LpBwgI7(tux;{bySy>YfddHUPcAEwxq+Kml z!ANi>o7;-CS%rJJM6t0(lE)1m0P$#&AT__( zOx0*abqTLvqn_BSZTuKv>TTi#5~EpdV531=Ii?;vNFU2K z0M(uwj!aRp)5dv-7wZPqK4PS(`K#*&!`&vU37BE zP$Y46hy{&D^ka@`eVt?TUZIK1p6s~ZsRoMed9&k-jKlO+XNP#C?npFtb%7`=#EKteti0Z;;(H4+oL3(&+x-n+zp^S7tzBF%Qm5EsR4MXMQ6eL=PgN*#TlI-N zR(0|e8Z7QcWisj#2{{Q>iBV2XBCn`O^jR2r+SWU4bZ zG^WZBR=UVnVXVRe%L=s&ij3(?U_7;@&`PT;ozxXE(ja|8O(BG*qFD8Wq$H!7klU#x z*IIJi6dvQIi>I0NQ=&25)znB13J;)33)~OwWaQaTd?`6-kh=R!>oeB@B z7*@St)q(&ATa_Y1ov^9|RoYV{ScS+^AL6P*N^P(zLtF(2;$Br1;>fs~fUu;BpeQD< zx>+?~CBUi$zDi&;0NCF|FJO8YHNeOOL`!f96}vsr-xKp;^|dMhXENc$eNWU+iurL7 zKPKL@NNg4g7VABc-ihFJRY_m+pL~u|1ru6{ZNwwv2We8?z z+CnPSH&p;y5ZYzIQ^km;w!JS%E3n%Dpj0lC>7NE}XN=YY+mg{u(SoX##n!)Le zpl-yziJWHg!)0e!19nzJ)NUs=OVrAgZfa!wS+y}?v6@g7$z)!yU^jsb+>F4w)Wp8C z(ad4Hf%T3w+jf)K3dNCgLhLNGHbdnjtEeAgtWsRyy;+VkQB)mJQj6E>PtvzM1t@Rz z;wmHzaIxAEmo+s@)=F!Xu8pgSR|~HOUg@!tsVW1@XtAL~p#|F!EDzdh$YR(ZG=sx1 zdJdG0#$pYt4|sQ_f^7q;Hg?r0(_|=fDG3pqLZzt*;z&y%>_C7GR+`q1OD9UnWSd=H zGSro4hN{#HK0e5(vy;056NpObl^8Ui#LMi$QpZw;7BNE=OOa%I9W|06QZu!zI4W2K zQy|v*WZPWc$q>ogwK&mQ*EHUE_F74FfJ8^rgUjb}K|&fhEY3oK?m`@_w6(^zsU@0V z1-eYZy|)4O$4ZmpvUjY3?SYlaqHq*k;8`Zi4ha!T;pHvHh(|KA*A>powD)VoBBNKE zbWOZkxEjPupOBJWF*u%ND!?UjyDK}H*rF?MORVT4}Jn3?9s5- zU?w4AEzRR}14rzuHrw-MT#BVseNf+U7_H^chXk(Q*sqd!>M$)l5j2LA2}LkGT_e@{ro^G*_D#ab{ERj<7O~r`_D~ZwP6pU=a2&0)ki<3< zi1}&_yhS!9h&@7w8Nr5RJk|j1ZMUsqe{hkmm2{&r$rW2%jmJ?GEqitL(^Yio(maZ|RM_3=9plmWIPFg?I(Ke2?#2v%j zNDOpHz%axYYmRCVe_?Z7(Wcm%C(vHq;~|OKrvu~lkB7S!B=N2dQayia@u=1W@sR?l zeTye?O)NE*TdtcauFpm$Cr_Om7>MUEU72N$k~EjF34@=Bq0YyZo?eeJTNcbC%KBW+ zmKhr+Wd=^d&(u%il=KO-NB4{nNAyIXP&|cXavQ9hj|M|?lF4Eau4!oo+h6p?T)$zg znM~DVsIdZ|TT{^(kFCHc}OyZ=D8H`CIy592` zlE;iF+%Tdf6EX~l*o@8@>Rg!3>lIjpnD^P?9mAS&V3AqL(@9gwsAM#R41i=f@|<4C zK$FB$d6KdFi!JNW*9^J5q-DKgbL~_(o?GXsucfNZMg;Q zmu}~ZwxIERycNuiJ=^U<7!0B}ap9c`GP%j%V2m8-)$LbaD@e*daU(y__xCBhNgaA~{GLz%NE zoJXOxsnVun)u=HYNVW$_jOj`3J%(}{*={4dfN1<28;8t27S544No@qDUyOc_%T&v# z0^L*)Np++O1-?wHhE$RdV%tWD&q?}PKRT7-h^I)KNd0!>ABL*2Dih)<4oGt%kpu;eI@kMP9kmeGtmFgmJ}BRVyjlL#}CW24xOU>f`z z8{2dg@_2W&WH0EUqu+SrsZD|AsF3HUi?X~tcqMqbdpX1Da`kdRyLkqaC~9+~I`^&6 z=A|_kV~ql%tTa6o-&asWJIw*UZ>?t}$yz0gq^>gX)25sHa3INAp3TV&&1nO)-%5R= zRxNwQlNg}8yG&0oa90s?C6+???g^flsupn|eaXeaK=M+M1n0uABU7Af7MEc2H_e3! zzJ-keHVb=J@Nqo5N%i)uJ;uJqU6-i!WCaFsV@Bfb47w`-er#>JW}B6&j)9IHMyi1$ zJ+T~*>~bXpg!0MllbYN@<^e-ukGv_;dSpf4D@hDFvqw+(FovZDJ%?VFDNUaoC+`ZW5aejbAhKGx9TW z8BncyAwspWEyZOS&p@S4cPIEVfFB8iNUsR^Slld>)Ho@SJUvNu;y~2KJc8MW3kqh1 zPotA%r(?uxkq$TY@j|d%@u}lvRSbS7g_4p$KZETtclXGSQ8~>zFSIWM4|BLnE9J3X>=@}F`uV!53*471zmllGz%3JVS%ES(&y=UdETo%mgHIGia0DNO1`>1lL8W*&{g93$dOA6!v4@ z(=}U66;Dl>z=W#diBz>k<5H_GQ0z+9gOTw%Fv^sVEo$7&r^4BlOwP!7az>ft%ILt| z4d<{9KPwaHaxxgos5ikjm}PjA#juMs$}b}w>Pkz8QMn%0OyMkCheAw}%u-BXq8Kxn z{9+8QLop^evltVYEXItoSUCpSsUQ=cU6KjqqWtMTfT@mOELVSu$7gF0_xh>gA+8p2 zJe6;nZ5@6#CeUSIFr3u11Mk-6x0EiD_x4q)f-u zR7^}mI|beJqZ!;+Ys~Ug#^|G0QLH*&XpL0NF*d_k_|UG3uT%9Z9)2<&Je9^NIXgeA zST<<1$-*Ybxf*vJ%$BZ}13UtN4LIZB`c`qhcuAFYzMSN48p9f7-$R|T~LPr7YF+G9E49r{bjdX(hs~Vl1|z1IleIcOaE&CpiCvoWpv@*0PYWR$*o(q+Y0%9uCftl%yhQZ@G7$!E_7`3fleqycaBfZBGHNCM$l1UNIj@DA=A`FJcMQ?{7*4ky=^rR?9UzDm%Q#!C6*gRu!{8||m((f?&mx`} zY19p6fgmN0CL2zYngq;4rjS$VBDotMz5dwXLEy$kYD|EE>Eje; zJU9%xLF?|11JfJ?raC$UW%`~biRpK8+dd!Q{&szx>SwQyxqmzLt?k!XpC6&?DU?j5>p1VL(>{8xV}=!Y?)I^c6L}h9V(-vuzoGbZ>xc8?ylleX`E`` zRvyJmu6XN%^Hm!pk3L3#?u{*lI{xsBR*XZzIMw5qBN$r}nG+Qi%~8{wIs#j)bc1L zRB{w@)Nzzis_%`W3B5^ZpL?uB0R>!@M3qoo%Mx*m&rBh@-CyKq7hQ}C{W@GnpX zJQn?>LA;tUhk-U{J^{jED!F=j!8n z7%Y}}9KXXV!Dxu2RSlpEM)S=E?%d*eT$j)Y?Q~d}8?03^gz$)n^UhPg&*gEAW9H-sp{vMCdRT`W2a&iQ!+EJ5OhJ%gk6s>c^l{YXwM zC2SwR2|))eIkEF5le>_32K``k&0=gfh^sDW7+6%gVgCgBvRFd~)Kwgfb_QU+k9nMm z0A@Cc_hsa4;{dL5Lp?aH(GVk!=TBDF3yRm4-;CkH22UvrnU#%d0@H4TY(jn2qL9Kz zB=h&f5(Q{B?)a~X%a~3XabR{%%wh2@6~B^-vxG8b*sTK}(Wy*|94``Ft|eE}*)@oB z0CO^NJ%2JgFDN6o)WG2AyferxVy|t-5OOd>L*1$3Bub(v+PmNAHl&A~Kb77E73k$E zA*`1mBWKw0>y=YHJ&XE+lO#hjOG`%TRKlqpOYlNEm*7Q;moSXez{Jn+pcK>G^Cxrj zf;#45d#f-pDpnUF2dLjlbv7d{57lU zK2o$%<28q{39bXnt}*ud2-_Ci_yW6k>yqcUamFeQ+}0FXgPM%fO8B-ReK4TJJMXZg zcsXh$iXuy~lg{97r`Ym?EY_LAl5*5`%ey|D^C z6m4wU^A3?D?SvN=r!B;3dU=AB3;Xa)0+-4xo+O?hZbgvs!8|OiqGGdH#}Np83=akg zd&hWs9>#*cB4(yOc;h3uop$6HhhG(gbLG1QE^tmiiNm@?8LOY7c+`tKw(9Xjq!rIN zxUM8<%1Y-gT{!w-S3JKW9@^DJRyKcCGiv~^XuikK%g1|}#a1yBC$)mb0@A6?%4MSY ztCqp>isgHd=c*&rP#;ti>p***r+(Wy{F*3%e1jGHsPVNx15@oDHit@5_OA6kR zwkuJrDh{oyju$bJQ*ybGJd@Z|?#T#Qxq3^4m#c@(&eed7vM0rk2xjx7k4J z&{9kZUhXF6c&?gbJU6O4a=>F%C3{aHfz(jUCC-l@4{0&D#5<3?M0@eR|AkM zs(R>DUpnA4c*X$ABwvb=w&2DxmQO!A4%`sRnE*~+#_b?HmB0yNH8=%Zi(Jkaq}>{= zPkzNymCmZLUs+R8zmi%TQ^8o}Y{hJ)5*1=<%1vdAQKKfngo$HQqO#E{sy&7!#a_!C zT&lLf-mMi1Z$eB?^qa1wY@xREm%8ZXb=Zv|E$Z81DsbT><>cmgf(-+4KTKt?s9?XO zSfL82bpw1dmHi54;OU{YA-xC6RmP_;_!QjU~-NhQEEo!feFFqPUGa6HK|#jGz;bF#4+%k~f*;qDL$cgdxkQ zWhby6(!E+4MIa}0O@G)@_6EHs%RiC33$bVmw%)EHY2i%gP>T|5}s!>LYRBVaKV+Bi#HI3sF za?SpJCK>N@ZK&`oyA+T8*mIOxv2VIs)^iwclfSox?kcIA3yW|tQ$E2|u82hO7umzFAJzUag)1$S>W@V0*}K#?>Tb(h|bNt}v> z9fP{Vz1)gJuegZC®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 literal 0 HcmV?d00001 diff --git a/trunk/Libraries/NHibernate.Search.dll b/trunk/Libraries/NHibernate.Search.dll new file mode 100644 index 0000000000000000000000000000000000000000..6f190ecc8cb8a4a5f8c71fcd8a9478fe853ba157 GIT binary patch literal 145920 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%0DP+ zqUlDIcOdl;1NjKjO-(l=y`t$BlwXO|Gh3Q^kiWU97x|r%?rQ2s{+6b_NN;UQBJFAV zDAJEL4In+-G=%n(NHjN@Z-t;k~_cYxV83KNq zU=RLZt$UGv7heVN>*jl{A4U2`>+d7|v)1R4zSX(~>HpFC9OU2+TT4j)3N0TsKSIk# z&Hs(xLw?l!XS96O{4H8OYTm_Y>tH=^G1oz2?uSMDfs4B@zUktgi@$mCpI!Xb#7l{H z6DvA8I<|H6cD&H>CmrAH`1_8FHf-GRp$!K%+`i%PhVc#48}b{<8~$d)-);EGhL%g# zUGl+8zIVynm$Y@R>Aa|OW9NrDcXdA6dCA7-HlE)2#~ZJ@^plr9c6?!59dSN3e)zxnfmG^yY~z^ILvp%jdWJ`j-D`%U8DizgxC^=&27i zUG?ujylw0CTW{I=g{@C-{r#|7tN01S!T+z_ylu-?pj>N4&5N*97PtE=X~)s{$NwVc4{+Ogal5Z-5|C8HQ!>svpX{Eax15dMEFpHo->FyK-^Z0NbH=cR=6X1bzAu{Oy50+>5_o zfIiFMR@uBc0bTnAXxdZIv!_5;ZJ?MT=+-oc#qGKu%Q`NR&kGHH>k7{o!uQhhtL*3J z?dOB?*^Cic-;8m!-EWwGDzNT|=<{_EeZIQ6PuALPKgXK2J|&;c<^}utNA~j@_Vb(a zY0R7U^FP?nzp>-IgU_o>`QlUN`x`!IdM^1j{C&=3@Od}>K6A+f<{MY6YySR*_4v!; z?{55+@HdCQ`|$T^{Cy5>PMPm~_yKbUe`f0gX7yHha`<}``DgIi(e*jA1Ah};O|Y?= z@z)BRNAV~B?Hnki=W>}{W^iA2JX6f4%9*a=OsY6B-IdPeOmfd$E;o`nQNC?1Q=G4F zWNPY@Gqbt+HeK3xPc~Q16hE42FiMx!8TJpFCHEIn=}fV~fc^QYY(8TK3${fP1E})na)#bO_ zohoJ0#!l^*HdumRS2D?AOp>2+P>mcf+>x5EDI3mWVHw+?extOaYxf*5oXwltQ@Od! z$o#DB0E8S!6-ybje{Ld^&+JZ3+?~m%u_tqx1I5Bbrc^34!m(}FMLcwAS3oM1VOQN? zRjwx4n@g2S3RhodGMmqqvxWT99lAn|gj(#z4rI#H1>jRi2W?DpaNlrmAwQX&>Mi7Q znTaKa?VX%5ArO49^6AWpOxnkNxJ^(9Y^7#0AgQ1T0A%)MavuurPg1y4@<$1dn5}MKNP<+gR1AycH6BC(P!HU0(;Y``?y})>2t~izH z$>nrTDH=kLne088P*KvA6+wv*3R8_3NmkxvTgvplJW$Xq&XT%;y{U<55V}90W4I)@ zrT^uQqRfKHHaJ@NC9!h`UUhBX6OAO=XHBsnXq;G`up4nHs5+6d8ee0x_{C zo5`geHw_f$8t*IG|B|w%Wn=yD=ODWb7Rs`WOgbQk;o)5BSjGp}$2!Od)7HwzaMAEY z5yBufp34A}bGdSFsXhA& z6LTD;{{$G5vwMA@P%4KoOS}qE4bSH%rh$#@Jt{Ta znvx;eJUjt`m+rxK%-@4?2Ma^9^;oSV7Keqp3hG(WUbY2kL^cZu)TIhyGV9@lW(;?aogb}7Gft$)Dt2Zr# zj$(SJ1#)FHGc-;SX609CSpk5%3n1>`@nFwDJ-{S*iit(i)=e3u{ZieTfA!qEq;xsK7*0-092*C-cQcA!n@TBe46<8XjuDvu+vJ(d8f-n2Gn`F=g zngEn6qaH|Qi$_pN!i9?hIg3h#Bs^xgfeBC>thY<8pCsj}O6Nru4=a-S5)8x!6^CZi zSj(b{ByI9k4iXqpVKHRxIV?z?I9#xxgBj?x`Vkg4nkgJxJV|YnMsN@_W<-!BLM&`T z_ZG7-YN!R1uxovl2*j6W3nhVD8NF-JH*uNmQY$K~(tMoLb#MY0dlq_Jq{l+Y4{0zc zkwvO2fS^mXMJXGo4XPYfS)IowED1qA6+dl4709 zD?gwhkarN5#8EAOV?x2)qEd7ePSx2t@IdN>K2Thi_hi830@Px>OcshWw3BIg38Gj4 z#z&|6LM@STV9H{1q22cvXp@>;VaiN8KhHXhC8NvAiRY^M33`?pX!A@dTgyX>3Iaw2 zC}2C=u_vD%o*Q?g6a{Vp2ySrMLSQD8@=_*C*Cd2eZ697|X(^*3geZ+y*f@x9Uck9c zfiY92ORTs+Mwq=Br+M}lChkUr1_%2f4fjxzC#54_mC$vSAxJiW|IPJgrZn!B_j#Jf+5q()%PErOXUbl7OpH^CfL8${3wBPBuu2rG-GxT4ejsm88m%8 zBmHB2J)@f0H+1Nr<_41c_a}$@dxr-5T*2U>k$#&W8pID-OV@Cd(f%Iv9y+vpf4|wY zf2d~!fryd*z5NHx{-MFWW_aJwLEO?9Ihe%5-b2YgGtO8{GOxx;2|KJ?tR}ly1bgQo z8Z?(FQ_+fDXOg8sMBGHSVgGzu;U)zSvw?-0N2o$DILHh!C>fHA-@as|Ec6U!BhOi> zcrY{RLMh4Kxl*|><10ts2gCe+p~1cc58;{;;S2>{LQ@W8;6xPFV5G2tN5{sJk!~To zwq~^@?08_4_ZN$>wbeQsDZqDx%>gHgA0q`VHb4)8Bgy=+!rl1jDM4bZ;4zZ#P33aq zh=Q5j8H5pSv;I76R_Sn*kuh^{E-${0o%@MJEuy#|>TQzooK-;ilFKD}F6PFsHVQ)@pofodcW*xVK&ZLx1h2(q^V6lc6 znNu3sslDqKy;G>9zSs>`Un3*e7t1tt#TMqQ&}qtf=Hm*pknyn;V$Y^($C#YX0YxB?R_V-D zmpB+3u-TY9XRwnIEjGJTKkIOBtH)EN%m8>jHRaC*QHAg=k8O%-&`Tt-=1I|3223-6 z2}I0jsDYX0j!Dc+>cjva;X9W2uzPNDGJ}w&JOhCx+Zcs`Wc1P-(~>|iF74p&hEhdm<~oHKO|)sz(5a`(J|4aVFH zVM>v1Bbywp=6Q|>X{E4n4dXMD%FoRjdX*tB*bL=^5~&P%!nRUNq%!1%+DdB`_t@Zp z`r4LHDFR%ut0Z&+uxj1f8u!=^>B<5px~`M&F8f_rvSf#)zz%hA3kZsIDL^$OmtD}} zN^WgPUh>g8tyXV}?T8_4qj?TQMNjG4xTSgowtHAE+jCpz71PXjAy`aM({1H-SAv`#nLu|fB zrVc~xoMc<(MgZdNe1`f=1N#RuMf%=CvEU{QN`f-8?l6lj1#Qy8?z^6IiP|0;Gox6d z8Gw42Hhrmiv#&6R$7~*+BR+DuY)RvIg9S4J+Zy3}FvFpIkRL1z0s>*~x>c7TOK|Kc zf$7FA*dU$OqhioQ!x4n<84?P`hfUg<2WDcfSj^yrB})@UD3>Nh(NIAm<-u18i^4I8 zw7?WWXNO$r2CO+E-;;%#z>T3r>W51MmrIx?DBFj|jtsC*D~%R-L6QE7euX3hnAbE2|sBkXeN>VV5a&Qj8aH3Uwl=vvjL9 zh|7Ubr}v63b{}rt0d+iWsV|cK7H`PR3nT08wP$@gq>a%QMo7U zv$scrkdno5C}c5wGzadQfgm!-S}W8KJ&Q4i8&ndog)#`5V7pz^K#_z3YbKbUVlg!@ zvB@k{KUov<{(uW+QBzq7f_Np+KT$TlMIJmTf)Jbyt^rJeEQP~EE_L`hoYz5I#M=Rb zk#Pc9GRGy>%P=A?Mx~uhfb^aXos;X4gG7Fuc`bq%JdO1UPIW*0N9#aPIcuRI!h3}s8caf66c2`96ql8vQu2;Csgp*faW zYG$F$vNTx=>_!zw;ewsgy^fK0>HziS;nC`96%;#nxTO;`xL#oJH^{)SZY?hzP-}}F zWP74$7(#0%b?3nT!C|(r2Rx$Q4;BhAXvs$hQZRO`2*apdcS?bzp);o%+q9-!!fqi` zIS7nm+p$IEc}`eY3hS8*5Ma0%2R&@V6hpK5(!dm=7Qk}8gtNo6s-HzlWp@TT7%l_t zXt7FqCLzm0&u;7N7{sQ{;#f3vy8^;LR~S#_oUD^A-dkG)Ru$nET*(l-50U{<1;aa{ z0SCZA5;M-f5wkZnD>}!;j24Z(|4?uLAfomCdwLG-A2Igvz`_1K$vcfL9qUUT?C%{J zIygFZ;NZ~h$v#Bi2l@~0?H}9I!(zkOs221M^$yG9?n8U_^dIc+85DM z{RamSP3`MvOcf8e_v|;jdq#TqnURA%gToj#IW&mie$T-^1op=e-^Y={-cd8S`{3Bn zo-wHy_U&t^b6}!ee}4&P7rm2ubCwthmy%lORrOVi2b!=%>qo_92 zs6pjCM#`SEHsA=0#ISf26t=X*!bp{csBvS}2ne|zlY2AehJ}sQDq3p=BE9ykk_c?H z3u$r z^P4wX)c`Y@P#&HY!`tEL2PdylG2zNRxw(?BqHt1}!flOltS_$|$P@hueS*v4a_RzF zGpz)MD9?i_MMR5pu$M6*z?X$lRW$wZp33Mwo6An98BOKto^e|<^l|_$5Bm2SLKc!N zA-GtmIPs6JDU5JCL{4p`P!{D^2T$bv;7Qz3zg6(WR>6~tCpr0{*bLL05M~HvYym$M zAtI>}y-0Lg_t26f^_d`x(=9GbhIm2gKDa?jOb6yYP;G5ae^-@ShjH80Fc~V^5TyN( zs54!9TqeN{kWdSHiQpFA&kS#h9PlM2l^6p~bP<7=rcCP9hzN@Xk#gu6hCKG~=;XNiHC+3~O)XS^9)_B^V%^&RwOe3f<|H=-O(4M*c1a*<{kCLS| z%hiPdq+~SSBg4I}7vz1iJ6244Hammzi5R_ z>ix1M*)zlgbyRNm-4SMp0xk80DQ_`_)ohZ51K#6AE_Kg68otVuh9)H*Gev%oa^Va= zXAiZYVVz^e`p_dgisbi)VuRWe9XQmfwmK(dGm|=@^doMO?f@3#U*xGRw)Z}Hl}ED} zU2J7itZysJ9-{#NVAk%zAz`SW)h%pqjmq8g!T>1Iy9Rt3D%$IMJ;f=xH7$yuL4BZB z>IWfEdi*{GRWhPqZE(szJUq51*}uPU zuxFq@h=ZYtHEXhI8<4=6-7F0H@YNK*&-=uR=YlmLh!KqEoUQcFoC;(hg7>1!^ zv)sr~6D&9U$Xbb;`G|)0g)qV~dPWEV<-86h(Vm_OGQJoCifUafg+lmwij3r+Pp~$4 zVx9C-@us1jngX_P1PexB_s}D2Ew!`8W?AafG|T-5X>VWgtQXoc#FDk_8>UsZ4nHH* zO93I!*NM8F{+jEn!t1TC4OUxUr|YdRck8XMai)CT;_I7+)>c;;TB=5ng`vU=@sIkk zX?9y2RQ_9SbwJRK@nwOv4+L=;m6F^7%K#E)atcUvsenLj<3H7b9j-Jyz%b%oO4wn% z(Tk$al0iq(Iwkw=d3)18c@Sd2-kL28jG{k87Zd%8FkgLd%ci~|W?m>yBo)u1)4dT1OM>ZJcF zhnt~zrUpS7Fts@#9pR*)Smh-fXl@wR7EmCDlAl-63Ti~xMa{ITzB`-wv+gMtW*oWu zP(qbu)8cxFs|*v3+EbvjFf3}}-Z7ii6PGmJbe+bbF0L(=`}HP)2;V*_r#R9axn!iK z73*qCv}JACB+naQS&$e+EBTfwjw0|{3l@UQgS;)JxssXmugM=3KW5gQZQyF7-u1>A zdfCYNs?fN&WXc~PTN%|%Q}yBKHFU|@OpNR4hw!w(C1$GRR8<7VwgFD--zF<&%5%lM z^qR@=DlS}zY1|kq>&1AdZxBS6yJbG)Hk6}ghaL#y;+VXajUW#$c-qUfMMXw-Do>wK zZ|qY%mVWSc2alf+7y&26q;U7f|Dv&Oc7ZBi=x> za>O3xsBZ-Radts@8lhAFu*C9)yEP|AorPKd1bJvKa6ru65LUQj$ly&dD$OH`7gLxk z4^7f&QjXxcBQ6&BM=sbgcqSU^^Y4e4TqZvSs->V(TVzH9dRW_}9Jt~dcD2?%?>Mca9^*GMjS^YH~vaZ0dM;ff&f_sU;3#KjIdKq$?r z4I{?`+LEdb@<7)=Jd4Yjn2Okial%^>@ZqrOz6f{C3-+DzAXp74DJQE398;7`-j4u6 zL}O97!k*S3ov29V0EWZ?tqXV2zbMZSQD(yc=2l3I21^s-)@q?M+ngaMPglWi@wOvtaZkgQHAteo=S$jp|+o15kF5(pk` ze0`D1=S|8wtpc-Mv)>>qFDklAD%OMo%utgm1{{*-#0|*ueajMFZA1^UcKB6Yu#$SC zvMh`tB12PkU<50==yCg2=5%(PLfXEQZnd>EQM}6GSzuOR6Bt1{#_yBxZ4K*?>cD^^ zsF0XIN>8~}PADVf$4a3fC>p0d}7>CX6U!HAM6DIp$#htvEEW)79K^0 zugm~uIz6OB?MiY>PWBv2Vd=mQ)h)z^vGdtAvyrM=cIFe+w=EedD3qMo#ujm7>{w=y zH;O}VLBb3!U$Y(8pNn~YxqcGYh2-pCHUh>A1fMJ_iEH@Su6~tiZaaCPXkYBGmJ+Y# zV#m$F!g1fpl>zDsaO(qQ&VHk&E*#gdMG3+@@-i`%0*)UfZYMc4W_)hqB5APdn+bAj z0&j`XZ0SWbD%d!-6Ul6MfX@Mpg9TM|B!-Y@s*gZ~yzo0WJBt_4@Y<{Y1s*$b5r%hA zcBRM0wmGx}3-I4W4d1reIkIcCM%r~SpNG|FhS5-19N4?_f_NhuS2gv`336*) zxRZEGmgF_t9>ged!d%Gj0sG^G*>a!lBAO@|fsY}Z5*3SH4dZ1yX#f{W-&z|&;A|EW z2l7WQnNa#@33|)$$r50IwLsZJnIaJMWhQc|B9v5Cc}`C--1jJyeAw-aNj!Ivx58CQ z_>Vj5-Vob0PL@4^uPzh)QG~IP=jq4r!5m*G*OeAYzc= z4S{UwmvDBX*E{SD_24idnK%E$)dq)j`gJzAujj&{)JXPHAso|;;@HQgJt1X{lwr4+ zFEOx%3;O5^*aht+igPEZQO_J7^Qol7 zlyU~9F#`e*kuD|ho_V`~&o%E~pa?-iEn@g$U^iQh)V(O;&H-TN4^19S<)<=%z_t9O zCN_F&%%5Xuk*$aFox}TuLlcmyeD(9t{ysBs2(b@@F?sOouHiEx4c5eE-csOyh^H&K z>A?#&JaLp)ppxmKB3}i=SHn0%bOIN9)Ho+aRG-%2jwvz=%9B@POyh)y=e#IQH(}cD_YrKr>geRcU9cK&$ zyvM7w2I^ud5<+$lhC3#7f@D!cyqp5F!Vy8R_2OiO zZVI@tdiV_lG0)*7bm7ELzLN*?LNmVMj@!HNZa^I59~^)JmxyBX?z#U87_mACb42)1 z?@mGN$Q3HI8=i$chy27j4!ud?dg9H>Gm;3-cJX2sZ2bWG19Ni8SuihvJ+ZTe zI$0(@k_A{#tlxqXy<+>ny{kd8$HLyDVBFr>f zMYRH-FdST*p@b@-7|2t6A%gqH1NHz7V?|(Cvbw>oKWi&MXl9Ct=`mOsy6}f5-er_I zkQWXpI^jjhG9tbPoB0o5XFlkgD@j`=Ptbma9Pb!dn}}RiESLC&Y0!-Frn=S8LWJN9 z5nhDbx-nP|6)0jB!q!8Rz~;ml&OS?c%SK;7v)}B1Hh`9)-kpF~Z`ny7SHZKMl4|qi zTEO;PW(?57GA%$L%d`N=EYkvHv`h<7*D@`xU$(^!%eJ_YRw4XOF$tYc)Ub}ELKA9n zsS40LVIU;+d!RSeh3cKgcSV69_0pJqJ3u!}go(Q{3-Y#CeCa9n6=qWSGE9<%Wrk1* zS;Cnlswx=+2;Tb=(}w2q%s5`8;28dc%Lvh7O8ImOh4MKN%Q81^PvRR4liii?H&V3 z`5uq(_j@4t3fq*D&WeT}s5lKH;JQ)<2h95m$N8-k)}4TWkr(k`CLEWrj;dyRmtW0( z2~04trHAsVIfTQDd>KyB9#DXici;mUb@=#_2QO32We!2YGDW;afloX>h+13>H3Vapx$hbebxlQ5A8PlvqBX=hqFE7(lTt zg$%b}0s^EjeG(7AzW$P*atuU*2kT}h;q6f7^WaL+ja|T3ys*D})7>99 zKrO3-CzTXolGMY4E}V^Z<)=$qC#-lEiP3eU#IKIN@eqDfB8Bf7&mqX)Y0CIbgHHUS z!5p57aNRobJ>+xvU4#r;u|A7WeDe(4I`gq!^wZzgDWhfvbtmvSfqq$x!~R*c=#*Az zX)%XcaEO3kuF%;yDxb?T6VqArE8z!8dh13B!&KX^gkR1m0LmO7BOED=H-WO+b%gtv zI~uJzhfz{8Mz}3kltVcp{TOi)a1}5|{W@<#ndx5&TWnvD)k5pylVkC75~a*@2e<}e z(p=IBEI7<$1tT9u`M9ee>%=ci5Wn0JjxdMTTsueP9!^V5S}?(p34I2?!qkahQp(6U zS&J>#HrUrL{M^hS#v~;Ct)yA}U%*`4QO?0%QsUgiau!c{W4ejWyYW{5T!df``sMKd z2wLJ*G(2-Yr3t}PZ!Mm}d&^ao(I2mW*cpG>Y{M^`bjo@O5k~@zM0;co({wL>uI6Mv zCgKl35rsrc4!MAA!xMZAKbgV-@4}a@cOu`7JW(@%C6R!+!N)Oy)^0~Fk?OBY(O_)JjMXZvM z5(2lP6F;4j5ysLsWRkRwI?$-56SW2O;5h8>R_ZoGap1O5N07~I0?FLi4`_(FB6{=Z zxQKhQ4A(z(Hdsn~q&)?X3Y;*s%fl2Vq%Jck*yzH~!r)8}<53KB)stV(a?qX)CRy`v zFDT3jg=`JZDDr+Ls0xkfhd*29SS}~KNpVD>K`LVE)=8!$zQ{Tb>q~Kgtl@g@@_zhL z=xOg-QR=9GKdsh@aXA}w#!w?Tm!k8eU>}F!=($@UgI1IAD7Xl*`ADPjrZAsUP$zx} zh+NQU4Ac9w_x0!B!ZE_)i$W5&4@8DIAtxBCJaRzL9cDW+3yvJIJY_&WYdzVOl9&>4 z2Ft0{ed8fyuqU@*QZ|lbaXJ-KH(L=!Aym)wtfh!DmHP$(aajF18c?CE`|H+RKhXP~ zkl+L(6AY1oD+6U|R+E!wpl&#~S*fTa4Vfz!WBj<#!rd6t83BUtt^GirGZ03sc@Rja zT9ldF!dw?NRnDe-YgKQcc4_*Urpxfle!7iWktNKN>+|?oEy~BAzw(XTsQVb^do_=o z8mymFb(mSb6XY`kBFULu_!*2woI#Ay^imx}a#KUh^m0FGI?c;|Ia5M;o`k3LLoG(l zK(Z$9QWHAqVLsV|TAD5=MEcLl&e1?1rBEYKGO-8Eh*~+N#u4Em--nG0_MJrgVVOxK zx|(6iWR7y6gEo!W=i&4CAk-n&skzMzZ^OCo`z^7%#^Ni+rn zgzZHVt|FaCr4>fA$cZts!nA-vA$j$k{i5M(Yw<%1fxL;!#6lb?7W1gY8zq%z7KVmvTW zx#MaXIfGaCp0IK04n0>2bd7eNKP@^1TjB&p&zVR=y`y@X^j<58k}@~Zc@U8K{Bjv- zTB(q>8CSv`@5Y~#)8@wdHq`oIho^SaNMGD^(?bh|c7oC-i9+2A8tVw;Wv^&_Gs_jybzhGv%?9i06d; z($EsSP8wQnJz@R!KGt^a?HHMyMLB;i^T^&@)riuwz!(DxP8L}IWo3v%DxcwIP>@jd zDJ#2Z21PFgj{2#M5XY$pgk>lK4%!W1FADoPNWySgSaj7oIXa`cYB8}l9$OatF%^<@ zdMK2*R60tv%&n66IN%8@E4Ec7)_8oA89|SEe@u<)gjsj7ld`lJaN>mq3C&^^t+Ik{ zVxA0EE7$_@u9_n&%0PQG+GLJUyU7}dk{(+c^&lHf*}di-OUpXkH-=8yu5Yxrrt<0V zW-pc@jjTwb#L4q8afGe6#aDzgi3hY!(+y`wjN-)s$2Elr{IDWU)pe0Vv{S zIZJAz_c6xR2SDzKPGdF=tSmEULoaaFAA@V89#UIPWofO%TC|3%daxqmMv3*TZChm3 zw=|NW?_-o+?%oUp2TAB$;Z!U9GV7F?WFr`UmT?<WweuN6)0Ui@0)+ZC2pxxKA#E=n z)odCLLD#5-?CNC!+b-E=`0Q;00TlR3)L%}>kSkQ!UWt8VED%4H+%OQ%c8s`joz!T` zi!2Rs-+9Cy1H%-L)5fg020!4r4gZ@=KT5er^p(`-4(zeoUe3p&s!|)6GfZM$7dTLe zl{;u7stpLw`r3mv^Vg2#!U$9>++*4x3{{x5wKhg~T?u~2@~-7}EYQONCN)Z_yszr3 z5f;-Xa%Hd3D)FFJPCd;CMXc=w)UzRVW>%|zs<<#cjd-wx_B0Eo1^?Vd-Md;URa@Ac zSBndCccT#rXCN(99g+jcapVYE@4Av=-`NGxZyeeP)FzLEF?$6Yr^#a|cDOFM;bWxWGWD^N+tRK9db z9uzUd7De<^mzSV4Vrm`nVW2_d92zN5uF=?jeXwx(8NkukCk3r)8d38urkncB6jUFl zMi@rllxV``=lVJ61AMO(J*&k~*78v!>Rw_UO^{(%CqW*|N$fyYMVcVxZszWkg)EmQ zdP-dC)5Y*o`VeC0a;QuSScLM{$(|+P9$j7nxTr<_2#ckGlRL7rV~s|pUU9YrvD-+( zoEz2~#~6dPQ}YF@Z+t%Xvr1Kk(A?H&h3`jtI()f^r&(7oGpTO^d1*dEF%-6}=`5;f z3P&!-z)`g4NsV1XBRDj_rBPp%1UwXW4ioX#u>ZQDMROxUaULmi((WmqH&Xs<#5NGi zYO_)Iqs7Hs4`E$AC#1+gBaAMFx{+me03(KDE<%AVi~^XC5~s9dIJOU8hieKqmmF+5FR2GWwbs8PK@v8hpwTGK(y&}=!ER!Od^Atbv2 z2cvF?_jWWIX#|Rf@lbP|F1jA>JD-Q}Yy8JWws`y=MCynq#Ti|0Y7CA=y`l<{VFFT{ z;!jT{!(j@>u1rI(N$G`(H7R>i@6tPn%-(*?P5&Ys-w#9Ld=^5=fJWmH&9zI>nJW08 z*Bzl%;rG*FlQJwrdeKvTwH<#>P>r2!9PX;}R>1vkmGzRjAwT@wp|8Qtf5qO^jI)W@ z)zf=QqT18&LC~l~DOR|HPP0}`IF&g(tuj%Kmz!(ojph-c$%9r)W~=Ziuf5ct^lU}s zy9-`ZWXsj&YP4g#{U+IGXSi)enMz2F@y3 zxn}XL5!TZ0n-|}KR(){)!ktrgqSOp&#FHo1lw{%Pym~-R=DFxR`Bi0~tD$c}j+zG! z%vH-%lfMg>EpP6cYnE?Q>umytTb9Rd7uLXI>@i5ZNx{9wl*PYH(R6mtOYP3tMxd;t z)^Zr4^dtWK6Xov4I*huO5|ELsu^Ngo*Dl?IcYnredh#|5<1FSQ%k|>LtV#UOSt(=3 z@Mrs8zf@mp-x;(F_a*gOXXBQo`Z>#OOekKX5SrJTV?wcJ6EA(~HMq0jV@qwTv*6(B zMlHjzFIx9i;r7d{^_pT2l~2dQ#~Jzfy-*`6!Y;x*b|G-jThe` zqQ9mV2JaK$`=8K*yS;SOjE?Z~Bb!5w^x#tRseV1`Y}eUc4Nw0$>SEtWthCFPm(Gzb zwK}1ev*tm`zBbsXqlF#r+S60hLfn{ji+2LN*3deswdeO>4ek~iy|EhW@Rr~}#9cD2 z)n4?M=>Jeg>y@1#MhKXiZh{|OKSrbba+FOqeSf*}{U((KfrUxAMoq+WYS}=-x!W7m z1uiBw0-aMZcYvGmdoAc$e+x=>@RPl$W89ZkHua_Y=uRdv5~j!feP}_genh;eYae$?HEdg?FUO;kHpLn<1}q_(FV4{oNJtM&SD zuzJdC&ZD0y2ZFej*;{)eP_LVvo~Xy7p4pBI+$P(I-zdpQRooZqnLfZuTyh^~06D&N z(Ql#FbzliNy`&+nfF8}3L5!mN?8Z`CRrg<|ld?g#0`?SqW;(SGbB=|ZF0%#pgnw>^Wod6|T} zzWCOkQkfZEek|IGO7&+StIM6q%nbr&-3?M=Ef3UsO)7yFL$9#8@mxUD`P54POlj|u z6NCd~59v3t)Lobfdq2TW*S89^i?r(L!LHO=p0!q`qjj||=j_fCQ;g@p%Ud1D3P`mM zrzP-xN+H-Zo@H)6AiL@6I0pSTa+uyoqNS|5kNgqrhroJh>D!t0_FEDZeNOUhJ$H^V z?Hu-!7CPzFT;GTT+_?((g0O1@&UwuOWB2m*FJpK?;M)u}idfX@p>V`Pqi{k0uwLrq z=~By;uQ4;4b(VmoGMfjb9F4$Eu})y{!Sd3OU^dt$KZypHto3RZ!$v= zLyo|;w=#`eVJ)@@ql(httqaF;tmBr@ybj*25Hee<4kA^cig8bbQaG!nD z#tyfc>H*C;p{)vA_m814iYTW(Z-em2$e$DYq#+)i2Gm9sM{3ouQwg6Gydp#!2A6|S z8ATF>j+#v_L|?0514^PeYb?O1EZv3v;OOU|K%#VEZrm%Ypo*np4j=V3atVSXN7DrH z|AC!=R8`_G^mm~LUKkF_@#Z4N4I6y*BU2UPSIv+H<`1cnv_v7T7bzNFWpGrxJp95- zA8kaJRGd^Q+%va|MmJZ(f*Q)Oe=lHUpZXP17SMpH*JT=-U(RS%C`b`% zSm!W;-bS0&+ey(*!%_KeSG_n7)@9ZO6tf#^Bt3@9{IE~cCyd#vCbW}GLHIYU2!rt& ztzU4xlJn@9uIXJ~{!oFtgYGWC7rc07)$}dzcMJvqc)gcANaKY{pZrb!YW%v1>Zr5? z3YD_xFgQ)+WP_ThfiWtpJ%?ZzX)A1gnaUSx*?Mt<#ri(1yZ@Uh)H{}gsh-g4eIqBf zRe;leFz-u%hqp?ZGK{#epa?8xGg0qhQ_$(AYJ`HUL}91Gb@{jD`0kf`?dE1O+Q9Ne z$oZU^arSEfCOQE1cgUEDpG9$oO&ziNe$-GssORLwRUnvDX`4HikCt_r zUQh||;V&Pt;$3}wU8IS8tmiB+FMcn@c@w%nYTPd6AtP2)dASF=V;qa)i!0R2s-cMl z26Ks&+5nUz(=H(EfLIzT<*66dbUV;f9hEVotXo6^@MZ<#^ z>Sfn6fQVWz+}D_opZECZ{_On!lziZKTds@!-rx3`w%>l}Z=>^{{fB4Ue*d1sw_mj5 zt^3>7$2+`Oyz=a-_3@37^=mh|hb{htG>MO{Gkz2MpiTJDcIMRT3m*CNPrie;AD0ne zp|nLiBk{I)rP?Z=^Y-yRdF+U_pmcMrxib=xY@2I-f752u*4!Gee73DsNBc0J9&B#y zh>xa|LnYEx@`p4Im?wRXgqxgSaO;aF#L1bxsWJ{PY%vSM4rtdDPrY%tB8 zCcc#rTo|8g??j=j{;?JmS08SdW|b$qMcqF*7~#-J`J!gY~LIVznR0MaFp|pV(C~yGYat>@e&w60ywJ=qjw@+eQgD& zd9s5!uJ?%ua;wqC<>ME&5%evQb%v|GoJl8}68F{4CSxK|gHE0Ck(g=5XAF3#{_A-4 z*)}O&TY0U;M7;QDD;BmnmH-fmSXBEbyw(_27n2zq&ITiC!R5=A?VvtB;rHOEcmjTbW zTTP^$AH;q&y{Z!x8zb?B9r4OHu!(D{tC&{4i`B1c*(}dU@x0lrYJN9ji0jIe*u**6 za?&wIy$?;1t^g)0FAy#*eu0f&aeGpE)ob;n*DG563MTOgpx4@oMJH^pS7oqQFr&79 z7OlaXF)4l)GzR=sJ2_CbQwFMba-Y^#z7tsmq5;b?M;bdSG0s%23W(< z=2ny=seG4%V;pR;_QvB;uN9+2BCEXC1kn#F=rp8+MDw?!2HtlQzx&O>#) za#|!1c2&r={X7FQdJyQKj6-gn0lhzi+BLQe5>2M1+=^k^_9@` zp(>|z(@)`1cI=d-r)A$xNs49=qRj^XHA6C(W{(L3uW4psa|@GJBoyrlMS|f6W<`pr zAj8gpQ&`3)u3!t3tpwmlOkSq|lr6x+_ql=ih@qdr_(Nhs3fe(4Kn$^i?V*U>D5zN2 zEPCbM_`+tgBqawJ@b;gl1ORCp;va;&=pgojbcz$Oq|tIQNy|J}M!nnN9>Dt^TCQ1V zusUd;QDGA(5tmuVdwc8S)ucaWJJrkSpZ`ay5#_spqy*`w34%<=-d~lT_xJ+^mq*6NwLzymI$1nfkDNHcjf%m(t z@HLS!dufkxS$8S+9JbU!qe1dpmxrLXgF2+@3-Pu5{mTzQys;9Coq@Kd5h*tJT|J9>%MOM3%>^qfw|(sP_Bl4$a|{^5`xRR@H|gAW>R<4U!E~ zOEOQlt)zUXk*X4`DmtlZwW=tk>S+#I{d#;Z(5RJn#4x7edpansP77q!hdF!oT^c7; z9-@TAxp{}pX=F1)H;Yo-s_=z4*2SUqjxmL83rgZ$GlmwTzJ%UrrVCEj~3VUb~9(*Jy~CtbMIUAhFt@={mk zE_Ib*)@PI_xEZ(M?3co>P*uenasl(y-*a0P$h$6c;Zk?zE_G*LjQ=;jCc10+CTF{= z7$f(dQU?(R47}P7HORn=F<9#ASZYz*c?RZK^ZTi52r!>t-<)`mV$bB@MSaxmjakim- z8ytT;X+#H8Le@dV0%4=#R#vx>$3M;l4hha>shlljxA!+r9qzEhl znl{N_M7tJKav1npbeP-t_ynx;wpa(egz6JI5d%%ql+XcNkD)Er{Mg#+lRyW<4Zse{ z?~754L%YEI1PS0%TtX@5b1b$>B3jj_v9t~5LUaNx>H{)g;nOn`?1~`11w_PK5;8*d zIsF*r_Qb2tOZoyQo8!t!9`|$0B+unD|B#eFB5769$HYy13EPHUk5^xcMGX|iOR*S& zbrRk|T&4}tiVmO|ssyV94YEuXsnml06B2&n6Cr?x8Rh4Z_`dOfW+L@IGBn)?o@dQNoI{b%@m^k?;#vGE5SKb3bpV54^EcsUBwROOw$3m+; zi2g|CX2gQlcD5*R9%PiR5k!a~;zwhv;pJk`4p1q^lc&mi_Gztwe+J(YL)elyS||La zV7=9c&o?chA_^`PLIxz1e} z6?X~(EYfC45N6%IN|(%$j_Bko_ke!Hsnw|GsTHOi z%J+ZNM(|(9oS0iI`|8^wGu~z?AgjJku}<~)12$S)JyUtyT#oQp#h6owfVDC-hUbIB zJ>8}mM-%w}_?aKhZu{OF-};XaeE65X_xn$O`i1N_@4V=d_1$NVocP7xdGG#z_1>F* z_lF-c<(rP4`u@m^SMJ#RUj9ed?fvLeKlt)O_uhYd{+7=T{rbekAN^@-}4fuYx?HeJ7Z_Cqbte)@)QZTa@EZGPvs ziywOX>Hp39{}_~tL2toc!0Axb9WzB?X@LCKE<|J{3lY25)z`3Zolul$xe+UVjhwvB zTpnG;;B4jTwl+2dEy8oFjqKKE?CBWcN2JKc!0nRP>fVFkt$Ou3rAetb|#YB7(wcDcW{H4U_l)~*|E<`oR z4Fjy^81d>rJk^nC2CiB_q24;PW?h74%Q~|zvI;PM7@B#r&K5x}P=$ts5#ZmCK(QR4 zJ&3q94+g<&9f`G3aKnRA{xmvv;0TIK+7biS895WNf{+>lbYQO}N?x>02frVdcvj6ZkA?IbhsJbJVh8n zgd7ehC^#ae@tH`#hEdrX+X6~hXyeio@osIwfIP7vb7Cet6oF=ZmJHLq0(7BRZ2>wf z&ooE9Hm@lPJICPhvsfpJM_bWqjpqpoBJil^eu@bk53~X+wu+1@Cx*mP^);L?0!ao) zI)v5>)4<=_Xp_wet`KwN#MJ@R1JTvjfGq8cwYEf?01Y6(B+*C$f8Kdf;8+GyAX?VP z`y!sCt0i3}X`7_&lD1+DYS@4Dt6Bm!YV*9*aD_8Nxl=d0A`J~ zkrgn8(A;K_#yV0$rw3bP)LRjS1+>9{9e`7~L|$_{4caIVB?VRSvL%`_9>Kh`cqFUN zf-rG#t!-Gyh0kt?l8jhij+edotQMCoY0b8@151awZ8*lP9`@En83phR{yf6VJ1>Xg$c_s#F$r!=w-O)8{ukDcGgZzWsW~Lp7 z->+k>3(vHnGkeH7-z5AnA+Vsz58V2|7hEQsvq)t13b4IAiL~IM3&b`ZL}27)2%Uvj zHJI=qau-LTo?Zs6RbP%TAY%D4B)jFFQSR|`nB}xRHG$qxx$`b+MD8#{*Q0V8HEc^# zwZ2FM!)z2XRH8)$gWeb~LG(n$cH*q>x&eeBak?tK0#sHDU)%aRY&~B zcr?ni@;gWn-i_bb=85sNF<$KeVMY?|q&ch?NkoU-v9QOJ+#mKbCvgLoYXAi$Erwg_Ypzv`mFb@pOw z+PQDB6|f-VCtDKj?XhSy)()rYb*_Sjk>^2c;x-UO6ZniK^2rr3_;zbguEjI{ogZC+ zlv3z*+YR`qjVL?B#q!)72=sKuHktwR%8^ibo^m4%0>(s84)F{Ni@VqnTN`a@1BSu8 zY{!}n(G@D|DDrGy3=d_m9d&EKX?&zgZe?h3RD1IXfI0(50MyAHZBV$R8LYG;8jH2l zjU=8b@6g5MdT9Ql_5;zCZjo98;_ODbC65IJD&ZGGA)o9}DR8m_Rg?lJJ3496kX{%& zcnby6aAAk5r;?B7pui*X84^tOv3Rut574wh<#uoY%6Rkki3H&f{P6G zrbR?JwvjS z(;!}*i30scAx%(9BN)P<3Dzy;2_9oWp}l1p!%8iQL9vPh!CKWrvDkKSnmu{|yb!Tq zwYO9zX$&aK`xHC+z}Ch*7b(HGzy`ZMeJyVzL(@06e`MBKtwx zJQKY@``P$JXrvktFjCAmX^SZkT5ll_LuZRZvj9`r{l|H&r}{oWw%t`hlrj^H5iVV}hzmz{GshT~{Oa2AXrw>AZw8l?n zDTNqkpzxt)VjjL3Bv|5na5P00_&ve^UI6Dwsp@w-{> zH{a!V;yP1P_z}BOxiiV%c;}CfxgVXU^G5rf449?;4)p`=h#jG}gL)IK@O?j}zqN2H zNCr~-2$ko;t*~)#1@6QweucVX2SAVE$}zIlA8Prle5kyUh^|Duq8qMJyz(k?N3aL4 zw0VeR<5>q48}tb*T_2}m6R{GOlH{tJklP+z3;5UwGM+5o5ue5X(`<-;5Hg$a51Two z29{?5=2MUifV=XZtRgM(1PBN%t(K*9jeUA!cl08-An~K>fgpStuYL+X&kg8~2@dlg zWbAwVw~&T;F$&r)10rhCGA+NuZDQcSMc;>16h25>Y?_z5LmdCwXumG`s&@oH^Q zEpLvlOvI;gd6b&~q}z@iI1b?mmG@jj`V45slP@^18{4BTP}dS$6YT^y0SMIt8fJJv zb2%7qT6efwwgcM-CleDmg>KhK^H#)!p)i>b4ti?XWw^~T6 zZzwb(pYG!(pR6Jr(Ud??24*Qd#-kt{n5+miAY_Bbc$LuwR7)%)k-(BP*mD5p3vFAN zF~Y-f{|MyOwOG=8y!tAL6$$>(M79)XB|yuTH5dcIy?N*pDzbUlGcAZ8C9sYQVAayH zxr^~6y)4h=(cn?S>WsoyrVtP7BEgCk%o2f3Uu7^ehje(CUZ|dP_-0_`akQh6bHp#Ie(?j?zoY0* zwnsOmNpvUhm5OL3cjbU3Pf7WUOshL^k(3gwo6^)W;t@LWbMhX2ZH{)zE$7q#@s)pRFWdUAFAqn8 zoP3U*P7cJY8L2~NK3@GD4;IpkjV+|Mh>7wVvq7efpJoG(X-2#Y?kJ{a2Mc-s_bBm8 zo`vHjX=}{%eV-U$W1jGQ9)G_&2Nx8>~OkJ&S%Pp^V9A(RS)AgEb)V=<0x{uQgPyN@T03;`kR-B89G|K=z3pBMjki!ErzXJ}X{?L!*DsQmH}ec>~MG5KO*LFzA;kn#v> zdBeKozmd;32lc}|~`jMWJHvIB>{eK7EBm@rdqf8$9y7qmzy~}IT z94B}Ml=F1rZyN+d(DrtF!`!|bF7^DHNB3v&V@VgFJy)Zb{`B2z_nxEy=JsKp+BX^( ze?40oD<;2f7C84~PX0bf4zG*yD)+oVI)!V^_*zzhaYW`EvgO1ETf6n~i5DN=-`qQ7 z-TDG8Up3;F04-j9ux_s3m>Z-|53tF1JNYK5zVW$SKXm=a|9(~sKz6S}-&tS0Mn4 literal 0 HcmV?d00001 diff --git a/trunk/Libraries/NHibernate.dll b/trunk/Libraries/NHibernate.dll new file mode 100644 index 0000000000000000000000000000000000000000..21232aaa4754b1b8675a12274bf02f3b7fbb4f6f GIT binary patch literal 3016192 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%0A~CU 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%0AMTEY`Nn3N=HY#uQETR*t%Yxp{mEHK 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

m@P^GU#le4AP*#DQ)f`Ouxe56db$P;Lf@- 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

pkW)MVLq|(-E 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

vi+qrjaw!&@)vusT z_F-@Vha07|P*({YirI&ih!+lC#uqKAvWrg!3O$s~|4acJR}{!p9jnMM5ymI`kS!8+ zb})?F$S$j|?eQgPXpo_oJ*h(WBOAA|p)=udrdsTS9?aG|L{DDOE3GbojXng}Z^q?= zi!o894HIYUls3d6awWSI%075h$IPs%!X;aRD*iLG(t@z~(Av2`hP^$mGPPq)TL=%X zmi>q$A_dnWL~{?jxZs(#+VQ7zL8~6mV2(oViaNA*g+H|=`>;if zA?mQoE05%vXhZ3ylIh1rPhO1q1at)g(R6|VU())-ierga)!>OK+R~*@A^*T)BVx&k zspJ`J;xX9x2IZ-K=0Nqc;8)lbxz6s;NME5yF8PQ7tWxxJ!a}doNAV1Kd@D4=VE2U= zK0}D8TO;5Z=d+%Ic1wkf%S&iP$wZ->I?8yfHsu<-Y=r8u199}Wm^3?j+vDTtI<5jJ zd}&(vtEMQuNj9#FHUTmq3y{xxhx1QwGe5OHwqn zRu?#9Tp1y;BdN%CmP-)5-{?qGxFcy*XQh;bWj;s3Hu)S0TCwgGNtCv}@b{?73Go;6 zv};;l*zgK4=kEks|B6bqLjY2$s`83t%811O?G+VtTs1-jeggvt>mu8iBfQ3|*-JnvHqM@)~7 z;Qg*4#4#5NdvS2N%q0VWQod`fwTgHN_2Lp9p$JQ&qh9PBeYi$S`PieSEwQHVNWfov z5kh@Zs0^9aQ%(yGO?XTK2(8r!q&1!mF74+9T6Izio`-dXZ z`%6bhw9VtG0k^|n(Zm;1Mu8dl=sHwVu0x`Gk8hAY%0-u6EE|KQD}=au@1h(b+BM9r z2`$#jCDeNYkuWgQqo^DoDjd-QF-2%Pr>EFNL@kOGzH9jNRJ6w0-_a4BsbP7*Jr==% z!O;<$*96IE7|}d=bSJr1(_i@7U9i4T9CTueQZK1!ABaL%n%m-v_N*)P>YA)@p}}CA z)3Z`o{^|s3t9-AZ!(2TtWm;K)Hi}nCWe#j~gnYSAF?5pC$&Kj_EkN~)^Vz|1JE!iE z+e2*1wm!%{F{P&BIkRs$8JK#vFXJaQ@o2x65BfDdNwin2gr%JDu~k7cH6(SuqxYe? zQ`GB%K<1-b=UyPGS|M=Jhh&jz>Ruk^nqw5jmGA(;Mi^0Cf{V=7U{q~%(S9C7i3GNb z-Q%R7?q)|1dx$#sVICxKryNefqdKktNHpoNb!fEQomT2~^F^$P&VO5k;Re$PHt*^1 zYmuc+MiU;woXpM2xhnohd@W*}DerEs!<#N^D&^PN1dI$XLWnCFB}eyb!C()|Ty}Ej zwoteF-5Ed{tXY6Sw7ZGX_p6&xx$==`-SOB)u0<4z*|CjKqq2&{1=^S7muWIk=#CV{ zuvI|7iSi~mfoL3$2*e$}E=qJHl^L>9i7cvwI68G5eAjOeaUI_5!<5WIX3&zs>*4i< zRS^O@^pI#x@E9no5rIc8Wi&V=7Su)zUMc5^8s<46)=0HIy36i?6v-+@k+)ZywOM}V za#e#`bj+hPs0}oBy%VS+pjMQmuhy<0$PvtndMnZG9P3H08YU{W;vtTJ5;7JT5_XIv zS)_CWZbTL*`80$qbIZ~Sl(^iMMefJKxrPz2L8PdwV@oC5ykF)mj|-h=MKlhF#Iu|b zFGEE4aSR@c3P!x8O$&^{QrFq;m8~XcAEX_NN2XG`=61Pa0XcSUDVe~r6(uqS=dKaY zQlU%W{U}lVKJrB$qCGet;!(?v%2Qs8t{L98v|V2)BP8<)0H{^SzSe|5*kgM{XCMgh z=RSXE*DJH5djzD^Js|)#1rD2tb_XIo%jzf{O9Y7&a*ihfI+YiD(Y&Zyf(b{|H>vay zk3q(Ui-J#}^xT$VzN^F;BbYc-*jz**`Q(!@-yeLsX(?@$m`91W0kr33pggJ#^yFor zJW4#K-qSqH}L-1nVP+IWV z{&A*)LKQjjrpRMGij?kXA1Y4nWu9rrvzMv(sD_zxN$||RK*DRzs0*DgFIK)(th}va z6)3N37fboM3|ie)v^pF0u zz4?mTj7!XJ;PZE{fS{yS`j1{wQ%4Ce)c3!?0=iY&3$Q=XF8xyGa>1P@jW=J0p}0?zUR0_@9@G{s71pySDd&iv%D|WE_>aG|gFBx?5F|s6qlG7N8=++o{@*+d! zthyvYh{YI*?5`RlDWx?=A`FFJJw_gUSH(*bRB?=vh;EIMC>_-{DD>Q=#TZ$9vE+P= z+;c*Vk?^N-+k$=48QX$=>R7J$_)rllrPN9EtMFLOTqZNPmaVdef2c*rrGr{lXv*W_Z>W&_ z^YuGAh1Tz=q3Ed`NtB9kY@?P>6_vf;tNC0lUm@6}Yps;h+tR$Ga}qc@_dV`Fi!V5r2Q8YUecRYqEpOx?*R>vgOgZX`~o>oLB1<&a0Io243!-ALLS*6w^- z&X*#26tKlm%!o<0EY!4P>?QE|u+MT+yC_hAof|D1hiaF+lalsdV4>FLiI$USsQfii z@x8QU@jA{SZZvajFD5TvA7bH<6i>2|BHDRnz}J-K`6AU0pz<9*5Y#%hTk7Dk-RxeI zM_Xi()4O26vYu1_=qe07MaG#2Ebv`Y{cpP8Q~eV#!$7fgy_ePh#ua z7PWdfen8tlsj*%;96td6p_8&a5+293U&>>MEU~cra3zobpaEC*yj+q;*p&4i1rUla zmDmVZoB6Y8r}`ABaU9Z zPK0*1ML38`T{frzhb4`^@g8{GLz}%JLoM!B`xp_MX$>D-&LF;I2TQf3saBhP%b3hu$+Bh$m37M(j1^W z$S$*JeL^Qs(giV(pqV)Y0C$0THPV2G*fe%Q<6czpvZUCI6BmA2Qhj{l0A&TR9-B1q ziDynZ1eC+ouY9N0JKGhiV;e4QWMXbOe^Z#q(&m!sD)Lal;lVhWk@!o!qHM~b8&^6Y z1_Qc)$Z%W|mG$z84`ec@6zo2~f(~E| z0i|LOv2r>CSH^VY-&9iehDBmP()_tBA!+};h|I*(-q8UdmKs0m$4a_C3!8?=P;Qyn@W^v zm<22|o>I7;s`JPC5~S}cJ`GxCT!I$^?})34v(3ZGW<0;U|Op zQ&~5nyrIC1s!EOC6gu%V;J!DqLhr@ueryHFp?mZs6eUxMR!8t*F4E0oiBoz~EW(9& z%WAa|_(9#=NA#d|XtbW676r>Pp(k`GNaNT9950E0;{#=I)NPq_D3=;)A+S_NYgpK{ z$J0R;4^)gj8*&>1g!2Q9_tpVT_@Pt!j>XY=TrET)!0Ng4$92qTzmyeF}v zET9Soruq;nMWPM|fp`Iqg3F##@Vb$Hg-t-!pD0)?Le^G7o3cE)FAkb*`XJM6lj@a= zUKA$sQjxHlbG@zpr6!uj0Dnr70>UGGPCN}Z@sqh|D|Ca7oT#fP&>EgLm3^9|`s?J; zc~qS$;o?7+q#;2zvo}uk&g|9nlFjUE%chyVt^SySBN(LHJ=vXsh#V2yMhc|tLla=!aaOQVW8O$0LEdh)65QN3Ip)@OW&KT|$Em~kmt+fzoD)4INy zX~E)*V^zcrw{qM^W1|dKZK8^Ud816ULG-Y%xy$nu`#;a{3-PH%{2D+?6pZIJTP+o% z^DLh0ndiLoMUH!bDXX@Tyct&gDuE*CG$SfRkpSpW*e<3@?Fq{e>adf(vX|OOQXU6E zUUUij`?(ux3p(13gtI1{U0x{JNAX;pr%IQMK+jXB8DnZnXR6~`J#fYo(bOVRm(5}( zJr8v6*>M2y1Nw_gBlG})t5P#Xzf#lyPCO$qt`mbia%q>@fCGbnmj9gQJCwp}vc->& zV)dW7%hE;Sk5B~q3)()JEJ$P!#*` zfaoqkJbXZxNajjvc)OBiJ4*;Lk7705X?P*$+>a@sHFiV~S5`xh@Q2nierUMzgOPzH zal8*Wz6ZGvc`$Sdu2lN_7huK@MgBG{2%f$6*2t$htOQwupf72G;MEh0Y&bF- zK@B`t0hCboi!G%h?9i>pSSZVN(kGD98yI+*1yJ7bl!V>cYi1M_0U=P4GieP|)eMKZrAGBJ%1AqXj25n!Oxo@iQ3(y>KM0X)Xypehm5_3*m9WI8=3 zMTzNHy*M!~Mu<#8gqLqL@EEJq(fU?X_-XnwHS4JK%x$J!5iDpRo?`a?fI=hUu$gS) za8|n_HIR5Z8+2+{bo4<%&`B|HjH!!bl28!IGq<&x#EZ|wt6dQt^N1SH;fVT2;v@Y< zG!|(9iOA#e@Cr3afu!;3B9$z@SuH$7AdYSEK8{q>jjU2tIng14Xe;64p(9POT8-=| zSHM%a$`o!!pE_y4aYnWB5UXO?$YWhV5T$f{pQ&UYB9Bb)Hpm3B^OWvIgGOR9a!uUh zS$&YA+`9Xt3&98oDerN}IdRAmk*;ESi z=)`C?!TMRWJE`k&5BK2WPeHg*VDfl>m2NUpMq+U*` zmm@fzg7Xo)mV&5nn1jY|rQodyqKIk&9={R6`zd(e!3mZ{N}WI~Deq!RU5wzJ6uc9` zXDRqB@)lBF7>K+RsosgGcOvDTh`bY8q^Tmrpnwz36M^$YLUJOIoVcEVuLtnwDfoE= zFQ(wd2qv5-0_TZDtBIi1#LWbJGk~wApuYSpSlnCV>K^B(JX9=ZJ!NC#2VpEm%+A|2 z3DeOUsnSwlm+h6fdFcq&87u;VBQ9_~$sBP3vkKfK+eL|doKcdeHD@p&lDRL+)E(W5 zUyI@V5e4dGl91$x5%(Z@T%B*Ms1&boxy%7q^cVJ-eWJswofJT;(UEvIG}hBidYaw$ zVX`x^IKxP;MxNQiz+_QoCFKlL9g6@jtR|+A*9xBalH8sFJfg=7sc~MN(uC?~IosE+ zSaNt68Fu1ve4fPTX?)-vNyz8^O!mYlCdJ8t2*LDdUz2O%vo1b7afZAx{WZjdhDWMr zC>czN6e?^_c?43&eP7cTb%_z2b0;{CqvErC%*BAkXdXZ#LEj232EdSZn)oE}az(^~ zFO_V+NOmEbk@!H*_$jt}MG}W+{UlUt;5g`Z^9RhyWcM)>uDeiBB2kvNQsD|_Vl zA=&J!ehoAM3aGt!Ao%dCf$w>oFPO5p6cOt-t;XQK?!V008du84?B?)P& zSrP?;*>q!G(9FG-Qa-ak76MYxXZE`=7Vt7INWT;>lr`+QtEoj;hOFCcno*oE7I`NcuIhwN(2oc-dkU0XeVfjxqlrrqOq-O67~ z+3%6@i#hw}?OwEd+3r=l*X&-md&BPMb{Fm5v}-c{BJjE6n7elG+5OV)eY+3rKD7JD z?qj=8>^`;o%$Ul7n;EwcY>AfB%b*nbFOgS?nS$o z?OwHe&F*!(H|&0HchT-mySMD#wtL6!UAy<}erfl<-3N9b+I?jAvE3(jpW1z9_qp85 z1-m_VOLhnB4%%H~cb(me-4VMR>~6HX$?mA#&33ogeaG%ryW8yUu)EXlE|K-}ZYlZM zI6d$$Vvf98^8S$5R%0Wc2%FsL%iOG6AdASXBa+gszfluC( zfAWcIJjq0HS>ema?M~XAvO8^e&hEVQitNH}{%O6$x?V(-GD7~c8yw~EGfoI+ItmFr z$8^kRdUJd>h1gEgdya!r!%UmGK`7l+Y43+Kb!a3Z;ALsiOp+!b2POM;&|xD-t=A2m0rFg*x>$B4rcrJTh_1gvOa7YxFc3kJ?I!P?{RO@%tmZ4C+X%M?J(b z)r)8%;cJ*Gl_qNh=Ny2SiD@H?8RmGEb4OU2SB1_Vceg)~VGr@pdrwCH&?lNRV^MEq z!BhjHM6zH&*{6|EGEKRQ4j*z!N(S(ftQ5Jx zIyq-);*S(W4NB`gxFrq45*`Mog8bvib7(P>X{BOVeqAZFmdUF&5WcCwD*=1qW=REB z$6Uz;mNP2w0*ep~P$gFe2!I-T8>Ar83~I8Sp06^8zIIY_o7?@^A}tyaa&QVSb?JcqE;N;O-s1a0Q~X0|7{85HCD6sys)vs@(bWe2w6j>D;ppNZsNNJbf40kX zl#kMzBrJuhzk(}#&EL(yCkA%3keRzEck;eyKo-w6oP%;BwmI_TR+dP}HNh~PC+{1k z_O>Wld)q3p-t|x$x_J-W5v3HthDn-6wo+|&ik%?!8#I}l1XQMY#3sLnLbNL5hY7b? z_g8GhQPSMg5c&_o6m)V&OT&%+Jh{upef_GTc!Hp@p&xRs*VFEdr%--Tkp|DqyW{wg zMNE+;D63ONI>Ds7d1X&2+02xSr99#x>&YEu&KJPjcqDA*p6W~xwY;ClveoN&54V#$ zgo&PGCWE~kkqZ2Dr;uhkGJtydC>C<*Np-R)NVx$szEyqplyV&gDiy>A4Yn&srn*y_ z5@x?drsV~gq5(=2J2-4K(K4}`(9G+ULJ##)LrKV6nwJy}_gEE__mrWBLo4h71*g0`Z>?0P;JQ#^?!6rjOwXA_PKOFw9Xc zSy|HHoLtHoV4TH!`J58ZUcU0gQ96l4PKIV)I~BcI2!$n1+L^GbvEvs&ejtcAZJlB% zPeeI$*i5*%PDCyq`MKAC4d6^5_*nBH#syQ{n zG@%}`htb`tJyE#Dd}VVcSiP@&#!dsm1d0R2r>(+IqN8CwOY!PQv2_O>m7G#3lcElV z?IAn0)x3gu9^c^Q1eJJ25zvVNP@Xox3XCb0ORKN~-{T{B#z*oS^Pc3Yg+deA@6>x` zHATjY4Jt`&P7bL-<69{$ZDIE@>7+Bu6sdX3O8cq(D(uw$?9>OE=IqH%U6u-cY8R3C zvr~5@MoxWTNMd+p2}nGL@aK_->>B1$( zLCy{ov(tkD;1?iB-{kZSki?#iq}Vf>d$#1B&3J_4>38rzd1sGY`{`u|QHLlq`pX=C z>b{6@`jCj=H1ovi!!E)EI(X!Vc*mDza#uEAt3iSCK|uH?HB)1T6C8DZ~;S< z-`?oq7Au~>g>x_|EWBF^@hLQ-5W}ZJRi#Y@v4OyKE{g{g5!PXYcsl%=4{W>2^*1Q`#p`;i_vAfj7GQXf~I-U+~a4I7CvE5&73J*m zBS4K3LNB4hZ$%5o)AyKtDFvw0_pHX8X4=E=)4#3i5SpBIWu3L56(wnU;`8kEm%QFb z6X`=EJJ*cH@uSocF}^h-@^7-|%&Ixe1F{yM>sh0lbm7gvgPaAif#TTic9diix+eUB zfCn3C0wJymC~@{7I;L4r3Y8`a*~Z!0XBnbq32Uxg;6s;YJ7!SZgyUQD>1nvUve2EK zek`NH*=wA~Cxo~5c9A#M7;BI55@CK-I)$)aEP;j5v6OkvqSL)S)x)Qfoqpa&DO0Td zx0k#a!StdvfVWk-R0>(=w!{>d9k;NVDyZ|OkZb5iKm+cGci^!~TGdXCMjc+`@pIei zOxE@s6Djib%9prGic9BHE>*;FKxIEe^<|Z14LF$AWz~ILfQ@EqtM~ zW?f-2`_#-c)r9KmX7NQpZQ!TB3F%J5GW14SMaZKX*)QQFVP{j96*#^MQ6MaDrXN2* zA4&iB48*xWzq*x8T^FzOv3YXpIEx_?9b-Z}OITEKX;J zXpa0*V1kLe`NWH>R2@Hi6oA9MsWdNJfJom`iZAEsJ}FLmH&jsx{8DQ8xJZ(G#C_9> z`zDpUGGVzg<;!ZnNig^l%(4WNzGfV?LJXw3{3A7l)3-E`;0IEfoD6K$`)Bdz)OF6x zg~yy6F&_jsU60R=_$(%{DTUd9jGkEZvXaw_bbSufr_Nd| zMQ1Ih&RT4B)?%x(6c?SPxah3KQgqg0IXY{xly??Lrp|&sQD-@QQ)h9`GvN}Qw3s?; zF?H5rIXX-AMrWzs=&VKhNV}T6J$+T9=)~tDFua^IySx$A;(vr*MJy~0*$)I`my<5Z zINaWzL&gsw;?a`Xlnm*|=A?UB$4Uy?80PUpMmE|*ooXHM!@$S(g`l;;kDt(BrKe zcFuDNaJThvj<(ZT&XPUP#oE?oLql`X-C*FmHhE0l&DjB?x_K+L8dSg=2QeT373 zh{~U_G0obRo5l{*4FFURVD61k=fcb_#D| zlfv(}wqQMB9$hyy^*C!>dCjFNkTUz4C)ad!9kd;*+ndxOwIJ0XwSYI*>fbY6wU^VY(#i2VHr8Tp=I1T!7lJy#@tSNNXX}FX;mON>JyXlvIuFm1542HiQf9@epT{{AR781;;mMbWej-B8 z&7fzW+0F40y?DkG91uZAKVVrNXONwfH|j{y5qnr=Y&CZ|Rg+8HSfnL1>dZ#59EVK= zL5M=dhlbgb!|-CxVjE^lz%26N?$u)A&#lz7Ow;l93M!ChWi}}`aH>4Kn$b6`hy+ag zT!@XSTU;uL2+k4IZOT-HeyDPT4@V=gAj3vDmLIRzK^fysn-vQdtw_IO5|Kx}0ym(B zcfhHkMCpl?9I93Hv3Lyg3=gaFY>6ix10O5sj)4kD39WjM6(9l$)-*^@rJub<>BR2_ z{Y2U77$#ipu*k~AfMc%%8Z$t(-Qyo*L$alVBuXG<3k?TJ8o8h*k>5>>vlYBi*^0f}b zH)$^Rc?!hmsgG}(@bGz}V8+77QSj8|32uiu(c1!Gh$ryj)Vujjv`R7yYBU!|l;g`|0 zYM6NF%sTej_QjfwxXBG>hCSM2r<3_IA4)Ks*`uKid+%ZFngQfV)21SMbxV?BdS8mrfHhWXAV?eEAVT_2cXFIHWXF#Kx><#&K#g{NcKLG^O){!QupFy)zdr8kqvO<2QfUPqN#cT3`RdtWp27GWmQ0-qtK%d-rw5 zHO7(JyCfs!4VInSnVn^3N!x+^jCoQ8YM=7sqXz#J@E5^8MHuk=gYOPzXVB*4{S+@( zi$R$3&wL)fPl=1R-shtXmIR;U=_^Pe-4ST+ySbvEsNh}~aP|WrJr&7%#Arg3vkxK7 zM&BGC_WkC}4)crI!Vv<_h;QMD>H>Aq!k#nNa}TTEh&i5n=5r5g{z$r!doJf54}S_g zBWtWwmXuKcCVA!;rL4HhY+*wS7x{9C&+|OLi86lE!hISj3_Iu_Dq(xJU|n)yPqwf} zc^3BaC(rzSepH&X5$bxW6>6Zl#y==X_EiXiBAbBuY)}IiWF2AHkCy~Dj&Tf_0!3+*366F#i5G*xk?OF zqmwmkorf;X$J_koq-14Y1@USz0)u#>iq$6qkYigQ1*y?SeSsq}t#&Yy+JT=R?+7fs69JLy)UI`sT>OaDOU>h{CkXzk z6ldILI-lC7!0AH{oDM=SZ0oFSM`vJH1bRk`g|6t7`wTfB?n`u7CIJB4$Y^(KUFpTAo`7n>A1rctI^l!}S{rB~;N9ZJpVgs*^n;Ru(tif+l?cKVlQsTr z4R3N~wNG;ZJ^r-5t0c*YOxuo#_4Dk%9vWO>jzWhBVK9N~vMQ;cm_nx(*K=xkHy@fj4ISlP7ZFt+`{ zp)qIh5}J6n~9Sz{0{LYcXzN(h$~EtruiSy%*nkYG=ylOah5A z2XaM!=59&H#Io_xNW;Qe(k+^7u1bR9qsS`OLT6kvqJqgP6D9kJdN$xOBxfuCmzEiWlT{s(^#7HR1uaYzgRTaTr;vvIkgbWu3XgiByR=qI}B{t1;bB& zfLFKv+Yvsdz=0nBiO>M>4;Y*@i2;n_4GPzRqIIy^6HlZ<9R+RxXR+%2}Ci+2Bmd~ zvXEWTl#$Kcw^1iMahwqLi>9{p0|O1H`yz7d1uuTaAeE3lkw?OitXgY944ZQ@UL%q{ zMiot0{O-M?bQXPja~{9Rshf3{Q=2e(nwEd5{A}i;#c%a1+KkL#EckE|a>YbIya?YG z^c`)Dg0>#91HRK!LY#5*+2T!4k=TyOQ7EvI9Y<&hL5(h3!HlL1EVga>ophMRR$o^K zqacuEd;uZ`2KT--Fi@SebEG7_5joA7&AVbk>dbQn{N3!t6C>iS=}Lvuc;ZMJxfD9D zd`S_BD_;P8!^4Xr!1RTrC4|zGH`;Vdkcv%(#BUEHRo-1Jzdfk zSS)W#&W&KA_xXLl4@}_M8;o%XsV!~HkH~2REdKQV$?*epBfSRQbM0|@(adnir8IT6 zhml8sGxr5qDW?XVJ)3!lNd3}YD`QM=1}5I2Z2Eq>UQ?lhnAa<2`srZvY0ZrM%59Vt z4I6Njm(D)$hGwPYq+pE?Sd3y8tdGuDb+TsEkpgJu9`ceZ3z7ot>S1bgf#j5Q|I;_lM%qa<}HArw#SzbFd+OY5=I>9 zO~0Ee+^z?^-^ucySrlQ3CO58mfZFpHmclFim6y{6(yt|6u*Gh$Z2FOKoY~{>%pUoe4yV6N z+;+3P7N+P72F{YTGkbEhDMH)lmI=I&B>GJA>y9^vP@X;gOy5i&=2|1;BOE$#BBS}S zdoEy_1~OLkWxsS`=~t9mJS>K&WYbUFP+A^maHek=Ucx~Y%srL+QI9eBNa~DRZ&cBa^b4Ia zS1_!xIq4CV>SviYkx^ISEizQJQ(>Vhu9u8pq)(oE~Aq(^t@i3l1=8yM)TQ;vO%fh=7VNiM8jp45Dr79T~jRlT;P)wJX6@ zi-X*EbLImT-X$X04}nmcYqy**0qHeeK8d+CDqu)K8b;*YQ%EBzMFDe9@g*o!cqhp2 zXYX8HgC+C?sKp=j~9<0_FCk`WB0{gDq$jqi-N*_Ue8Sxg*Ar?XLu_G zAf8w*dZ9b{hPbhYSFip6s5EmgUujW(M{62+3$uy_^o*Ym5}b=8D_*m8sm1a<)TJ@N zZ>@>XsnqO^Dv-98iRLC5IpH0o#vRT-sBkFBR4886LPa+};7&!(JPn&DzbOl|q+0;9 zPf5Z;yG6*E0T?ShltsnEdc;WGS!f2eUMOSyE?x(eb5}1M``hdPLyBFl)eqaD}u9r42x2B zAp4otKC@4G;Y-?N`1r|kA05XYw>u zdsi|w%`FJ6?8;+-$nyk`+gSS{jDYH91q)8Ftezd{FLYlMB1m0d+4On><;n_7z zk!f(t*haLZpiXQ^SM&515gJ?`DJs#|V>cSNStJpoZ??KtYns@b66MF#LcsM!_*wG!#L{FdVHfT4)|WK#Y0} zve5>mOXtX78HW`FH_5dygO$-SaAsZ#Mhflz-qpdQe&p zgQ~*50*K8%;EzK#+Bx@^k7%Kq^x0DdE2}1K67&>#VEa7C_B@8+>~m^!hsa|;;LpK`;x#-0@S}v;IsKd^UCOj<>b;3@O3DNKx(G=^W<-s85d=ruSHP`4<;=n?wvZA0s{Ly?Sv3*od zyYwV%A^YVH(FAUDok-jV5st--m`@XcxzLO(zcb5@#_RHVz-M?s!A#0GFKEEjJ2${+ zjl7y z0jRh9F$Ph2~q4}4KkKV>`Dl$Kg5&IS%rxERdWT(9(Q%5>JMOV^%s2qwPj2 zkJ!0EO{a6*MR&l};6r6qceqg0OIih@)QNt0%aWW0tAlalVs3*PG`E>*y&(3DX$F?x z`d){HNXrO?P<|8?^!Peg2Fa>ig_aq503XQuXzttwg{KCYP$-xBi}sDmr#|7L3$4UM zv!<`V;TLgT0bIp@=;NU+TvWHi%;|;Qi?6)`G8?ZNAe9RPkX7>*D+Y*&=_U!;`ce;kU0HpBn zkb^?JN}&*cT?k&kb`GrjS$dF1ZtZJT2w729z6O0JOcYT(&<>J)&7VYo5TszWApc74 zD(v4N!PY7>AM-amNg5j)rCEv-(Y29sUBkUrZ7P|K5kt+NfCeWr`J))%(FY?VgN4Rx z@oQ$OjS1fwk%BPP)3q(wq;1Va@R~r&sYLM_1FWee_q{4c3-$DaGAgaiPc=f$AgrjG zqN`tt%v6Gni3~OyZ%-qAByiJeOypMAe{`3@gT@vzPVi`=ac%gc2L`wY38RTRL<)tZ z)Jt`P*%0m^?MLoYf0%(p#k_xPMbNA3oE4;638QX)@M}7?bavIEh)1y?9l;Iq2FA)@^ zUsrWPP<$v-BVY+a_H1rz$--%?eAKX#RmhwIy}j8lFRIOiyj<{i6*Dc*P_&5RBAx~Y zPs>P^WlA(@Ttd>5^x^0bdjaf5iS6Dar|ri z1htpII%1sSpn*Wqz~)AsI4sEvS0qyy;~JK&Aji@OVq7J8q-RaTHmI)Vb-&&MD|=}s zs9lw11?}~eXrT|?a>dGCDn_A|y3;kRvq^$Rk=KVGqkzOxV|Aq;(<95-QhBhe8^H93 zK&Mpw&%=SkC`tK01)*8~Phf7TQ7Xa!x`*;1AuzLuW52ID7QWAD1;;mH$mrOHIz->^ z`zT8I^SJy=QNy7evyx#hpj{lMHzCG^y*APKg$I(TR}ffJSpU(xo;Qf%5MnP!+I2^m z8G+%_Y5~O*hkJ)ZH~i>{f&eNDI#P};+RjqUoLswtm5*9^Tk)&@K|RR{Z}IzkK2TwA ziXl-uKsph?@e5hfhwz4*B7W=$x%4FlbF~Ib{AaW#Ohf8$S{Kn{{|hVzH=IEZICQ;&Y^CrrnE zlH>?{eNrTkcIh`_vA0sD4!|fBJ3#V9IC3}MBLZd@aqN$6`(NJmPx1Lc2iI6u6v&j~ z22g+60auYy{3CwJuQl*5A2B<2`LdjJhM{Eu^I_&AG7k&Lpqk$*tiH;X?gGE|Sl}>& z31O*``-#@xodie;e}D4#<4^YPvaSXPL>`08VgRWtW001K(A8CT$;c;DhW!$4+U(Nr zaZ4o22WLy9NnGKf5Lke33Tb$f{Lzyl1K5FLzR>dE6k3_|d$f0U}Zo`Xjnr>H#Vhyr3zm7`j>)Ab;sW@)JQR&Y^CC_xSX zN(jY*w))j7$U#8=v{di$4~rq3X_Uys*D^;`Ae{Xu`;mS4xi>BITDKtxu^N+E4P1HD zRw-bN5m48jB>_n9f;c83pD>u=CLRHm>tE|6=-ZPs2E7X1-2!(g_vD)KrAL@cVrP7EX_%m@X zyu(6%cmL7wc&lK^}?>1oc?4oMaH?kZih#BR=KJni&k#%@@nYb1-)MBco zm#Jl+EMACARku%3&Xo#dn;x~;F%+w(O<9HM!;?D{{*DnyH5!33Y5gLG`ahM&7Zy~`QE@4)fU7PS}YB=xYKxT8yL?J7GIGn^27U-lr1IG9~{l+EuqT^w-Dj{>_# z>cs4y2?&3uOaZB~_zPM-(hI-H{pSCYTmRPlR{u5@ZU3SkK`-#g?G>QDto%f>>{q+=o&$?Dc^y{{kA!peGsujGUSJ0J z)qa)B?80b>?%?Bc^sONHR3p;?Clt6$86oP54%n2LDV1jwhsLApzd9O@ln`WW!iKCdJ?&|~7oa(Y2ggB_??fnM+nE7^r9 z`ck>{yP>*&r?L1>%S$-L3QP=H5#r*-AgXzi(dSVtlZ4ZhY^sCf z*6+IUAVgh}y{Ze^&L4IepKQtIC&izi=!kCamzgJyyUKpYq-?NsqL%A0qq2GeP~`b| zt7Q(k_kDt$8$vetEX=Evg>)mQ;opdA=!pR?lT35>M^!FpK2q3$s}ZPipFqAuF$`c?9#au;H&Y5sm_nSmQk)zL{15ZbBbZ2;d=T6!Km-qr^Nsb)93kRdm zsftmjwORl#Q)9N9Ruu|zj+oRJ&0%RL*BuZnKmY$mZ=o^<2;;EO8On|1X1FO4nM`*QI@IR{Cbrz z$m;(nj2Efe1-%7QznUlH4&q>}E)ns^#e(RpoAgOUmE*EOR{d1n#GQlSU1dx^#9r5P zGATvTwNG6}?bALq%532Y<+McH0teA(2n)T1hoYxzHDMnTvy8P1A2B;060JiKZyC;q z&5wmA27dy8t#bKpjfk zKOQAs>fgs(`cTIRgVhRVJCZ*hKt#&e;!2Qoj({>moREU{@m8f2l&%$gfZ?umN9PfV z`+>HMMB=2sJfZV$??E z8kQ}BelpS`=qDpg-`OV{%~0D#drtzAFODL#-8Y*)sY(UViI_LE5dNfTW~X;_Pc2VW z{!cbxQfcM?WHirzd};p4JpU)7}Y__|> z%)AdiFiU;{4T3NBdVoXdkip;J0YY@;)^_guMhik{@6J$fw>)3OSou9aJV_qp$xYKk z{LfP#nqceSNV>K9$=GalH-EA@iNXcg<~R#{mX_AY*?N(!!V7-Q>x58bPy)KwOQUi7 zWF3|orEv*)r8`7dc<8m+Uqh9}#r$HtN>I}JBRZu%C`VG4B&o;z6>WLcy=-=ye@BB6vf7Dp`%qvd=;TY-LqJLlx%h znHA8PndW6C@PWPexMluRjX%EcF%o!|x%zE9%UsId(>SSm1zNpJ2hrPa()=Tet{=(6 z4e#1E2J>+JzSFseBB^&_v?!~RJE8tOw#H;gq==865L?VHvgC`BFWy%4#oICZrnTzl z^lgZ#F`p&P#u{10S6r!6zw)u}~EqpR;W>^WmIw*4S731DE+gd+{DOM+UOBpoRsMS(SsYUsm+^sY zhxDVGvI*%qG)_Tc`udRWv<-~S1S?|PoWT<3-A|ZwuZb|pA#DgZIT_Ed6Q{T1G){TK zc=Gapig``UV;PWMhUyHhP9PEyPR7j%=;u^Cfi-gV}74Zob+ek0B21==wlZxQ5}oXa@62JrCR$A^R!_F`|}FTtxJ!c#N%El%d| z^N1&vEV_eQ*F~9gt-vwubLZ0Z*lTeGKX3=`Ofw|6y;i(h?@g=|`jQk*Tbs2K=<=b) zU%dlf#3Kbqy4Kx_szxE)me(i9a%T!xtcbNDvpf~dwI+AOGCBQnmdojrvqFQMt<@4u(hlo; zl*6~T7jZz%y`Z69_1L#aOxE!CwJ_s*!Y#8!%6hgnxNiSjplNoKSBVe;z z_MXs_1mmdk{0DSUNro<-Gj`Ys7*)B;6|yUTre#5|QkX;E%$EiNiA4g~WvIT)$DqYT z{5;RS@LZC3;kih}9Q^TRdr)tLKdJzlo95e3Mj%p*6KMx-+m-!2g+lg^%L@PuHNOE- zOstCf*B*-e?}W?4Y@u+zP8(kQGRsHooygG3GG`DxWL8A1lFNJpn}u1=YFAd{3|9e( zxt(J_Yzp;pnAU7qTj>L{8E-x@N&0C8A1KahZ?T)SY^b(fJ;8?v4J-MKFCMi;CAA>l z4*kH>#L$>FH`xvUqgVjwl8N>%n<(uJdiTQn2f}QaRe>RUpy5!BY1Scpq7NTg)oTB( zJT&$-bGrN=4vqb3XzUwGG{o4SnKQCl4TwLvLBwj^!826)3^n_*vA+O3JT&&L*u<@R zSGlD>h?1OJ{fkNHCS+rO?JLmH|5nb%{-%Ddec?9ze&}eI&s5d^km-*dRp!B=qrKVD zKJ|AE%gVpm^Lsq2tctKR&+15*$+eP+efktZzi5waz?;ufHn26U1t>I+PFElp z=))Jqc?8sd%*c=mJ5>KK9^+Eve2X4e(wS2grWRwJZJ<{twI7W=GdjH3JvbR_`pZQMkUqu^Uo*^~3Gn{VS1%)h;B(5Ith|sWC8n~kDoTvf&FOT`YBDAJ<@{ z5EYr&d|L*L=8v;61k8^WHFWg9Xb3d^ zWvI&j0$GyU^R)ndrWe=eQczivwrM>N<-p>+`Hzfp$U~St@a3V8mN>Ob4-lun=1&-- zYQ%O?ri{AQ{I6n_#J4>2tK@Id$t0;Hxrdtn401(%h-?0{M$TUl1SHHc$0 zEawCM6=G5Tw4JPO_c2$Xmz8l)^l=!Z5>!J948&@wc5*r8{)CcEQNgkbz>$xo0FHbs z&-McJsq1pczN)nzgK16CUM3Va12W>Ce}D ziAH_l$d%A*lp0L9hDNaiS%TJ}+?#G_j9MDr_)7YUJk_;GeFpZ9q= zw1AEDw?jxYsR58=Ek|z~S5gGKjzpmuNL6V3Ps7Np+xU&V{?l<_G>7ek#DR!3J>Z>- z=7{=Ym9lGOcZMZ{Q}{KN*%5X$a!1(^;R#BOY%H|oUgHlg_ABBHAX|76iH)f7cdeud zYqDsUHPrm0r7D`V)>|&@Yy7D&hyU0Le_^Vn87Gw2AgbJ$ecEBG;u49Hk}7X~VPl%5 zJLF`*Cv7?J9nTZ}kw^M`_`)r%fKFausaHs3N4cYr60)HFt{4Y}o%dRo(o}*xc!Dh8 z78$J_l-4JG`h?zWZ%s#_B%vJ&geHyx-K$<)pC(E-uO-}D)8(c#uY5;xDpu`giouwT zm@=vK#fqzI;VCBh`(S%RtQ?B;2q|@CE3NcW8Y)!E*Z)#lKWPIlb0DQfNM#O)3ONcM zH?6sg*bVBG4jh*Pq!eiZf#lNUl_M$ls}kLw@5)*Fk8+m2D`)?Il(Szsqxnm*9msRO zD$$g}>TW{4rO%p<&XYOP{Rq?0*0;J=>RCf|m;(0XDcVh4l2Xc3`d>`xCk0&I>KaHX z4k+`0l%0f%8zD`D@cKmW7n78SI1M6W)XKB+jg(_)v=Mw6y7b-9rI(@mzZ<$=&~8l& zlYtz1X|!7_jZ^2NC12EgxxZsR(42_9WlD&ap2_Vffgtap@+ zYCGYVglMMIER`(nitD@o&sI5+oqw%VMV=D~`-UDLgyo(!~Ld9Z46L zol6%7l+qfWhHaJQOd3l|F=|0CjdnqyYrY)=pz#;u^$K?T_t`P}x3kAJU;ZE;d#@x$ z0->s`l7Qenf70rOYbIrd~9xZ}oaekJWcCWt+bRP*$0=RQj`)a%5#!p4Em; z!Yl?{-j@aGU0^}h($eqokQ#>n!hq?A|I*qHn34{~2)G(ibPywguK#m8-GW?oPWVW8->WPUCj&YYybT#@*c4Y>}?9 z#sxM<;xihx+>6jV@!1-Y@o5f3=x(G9M(A0D%(TttLWuj#xXmrD5~9uo8u+H?^Ee(? z`+tdh8yG8(G~cgj8cu_u-CZ;@c&6Kfckm3J!Mm`-WZ48~nHB6ZyG(@cGP^ipb=h2Q zgcB^W5v$8haB}*b(>DFZbenUUw&{j;_i4i>jKth92`jM?qhP5=!Vy*&T}F!)tT0NC z#42n=uDB7a}vhEtzEqzqra}Wcw_comigv7K#N(t zdH)%e(Erd%?r47$mGX+%t>|akWRB9RoSjy|>YFW1$!<2;pETL$v+R0dvh*v? zWRW;+(_}S*yg6iqS*C7uySJ{Gz&Qmj&yz>!(@SL=FfIpsRtaF1)dwDjfujoGDyHbA zH3sD{aLhSy!G+UZwdbkLb{O%ak3j&ZJV;z!mD9+3mz-<`HxDWo1JyNnFb|JV4%}0+ zzPaSB%aEENiah;{scm51F;B=mvtMSv@%h$-{i9DY&z`&XL?6d&UR0Fg4`q%y(bziq z7ynj1XD-RC-IB>I1XNy}j`!?@25nx*^BgpS2KVP4+;Ed3QNJvHPi8SjPCNI(y+$h6 z91gbS=xul6@;}AX84o-Z2t!rlYcO(#p>@%9KmI)M&rswAgZ1b+8GkOtpBwS#O8mL& zpP|?WgV&Gi)ri*zF#mt5-N6$zBL(|a}^Bjt>3|)_&M);t+ z)!=#~d9TcYJ2KC%lF3dt(M9YI!^83#j)m9aAfw^0cE}0lWuA((CGX({d5lB~Tg?HM zM6o@Nw;PikIF2%5Q$Atjw#?y&BGy)y%`@i$p}IBxZ1PVn0pXOx?(H1oBIViZ&Sh_m zWxytnIG`dk^2EL^vJdW%8G*04*xICgMvmw7G9rXA zIa}&D<nt-a8-JZQV zIopsP*?*PATF7m8G8;GUl2gsH7H!?&fDYge-aMkk8<9hjI);ZtMgNx=T{nh?TD$up>s}*%zX5 zVPAW~N*F)xghl(@bLbUJZc~#_WIyi4h)qK@HQLB&67R05>1Q@d$%B9fi(0K*zMZ+9?7Ga- zFJ<=qC@+Q69Eu8MP2G32`=){Nm}8GPo_Ni<1M)cM8l5*x=jQW3HnJ-dWI9bt9Z}J> z16pOCkeOx@cV&OaP0A)<>~G#R0Nz7ssPk=-M`$jh8MD-(6YYvVoziVVKK9mSaZubQpRd_t1mrz7~d8 zIeb-g*Tc|5hd=Br6m%C1Q*1J1i8N(+Jq&j`L1#>GF$_I&f=4R~EZS@heeJCRro9cg zb^+;10a$s6U*+MK3#)V~5!rGP?st*5i9bjw^qRJ=!ZP5!6oww_r=356`B=uKP*{%V z4R-l<>zBYA_z!n0@W%228F3F?L3e~Y-XWs`MrfCR;X zLV@i;BPcg;jDT^ro+t}`mMMsfCtin8kcByFr8qyLL0Z)^udgKDcgbh2w`Y~C=sA+Z zbS38i*T4xFsX&(F`cfft#>ftPoqKY*n;c=xfO7`3)DC44STr%qBx)))DyNq&|B6N3hm8)0ROS-^s#EHO~EUu z$LmfCNhs7+9|a)yktIa#TVlV5_$lc_Xjn<-LUBRv1&4C`+dQ2&^t}-JUeqqmzAZ}n zf{Yhsyd+3>wZ2ez#u|H;lk=D_ah2ryFusuhI1iD>H?IFwG~%!WA&l#6Op3LM0@+08vT9Ie8>K@jr=>+em^F1=$m5fK^X=#+{?yQ4Ck-6irCIyUtL%x z*UHeh4Xv91+LlFVb&ouMogW25X^M%hm6moEqSPL8V2@hgdURuEM2V z3w?(b)_1tOfLeop++^Ut@G>MPYI-e2wz8K~nIgwxfBQNbRhHf!eDxnR z_xq39QV`qds69-VF+g0J+o&nF@2^$fUkjGLs?CaewweGfpomW!Uq4c$4`h6lyb=Zf zLVmw+Mn9MJ=eB;JuH5$#sQiG99b~~me_g?K2Y>X<0?RKYod8s)L#LPhWSB;`7e|&7 z`%Y5S=Aoz5nGHRq&Q%(AO54dSRGv7t>?(*Wg$rKaqy&S(W&<(kQuk`85`7?>C6DpU zg}jbo)HW#9`5O#c;Ez@Jw&j?Gm`8h-SDEWb4KLcklzr)5@l=w)=D zpLY>AZQhbudTje`n|Ey9%`z!1Wce;Q;GWIB+H`Qox#zq;Ataf zy3KYqa+nq!hUre5G0r;MO_kH@Z8u`3H`>0*=4P8)ZEllUQ75d>yCE-xAyy76o48d% zy{O_Om5s7)bOdHSMBoGzfB2T3kV98R<#v_#%PdXX$8c7hKl`AG*tMLt;f`@aL+LsB zJZI}#S=TB}d3Wr^)e~z?<^)tve7UePR5tiHS>}&#D7_H5Zp9? zAc5$ki1Qe=_AaSXt(mp7AnvSps_3I#rTdxX9+uc5+*~T& z#?g*4k5BFkHOk|vRY2xPwdoPC)7yoI>Fo$aG5E45V|s@?cSxY9txNt&B3dJdHA0r2 zuPvPj(>r-~hmU4UUP>y?UA?=mIo@s(Hb>d5ylU<#wH?m4Zu6>=UbXeUtoLobD6_T| zkJ?s&Rc5K3yRj#>{YIh7&1@sos47>}Zlr|}L^!et1u(?>N5gAL!f0(TMp=?#ZKG(1 zI4~T(uNMlSFSmgYW1?a7bx@6yk>{z-AE<<_P=1E#Ilt*ozV5T0* zMVpmS9VL_U2^mF<>Zo%*teg+8rJH~zh*cFa_@UgsMq+Wi|Fzs5@nGi0lQ5!{BQeYA zBchxtw=oD0)svyhds-fiVpmndXj7@T8GyyN%AKvxlD)22rk_DMr4t#!pHS|8qUTvN zLKIhF`e-jaOY*3$e-_L~n*xt1P@c!|q@^Rn;lYufFXe0qSEy`-n{K72Dv0=%t;qBS zpxg;WbkaeOmFoGOpr@HB@R(ZJj0bmgb_&AHDxu=OP`NCR%l0@a z>q%QL%IXeLsmdxY5h}dxMUEB9tn3i=D`W=@2*2(4ZI9=788uRcVlzC!Lov6jE!3ke z45)#gM9|igc0Fugk=A!Imzh2e+_$O8?JzCh=@VZoxVs_$An|v-dr|F=B0l>OO0<4O zTo$oJ@}kD+;SiSwp6-V*5)su>z{UYuyIW-la+J>N(6Roa2Uxf#IU2i@rnYMLvdKv>WMS6hm0~uCj163eL;X;V8K!@XOm^sWDu>s&O|_p9iMWi>aZw?i^__W^9|Y zAuwhHF{YwI`5wUEQ%*b=A>A;5su|1o5z9HJuHH%qNW+1KZsOLqKLbCSJ{c;LJRXL} z^hqInT5Pqe42xCon;v#P*Bo_Jq!hhJHOSUFV@91Fn(x4;Lg`7E=EB3+$hee4)iMUn z(=9OeNievnz5&Zifb8p1`fNa*Kw`P8gcFOrCo}I!_n~RUm|hg4p2aZpm=>FuHk+8% zs5gDd>0GJHi_%@m(p}Lsx^fJ5SyIog9CM1RN_=%uifdVlYmRYUF|OOH9yN_Bhq(aP zlhN6$cQf&or^rvK9`cqri{%#?tk4Z}iuZ(@N>f@qRY zHjPTnvi@K`AI%40?%hu%O=e`{@YJN5)yX-<|YgZb=DE+`q1If}I!=g^JUX zMT*n%>F*A4qGIesrq|J=`H)B>{uTAT6Qt{#NW@*?o=Z+Th%`;Gembc*_j`r42Cc7- zDnR^`D)yb^(~S_a5A(rPCR5O8=o^Kgq~uWOG#_JFMqhpPRMWnbD*I&S8kTD~bB)S1 znz_Vl*wIAoYFt0684eaXX&Z*FzMt#tZ|VD?pH~*gB_KOjJ9Njc$CifvIS4( z7o}S3n=pjU)UXDep{$$?B~G!t2+H_?wlww(5*+7imZBP7Dm=)!w$RQp zo`heqj1F#whM84w2`SZ^oRt!eV`UNph|N7zs#5%UC9*RutdB^cK^3I(s{nq6)lL2I^_ zHB;;P*Gl=$r8h^z5rR=ZAN4%9Zx1fpMiw&LnQ3fDPqd)AU}-Lt-s2O%Ryz+!{2F+q zW*Kpnv+0M-0uagUC+4LqR$lh(iiM6XSTTi6hxD?n zq?||)bBW=We|oGgMG)%gLWDrbQgO}h+4wD(9HMBBDJ$AB9_t3g~g0yc=%(~fR^nJSJO zr7>uHL$y%j*pL_Npv_*a6e-KlSBsi{(Qng`E9bAdZt6InpTHofM=A<4 z4B*IIJ!qiZSrsIRycWR1@DheBqepgNZ)c;MZaYC6yoRR68gaxnyThp7jdyW$81;?Ytl+U;%GJQl&@J!5quHO}^qXufNc!@7sCRG!HdJjy7PE~nvoYs#MsKcXxh0FDSKVMz zdfML4+wN9E^u<6q2wPH9WgD`2=tp zrrzwPE+mQoal@5eWUf_JRf5hBlB6G6rO&eFBA$& zsXuaN-HvDP_%pU5XaZ3yaV!hI0~7tE8-+SSeC7375~P?>ZLu;E3CNXUS4XFQHqLJ@!tkI4^=`6sNgs zDv+gTvWcHM0JUppp`Y~$Z8!mFqfr+AWY++o*8|^N&j9OK$j=tB*y%@)r-u-O@c@ma zoFqY2nt&9_NXeIxoIC1U8(xf)NCJ3HBs&nYrlp4gu-O%f`_1*wE?*q2gMg-ZFxw8$ zp@oGvZ%FRbuW=&=z}+O`NpCPRgwiiLq3vBArcXxQ3{<)_3kX?vhCuU%CZAQ>jw=DKs%vIs=o)rbXStj zx=IQqMFk^SOo~>p)ytZv7JtDWhtl6`&7B{YdFK!urgX$!zFG_24s*aadUCMu6CDfI(nXZHuho24B~F}WiMdI8tY zTbO~WX((hQ#sX##!w2GaqXVq8Fa26!Wn&V9a#77CB_m_t-+@Z*r}4PlJhx{%dYtDH zjS7}u_-5f5VO@Z@-{=RaCBl`!QxDhQDkwh>140E$q)<;=%1CG499;>cGD)CVqC91-$(*A~l`sP4p8 z97%&7+kx18a?c70rl-Xbk-;whmtRt&_q~&(gZCsCyjK^WQmFQm;3U3!Av8ULhqwjr zV-?iM3XJ7$ftn?}`Y1u*B0pHW;C(FP==wM{$7yH>jtUWu`#22p#$`4*4?Io)M<2&w zXd(`IYm*qWrB*R!647<~M(D78$iZ8^!as0Wg|YKMBtCFBiq8X@t;zk^VzI<}Z?Omi z!-_qes#s=|4cBOXsQ`CiLr56h3x5djcB*qqg7^6Su64B3AMWQ@o+M*&Sqo!myO)ft z(?WmO%U0`l{#4Bl^>&U-&|V{&?T$R4pYS@o<^-#lO~MCY8T%vE_P`Ek3(GwN?&SlL z83rz`Ep$-`AA=(OOJidwzbcqtHF2na3|yD>JtcV0dfI`juHEG@P?evwwgXkr(Sbb- zsI3R;;!E#c2?NuKFTE!QGhjWH)CbT|qogKGV5CNoj7dTWbcHs9eWxwQlNjlgV zqq!g3-`)MaOQNlp1Cv3j4vR(@4{4M{PXGPF8h6@A)SwSs_Jqy!8)$s9=AbF0JvcBk zv-sBYZw{MPIDJ2PQ_|){fSV-=X)(aqIPy(_E@s&@?@@=hLBppu-zB)y;a>41#= zW-8qrjQxdtIL$(^vXmPI8Es1zrMC0yA&ZURaeBZQCr^p0?4e}#J#at35a}i6di=1j z(!wugzF|MNE5w4h9-)0~%4c;)ssnFx)NV-)y7a(H!_udaYI#c+CffBPwZUQv*-BTAmgvf14cIy(cgJ3Il_1WhO`| z5_-)nT10>%W{4lu1Y$74+ah8c_uN*{9v8>breI`5_AifDTIB&`wRt=sbl!y2?_)Xz zpSTy6mt|~WPVrmP9J#J}cH7 zQFzOvGFIo285ohBI7vV)X11$SY?nf#Xw`qA<=y?R8)TZ?PEgY_j4GbFO{wkt3F;k4e z7S7&q8k=?~2@xKVT%#U?O~(6p7Pif7SDMQ&81>~d1HX{zX<#fDql3#i|4i>O=*jWDwx z_so8#F)4c?YAs{R&}P%2j!!V80Jo+`Lz|x$(QkHJ0(IBmXu_??3l|kK1hsir$Zgv3 zWf%jw@^Drg(_KI!jj*HtWO}x(QzQ`Ma#24FMJO0-Q4LT57gV4$hDsH-NaY({VT-m+ z3o8*6%2z_s8O4c{VHJhoe2%U)R2AKt6v$a$-&P)$)Kp@k*qtbpl$@XJ=@EO2jl5eG z->vC7MM3Tf%b9|d7zd>}6=L{8y)NkqyiN#yb|@?}_W+MW!`8FQd-xv} zq=LH*$6Uwnef}QAzoAZk>-X8q4uA%NhZs4DQ{_#!Fn*it#x-pi zzb)VgZebm`Wts05Gcw}F{RfWjX~UVeuR|}dGo>)AKI3|E9+giu-(0NpBbdl=UQZ)7XR_~R{frq`nwrLq_& znhQtH$%=5{0^rx#hd6Svkz-6eydXK7``IJ%I`RyQLH^fdCuaNi z3$GxH`8~U6^4QT~diH{Ik%e1o*1R{m&LwIKmMn#|`V?CrU-9)`e5+ zh;?dRFH|&hM9&_~91Sy-Ff$rvsu2Jp6Jd9CbkO(z$J^BVdXM&J5275pCaI&mpQC5)sH53YiJ@q zL4cNJWq3#BIWwIy$5}qP zG-EGTv1&rSlCqh(9%ilv%&a9;k`x&;SBrmD_#*{2mzSgQ(-whpJIve-GuI4OW+(aQ ze_3s*aICX_WTX0@VQqNQ`(taQ9GYASad%aTYeoZ{+{m77ktL#`K$fogqis; zb2H4`Qf|$KxZmASPV+Ku%DCk&dqXMnIyce1a&RdxsepOeBeG`hD1M?mHB=r`x!!T> z-fToyvw_k(S&BuiyO*P&Gq)B+eyT-cX;0@6$vze?G%E)KD@mB0 zP`?yynVJ|o#o1@Qi1J?YnQaSvGY@f+Nz8}J&9HXvfv=hB7R(vs=S&{t z$!8vXyYR&@^B|>EMf2{v$L-~)u1$0*=Gj;S!6IO@ws*B2eaaJ_^jMxVPxu-oKQYWt zvglM#Jt>BZTgF_e^Vy1>ZHhUY`tB?W$(3>?2v&vJRe5TmWtGF_X9zpPZ0DlzPLYuP zvhZ$K{WIE6*>wv|v)w7XoE~P^1wP8iKEThgmO;AiaN*ZetUTRQ7D$OvVRloPT_0vQ z*xr+8*=))4{^mjd8nZ_Vu=`5TTvSRvnO&AREiT4aREXhz_gKk z)hV6Sc>txqoDO5%c`lk!nxItF<}kb2rMWLe#=xms8cp8LX=|9>>L?kiwmMvX4&N4L zw=D|a=5YBre0!MPz9@XVA(fxPRpA}_a3)}zVAi_(g`XtUW4bpNzd4+h_Nrvgm5`Ge@)k-prpulfUU@U*?}Yw-vr13_J~R zHOw9lvlaPgUq-J@4RBm=RDPqdMi^|)LSh726jRyGLfuMvXwaA~{$b$-NgBX3b0v;x zkReO_C`XJaree@fZM7b~1Es|XF-}trz{N{y!V`+1W+#V=aR)vcAVl1_-HMH@@|p?P z@dHn7iqQ0tw($>=R@m8!SwSV`HG4AfndnpFoHW78FNwWQWZpKM5}oBK`k2jVmW>-K z%f^wbDagrB6kcI!_{_hZ|C$=H=(f&Uli|AbMnIY#gVQYTlusTiWN8?F)Jv%Tpz7gA znv4?}jR2FXvzjNJJ!*D6fp?gl471Z=7R$xF)zuj$WK7DKmZ7X>FM2GVbh7IS*Vli) z@MYydR{1ykFw9;F_0BN4*`H`qpCiQPeA+*D?uRPn3P!yXV{-FXnRNqNbH?PFImrni z)@xX~n0toVOJVkU!x=NaMCZ^)?lM`Rfu6n!>W;Vr+pgI#j{*jVp~j zX0PV<2$^!b>Vg{~p?)OHUdtm!B-YJ?u6ek2SbY<9Xl{=BCW|ah^_smA^vNehjBv*K z-uREiM{YFAAyBPyTdgvCE6mP6-8M}v6jQ09*}v3&F-~mASdONiv$tf-OGiPrIkskR zHtaF-O|zTKTXmG3GUB8IT>Lv4Q*JfVkr~nI-OWCNsWG+@Beq@lZx({;mzR%a79l^Q zK>I7Hd`yZFs5??o5>e6bh1t7Wg-#8uYH1=md)JM4w~;q7>w6o{2*KVzD11qIG($jZ z*H7r1T?lm;_x(`c7V0}geREEvDlMNd#I!L#=@VubFzVZ7yD!@|89QZc{x%DVhRzxAJ?YA(3R5zk8=x+i0TZgd+y^z71N{hQzL9kfJ)Y*r61;z!|bDmJtFnd7t|^3 zJ^T16j6U95SRZB|HPZAR&B%5UyEYed9Oaf%Wx`MD>lTI?zS0*m9Auf4}gYD&7Qz?8IhB zQ8Is7XiWHYWJ1rHNf23SnX)woElm$xc1i^qs16`d1{$Ci7E~n;{W%O4&uV zdQ!bMI8HP9xM?emOk(e{#6QBy+U~$> z+Y?Rnz?zyf^EN=+G&LHzC_Tf-u`t5kG2XfM&^S8E_VD34r^%eYc1T-PrLj9|rcL}SUw2FK8xWaJ3PAC*rQcYUm^X2idVd04EmhPtY(dyWl@tVb6-4R*&KC zD8R)|;>AClWL`gMsy&H?DF}YPA1x{_Vmw8R%ak#d=6%}A0=)I%Mn1zE#50ENJsRqh z6o5-&eOyjqzLH8*Yt<(KMKEM)s9xx^KB`148QL?IZa}*Wt6Z~25P5wOnGhgU<3;`v zxadhVVWmFN0F-6DXF|Qor_xx4&p;4ZRq3?q6AAta1-iO)`$>I9QPf17t$d}hwox?o zOAtpJ$r4SRt#m=X2~x!&hzd258hkvpP|{Q(d<3d}nrn$a+g2c%RGyNrWy0R@Z~(sA ztKYFSF7F@GMi255S?Xv`lVv>z9uztvOQ>HKA}&W=kG2B*ThRBYvkbB?x7g3N8g0=Q zYoa#n(b2}mP^0eJV$!pQt-0(*;iB(N?Ac_KO>Ls*WpFV_W2ken;hLiwy5E@{G2V5+ zz7aN6^y`N$DxArqFR$P{8(VHr5)E>&sLlCP26qv)aomP8ro?4eUE2zszOnP`l$)&H zHp`wc62t@O%Ej4-!9&XZ1?LW@OEKls(UBl$yHk~`8`&5|qd~dKXyTDe;}j(uf3(R_ zdwAI1R)dP6J?&$Pw<}KUW@FuQQdGIVh}w8prFP&bnBBA-tKbYxE7N-rbF-CA9c;-W z{|Yxyz(CoeNtGumn*OuX;`ro?2*{ST=|CQZ zdrLj1ODKxiaRV5b2FE^YLxFa%xy2i>1c8o3dWSGJmC(08^v!WeBQZq+#D@xK5$$nv zVzBlpQ0X=i`D%j+csTp%IIh>;zBxan&v6uO7>AmL{J7P&>4*wkpB+&5*j){l-@V?> z-&d4YJb#4E$?=y)q36h;g|Z=FWUqG0{on!Qs1vusal7u+6vRFy^n(ZNjaEwzUnK4D zMLO5;MRDihiyHi1iyJG|$+h*xyDW$6+FgcM@#osCibZ>0l~_no!)@SNtyP>7ph5&w z@2Kl+{zV7^6uxY5Wn8EIb!!PnTOti=*C%5i_X`YP0yDlkL)6dio;cj)i9N&)Ujq2? zHnTMiP>G`m_PXR!TLfSBsY#nWwYQUP>k#z@x^Krz+{9^+yesJtF&9-Nj7(?sq1cgW zb$nOIX#|9KM=|Py8G)b-@J$v@L5%FsQ8u{VB_QhcRymFIdvzvCtyr7vcp>A=Vgh0K zu2PR|avs?Ar7h3HchzurX-I&&3m_fVDdPdj5Q{(1;V=s0rg_>w`9#TQ?U>=3*nFyQ5CKD91;_9m&zZvOTW#169Byb$6uY9l*! zMD!VC8?d5S#L)ghq^ErrVRk|}B+yQLH8qbOXh(C0T838gU;sScGB>i%Cz-PT0pWXN zJNP1A^QL!b-dm*Q|79J1(hjb=?NmLKtIP&)ore+-MRY$7b zmXA=f*Ed~RgmhMt{YdVh7)J-8PVJ_7jWvV8p5|&wVvPFe4TmP61dffii)jdq8uzJi z=9k~>90fVX|E9{zVdR8JNTch>33Z)VmAAOqNfqIC7Pqt7*eKa4B2twl;cp|Wj^u_m zs4ioG=t-@E)eShYZMBZH<&x^}ptFO>sG;O$#Ai392niX0|@~2<xMQ7dt(*&A7Zt zdG(vN-jel}XLfO(qXub$@j1wL??muJZReE?xe9^gm$#1G)r5to+noK4U+U zHa9PW;8S~vZ*9c=-tYsqZU2D#9e;2eDC_r?9xMB<#gk01RM&(AZxt1CG5B(NT;(B` z@Til)>csFhD;Edq33adXEV$SOt?h~;sn%`Xv$izUAIQV^+Sebbj`on0i@(P64ger~ ziq{PRe7-g!J6Xn|itvN`&W%&A@thf8A#}R!TCmY#+X~O>Ht#TST|Y?F62>_exriL% zpt$&0q!@8c+LYMFwNbYXuxn;63X6vB<&}e?euJr_kgfX>#mp;E6yo9dLi9wA%`CTp z&6|bC7nUo#4rG>Y)lni8S3t3}L|XEIKt!3GljD*eUAp?#K83($bvKg^Ig48H;P&Ip z9^N`2xth#+h`wm}AKVdZ3csR-nuq_v9og_d2r=ufp{yO%z{tj5EpJl#NgWYf7@hOpnN; z>sCW95(*{H=x88Qy&uNeOYvg~9YChJ422cv#BJMorKervjjAj`EerjanU`9bsrt&5 zOlNh^sPEg*#S6NqSP?TUkeTD@(GWmYCwk2wxBs(3K#b%jPf>w|Q0DKW*G=0Fh=&tp zDwaHqgiX~5Lfjy^6zF@vVx(f7E6 zjf)DNLP|HX&l~E~FGCEv(ThX9FxX{uB>3hoAB~Y+Phaffh*N8io&;D5Zp6FCq*~G? z+QohiOwjY-?l5|d4}=bC2?GZdrGT9sayVRfN{=z$XucCTr5~t=(MK`;=p%7!l8(+N zkNM;=b|8#t`C?4V7i0T1KoD)f1E(yW7|L=v1r_HkD(fsehhd68?-Xl}E?uP=FB{bF zqG)KN81!SbuI3bQRvtBo643J;P0cey6_6OOq-4;_6*f{o(ansnxs3okw~-@C9L%OI zIAb}tkuO;{g}F`H2Hm(-)LOl>U8+ z$F{BTj9Dgk7x9U?gt-m+aL;XsZo#9#2B5gIn>d_KNN`GlxFK_G@?95mTe%ZWR5E%^ z4L-PYaf3VL9_dE!*($Mf6tNSbP4B*NYX?aCW??0_Uwx4MDF@~n4UcBK#FEkn5;yu* z_*il2C!zGyQ2HeqmwpP-LdGH>-ed1u5#D@)_nS{dAdbh;a`-z_B3>AW^54{*QM$$> za|*`NFSR&;>O`L0wbL9&PMBp^c`UM2mmJD}>63@$zvQl5ttxQyGsQch@R++TLA-hQ z>jL7^0@a@iJox~=3X>5{A^;Toe}hT9)tA14MD%;-5F0mCY#fb zf4lGnG>?q496@{s4RzFP^9F43J?{B>3=7inQ%!!vq@^X-n64lJ(D#n+S;`V|G)?tZ z{~u)e0~i4f}}ux_TZ$vbv6515c6{r40xBy*+=x>2grTl4J2m93~&fcqck|C$E9TqRR?OV@G1u~BTxh2cy zAefYp#B9bgQk>ODQ>VlHTvVYT&vi7W7OPPK65|%D*>4!z&4A_d0Wr7M4y1u67T)kb zm#KFnt1x=FCy$}{WWnFq4(2hz*jVsU963TenmVz_lIQy3&I7QUr_gL z&*1OdE;w*&amX3iy=BhKJ@U*|NoQ;ctCrgiXhUQ*eNq2gX| z*-=;$92`RrL!%8FvlBg$&>R@=?1&MQ;K=O;>f*YGlRR~JUNWI>g|iH)<)nTtCdN~( z#e-QIz8E2**gC*|2H*XuL<1<{y^3W=Rop;xYK3r_uEfNY=>W?jKaT}k@u|94>eJNI zr8DzQaYt_^A@-&=04Oir`=f7QI-25gK<*nD2={djw1>{uYp_!$7I z7Y1)=o)-&0f%B3JKOyZ-1~Y4e8Cto&1xL!HHX+@)Ghsb9wa*W;2ACGkGrUfN*9_&; z5#=et=&cT?TpQk6)v8-5A;!$A1vU_syHjqu4~>hrSE%UbVU5{hUSjQ5sNHI=1mjx< zcRsbxORN;0i(bHypsJ zS6RA1+aq?8syZf3>Dac+wNb8(ngys4NBQD%ml0am8=%TR3|?tiZ#S%WeKDpZ+>iGh zCVQUlK^}RiyB29R^M&rtkMs22Li@_k|#g zywo?gzTeo)NKIV%R%+Jq3hHL}P13Ny+lp=koTJONQ;YA(mEGqN#)>^^mZF&M*l}5p zySSw1q+Ds-~TOiWW0nMN*^*u;acBc^@l2kx!sXY?uN0uqPw}>sh(qZRm5G2 zkgzHc=JqIjkF9%UWx1L;!`MwI9RUpxUTK~&$u1f`bv&G^^8h$0PN@>7>b|$O5m_0Q zK0+t1s0sK}EFH9lxqTMPPiZDTw@-i}q@VIYImcx$OxE&RGj|dIF}Q1vpT@oGU4jSK6!%>Ev8s_bGvY9)m zaam&bly5|Q`)GJu?fUjn4GXMMf1pAI&{bP_Q0W7+BifEU-WDF-E`AA)_4e^B9|9V9 zQteNRz)pMRU`oAw%A3&MR{3uaXUuJCGE7Zo2%S`{$=;``aG1g)fmgzqGMYP_64*5s zvmI5oqsDqw)~c*?M-=^tt?F)bM;&285qSHm4KxZ%lM`S*&b8d0;q7U~aHCFMRg$R_ zPFR;W2g=ec#3YepQj`$hzNjb{g~qvKVb^xH8&klpoPs~{i*oetU9!Xu#GG3l%`UvL z+2h0ifc4tNiDN2tga4Q03UAI)o$1e{=Pz+9|L8SKerv<&QFcgaf%X5ZZ^K#B3OpG%Yks}2n$LiH=8(h1fCz}PDsKFqDMKONEfl$ z$Bn| zGgachS+g*keN8QqS1`A@hN+^eGhh6P?HyYgBy7PoghOl&z4F*aqv!g>{LY~`3hyHH@3STSLJ3fA+6(eun zg;XNV-mb3lzqXBE_{Av1B%8E~S+Jy6?DD4cIk+5FWj7}-Hy62__}Scq@wWoir9{Be zN2oNQxbja4EB}-?AD~_Nq`wcz_WuM2egli+ z$f8WBtywd6<8}Pr>%>;2>ali2Sk^L$UOgsXO)n~%NVKv!9@$*hjt=Zd#ONCd9^6di z!OglK7bgfv37CHo@`=!W3*TF4&11#RmF)@zD3exscd#&3zWjNg;>nv5HI zGM;~p@<^|%^|Vs1%=NL8OEU&3vZSl79_wL6RfVI5o~Se>1@!SJREN52Xg__`TKm&T zN4nY$og-{ay90(NnAWj^d@Ik9IYG=()gOP7*VNbkX>L1l1@wbt)nbBav^u3>A&}a6 zW6<~$u}SUP8r)19X|WD9to2W)AMwDj+oFeNQfu&Ej3!?-mqotX#;RSd5DboN<^0Q% zwlXc=>4k85!PU0rA+^ux1wcEU-M?0w_%rtA>$Ik&iQq$T_& zKdo!AHrRNVBSzJlQYv_EBMgMrh?6)kgt7LlK|l9XY_-VftzNVi*7Bz{s=l>W*F#?} z9sL-H)rX+RO5-i|P|@*R+o;^qI+pZb=(kTVG%El{Z)IAn(Ob{OGP0Q2FO>8G3#B!- z4Ue*1j0#Ds4QeKCL>4Zq(9>6l@h*CrSSVd7uFY5Ct;xMTFF-0vs7xai4VwU_hVC#8 z-y{(kVs*CD8d}+Jt-(ilRr%Y59u$$cJz!Fo7zROzPgc9b91nAL(!$lw4gh=&8iL7}B+ew? zw^yS9I35OyB7RID)qMM|YrzIuw$V%z51;2nrje5AT8ZFLtg6LeUQ+$$o;;i)U`a*o zX@p0zeg|Q?*zbZ-{|}r*=>Tio8mha)zzJ25r!{eH3e}B3LJ<3E8-BcIE6!ZqEjUle zwo%4G&B{i zO7f|0fH{Jf-4T`vvG^+be(gr(({{PJ8!D6bAye(bBtQO0J9k3{GLkM#WzM0iQzPG` zO-#5~-LafFZ^zWQ3a6fM!wB0k__V~;>>lRo9R`d@9CW#t*|d@{sQ2weQovWe4&#l< zuZ8NheB{wkQN5;f9lAYUHCM3p`)rZO7>Yf~L!76!Ipwa1Dfi->4(13AMHsL)`*8QW zwquz?*EXmT%)ONA^ zE(cqYdRxCB)tHiAZY0H_g3mmns%IW$;;>)N&RYArw_(#|Smp$MyYwE2nR{)2?8&@! z>&D<$);K_22NC~I^5lc+XTPNW)_JkY9kqe@CN!VcA5mK&)x%tNHsMYJD$$1k}ZNIJq^;=Xu^>=-swG4^CDOA-qn;R?iGJ;E5>a2D0OmU{y zsC9xz7Epnr*10%B=G#oQ=>b<~(L}ZRBdxX0b?S*3F<*}AqZ-_-y(xO*8Rwb=s;pSW z@*uI9t}VqhueDYl_HuZNZhW~h?$Q@{vP8!;T{DHzheScbW$wrV{Z29cy%9a+W3S>B@B zam?tPyRWYkd2{+KmFCsiwOzdRAZYC`Mp5N`b6&!wrDICiR@T*I)vCj5dKA+H(hRTr zq=eZ>?Y>c1y@Y{BThv57gGV=~=g(@Dwc*{3Fps&L5kf}~wUeB5#n0K#-BhR?H6B}X zW_l+t4vQdH`@Je*M6U727Wr`TP!2gz9gd)>{Z)-Qy~&}SSUkhd(6d4({WRK`3qkj<*jtol~r%WOB&K}62M9TpXi zKjQTdK>}psk77`SPQDp*uQ4Ah{$1hUgOJ>g=1ptqDXdiI>q|6#Yag#tawNFn44m{A0yJesi^m#b|3sa?dP!;DU8D z5prB1$JFxc$1wxZ)|nP9uZ=&EssiHiyMaJNcHH(|hygAcgZUwo7bp-i5nbdNiC9JB z+NYk%Qx|EJ^43NA!dn-aWXIWCg_X`_86neM6Gg`z-R;loq!zu_WFCK-O&=P~S_#ql zhU3MCQyWQX03oP}fU7tm6<={enF>Y@-l9`U&+Dj-X(cv&YyLLMIhiwUN`%cFke>Q= zE_<%sH&22aP&=9-ZV3XHltBsa;i1EGW=x=0yeroI>xIyYFYU%&u|}cnwLIJ191jT3 zc0XTOt;jJd6@X-#<47SvAde(Ox`J}Ju%MThXn~aj2x5ZhW+)8KDjG8Nk*U-=^k~?Q zAXdiB)z;Ak{nx9mD1ok!gE@+=iwH{(_E1ypzK=1``S8k~bVnSGAU;F`!N`Zw9>q^K zVYIq83hI0F&Ans5%>+SkGvBjC=csXk=EHm_8h9=TUgFo%&|+`3LsUD_0>&mhr-00QX<99qGmDySVDfw7^MUm$7o^>v7{&z-E3xuSt|2fj~e1a%J`&^ zJ?`xxUm?VRVgYn&+ z2!z?Yiu%l2rZ`HS(BcY)EDtsMLHYrDNyw0oiTQ26lP;>(HHo$R=Aw~IT@Edu{c3zf zD5%|}<^Q7aYnW^|LE{P?KpUTJTa0PdPVJCOwQ5)A@1_&#gwxMzZ9wYnV0)Mj_xE=z zi(Fz-^q5f6p(I17DUPT}BK=0fGTOZ2$(37K2@FRv!4tG`9N{aiT+%Qbqp*xJP&uu+QTUjl0 zyqmm{$N3;gm;;aFE(1c2X)BGGpE^B!hl$8?8m0KtuHuJcT$Eg7bp;o9A)=!Hk^T@H zeniok#vbP@sh~cNVIflS$On5r_zrV6h7nM2YGQKsA`04`XGgu34k$_4PSJ6b@wjv; z<5z)4Dr$zfY(mhS2%S`rekrL@WVc!q*@(3C;q{1z7d zQ!0)zVLBm0L2_kI14O?R7b22QGV&wn^~Rf?byI4OQcQVJKS*KaI<9gdoX_C69d8UT zQz7cOO7GEm{GLju4@0xc^Gw_3!n0`#o6rW*!^>_LtAVzp4FwJrYO=}qnKovvWDxU* zY=vkxI`NcVPhpKT&6>UOPwg!kx&zJa(xt8I3eRSNd58miW^mau=5@fBHjbW&5A~d3 z5d+N=72#%+WE*&ll32_F6^!4G1>8M+(BYXqbSIp<`Q+S9C&YPBU*C559E=eTgfj=^ zJOHW{A^sf50}mo=aypTNjlT%x70jbbe{UzuL8sozD>xb#&&$!?bQSB3k*03Ss>4IY zyBZ}=x}tOzA3*a^L*Ms0Q6?hdEQgp<9PWLty;>$Dl>bzo2!>*5t>OLsUc`Fe+k)TU zXO{Te6jk|cRbSEAy~>3waL+T>unCH5amvuGuFI>+;oU2t@`}>DqQ1ye^}b0$dUg~L z?;r39xoBl~e>NMJm;jMWYKA?3GpgH!812_RL+{IMcKAi}we(0r8|xo2YGa%4nS0-$ zr8N|RY68LD8FfQ)V<|!&DO>#RC)K2UqiRw%RqwtAl3k*v`&3vMsa{66v>0&Yc$4tN z6-AgRMu(OMCbq)GV9ZQyS;$+a#}t{>Yr;Lj^I2ewW>uIdW_%d@emyC!|IGkTc(<&; zn$XGQt(^C@lmnY{-*@K+Qa)sA4g!I!D2a-+(c1B`x6Tg7Vkq=#88vBmn#&`cNKHlt zac=yr!n5R#1h6Zb42;;aOy$x5mw&F5W|vAqktuR4wC@$+tMp=~f_66od611Z7<;}& z%)xc)=3%g?ODvF<@`p{|owi4O45_j!RP=^##S%f^Cs_MFAtCrJz36t?As$9Wz%6XE zy?2>z0b=kWl1{#2Y3oJz0NOxdj3v{9q zcE_&BtQzKY6_3U^%|F;==#?@$jS+~qCQ=N5^bFXsYUtz4(M^cL^j?-`kjT623rDjh zUnv#zt89gG+clcTn5~kwD#%D|kYRtsi@iNu!s1D>;EvEEcR99agvzDWe1|IwLgo7w z7@t#OvLK_TxjaOm}#g(c;Z};Be zwk;?{*^05&?ocv%l(hn&IKUlk{Pg=#7bvRuW77mrx>|2&@(~Ck6nTa%za{23p*GXG zHi_C|chMe4JKK|=?2!ny%-x8~&UrCzop1X#W`>o&4RP&7S@xKZ_H<~EQp{Mpo?}Rc z2h^odG0NL8!SVlx!W~E%Y@?nN57k+Ah4+t0zgYS6PNaNA3`2S06fBBrKyp&GWyWX#&r&^|s7UmZdHYY__DGggas*%_^~p6e_qPB_vb}} zaM1VX!GBzsZBC>k2JIbR$s{_CW@NoUr#KvwUoCBTm2Yg(+t6d}v4V;!u17J(j$dk4 zcc7ambWz6)G&Hn&a()S~T+=SGVmmixCy(`07^;_H@x-g|l~&!kB?1zex103U1QINwl={xYuuIz7UEv*O^L?PBj~i3^IDAL< z=v$(uCNjHwq(D$hR#r0*L3mrDdI7nUcw6*GGJeai^9nGwre#~L+;2;IDP2uNALRK? z;9=p+6C(FWgc)y{7i@j6WFaJrzM98tsf`_&`G!4B|Ct1qS+nSS1uY?M`AM1#$jV^- zNssDL{3M}MbrGsBKn;>Is=@BmW z7gGgsfbi}i=~~`Bqyxg*U_(QIn?qpZtWlHJcDSaDQM5Eq#zedf@VDFZibewJ#%7R_m{wKWIyB z9Mw&u3shxvK@F(qr^gPvubkcNz9QesTqvzI3eN6Ujm~bj^!kjb;_P?Nk&XRlL;eq8$XwW#(9kVK<@ zjw8@XMV$2OSrI((>~&p*L)Izv1TV893C5?5&+^93b&~4ERcsWfEUxfD^jdyhp?WhU zzUKAF$-^dKUN|`{enZq-hGur4azHB6 zj2JV#8W0<`9>lk|@D0ZE3%m6xzQ_ua;zi%ePv8m{_O$DdLS$kP?^8ZmNQ@hsubqjJ zGovSv#$f#PS(aCDQ!KwgqCu&HWh%JV*#)Y&5No>Nn%=Z|%guVr)d!we)p%47Sgn&L zo7aTO5(~Q>*>qDco-z0atZw(g? z`M~REIyBJ$$2~+6E*%F^*?vfqpb5Ax90G^5qz0<+vV_sLaDg*@B41ftFVqpDAzH8v z%0w|nGcgF@*Spjjm9xyh&awyk>{0%X@yC_chr-zd&>XGPlq&*4vkkiZILXig+?YvMCcJYWm6{(AemANzTlsW_I!U-6F`a^tm{QNcnG|8ze zsWCq5QWV?sfl#I?>B2aq0kv z#SSQRij`Ajlc}p%i@A03u8Y4&heOxh)A2O~$P2?^a#CXi5&0~i1s~F|$%!m3=3e%h z5kvt~Cp-_F;&|SE7kt2_>Fix9Sk}qAk`JahyFGOge{GD0b1+ZJinT43N_iG2*LGc) zR4&;s7pgY+Yi6OgMPKGk{hDm{mR|AQ11Ca=gQ4e^ChFR#df^QO|#Pq zQ70k(F5*ZpRGtDHd6s|nDIZmLQ66QTM(nD5OysQo<)7s-%0J_fSd)`d%0J7Aq1pNY z9UCkn0(`_Kc;kuFFsg`Jg8@C^n=65YZ{=f(cd0ZY-X^uW8xJ5o4o$?^m?)#c-iKlG z4vv`fM+kkSOMVt}RNzPIh)kA1b>CXnM7Zgi?E7AMehHEoAl{7!QxvGOG>1jdLu1mx zdAQgQr}pdmL7iALl~U-&Pjs!kBjVW`~sUz}eT3XiO4YJ7|hKlIMkTOX9m4i>k-0)+*zk&&Y<# zhVn1SDwV~H_HAm)7a^n9jL}Mnr*h-5*Qrr^>X5K4qapcJ;h{M|PVAkM(2nyRpl2a&ayrRVgLTq_}McsMoKEC&ftdoFK_j z)FgVTHLp2rA3jJOm_{PS2p8mK(w0Y7dN zo_gY@d}2z|v9WU&!_N6E?1d{dL%KqN;fOLAdUSg8LxFbTDxtPqBP_O{FMnWsrfqCZ z(S;LTS0^YnKJ9|wRPOopNGqJ@u$UNA^oH{+bulnpkI`L#>_X6m8>&(+Q$TNGxQ@c0 zY-G9&ZSZGw+$Ba40skevF`T=Mxs4r!8aW9T8$nIUD13Fx@1vMuRE%AUsi>)c&^;tQT%)77h5WH8B-UcIZY4N2x9qZFF*$b3pGF zNE0T{4(7GK`4+7d9w>9wGIvwHQ(_ACxtA5NUMwJDb83C4EYr2gAoW8K(bTl}QwA3n zu&4^474Fff!UKHV{U^jBjGC!f(!(t2qhx_aPjWF&-EPeU3gwEoim*CfPPN9A7b}LIRbYO=lCT52m$)qU^M}0+27c>#x%n>Lc4z$c)HWHPXNMI&ubvOnZmUqGa}e%j)XAU8s30`zpT}UB>J$1!yPtML#??+5&`+H;lC~m62 zkztJ1)*P$FnNdmm*cu(hW=EyjakAMl934p4%n8V=cnckiw1?6?mj;+73}BT;uQY%z zuQb51xKR0fbSV8yheQ8rfL2sZvWvHfQTcm}ew{M!U#%_7sJ6zrITsW5iG+S)OChjr z2L%TArE^E?#kE~pJv^5E=&U570JO-e_&)Am)5I?4*e-FL&HMr#pru392}RbYSmt6WznxpIvOREvEsiA=#6tu+p@9Aw zDq~lJyZDOO`+Om&wth6bsW2NPC(TXM5r~yMcHjlt(H$UrbcYC!TdGyUs5T^xZkK9^ z?B#P&I^~NFytrQ0^-}w!ci0r6HZ5~*UR{8Bn1Q2jGoAlLWKnu2^gl8c|oYl}E^+JfgzhKY;c91KfVX1W6heFE2^fW%N(W zF^xVzci?(`LgHPdYE1Qv%nPf;R_X4^yX$>6H>22JLnmv4uwfc)XopeC6NjyO??k=Y zcK@L9_o#!K=>)wMevf(quB=W^9=wO4b7V=rmdI}T+WReRi)oNhB#k~XHF|8dzqp0- zQVVun>}>6IlQUyPqr~RcNg4NLJdjbBaY@D%88>8HlW|+dO&NDFhT3Ix%2+2u0Yl1f zNGXQqF$N#Yc3Fn98d9c1S7j)_q3bfHWvIxZix{PTZheKtw60l-Yw##jJbvGsX5E;L z=~!!rFebKPjBREv&6+E#mAKCIwD#(l#A@1*zVjV^kV?;AO1~H5Z{Od>-_jC(SJ1=% zwOJ1_5i;$=oiJix@=1A=cBM4m^>0_{&yxG+{Bq?kbA6>)(@K7&U*xG((hA>mner?D zMNC)z=MD*{4`y+>c*D@Xe=Yu2VoBj0tw90FJL}SKXZqa~f02$2L1ijI(EeZ7{*S^x zANl($?f?CMe&COv+j?)H{qpbp;K~)6#tVy`q?-Ci?$mr z{A+Dl*77I+%YXOH6<@*ee=Ye|%NJT&mS8=N@yyDWmapOeC;zCW<@ffrw9G7PY3c21 zY5ASDmX?(rEiHU41^!0a_2mX??BSDs|oLeiFv z_fc-H7|P>+z1-IFzw@`UrTs^3Ezk0|yyY91@>|}rIoVdWtlqMu z<+pIHZ22#9+rN)nDOR@Z$!-5(ZhI}a{WEN3{#Le(W5!%&^3cn<-~WK^U-GxI4nDf12C=)7*9(+nfA_mbWpd z_*>cXmzXi_6>LfyTCU}xKf@O5(fNy|Dd$g;UugN?QoPXeuX5Yp{LRvo^M^Tnh5v`E z`+$z3>f!+YHrdQ>3fax}ncbzA(4_a?JE9bkCLl=fy{I(lO+bniQEAddItWM*6cPA9 zQL0E&kq*-9ci(^BUgp3#!+H7TfA73`Gh32uHXCA{zg3_0h*UCj240U)oeeU%x*m~- zKU+f8CW+T+WX`1}jm$OZq(18rU1?$PwiT%A?9^lq70Qjz>Q_4l;AUZ>y0< zwC9Q;G%{x}jdP##XbX=H(&!XzN#Zt-p7AJYQ|z-I8p-2G64_}~inb)tnErnkqkie^H|(afU|n$_|K2{Mq|7GW&@wv5|*HX6LMI>1vcD zO47(&muhO{5%p>G8_mxU@6o6qZHAbnKAR+F@MtZMlIYmXF545$eukKO+a|VCB1!x} z|C{#*hj{e68U@688r`Ig?mM@}=3=OkAquf|Y;W$v5G9o*i(aeceKXyA^C(GF;@Ubi zk}H%d8mm!~XsJG%B)ZZ_&MH-Ws_qHte2~fYOA;Tc&(iU#QLVVx-ZG2DWSeLUhy(Qh zd5r$!kz<=_Ny4C!xh{FP#$#`*gnz9$=TwoCJ}bK}3=#jWxsN0fqESKG zQbm3G|4rJG#EHT-(Fdck^uMh2h)-xF@0C4bA&um9>Jck>w3k2oyBe($<<(U}_iJQk zm&6^hTCWPS9<`@YAKE-(6pyCTXc253k9N{X&NNlbeiElT zf3U@-MnBSL&AlC0qa^Vsjm#CgtVSO3kVdl0hkX4d3CGUZxeU|DtSHhlb`2FJt3sP5 z+R^{=IY_GLO(XN{52lg1rW0sn*3ReA3LdRjBSW;RY*T0d0GWA3{K2DJYLq0_eri6R z8{#>C*0n2kesj|3IGsU5jNBHFdj><4Ad~kIhNwy-b1rpgB(DQQG^3HZw`X-@*I#$G zkvy8kqcfvp6-(K+^XMRtO0cHX50?(4sUlXIh@E8I8=< z?Z!5kN26$DK5EQjTTCPKdDvGpGVdKXtC2@!&`6&1+~VnkcyW|I%8h3k=IAf_*c@rQ zW1}=RqQ_(!ne!`6BY7Rrqcht(G%{x@F2T&*_#YyJ%trnRyLOQMH;_ z%(j|F-_oXuQ}n-l%u5m%Xmp3RB+-T*7vzy^;x+Z?mrrENu#5b(k6blFe5opu#A+JJ=b}ks6OGI@-NT>#QH@f? zaT;BuEmhp-k=SEek~m7wN>k~hB$0*wH&?P8jm&38BzN1El=t?8= zy84ht@+zkJJv1NBQ^m(zF^5LxKE6_;RI!#u8MLK}lk~q_gH&;aM$cfW-^V_inMbdw zQIe=hBRQ*7(Uk378p(YGL~k0I&kx3_QEoAdM&{MDnn$~N^c#<^sgXxKr;)rmlZ3uE zcHTe9%(>RR(>2h+%WcDRT?yNgF>IQNK0zJ0OI`DtXXP!+ZoJnF}vouDir z7Sl*RqX>v^)F?^pp^=m42aw`GAqjPsDT=#ig#%wE9m)wvLrE) zMzUW(EM?nFBXgz)cyvbPlEecx?Z?>ll7mLFB2|>5k=#d;Xu_ZEL8IgJS$a0Ywva}f zX-g8n)Bomk@4t9t+aI$KkBZR9T>A<%GH+$|dDNOmy?Hdn5zBp~EFk94$h>lv@Mt@Y z%x9MS*^a4ElK6{8^4J36zOw8h;V1L?0bMyXGS{kr8l{TzG?I^q9#Mxz@(S~ax78>~ zbXU0~@ga@mBUo-RnMUTdyGV`liA^+;_b=rVGH4|KC5a<6GH;>((8yfzhcuEaF8@us zO<&gIpN+nz|C~m%NESn-*s{9CdL=r2tcj5%hgcG5rnYQuaaM_2q|kF9DGw}?81c(}=_4sR$siK9NM|W3hC)iPln^5!ZU3V0v7oA~ zn263*=%c!{2~k1Jr<7Z?qK~>GQ-Pkv%g!IL)ECFFK4_sO3Df`QuMOP z!}y*)lG2)_59Ak%41k=s$Pmb5i@Xo<-hbI=B<7Qs#5~fG;v+~!i;Tm3nyD(C_C6k& zuAKQu%s^(S5?y>GK9N%vGb}O>>pWk{EHPGmfj*nL&sebxa>ydv(D{Or6;!noeI6*e zO!6Hh+XM3`r0hYTx+G0#6Jng$XOs65-RYx2wCSeMl`xfMk~oB_FO>)}S^R>%Z{^Hn zaSU>ZWr{csxn_}55c|W}zNUyj&^b&}f;RfDs5pmAO(i+T5ZSXJ&~sWQMcM6JE$iEQ^F5_c`rzniBess>mKEZ*j9ZvqTg?)nb-qq6{)C zSyqUO=(COctQ2*S+0U7kq5(30S~71!?pve@B<@jcHCBoi=;K$SiEb8x z8C40fQ%Q#HgjkBI|8eHDl7CqK6kj7_e;n&`L2O2!ppp#RCGjm*qX0>D+Jv}FBF|1^ zuDUFCLAtVB69*t8SZ>gF&E;ACgv9J~Tbw~=y%JsA78fDEsH)YrhvFKlZjhurk$ZnA z?#Bt*dv5wjicazrnQBUecqHN}>K1Qt=8h_rZl_0DH`D!i!L zz*SF0R#g4ZlF5h670$%j${~~TG&aLHTP0))DiI>yRvnq@oQb#9L#731?6$_p^yiG- z)&!X;oJp`XL*`4)B-olGvz0TNttB!?IiuOyBl9n39Ja2=xSqx4?67@+OmQVbIBheL zX~7w%Z7wn&awggK88T})lWhAEnNys}WLtsEGtOkPeS=Jv=drWwwPhevNr_HBq1uB? z8_xJ_dm#fX@&jbHMfO8hTI2v^zeNsWUze5W!e=`INqiAojezYpNEVi$?Swf)mXPf< zo!NVxAJ6DCr${!ZsOuPgjy*J7t@SOhv9btE3LgzqVP(G-J78n+NH@5+CqPVbkKi zKxPbQ5|w<+k{Y)RnfWZPxaH`xg8TU5RzSA1grv}F997aJE}}9gI8!}tKhD<`B|_9z z^2{O!kx7Y<-EwQkokZt!B~9XL$DM){QKE|haSt$`3Q96;gX10|)0i{Em9*zRW8xkm z)0bshTtb4p?Tq9;bLmyf^0+?X%mO9zmFQx5oEMoDEMLX>Alq2Ji3>u0;65ATbjYtP zyW?^|{$bf4R}gZO<#ycbko!t>5svQ#aoWul)9I)210Z3REb+r21zB>$kAPHWNsk{3 zsmtj5vg$BrevH>Nd3H`K$)HE3M95v1UzIo#V)t6VOQAjyB~9W^D#^ogDLxZ2C6wsm zYJ3o#D{!Aj@lj;za@A8Mt+*;`FN#bTmMr#SkYOx2?8PBdSaRD-U|$QBWZ3f9OCs|X zX9_CWz*5X!3Yh~e#qFgbCs<0`%RnwG=^a2eH`Q*%g^@l zntX12h2@Zaf+ipFA1a|oU;7kIK5wB{5aJn#PBImem*t3kF8WkrIcon@6IAsENpIS8 zanwFv8%ZL+`xukYAhVRTvLCarLg&Rw+S*Uq4??zZ=Cu6;wTI3w$CRhDw zcRA!yJX4~JbM^ql?=dp1aIC2j2&>^U8B4O?5P z@*>lht1jB}L&mUNvX_N?Vv+KYuava4U$R$%Z0F21`&*EsoVjN21UYY!K9F0MssWHE zoVjiv0&ykAj{Um*eMk-x`E^`{xEuDVkkU%%>p1%-4ta%tO+TBF87cD}@@lC?8T0#o z{)C`Yu5%-<@+X9yGSgj&5dMUyQ}!8d$>ea_Z1jB_B^kCrLVl-Q)h{^{h6o{Ffne@E zOF}{H>j#!*31!jw1k2kA6_L5l(lVhMJx=+ZrNx{%pAb!yx43mI7ZY+N%9a0?_$Q%2qFm>bN-}K! zBos#GAI@AMk!R{Qx%a)Cv1xfAzp6~_ggC7c}3%T?`6GMqO0 zxuvEj%X_v)VFA%eqRH}n%}^O#c(lC9@^-OWN$&)&Rsgb(#itcU=Sw6{Xro(-Rw7xh zb2qxir066iv9HujW@b!+U#plbS1gy3@d*K~8l+nRC8FvJ;Y9i7pCiyC7AS1RO=Qy^t14vXlG>>Bm(?v;&aoEXB0*ko8LH zI!bD{AV-w6Ah`p%$yFt_yO313Im4-rQkqDS*H~U9i%4uK^2)5CL>HyBIAppiv1_F? zJLF>}yBuY;5M-m010;Hiyyj1kT%=8ivYL@1ugr%^bdo3}Db37;w6a=WROMD8M0u?c zq^L#8psJ=4oigQ8!;Bx*XjD1szew4G+!op&n90n zCa;7slxdBs`6|bMdi`fEdx`CCay>#t3LJX4ac4b)~q zJl@zfHb`3l$-**JTZ+zQlnC*@wg#C7N+R0(+FHmv7WoF!UrBGuY=lfu5+d0Knai1x z+MY}!=_uAHp`TJ|KO(b*WxVz?WqmFK;pl5}mBRvJ=` zUd<-Y@-1z)Rt55g$_ytNm@4l99=YPwbvQ>GoGQ<0cgoO(PXFd%+91&{>4 zxnjd9vj~z|Nr+@Iq!4EoX{#W$IrEve7SdEny7sxY!6l!MbyK2?rP@xHyzLBOS*0C7 z)flc?r9DGt4#{%bbg^1XaLcOiSk`C`$WfNHS|a2;%hy`6Tdw?nBqAX1pVw)b+;TM{ z@*~=Gk~CxrD-mLgW*}2VNpr^*EdpuERa>+ykZu;q3HgYtc4-A5vpKU%D+Kw{A|)Z4 zEK&|~Sjk{VhE^SN-Xb+2_bpNzk{FB~SB6#x60}HtNIJ`2?JY=gi?qTTR-|Xt=KAc_ z+9A`BGe2k@AnlbbaO~H*L56bXC#@$|bqdKMsp62>$Fz~i(t3!4xk)3O#$w$}&^tIJ_QeFI|)l8H3 zb$96_e?;EmZfj>ym7hM6naaTN_vyrfK<0+9zdE{#O{$R|E@*oJt;~0k;r|~ zcRaL$$ShEqG1R#*+^9zlLra*!n6D_8!CrAmW5v`7S!l-XRL6I7KS5>?WfqyVI}l5-^8 zA&r&j;*QqCE3co{BpqoJ;(^u=GRPvsz4E+IRiaboeaJi|cb$*5dFcGLl84Tx+CoT% zMLvfdwa8M)C5xLOj(rA`{MH&RHkf45_E&q4Sxx4bs*kJ0ZO+k^vcF zk$sS{7WoM>TZt~7X-6Pmu-F~L>4^H|8O%^}*XeZRgdDU;LC6V9RdL8wmPAK6 zNL*I)NFUNWLqdue=S4A8xAssE!4${{m@A>4FFot9{Z9-&r z^hRd2%IGBhAm5SvMw>2jJBC4m^tv5W@;SyrZgS=|$0z8lWuxyt(I!Mu$9$iBwp?0? z4w28$nkgBaSiyE!5b6MVWT!XAw8n5Qu)Nu>PwShCu9giX3v%KwihN{ynE$I&_$Thq~XU9DD zwvJTD58SzfBjA_k{a>njK${TnIds3gdi^;}(Mb$cwOnt$qE#229GU%sp5bSvjQn1= zF8VrZqADlt%aj3*I)3^6)q*OMVH@ITMnXSzrQcCDGowjHW~Jxq`(st(9PRz`-lhTl zo`#v3<>-vPm*stZ=IG~_UtiQ^S?!qXmuGn?{dTHZwcfE9nN8osWP@WF#~qh&?0tWZWllIQV^wFUj1XrX*CESD zXi@0jSx4!BT=~tG%o~uS7U>m`EB2QXovJnsKWiw&u=@=<_FM+DM_}dc=L+ao!KgYa=nY zU1Xz8h_=qSkX*5%^pV{An54GO_>jyr;!HcI6Pb=GL$BF(CLuF|Gwq#zWae?7_Rat@ zTRHQtQ%B|?_j%W8AoDk8Iyf^UBl5&nqk}UGGFeH?Id^mxMW(pQj7jR~EQU-&OQr-e zeYj6YXGvr}<;;7|vdFAanaN4-Im;pQ182HA>mYNIGhLl^k-1~ZG(bj6H|IPnsjKsK zWU`W&bMEGR51Epj>E`SVc~i-)r0&k%s2adk-JN}rnXEFp=VIRcqnB=Sm_mDIyI5}9h8>FJz^OdHPhbWVbNs3ely%Smrq zL08mVC6|+WITu29S~8!7MVQeH{#{0*&Fs2X9Z`pA&?e)E*j zS5k@N4MDO>N%NGi)g+r}>m4bSxSK?X!%BvScPAF4 z_b8#q3njsqG$;Omot~aCdD9$R`P4X719$Ko}KoX0_=3LD6 z4yt@gWS{oPl_2lpxA8jKl^RdOz+q-!K(mJ(f*bbSO_ ztz<#^IGl5B?*Q6e+nqfZ4T^zK%!ACYOIBqdWN*H4g6Tvge16w=2cze9#v zvL zu7s{pS0>0m7V%`3SIcegQ_tniEU(r0;^t~p&h)w~7o_nPbLBUtv~$%)pJbJxpD(() zAk%|0-CaE(SyVprA~k{#iBt|yQIN-AfX=XwtLP)Vaq z3tdTB>t*$#0PwkTOb6q^x$;hqT{l&L=(7*RD2@ zYARDX(>B)tNOL8tQ?|K=KsqQnm$Jh(3P(DaJMVCfN5)Q_$CK(}r)wHy8GU5RF4qjm zdY0X;S@f=MZn2AHk85rg`S|sdMLx|UpSK)U(pv0seU3FeuSAe6Mdy2#s%4PmlCiz- zb$ta1S!6Y28qfJh*Ct4A&Kz}RU_QlJesS$ZrV`7qt{)+dN#x^&E{?knVusyFM$;z5 zDc4cR42%4Ns#RQd%JnN&W1o`J;Zv^TSw_&YpSNUAVm|j-&ba=-xp0??Jx@62x`fVI zNaTD(>Uq}+bGdV?n1h;{Ox**KJP1O6#my0pH<#2#wxL= zUU4O5mA8WVN(4zVWSx?%B%ZADy#K6(UP@UrKT8 zJsXL+^0!?jASGCyyPBYLb(VPdTaczKiS8Dt>d2Dneg`s!WF~F8NOKQ_EMxJwf6OYc z)%7fX_pe#yecgT~jZ*#Y-ypwPY7a>J0atTu2B7Z^ZSmbX=Q;YlqX{Dqs&F3~=i>1m9>2HxV$S8|=AQLR& zgG{%GA2LUY+nUY2%LC7kLgdkfjqC`2K9aaklAB& z$rLA{-&SXdy2~K5a%a5ilh0idVy|F!UgxUp?goh}p`Y2gdqVQFRCNy~q5BP%YVP64 z)KIe9)zm!=@+N1Rx@TmQ-?wSY(#$;@eR{C8aLSCcg8|0Ykql?en`LoOU+^|SNWNa19ed*#0 zcS(p#iAepzU4}%6*DRT`+2y$?Pg0*YA(px;Lf*AVCCEUF)I{fzO6YZZ?z)f}EGyj& zP_=|)8*M^-<8B7|(IRg_SPPFiFJri!0NfY;8iV< zWJ3I(?rq38tC&YYzY*r%P8lJ>N+!f#a({;-EvJNj^ToXzRn58TihCcVyOJjEYwrD! z;heedJ_wnrWV-vV`xs;i%VYNm$Sx(FlODTILk=lf;C7~6gq%~-#GRV<59E;&`rVVX ze<4X#W5<=2b{$8NnMB@(gh)%f2`NZYi#93gIY!c|zNLho<)#(LA#YzjxGH;E&m8hv z?a!I)X`4|smZfZ3uAK5-;!`EN-Idcmge+0A-(4kbLQdIv8;Loes%g`6%5(ZX_o2b(HLOf0$M~*XJ~!)+7|Af1}fyA=8tqMyIuajAa>@ z)*dpKWkT9}=(CdhOit^XOU`*cXC|lh&L!7*C(E?7VK|E2^lDXkzLsU0oi+h-Oi3G( z>FE43cb=U#2YWxoeP*Z4rDJ!C%Pe!#7NF`rSItdZj?M|y%{A1;+_Z0z36kWYO^B6g zf1-0K&a6zkfJ{>obA48&{ewR3II}9vlUwe+H_NWH=DFoh$p^FSPHU4}uJa_4FKH9v zT-uV{^6YHn%(=9sx#c-M!g4WfCHh=eve*4r+FJCvOJdIFNm{o&vg*0Y>~=p%8<0ot zE4fB2^CE3V9(gXJByyeix?iMiM5ZW7b=v4XUOa*Hk(7B`iB6IwT~_r~(mgH3Qz(5T z9qB~Qq<9La%YA*JM2Hkm$#i*-v_r{+_!LiRWR7trlc!9&obz>(r?icUX7ZGU_-ool z0owM(W%87R)K)S+E!9&A(#j%LAU%~#r%YAIM;56DnQy78o-S`G>y%{B-yNxeOa^Cy zN{(8jCNk%h?28L}YC&$Z=$^WexLW2>j88K>4RGuplDxFhd#ZRErpsGFH6`?(DxOBj zwB}6M(*&7;oC$lHq4Nxuh^GarzTv8Ajw#Z0SO;WNWEr(|eWWGhlLRML1Jmg!8OoaTbL>D0?MyB|Fk`dS<1Mpc%fwnOvUP$h1|mH!YWE4x~3%J9HjUXkIoTJQ}kgA+{+tU>ChDF|j^t4C|$Z(6ag3MKN&ePV@ z4YG_gZ9P38>n+j?Qu8jo*F7DHF4}tfe^d1m8^Dx+j?q_gK!NMn{Ro`tv)x+Eqc2*}$2;p4~XEpOnPW$&vEogc*E?x zIP#(A1|+0pZ)BwBc3$~hqJR>5=K;?nWU47?GlAyY}oP|r6?8gSJ&p0|-{ z&9dIp0n(9Wqo)hahrYUD+2ZMq%t)54p1zO;O7=&$c?Li>DmfGR)-xD#kgIljMq-`M zk^D!S5W75M^2z6i->;6X*e=gltcJ63>_{^_6VWFJiTQef49|>w@|N-%Nj2KGdXIPx zA=6gL4wC;thN`LsDMvlOV($}GMu;<>^T>RzWUu#(=K^HCl7rqqJpVxUE1}oidagqL zRqc?skUdKFdLMYQLXL8uC!Tzee_7JJ??CKL&Arq6FnBxU zm$!nvBqeF1_gL_DLFRS(s10rO9t++ckYOx_w;yC8OJ?sd^!b9s?33R+1xK+`2|X?= z*{&qwE9jk$K0heQ>MP`(2|2@=BHr2Pe4RwD27O)XosW!YX6{QTS&U4G#LSfSu0$q} z68e37?>b0%RaM$o#rqwkk&?M7RlMIrS}V!wYv}zA(o0Fi_qz8uWT+Bdyx~2Cy^kZA zPa8d+djG(&Z&b3^+t_;+RX-`w#arG>kh4l|d0TofL+&eS;%nu-21$C$?7Y|8%6lD> zUCAwPJMSGxF(plW?Y;LQl}XIo&b!_x`Q>xtmMmSojso($_b2&?HX-_Y{gAm92^JVh zx6^Nw&@24C1~NxE)8Cr|a>61-3&>md1+MDvEe*Ns71-Bg--q6gsJg*bqrJT#k1Wy; zdr#?SLzON@dj~)gnwxW8;M?rIjn2Lb2W5v%exKow#ppz*?n=Z$r*OzJ_)`Q$WSHweNLYjQsIYqbrdPS z+^@-feWWrAd@f%RWIk1L&X?vZ1$mJiJN7hR8OREiS?BZlYQH9rbdwVLgf`n|@zpCNkG+VJ$-ZX3H<4*`Ar4g`e=A=HNbT2RS4$gTS4b&UrHeMc zUXU6rZGD3vO}S4;-%QBU1Ll18`?~tRfV{4%R*)U89{OZGEa%yKgRbDI!~kDbCFdUwlTh|$gEKrT})E4iL0jgZXol$ zlKsA^zW)lzvwVo;3~luM$M*l7*q6VsAX&pQ!&d~E<1C-}NF%HFD+dX-H1|&La^R~}Se|$Jw}0e(bTQvo z2boGry89RT8baD~<}=@$nDbbYIkX9}*!LD>gGE|Fc9Q&}GMylIEV2ONX!SC)0>_?N ziB6qYV((>@Eb%||RV*S`qcLY5`WiucusrfLD>w~$$=G8_GNe`m-} zu1fHCgB)XV`1?TaDp}%B^7k(y&!D4q?ASB;CqhCNxd_Q_k(&_tcZ19o%j6eDWuM9x zaYGtg!~*0f9sz4NWVRWaG;YbBTb-IW|tLa%xAk3r@vXU6%*K_0QJ@_$R6-6GJ2zL!gz zE;jl9EGCb%Jbm;AZS=kn{=ZPwNr_JKH!?#knajoGl{v|hxr)q}oZ0Tb1zBa0|4_Ao ztG4?eBJ-0a^Bi)y zu_OJ?U#PgeHu71d2s&3~+2bz*X>5@S#pPLkhs6B8`aXY^;v;E&dMnYzK7V6WjVGB; z+wj0)e@|4cVr3u&>J`&uAMSIO3mFT;5W= z?acYm`w9C$MxS&g^p%VM3-l??nKS++#pPFR4O#y1uSKS1V;g=Fs*6AT>(RLbW#rFB zb@8WvD>8kQtPWi8??h%Ty|uTQx#0f}nNcdUF>uL$1TvHR{OvytSu1}woqV@N9{ zw*q>gIiv?m=0Hct2P}C5gD}JL8)EBRI4~BOPq=fjz*mrETva0Q9b^k<$_IWeA+Pzo z^tZdr^HnWy2ALyVRV#1_`#MR_qy8Y(MXkW!klXZ;lt{2a;6F&}yD#M)B&$UpKweXl zPF0UejLha1m6gzUCIe59d7Y~|1(Hk3bJ1E!@nEMwCP*(!#swK~ku=CmlCNl^-!cw( zA={Kx4|WdtA%|Id1R^EnZTU|nLi7vdgxs-6I^?-U8l#WDgSoHj!G3}6kX$Uo0)tA* z>!-33dKdJ-2uL%Q5rMIgjwAzV)5ZG05$tQK68e3sz)55lb7p(s3}iRU&cL~n@_S8( zSbhxLMCPJJ?m=#`911*xh>o$n9}UEp8bNb*vHTuzml7lqC6j~4134gtSxyD=mco&8 z)u}*!$lENZ1BFV-bsj@9mp1y_Jb_}!e657;Z33ks`&rHgDx&HZSDg#gK*s)_*=I%Y zT%Z;*`AOt$ntsX|sEtf%m7!N71l~ZVmJ)jHL7-D9d5twEk>6RO*UAREKt`}!4RnVr zWVsdS1^Lb*eIXZFZU+WJM5kEi+kqjFh((5%lFuB9TjWE`unI{%+Jv|t7z1fVAN5i) zvD8SK^F$>&Wu`!ukjN@}FN?r@>}$8mTnj!6EXHd5#Z}J(Un28R$>pFuxEkW?Z0<|S zdh9(PNm<(HZ(9U+mXh~uZz|DA4x@7yCH9avco%&}DY+K(1z$i0{u+-y^c|sKTxof= zEa9p;!5XFIwXuc7JoYz(txC(YvrmaG-VDA|S{}Rny4yU`rooQLY&{$g$r@@N>~@_yE#Z$y}1>kdaE7li142)tF+DOl9S{n5|@SXjCwQ%rYe% zNOD2mEn-tM92Lw1`C4VlQ>H9rC(EQ@cgRsCjY3m`(;?@TG$)w{xvpe4$x_H;C6h^3 zKwRC-l`kKf8e9)ClynY#9Q+lMuB181sj~8lDo4_gHX%L^UP0zvOXe!1JIk!#6Ua~{ z=R&iB$>roNccKzq%nqiNlWVw~t7ZptLDnnT7@8d{Tu!d)ssF{!>Fi)JWcI5}@6dwa zyT}~3NMB_BR`N8oF!%v70s334@|80>y+_;#WFDx@tkB}%Xo$1BxjvIgCPEA)Df;5z z$B+`1%xp+SB|ge5f;6&ZzJxSa5~0i*$f7smFdwWkoh$e&7@hrSH{47qHP-ywHcmIVKTJY`uLybIBKnCsI$v@953 zUY@~_lDi}tq$b}6mj@$|+?-h%ECea0B%-ekR)bVkl9Qwc3B6CUlHQ@U!CJ_4P|`tP z7kmrSOG)$4H^H|dLzGkxtq*pFOjI&UYzz*8e9l!HgYQFDD~afvf)gRzmE_bn2d6^z z$Ex%#!5NSJqFXUofHan)Fk2Mbk@XQ!c(Mxo=u(vY{5G$*MFY0q*Z_y(j0%gJC{ z$YAbsD%cA$LP__~so+q^bS2eE-iOSy$au&SB`YX1vx2;DSxaKxx10*jfn-=@DdcC1 ztb_bvkqwZW7TE}i@Ab0tw-x05kB=lTZMrxW+*v`cSQ(Zx!3<<-uv`dUsvw_hy~FZX z@G7J?%fG<~=rhV9&mnUx5?4{~Yl%hT>5o&=*NhgiSCp^8`<~@$FtMVX^Z%5rv0V>l zhn(ij&0tZ;HJ1N^6)MW}{(|LhuqwpWJ9g|3f}J2)m1H#@2PdIV9?m=o&cY1Kvpf$j z!%@^`c@bOg&jYg)Y%FGf)rO+pH()ZQPOwrJ| zO7dzMp)&Nl(n=OsWCHrEQ*z5*GBmZ)=d_OlN`xpKnu*MDt|}c`hJ9_KSF4))DjnL6 zeO=~Ec@nvXk1VnSN3oCY)y=B%q3@9K^)-+5mc6Q!Z1k!I?p!sr2lFYSGW55ZNMz^F zgXU`JBnKcBRAv^*AxIPMTqpD^q$g+UhECGH=pDf5oy6pPbWuNa0sETB`)V4x0{PS; z&*%&a@s$#K52erxoYSo=Z-*R}af@SV5lSYZzt~`rERd%xtwT90%kPFI^)pw4eqI@> zP+1Tr<85wS#u(;{EU_*$3XT# zVPZt|QpH>!hySUDBUJA`Qet=zgX)7JR z7+MU;rbHK)Ldzh5Q*&Ef~)=uovSS9oOWfo zA36^i#PT$BxAF+88qJcRCs&bGlCuF{o zjp3qte{^2OnUeYt$R3hkXruc>{rxKPO1Nf`5y;$AGS5~8$G?MoKH^rzNp!` zpLGMqsbq8V_j)eK z_e!>t6o#DQs_*qukpD>J{bBRS3B3ixJ~Va@c|vcCeFc=zGhzKbWOA{b*JnXWvHYuV zt}d_n21@8Jlj&O^O)T;~I=55OD)La@k3OB0w2eI0FQIBEiCkwPUg&8xyu!V zLZ5%=-p}mpFe*cQoN*hiP?ej-XS`QK-q)44$N*F|WCRGKZClzOs zCAg}t@f1>(rJnHu(&sY$bb!vgE*cuiwd57PfbMOi439Q8A`tnmL1w10kp=Q5_i19J z*OK>#n^m6-TQj2wGJ$_$o!?d>-$%&o)50i;%&`M;N?IBfAuXx%B-(V*%BTrh$?}fz zI%J2Esd_u3Bji^l72-M?{cFkV`7ue-D0xmh8AEExTV)mcNDBS@)Oa7#M#adW}@?MB?qJ3jX97L7MTaRX_5JmZXd zjHSp7R&puY+xQwXfu)bJ0WwbsJ-0EoK-RGgFft%NDjDh-Xzazl&X8Q8O&0@=eaPe= zW6IO$VB-L!yhRQ|8d~HqR<%9JFxrF|Y#c%79rV#(wCN0EG@}IMZ;OV1IPFQ65r{Wu{RL(v4-V(Gc=J%Y36LWE#r?<88=NmW4*^+D>`~vQ^21 z_(ev0WR7rVvC#?g56cpxC*%psQll>d4zp z3nlxb$BlSMZ|-x#a6l$-<_{wcvWVrZ;fH*~a?S`tzGpdaWP$vyWN-AMkqdH<jq`aec8f&ka?nnUgH|>3weX9;=)7f$SYiamsmc3UMk|l zBkIUUw7^tT_D1aC38*TrL>Kn(R!BXPPP8qKB!qX?k>3ZHNFObu?OD7Q-bX^O{a2D< zbA*3H=2y<7D7j{l{g_YEG`q+~o8Oia{s~giA_wcpuR)q9p?91JABA+V$nQ9c{uVij z%xD&O_yXqhDT(|?f7c^?5psaV6aE)+j>Q+g3AxV_2;YOGOpo;mg`d=kr!~yZVuWpV zr4(k#9}d?2g7#WL2|Y^=>&Vo!WFmFrsH!7NfpBKXK$e2x9ChPqoyRI^EeeM7KxSGb zKV-2*3PILdq!?tMMM_~`$CS|D8x5DkoaO6{&3~oBRjG>J6N59Q!Zjf`SjvYRzLKdN zZuW}Q2)BWVk7H|CH~ii!nb*TTAs)^&2@iZF^LF@yS2AtFV_(U<8=m?~rgM1qE14eQ zMXyNT@UmB`28GwYk{KS}{ECbW?|MbXhJS#(Jkm+w!;l<&T+_q9zf$!{`0Ok4Y54C~ zgjhP>>2I$Ra9jH~_( zSBGq4xfreqImq%)xHjY*%hhmQ$X%A3;rbBgjM%k$JKPZRa?byS8$n*q=U(_t$jhU6 z5N`5H)uV9JS29n+Z@tpzS@>LaMT)L^?s5vbZ8$AYE8Ik#3OpS^SY6ke6#1jP!zh%o!un2eOnU8tDhw#*!s6 z0CI>WTVxRAJWI~Vkb3ey^Bzm?$S`EY%-H$L9~ljauvCalgOp}z5Sa&Q!O}YNWxe>U zZgG-+UMc_SqDN#+y*QGh^d8!#^o(qP4CAWak&X4@vbn`%mcEfqnBgLp0g=u1mQaIl zln5~>@?Aaoc=0`F21WMNv(xSLcb37Cy^w1xLn8YzLv2>dO^-xjyta^B^zxwJ74OFRzw0+<9>%dPzP7*{Qicp#T8;)7_P#LmU?NU**ra)s{zeNLh=7A$2Sg zg*3BB7R<1-5}oFgt$s2c=_n-=;+IEqATymaUqy1(x6_|ABa~3Ip zKKHoK%E)UtE`7FnT$8C!VMw|~ief%xluU?U87Yp=b(IWutd5j?rD}DgG^DM{(BGns zl*O_4Vp$uhTwk8AK`fgh^>B7RP$I|zuvOUravXNz1qy^+hmhU5N zAU9d|McP9GbIfDEmbgFC8B)|D-5^yh(gV`eBE2B*S)>nSs73lgCR=0xMW#bqT4WZaw?*bb zCR$_>^D~ zsc4bC_2qLU`8%`nAN@t$$d9<{8mNpAzeEn#kE7?|Zz*X_@;~(Ht3)UHwZ4437{u~h zupN*5ff+7TnGs26l&rVNIb`-*KFGT)x9C@RRKKu`G8YQOKt(|3$JwzGk@_$pQJEAjwCLNA z7A%fvD@Z>UXY?J&WR}Eed&nY|q-aOTHkRaQXUK0XDba3_8!VZkJt59Tu{ozk`#^HC zxT5_bC0X3jL6GV!Y0;sOw^%&U_aWU`ywMSm@hraRXvmi={^(f9cPxSE1juQYV01F% z9!n@X4dVJNb`*Ma1|&C&5&Z;Go+TWe3u(v_iOz?-%My()f(&5E9Q_>fF-w-{639Z9 ztkLC=%`DlXD7u^RL#gad|A2NfbK=fzGB9?;D!;sj$=!x)a(W8*qz1E3vq3AJ4 z?0)q`xN!71BzAvzB3vYT3KF|#I}t7#{R0xaXFCxt7Ci@v-Lstt7mr?q#O|L@giA#K zhQ#ilPlQWG|AoZvjZcJ2MXy2DsiQa%E*-rI*~wBSdIxfprEK&bJI>Re|MUC)hX3!|dG&g|U!S$EwXQYpwb$PF+Nx}&a!6{M zDt;DSTf2SgH&rUmv=&@j`_NR>P3GP@R1QlOsM3Z?hg1bsx=`tus-#L^D*s4TQDp>` z!&B8%@w4&T+DD{ns4{_ZI;Co=GM&nisamSsOXaB4KB_FH(m7Q}72gxq*6xzpSCv;7 zr)#Q#Dt?|{Tl?5lBUSwDx3+e-R8v(xpjG!&b5*{j(j%2orSMK)W5uafs??^^Gj)(E zji~fW9jwZsRC=e{t1^^IpHv4`MpMbA4p(IomAn)m0TgQr6Z! zF4bL?<%}~R)l-#KR0gK{sIrO5pj1Cq{AgNRdvI!iD!($$kknvRs?74WaeV3oRq9eX zA$5`}t*M-t8m>wgDnnBvR2f9&q|_)?&ZKg3>I_vbrZOybwko$!8J;>vl}D(Yk~&wF z7pa_@I$xD{sEkNWP~~$fBU2Mqad-K0otB!UN*D#Fr7lsWW?r02RS9i+T57T?jq>7L zrb=j?(^6Bq$=dJWBu?+zr=>1er9+-Fwc9MLQ;$p(d>tuuRX4fMElw1?O_!Rc$`C4} zQa5&!74?}^MyFcLW0=cOLjl(#U>1*ruZr`+9E^Z0FY>M>PnQ@J#?tW-KzrC#o~6H3~O zajs3hswp2y<;K)XRr*l5HMLrm7x3nT{Hx_=rPir(3gg_BTHkFV>iI${cc(UK3tp8d z+w0FsZBgYmD)*&+RONmu_oudL%8QuJ11Z;CT5uJW`Kg_{%iQ~EqBN@ZP^v(cZHdyX z+9Roos#Kh9_0z1{!c-Mi;za3OZBeR5ce&F%I8ksCRB8`Zj-;|Yb)+hNs63bI(p~PY z_8zd4*2W;WBGs+C^q=DyXGN-~Dr2dvObt+F3YFJWgG!~dDm6q)dOPE+N)1)3(0^8? zPA;XqnHsK2*tLEub!w?NYf>Xsd5S5oO^s3|?A(5sI;T`R8&c20c< zM`gcsxgHYdQYuZ-6;+u|rD?jFDtA+9mfk~^hp4nj@1x37R1QqXJ!B8$#XO~f#(9fM z%XCv!KA_Sn-J*w->oY2?)2&tcK2K@)C*`mn6JhmxUYx@<_loygJ=bk`Q2J<%Q!7z$ z=5YELjZ-gC8Z~U2?ygEpS{GM?CJ5R~=kP&xaqBz$*J*meb&hqPzsfWl{I^-KrEN${^P(QF`Pl_iCI`dCCJ&s<|+S_ewvcd0m#o zspWd7AJG=PDNlJ)$7$EA1GIEOIK;B>9xi(u7-%8+zDjWd|a ziRs3wj82qvdT6?3@x`zj&p1QVt&3&khP;NQ+m*^|MEb~5DUVDaTP%Hk&@%IIS#(;u zx5l}ODW4(AA4b8L^Z<=BlX1>XpQv%}&r^n~@-&n;@V}NDpFUZwwlmIz^hk{p#!gB4 zOpR0R0bkD((`Rd(CR8S+$E$K=qU=)p+Vn(KhU6(1t1>oExkQy~^OVWOHBjvP6XmjU z*QTea^1>e!SrKhWltE77NNwyi&wF@n`bt$oo8FY3uF4*ab94HRV!6ULpmIz49{e^R z@4Qi&k$ymx?ujzD_Fd_xi)9ArpD37{(k~QGgw-jux-b2r=5FTAF57RYDDIcfzD5ZRo-cyyZ65g1u zRVvPB>Dr}~FVd+}%9rUnrPBF29jg**bxXQlDXZ_&4N56Lr1vYO{FrX6O7QUKbkkCC zwx#zkrTm(1QA+teohhY6by}(tR=GRXX{}0FW0$LQkSay2`GPuaRS8#+igh~nl=-sNv}Bf2x(D5MQ%ChScDe27fG)s6uDJNyvS_=6(e58l`C|v z4+!3atQ_?dYQ@m%?l5S_AzpQdC5%$+jt32b7Q3@RCul0;LBo_T1&vU;0W@0UJq#MF z^bF_%r8hvAXuJ9joi5j73Z!4Ny&?x)a0W|QqMw>o0Eh_?jh1L(z_rl(I(K7 zYEe+Zx#yK)&`MD3+JaUo9RgaTpBi9Zz z6nR9hBgpFISdh($1Cw|$XP<2DL}=nmHaC(qmNYq`{M?$*m+1&SMN4!`5-)ahL6+}A z&?xm~DM&ns-0Mkbk&OjLlP>^okc21DC4dH-31Sd+zp_6l^!O&PWp_r%Pv0N z{-mCy^GG)*RKEOTkkoxP_bg~0^2p|1NC^E3BtA#(ZPNRoM-VS^A2VJL^ss*)Px|xY zYViduo&x3P`vbHUn(wcqsETR%by^;phYoD(~iz7BciH(sG8bBCTQQ zd!$bp`W5JW^-8V~=GAwM_cJJ`p}{NMSSImyChbPTSK1R#>yk30Hl)rV%dICVl;b#R z$CHAmp>|I}=p^+|=F=%kXFvPB zsmYqbygC+|QK;R}UqUY#NZU~3GM~=Vl>HoAUT4-vM9Z6>Wkn(JY(-%tD+(i7QD`c8 z7BZttDmJ5QdM?ytS!3p8mg7v)`Jl(uzq0yY7&DVtwlex;o>$i=>1A`bG3By+k$K$e zG>i&~_muh)#`$cdV(~)Xy&u{$8t-9{tTM{GF!Dlsl-1WlD#5m_cp<&V>4ErXzLZs0 zphvLjFf^0*3zNPLqFY_^UGhIz02wmp?$;H3N2j^9$34D zHveP$T4+nedsj=;9<;tx*+MBfBjwfj;fZZFcQmO7(+lGx)LN*GP;0@fP-}m+uELlZ zhaUU)uJ&cMZ(n%-sn$UlzroYc+shi$p&VhP{ME54<88C%8^&80p`n!F$}||BS`Q23 zH?-C;hL+WCGNL3m8&Q^TC~xq7$0a|5d7KNf-ZYUUSGp})qU)%Y<%{gFNW5%r7UCJr zO{nx7Ay-(NBa9wKJiF?Kwmb#-{(oJU{QcEP=r5t}!z>W4raNAjNb7Iax(cmd)>dzDIYMTBDO)xtz0T+@#Iy4L{dRj7w%fF>!g_K8v?wdH^0%P! zN@0x|=ArEfwX6MKZRyay5L$nCgxa{2R<%(PT6J%R{?)#*A1%U~ z^j#e}@v^x^q$RWs{UEd!Q*kdbOISCBx(Z%}nhd>Z$0?VUUMSIja@`7Z-Cv#8!u@oZ;mRt}U!A3- z)@()(bKU>ZSFpT&r2lT2@~*6F#lKtI{*T-TDPwKnwsRf|qcO}wWoh9WP}Z(rnDs)u zklv233n8~1&w635D{C$(E4Q-J3)iDCZ^#_mq}1FV?e1sWFgKNzM_5n(yS6O7r%(wg z+w2&83HKi|3%pWl9UICU?w*48|H;^@311G-lK=f#??0LA!u2Suv}AnP^-XHBwR+V+ zNcWc7fDTqI?9PO>+27tB%v%-6>RNKM)wPlAx~KSjZtx!_O-Hh-v7Ie%DcZk-pXvF&@$nw5!Tt^ni5vN;TjNZ!#ot` z$uRSW*<04$M`)`yExuho(D({wpMr$5rc@^qD ztk;5n!I!dZS0iPs)3PkWJR~(VMm^wuY~It1_mRqY4c!Q`^~*1$f<1g5)j;-SbZ?Nw zlXr^DgZ-gR&{Pg$Xctm1l8j5UVC_13npe-VrV+2QIhmV`WNuPV^WvSH&@-8Kf}@m3N`PlvNw&BcA#9zp7rs-g=lL!YmNxh)|Bp;Pb^=_g8|ZDE-&X2VsBm zziz~rHO@nA{M8vV)X*as*c`|Rz%t39)&T%&PU_$xp2$|tzA2^$P0-;9B zNb(MW?GlI46Y6;d;!W3jE^EgyScI`3G)d)FwGCQ`7oKmeMjkf%giy{Pd8?KW5${e- z?=#RnO2N~zu7lqo-aL)>3uuATGT!ICK&n{N&k=i(8iLHL14-=}>fbjj@5-u|P>yg7 zI4ZG?T{qB^@FjKwK}(c|fnHD=1$q?}-s5iN{s~Rqm#VMtudPC8eK!%>8c=mN1@xZM zL!`B&-$5HSwBepckvkT&1sdKw18vpNp`dL_my;ez2%h4)P`>XU-=2LJp_QST2Vxu3 ztJr;tP)Rv@w@3;Fm z3k%$D2rbsoJ@HYQ0ZI))$1Al0oeU~)hl55abp?%4>JPd=X$0s}P)Kxp|-)p+#;6emioT(t`hO`MZM=ibq%~jfUZ@e3?R0NWD zB_r1zv`DoxK+h>n2fe2B1n3=5ky`_j^5)Mu>!HbehxRU$(Pz};T_(|rbK9Ybf5o{f zwLR4#9h?yEVn{BxCtXdtgM{-bv=wlLAiYTXfbj`DtI?%`HVb$H&pv_7<*RhctMoR4Vg=TX}3(}#W zEwG5(Q6QPGA~%$w{=Lnb`a6-W2(9TRAk=7bLfPE4iA6Sd3uz|lKGFixQql{g*Gcb@ zHj%z2{YENZm$ggUm(+yRnshj+E2$T02UL&m|eNOs`6ve(A zyOHXU8j)I%4kdLV9hXpX?&O5R?33RQ{M>GDN6XwEJ3qI_?o8OqtQWg;K{CU|?qZP4 zaIy0R?W;5Xokj^_4gGi%H% zN$mW!CwBgtQpoE^q4U>|LVSVGt{R2TUrF%WIp$k?Uq31i25r+kjsdxTlG_ka1yFT& z7O0wPH-Ta$89j}a9)Q+d$**o=C!uoHwQI7}P))ZK@!B9>P4^<{b<&!IBDWsY9`SHZ ztY`P3_?A7$YCK%ok74Mkq^m(zlS@dSgRG6J)c2Gj^#Pg1xujc2OGuxPDmL&I2a@`d zCX*fkS-x*m+fJ&}(5G?)=}gj0(kmeOU0dY719jAT*=;|Z0;SX%bc|AeP!FXGKz)>M z1NB#W4m4P4Gsw!jMa?tOC~xbf<>41v-(o5 znbk{3IdXeJ+oGXOK<0g*gP>WD4VwQQUx90n(5c~A3G_VM!l^WMj<1h%^(<(R3|cb6yW z)u#vb85&cIoi9h^u7}0$>fg-?#qM^HjE~sOBFzCwiDLH%NPNb%v7-M4qc3mlmLXKq zi`~n#SWQ|7s->Z!96puEZA7TlUy=I;BzY9MUqJF}z#><9e@`_@jY+LQ(pp9CP|{He z*&Sp(_Zoco@b>B+v>o2SYA~zNm zQr_6*n6i%-xyzy1{CpiqN>tt54C)1oB6k-^>ZQotM|zO7Afebj1?q=*sArJ%Ki^OB zOK-HVv{uHgMyR!_4~@$REpYE6o{eN*%KR}cbLSw<&4-3s%OBIeUlru_HSbFpwW0o^ zyc!B^8QN$gyt3cdZe}@t1`UTVSTTY|DOG6U`^N4d`;BoOYV}CIZ=hd6li#q#t|iI$ z1N<5q+F6>iT!qGw&Li1xhmS!#xmp$Hx`U)uGwvkNMH(;oG8&ro*z-x#K+^h=yA?DU z78y4SBqhqY1*GRmt4W`dz9s#hP~<|se$86n?RdGO43HszTpZRyB)>DJ{LXkzluk1 zM|w7*9wt2pGOy&cg&UDuu#Mg82)*s!Xu+4r`MuJ}`Tf(WpjHa6mpAQ2HFZur5(xdv|;}gnzTpk27u&*jf@+fXc;#V^orVE z0g_a*xtl>!2ie?Q(z1kNw+i%zTD%MT2o!vY+y-b?r{963@Al692C_PBejt83thSv& z--04{9Oy@-6G37Txsf1C6OnrkWa)*q*(zv- zur1E51Bq9~xh@zl;wg;<$yFnA*MN@G z-2C}N=*7^ESIy5-v3m`gU60-a*(p4mLDEK{#&LEGG^>s1AnciIDpf$%`XQB6qGen& z&)Y6RsZ3Pv%^FR^KT`ba7vytpK8C}j$ zd0)V^tEo*V-9eg7nnzkll4q%sO7OJENj&kY$VqNSlADp_X7mh6ax?8!lH_aJdnEBs zw2)imzJMmJ6?QdB-1pFA_QBoc!4_KLb_L1U!hQ*9D7 z8Qq_9lYjP@&nZOL z+-nrMF^E@B^EjV0i6n0uN@(PEt?I7^S0c2LYVxF2o;=3xUT8Ke``SR8L)%~DEdq%z zv3n6zq}pnbU0v3J+Nt&hsDsk?piW9ZgUq(z5MO`(4W`&tq9$)EnFlqY8Px@KK`OD6 zda+Yqnn3HWS}TyH?B838U3;;>D8qg`u893Ko_}X2c3lu^KKm2zLY+pgFGA%C5xFx# z)?=>#*@;E>fhKF{BGB<#w&y`3l->u8QThRNzEZXJc=Jao4H8cy*BE3T6oD*{BSF%4 zF$Xhr1hsQOW;>Ok)2ZD7x=iy}Kzb2$wQ8S`qC>s5H^}Zj_XEkEOymv*SssH(<489p zWP7DIB4yiunF-48&r=MZ2W_Ex5FLg+P^CRUb`M(*^s;IPfGl1ohV~?#1X`={#)3Wp!Bfyz zpb~d0=ttG&C-EZp3`pv##JvL&?@Qdr)HYM|tI`tp6ErtaQr@|P+2&t=_kt#KXEs-d zv>&M%sTE1i77>g5wP-tp79x+>9RaGO)E^|fN4B1{Ha`_w4TOez&fotFdlVNS-aZ=d z5|H%Me4pjY*$|=G+%$w5-I7p9IZ&9dYPvfRuPJP6x(7+i5(*Y&QN9NKD%(Y+QDN zW_K)o5(+8Dd`=R((Fhe^f|eg|f~1Vlpha$SqD5{R$kt}zRMEN6?3(v1$Wr$ALXlgY zXp!4YlBQ~{BbN?`}@~^eKLbKfVNJ2wxVATRmo_}QAVW75FSD+)5P6c&Q zx){_$=|)giX&&ii&_LBb2A!z%6X+DBYKJ>_x>94%7^U{0@k+&@oYG04OO(cgu28xT zbgj~3pc|D|f@Uaf0Ntgu9dw`4?ngNHpi(o?qe`7Xi3ad(CG|a$k5fG7c|~a zpp{CgPR^}XIt=tLr4vExl`aN-sx${=we}?GHIUU`XpcZ&A#}6a{sQWtZC>$6PkV#x z${EgQZ34~ubNhty$MisGa`GJB5hls%+BA6rZFDw6WwmZv2{l=xn|1}YYe_Rmvq-Yi zHw#(m8_8#7>aMsm$Wi=BVc5V<-dcK~neG+{{Fa-9rh5D^AQa zjU%@dp>B}$#I>M8P^@)Y36yW)chs@7h$16nNF7L>NIgk|NGFnpk;ah5lX9esNs~#_NHa-uNRN<~lAa^INqU#` z5$QA1SEOG^1;_Z3S0L?5szItrszs_xYC>v3YDMZmI-1m#)Q5CD=`_;Wr1MA@lBSTZ zCEZAxL7GXLLwbbtBiv7m+R{T|>HsG=nsgG@JAQ=@HVSq$f#BNY9d9AiY9b zMOsUGpY##wGt!r&Z%IFrekD~o*0)hjQXNtQQijxybQq}2cRh}B zNOt2hZa+{{)iR`ZAbE0@ah*ur89IM%ctIXleHVb1>FbEXcna+s;Z>|NGO z9p>jSXaCiiI?T^u&ff7%9cJY)Q-|66zh`QkI?mbR|BjhD%+F!Y4l{L_pTnFTX6i62 zhnYIe-et|yVSWyC_FtW;!>k-;>M(nU`8mwlWzE!KehzbXn4iO(UDiw;=I1bHhxs|o z*?)hg4)b%Ev;9nsXK0umWsWUymw;Mfo-A@#g4!xAB)vx}*WHIUA$22-CCwwfMf#0Y ztA|ge9jPB_Jn1&l;TS3-7dq#sCo_wlK;Ck-Y|BrPDlPb$oM+Xkc~NyAAulNOWK zk$xl9@9Wd+L>fxEgme#S1?h8AVLzYBzNAA*14!dY*O4A1y+-<;RI|TNIYa738bP|0 zG>f#9w4St`wAXPy<<_L$q;pBPke(oIAk`e;Q|U-LlXNfXZBqGx-r^9_P|~HOd8E~( zUrCJy`BZw5CXntYeL$)<*jpS$8c%wF^dV`lA>QH`(uJglNgtE;JlNA*72)b4ag{ zz9H>(inr}Xnn1dn^fGA+Y0p!=ZFkZ+q+3bPleUoRj_|gfN#~O0klrBuNUAf^+a5+5 zMw(1|khGGtm9*b!K9w${^GGvDuaSNvH6P_|PbS?;dWQ5fDRa8F=uf(aw1V_CsljMk zkS363lm11je1^Bkkg}vpN%xc9A#Eo$In$@omo$a+0O>W-kEA+hdD{-86G>N*o+N!l zDtETGjY(ZeBS=@0=9AtfZ70Ce0(gL;8)B`KM3iI8u%@o3xVj3#s9`-nJ9z zRMKS9T+%Ai7Sf*MeJX89{Ye*)W{{SXJ|Jx)?RlP0uO+Dm={(X+q{m3BNn1$i^L=`U zkcN_`kRB#&AXU1++qNJTlg=hhCoLtdC%FrKD)mWSNFzztkRB$jB5fg6nc&lFLF!66 zoiv3sm-IYo6R9BQ(`!gNhI9&PD(Ml@%cRdpcr_!r?@1>Vo+`9-?V;Iob~*Xbo^FtIrLf;Lk``gV>1=8_(*HS63$CEgHP5D*typUwDP(-SLx#RgCvP~n>^udvS* z_P%z!2cCVQuRqbm3E{o>7S%&q{m2WN#BvGUgFbhLF!C8g;YYCNm@bL zOsa9IPp>U$2x$`OF47C6Pe{>ZpGtkw;iMBtC8XJ;6{OEeH7@h%9ZWifG=;Q)w2rjX z6mOd*9Yz{Vnn0RGdV%yQsruzUy$q=z=^WBkq}ikuq>o8EU*XehNa{iwOS+!4oV1>_ z^HiTohEz;CgLF0NLDJi#-$>~zeR}Ol$CGlT*`()5pOOl%@~On6LrDWj<4D($9wxm= z`jGTHDSfri;}Fsbq!Q8`(sQIQNY$_LsWd0`CXFZENP3#Ik+kczK9yFazNB%aS)|uU zUz2K2^Qjy~8cv!cZzOS*xyn6!zs`wc#o4y02_*OQi!z9dz-(c88q4J74Ab4jm}z9-ea$)|EOX)Ng` z(jwAU(r!0<+apMWNE1kRl9rQxBh|UZr*a(We9~j2t)xb`dW$1SLrLe6ZXi8DdWW=? zRP{EWUWPP?bQx(bX)UQ>hPQ1%Dkfb(x}Eeg=|@tn+kGmXNW)3fNJ~iTNxR(PZQGEJ zBV9sznDj2G!c1?wKj~=F$)w4oyGTn(?~#5c?Qy41IYT;@bSh~QX(s7q(odv#mQSx6 zX)Nhh(lXMAq@C{aw#`Vzr17MiNDE1CkiH_-xZ9`KhBS~go^%&!8EFHl;%uKvb5d8* zS)`jtPm?|+RhYw6NX4Xaq#H?#Ngt3Z-s4kgMaq&cBF!VMB}Mmo+j^vqq?1S!Np~g` z_BUd;0-C+M|32t&>}udwGoa3($o&M8{f)>~zR%NcAlnDohg6@`igXCbY>y$G0J3*O z$56X6A^Z;a5a*6n4`x8ist5OhhA2G+I!Qxc2A!((F6eZn4WP4?wt&VfmAl`cE>;sH zC&on1@7>_+F=!JsUMtYWAe@s5vi+Q}vlI4n!XD56o;y3??a%N==p$WxiI$SWd!Rdh zyXf!l?EKGt_b9w)6y7}w?<4(>dH3kQcXn`odsp9w{_2~fe}88uyg3@)CJnniJARuq zyh9q^E8X$iq+yTe@4u~7*3M4Y#R)q*VYjEOot?0s6ZUxi{?1O=y9xU_VUH*5`-J_R zu*Xx@&Q93R341(YKPT+*l(n-H_H)7>PuR~1dp!Ti&d!eBYAVi+#O!VFpPoZ1AzeYb zfpj-%0ci>8CDL1@^`x&7%HL7?71~r>NeW!Kx%hP#DB~)E?0weSAbX#+0jUMZ-e+w~ zI-H?BNP|K0K5NE}23dL~485FmJ;>6#opdilA0<5tlJtt)TOix}+D3{W@Y+$NQKYL$ zPmuma`ju3F9#bKWCQTzPCVfDvFyGrYB^^r|L%N0ZENK&|(t|#gmZZLENK&| z`U0OyTha-n$)pEJZ7LFRQ4lvC!IpNj5M3{66rHi z#m9VlO-V~^lctdtklrEvLfYdApI#f%0Mb~}jig1S zw@E*f_Ic8$cLeEF(p1uOq+dym7kS&hq)DWQNFR`@EcO;{NyACkla`UbCZ(S8wnvl3 zk?tnFLHeDv|I^-f0O>N)W27%gsU_ax7}B|<2T1EkyDaq<2a`@A-9~zu^fPI{W!|q|u~Vq}8OImV1kXNGFpfk!F#Wl0GCAKI>E2pL7gq1Zg5^Ch2j~ z+oUf^m7nt|*CTZ#4JBPcdX)4w$vy8=X-Mi!8b+E-x{vfKX$z^^3ZGs}(jz&q4WKrO zG>^27RN)10(U{boG@5i3X+G(7(l?}fFZ%TUK{|nS3F$7>3Gulq#H?#NNY&nk*dDx(`!cROgf2_Bi%}R zoV1#>l~iM;Pq__g5GhBRMOsSQNGf>Er_z+voivIxnRGAdMbhV_Jzw|fbte5Yq1fFI zk{yxQEdkx2^fE}^Ly6siRqRCO*u4+U&ffV7bO%E7cYFM~J&`-40=}ezot*;r1LEC{ zc&*%akgO~tSNI0b9Ds&XTtE+M9{Yi8SIFxmpa}4`lUn0LaRA5Xfrd2$1X@7MEGJurJyT@g$Gfod~Lkx{BR-pxu?OqjnFd zj%tr48h+UhvR?8zs1ZU#*&??cnt4_2ZRauw#i{ZjYr)2()}#)k(Emayvk0}a4F*}t zqe&$R;p;;n@icOGGV~eJ2GaK+^W_(671nsIHt7J64K$h8LV5937xWjYjo5il zW40wuzD`oX*=R|=u?uDE$2?9TjRh5HIi`Tx{h@Ya_RiSdETP(hcY`{pMX-GcS|`Ob=Ok*^Wlnfh3|M@ z_5)ctGNi*m)^ozupf5DJLd5PQhMo)Rttn3d$r!BZrhzQIJ3#$4G|V7>?k|y(bL4E~ z$@Oi5=5c>@KYPzZDuXqZg&>>Jp9aZ19=lgTryw-{D(PDg=ffd%6hiT>ZjjV{Hn;P? zJT)f$BcZZV$+!UsJqxK6x#1x3w8)JjotseXt_J<{55DB5cN0SGnlcAuSCR)4irr#T zX!B*zEkm)+MpK1)8FHq^`W(5#28CanYQi&P@_6{wlgHc&=s*Z1t? z5!5B9NVV{EsWG&6(DFTK1_T}vBGk&}pStCT`aEKH4AUC`l2cIf za|^BSQ^pq-n)@|_JWZ>rHR(fRHw>wCQm_2_&(3`vf}BX<(&#mLi0~!nhmW# zLh&8SgwS6=gVkagNKRLb+)9wu_Oks7I;xpn&oiz+v{Tgkp&)6kZ0@v#BKJ>__=mIms7)o^Mw$;gTfLXF)omT|EJNQU z`O}hPw-K71ave@{mM@E#_5(t#t}3kaWGVU5^vhK{dIix2@FM(_ZS)FK+`vhd3{zP&gcx@Mu)!!-AeA((U z^k9bergnOw#qI*o)#~5EcDRR7nn=xipUqtb&Dw1yX+G)cgfi|$kd^ICkew0waYB*% z24v;<5hSgE@qwA}4&;kFr1gFz@0w7?)dxvS$F5bP<)6oW1T@P-zBFmyx9SSbP8vOq zbP`BT2F00nl`z+7DbJwod88{r4{7Ke&?2Q}py!lUlh%`@)?U-lFR5)K`BU{`SMfuq z^%A>UAoIBaNNgk50%Uh%2ZQY1sv}75t#A@5$a?!Aklllg0$H2;le8l@9-6IHt^nCR z;tY`0%Y(FdlC%+H!P?_RXhy3*b_etxXuXchO(44``GxTcKk^p4f!@(NNP*UAi4Fjn z&uu|6--lT=<2pl=?=EHBaS284bdY&4nRF%T29o#6M%2fe+f0ORQu1?M#@!FiPGet^ z5WYtMva8?Qpf6!jylie3=`qr?AW1o!TT5*twe8d@ zZ}2|XCN)ba_#C;zp+(0_PwWFKujEf|4)HQ>2txblm@cbq!;+L^cSb^y`*YdwJsX7D z>8SIndXh86DkEPzk4z}!8@_{u^q6uugIKN=)nHMayObXI-5IQSsNDmSuRTQWVQMdt zK1c}Xa>5sB>FTatW#?wAH9j=>mvP_0wiY}n!jZO4?+uDvO;Qt(q!%n~o!tf+ zPJ3%%p^Y-(Dj|j4IWHFUIJgDzRgEC5!KsgP)8Pra-yFh25uhn-Cl9qyw)XYOG>YgSzB-89q`zQ46f^`D8J9*pxp&UE<{-OwZkuS4 zJA%{;WVXIU82ixVbn?iJV?1BVh^35J%E(PZJSlI)@|NVCwm%)A!{Alq?f}`9X-+~J z_XJ4hI-Hsa8i{zZ^X*~ZCy{d4x4LE2#%>+1wP$F&4X`*@X$xrLA8fG)1^T+V!nkR(T`s5mVuT)t`}X4_pV~!F2V{pD!P~deClHtu?7L$l4=( zgX}nHEpftW?BsOM`!tVH&>m6SD`+ttWVJh+^eE{C(i+kyq#sD-KC@KdGe~^NpBch; zetv0crz%G-?Ck8B*kU#VNxR`oIn)j!9R;#gRX5NujTg>-?*+};Z3swK6qs2-cIJFk z-u%nIr<3onJ&xMQ=APZf(}l1QE#oc%J*9LT=yjzhKp!i;1Nt3=)i6en%mU%tFm}&g z{RDr{-VhY-?eUFu*jj5<`rNPZ>VgjZLp<9dIHZ(zB;wikYyA#Ek;_7p^h(?y(9vok zSA%X!@=f5Sn9cCDFN9{HMeZqF*{!bRi%v4vVReI0>j!>jsIT8`8KSA=5PFi@`aTre zH+EAHI!fc+oaABWikt0Og?`odC_=|+Jn=85B=gl}nzCQ{#_k!!yH-Od;_hUPei!~F zXyR$?{sp>4ErQSALi?llVO++p;0v5Ft?BIrl2r1&ml~R{q2k};N}(LyQ(U7GTigqQ z%mZIn`CrrWURfPf(SGXZ2%Dcvmp7C$l;ddRVP8A^^BfzVqJ(nf(?HlRLpf%;5uoRl z#)IBanhbhZ=@!r@N)Lj*QF;@!UFkE>qu5KEi6M&>=!rtrL6wzS)xtN7G;~%a?ES0O z7@>8PrlU^fE_$Z>0j+-x>L8qRJkuSDcuh3kF`(8;gYaZe?v!S_jYzM9Y6B43NohE! zyV4j?Z>0-B{gti(4OaRVwzndc*v*D!qpWKM>l-C5e6{R;gq{kE689wNbWnc%$+sHM zR_!^23RQQjK^K5x_eny*B6eG#*&0OV`%4fn;?*8seoE?KCchk0;OffRlmd@ z0BENBVi#Yhb)j9axg8JNK{~pdL6cEC)A@Tk`-<1iYI`U`<%_Z+W zNc}Jq%J-Nv?j~p*l?fM$ler zdo?HpirfvLeU;{b_ETB_lJEN3HL96ftb%rs(gsjRr7fggzQOfPwf#Wdl{%98f%-v< z+zE+>Zzz!Fg3LC=TLW#7rs6%tz5sGNQB(N{p(8=|bzAce`Lt-L>i&QJ@t#h1Jm z=v+;?G3Y|2HlWKjy`w-^D>d8`UxrjVo!a#v)8rf17H=`Nj~TD>w?1A=kj0a4VT&!E zYoHt{O?e8gTju=$#G3;RUrGc$s5Bn5P-#Y@Rd@14;%VBxtt8JYj3hMCNRo$GMDA&% z@}bgNkZIdN($aW>`kkjvpiecP)Y=zHCqffjTW@@$G!fc%rKzC8lO$C3)+;I92Cb^n zLXhktT5Hv2yaq~7Ayh^qzOk85?8-{-b%e@y*YRWpUP)_VmkwlY`5{6N)bv8D`g)Gt zCWN-v&~2bDN|nAhLOP&6&?2`#$a+qD&=6=DcO>W}4eghNM(!k#lrnOcf~>XXk=_PL z`$q0d(5Z+QyP7}vHJtCK`1WX0qR8!oQ1Kw6&kQkd07j-*IX? z6q=0R*qxqGk*rvO;t_$fvo=V6drx!T1~m~R$njG zL8dhT&C}3>NJl3Wxf4NBlaV_QWO-Zzl3rr{!1}3tle%=@orid)$x}D$r>hG5Y!>J( z#IqS)R>*Q6irEpG^rqPP{)g)aG`zM&-J?LAQb z^+Wb##5S87m!uNw*V}DfcOf+S+B&{D4*DALB3G9707Ab*XvRGY`cdP(0oo3V-DjZa zWTEdtQu3>Z*o}i` z&jQ1K@wL!w=U8^dGqAuHu|TDF#bxbykcQq33k&sMT#nqM(B2*-w*G4c_?9FzdpjYd z{8v*c%LAWsBotu`4(HD$!aP8n^LmFGFf}4 z+{MTW%64Kb-ru*7eO9Rt~N-X z#f1G5+zb6B+u~ef#FM$H$h88=nlL|=j?fO*`pbgs>+RtSgF_RG$ejVQ8SX-o{|;O1 zZiLoZQ@ID!TWK+9u+lrA;YweE&Q$u1RO=V#&Qq;5Xp)kDI}rESuiGa})ZPQQ zRpUvW+BY)7w;w~@d)xfhKOA|?QQIs?b`0&CdbWD?JrQ4=l2Gj>-!{edLoKA2h(+Ws zLa5v&?H}qoD6K z<(C-xKIuDm&Uc;R$Jg|2|Wsgzjwb=EB#jo%g-}_8P9@fCnth|z*)m6BQ30im>?!R~3ir;~$ zuit!;5ntbpK`L_ftIww%wl`9G=90c^?{iH|EMj*V=#O7mwWl{Wm-z3SVqHRu;A!X) zGZAX*rcmR5zf~VVD)Qz)?4AV4*D+(a9AvHk3dm}04Yl>u{2KwW`vRIhnF?31ub|0y z(jzDPH1=Fqo;d9^Of+B5*wsZmdk$OqS5J*W;z8s(krq|M{)XCirxw1sHW-?%eZrUN z&t|+!NYg;o{@_72HzNtn<{nEZ<6Z&nrSaq&sP}lLgjy;Wba2T!tR1yExTCkZq%*Xp z>S<5VdacQkAWJXQ&_vo^&d}>fw}b4-&wR#v79`(?joe!d{e+>vFtqaT-nKT#d_DkV zwjCMTo1v#MG)HX;NS+hNPIj_v-n|8yP~;w9yd@wj+iRo`lhD|G3$mUV`dT6E#Uh() zl#uPcme-UIqjoIF>hw5VHLNE4GPGY6pYJKqtZytt>zgm|;_cKT~S3R;4;X9tB0}?`h=ymp; z)}2Yak=i4kmGTH$ggWR3&B~F1g;8H<=D`qQ)8%*;4<-bX^jOmR+yh)meya#0^KM&dz)ouWZhBXaHW;49Y39{UtgU{x{i_nbT zPU4|=f-F5h7h{DCO=_sRt5VL7p5@go-7VpdtI0!{-ayb6y_Wq~)o$cQ zArGsei6j~4^R?vDp*^AG_pT#%FEpD~9tYVBvOLjnHvzJ1Kw14NTx)$RU|wS#gz*vP ztB;VL)%{l_Kj(yJF?PQyb4eIwvHKksw%({#=sm3qvh+e8m3U2QfzYS5ykV66`K_G% zeU-y^!?%cGkOu0OHk&&XDN8+vd#1<@f@X7Z$n8OlLDSBlr)8~u&S&Tbs%!LDp_>Pz&p(&{`W9x*a5K8N15m&3oL7CzM|Y^46NnnAu!ogc`{=RE?Tb zTSHBrR7+^=S|e2ICFaT(ZzN;hwVCxWgqjD(B!m^?n|?2?KQwz!+P`fbyOW{W8y~0B z_7afgaV=?P5)Z$cNuER4c}B~Ji7$^KbfwZuAiKAEH=)RF0@-d}`3l}Y>65F~!mn-d z4go^nQLP@Sh;%e*Ajs|r&LLe*nhO%|>$|5Cirp)uPe|KA(z9b%xU(m}B8xc_#?G(D zW9L_Hg>KixqR`c&ZCUqLZ4hcD_iyfD9|@Y>_w-7rzB`H9cxsbD^42N#|EN7gdXe-_ z60g47l2GibRJ1(mySfRX=a9ntbw@(8x*C`e_A*ElKvqLnlWt6?zMDy!4_c?~Cf7H! zSV{|j9YiZodz-fYz9M#hu8ZAAjOSP3vGXfryi1&{JMlCeJGkQbIX#@Z0>o|Yos-#^`y^8-;;h%2;*p%$o;4_R14Gr@A}2A z1*scor{SUv1ey2Y%H-cnvfT>Vj}7IBU0DB(gst_ka}x@`Y3QB144RZT-!}A!(9*Xt zmC(MAL93wttpM$!^d87O{hn05il4)3gRJ%U2bou)Kl^n_q5B8pbp_epVVIl3j5GkD zHg}E&S-z7%whML(X+CKssHS?lk>qxTFFJ43ATqw6? z-fG6%MoLwUTy6E>P>|$X;7&*gs|--Ap|_Ks1vOM{6Ue;!4P-v=Rn2QHL8kShHiC2+ z>2AggBXlXWW}3$vpo5fT@Bau8t})PT@8KKL&egrP4@j;;ctetO3~3msyQVUZG?{c0 zX&%V(c$4HuW1-Xe0CiR9bUskh`9Milukt6lHvBpkvnW=5){6%s)JE-?gzCGiLC0%(?*Pdgx;8>jhF0YK z?~01tLWD{x`Rkme&_*C0<`>dy3E_P%kgZiVfUF;UO)6i*_sN>113^}zF#q*}X0}5~ z=hNb5T08=>e!rUZ8EKc@edzwA?x4|HSEqw4kBOw~8E-zdmq9j;z5rRB%6(MbUQ%m+ zoZ;lkls`-Dw1=;a${@?F4#>*eoFuCU%R}cx^cVc5K|(c;9oI`QrgA!I66rQlS@rk# zYt65k@vbCNw%T};w24$$(}(T_vei-(YN7u8Iy-h{)p!S3$h&zle%XX;JlZYerhugG zGw#-e@GW+b`7$i|Z9(ip9}4yNB;r{sl;z8d2)#)A#-Dx3xK9ykzd-ptp&}>0m9~E1 z?~n3VGW+fsxhpiiJ!|24yi!^5d}wj55iFz}8FvWi23S1gjs(qA+i=bEcl5FAiBPHC zR(vN5chJzpE4&vD|D+E^Zg`@VZ`;Io#_@@~SxOOab4cauQ2+w`DfhYGV>Mf3G|%ET?tx_lINGw z&#}QP+k2H?hG7)5u5N{`)zyPZ%Eh_GAn~9$_ew%omw{v?NA7dd?8{L z2PDrSaAqdyBGP2iHKggJ+e!D59w#j&tsuQhdXw}H=>yWIq%TO{l71%1`@piov-i2y zphWiegps_9Xe94*8Oi%xLU>nqAFIi7t_n!rb|~leB<)LTPCA$rEJD1_4DC${=^amP z9BC5ix`c493+W-!a?pG58NU=DeUi{jC-;a$(O=5Bt%*fB_dBU#%E}hr@$Z$}4Vv_! zUb(uY7No;S-AO}8<49MN?jt=viaauhOQ@lPpVMI=erxJ4yg^PCut<<0@9VFJ4ug`UL}1@+6G#$ty);u zdypozAax@7J`}tD&_2;#JO=cQ(j?F}rJF(JPm%sor=h>jgx?b{$5WK*2*qwF;@Q3Z z0+7uS{yKwS%T{%+w#M^&RT;Mk@obH`3}mzNYoKFvK5dF8CO7u~<9zxNQ=X2sK!o)M zeuF^Uonn72^Z8;QgW8~0_^qJMox4M`woE6K--n)H%8e0PSAF*B#qMBe4YW3VdVk$k zeh=1MZ95?qTl>hFH7!-^2F<7+s0dnpHw@ISl*MRhQoC5?lYCvpE(h(8^@n$2p!I=8 z{+n#qL+gN)gZEM1FBIk>w3Ft$0A#s6NqUy_8tFYy7q#%eeZYGt_)Vexmhnr3$}jng zb3cQ6BOac%fMhj{_0Z0ED-m-Jo*V4zSMc5<_*dk9!8%8NJzC`ULA?G*1;1#RO(Wj@GhGf@XJP*Mr8Y=AW+P4J&BlReKmT0aT*DalaT8e8y7+?#L}k;>GTT z#I}I>7O+GGEKxyTIo^Q9Wt!VMklj~&2a@uJ+%m3uJu78#Zhw%JD1?TYHUAmfA&6(I z2ieDzwv1gTXhz)_dKySh+rkr6JR!PLeHjPM>N(V33AEBRIUSnK5qE)XzwTkN9VqE7 zC%r@3N~&Dn$BRMJG~WYBhcmQ!N6c%QUSDXoHzzH4lUkfC@w9AXNSBdr0m;5fcrz(> z3mCeTSwE+frykp=aYs z614k}TQ;`|WaS7?Gd3p{`8{k6t{S0-+1|)b4ShNM6WQ490sM=i!{l~7qF znyDjizP5B2DV=HSpNy6`KO^PWfqyC;qnzF=|7KF`hBK9MB>x@{e!E0%I_XYOq~(yO zK?~F?DO*$Y&WxMScu#|5ot<$jKyuy3EFVR>9*W&tqG_9lr*7+@N&RKqMv#oCjN1yT zi+DwD=l#5GnBn$;W_8~ZBt0kN4hPvDXm}pg4VvVJ^Oit%mk`Ek7{6h>g%L0BbJ=(s z4BMx)ynbdabkaLlK*OCPLapyk0KKB|{F^JW6YUMvgx)R{IvJXstZ)rTN>s#Ji`+fX zr2azR$hgN6i~2mH0y7OX@c`H8gm4-s$Z9COb+8Va)CNwJ1KDim-wCYg$~Ch01!}sz z62e(Xc-!z@_4&_abtiV@8`3 z!f)bmJ-42HB-S)WbD>H9D{_lq+Y%lWxtBo~Xv(WWain1&vptL21dw=NoST+tNc(N; zFIdM@y9Z=*XDH=DXm@HaS%V#a>tQPr%DANnwNtcSNeJ)AB^Hr;7c>!Ni=6M1xPOIq zscL=jzN54eehmZ7Xs71Z=Eb?{AjvI%_jeb(5hcG}&*sk9!_Q%PeI%D1hH^d8dM zZ9(dgQ2sdbSF3#6M{D5x2(%VXRfdJpqD0G&*A<~nF}G)P-(rLs{Y>i3(EbVK+YW&y z=hNUTPbj6)NNOJ;71QJ$G$HeOz1H7Zh$p{*&wmba>CslZIQ;^l()#)9wW|}Yrjs4@ zX&7ZS-R*c=&gd@EO^9dOlZjU3<|JBi?g5bXi0438pjE58nHb5}D9P_br-L%?O@#J= z2O0N1NPNz?&7j*gw4ep9?n?WBEVKdWM!kL5s{vb>5V21W!=un29!O%;RP@Hv&`)TRVIKu$iDtJ)j9s;dXT1;9_ zl3iE}m0eh)l?+`=l3iE}m0eh)4GjI3^czWba4nwf(HhAftB1 zirkqDy^z`@YFCo3C*7P7-qT9vru=80L35xkBG>{Li;Woln_B?91ZJwg42S)B=^v)Vl zJ<>s>V@N|tXOk`^-9nmAT25L^`jWI$OP}waq-La!q%3J9DMz}VbRTI6X*KCH(r=_1 zt-J?~NbN~INyAC!ldd7nCM_bpPWpuO3#n>rpKpCqTTiYV$lB;cPtiG`O=u&`=pb2T z#BMf7RzU@BAxL^tp?ex6YxDxQ93(S;p?i+Bg7gaM1JY+8SrZnxEs0j({1vfJZhNBj z$wft$a%)#9p+Z*!^dU&Ng%+hnQ3O#fMNEUB)glOjMAHa@gs7CDD9RK?OPC-uBIuCOpiB{?qDE14D1z^M zt-bc%Cr!qT=lguVe|(=$o@d7D>%7<6zt-7j-*eC1N0}OU%GH3rwbZqz6|Jtb(fJWw zhAqwP5#{q5_`iG1QCaZ)4t4RBE6qh2W+Uf{HK}5ESakj-)ZVb@jd2Mz+FA#|()~Qn zT8G-BM_FqUEPBHmo;QOMxgEy3#(LEa$-q7!_pqA_RS5V8zs^X(QYL&2iaV69zax|gnZVz4G z66$k_m$0Lnu%i{IFL0FlZ&F2UZ(XZN73tR6%32xL8ey%`V&S<0Yf&~)+eWD=U{q5) z*=4Qs#KLD8SX95jwj)rcm4Py?tX6ZNqxW^-4md3RS>qm9`iX@nVNq!b^*k(nR&>Ck zb$dd+Cr1PIskOcl%k@>DX#e|7czk>1=%k7;-}J^1v5;4=bf1p37Uh~| z)-^i}OpjpoQTlBo2~_~5GuE8((KGoB9Ni3c8KtJf8pO4_1eWfrN?26JKx4GKx&cQi zn|4>XSc{%Q((EoU{W;)aYdt5H&b4h&8t&OjizZbp$5Gw8|FqVpu(pFPq1MA1!q!i) zsEmaAvJ<5-+jJl7n8KDhdlJg@fv>i}(LHc9P=AC)y%A+J3sA55Y9~1w?IGjq;*C=K zLPs?ir4F*z6tOl}C9w8JX`8E3SYxV5ZmQaJCqgiEAg_+?dRqQIhc+bT| zJ?r6afMt7IYqYi8J6=B%kAxbBqcjQ$d;N{h*=BtZs3V}G?>Pfi087sxlVBBa-xtBs z=js`-j%Q}hw?NGR(`8gx-PN#Yg_2Nb;_lHLwkF}eo{sE1Ocd-{Exs}J1T31H+-&yS zv!1VBg$K=RzUs2php=c~^VR3p+5k(pW0U=~<*Q6sV_7%MvJqk>lv@v(HBxl8_^mm6 zlo}~fMyUhEnpAPTwa&0snYC`R);Qkw>8NEE{Lp;g*>*K2Rrs&EzO% zr4Xnht1GqEY-^eN1$GS=*tOX)74t=>uOGB>n^f@#n4VRZ$m}B@|G??Du>KRy+8`EWH!pRAKmK6D++yT#2-UuxPYmsvZ_a#&dr5==0Y4#9Cj%q8!5a zA(r_E>AK+lq-B2u(~)!RQD-^bZlc>=9R^E3=Q{;f7Wcsgu;?Cg^yu|q)N*_-fJJ4v zquJ_VFx?J{vLi=vJC3>9za+kRYZNRU??YJB&**#GN~iP2;kV#?)G?>q3`cd8?W{G@ zS_i?}jeX5dXZW2f*gjypM9Ul6Cb(^GlKd(Vn^`Ndgv%marVH{ zS#l4oLLAj+PciFWh-3FXwqA#I1zYb~>r-nzVdK3Di>^m{ufJOM=myhy5R5k?Jq%Vo zADsYeF05=-0_%3RDq$_)qj$sI1-ny{W` z-=kpZ(oTX!J(R7^gVm0s$5hOQMKwL9;x=nNXRUX{!gB?%UgLP`5bUA{OV{rsW*J~> zVPPC$>E4|POYi?z4D0JYI_$p&rt5N@weEqXcZFL5>u2^bd&Xs}SHa@b%`6qNMYGfv zu(H)hIJ!MEx;LD|>>KeIrFvoIGfO)Z`2q{yA;O|rVBn*>;i%3gqr=ls19;2;o51m| z=y%jbc9zcAW4SJ-z3%8JH4jlv=6IA>R0G}5bp43xOp9X5%tHeoeFX7zJ6?uG**TCd zTdl@XYDc#EUMxIaIl;`6BgAsP*aZqqx4gLD(WveUt80KYjoa2N9>{8YrmO_hXOB5k zTomjsEA4O$yDdm${Lb|-Q+roh7MO1N0kHIZf10&S4O~2D;qxYR`h5F~wWwA)o~g6* z_-!lNSEf&$$3RE%J7JVt!hQ8NESg`OhqLfaA&%;Cb1jb_Zrc0XtsDj&waCSD7Ow35 zjt*2)=keP|2Oh!xXAgE?M!7T4a<>}ER!4$e#Ee!qdWAx(o2!`7EN}}f%%{*T89?`v z)vaWUp4tAMJ=`z(>CJ6)mhG;tKoq*xW~*CZ(TXfvnR7K;(GIaGGl)Heqkn*{R(SOE`w%5>Z@!O9HDavPw~T|ySmwG7t8jsY>H(imO0&}mO0&>mOTwi zzt5`^R`rQg2EBiQKKo&9n~!-HwZik&II7nm>#X&&wK67}qeHEgYpqe%Is}%!o*!wg zM7O>#fHgIkzWx^3qx8vv7@k80qkYBkbOQEArzpo%Tq+*8B3kPvYteHB`YL(1WsAka z+nQk=jJ9Rlr!etb06Y^-BZGXACtG9cMd+SAp8DVoSi1J_i4~}?U>%Mqf%?Jf$m3}4 zwg2Q%$VdNsi}m%Wr#}^1D5z4d7A2E&5OG)gCEFVs>QRe{cDW-(80G z_&sHeoYcQ}f4d#psH$bDZAyNmmVhw3$8j!%>}U$H3B=O*8+q zeDp-H7uh-k*2`>7hednj=_p!v85qs{xZ4eDIa>qiYH*Z#^1tcsgzoQF_cmJt#d{FC ze^_1jf7C63?h~u~*MHQ#0NqzsxBfrsRzRoEH`iC6f$2HX?EMs|N_>0x14kK%{Rod= z_$Wp3&ZT~d9Tihawl;^A#ugpjf~_6Fwze#jE$VUFVJ%R*<7hUsZ}1#Nz|1^lp+{>N zA03F%o~^XYrq+#M9qluruRVE)>@r6mrQK2WRb!x|?RG&u! z9UX|B2@kzK80cszj_P@6prijQy9!bCdGuQz(dT4tgNI(>ErK=jTv~lKTgyEsNN4z9Ty&g0Uut+g+#OPL)GOSfnWEM32IU|q>aFNQ^Z`hT*1vr$G3mp0d0kHD&D z_8cr-zrVrK_4^RkTt50aEUF)#>%%kF^jpSZ>U%Ky9po^Ta*VMC!=fm|)K0KAJ%h4o ze_?@g^NZUT*6kW`l<2b63|Mz@X=E+f$fDD*D{5vVUwXPs-aQ3id!%vLu} z(7Pz$b13GpXSr7OI9hZP-RZao){H4+EfFhQwZnQ5I(%yjOGkMJ*30bsF|6fmt%s%e zQ}B<)U5V4Ev~*a+0yP8{)jm+WS}PwG)emnp8D*Z`KNw8kD==?K#jcLxp?^J~aPKSI zKINUQobEt*65+Q!u)@Gyd;QLm6A-zJ+veD5U{nU)b`9%&ZrdfW^ly?XVCnnW*I3K= zVh4FJoh41MHs0sm?cZ+RbdURb*poy59>PVTU6p%KuBR5+cuSG@^fWl0c^4~se~6x} zrae~mvk=;P0Z&C}i+0K+D^Pz$JbnMgz4yWWZrj!1w~ofttB9iCHS>S1|JxgMru^SL z`2TYs1nLc(@%sLx8R>wZ@}b%L|IaP||F&(o4&s+SpYs*x2Yeo+J(IBFvwcsWQ}n$1 z1}qv6{b_L>U%_@*fw#GxOddbM`jxFe!BVhxS1S=kuLbhtu6V%jc%XM)1@>Ljfug6! zE^x{UZtvU=>y|BYDLs{SA5?Q2xOkET%#O#Nc2@BM5#isuC3tE~`i&=&nJ zJmfOAg|#^>y+;3E;!(SFlss$ECnX*40EvgI-(F@tMEj_3-15VrqhE6b>S$Pct#T49 z-D~uIIl4~cd1_b(^P1*zSbE>B@(-{>4tg?M)qv3o3VTAs`V+Tf0W6A)?`C1?^Juq^ z@P1f6dIBuH3)xFJs;!a#G^`U$uliQQqLmTuHo$t9OZ#3d)C=*u@h?2H2}_r85G?&$ z#>1_3qO}}zI&&0zHed~sgZkl{epxMPw#!D0RtlRIkG!*tXqu-L@8z*?sK5h8k z4p9a%djU*a^d@wQf_ItX=pNiQ!*u@Xb@qSC=e^+(sQK_6%hn=Tb2NRe*1?JAx zg8#_cprdaY1N9m#dJAM=--Eg_JBg!oL01Ipznv*H$R>S$tb&KOK81BUM_FsF@9fcE zV9_~>V|O(bI=yd7|F?na zowdr?_Z;YEvvmoq8q4(ASOa#wWlnd~0PI#UJf(3{3<2j{p+aqf&HaQlzj&eeKZyK{`BVn+G&sG4ea=d{nB)vnmbR}-5t97 zP#2HC8Kt?zQ|7H|o_Yo|17%J&KiU5fblCYCOwR{d@O_lo?y&S3?<{jx;LZX*FVH!c zt$x6_uWurrXWyyfseR!~wesv+L_FIz&-xBg?sM5u@X&25z_~wy>z96*66QXsyLp4o z?xkGQN$}NsuABx-@2_$mtg#%W%rfWuhl5Py3LK>!cCpI{tY4|k?tLEG>t z7?wWI&w=$i7~;tlVu&)M<=GwSJ$I)lXu)_;o=&Q`0=_HYizoN2b)8s&x(yaRX}r6- z1J+9DwDmqL^aj`(wwA(L3ky5h!_sGfdBZv0^MkC@vv((s>fi6L$J|8w0mRfhV0veO zrMuv_1c)+}e@#wSLamacL;2SYdS8wHI;_U}>9AJ@7@Z&3gCJ(C&%pFf17BHd$(vZ4 z%_5z#qMzvh4V{mplPZ3-)~4taV$K8KMp!lkmM$X)mcH)Oifj}1Fjp`=`h&m%wJ&sZ zG*C3(Z_k!Fdj`7tY2V?j8xLO^g+Lt-OV0S}TCRiKfbDiDuqUN_+1CO+e;;eK;*>9sLnPAjwp8eIEo^7dL^lxvpWqz6Hsh#1W znfXm2o|l(j8AP9IHy(lYz&BIk>z;YX)4uq%1f6AA&0?)bzqG)26^M5b*YvlK(#qpd z){Q}A`ZZgi#^L{UpB@H_M&DQFR}j8(zk(R(*Aj*Bptkwy&(?CkmN?Hcb9K?btEB$( zd9Is?x?t}%(FLj&)-hZ^$}4@{H)lXJujWBF2|9chvex6UikLlPt(Rd@{qRW`RySK; zA@bR*>j9&dyXT9s10mQ(4xBr}-r(zW7XrN|Vs|pr9 zbswmCV(D)<=zAPoCvnB*v5Z`6cf|GWGt_EQ#bS79>nUr!B$lp=-e1||kj}aQ2l()scwEIrFBtTkvS82qXSmOh$otvzAsnZf1S1o6n`tKWfGg=ec{z;ryyx^KDM zNnrX@$7!%O5R0^J8W_#blPb=%)(o+5b;VzM+AsL`&(Op)Q0@NaQ}N{Zc~P>%#w2Yx zND$Se9Rso{lL=WAsygFhkaQ-w*^Ueb!5Vr8B9-cLXm$ee)dD6xDW*Q5TB1qJ)F)KU zLQH)^)goS|KA~zAV(JqrdQTRWRg1EyU7;E?M3Z|hS;(Y4_M|1vqWLSx9_-b@q>9_M zH%Lp*hSV@=Pnxk9qH2Yhu^6J7#LM*95VaV;!7(kR z-WaN~a9@*ZNN9iRVQ91fAUoB z9u%ii?JL=mrxpl#1sO$k&Qm#ilBP|W8bZUQQk^MYd#Oy^pD@`=b>2&5G12vT7i5$w z)g)PpmeL50R^>vfKt5$s#iUZrvt%6;*NV|9iF?6RmTARkwT?-p8Y=Y}t?KZtG_`Az zCCR-tSt0Ejt!kLKc8ykzOmv;UKz+ujW=)chqdvVL2dP#ju098;l}ucH4pN<%zoI>M zkZQnAK~x`8!*PoC@{HDSoT?IHYB)|M$7oFpN{^k7H9kHy5Ye*)_49a@&qUWb3C+Q( zjESq^(W*|oOphI{@(-XmuI)#wp<{_uDl=~ss0Bg}mOd;{Ll4v%nr$dI3h1A>V(QYj zMd^mL$6iOBDZ`HyO?&JukRi}G@)5`gkivd(j<;SEht7)=ETK5N!)vl7CeBGr&_Dj? z(CiD%RJEAv>}H#jRrffOwa1L+WVMcoZUxo(6t!U^%_(a7c=BqCeIt=iRlP#uxT{EI z6{(towPs5pr>Q#h6m~jOJAxbl&7ajeA-f2frV7x%(V4bbO=eQb^Wk`S6{}fVliUkl zG>e|0%CsiAKgbc#oS~{jb0|mw$eF5EG{=J+&!mxwo5M@gLhZ$K_({;5rMg68=J2!C zIwr0U&sHPxEK0P_XR9$0avI{CjbD|qCQ09}P_|50Q-#pe6*Q*PRf&+Xa2J!tl*lZQ^Hd&_YV|Bg8OQ}H?{L!8tM@>z04Y^X zOsds4Aag)2R6~!@8v0(O7UUvTAtVdrCXkEOS|-(M7m#@%WlBvXuWEG=2#v)hY9tfa zW0#Tuf9?LU(9DO%5!zFo$mLoB&4nP3f>c;?6-YD4RhHZ!Ub8K^2jqEZsx5gKg!1`n zOP=XRIzV26m(#or@;8tg>(v9Y0^}M?dO=o!TxUsmnl7u>khHBqXxtsi1))`eBm07U zj5xJwJolJh!L9+hUNthQOiqC2Ymgh&BCSat2l73WB}}T-86eb$H>xcBqDo7WAjv%Xv}!cQwxQdwl}FRCYAiI7xKD8 ztrd;w!#h;V(Yh?thj*&wLQK!kS8I9NtWxu(^t)B@G1|+F*WId$r_D-5xk2r^TP2Ru z8j~&esPRHfwk%M&Jhk@3OeWl?%9vEChoyh+qagTe^V@{nuYqbyTLD7j^?;D}G&6#Z zm=UzZH+i^Ft=DBGzo&LxfYqMr72@Huags@br}`>IXD+qtK{b>~rP>A>>eYu-osf~1 z^fIYe6F_JU`H&hvi7HvICRtL;q$g%F^C7iblN6Jg52++yR;twL@Jd5{9#WZ1+SCjw zYmu7Bq$hTfCB<69gyykDs#fA$0nOHk^RQ}R;%0zHR2LI{m7$z}M6J<8&4E`IydG6! z_@bsYIUtXzMop5pLqliNQq?7d_VUzZttRRv5bCj|Ds>9=Mm3Xs#96Aw3wZ;Y13;cs zO-w4)Tb6VQ`9|VAiJSg9&L;Sjuf58cRI05&s4T=0&5l+xmM_HBiuO>|nhqhfzp5rV zQz>$#+SA4s12GVuY^XE+*2rWwYm|6M!7{zWKx-Y2!wk6Sv6Tmhb6^A-nXPe$FXO@ zv#L(WzpbWC$mYdZeV{(is^vnq1)0WVl_qKo2+e-as^qCuLziREsw^gR)#1>TuvZZi zy_TS!e@>N%<}_$#LGzs2uu+^=3X8vX{~~BEf~J-K4U%>P2(|r1OYQ=pS;7*33CQK} zvLx+AkgGx3RC*CP>I|oOzD;E^X;)_6XjkKzv?((qy{sl^k~A|?hnlFpl4eHgPz6HF zjMSl~Y7#T`c}0~laVx#o)T{`h`n;x=XfIozzp3UwEBv|oysq+#nb`Wgp~f<)RPUjs zwP@)ZYC4m4Tf;Y1sSs1cH&uluwuUQIEfZJ6w^T!f+>FR?sYOg?CqF}3O(5^6B}{r^ zbavAyzoXiOtcT_v)^rK+PS+#&j#@2*_VlGOeMha=B;^m#(3rlX5~ov3dr~s2*B~J~ zTFp=5#0Gv86gOez)4qI5RBqgq9?58^CD4Ogm8AqNV1S9J?H2IOIA-c##@ zoC5L$$Uju#46b49Ops=fRcers^FW>hd0!0`QVy~V(Avc2j4WwI5 z7Sagv4#+2}M96%QRUkd8T*!kUJs_W}S|N{td;zjnH3@kJJ@&O)E95hf0Ge-9uaNa1X&~R?-Osvz6rLj<1hQUb z3Q2-cZ~Pl?7uKV^IS7sWcWR7~ED-AF@6^Ny8H_mJs}d&e)5He6sg&ZhEA!dm2UWww zo$o*3ja00$=fzKIgAj9G{G<{kq-nF~SFakx#LW`DD*Y_h*jeId)yt$(?Tk8Sp@zTU zTR|?%o?pMHSxnsdrDA1F+$^eM3;Jo+pF?q~)d7e+43SkVV>*#~bqL5VAhB3Jlj`J& zAbBA1*aRWxfKac-V+EQhS|4gsA(|_p*_XZQgxml!mdSh}cYquU;>8vVc^HJ&5{XzV z6Sqq7W1U*V*Gifb{8)E{(B~9Cwl+d&Js-q+BjhNQ6~>Y?sHJ*kPFL8J*dQjl4<|vh zX)Jdm%^zZunY52J*X8tBmG(-S>%|taS|P1y1@*=j=vew|Pg?p*shWkurL1Tr*M#-t}^ymDf-LX6kWu?0*jaZckmNAMaE zYZfvO!U?lWQ2gYh;MNYeaGO5{D0&8i1S*fM>*!aQqQBpbe&T*ok51ewu?oCGp6w)`Rz^>8c5>%3T3gpk+yvF->VuhQ6BCN7^Z zimhkj*4P)tdYQ~s*P@2g;B`@K?Zs5qTs0Sj+Eo@ymJxAh?xnH9OSI;G(OeoE!?%g% zsuqxQ;8h-L6Y_>=Dq`z}tOB_NnyX?(m+3fPfy@S}ighz_b-p^bCPHY2ygIf%LTKi% zL2(qv&HUHeKBRZ`+=$4vmZXE+22$6D+zWEECG=h&(#-8cNHfopZA8=5hmhtjOSTuy zJ(dg+a-Su;f;&sZa zCidI6ug!S*NlZnDK;y_3AV+|F6DwdZJr>7-tdA8j>4_Q5zhfJOm^k0ZYObUjw#N+F z5L+a~c>NITV&X>mr`RecJ=W`|SWX4Sab@+!T9`PmUt(=coYyb04k4zjUt`NR@`}Y3 z|F!${j-3xy<#*#fisH{v&_5q=_*0z=$urWzH6ok$Kt4W&#@(|)UQUtP? zN!LdGvt4`*lb#e4XS?_YAtugtaa_#s*OOx6Y!^>uf@>Ti)7p6Z_(ZLVnSS0rUT_tA z#Z0ee$Mg8>fS#D?`62NIRiwdvW5jt1HQYJg#-t}^`fx7QNW>xGy;+%=x4Ca<2D>9O776NH$t*eyQwYOOJ2v1fcNf346HGvhugK3<3!<-Ow* zgqTd&H$IU`CGT?kJX*1Tyn>0ldX9}ZGST_`3N&Nm&6*_dM!Pye#>HEOECHd}W?a03 zNe}m77i(5(lJXohG}{~;UnQDXKvqF>aD0uBE|8Bv4v8oE%MtgD{9*CQOx*c(SiB@c z=$d<2yfi}S^Vi|=iU^^Z_K0{b6L%FpGTz8!uKEzA{|lub9dEgo`q}kHVZ4ipF1;6; z!gxA=S>tLrC7vt9Jkc>FUM0kQem^l@%cMGKo)J1R-XMf_5~lOw#CVe?Jg;tgF_8`? zu2)ZvuhAN%@C4iz(3~32sMWb)`miWIok?{vgob*4TD(+i>{v{Tmx-4di)rz4@uDX~ z=u9b&S21xdEw*PjojWu?J3?p5)~L_vRzn$1XTh14n6se75|i_e&^bt6j!;X9oMpYT zK`0N;HYAPq%B4CxVrB`D>#2YA2vWA39ZzS{!!rQ2;+*&(A*L16;~7FsE6$B)3Nfvi z8P5`8S}`*|RETNC%y^Cv(~4Q~Tp^|v=f(3hNinTBFFuAzWpXsyMfWAni%$@ZY1jGj z0?`}_4Ylk1_*5pkrQ2dGE{LyV;_f3|9M8Fddc)mox;S1g#5@C27H?uQS4~3Xy%DD@ zo_k~8KD;zOfr;zG%i@!Tm_96zmk2R^ctyNSi0Q*C<26D|A6^-+6=M4E%6Od+(}xxD z1|g;oE8|U?*gmX`FA!pStkPtQeB0qt_c#F=e15ABL4!l7~Ge0b3{t}4DrN;h$; z;!8HFPj$RSh>24jZxv$VTpe#?;%2t1P3dVDqbxde9l09hRMf{2bJcUiwA2#c^s^&0 zI;ThD@OtB7kXlo^Z^okDk~>iP_0ZJEmrE;5+i!`l7GnDF)_7_iWlK-YwEfn2x)9U$ z#`qv6uI-KSOeSvbZH(t>FMGvrjE@&$+TIwSD8yXx8{?BTvDf!`@irmUc3MZ>9-myV zYiO?ccgLp+G1ujL<8?wzA1;Wu2r>P$AdauaxuxbRyda(@#9VXli;opzuFDU`#|tql zheh!+A?AwzNW4mjx#B+_uVLbPY-zlXiR-bY@r4o1e2mx9c*)IF!)o;xjNoFBr{kqU znuR|+Lc(ue^ zg_!Ybi7(g0j@PsCjCmZ#uE(B_j~8M_@P+tFA*K&sj;|A9#_N^1x=qJ1WBN)wU5FXM zSL203OwYd>uMlE-{`Gj35HreukJkt>WBO*iR)`t*x8luA+<3hkZ)M`f>)rUuh^85% z^KQKOcHM`j$KH=m7h=xt_v59S*j45G@hTza?0!E!t4X(=uGDmP|1(~5rzWQDpT<`* zX^XAEn7#tdr|~sRTn#^qtGl$9nE^hFr!sNv`XWAv$z1gT;;cZNFXD@txH~yt#G9G8 z$X~>JbsS~J>x+2md@4&veuv{Ufn*_jKSt!$AYaAT3ZdQ8iL8rHxLa#XE544mfKbkx zmVO&o_YiTVe;d!}M-umv=4RE4$p1p*Z{uT_%;o*mzXn+!uM^E~xG}Z?_Q^?({UQehIj!J-O@oIKg6pdBopMPcw>a@1oBIKQG|>H ziFvI|DpeKAqR76t;6W;@I(aP!ttta=k&p&UmI%2EWDL9luSLj%AO|sNW8&%@cwJh< zt5d3T=p`TGvY1c}Q@l(ju0E;WO0D7N=cztvUbhfapEPfc5L2HtZygg?dYYH|7gyE< zl=TO1JQG(|y0=hkl1tHwW1-pHTP)-`kjYFa3Vk!O9E9q#xo5~HAau=jgl=|DW3T2& z>1Q!%)1`CUXMt?tQcNo{y#^ts6`5X>5YviGZvhi`7G!!YOk6)_ddnlE z0i|#2t!AQgmDZWtd+Co*4K=wFnk+Aii5rU@yk@Pjc{s#t6=Ftbh}Xfyl|IB0@u(~7ew4MNm(Qe9U4Y)8@!H8-BE*~pJ9%Y`*-Kp}njCMTCdt_#H10XxVj;Db zGz*z$Nh=eqWbm125lYYTIv%6Q?laNOHh;`BrHI8VUKk)+h{Ap2Xd zFF?|wB+bJwq6dK-;H}}Zbi4k0`agLQLrg zdUZlf=?8kvnxvT05As@>R3@`g)=ntvAX{fs);MoDYjh2Fg=U<$N+KK0crW!Ss`Fe$ zyT0rN&3JE+kf#PKwLi$g-cTW9pqT)2sFx??Ado2_hk1oUe%T!Rhkd-#wgu^m#z`9i@?IZu07!Qq zQUKD^hfD)m%VZ3a66D4p6h#mmzq#k6aRH-<@N@?2=XVa){5n3kUC6^N!BnjfG!(VHq7)Ap0RV$sw= zqb|ia*WN7AnBJJ`m5JtVXhLYFdR3w^{d2NcE1D(H`~jMi?U+6fLajK(l2`kY75&I6 zOBy+{?)j|{`4n%VE-?kRt1~4d!O@a%2Quh5Bd?2BEf}X1&e;p~$Cs6SzLEU4Ql_OASqZrg>#TOns(# zjY3R)ioI4Lrar}9w-8gGVh@kPaz>f@obDxsnEIS&hE#MEb&H&KYG&w1W- zA*Md(d$kcl^|`=XEX35O)YkCT!HTc%7aEfG2LL1ae)tUhLfTw=V^vOs7}a;YVI3AxM=|0ocOTy97jJvVp};#lHO z63yjSa~25I*%7)&O{<+NjK;rQysk7Ptxmigxfg_LSYb8K;$IY}(vpurE<=5;@;bTa z-8?_r>z1)FJzwP|p5t*(F+E@9WeG7oKgSy@#Poc%SENbI^!(Lcl@QbOS9=S^%k=!! zUWX9V^EKXTA*ScA@iquCJ%6p2`n=9e)AQGPBQ;4eJ%61yQ8cFKYrR>bF+E@F)d?{@ zf4#RzyiCvE;B|_|^!yFpIw7X#Z}bway2nh<*Lhh&OwZTbvG@jKaTUhmCQE(=sqI6| z9jcqH=1}AYjj|IE@%E4&)KFFr-;_L#(r>dhq{ws+#1Sg}**+T6uG_7bDgAbDjE>BoSg93F z-b5xnDJF80S180pZt{wRn8elziDA40!K_<~6(*V&zw^Sw?cZiRoh zw^Fw&W?FH#w@zAWT5*rJfk|cZ8btmUk?-*mFH%c;QcSz<^-`HsCU1r2M`-T#GPEXU zTDri?6JlDrz$*}9T6&*Xs!57z>3v=~lgi}1h#b2NcelM7(U`X1@70OsVQ7-j-0wAs z#`MMm-U89Q49#ZHJYag&r|UBH^FnViYjls%XQG8(tB%8;fJpP8^;&^Ae?%NdJ_Vsn zpm!6~Uwhh*Aas8H#S(f}oya0X{Ov(#Odqzy)W?#v-Jzjb-4dUkn5L`4BgQMO5QOfW zIC2UImE{QCVW8&$9<^R2(9pNHk9zAOZKpG3v6sG#TG5kYA}{tbgqX;Sy`e%( z%wn(h6sM_^$WF7ENtL<>UOACCZD~(|j09=%YF?tU+*8vnUL6y6x3I<3$A1Z4d$U&) zYw+1h$g^Gx6Wvl8<>!o7nz=*e$lu{b8Rf_-5W1)5$XESH98bWFLFrEO2avvT27?^J znznxRS)=Q0@0dO3trOzvvq4CtKJC;$Jt?j}NhWPc(}&M_S)y?@9K)ni4YzeJ5{;{K zi4a%k3MLII4_*b_iY6iZfJ_E?-dii=K#6eRCk@78nOEFTGrb=v?MJ9Kl)W=-97E{o+8LkM$!jf>8dr$glS!?}6xcnfmnfBlK&yOZwDjT|dpH_$Ik;ob5m=`*`JoT-S%} z3vx>zGOk}7`uyHE@{#>CQ~Hr$ZCguGyVLlUgk9wK6P>4C>mU)YXnDc9yw?v3J2bXy*LR?0*F>&YMGH;b= zT#l_4;&N=Q5SL@?g}5B+72HXrA3UT!*7vkzu#UxsvCegStZDA4}({9nYF;%ZqA4bP? zC=+}SYv+v;Cee1y(j>ATtLUex=||=>iOxT*OrkYhEgDzD#2XveFo#LBhSP<(w%3T4 zS>-PC7Kz5Ja&a{mVph4!yyZ-yE$!+@){B=bYfz`Ip(`t&N%Y*AEE;$2l#9llJ5@ql zKGzCy=S~BYXbqeCktO2gBDV-}k=um0$jkf1>FP&T^&{%<)b{8)Dk;QeZ@Lh7rVJ9| z@;Ot8TSpCL63y^2qH*h}@j~1>YN8Ogjw%%5)=^W1xOG&qkQeRBe7X>~jw%)6)=}j` z+&ZdCh+9WB3vuhHRv~U3)gi>Kqk2so%!hg%HS$f}&u$%6EX1v&rVDZFs8S(r9aS#G zt)r@p7s}FW^;#ir9aSg9t)tq6xOLPjAql%yUoFI~qo@tEDsUrch#Nse+z1-tM$izK z;fA<*)sWqAmFc^dp!;lnNj@}vKZA@1iIqn`xf~19_j6ovKjOySlzve^4eeLiw{&`n zxo_!BAjv+ZF9OkCYq?jWGeFh~Dy=$6zmnLDy+#UI2CuD{j1@w^#T(3|z<5EE&7?@k zM<6>fsSxrx$nH$$3;7XbG?P{#o8f-d!A!cDM9c&!!U#w+obZkHRcR3R?s2MKXG zpDD!U{7@k-=W~U)_0L2m(M%}pN2d290wW5$ov=wEdaVwb?CVko^8dslH zLR@{ig}C~x5#s8zmPvFh){Dl~F#R3sv1kqRm_+L{kx6uIQ^zD4xv?La-;Z=i99Q~U zA#P=rzLM$_jhw}#C&lI1*nXPnqH&{KD#We2%Z0dAca;#=tF=O0&o>Bh{oEwP_45KD zu7+()qJ6lENwi(+U219cGh;%Ct8-F_t6{1T*NQN%Iw7tV4MN`? ztAsRR-q3gF)(UZVPI`sBXjfl}_w;zV)mN$zxB40+#I3$Eg}7P0K!{s?O%~!-UqwRP z>Z`%Tv8%5RA#U~6E5xn7693S3cB`*cA#U|GNQhf~Wg0KL`Wh<4t-f-ExYgHGA#U|m zD#We6%7wVqR~3_Jjx7|8%dy2mT#hvhaT(Pj#ARKZ5SL@inM8AJwP;+9trg;OY`qYd zW4%ILjwM#cCd;_@fgc-j2P6XNn`j1ZSUvxK<(sS)Dxr%s5=pGF~W z9%~ljt_7_^+`QT*#Lc1|LR{7@XA;fKF44HM)(dfE^$KxiVe>cq^`yA65<*;ANhZ;< z(naI0mAOo!SLy=MxVs0Fg}A#1MNFcROGM)$S22l3UML#3j#@0lwX|7?TSv7piI&wS z8duh8CegBzA5#BRC*2w#he`DQ&qOBC6-br#irkB<6^$!vk;HNLKsrU^%33EHcMoJx zH`OQlxgb-BYx__kuI)KYqHQ19k4z9RH|_;O+{`vvh?~czGKtPwrJ`}IsACfCu_dB$ zBiJIuwW3XkYeff>YF<(6d!D_baWif1M+$$@mQG|6{oGV2#I5I1Ab zViIk8jcDAAT_?oN*o{Kmj6Gk7o3R%PaWnQ}Aurl1{t_W>#%>YfX6#lWZpQ8q;%4mC zLfnkKR*0Li*9&nocFsSkpLx8%&yU}>r8GF7E zH)Agl;%4ktA#TQAEyT^(YlXNOd%Y01`bvDPTk2L{gP25fEMGM4+!-sx<=6xvF2@Rl zxEw1K;&N;%lW2~WipJ$wxe%9QRYF{j)e3Pr)*!^?Sd$Q!V+(}199tyB<=7G-F2`Dg zxExz2#O2rqAuh+%YTeH+$MS@@94isxa;!;+%drJQT#hXg;&N<>5SL>u#>?hdn-G^{ z%Z0cc!zQSF7PuVC5aMzyONh&{9468HnJ5~UKZQbE{!A6(vZY9f%cv3|E`Me*iRMp@ zXk7l(332(;D8%K@d?7A>77B6svsj4BpJpL0e_DmO{OJ(l@~2aX%b!G#?q`=jsX|=- z3=-niJxN~``5O?3WSctoCJY9&pZ#-X! zyKmeq#Pxiu5ZCh^LR`;x3UNKZQi$vM4NRgvkBzK1%K7wuB%>e6>PJTQBl-Qvgnp!; zA1Tr#@@?|0ewwm=q^_UW{C=8NO_J^#jg>;&HyZ1hM6)irR%e3Cx^y8f>oSD6tjiMO zvMxu6%etvTT-KEeaamU`#ARKT5SMkWLR{8$2yt20Da2)6;tSm_mvxy!+_x1&g}6M- z72@(RPl(IIF+yA(ju+zcu$W0S534jux^Iq}m_)~7iNtYZ(IUi+MVk;e7R!aWvFH-w z#v=Kp?hQ8&S%mhgwB))m~;!F->g5vB=L=|&q$D^OmZ}djK#=)B%jG#bpX6t*lU)M0+5$L z+Pr2VQ$d!4yyPXnrLyL#i$PX^w0rb#e6#Pz)vE?* z4g`6}nMM51^Lk{V^XQ=B+k!X=Fg<5REt64SHzS`lnZGW z5>F(5(VA645{WfTs`$5GsqhLCg}-Xe&(Q1ul9E`b5Dk$7Jh7MulA36Z5vk(eNbL{u zheU2%lcCTY46<2bmXJ{(M}lmgn4Hj>@gT(@8Hwpajsuwv@~1?bkdr_z2H7^z>uWFi z6-6b;_KBK+NP{W`xeg>d(JiC~qyc1yM1H6>MD7LIF;T~)ihlv{I7m)nosdVNX#p9Y z$W7|9h`abny7Km^uTLWqHGf?y;2@<>CB7|n^%|ON`O8=lWG&c_h8K3ACLUD$J zOi0Y%Oluwm$pbk&k&*7a#)2G`SR{nJjs`h4QLs5_bi1a26efx^QO`p&4P;Vc6_ZLu zk!OHRPSkASyr?%$Of+bs{tnH>(43T*zNIdGB}f&>DT&fSMC#SoAoU=pC6)*Y5Mv(5 zw8UB_x;}K~o}SpCiK4mgUTDrt4E>{yyfu#h6=X(YvJjqAK`uzt3K;>-=OC9PT7`@P z@hb4nfW&$sV?hRk%t_>Its@tL>CWHQLBi7p{?LCyzxJuz~q_Id)O z7Ua#u1|ctl%mwL6WbUXnZ-LAQc{@=jWCO@EAnzp>3)uuC+y(MMV(m`aD-+~Pkbfph zb2Qlv`8tt1LX!%Ry+FQAlnA*6 zAwNJHIeb*ZC%tMSG@Y z`Nd4;syjduvvFIlN=!j_;o_|1GxfTWBnE(6G5&AImlll7#-&VkS35r{4qi*L8z<= z{wyIh9}qdrU%;eV-6rI4f8>4?r&`@7r7|dKS8GY7{5t3eoE2H1RFA}O$TcfN|AZPgNgwULD0LYns{-L_< z!=a&d!a07E5L!7L2F*-=!UV0M>(22Y7x+y=M#Jk=kPH20A;*H80dkSwdzkhr2AKs? z=I0%*Nh!#sAeZ`WLTDDL0x9=1kI)(-^&nUJr4e!`$W{KxiCS|PG=Bk^-{z+^@`4JTC?5YcZg;+G+pqz(O)U#E0BMH)cL(k zTqe}}$)hN8HLouI1e-qU&i7NULASMAvy8$cuh)gwRae=FifE zTS4>BOMat}0OR>1yk7Q;PNm2?4qYo>^{X^tFZ%qx+;5JM)M~uh(a$N;HQWkuwgh?I zSEso+H1l`*sS!f;dDG9(gd@|OxxybSWLL!54sqV{XZ_j5q57=!8#Li{_(*8p^T$kM z4U>I9-uG8W$Uz|8{@7xtIRfNkzav5lL3;f0r#sD5kTw322ss_(bARL+PIE5Em;TBK zxftYYzv@hIUtR8S@4M36^7 zyr5YK%~(r85<%+O9GU0vRuDhP*CcrXG_QdqgRx91lUIWLoykPe&>ki$K~jQ3(a;_y zbR|j&XrFH6M)Ep%(cQ~Uf)dd*f>3U35|lETtL_8&0C6@A)-tK*S?zO>)FAU5ii6Lm z(EI|jSx_jX8)S>CkwZbPke@(?fovVLG0~aHYouU#gwR_Q2L~-PC~~FR3c0*5ytWOx znDoTVI}^7L>SmIrO6>#<#mNq8W-;L&8xODSpp8kT+C?-w1YJzpV|#-f0nH8p?NVpX z6pFJ$uvU}gcxaAcO|OtiASW?Ng%UMP&Hy=`NhXtObtTA5CbRxfq(E zL8%a$MXmtZF{p@;IUvJ=IwtjM5i~b|>=Y~!O|y9A1QRf7XoXrPWanUVgxmtJ;ekTm zlIB&>=I-|$Q|(7HOLY20W|l6>=xul$fF=5gLO~V0%X4+d9kj~ z_t1O~azL;|h=+g0YH+_YpuN7S&gmeVfs6}iH!33AfY2z959UY6*3cXrWL-j^Nax|2*fxF5)2!Bi&I>H^Um5v<46g?j8A z+;gC|PYjY+XAr4_Mw9WFlZo7G$pRrySu!1SJJqlQ!=_f7Fvsd$}) zf0Z*S7edFcVp1cd9{(bGY(Oof_bM*HzoLg-r|`WEK6V7w68vxwd*a$HcLiTXGGOQT#EOcj#6Mw8=%5+Ru&O|T~gr9wu4 z+z0!FphCz#LM8{Rg&Yb(=kkY;_^XDv;t} zVT61Pa(d9qq*`4A4YlHoAX!gdntTpTNic}XY}R}Oa!ybrn)}3SW-wheM9AyBph0Vr z^vw~CPHE7@q$>FuG&DM;!9pfD3qXE^*M-3b@%jWr;eQtf>LzYi@(28DQzofQs*`Ex zgRMa>3I=JSvOuV&)pQVDWJPutvxkAons^&!k$N5AqPm)j{(ux`tPRJOOe|(95J!T?g`4kn4h+d0InW zFM`wtMNOLACgg@-(cMJq6%opYx}cj$wR#9-CCE)d>wVhmC6JFn8iENA5UEsMAYXvY z4H_15oQ!9&ihmI8x;20Rf9-w`G(SS)$OaHPD;uq5i&|VA(2w&h$pxVuw{8!XaO96- z6G2j-X$o4HxHZyU)@u$l6xorvLgrh|UxeIk$x&Kui-Rsr_+6R9KpqQ<9-=sNRS()VoJlbgcQ5YoAoDL=miitV8q>#v zj73ClR@+=}$RZ|llQi?^Ab zRSt3-$dVxAVO<|0r-CdE8im{>C?n> z!3HMo4GYf)`o*&D{Y1|P1&?yO6up;$&WqNdC_=79=`RFzOx!z+UJMp7nVZZ+>GjaO z7_>#mJdn1aQ%DXpMB0N@5kg)a!5StmH(m`g7Q23?x$e~6Z2f{2D9cLqffLUB5SSrI~I{XHm;5Pr{WP{YJU?g|>1xHI?dpoxh) zbKedY2{C8xJ3)&ObLOrLI)s=r_uZgNh&glL3sws;XYQ(?mr11>g?^?v>Vu%>G0tZ@ zXMPwoFqy--aW{JY!(j5`dfaKXyc_1te+LVM9E>=lK)wss2{{gg?tXtC_z!&uv!!4-Kakys&KuK%|WQ`v9N84Zu?-6 z{m?&NICUxavl#fZPuE)S_k%nQvRl|JI;w+(Ci&%Jx3aRjstlQWZ$ruNi~y?K=upk zglt)lyKW%+hx0W_?ga7`$N}MEA^U^;z@$~Y3P9-0Js?azuj_L@h*yj6Wx_>F-26N) zL}ipG*THR(nTE8-UOxqQr{Hz4Xxd|Mfn9v-d}ave&~ zf!7gXeygs}0uY+9j|itSsZ`H_?8=%7A#Z`~4KguYDC7h2Ix<`>gg$xf56zLGdO`Q< zmN((90Fz86^=dniBS4M{o0+)P;L+h~@!AWTNzfb}roTvW>eV42CxaA(8BDa-*&xS+ z6EsQE8i3k$Tv#Av8obJwOcrt}$W=^=nBcn!kZYN&6*3>>Hju)wb{Y2%&+3nXObRpF zm?X_prc=T!AyhiunVb^lFws{lnp>uX`Apn8;lyyP5Ly+`o7_(f>vSBuPBg9=yk#}Xig3jFHsFOc@5;$FkJ|(6NsD^W=05kO$&3FxI8>PEMekC z=k%~lljM`=pB3;rJ*;3dJNY+|l}u_yvl`?+wCjwpK{P*te0)BU`Jzd`S%0cMGh8T| zoj~YQ?U~^c(U^O}C1Hzb%st_futPNa!;8u~E9?}_(I8aTS>Y?&AH)N(VQ!qnc)P{%n{AZuuwEjAXMjB;Z)H)0YY`26_$wRRneRm z&JxXsqB$=t7Y%(*r8wt@RifDxpGqmt`C*-Cb^syG1!1FTMvLZxaDiwFMN=9s63scH zDGi%NbCqZ=3|mEWr)Vw=my6~Z(OeXEiRMkwToiVT=3k<@I9wx|Kg`v2zBpVjnms_M z&Shb*XbMDA7A9ZTV|p$Kjn^e%I+NMSDi9j4OTtXi+$M1@4Tp;635j!QI8rprMRQr0 zFPeXf=CW|SXf}wZJe(++^jmeE%frc{$pN7{Umg~TW`bxg52uT!L^M}~rJ}h`G*^Tb zqIpC#SB5pBSuUC@!v@j(3*-ZwxfNlPXv}*eD#C@LNi^cVF*KFoV$u8&%Y zkU631pb?y%Tn4f&lT;?v$+tmXs!)siKZK5Ka_r5SSFh9 zK*lkt5>4uDx<0jGt!Q=wq59N@jiNbLG}njoMRU1mt`8T9W}#?q2$zWF4bj{XwujbVpq%v(in47)^=a=WfiUARg#JAzPs>cTamIS`}(aq7c$qB#v@5|du7;k%b7 zgWMF(@1!xUSC!D51#)v({C7>}f|P;G4aHQ$&wyM5(ioP$slDC-xdmii zxPghgqTLp%6|AwJ<8BLcnN+KF@S^u%-WC=M*%Wu+G?}Hn)J`CGBl2xwr;x)y7J}R! zZV+-B$YUT)VMZ5~iDj69e$e~Z!| zOezQn?sX3)Ee#0Xt+ynV1_bZT*Ctg+@$b#oaaqeARIhlF3WBM6J=qh)ftXi4IS>Tn? ztzYa(E6GisOp>&FQt&>O)f?hnVmPT#iNU+XaMEHaHM)5^+$qQ!7D<8Mrla*foK!-> z`_FJvxsni%;3r8{Bs_wj@aR~)OMH@4Cu3G>_a&=Q{v@eUN{#j|)%la8tPf=WXu}{& zVZ1&`>LmGwGO0{+@mHvN8 zDIa0!)mjAzUN8PHsZL6bb|=M*CpAgwHF)(s3GZWnc)~lRrbD*yuQ!o*zpXss{W-xCzJerrf<1=2@f=ThpHK3H zuNS%}d~Gs3;oaEugs)9ePxvYm^MrTxtv%tZRf;EkCE8xkl0D|1k#^8?rTFKl9rOhO z!98;ay&xdhgY2l+N$J&jCrQ)mm1x}0X?hdI@D8xE-bOLphdb+?B;3+n^a&EK^ITmY zk)y0}uV(0R5+0pB^g$`Bv;mkKw?Yl~)N?neR6IKS==~%-$Nr*Ek??HUS1pMZ&Y?Kz;N7R4N{e9KCT=36JSKy@`ZJ=PmT9$LNzJY3INbAvlj6qw5>7K4Zpah-rfU`Kz9$B=j=~ zKHE7~&n7umXfozFJ)dO1^VP{SUvD7U>V9=9I6)sEIT&JaUtOrDkIAw^5r}yJ%37%B zkl^=EQBKrLlo&CH!8#Y{r6jw0Qbuwh2tJQ0(CaCm`5@~cp8`EjF@FWYU2BovM=^yU zk3-BNeOOAb#{2Uky>J|B=+F6+^rZp8Ie(H~5|B=iLcLQ;jea)d{1V8?dN;|%Aa6(+ zlG3a3>^()Fl(HdoEyTPJF-vs)3oLy@s2yY&&eA7IUZI$O=ow$C(tiZ`4PuJ*Tq%BU6zdBDg1u3! z7X$=%fMt5ClwOTj%DH;_SD16PhPyG&y7TosDZNtgM16r?NW#0sg?bSQ_t5Iv3GWh3x;Clm%)3OBo~9(kyF`;-NHM%i+^a997~UoB)k~$U((<6k=D<6`d-ZaX z(@E~rD@m4gFKybyi=p6yU{b#K{Eu}_( z8S=sXXPut#gB)f3eGuG#*6C?d{Qaj@Uo6Gne;(0GNqGNxRIgRy?LUv{O(eYkwCkOe ziua!my^n|8(k$NqGNxS}&CnH@<*Y;2!?8UM9uwpQrVT zfMEYTt=9y^g7Nyd-Xf(}o?!7j)}`nCgr)b&GbG+2KC2g#@SgA=eT0Pfgl>H^3GYbH z>*kcohj*)JHdXDr0K&9Gib!s~rlFCpQbi$Zv zBH`6Np${qXR`=I>hPD;1N`qJTH+r*@5U=iU^+6I|-QVfSA(<+~tNVLBkAzqE5BdNJ zukIi9Q7L{)f7B-ef-U_~p9;us(9)mul&!EVe=Yy4_mJ?F@fUrHgxB)4-uWk$ir4aQ zdYpt;?(g~l39s%y^a&;2S`Hc06vJydWH<>bXI{%8qfkmbG!47fHkZTqZj54z;nkgF zl#=l3){P+&UfmI+E>Y#otJ^fP<|yISZ5zcTyt-XuGYPNmWWz~Psd#m7V`P!=>P|6= zNq8-9XEc)VTHfAhBjFujdt*q-Scup14o0$$WvTU!ZQs$TBH`7YW(-Q%5OP}J(44x2pKIt5th0(a z1X{7XktW5T;d>Zy5}uiR8ke;D-CU16|!eBN@kF-S3dmvpr;K{31^t}x8)WLXC9hbs(+g!jW0 zMzWF+?}sal43d9CS$LjbVdP5j*Uk!KK|pZrtS|}!@)GnYmJocu@xIa_-%$HtwtS5C&k=m^pFgb)Eko|Nsp*}Rv9U&s)l^}y4}bi;nUY0MhOX@z8Z`w z5(X)4al8Fp%VQ9$OlL8ZeyvG z8vRlbd!mD8m0Je5PA$4VjN`)@4tSA`O{-`$QXaUzhuM%f=`=YGKK=8!Dog4YfMNP zlRF7MnS9yMcE#S<5aQBbHgqZK~*6=#d!PS>qZ3$?}x7&wUjFJQPt0{8;umhr_*w+cuZLH$+&hytCl5VbF)`SrT`Hn8P7vy)i0t?hSFO^+ry* zoKYdp`AwryN<35qH4H<~zh#V*Tmgcm4;ZDpVXC-sBM6=o-Zsjmj2T?|+p|i4+o)8j zvq zd!dHO(294A2`PT6ca4PIW!p9GjdzV?67I1DSkeKM*SA~3>r;ag_DAArmQ`OqkovP%0DWC6%WMyC{iEIu~619Aeyd~EbfiObIn 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 SWEsdqYJWr$Ag$`8kdavOIr4iqOVqhH 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

+|>z4UC7jyD6}(fU{ECWh-i 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'|K<)JXZVEmHkL~ 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ℜ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 VMu#*!Tj2P`tAPK%{omUH{|QYNrfL8H literal 0 HcmV?d00001 diff --git a/trunk/Libraries/ParallelExtensionsExtras/ParallelExtensionsExtras.csproj b/trunk/Libraries/ParallelExtensionsExtras/ParallelExtensionsExtras.csproj index 8b8df90..7f27475 100644 --- a/trunk/Libraries/ParallelExtensionsExtras/ParallelExtensionsExtras.csproj +++ b/trunk/Libraries/ParallelExtensionsExtras/ParallelExtensionsExtras.csproj @@ -77,6 +77,12 @@ ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules + + true + + + pithos.snk + @@ -168,6 +174,9 @@ + + + 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⪻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 HLJ0hCPpziZ literal 0 HcmV?d00001 diff --git a/trunk/hammock/lib/Newtonsoft.Json.WindowsPhone.dll b/trunk/hammock/lib/Newtonsoft.Json.WindowsPhone.dll new file mode 100644 index 0000000000000000000000000000000000000000..1d793bceb519b7d9e6b32e98c4318196943b8c96 GIT binary patch literal 290304 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 z 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

|c)8r?Q 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
c|%6BZeJVJReBW9)~0EzlI}jRTN308R0= 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 b{IGh$|6Tt&>0peEoBWdX|Nr}c4+H-PQ1qL5 literal 0 HcmV?d00001 diff --git a/trunk/hammock/lib/Newtonsoft.Json.dll b/trunk/hammock/lib/Newtonsoft.Json.dll new file mode 100644 index 0000000000000000000000000000000000000000..867b11f225a7b9b3c94f654dda0007ff1e6b6f13 GIT binary patch literal 340480 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%0A3^rzT6^tpC)dY9%GZfUSj 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

TfSIG&0^nC0k_Op7IXJaS$Y8n05v*mW{9 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 ?RcmheI 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 NMj9At;Dgn`{{x*KB^Lky literal 0 HcmV?d00001 diff --git a/trunk/hammock/pack-nuget.bat b/trunk/hammock/pack-nuget.bat new file mode 100644 index 0000000..98fdeba --- /dev/null +++ b/trunk/hammock/pack-nuget.bat @@ -0,0 +1,2 @@ +copy LICENSE bin +..\NuGet.exe pack hammock.nuspec -b bin -o bin \ No newline at end of file diff --git a/trunk/hammock/src/Hammock.Compact.sln b/trunk/hammock/src/Hammock.Compact.sln new file mode 100644 index 0000000..5eb8cc5 --- /dev/null +++ b/trunk/hammock/src/Hammock.Compact.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hammock.Compact", "netCF\Hammock.Compact\Hammock.Compact.csproj", "{392866D3-D060-4F54-B761-2BAF509989CF}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {392866D3-D060-4F54-B761-2BAF509989CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {392866D3-D060-4F54-B761-2BAF509989CF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {392866D3-D060-4F54-B761-2BAF509989CF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {392866D3-D060-4F54-B761-2BAF509989CF}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/trunk/hammock/src/Hammock.Mono.sln b/trunk/hammock/src/Hammock.Mono.sln new file mode 100644 index 0000000..e33cb83 --- /dev/null +++ b/trunk/hammock/src/Hammock.Mono.sln @@ -0,0 +1,75 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hammock.Mono", "mono\Hammock.Mono\Hammock.Mono.csproj", "{C8371692-DA90-4437-BCB7-A5A2EF37B095}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hammock.MonoDroid", "mono\Hammock.MonoDroid\Hammock.MonoDroid.csproj", "{63A4D4F2-12EF-48CB-A2A7-2A9E9FF2730D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hammock.MonoTouch", "mono\Hammock.MonoTouch\Hammock.MonoTouch.csproj", "{BB4BA4FD-691F-4E5B-B27D-1E9EC80072AB}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + Debug|iPhoneSimulator = Debug|iPhoneSimulator + Release|iPhoneSimulator = Release|iPhoneSimulator + Debug|iPhone = Debug|iPhone + Release|iPhone = Release|iPhone + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {63A4D4F2-12EF-48CB-A2A7-2A9E9FF2730D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {63A4D4F2-12EF-48CB-A2A7-2A9E9FF2730D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {63A4D4F2-12EF-48CB-A2A7-2A9E9FF2730D}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {63A4D4F2-12EF-48CB-A2A7-2A9E9FF2730D}.Debug|iPhone.Build.0 = Debug|Any CPU + {63A4D4F2-12EF-48CB-A2A7-2A9E9FF2730D}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {63A4D4F2-12EF-48CB-A2A7-2A9E9FF2730D}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {63A4D4F2-12EF-48CB-A2A7-2A9E9FF2730D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {63A4D4F2-12EF-48CB-A2A7-2A9E9FF2730D}.Release|Any CPU.Build.0 = Release|Any CPU + {63A4D4F2-12EF-48CB-A2A7-2A9E9FF2730D}.Release|iPhone.ActiveCfg = Release|Any CPU + {63A4D4F2-12EF-48CB-A2A7-2A9E9FF2730D}.Release|iPhone.Build.0 = Release|Any CPU + {63A4D4F2-12EF-48CB-A2A7-2A9E9FF2730D}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {63A4D4F2-12EF-48CB-A2A7-2A9E9FF2730D}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {BB4BA4FD-691F-4E5B-B27D-1E9EC80072AB}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator + {BB4BA4FD-691F-4E5B-B27D-1E9EC80072AB}.Debug|Any CPU.Build.0 = Debug|iPhoneSimulator + {BB4BA4FD-691F-4E5B-B27D-1E9EC80072AB}.Debug|iPhone.ActiveCfg = Debug|iPhone + {BB4BA4FD-691F-4E5B-B27D-1E9EC80072AB}.Debug|iPhone.Build.0 = Debug|iPhone + {BB4BA4FD-691F-4E5B-B27D-1E9EC80072AB}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator + {BB4BA4FD-691F-4E5B-B27D-1E9EC80072AB}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator + {BB4BA4FD-691F-4E5B-B27D-1E9EC80072AB}.Release|Any CPU.ActiveCfg = Release|iPhoneSimulator + {BB4BA4FD-691F-4E5B-B27D-1E9EC80072AB}.Release|Any CPU.Build.0 = Release|iPhoneSimulator + {BB4BA4FD-691F-4E5B-B27D-1E9EC80072AB}.Release|iPhone.ActiveCfg = Release|iPhone + {BB4BA4FD-691F-4E5B-B27D-1E9EC80072AB}.Release|iPhone.Build.0 = Release|iPhone + {BB4BA4FD-691F-4E5B-B27D-1E9EC80072AB}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator + {BB4BA4FD-691F-4E5B-B27D-1E9EC80072AB}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator + {C8371692-DA90-4437-BCB7-A5A2EF37B095}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C8371692-DA90-4437-BCB7-A5A2EF37B095}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C8371692-DA90-4437-BCB7-A5A2EF37B095}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {C8371692-DA90-4437-BCB7-A5A2EF37B095}.Debug|iPhone.Build.0 = Debug|Any CPU + {C8371692-DA90-4437-BCB7-A5A2EF37B095}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {C8371692-DA90-4437-BCB7-A5A2EF37B095}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {C8371692-DA90-4437-BCB7-A5A2EF37B095}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C8371692-DA90-4437-BCB7-A5A2EF37B095}.Release|Any CPU.Build.0 = Release|Any CPU + {C8371692-DA90-4437-BCB7-A5A2EF37B095}.Release|iPhone.ActiveCfg = Release|Any CPU + {C8371692-DA90-4437-BCB7-A5A2EF37B095}.Release|iPhone.Build.0 = Release|Any CPU + {C8371692-DA90-4437-BCB7-A5A2EF37B095}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {C8371692-DA90-4437-BCB7-A5A2EF37B095}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(MonoDevelopProperties) = preSolution + StartupItem = mono\Hammock.Mono\Hammock.Mono.csproj + Policies = $0 + $0.DotNetNamingPolicy = $1 + $1.DirectoryNamespaceAssociation = None + $1.ResourceNamePolicy = FileFormatDefault + $0.StandardHeader = $2 + $2.Text = + $2.inheritsSet = Apache2License + $0.VersionControlPolicy = $3 + $3.inheritsSet = Mono + $0.ChangeLogPolicy = $4 + $4.UpdateMode = None + $4.MessageStyle = $5 + $5.LineAlign = 0 + $4.inheritsSet = Mono + outputpath = ..\..\bin\mono + EndGlobalSection +EndGlobal diff --git a/trunk/hammock/src/Hammock.WindowsPhone.sln b/trunk/hammock/src/Hammock.WindowsPhone.sln new file mode 100644 index 0000000..a62a191 --- /dev/null +++ b/trunk/hammock/src/Hammock.WindowsPhone.sln @@ -0,0 +1,26 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hammock.WindowsPhone", "net40\Hammock.WindowsPhone\Hammock.WindowsPhone.csproj", "{3059FD1C-4B4B-4460-A0D4-53C84CCE6CAC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpZipLib.WindowsPhone", "net40\ICSharpCode.SharpZipLib.WindowsPhone\ICSharpCode.SharpZipLib.WindowsPhone.csproj", "{BF04A546-D681-4F5A-AC41-CFC67CAEC66E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3059FD1C-4B4B-4460-A0D4-53C84CCE6CAC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3059FD1C-4B4B-4460-A0D4-53C84CCE6CAC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3059FD1C-4B4B-4460-A0D4-53C84CCE6CAC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3059FD1C-4B4B-4460-A0D4-53C84CCE6CAC}.Release|Any CPU.Build.0 = Release|Any CPU + {BF04A546-D681-4F5A-AC41-CFC67CAEC66E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BF04A546-D681-4F5A-AC41-CFC67CAEC66E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BF04A546-D681-4F5A-AC41-CFC67CAEC66E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BF04A546-D681-4F5A-AC41-CFC67CAEC66E}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/trunk/hammock/src/Hammock.sln b/trunk/hammock/src/Hammock.sln new file mode 100644 index 0000000..93ca7d9 --- /dev/null +++ b/trunk/hammock/src/Hammock.sln @@ -0,0 +1,301 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SharpZipLib", "SharpZipLib", "{0D6CBA8E-3846-4559-AA4E-AEE3373A03CB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hammock", "net35\Hammock\Hammock.csproj", "{6679078A-C585-4CB6-96E9-908DBDAA2716}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hammock.Silverlight", "net35\Hammock.Silverlight\Hammock.Silverlight.csproj", "{E0461346-CB62-489E-9893-CFEA249F8380}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpZipLib.Silverlight", "net35\ICSharpCode.SharpZipLib.Silverlight\ICSharpCode.SharpZipLib.Silverlight.csproj", "{2E420750-6124-473B-808D-41755C907648}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".NET 3.5", ".NET 3.5", "{0F12EB19-73E5-4F38-BEF2-070C625508B7}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".NET 4.0", ".NET 4.0", "{3FB92FF7-A9F8-4F15-864B-69E7EBC3E16B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hammock", "net40\Hammock\Hammock.csproj", "{CD569558-9092-466B-8670-EA1B151150E0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hammock.ClientProfile", "net40\Hammock.ClientProfile\Hammock.ClientProfile.csproj", "{487B7E3C-9689-47BC-8785-73CCD92A3749}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hammock.Silverlight", "net40\Hammock.Silverlight\Hammock.Silverlight.csproj", "{46AFFE9E-B0DF-4DE9-A1A3-1773E08DCB51}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpZipLib.Silverlight", "net40\ICSharpCode.SharpZipLib.Silverlight\ICSharpCode.SharpZipLib.Silverlight.csproj", "{5953279F-F478-4D5F-9906-03D56CE2DA2D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SharpZipLib", "SharpZipLib", "{7090D3D7-90C3-4EB1-BB62-716046673F29}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpZipLib.WindowsPhone", "net40\ICSharpCode.SharpZipLib.WindowsPhone\ICSharpCode.SharpZipLib.WindowsPhone.csproj", "{BF04A546-D681-4F5A-AC41-CFC67CAEC66E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hammock.ClientProfile", "net35\Hammock.ClientProfile\Hammock.ClientProfile.csproj", "{73015806-7BE4-4BAB-AA07-ACC719EFE85A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".NET 2.0", ".NET 2.0", "{6052AEDE-F8B1-4E24-B791-DBB7FF9621D3}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hammock", "net20\Hammock\Hammock.csproj", "{80647B8C-E162-4E34-A758-590280F11B97}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{9AE58B14-D363-4A3E-B9E3-005FCBCEA7AC}" + ProjectSection(SolutionItems) = preProject + net35\BuildWindowsAndRunTests.proj = net35\BuildWindowsAndRunTests.proj + ..\clean.bat = ..\clean.bat + ..\hammock.nuspec = ..\hammock.nuspec + ..\LICENSE = ..\LICENSE + ..\pack-nuget.bat = ..\pack-nuget.bat + ..\README.markdown = ..\README.markdown + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hammock.WindowsPhone", "net40\Hammock.WindowsPhone\Hammock.WindowsPhone.csproj", "{3059FD1C-4B4B-4460-A0D4-53C84CCE6CAC}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + ClientProfiles|Any CPU = ClientProfiles|Any CPU + ClientProfiles|Mixed Platforms = ClientProfiles|Mixed Platforms + ClientProfiles|x86 = ClientProfiles|x86 + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|x86 = Debug|x86 + Mono|Any CPU = Mono|Any CPU + Mono|Mixed Platforms = Mono|Mixed Platforms + Mono|x86 = Mono|x86 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6679078A-C585-4CB6-96E9-908DBDAA2716}.ClientProfiles|Any CPU.ActiveCfg = Mono|Any CPU + {6679078A-C585-4CB6-96E9-908DBDAA2716}.ClientProfiles|Any CPU.Build.0 = Mono|Any CPU + {6679078A-C585-4CB6-96E9-908DBDAA2716}.ClientProfiles|Mixed Platforms.ActiveCfg = Mono|Any CPU + {6679078A-C585-4CB6-96E9-908DBDAA2716}.ClientProfiles|Mixed Platforms.Build.0 = Mono|Any CPU + {6679078A-C585-4CB6-96E9-908DBDAA2716}.ClientProfiles|x86.ActiveCfg = Mono|Any CPU + {6679078A-C585-4CB6-96E9-908DBDAA2716}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6679078A-C585-4CB6-96E9-908DBDAA2716}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6679078A-C585-4CB6-96E9-908DBDAA2716}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {6679078A-C585-4CB6-96E9-908DBDAA2716}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {6679078A-C585-4CB6-96E9-908DBDAA2716}.Debug|x86.ActiveCfg = Debug|Any CPU + {6679078A-C585-4CB6-96E9-908DBDAA2716}.Mono|Any CPU.ActiveCfg = Mono|Any CPU + {6679078A-C585-4CB6-96E9-908DBDAA2716}.Mono|Any CPU.Build.0 = Mono|Any CPU + {6679078A-C585-4CB6-96E9-908DBDAA2716}.Mono|Mixed Platforms.ActiveCfg = Mono|Any CPU + {6679078A-C585-4CB6-96E9-908DBDAA2716}.Mono|Mixed Platforms.Build.0 = Mono|Any CPU + {6679078A-C585-4CB6-96E9-908DBDAA2716}.Mono|x86.ActiveCfg = Mono|Any CPU + {6679078A-C585-4CB6-96E9-908DBDAA2716}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6679078A-C585-4CB6-96E9-908DBDAA2716}.Release|Any CPU.Build.0 = Release|Any CPU + {6679078A-C585-4CB6-96E9-908DBDAA2716}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {6679078A-C585-4CB6-96E9-908DBDAA2716}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {6679078A-C585-4CB6-96E9-908DBDAA2716}.Release|x86.ActiveCfg = Release|Any CPU + {E0461346-CB62-489E-9893-CFEA249F8380}.ClientProfiles|Any CPU.ActiveCfg = Mono|Any CPU + {E0461346-CB62-489E-9893-CFEA249F8380}.ClientProfiles|Any CPU.Build.0 = Mono|Any CPU + {E0461346-CB62-489E-9893-CFEA249F8380}.ClientProfiles|Mixed Platforms.ActiveCfg = Mono|Any CPU + {E0461346-CB62-489E-9893-CFEA249F8380}.ClientProfiles|Mixed Platforms.Build.0 = Mono|Any CPU + {E0461346-CB62-489E-9893-CFEA249F8380}.ClientProfiles|x86.ActiveCfg = Mono|Any CPU + {E0461346-CB62-489E-9893-CFEA249F8380}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E0461346-CB62-489E-9893-CFEA249F8380}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E0461346-CB62-489E-9893-CFEA249F8380}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {E0461346-CB62-489E-9893-CFEA249F8380}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {E0461346-CB62-489E-9893-CFEA249F8380}.Debug|x86.ActiveCfg = Debug|Any CPU + {E0461346-CB62-489E-9893-CFEA249F8380}.Mono|Any CPU.ActiveCfg = Mono|Any CPU + {E0461346-CB62-489E-9893-CFEA249F8380}.Mono|Any CPU.Build.0 = Mono|Any CPU + {E0461346-CB62-489E-9893-CFEA249F8380}.Mono|Mixed Platforms.ActiveCfg = Mono|Any CPU + {E0461346-CB62-489E-9893-CFEA249F8380}.Mono|Mixed Platforms.Build.0 = Mono|Any CPU + {E0461346-CB62-489E-9893-CFEA249F8380}.Mono|x86.ActiveCfg = Mono|Any CPU + {E0461346-CB62-489E-9893-CFEA249F8380}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E0461346-CB62-489E-9893-CFEA249F8380}.Release|Any CPU.Build.0 = Release|Any CPU + {E0461346-CB62-489E-9893-CFEA249F8380}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {E0461346-CB62-489E-9893-CFEA249F8380}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {E0461346-CB62-489E-9893-CFEA249F8380}.Release|x86.ActiveCfg = Release|Any CPU + {2E420750-6124-473B-808D-41755C907648}.ClientProfiles|Any CPU.ActiveCfg = Release|Any CPU + {2E420750-6124-473B-808D-41755C907648}.ClientProfiles|Any CPU.Build.0 = Release|Any CPU + {2E420750-6124-473B-808D-41755C907648}.ClientProfiles|Mixed Platforms.ActiveCfg = Release|Any CPU + {2E420750-6124-473B-808D-41755C907648}.ClientProfiles|Mixed Platforms.Build.0 = Release|Any CPU + {2E420750-6124-473B-808D-41755C907648}.ClientProfiles|x86.ActiveCfg = Release|Any CPU + {2E420750-6124-473B-808D-41755C907648}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E420750-6124-473B-808D-41755C907648}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E420750-6124-473B-808D-41755C907648}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {2E420750-6124-473B-808D-41755C907648}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {2E420750-6124-473B-808D-41755C907648}.Debug|x86.ActiveCfg = Debug|Any CPU + {2E420750-6124-473B-808D-41755C907648}.Mono|Any CPU.ActiveCfg = Release|Any CPU + {2E420750-6124-473B-808D-41755C907648}.Mono|Any CPU.Build.0 = Release|Any CPU + {2E420750-6124-473B-808D-41755C907648}.Mono|Mixed Platforms.ActiveCfg = Release|Any CPU + {2E420750-6124-473B-808D-41755C907648}.Mono|Mixed Platforms.Build.0 = Release|Any CPU + {2E420750-6124-473B-808D-41755C907648}.Mono|x86.ActiveCfg = Release|Any CPU + {2E420750-6124-473B-808D-41755C907648}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E420750-6124-473B-808D-41755C907648}.Release|Any CPU.Build.0 = Release|Any CPU + {2E420750-6124-473B-808D-41755C907648}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {2E420750-6124-473B-808D-41755C907648}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {2E420750-6124-473B-808D-41755C907648}.Release|x86.ActiveCfg = Release|Any CPU + {CD569558-9092-466B-8670-EA1B151150E0}.ClientProfiles|Any CPU.ActiveCfg = ClientProfiles|Any CPU + {CD569558-9092-466B-8670-EA1B151150E0}.ClientProfiles|Any CPU.Build.0 = ClientProfiles|Any CPU + {CD569558-9092-466B-8670-EA1B151150E0}.ClientProfiles|Mixed Platforms.ActiveCfg = ClientProfiles|Any CPU + {CD569558-9092-466B-8670-EA1B151150E0}.ClientProfiles|Mixed Platforms.Build.0 = ClientProfiles|Any CPU + {CD569558-9092-466B-8670-EA1B151150E0}.ClientProfiles|x86.ActiveCfg = ClientProfiles|Any CPU + {CD569558-9092-466B-8670-EA1B151150E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CD569558-9092-466B-8670-EA1B151150E0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CD569558-9092-466B-8670-EA1B151150E0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {CD569558-9092-466B-8670-EA1B151150E0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {CD569558-9092-466B-8670-EA1B151150E0}.Debug|x86.ActiveCfg = Debug|Any CPU + {CD569558-9092-466B-8670-EA1B151150E0}.Mono|Any CPU.ActiveCfg = ClientProfiles|Any CPU + {CD569558-9092-466B-8670-EA1B151150E0}.Mono|Any CPU.Build.0 = ClientProfiles|Any CPU + {CD569558-9092-466B-8670-EA1B151150E0}.Mono|Mixed Platforms.ActiveCfg = ClientProfiles|Any CPU + {CD569558-9092-466B-8670-EA1B151150E0}.Mono|Mixed Platforms.Build.0 = ClientProfiles|Any CPU + {CD569558-9092-466B-8670-EA1B151150E0}.Mono|x86.ActiveCfg = ClientProfiles|Any CPU + {CD569558-9092-466B-8670-EA1B151150E0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CD569558-9092-466B-8670-EA1B151150E0}.Release|Any CPU.Build.0 = Release|Any CPU + {CD569558-9092-466B-8670-EA1B151150E0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {CD569558-9092-466B-8670-EA1B151150E0}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {CD569558-9092-466B-8670-EA1B151150E0}.Release|x86.ActiveCfg = Release|Any CPU + {487B7E3C-9689-47BC-8785-73CCD92A3749}.ClientProfiles|Any CPU.ActiveCfg = Release|Any CPU + {487B7E3C-9689-47BC-8785-73CCD92A3749}.ClientProfiles|Any CPU.Build.0 = Release|Any CPU + {487B7E3C-9689-47BC-8785-73CCD92A3749}.ClientProfiles|Mixed Platforms.ActiveCfg = Release|Any CPU + {487B7E3C-9689-47BC-8785-73CCD92A3749}.ClientProfiles|Mixed Platforms.Build.0 = Release|Any CPU + {487B7E3C-9689-47BC-8785-73CCD92A3749}.ClientProfiles|x86.ActiveCfg = Release|Any CPU + {487B7E3C-9689-47BC-8785-73CCD92A3749}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {487B7E3C-9689-47BC-8785-73CCD92A3749}.Debug|Any CPU.Build.0 = Debug|Any CPU + {487B7E3C-9689-47BC-8785-73CCD92A3749}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {487B7E3C-9689-47BC-8785-73CCD92A3749}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {487B7E3C-9689-47BC-8785-73CCD92A3749}.Debug|x86.ActiveCfg = Debug|Any CPU + {487B7E3C-9689-47BC-8785-73CCD92A3749}.Mono|Any CPU.ActiveCfg = Release|Any CPU + {487B7E3C-9689-47BC-8785-73CCD92A3749}.Mono|Any CPU.Build.0 = Release|Any CPU + {487B7E3C-9689-47BC-8785-73CCD92A3749}.Mono|Mixed Platforms.ActiveCfg = Release|Any CPU + {487B7E3C-9689-47BC-8785-73CCD92A3749}.Mono|Mixed Platforms.Build.0 = Release|Any CPU + {487B7E3C-9689-47BC-8785-73CCD92A3749}.Mono|x86.ActiveCfg = Release|Any CPU + {487B7E3C-9689-47BC-8785-73CCD92A3749}.Release|Any CPU.ActiveCfg = Release|Any CPU + {487B7E3C-9689-47BC-8785-73CCD92A3749}.Release|Any CPU.Build.0 = Release|Any CPU + {487B7E3C-9689-47BC-8785-73CCD92A3749}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {487B7E3C-9689-47BC-8785-73CCD92A3749}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {487B7E3C-9689-47BC-8785-73CCD92A3749}.Release|x86.ActiveCfg = Release|Any CPU + {46AFFE9E-B0DF-4DE9-A1A3-1773E08DCB51}.ClientProfiles|Any CPU.ActiveCfg = ClientProfiles|Any CPU + {46AFFE9E-B0DF-4DE9-A1A3-1773E08DCB51}.ClientProfiles|Any CPU.Build.0 = ClientProfiles|Any CPU + {46AFFE9E-B0DF-4DE9-A1A3-1773E08DCB51}.ClientProfiles|Mixed Platforms.ActiveCfg = ClientProfiles|Any CPU + {46AFFE9E-B0DF-4DE9-A1A3-1773E08DCB51}.ClientProfiles|Mixed Platforms.Build.0 = ClientProfiles|Any CPU + {46AFFE9E-B0DF-4DE9-A1A3-1773E08DCB51}.ClientProfiles|x86.ActiveCfg = ClientProfiles|Any CPU + {46AFFE9E-B0DF-4DE9-A1A3-1773E08DCB51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {46AFFE9E-B0DF-4DE9-A1A3-1773E08DCB51}.Debug|Any CPU.Build.0 = Debug|Any CPU + {46AFFE9E-B0DF-4DE9-A1A3-1773E08DCB51}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {46AFFE9E-B0DF-4DE9-A1A3-1773E08DCB51}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {46AFFE9E-B0DF-4DE9-A1A3-1773E08DCB51}.Debug|x86.ActiveCfg = Debug|Any CPU + {46AFFE9E-B0DF-4DE9-A1A3-1773E08DCB51}.Mono|Any CPU.ActiveCfg = ClientProfiles|Any CPU + {46AFFE9E-B0DF-4DE9-A1A3-1773E08DCB51}.Mono|Any CPU.Build.0 = ClientProfiles|Any CPU + {46AFFE9E-B0DF-4DE9-A1A3-1773E08DCB51}.Mono|Mixed Platforms.ActiveCfg = ClientProfiles|Any CPU + {46AFFE9E-B0DF-4DE9-A1A3-1773E08DCB51}.Mono|Mixed Platforms.Build.0 = ClientProfiles|Any CPU + {46AFFE9E-B0DF-4DE9-A1A3-1773E08DCB51}.Mono|x86.ActiveCfg = ClientProfiles|Any CPU + {46AFFE9E-B0DF-4DE9-A1A3-1773E08DCB51}.Release|Any CPU.ActiveCfg = Release|Any CPU + {46AFFE9E-B0DF-4DE9-A1A3-1773E08DCB51}.Release|Any CPU.Build.0 = Release|Any CPU + {46AFFE9E-B0DF-4DE9-A1A3-1773E08DCB51}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {46AFFE9E-B0DF-4DE9-A1A3-1773E08DCB51}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {46AFFE9E-B0DF-4DE9-A1A3-1773E08DCB51}.Release|x86.ActiveCfg = Release|Any CPU + {5953279F-F478-4D5F-9906-03D56CE2DA2D}.ClientProfiles|Any CPU.ActiveCfg = Release|Any CPU + {5953279F-F478-4D5F-9906-03D56CE2DA2D}.ClientProfiles|Any CPU.Build.0 = Release|Any CPU + {5953279F-F478-4D5F-9906-03D56CE2DA2D}.ClientProfiles|Mixed Platforms.ActiveCfg = Release|Any CPU + {5953279F-F478-4D5F-9906-03D56CE2DA2D}.ClientProfiles|Mixed Platforms.Build.0 = Release|Any CPU + {5953279F-F478-4D5F-9906-03D56CE2DA2D}.ClientProfiles|x86.ActiveCfg = Release|Any CPU + {5953279F-F478-4D5F-9906-03D56CE2DA2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5953279F-F478-4D5F-9906-03D56CE2DA2D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5953279F-F478-4D5F-9906-03D56CE2DA2D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {5953279F-F478-4D5F-9906-03D56CE2DA2D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {5953279F-F478-4D5F-9906-03D56CE2DA2D}.Debug|x86.ActiveCfg = Debug|Any CPU + {5953279F-F478-4D5F-9906-03D56CE2DA2D}.Mono|Any CPU.ActiveCfg = Release|Any CPU + {5953279F-F478-4D5F-9906-03D56CE2DA2D}.Mono|Any CPU.Build.0 = Release|Any CPU + {5953279F-F478-4D5F-9906-03D56CE2DA2D}.Mono|Mixed Platforms.ActiveCfg = Release|Any CPU + {5953279F-F478-4D5F-9906-03D56CE2DA2D}.Mono|Mixed Platforms.Build.0 = Release|Any CPU + {5953279F-F478-4D5F-9906-03D56CE2DA2D}.Mono|x86.ActiveCfg = Release|Any CPU + {5953279F-F478-4D5F-9906-03D56CE2DA2D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5953279F-F478-4D5F-9906-03D56CE2DA2D}.Release|Any CPU.Build.0 = Release|Any CPU + {5953279F-F478-4D5F-9906-03D56CE2DA2D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {5953279F-F478-4D5F-9906-03D56CE2DA2D}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {5953279F-F478-4D5F-9906-03D56CE2DA2D}.Release|x86.ActiveCfg = Release|Any CPU + {BF04A546-D681-4F5A-AC41-CFC67CAEC66E}.ClientProfiles|Any CPU.ActiveCfg = Release|Any CPU + {BF04A546-D681-4F5A-AC41-CFC67CAEC66E}.ClientProfiles|Any CPU.Build.0 = Release|Any CPU + {BF04A546-D681-4F5A-AC41-CFC67CAEC66E}.ClientProfiles|Mixed Platforms.ActiveCfg = Release|Any CPU + {BF04A546-D681-4F5A-AC41-CFC67CAEC66E}.ClientProfiles|Mixed Platforms.Build.0 = Release|Any CPU + {BF04A546-D681-4F5A-AC41-CFC67CAEC66E}.ClientProfiles|x86.ActiveCfg = Release|Any CPU + {BF04A546-D681-4F5A-AC41-CFC67CAEC66E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BF04A546-D681-4F5A-AC41-CFC67CAEC66E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BF04A546-D681-4F5A-AC41-CFC67CAEC66E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {BF04A546-D681-4F5A-AC41-CFC67CAEC66E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {BF04A546-D681-4F5A-AC41-CFC67CAEC66E}.Debug|x86.ActiveCfg = Debug|Any CPU + {BF04A546-D681-4F5A-AC41-CFC67CAEC66E}.Mono|Any CPU.ActiveCfg = Release|Any CPU + {BF04A546-D681-4F5A-AC41-CFC67CAEC66E}.Mono|Any CPU.Build.0 = Release|Any CPU + {BF04A546-D681-4F5A-AC41-CFC67CAEC66E}.Mono|Mixed Platforms.ActiveCfg = Release|Any CPU + {BF04A546-D681-4F5A-AC41-CFC67CAEC66E}.Mono|Mixed Platforms.Build.0 = Release|Any CPU + {BF04A546-D681-4F5A-AC41-CFC67CAEC66E}.Mono|x86.ActiveCfg = Release|Any CPU + {BF04A546-D681-4F5A-AC41-CFC67CAEC66E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BF04A546-D681-4F5A-AC41-CFC67CAEC66E}.Release|Any CPU.Build.0 = Release|Any CPU + {BF04A546-D681-4F5A-AC41-CFC67CAEC66E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {BF04A546-D681-4F5A-AC41-CFC67CAEC66E}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {BF04A546-D681-4F5A-AC41-CFC67CAEC66E}.Release|x86.ActiveCfg = Release|Any CPU + {73015806-7BE4-4BAB-AA07-ACC719EFE85A}.ClientProfiles|Any CPU.ActiveCfg = Release|Any CPU + {73015806-7BE4-4BAB-AA07-ACC719EFE85A}.ClientProfiles|Any CPU.Build.0 = Release|Any CPU + {73015806-7BE4-4BAB-AA07-ACC719EFE85A}.ClientProfiles|Mixed Platforms.ActiveCfg = Release|Any CPU + {73015806-7BE4-4BAB-AA07-ACC719EFE85A}.ClientProfiles|Mixed Platforms.Build.0 = Release|Any CPU + {73015806-7BE4-4BAB-AA07-ACC719EFE85A}.ClientProfiles|x86.ActiveCfg = Release|Any CPU + {73015806-7BE4-4BAB-AA07-ACC719EFE85A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {73015806-7BE4-4BAB-AA07-ACC719EFE85A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {73015806-7BE4-4BAB-AA07-ACC719EFE85A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {73015806-7BE4-4BAB-AA07-ACC719EFE85A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {73015806-7BE4-4BAB-AA07-ACC719EFE85A}.Debug|x86.ActiveCfg = Debug|Any CPU + {73015806-7BE4-4BAB-AA07-ACC719EFE85A}.Mono|Any CPU.ActiveCfg = Release|Any CPU + {73015806-7BE4-4BAB-AA07-ACC719EFE85A}.Mono|Any CPU.Build.0 = Release|Any CPU + {73015806-7BE4-4BAB-AA07-ACC719EFE85A}.Mono|Mixed Platforms.ActiveCfg = Release|Any CPU + {73015806-7BE4-4BAB-AA07-ACC719EFE85A}.Mono|Mixed Platforms.Build.0 = Release|Any CPU + {73015806-7BE4-4BAB-AA07-ACC719EFE85A}.Mono|x86.ActiveCfg = Release|Any CPU + {73015806-7BE4-4BAB-AA07-ACC719EFE85A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {73015806-7BE4-4BAB-AA07-ACC719EFE85A}.Release|Any CPU.Build.0 = Release|Any CPU + {73015806-7BE4-4BAB-AA07-ACC719EFE85A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {73015806-7BE4-4BAB-AA07-ACC719EFE85A}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {73015806-7BE4-4BAB-AA07-ACC719EFE85A}.Release|x86.ActiveCfg = Release|Any CPU + {80647B8C-E162-4E34-A758-590280F11B97}.ClientProfiles|Any CPU.ActiveCfg = Release|Any CPU + {80647B8C-E162-4E34-A758-590280F11B97}.ClientProfiles|Any CPU.Build.0 = Release|Any CPU + {80647B8C-E162-4E34-A758-590280F11B97}.ClientProfiles|Mixed Platforms.ActiveCfg = Release|Any CPU + {80647B8C-E162-4E34-A758-590280F11B97}.ClientProfiles|Mixed Platforms.Build.0 = Release|Any CPU + {80647B8C-E162-4E34-A758-590280F11B97}.ClientProfiles|x86.ActiveCfg = Release|Any CPU + {80647B8C-E162-4E34-A758-590280F11B97}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {80647B8C-E162-4E34-A758-590280F11B97}.Debug|Any CPU.Build.0 = Debug|Any CPU + {80647B8C-E162-4E34-A758-590280F11B97}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {80647B8C-E162-4E34-A758-590280F11B97}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {80647B8C-E162-4E34-A758-590280F11B97}.Debug|x86.ActiveCfg = Debug|Any CPU + {80647B8C-E162-4E34-A758-590280F11B97}.Mono|Any CPU.ActiveCfg = Release|Any CPU + {80647B8C-E162-4E34-A758-590280F11B97}.Mono|Any CPU.Build.0 = Release|Any CPU + {80647B8C-E162-4E34-A758-590280F11B97}.Mono|Mixed Platforms.ActiveCfg = Release|Any CPU + {80647B8C-E162-4E34-A758-590280F11B97}.Mono|Mixed Platforms.Build.0 = Release|Any CPU + {80647B8C-E162-4E34-A758-590280F11B97}.Mono|x86.ActiveCfg = Release|Any CPU + {80647B8C-E162-4E34-A758-590280F11B97}.Release|Any CPU.ActiveCfg = Release|Any CPU + {80647B8C-E162-4E34-A758-590280F11B97}.Release|Any CPU.Build.0 = Release|Any CPU + {80647B8C-E162-4E34-A758-590280F11B97}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {80647B8C-E162-4E34-A758-590280F11B97}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {80647B8C-E162-4E34-A758-590280F11B97}.Release|x86.ActiveCfg = Release|Any CPU + {3059FD1C-4B4B-4460-A0D4-53C84CCE6CAC}.ClientProfiles|Any CPU.ActiveCfg = ClientProfiles|Any CPU + {3059FD1C-4B4B-4460-A0D4-53C84CCE6CAC}.ClientProfiles|Any CPU.Build.0 = ClientProfiles|Any CPU + {3059FD1C-4B4B-4460-A0D4-53C84CCE6CAC}.ClientProfiles|Mixed Platforms.ActiveCfg = ClientProfiles|Any CPU + {3059FD1C-4B4B-4460-A0D4-53C84CCE6CAC}.ClientProfiles|Mixed Platforms.Build.0 = ClientProfiles|Any CPU + {3059FD1C-4B4B-4460-A0D4-53C84CCE6CAC}.ClientProfiles|x86.ActiveCfg = ClientProfiles|Any CPU + {3059FD1C-4B4B-4460-A0D4-53C84CCE6CAC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3059FD1C-4B4B-4460-A0D4-53C84CCE6CAC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3059FD1C-4B4B-4460-A0D4-53C84CCE6CAC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {3059FD1C-4B4B-4460-A0D4-53C84CCE6CAC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {3059FD1C-4B4B-4460-A0D4-53C84CCE6CAC}.Debug|x86.ActiveCfg = Debug|Any CPU + {3059FD1C-4B4B-4460-A0D4-53C84CCE6CAC}.Mono|Any CPU.ActiveCfg = ClientProfiles|Any CPU + {3059FD1C-4B4B-4460-A0D4-53C84CCE6CAC}.Mono|Any CPU.Build.0 = ClientProfiles|Any CPU + {3059FD1C-4B4B-4460-A0D4-53C84CCE6CAC}.Mono|Mixed Platforms.ActiveCfg = ClientProfiles|Any CPU + {3059FD1C-4B4B-4460-A0D4-53C84CCE6CAC}.Mono|Mixed Platforms.Build.0 = ClientProfiles|Any CPU + {3059FD1C-4B4B-4460-A0D4-53C84CCE6CAC}.Mono|x86.ActiveCfg = ClientProfiles|Any CPU + {3059FD1C-4B4B-4460-A0D4-53C84CCE6CAC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3059FD1C-4B4B-4460-A0D4-53C84CCE6CAC}.Release|Any CPU.Build.0 = Release|Any CPU + {3059FD1C-4B4B-4460-A0D4-53C84CCE6CAC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {3059FD1C-4B4B-4460-A0D4-53C84CCE6CAC}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {3059FD1C-4B4B-4460-A0D4-53C84CCE6CAC}.Release|x86.ActiveCfg = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {6679078A-C585-4CB6-96E9-908DBDAA2716} = {0F12EB19-73E5-4F38-BEF2-070C625508B7} + {E0461346-CB62-489E-9893-CFEA249F8380} = {0F12EB19-73E5-4F38-BEF2-070C625508B7} + {0D6CBA8E-3846-4559-AA4E-AEE3373A03CB} = {0F12EB19-73E5-4F38-BEF2-070C625508B7} + {73015806-7BE4-4BAB-AA07-ACC719EFE85A} = {0F12EB19-73E5-4F38-BEF2-070C625508B7} + {2E420750-6124-473B-808D-41755C907648} = {0D6CBA8E-3846-4559-AA4E-AEE3373A03CB} + {CD569558-9092-466B-8670-EA1B151150E0} = {3FB92FF7-A9F8-4F15-864B-69E7EBC3E16B} + {487B7E3C-9689-47BC-8785-73CCD92A3749} = {3FB92FF7-A9F8-4F15-864B-69E7EBC3E16B} + {46AFFE9E-B0DF-4DE9-A1A3-1773E08DCB51} = {3FB92FF7-A9F8-4F15-864B-69E7EBC3E16B} + {7090D3D7-90C3-4EB1-BB62-716046673F29} = {3FB92FF7-A9F8-4F15-864B-69E7EBC3E16B} + {3059FD1C-4B4B-4460-A0D4-53C84CCE6CAC} = {3FB92FF7-A9F8-4F15-864B-69E7EBC3E16B} + {5953279F-F478-4D5F-9906-03D56CE2DA2D} = {7090D3D7-90C3-4EB1-BB62-716046673F29} + {BF04A546-D681-4F5A-AC41-CFC67CAEC66E} = {7090D3D7-90C3-4EB1-BB62-716046673F29} + {80647B8C-E162-4E34-A758-590280F11B97} = {6052AEDE-F8B1-4E24-B791-DBB7FF9621D3} + EndGlobalSection +EndGlobal diff --git a/trunk/hammock/src/mono/Hammock.Mono/AssemblyInfo.cs b/trunk/hammock/src/mono/Hammock.Mono/AssemblyInfo.cs new file mode 100644 index 0000000..1ae370c --- /dev/null +++ b/trunk/hammock/src/mono/Hammock.Mono/AssemblyInfo.cs @@ -0,0 +1,26 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following attributes. +// Change them to the values specific to your project. + +[assembly: AssemblyTitle("Hammock.Mono")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}". +// The form "{Major}.{Minor}.*" will automatically update the build and revision, +// and "{Major}.{Minor}.{Build}.*" will update just the revision. + +[assembly: AssemblyVersion("1.0.*")] + +// The following attributes are used to specify the signing key for the assembly, +// if desired. See the Mono documentation for more information about signing. + +//[assembly: AssemblyDelaySign(false)] +//[assembly: AssemblyKeyFile("")] diff --git a/trunk/hammock/src/mono/Hammock.Mono/Hammock.Mono.csproj b/trunk/hammock/src/mono/Hammock.Mono/Hammock.Mono.csproj new file mode 100644 index 0000000..15fa6f6 --- /dev/null +++ b/trunk/hammock/src/mono/Hammock.Mono/Hammock.Mono.csproj @@ -0,0 +1,197 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {C8371692-DA90-4437-BCB7-A5A2EF37B095} + Library + Hammock.Mono + Hammock.Mono + v3.5 + true + ..\..\net35\Hammock\key.snk + + + true + full + false + ..\..\..\bin\mono + DEBUG,Mono,MONO + prompt + 4 + false + + + full + true + ..\..\..\bin\mono + prompt + 4 + false + Mono,MONO + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Attributes\ParameterAttribute.cs + + + Attributes\UserAgentAttribute.cs + + + Attributes\BooleanToIntegerAttribute.cs + + + Attributes\DateTimeFormatAttribute.cs + + + Attributes\RequiredAttribute.cs + + + Attributes\SpecificationAttribute.cs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Specifications\AndSpecification.cs + + + + + + + + + + + + + + + + Specifications\ValidEmailSpecification.cs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HttpUtility.cs + + + WebHeaderCollection.cs + + + HttpCookieParameter.cs + + + + + + + + \ No newline at end of file diff --git a/trunk/hammock/src/mono/Hammock.Mono/Hammock.Mono.sln b/trunk/hammock/src/mono/Hammock.Mono/Hammock.Mono.sln new file mode 100644 index 0000000..e45cda2 --- /dev/null +++ b/trunk/hammock/src/mono/Hammock.Mono/Hammock.Mono.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hammock.Mono", "Hammock.Mono.csproj", "{C8371692-DA90-4437-BCB7-A5A2EF37B095}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C8371692-DA90-4437-BCB7-A5A2EF37B095}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C8371692-DA90-4437-BCB7-A5A2EF37B095}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C8371692-DA90-4437-BCB7-A5A2EF37B095}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C8371692-DA90-4437-BCB7-A5A2EF37B095}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(MonoDevelopProperties) = preSolution + StartupItem = Hammock.Mono.csproj + EndGlobalSection +EndGlobal diff --git a/trunk/hammock/src/mono/Hammock.MonoDroid/Hammock.MonoDroid.csproj b/trunk/hammock/src/mono/Hammock.MonoDroid/Hammock.MonoDroid.csproj new file mode 100644 index 0000000..542e378 --- /dev/null +++ b/trunk/hammock/src/mono/Hammock.MonoDroid/Hammock.MonoDroid.csproj @@ -0,0 +1,57 @@ + + + + Debug + AnyCPU + 10.0.0 + 2.0 + {63A4D4F2-12EF-48CB-A2A7-2A9E9FF2730D} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + Hammock.MonoDroid + Resources + Hammock.MonoDroid + v3.5 + + + true + full + false + ..\..\..\bin\mono + DEBUG + prompt + 4 + false + + + none + false + ..\..\..\bin\mono + prompt + 4 + false + Mono,MonoDroid,MonoTouch + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/trunk/hammock/src/mono/Hammock.MonoTouch/Hammock.MonoTouch.csproj b/trunk/hammock/src/mono/Hammock.MonoTouch/Hammock.MonoTouch.csproj new file mode 100644 index 0000000..170d1ea --- /dev/null +++ b/trunk/hammock/src/mono/Hammock.MonoTouch/Hammock.MonoTouch.csproj @@ -0,0 +1,322 @@ + + + + Debug + iPhoneSimulator + 9.0.21022 + 2.0 + {BB4BA4FD-691F-4E5B-B27D-1E9EC80072AB} + {E613F3A2-FE9C-494F-B74E-F63BCB86FEA6};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + Hammock.MonoTouch + 3.0 + v3.5 + + + true + full + false + ..\..\..\bin\mono + DEBUG,MonoTouch + prompt + 4 + false + None + True + HammockMonoTouch + + + none + true + ..\..\..\bin\mono + prompt + 4 + False + false + None + MonoTouch + Hammock.MonoTouch + + + true + full + false + bin\iPhone\Debug + DEBUG + prompt + 4 + false + iPhone Developer + True + HammockMonoTouch + + + none + false + bin\iPhone\Release + prompt + 4 + False + false + iPhone Developer + HammockMonoTouch + + + + + + + + + + + + + + + + + + + + + + + Serialization\HammockXmlSerializer.cs + + + Serialization\IDeserializer.cs + + + Serialization\ISerializer.cs + + + Serialization\Utf8Serializer.cs + + + Specifications\AndSpecification.cs + + + Web\BasicAuthWebQuery.cs + + + Web\GetOrDelete.cs + + + Web\WebEntity.cs + + + Web\WebHeader.cs + + + Web\WebMethod.cs + + + Web\WebQueryRequestEventArgs.cs + + + Web\WebQueryResponseEventArgs.cs + + + Web\WebQueryResult.cs + + + Web\Mocks\IMockable.cs + + + Web\Mocks\IWebResponse.cs + + + Web\Mocks\MockHttpWebRequest.cs + + + Web\Mocks\MockHttpWebResponse.cs + + + Web\Mocks\MockWebRequestFactory.cs + + + Tasks\TimedTask.cs + + + Tasks\TaskState.cs + + + Tasks\TaskOptions.cs + + + Tasks\RateLimitType.cs + + + Tasks\RateLimitingRule.cs + + + Tasks\ITimedTask.cs + + + Tasks\ITaskState.cs + + + Tasks\ITaskOptions.cs + + + Tasks\IRateLimitStatus.cs + + + Tasks\IRateLimitingRule.cs + + + Validation\ValidEmailSpecification.cs + + + Validation\ValidationException.cs + + + Authentication\IWebCredentials.cs + + + Authentication\Basic\BasicAuthCredentials.cs + + + Authentication\OAuth\OAuthWorkflow.cs + + + Authentication\OAuth\OAuthWebQueryInfo.cs + + + Authentication\OAuth\OAuthWebQuery.cs + + + Authentication\OAuth\OAuthType.cs + + + Authentication\OAuth\OAuthTools.cs + + + Authentication\OAuth\OAuthToken.cs + + + Authentication\OAuth\OAuthSignatureMethod.cs + + + Authentication\OAuth\OAuthParameterHandling.cs + + + Authentication\OAuth\OAuthCredentials.cs + + + Retries\Timeout.cs + + + Retries\RetryResultCondition.cs + + + Retries\RetryPolicy.cs + + + Retries\RetryErrorCondition.cs + + + Retries\RetryCustomCondition.cs + + + Retries\RetryCondition.cs + + + Retries\NetworkError.cs + + + Retries\IRetryCustomCondition.cs + + + Retries\IRetryCondition.cs + + + Retries\ConnectionClosed.cs + + + Attributes\IValidatingAttribute.cs + + + Attributes\INamedAttribute.cs + + + Attributes\Validation\ValidationAttribute.cs + + + Attributes\Validation\SpecificationAttribute.cs + + + Attributes\Validation\RequiredAttribute.cs + + + Attributes\Validation\DateTimeFormatAttribute.cs + + + Attributes\Validation\BooleanToIntegerAttribute.cs + + + Attributes\Specialized\UserAgentAttribute.cs + + + Attributes\Specialized\ParameterAttribute.cs + + + Attributes\Specialized\HeaderAttribute.cs + + + Attributes\Specialized\EntityAttribute.cs + + + Caching\SimpleCache.cs + + + Caching\ICache.cs + + + Caching\CacheOptions.cs + + + Caching\CacheMode.cs + + + Caching\CacheFactory.cs + + + Streaming\StreamOptions.cs + + + Extensions\WebExtensions.cs + + + Extensions\TimeExtensions.cs + + + Extensions\StringExtensions.cs + + + Extensions\SpecificationExtensions.cs + + + Extensions\ReflectionExtensions.cs + + + Extensions\ObjectExtensions.cs + + + Extensions\OAuthExtensions.cs + + + Extensions\FormatExtensions.cs + + + Extensions\CollectionExtensions.cs + + + Model\PropertyChangedBase.cs + + + Mono\HttpUtility.cs + + + \ No newline at end of file diff --git a/trunk/hammock/src/net20/Hammock/Hammock.csproj b/trunk/hammock/src/net20/Hammock/Hammock.csproj new file mode 100644 index 0000000..71f0e69 --- /dev/null +++ b/trunk/hammock/src/net20/Hammock/Hammock.csproj @@ -0,0 +1,390 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {80647B8C-E162-4E34-A758-590280F11B97} + Library + Properties + Hammock + Hammock + v2.0 + 512 + + + true + full + false + ..\..\..\bin\lib\2.0\ + TRACE;DEBUG;NET20 + prompt + 4 + + + pdbonly + true + ..\..\..\bin\lib\net20\ + TRACE;NET20 + prompt + 4 + + + true + + + key.snk + + + + ..\..\..\lib\LinqBridge.dll + + + + + + + + + Attributes\INamedAttribute.cs + + + Attributes\IValidatingAttribute.cs + + + Attributes\Specialized\EntityAttribute.cs + + + Attributes\Specialized\HeaderAttribute.cs + + + Attributes\Specialized\ParameterAttribute.cs + + + Attributes\Specialized\UserAgentAttribute.cs + + + Attributes\Validation\BooleanToIntegerAttribute.cs + + + Attributes\Validation\DateTimeFormatAttribute.cs + + + Attributes\Validation\RequiredAttribute.cs + + + Attributes\Validation\SpecificationAttribute.cs + + + Attributes\Validation\ValidationAttribute.cs + + + Authentication\Basic\BasicAuthCredentials.cs + + + Authentication\IWebCredentials.cs + + + Authentication\OAuth\OAuthCredentials.cs + + + Authentication\OAuth\OAuthParameterHandling.cs + + + Authentication\OAuth\OAuthSignatureMethod.cs + + + Authentication\OAuth\OAuthToken.cs + + + Authentication\OAuth\OAuthTools.cs + + + Authentication\OAuth\OAuthType.cs + + + Authentication\OAuth\OAuthWebQuery.cs + + + Authentication\OAuth\OAuthWebQueryInfo.cs + + + Authentication\OAuth\OAuthWorkflow.cs + + + Caching\AspNetCache.cs + + + Caching\CacheFactory.cs + + + Caching\CacheMode.cs + + + Caching\CacheOptions.cs + + + Caching\ICache.cs + + + Caching\IDependencyCache.cs + + + Caching\SimpleCache.cs + + + Extensions\CollectionExtensions.cs + + + Extensions\FormatExtensions.cs + + + Extensions\OAuthExtensions.cs + + + Extensions\ObjectExtensions.cs + + + Extensions\ReflectionExtensions.cs + + + Extensions\SpecificationExtensions.cs + + + Extensions\StringExtensions.cs + + + Extensions\TimeExtensions.cs + + + Extensions\WebExtensions.cs + + + IRestClient.cs + + + Model\PropertyChangedBase.cs + + + Mono\HttpUtility.cs + + + Mono\WebHeaderCollection.cs + + + RestBase.cs + + + RestCallback.cs + + + RestClient.cs + + + RestRequest.cs + + + RestResponse.cs + + + Retries\ConnectionClosed.cs + + + Retries\IRetryCondition.cs + + + Retries\IRetryCustomCondition.cs + + + Retries\NetworkError.cs + + + Retries\RetryCondition.cs + + + Retries\RetryCustomCondition.cs + + + Retries\RetryErrorCondition.cs + + + Retries\RetryPolicy.cs + + + Retries\RetryResultCondition.cs + + + Retries\Timeout.cs + + + Serialization\HammockXmlSerializer.cs + + + Serialization\IDeserializer.cs + + + Serialization\ISerializer.cs + + + Serialization\Utf8Serializer.cs + + + Specifications\AndSpecification.cs + + + Specifications\CompositeSpecificationBase.cs + + + Specifications\HammockSpecification.cs + + + Specifications\ISpecification.cs + + + Specifications\NotSpecification.cs + + + Specifications\OrSpecification.cs + + + Streaming\StreamOptions.cs + + + Tasks\IRateLimitingRule.cs + + + Tasks\IRateLimitStatus.cs + + + Tasks\ITaskOptions.cs + + + Tasks\ITaskState.cs + + + Tasks\ITimedTask.cs + + + Tasks\RateLimitingRule.cs + + + Tasks\RateLimitType.cs + + + Tasks\TaskOptions.cs + + + Tasks\TaskState.cs + + + Tasks\TimedTask.cs + + + Validation\ValidationException.cs + + + Validation\ValidEmailSpecification.cs + + + Web\BasicAuthWebQuery.cs + + + Web\GetOrDelete.cs + + + Web\HttpCookieParameter.cs + + + Web\HttpPostParameter.cs + + + Web\HttpPostParameterType.cs + + + Web\IWebQueryInfo.cs + + + Web\Mocks\IMockable.cs + + + Web\Mocks\IWebResponse.cs + + + Web\Mocks\MockHttpWebRequest.cs + + + Web\Mocks\MockHttpWebResponse.cs + + + Web\Mocks\MockWebRequestFactory.cs + + + Web\Pair.cs + + + Web\PostOrPut.cs + + + Web\Triplet.cs + + + Web\WebCallback.cs + + + Web\WebEntity.cs + + + Web\WebHeader.cs + + + Web\WebHeaderCollection.cs + + + Web\WebMethod.cs + + + Web\WebPair.cs + + + Web\WebPairCollection.cs + + + Web\WebParameter.cs + + + Web\WebParameterCollection.cs + + + Web\WebQuery.Async.cs + + + Web\WebQuery.cs + + + Web\WebQueryAsyncResult.cs + + + Web\WebQueryRequestEventArgs.cs + + + Web\WebQueryResponseEventArgs.cs + + + Web\WebQueryResult.cs + + + + + + + + + + \ No newline at end of file diff --git a/trunk/hammock/src/net20/Hammock/Properties/AssemblyInfo.cs b/trunk/hammock/src/net20/Hammock/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..b6db268 --- /dev/null +++ b/trunk/hammock/src/net20/Hammock/Properties/AssemblyInfo.cs @@ -0,0 +1,37 @@ +using System.Reflection; +using System.Runtime.InteropServices; +using System.Security; + +// 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("Hammock")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Apitize")] +[assembly: AssemblyProduct("Hammock")] +[assembly: AssemblyCopyright("Copyright © 2010 Daniel Crenna and Jason Diller")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: AllowPartiallyTrustedCallers] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("b86616db-abb6-4989-9464-67b1e948fdd1")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/trunk/hammock/src/net20/Hammock/key.snk b/trunk/hammock/src/net20/Hammock/key.snk new file mode 100644 index 0000000000000000000000000000000000000000..ed404cd2b98794be9654705e03f356546393f826 GIT binary patch literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50097rX2mggb`z#srv=C&u+tgpp^FW^M**Pm zRQO}lqnc-@hC)KUY6}|R0cKtk;e9lD=(rwB+as(MXDb+_+G52=`KS_Isyvj`Lv>t; zyv1GdtazzRJ@~Ikqx~TP`bG%Rj^JO-mWk-SOVW*S-BQylz(lnRD^aU;42ZrfNBOmJ z+wu|=RKI)(tf=kVs&r1#mU7ia^YtqD_N!R!)Mb<04J(7v0b9Z5@VQ zC~!{_9Az!Ik)85nzpjNic*BZ(iJSs=#CEi_EvxKd8YjX}1j8+N2zqaVEoTb{xxA?( zVt8G+Ou_+Iw{;ElEmyRR47jL`4u7RS+VW6jwp=Ns#vPw_+s*hGzc&Int6mW=r8E?B z)qgXtnZUe(Tz`ffc*>2e+Br!=fqNzeZTr56NZVVsD%VFGDVkAw@hwc5(-@Qd=aTqV z(nhX4LsE@8Bh?ITr5k1jJOPeVdipW-lxZ`6M6%|*SG?o?o}O<)9!yjl130Go;PJF4 iINMdx^S=SKvcAYJIsZ6c08B+-O^Q|BqJw=PJm;e#=pQ8j literal 0 HcmV?d00001 diff --git a/trunk/hammock/src/net35/BuildWindowsAndRunTests.proj b/trunk/hammock/src/net35/BuildWindowsAndRunTests.proj new file mode 100644 index 0000000..694f7a2 --- /dev/null +++ b/trunk/hammock/src/net35/BuildWindowsAndRunTests.proj @@ -0,0 +1,29 @@ + + + + Debug + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/trunk/hammock/src/net35/Hammock.ClientProfile/Hammock.ClientProfile.csproj b/trunk/hammock/src/net35/Hammock.ClientProfile/Hammock.ClientProfile.csproj new file mode 100644 index 0000000..38d4389 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock.ClientProfile/Hammock.ClientProfile.csproj @@ -0,0 +1,391 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {73015806-7BE4-4BAB-AA07-ACC719EFE85A} + Library + Properties + Hammock + Hammock.ClientProfile + v3.5 + 512 + Client + + + true + full + false + ..\..\..\bin\lib\3.5\ + TRACE;DEBUG;ClientProfiles + prompt + 4 + + + pdbonly + true + ..\..\..\bin\lib\net35-client\ + TRACE;NET35,ClientProfiles + prompt + 4 + + + true + + + key.snk + + + + + + + + + + + + + + Attributes\INamedAttribute.cs + + + Attributes\IValidatingAttribute.cs + + + Attributes\Specialized\EntityAttribute.cs + + + Attributes\Specialized\HeaderAttribute.cs + + + Attributes\Specialized\ParameterAttribute.cs + + + Attributes\Specialized\UserAgentAttribute.cs + + + Attributes\Validation\BooleanToIntegerAttribute.cs + + + Attributes\Validation\DateTimeFormatAttribute.cs + + + Attributes\Validation\RequiredAttribute.cs + + + Attributes\Validation\SpecificationAttribute.cs + + + Attributes\Validation\ValidationAttribute.cs + + + Authentication\Basic\BasicAuthCredentials.cs + + + Authentication\IWebCredentials.cs + + + Authentication\OAuth\OAuthCredentials.cs + + + Authentication\OAuth\OAuthParameterHandling.cs + + + Authentication\OAuth\OAuthSignatureMethod.cs + + + Authentication\OAuth\OAuthToken.cs + + + Authentication\OAuth\OAuthTools.cs + + + Authentication\OAuth\OAuthType.cs + + + Authentication\OAuth\OAuthWebQuery.cs + + + Authentication\OAuth\OAuthWebQueryInfo.cs + + + Authentication\OAuth\OAuthWorkflow.cs + + + Caching\CacheFactory.cs + + + Caching\CacheMode.cs + + + Caching\CacheOptions.cs + + + Caching\ICache.cs + + + Caching\SimpleCache.cs + + + Extensions\CollectionExtensions.cs + + + Extensions\FormatExtensions.cs + + + Extensions\OAuthExtensions.cs + + + Extensions\ObjectExtensions.cs + + + Extensions\ReflectionExtensions.cs + + + Extensions\SpecificationExtensions.cs + + + Extensions\StringExtensions.cs + + + Extensions\TimeExtensions.cs + + + Extensions\WebExtensions.cs + + + IRestClient.cs + + + Model\PropertyChangedBase.cs + + + Mono\HttpUtility.cs + + + Mono\WebHeaderCollection.cs + + + RestBase.cs + + + RestCallback.cs + + + RestClient.cs + + + RestRequest.cs + + + RestResponse.cs + + + Retries\ConnectionClosed.cs + + + Retries\IRetryCondition.cs + + + Retries\IRetryCustomCondition.cs + + + Retries\NetworkError.cs + + + Retries\RetryCondition.cs + + + Retries\RetryCustomCondition.cs + + + Retries\RetryErrorCondition.cs + + + Retries\RetryPolicy.cs + + + Retries\RetryResultCondition.cs + + + Retries\Timeout.cs + + + Serialization\DefaultJsonSerializer.cs + + + Serialization\HammockXmlSerializer.cs + + + Serialization\IDeserializer.cs + + + Serialization\ISerializer.cs + + + Serialization\JsonParser.cs + + + Serialization\Utf8Serializer.cs + + + Specifications\AndSpecification.cs + + + Specifications\CompositeSpecificationBase.cs + + + Specifications\HammockSpecification.cs + + + Specifications\ISpecification.cs + + + Specifications\NotSpecification.cs + + + Specifications\OrSpecification.cs + + + Streaming\StreamOptions.cs + + + Tasks\IRateLimitingRule.cs + + + Tasks\IRateLimitStatus.cs + + + Tasks\ITaskOptions.cs + + + Tasks\ITaskState.cs + + + Tasks\ITimedTask.cs + + + Tasks\RateLimitingRule.cs + + + Tasks\RateLimitType.cs + + + Tasks\TaskOptions.cs + + + Tasks\TaskState.cs + + + Tasks\TimedTask.cs + + + Validation\ValidationException.cs + + + Validation\ValidEmailSpecification.cs + + + Web\BasicAuthWebQuery.cs + + + Web\GetOrDelete.cs + + + Web\HttpCookieParameter.cs + + + Web\HttpPostParameter.cs + + + Web\HttpPostParameterType.cs + + + Web\IWebQueryInfo.cs + + + Web\Mocks\IMockable.cs + + + Web\Mocks\IWebResponse.cs + + + Web\Mocks\MockHttpWebRequest.cs + + + Web\Mocks\MockHttpWebResponse.cs + + + Web\Mocks\MockWebRequestFactory.cs + + + Web\Pair.cs + + + Web\PostOrPut.cs + + + Web\Triplet.cs + + + Web\WebCallback.cs + + + Web\WebEntity.cs + + + Web\WebHeader.cs + + + Web\WebHeaderCollection.cs + + + Web\WebMethod.cs + + + Web\WebPair.cs + + + Web\WebPairCollection.cs + + + Web\WebParameter.cs + + + Web\WebParameterCollection.cs + + + Web\WebQuery.Async.cs + + + Web\WebQuery.cs + + + Web\WebQueryAsyncResult.cs + + + Web\WebQueryRequestEventArgs.cs + + + Web\WebQueryResponseEventArgs.cs + + + Web\WebQueryResult.cs + + + + + + + + + \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock.ClientProfile/Properties/AssemblyInfo.cs b/trunk/hammock/src/net35/Hammock.ClientProfile/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..a832c38 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock.ClientProfile/Properties/AssemblyInfo.cs @@ -0,0 +1,37 @@ +using System.Reflection; +using System.Runtime.InteropServices; +using System.Security; + +// 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("Hammock")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Apitize")] +[assembly: AssemblyProduct("Hammock")] +[assembly: AssemblyCopyright("Copyright © Daniel Crenna and Jason Diller")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: AllowPartiallyTrustedCallers] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("90025308-f836-49cd-865f-39e0ea20c096")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/trunk/hammock/src/net35/Hammock.ClientProfile/key.snk b/trunk/hammock/src/net35/Hammock.ClientProfile/key.snk new file mode 100644 index 0000000000000000000000000000000000000000..ed404cd2b98794be9654705e03f356546393f826 GIT binary patch literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50097rX2mggb`z#srv=C&u+tgpp^FW^M**Pm zRQO}lqnc-@hC)KUY6}|R0cKtk;e9lD=(rwB+as(MXDb+_+G52=`KS_Isyvj`Lv>t; zyv1GdtazzRJ@~Ikqx~TP`bG%Rj^JO-mWk-SOVW*S-BQylz(lnRD^aU;42ZrfNBOmJ z+wu|=RKI)(tf=kVs&r1#mU7ia^YtqD_N!R!)Mb<04J(7v0b9Z5@VQ zC~!{_9Az!Ik)85nzpjNic*BZ(iJSs=#CEi_EvxKd8YjX}1j8+N2zqaVEoTb{xxA?( zVt8G+Ou_+Iw{;ElEmyRR47jL`4u7RS+VW6jwp=Ns#vPw_+s*hGzc&Int6mW=r8E?B z)qgXtnZUe(Tz`ffc*>2e+Br!=fqNzeZTr56NZVVsD%VFGDVkAw@hwc5(-@Qd=aTqV z(nhX4LsE@8Bh?ITr5k1jJOPeVdipW-lxZ`6M6%|*SG?o?o}O<)9!yjl130Go;PJF4 iINMdx^S=SKvcAYJIsZ6c08B+-O^Q|BqJw=PJm;e#=pQ8j literal 0 HcmV?d00001 diff --git a/trunk/hammock/src/net35/Hammock.Extras/Hammock.Extras.csproj b/trunk/hammock/src/net35/Hammock.Extras/Hammock.Extras.csproj new file mode 100644 index 0000000..23bafe1 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock.Extras/Hammock.Extras.csproj @@ -0,0 +1,114 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {3BB0DC97-ECE3-4AC8-B2D0-E4C14D600179} + Library + Properties + Hammock.Extras + Hammock.Extras + v3.5 + 512 + true + key.snk + + + 3.5 + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + ..\..\..\bin\lib\3.5\ + TRACE;DEBUG;NET35 + prompt + 4 + AllRules.ruleset + + + pdbonly + true + ..\..\..\bin\lib\3.5\ + TRACE;NET35 + prompt + 4 + AllRules.ruleset + + + + ..\..\..\lib\Newtonsoft.Json.Net35.dll + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + {6679078A-C585-4CB6-96E9-908DBDAA2716} + Hammock %28.NET 3.5\Hammock%29 + + + + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock.Extras/Properties/AssemblyInfo.cs b/trunk/hammock/src/net35/Hammock.Extras/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..8dd765d --- /dev/null +++ b/trunk/hammock/src/net35/Hammock.Extras/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Hammock.Extras")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Hammock.Extras")] +[assembly: AssemblyCopyright("Copyright © Daniel Crenna and Jason Diller")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("124ed3cb-d184-438b-be4b-38c240c929e7")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/trunk/hammock/src/net35/Hammock.Extras/Serialization/JsonConventionResolver.cs b/trunk/hammock/src/net35/Hammock.Extras/Serialization/JsonConventionResolver.cs new file mode 100644 index 0000000..548dc90 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock.Extras/Serialization/JsonConventionResolver.cs @@ -0,0 +1,79 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using Newtonsoft.Json.Serialization; + +namespace Hammock.Extras.Serialization +{ + /// + /// Resolves all property names to JSON conventional standard, + /// i.e. JSON name "this_is_a_property" will map to the class property ThisIsAProperty. + /// Also finds any property names suffixed with "Attribute" and converts them + /// into @properties for XML serialization. + /// + public class JsonConventionResolver : DefaultContractResolver + { + public class ToStringComparer : IComparer + { + public int Compare(object x, object y) + { + return x.ToString().CompareTo(y.ToString()); + } + } + + protected override IList CreateProperties(Type type, Newtonsoft.Json.MemberSerialization memberSerialization) + { + var properties = base.CreateProperties(type, memberSerialization); + + return CreatePropertiesImpl(properties); + } + + private static IList CreatePropertiesImpl(IList properties) + { + foreach (var property in properties) + { + property.PropertyName = PascalCaseToElement(property.PropertyName); + } + + // @'s must come first + var result = properties; + + ArrayList.Adapter((IList)result).Sort(new ToStringComparer()); + + return result; + } + + private static string PascalCaseToElement(string input) + { + if (string.IsNullOrEmpty(input)) + { + return null; + } + + var attributeForSerialization = input.EndsWith("Attribute"); + if(attributeForSerialization) + { + input = input.Substring(0, input.LastIndexOf("Attribute")); + } + + var result = new StringBuilder(); + result.Append(char.ToLowerInvariant(input[0])); + + for (var i = 1; i < input.Length; i++) + { + if (char.IsLower(input[i])) + { + result.Append(input[i]); + } + else + { + result.Append("_"); + result.Append(char.ToLowerInvariant(input[i])); + } + } + + return attributeForSerialization? string.Concat("@", result) : result.ToString(); + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock.Extras/Serialization/JsonSerializer.cs b/trunk/hammock/src/net35/Hammock.Extras/Serialization/JsonSerializer.cs new file mode 100644 index 0000000..b453ddd --- /dev/null +++ b/trunk/hammock/src/net35/Hammock.Extras/Serialization/JsonSerializer.cs @@ -0,0 +1,97 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using Hammock.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +namespace Hammock.Extras.Serialization +{ + public class JsonSerializer : SerializerBase + { + public JsonSerializer() + { + + } + + public JsonSerializer(JsonSerializerSettings settings) : base(settings) + { + + } + +#if NET40 + public override dynamic DeserializeDynamic(RestResponse response) + { + var result = JsonParser.Deserialize(response.Content); + return result; + } +#endif + + public override T Deserialize(RestResponse response) + { + var token = JToken.FromObject(response.Content); + + return token.Type == JTokenType.Array + ? DeserializeCollection(token) + : DeserializeSingle(response.Content); + } + + private T DeserializeSingle(string content) + { + var deserialized = DeserializeJson(content); + return deserialized; + } + + private T DeserializeCollection(IEnumerable array) + { + IList collection; + var type = ConstructCollection(out collection); + + try + { + var items = array.Select(item => item.ToString()); + foreach (var d in items.Select(item => DeserializeJson(item, type))) + { + collection.Add(d); + } + var deserialized = (T)collection; + return deserialized; + } + catch (JsonReaderException) // <-- Likely unexpected content type + { + var deserialized = (T)collection; + return deserialized; + } + catch (Exception) // <-- Likely entity mismatch (error) + { + var deserialized = (T)collection; + return deserialized; + } + } + + private static Type ConstructCollection(out IList collection) + { + var args = typeof(T).GetGenericArguments(); + var type = args.Length == 0 ? typeof (T) : args[0]; + var collectionType = typeof(List<>).MakeGenericType(type); + collection = (IList)Activator.CreateInstance(collectionType); + return type; + } + + public override object Deserialize(RestResponse response, Type type) + { + return DeserializeJson(response.Content, type); + } + + public override string Serialize(object instance, Type type) + { + return SerializeJson(instance, type); + } + + public override string ContentType + { + get { return "application/json"; } + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock.Extras/Serialization/SerializerBase.cs b/trunk/hammock/src/net35/Hammock.Extras/Serialization/SerializerBase.cs new file mode 100644 index 0000000..1bc82b0 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock.Extras/Serialization/SerializerBase.cs @@ -0,0 +1,188 @@ +using System; +#if NET40 +using System.Dynamic; +#endif +using System.IO; +using System.Xml; +using Hammock.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using Formatting = Newtonsoft.Json.Formatting; + +namespace Hammock.Extras.Serialization +{ + public abstract class SerializerBase : Utf8Serializer, ISerializer, IDeserializer + { + private readonly Newtonsoft.Json.JsonSerializer _serializer; + + protected SerializerBase() + : this(new JsonSerializerSettings + { + MissingMemberHandling = MissingMemberHandling.Ignore, + NullValueHandling = NullValueHandling.Ignore, + DefaultValueHandling = DefaultValueHandling.Include, + ContractResolver = new JsonConventionResolver() + }) + { + + } + + protected SerializerBase(JsonSerializerSettings settings) + { + _serializer = new Newtonsoft.Json.JsonSerializer + { + ConstructorHandling = settings.ConstructorHandling, + ContractResolver = settings.ContractResolver, + ObjectCreationHandling = settings.ObjectCreationHandling, + MissingMemberHandling = settings.MissingMemberHandling, + DefaultValueHandling = settings.DefaultValueHandling, + NullValueHandling = settings.NullValueHandling + }; + + foreach (var converter in settings.Converters) + { + _serializer.Converters.Add(converter); + } + } + + public abstract T Deserialize(RestResponse response); + + public abstract object Deserialize(RestResponse response, Type type); + +#if NET40 + public abstract dynamic DeserializeDynamic(RestResponse response) where T : DynamicObject; +#endif + + public virtual object DeserializeJson(string content, Type type) + { + using (var stringReader = new StringReader(content)) + { + using (var jsonTextReader = new JsonTextReader(stringReader)) + { + return _serializer.Deserialize(jsonTextReader, type); + } + } + } + + public virtual T DeserializeJson(string content) + { + using (var stringReader = new StringReader(content)) + { + using (var jsonTextReader = new JsonTextReader(stringReader)) + { + return _serializer.Deserialize(jsonTextReader); + } + } + } + + public virtual T DeserializeXml(RestResponse response) + { + return (T)DeserializeXml(response, typeof(T)); + } + + public virtual object DeserializeXml(RestResponse response, Type type) + { + var element = LoadXmlElement(response.Content); + + return DeserializeXmlImpl(element, type); + } + + private object DeserializeXmlImpl(XmlNode node, Type type) + { + var json = JsonConvert.SerializeXmlNode(node); + var instance = DeserializeJson(json, type); + return instance; + } + + private static XmlElement LoadXmlElement(string content) + { + var document = new XmlDocument(); + document.Load(new StringReader(content)); + return document.DocumentElement; + } + + public virtual object DeserializeXmlWithRoot(string content, Type type, string root) + { + var source = LoadXmlElement(content); + var inner = source.FirstChild; + + var document = new XmlDocument(); + var outer = document.CreateNode(XmlNodeType.Element, root, source.NamespaceURI); + inner = document.ImportNode(inner, true); + + foreach(XmlAttribute attribute in source.Attributes) + { + var attributeCopy = document.CreateAttribute(attribute.Name, attribute.LocalName, attribute.NamespaceURI); + attributeCopy.Value = attribute.Value; + if (outer.Attributes != null) + { + outer.Attributes.Append(attributeCopy); + } + } + + outer.AppendChild(inner); + document.AppendChild(outer); + + var json = JsonConvert.SerializeXmlNode(document); + var relevant = JObject.Parse(json)[root].ToString(); + var instance = DeserializeJson(relevant, type); + + return instance; + } + + public virtual string SerializeJson(object instance, Type type) + { + using (var stringWriter = new StringWriter()) + { + using (var jsonTextWriter = new JsonTextWriter(stringWriter)) + { + jsonTextWriter.Formatting = Formatting.Indented; + jsonTextWriter.QuoteChar = '"'; + + _serializer.Serialize(jsonTextWriter, instance); + + var result = stringWriter.ToString(); + return result; + } + } + } + + public virtual string SerializeXml(object instance, Type type) + { + var json = SerializeJson(instance, type); + + var root = type.Name.ToLowerInvariant(); + + return SerializeXmlImpl(instance, type, json, root); + } + + public virtual string SerializeXmlWithRoot(object instance, Type type, string root) + { + var json = SerializeJson(instance, type); + + return SerializeXmlImpl(instance, type, json, root); + } + + public virtual string SerializeXmlImpl(object instance, Type type, string json, string root) + { + // {"root":json } + json = string.Format("{{\"{0}\":{1} }}", root, json); + + var document = JsonConvert.DeserializeXmlNode(json); + + using (var stringWriter = new StringWriter()) + { + using (var xmlTextWriter = new XmlTextWriter(stringWriter)) + { + document.WriteTo(xmlTextWriter); + + return stringWriter.ToString(); + } + } + } + + public abstract string Serialize(object instance, Type type); + + public abstract string ContentType { get; } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock.Extras/Serialization/XmlSerializer.cs b/trunk/hammock/src/net35/Hammock.Extras/Serialization/XmlSerializer.cs new file mode 100644 index 0000000..f6f3e99 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock.Extras/Serialization/XmlSerializer.cs @@ -0,0 +1,42 @@ +using System; + +namespace Hammock.Extras.Serialization +{ + public class XmlSerializer : SerializerBase + { + public override T Deserialize(RestResponse response) + { + var root = typeof (T).Name.ToLowerInvariant(); + + return (T)DeserializeXmlWithRoot(response.Content, typeof(T), root); + } + +#if NET40 + public override dynamic DeserializeDynamic(RestResponse response) + { + var root = typeof(T).Name.ToLowerInvariant(); + + return DeserializeXmlWithRoot(response.Content, typeof(T), root); + } +#endif + + public override object Deserialize(RestResponse response, Type type) + { + var root = type.Name.ToLowerInvariant(); + + return DeserializeXmlWithRoot(response.Content, type, root); + } + + public override string Serialize(object instance, Type type) + { + var root = type.Name.ToLowerInvariant(); + + return SerializeXmlWithRoot(instance, type, root); + } + + public override string ContentType + { + get { return "text/xml"; } + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock.Extras/key.snk b/trunk/hammock/src/net35/Hammock.Extras/key.snk new file mode 100644 index 0000000000000000000000000000000000000000..ed404cd2b98794be9654705e03f356546393f826 GIT binary patch literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50097rX2mggb`z#srv=C&u+tgpp^FW^M**Pm zRQO}lqnc-@hC)KUY6}|R0cKtk;e9lD=(rwB+as(MXDb+_+G52=`KS_Isyvj`Lv>t; zyv1GdtazzRJ@~Ikqx~TP`bG%Rj^JO-mWk-SOVW*S-BQylz(lnRD^aU;42ZrfNBOmJ z+wu|=RKI)(tf=kVs&r1#mU7ia^YtqD_N!R!)Mb<04J(7v0b9Z5@VQ zC~!{_9Az!Ik)85nzpjNic*BZ(iJSs=#CEi_EvxKd8YjX}1j8+N2zqaVEoTb{xxA?( zVt8G+Ou_+Iw{;ElEmyRR47jL`4u7RS+VW6jwp=Ns#vPw_+s*hGzc&Int6mW=r8E?B z)qgXtnZUe(Tz`ffc*>2e+Br!=fqNzeZTr56NZVVsD%VFGDVkAw@hwc5(-@Qd=aTqV z(nhX4LsE@8Bh?ITr5k1jJOPeVdipW-lxZ`6M6%|*SG?o?o}O<)9!yjl130Go;PJF4 iINMdx^S=SKvcAYJIsZ6c08B+-O^Q|BqJw=PJm;e#=pQ8j literal 0 HcmV?d00001 diff --git a/trunk/hammock/src/net35/Hammock.Silverlight/Caching/IsolatedStorageCache.cs b/trunk/hammock/src/net35/Hammock.Silverlight/Caching/IsolatedStorageCache.cs new file mode 100644 index 0000000..d564430 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock.Silverlight/Caching/IsolatedStorageCache.cs @@ -0,0 +1,18 @@ +using System; +using System.Net; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Documents; +using System.Windows.Ink; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Animation; +using System.Windows.Shapes; + +namespace Hammock.Silverlight.Caching +{ + public class IsolatedStorageCache + { + + } +} diff --git a/trunk/hammock/src/net35/Hammock.Silverlight/Compat/DecompressionMethods.cs b/trunk/hammock/src/net35/Hammock.Silverlight/Compat/DecompressionMethods.cs new file mode 100644 index 0000000..121ff66 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock.Silverlight/Compat/DecompressionMethods.cs @@ -0,0 +1,12 @@ +using System; + +namespace Hammock.Silverlight.Compat +{ + [Flags] + public enum DecompressionMethods + { + Deflate = 2, + GZip = 4, + None = 6 + } +} diff --git a/trunk/hammock/src/net35/Hammock.Silverlight/Compat/GzipHttpWebResponse.cs b/trunk/hammock/src/net35/Hammock.Silverlight/Compat/GzipHttpWebResponse.cs new file mode 100644 index 0000000..7050194 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock.Silverlight/Compat/GzipHttpWebResponse.cs @@ -0,0 +1,129 @@ +using System; +using System.IO; +using System.Net; +using System.Text; +using ICSharpCode.SharpZipLib.Silverlight.GZip; +using ICSharpCode.SharpZipLib.Silverlight.Zip; + +namespace Hammock.Silverlight.Compat +{ + public class GzipHttpWebResponse : HttpWebResponse + { + private const int ChunkSize = 2048; + + private readonly HttpWebResponse _response; + + public override string Method + { + get { return _response.Method; } + } + + public override HttpStatusCode StatusCode + { + get { return _response.StatusCode; } + } + + public override string StatusDescription + { + get { return _response.StatusDescription; } + } + + public GzipHttpWebResponse(HttpWebResponse response) + { + _response = response; + } + + public override void Close() + { + _response.Close(); + } + + public override Stream GetResponseStream() + { + Stream compressed = null; + + var responseStream = _response.GetResponseStream(); + +#if !WindowsPhone + var contentEncoding = _response.Headers["Content-Encoding"]; + if (contentEncoding != null && contentEncoding.Contains("gzip")) + { + compressed = new GZipInputStream(responseStream); + } + else if (contentEncoding != null && contentEncoding.Contains("deflate")) + { + compressed = new ZipInputStream(responseStream); + } +#else + byte[] marker; + responseStream = ReadIntoMemoryStream(responseStream, out marker); + if (marker.Length > 2 && (marker[0] == 31 && marker[1] == 139)) + { + compressed = new GZipInputStream(responseStream); + } +#endif + if (compressed != null) + { + var decompressed = new MemoryStream(); + var size = ChunkSize; + var buffer = new byte[ChunkSize]; + while (true) + { + size = compressed.Read(buffer, 0, size); + if (size > 0) + { + decompressed.Write(buffer, 0, size); + } + else + { + break; + } + } + decompressed.Seek(0, SeekOrigin.Begin); + return decompressed; + } + + return responseStream; + } + + // [DC]: We have to read the entire stream in as HTTP response streams are read-once + private static MemoryStream ReadIntoMemoryStream(Stream stream, out byte[] marker) + { + var buffer = new byte[8192]; + var ms = new MemoryStream(); + + int read; + while ((read = stream.Read(buffer, 0, buffer.Length)) > 0) + { + ms.Write(buffer, 0, read); + } + + ms.Position = 0; + marker = new byte[2]; + ms.Read(marker, 0, 2); + ms.Position = 0; + + return ms; + } + + public override long ContentLength + { + get { return _response.ContentLength; } + } + + public override string ContentType + { + get { return _response.ContentType; } + } + + public override WebHeaderCollection Headers + { + get { return _response.Headers; } + } + + public override System.Uri ResponseUri + { + get { return _response.ResponseUri; } + } + } +} diff --git a/trunk/hammock/src/net35/Hammock.Silverlight/Compat/NameValueCollection.cs b/trunk/hammock/src/net35/Hammock.Silverlight/Compat/NameValueCollection.cs new file mode 100644 index 0000000..7504021 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock.Silverlight/Compat/NameValueCollection.cs @@ -0,0 +1,56 @@ +using System.Collections.Generic; +using System.Linq; + +namespace Hammock.Silverlight.Compat +{ + public class NameValueCollection : List> + { + public new string this[int index] + { + get + { + return base[index].Value; + } + } + + public string this[string name] + { + get + { + return this.SingleOrDefault(kv => kv.Key.Equals(name)).Value; + } + } + + public NameValueCollection() + { + + } + + public NameValueCollection(int capacity) : base(capacity) + { + + } + + public void Add(string name, string value) + { + List> list = this; + for (int i = Count - 1; i >= 0; --i) + { + if (string.Equals(list[i].Key, name)) + { + list[i] = new KeyValuePair(name, list[i].Value + "," + value); + return; + } + } + Add(new KeyValuePair(name, value)); + } + + public IEnumerable AllKeys + { + get + { + return this.Select(pair => pair.Key); + } + } + } +} diff --git a/trunk/hammock/src/net35/Hammock.Silverlight/Compat/Trace.cs b/trunk/hammock/src/net35/Hammock.Silverlight/Compat/Trace.cs new file mode 100644 index 0000000..6e91c82 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock.Silverlight/Compat/Trace.cs @@ -0,0 +1,61 @@ +using System; +using System.Diagnostics; +using System.Text; + +namespace Hammock.Silverlight.Compat +{ + public class Trace + { + public static bool Enabled { get; set; } + + static Trace() + { + Enabled = true; + } + + public static void WriteLine(string message) + { + if (!Enabled) + { + return; + } + + Debug.WriteLine(message); + } + + public static void WriteLineIf(bool condition, string message) + { + if (!Enabled) + { + return; + } + + if(condition) + { + Debug.WriteLine(message); + } + } + + public static void WriteLine(string message, params object[] args) + { + if (!Enabled) + { + return; + } + + Debug.WriteLine(message, args); + } + + public static void WriteLine(StringBuilder sb) + { + if (!Enabled) + { + return; + } + + Debug.WriteLine(sb.ToString()); + } + } +} + + diff --git a/trunk/hammock/src/net35/Hammock.Silverlight/Hammock.Silverlight.csproj b/trunk/hammock/src/net35/Hammock.Silverlight/Hammock.Silverlight.csproj new file mode 100644 index 0000000..276a7be --- /dev/null +++ b/trunk/hammock/src/net35/Hammock.Silverlight/Hammock.Silverlight.csproj @@ -0,0 +1,446 @@ + + + + v3.5 + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {E0461346-CB62-489E-9893-CFEA249F8380} + {A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + Hammock.Silverlight + Hammock.Silverlight + v3.0 + false + true + true + true + key.snk + Silverlight + $(TargetFrameworkVersion) + + + 3.5 + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + ..\..\..\bin\lib\SL3\ + TRACE;DEBUG;SILVERLIGHT,Silverlight,SL,SL3 + true + true + prompt + 4 + AllRules.ruleset + + + pdbonly + true + ..\..\..\bin\lib\sl3\ + TRACE;SILVERLIGHT,Silverlight,SL,SL3 + true + true + prompt + 4 + MinimumRecommendedRules.ruleset + + + ..\..\..\bin\mono\ + TRACE;SILVERLIGHT,Silverlight,SL + true + true + pdbonly + AnyCPU + true + GlobalSuppressions.cs + prompt + true + AllRules.ruleset + + + + + + + + + + + + + + + + + Attributes\INamedAttribute.cs + + + Attributes\IValidatingAttribute.cs + + + Attributes\Specialized\EntityAttribute.cs + + + Attributes\Specialized\HeaderAttribute.cs + + + Attributes\Specialized\ParameterAttribute.cs + + + Attributes\Specialized\UserAgentAttribute.cs + + + Attributes\Validation\BooleanToIntegerAttribute.cs + + + Attributes\Validation\DateTimeFormatAttribute.cs + + + Attributes\Validation\RequiredAttribute.cs + + + Attributes\Validation\SpecificationAttribute.cs + + + Attributes\Validation\ValidationAttribute.cs + + + Authentication\Basic\BasicAuthCredentials.cs + + + Authentication\IWebCredentials.cs + + + Authentication\OAuth\OAuthCredentials.cs + + + Authentication\OAuth\OAuthParameterHandling.cs + + + Authentication\OAuth\OAuthSignatureMethod.cs + + + Authentication\OAuth\OAuthToken.cs + + + Authentication\OAuth\OAuthTools.cs + + + Authentication\OAuth\OAuthType.cs + + + Authentication\OAuth\OAuthWebQuery.cs + + + Authentication\OAuth\OAuthWebQueryInfo.cs + + + Authentication\OAuth\OAuthWorkflow.cs + + + Caching\CacheFactory.cs + + + Caching\CacheMode.cs + + + Caching\CacheOptions.cs + + + Caching\ICache.cs + + + Caching\SimpleCache.cs + + + Extensions\CollectionExtensions.cs + + + Extensions\FormatExtensions.cs + + + Extensions\OAuthExtensions.cs + + + Extensions\ObjectExtensions.cs + + + Extensions\ReflectionExtensions.cs + + + Extensions\SpecificationExtensions.cs + + + Extensions\StringExtensions.cs + + + Extensions\TimeExtensions.cs + + + Extensions\WebExtensions.cs + + + IRestClient.cs + + + Model\PropertyChangedBase.cs + + + RestBase.cs + + + RestCallback.cs + + + RestClient.cs + + + RestRequest.cs + + + RestResponse.cs + + + Retries\IRetryCondition.cs + + + Retries\IRetryCustomCondition.cs + + + Retries\NetworkError.cs + + + Retries\RetryCustomCondition.cs + + + Retries\RetryErrorCondition.cs + + + Retries\RetryPolicy.cs + + + Retries\RetryResultCondition.cs + + + Serialization\HammockDataContractJsonSerializer.cs + + + Serialization\HammockDataContractSerializer.cs + + + Serialization\IDeserializer.cs + + + Serialization\ISerializer.cs + + + Serialization\Utf8Serializer.cs + + + Specifications\AndSpecification.cs + + + Specifications\CompositeSpecificationBase.cs + + + Specifications\HammockSpecification.cs + + + Specifications\ISpecification.cs + + + Specifications\NotSpecification.cs + + + Specifications\OrSpecification.cs + + + Streaming\StreamOptions.cs + + + Tasks\IRateLimitingRule.cs + + + Tasks\IRateLimitStatus.cs + + + Tasks\ITaskOptions.cs + + + Tasks\ITaskState.cs + + + Tasks\ITimedTask.cs + + + Tasks\RateLimitingRule.cs + + + Tasks\RateLimitType.cs + + + Tasks\TaskOptions.cs + + + Tasks\TaskState.cs + + + Tasks\TimedTask.cs + + + Validation\ValidationException.cs + + + Web\BasicAuthWebQuery.cs + + + Web\GetOrDelete.cs + + + Web\HttpCookieParameter.cs + + + Web\HttpPostParameter.cs + + + Web\HttpPostParameterType.cs + + + Web\IWebQueryInfo.cs + + + Web\Mocks\IMockable.cs + + + Web\Mocks\MockHttpWebRequest.cs + + + Web\Mocks\MockHttpWebResponse.cs + + + Web\Mocks\MockWebRequestFactory.cs + + + Web\Pair.cs + + + Web\PostOrPut.cs + + + Web\Triplet.cs + + + Web\WebCallback.cs + + + Web\WebEntity.cs + + + Web\WebHeader.cs + + + Web\WebHeaderCollection.cs + + + Web\WebMethod.cs + + + Web\WebPair.cs + + + Web\WebPairCollection.cs + + + Web\WebParameter.cs + + + Web\WebParameterCollection.cs + + + Web\WebQuery.Async.cs + + + Web\WebQuery.cs + + + Web\WebQueryAsyncResult.cs + + + Web\WebQueryRequestEventArgs.cs + + + Web\WebQueryResponseEventArgs.cs + + + Web\WebQueryResult.cs + + + + + + + + + + + + + + {2E420750-6124-473B-808D-41755C907648} + ICSharpCode.SharpZipLib.Silverlight %28.NET 3.5\SharpZipLib\ICSharpCode.SharpZipLib.Silverlight%29 + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + + + + + + + + \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock.Silverlight/Properties/AssemblyInfo.cs b/trunk/hammock/src/net35/Hammock.Silverlight/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..338b123 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock.Silverlight/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Hammock.Silverlight")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Hammock.Silverlight")] +[assembly: AssemblyCopyright("Copyright © Daniel Crenna and Jason Diller")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("e8d5be03-7069-4869-90d4-2e10d975991d")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/trunk/hammock/src/net35/Hammock.Silverlight/key.snk b/trunk/hammock/src/net35/Hammock.Silverlight/key.snk new file mode 100644 index 0000000000000000000000000000000000000000..ed404cd2b98794be9654705e03f356546393f826 GIT binary patch literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50097rX2mggb`z#srv=C&u+tgpp^FW^M**Pm zRQO}lqnc-@hC)KUY6}|R0cKtk;e9lD=(rwB+as(MXDb+_+G52=`KS_Isyvj`Lv>t; zyv1GdtazzRJ@~Ikqx~TP`bG%Rj^JO-mWk-SOVW*S-BQylz(lnRD^aU;42ZrfNBOmJ z+wu|=RKI)(tf=kVs&r1#mU7ia^YtqD_N!R!)Mb<04J(7v0b9Z5@VQ zC~!{_9Az!Ik)85nzpjNic*BZ(iJSs=#CEi_EvxKd8YjX}1j8+N2zqaVEoTb{xxA?( zVt8G+Ou_+Iw{;ElEmyRR47jL`4u7RS+VW6jwp=Ns#vPw_+s*hGzc&Int6mW=r8E?B z)qgXtnZUe(Tz`ffc*>2e+Br!=fqNzeZTr56NZVVsD%VFGDVkAw@hwc5(-@Qd=aTqV z(nhX4LsE@8Bh?ITr5k1jJOPeVdipW-lxZ`6M6%|*SG?o?o}O<)9!yjl130Go;PJF4 iINMdx^S=SKvcAYJIsZ6c08B+-O^Q|BqJw=PJm;e#=pQ8j literal 0 HcmV?d00001 diff --git a/trunk/hammock/src/net35/Hammock.Tests/Attributes/Validation/BooleanToIntegerTests.cs b/trunk/hammock/src/net35/Hammock.Tests/Attributes/Validation/BooleanToIntegerTests.cs new file mode 100644 index 0000000..ebabf5f --- /dev/null +++ b/trunk/hammock/src/net35/Hammock.Tests/Attributes/Validation/BooleanToIntegerTests.cs @@ -0,0 +1,37 @@ +using Hammock.Attributes.Specialized; +using Hammock.Attributes.Validation; +using Hammock.Web; +using NUnit.Framework; + +namespace Hammock.Tests.Attributes.Validation +{ + [TestFixture] + public class BooleanToIntegerTests + { + public class BooleanToIntegerInfo : IWebQueryInfo + { + [BooleanToInteger] + [Parameter("Result")] + public bool IShouldBeANumber { get; set; } + } + + [Test] + public void Can_use_boolean_to_integer_validation_to_transform_parameter_value() + { + var info = new BooleanToIntegerInfo {IShouldBeANumber = false}; + + var client = new RestClient + { + Authority = "http://nowhere.com", + Info = info + }; + + var request = new RestRequest + { + Path = "fast" + }; + + client.Request(request); + } + } +} diff --git a/trunk/hammock/src/net35/Hammock.Tests/Attributes/Validation/DateTimeFormatTests.cs b/trunk/hammock/src/net35/Hammock.Tests/Attributes/Validation/DateTimeFormatTests.cs new file mode 100644 index 0000000..94c21a8 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock.Tests/Attributes/Validation/DateTimeFormatTests.cs @@ -0,0 +1,38 @@ +using System; +using Hammock.Attributes.Specialized; +using Hammock.Attributes.Validation; +using Hammock.Web; +using NUnit.Framework; + +namespace Hammock.Tests.Attributes.Validation +{ + [TestFixture] + public class DateTimeFormatTests + { + public class DateTimeFormatInfo : IWebQueryInfo + { + [DateTimeFormat("mmm-DD-yyyy")] + [Header("Anniversary")] + public DateTime IAmADate { get; set; } + } + + [Test] + public void Can_use_date_time_validation_to_transform_header_value() + { + var info = new DateTimeFormatInfo {IAmADate = DateTime.Now }; + + var client = new RestClient + { + Authority = "http://nowhere.com", + Info = info + }; + + var request = new RestRequest + { + Path = "fast" + }; + + client.Request(request); + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock.Tests/Attributes/Validation/RequiredAttributeTests.cs b/trunk/hammock/src/net35/Hammock.Tests/Attributes/Validation/RequiredAttributeTests.cs new file mode 100644 index 0000000..52911c7 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock.Tests/Attributes/Validation/RequiredAttributeTests.cs @@ -0,0 +1,40 @@ +using Hammock.Attributes.Specialized; +using Hammock.Attributes.Validation; +using Hammock.Validation; +using Hammock.Web; +using NUnit.Framework; + +namespace Hammock.Tests.Attributes.Validation +{ + [TestFixture] + public class RequiredAttributeTests + { + public class RequiredInfo : IWebQueryInfo + { + [Required] + [Header("Result")] + public string ICantBeNull { get; set; } + } + + [Test] + [ExpectedException(typeof(ValidationException))] + public void Can_use_required_validation_to_block_null_value() + { + var info = new RequiredInfo { ICantBeNull = null }; + + var client = new RestClient + { + Authority = "http://nowhere.com", + Info = info + }; + + var request = new RestRequest + { + Path = "fast" + }; + + client.Request(request); + } + } + +} diff --git a/trunk/hammock/src/net35/Hammock.Tests/Attributes/Validation/SpecificationAttributeTests.cs b/trunk/hammock/src/net35/Hammock.Tests/Attributes/Validation/SpecificationAttributeTests.cs new file mode 100644 index 0000000..0631a87 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock.Tests/Attributes/Validation/SpecificationAttributeTests.cs @@ -0,0 +1,41 @@ +using System; +using Hammock.Attributes.Specialized; +using Hammock.Attributes.Validation; +using Hammock.Specifications; +using Hammock.Validation; +using Hammock.Web; +using NUnit.Framework; + +namespace Hammock.Tests.Attributes.Validation +{ + [TestFixture] + public class SpecificationAttributeTests + { + public class DateTimeFormatInfo : IWebQueryInfo + { + [Specification(typeof(ValidEmailSpecification))] + [Parameter("Contact")] + public string Email { get; set; } + } + + [Test] + [ExpectedException(typeof(ValidationException))] + public void Can_use_specification_validation_to_block_request() + { + var info = new DateTimeFormatInfo { Email = "nowhere" }; + + var client = new RestClient + { + Authority = "http://nowhere.com", + Info = info + }; + + var request = new RestRequest + { + Path = "fast" + }; + + client.Request(request); + } + } +} diff --git a/trunk/hammock/src/net35/Hammock.Tests/Hammock.Tests.csproj b/trunk/hammock/src/net35/Hammock.Tests/Hammock.Tests.csproj new file mode 100644 index 0000000..9a2866a --- /dev/null +++ b/trunk/hammock/src/net35/Hammock.Tests/Hammock.Tests.csproj @@ -0,0 +1,157 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {960E427F-67E0-42A5-86ED-FC6A342CDCB2} + Library + Properties + Hammock.Tests + Hammock.Tests + v3.5 + 512 + true + key.snk + + + 3.5 + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + AllRules.ruleset + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + MinimumRecommendedRules.ruleset + + + bin\Mono\ + TRACE + true + pdbonly + AnyCPU + true + GlobalSuppressions.cs + prompt + AllRules.ruleset + + + + False + ..\..\..\lib\Newtonsoft.Json.dll + + + ..\..\..\lib\Newtonsoft.Json.Net35.dll + + + False + ..\..\..\lib\nunit.framework.dll + + + + + 3.5 + + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + + + {6679078A-C585-4CB6-96E9-908DBDAA2716} + Hammock %28.NET 3.5\Hammock%29 + + + + + + + + + + + + + + PreserveNewest + + + PreserveNewest + + + + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock.Tests/Helpers/TestExtensions.cs b/trunk/hammock/src/net35/Hammock.Tests/Helpers/TestExtensions.cs new file mode 100644 index 0000000..8c230c4 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock.Tests/Helpers/TestExtensions.cs @@ -0,0 +1,62 @@ +using System; +using System.IO; +using System.Text; +using System.Xml.Serialization; +using NUnit.Framework; + +namespace RestCore.Tests.Helpers +{ + public static class TestExtensions + { +#if !Smartphone + public static string GetDescription(this Enum value) + { + var field = value.GetType().GetField(value.ToString()); + var attributes = (DescriptionAttribute[]) field.GetCustomAttributes(typeof (DescriptionAttribute), false); + + return (attributes.Length > 0) ? attributes[0].Description : value.ToString(); + } +#endif + + public static string ToXml(this T instance) + { + var type = typeof (T); +#if !Smartphone + if (!type.IsSerializable) + { + return String.Empty; + } +#endif + + var sb = new StringBuilder(); + var serializer = new XmlSerializer(type); + + using (var writer = new StringWriter(sb)) + { + serializer.Serialize(writer, instance); + } + + return sb.ToString(); + } + + public static T FromXml(this string xml) + { + T type; + + var serializer = new XmlSerializer(typeof (T)); + + using (var reader = new StringReader(xml)) + { + type = (T) serializer.Deserialize(reader); + reader.Close(); + } + + return type; + } + + public static Uri AsUri(this string url) + { + return new Uri(url); + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock.Tests/Helpers/TimeExtensions.cs b/trunk/hammock/src/net35/Hammock.Tests/Helpers/TimeExtensions.cs new file mode 100644 index 0000000..61e981d --- /dev/null +++ b/trunk/hammock/src/net35/Hammock.Tests/Helpers/TimeExtensions.cs @@ -0,0 +1,53 @@ +using System; + +namespace Hammock.Tests.Helpers +{ + internal static class TimeExtensions + { + public static TimeSpan Hours(this int hours) + { + return new TimeSpan(0, hours, 0, 0); + } + + public static TimeSpan Minutes(this int minutes) + { + return new TimeSpan(0, 0, minutes, 0); + } + + public static TimeSpan Seconds(this int seconds) + { + return new TimeSpan(0, 0, 0, seconds); + } + + public static TimeSpan Milliseconds(this int milliseconds) + { + return new TimeSpan(0, 0, 0, 0, milliseconds); + } + + public static DateTime Ago(this TimeSpan value) + { + return DateTime.UtcNow.Add(value.Negate()); + } + + public static DateTime FromNow(this TimeSpan value) + { + return new DateTime((DateTime.Now + value).Ticks); + } + + public static DateTime FromUnixTime(this long seconds) + { + var time = new DateTime(1970, 1, 1); + time = time.AddSeconds(seconds); + + return time.ToLocalTime(); + } + + public static long ToUnixTime(this DateTime dateTime) + { + var timeSpan = (dateTime - new DateTime(1970, 1, 1)); + var timestamp = (long)timeSpan.TotalSeconds; + + return timestamp; + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock.Tests/OAuth/OAuthToolsTests.cs b/trunk/hammock/src/net35/Hammock.Tests/OAuth/OAuthToolsTests.cs new file mode 100644 index 0000000..3e3a620 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock.Tests/OAuth/OAuthToolsTests.cs @@ -0,0 +1,241 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using Hammock.Authentication.OAuth; +using Hammock.Web; +using RestCore.Tests.Helpers; +using NUnit.Framework; + +namespace Hammock.Tests.OAuth +{ + [TestFixture] + public class OAuthToolsTests + { + [Test] + public void Can_construct_http_request_url() + { + const string expected = "http://example.com/resource"; + var input = "HTTP://Example.com:80/resource?id=123".AsUri(); + var actual = OAuthTools.ConstructRequestUrl(input); + + Assert.AreEqual(expected, actual); + Console.WriteLine(actual); + } + + [Test] + public void Can_construct_https_request_url() + { + const string expected = "https://example.com/resource"; + var input = "HTTPS://Example.com:443/resource?id=123".AsUri(); + var actual = OAuthTools.ConstructRequestUrl(input); + + Assert.AreEqual(expected, actual); + Console.WriteLine(actual); + } + + [Test] + public void Can_construct_non_standard_port_http_request_url() + { + const string expected = "http://example.com:8080/resource"; + var input = "HTTP://Example.com:8080/resource?id=123".AsUri(); + var actual = OAuthTools.ConstructRequestUrl(input); + + Assert.AreEqual(expected, actual); + Console.WriteLine(actual); + } + + [Test] + public void Can_construct_non_standard_port_https_request_url() + { + const string expected = "https://example.com:8080/resource"; + var input = "HTTPS://Example.com:8080/resource?id=123".AsUri(); + var actual = OAuthTools.ConstructRequestUrl(input); + + Assert.AreEqual(expected, actual); + Console.WriteLine(actual); + } + + [Test] + public void Can_generate_nonce() + { + var nonce = OAuthTools.GetNonce(); + + Assert.IsNotNull(nonce); + Assert.IsTrue(nonce.Length == 16); + Console.WriteLine(nonce); + + var next = OAuthTools.GetNonce(); + + Assert.AreNotEqual(nonce, next); + Console.WriteLine(next); + } + + [Test] + public void Can_generate_timestamp() + { + var timestamp = OAuthTools.GetTimestamp(); + Assert.IsNotNull(timestamp); + Assert.IsTrue(timestamp.Length == 10, "What century is this?"); + Console.WriteLine(timestamp); + } + + [Test] + public void Can_guarantee_random_nonces_in_succession() + { + var nonces = new List(); + for (var i = 0; i < 10000; i++) + { + var nonce = OAuthTools.GetNonce(); + var timestamp = DateTime.Now; + + Console.WriteLine(nonce + ":" + timestamp); + + if (nonces.Contains(nonce)) + { + Assert.Fail("non-unique nonce seed generated"); + } + else + { + nonces.Add(nonce); + } + } + } +#if !Smartphone + [Test] + public void Can_guarantee_random_nonces_in_succession_multithreaded() + { + const int threads = 16; + const int totalNonces = 30000; + const int noncesPerThread = totalNonces / threads; + var nonces = new List(); + var noncesLock = new object(); + var dupes = new List(); + var dupesLock = new object(); + var sem = new Semaphore(0, threads); + var ts = new ThreadStart(() => + { + sem.WaitOne(); + try + { + var localNonces = new List(); + for (var i = 0; i < noncesPerThread; i++) + { + var nonce = OAuthTools.GetNonce(); + localNonces.Add(nonce); + } + lock (nonces) + { + var localDupes = from s in nonces + where localNonces.Contains(s) + select s; + if (localDupes.Any()) + { + lock(dupesLock) + { + dupes.AddRange(localDupes); + } + } + nonces.AddRange(localNonces.Except(localDupes)); + } + } + finally + { + sem.Release(); + } + }); + var workerThreads = new Thread[threads]; + for (var i = 0; i < threads; i++) + { + workerThreads[i] = new Thread(ts) { IsBackground = false, Name = "thread" + i }; + workerThreads[i].Start(); + } + + sem.Release(threads); + foreach (var t in workerThreads) + { + t.Join(); + } + Assert.IsEmpty(dupes, "Found {0} duplicated nonces generated during test", dupes.Count); + lock (noncesLock) + { + Assert.AreEqual(totalNonces, nonces.Count); + } + } +#endif + + [Test] + public void Can_sort_and_normalize_parameters() + { + var input = new WebParameterCollection + { + {"a", "1"}, + {"f", "50"}, + {"f", "25"}, + {"z", "t"}, + {"f", "a"}, + {"c", "hi there"}, + {"z", "p"}, + }; + + const string expected = "a=1&c=hi%20there&f=25&f=50&f=a&z=p&z=t"; + var actual = OAuthTools.NormalizeRequestParameters(input); + Console.WriteLine(actual); + + Assert.AreEqual(expected, actual); + } + + [Test] + public void Can_sort_and_normalize_parameters_excluding_signature() + { + var input = new WebParameterCollection + { + {"a", "1"}, + {"f", "50"}, + {"f", "25"}, + {"z", "t"}, + {"oauth_signature", "signature"}, + {"f", "a"}, + {"c", "hi there"}, + {"z", "p"}, + }; + + const string expected = "a=1&c=hi%20there&f=25&f=50&f=a&z=p&z=t"; + var actual = OAuthTools.NormalizeRequestParameters(input); + Console.WriteLine(actual); + + Assert.AreEqual(expected, actual); + } + + [Test] + public void Can_url_encode_with_uppercase_hexadecimals() + { + const string expected = "What%20century%20is%20this%3F"; + var actual = OAuthTools.UrlEncodeRelaxed("What century is this?"); + + Assert.AreEqual(expected, actual); + Console.WriteLine(actual); + } + + [Test] + public void Can_strict_url_encode_complex_string() + { + const string expected = "%21%3F%22%3B%3A%3C%3E%5C%5C%7C%60%23%24%25%5E%26%2A%2B-_%7B%7D%5B%5D"; + const string sequence = @"!?"";:<>\\|`#$%^&*+-_{}[]"; + + var actual = OAuthTools.UrlEncodeStrict(sequence); + Assert.AreEqual(expected, actual); + } + + [Test] + public void Can_relax_url_encode_complex_string() + { + // Doesn't URL encode ! or * in this sequence + const string expected = "!%3F%22%3B%3A%3C%3E%5C%5C%7C%60%23%24%25%5E%26*%2B-_%7B%7D%5B%5D"; + const string sequence = @"!?"";:<>\\|`#$%^&*+-_{}[]"; + + var actual = OAuthTools.UrlEncodeRelaxed(sequence); + Assert.AreEqual(expected, actual); + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock.Tests/Postmark/Converters/NameValueCollectionConverter.cs b/trunk/hammock/src/net35/Hammock.Tests/Postmark/Converters/NameValueCollectionConverter.cs new file mode 100644 index 0000000..2a4fb3c --- /dev/null +++ b/trunk/hammock/src/net35/Hammock.Tests/Postmark/Converters/NameValueCollectionConverter.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Specialized; +using System.Linq; +using Newtonsoft.Json; + +namespace Hammock.Tests.Postmark.Converters +{ + internal class NameValuePair + { + public string Name { get; set; } + public string Value { get; set; } + } + + internal class NameValueCollectionConverter : JsonConverter + { + public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) + { + if (!(value is NameValueCollection)) + { + return; + } + + var collection = (NameValueCollection)value; + var container = collection.AllKeys.Select(key => new NameValuePair + { + Name = key, + Value = collection[key] + }).ToList(); + + var serialized = JsonConvert.SerializeObject(container); + + writer.WriteRawValue(serialized); + } + + public override object ReadJson(JsonReader reader, Type objectType, object originalValue, JsonSerializer serializer) + { + return reader.Value; + } + + public override bool CanConvert(Type objectType) + { + var t = (IsNullableType(objectType)) + ? Nullable.GetUnderlyingType(objectType) + : objectType; + + return typeof(NameValueCollection).IsAssignableFrom(t); + } + + public static bool IsNullable(Type type) + { + return type != null && (!type.IsValueType || IsNullableType(type)); + } + + public static bool IsNullableType(Type type) + { + if (type == null) + { + return false; + } + + return (type.IsGenericType && + type.GetGenericTypeDefinition() == typeof(Nullable<>)); + } + } +} + + diff --git a/trunk/hammock/src/net35/Hammock.Tests/Postmark/Converters/UnicodeJsonStringConverter.cs b/trunk/hammock/src/net35/Hammock.Tests/Postmark/Converters/UnicodeJsonStringConverter.cs new file mode 100644 index 0000000..5fbfee5 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock.Tests/Postmark/Converters/UnicodeJsonStringConverter.cs @@ -0,0 +1,54 @@ +using System; +using System.Text; +using Newtonsoft.Json; + +namespace Hammock.Tests.Converters +{ + internal class UnicodeJsonStringConverter : JsonConverter + { + public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) + { + var buffer = new StringBuilder(); + buffer.Append("\""); + var stringValue = (string)value; + foreach (var c in stringValue) + { + var code = (int)c; + switch (c) + { + case '\"': + buffer.Append("\\\""); + break; + case '\\': + buffer.Append("\\\\"); + break; + default: + if (code > 127) + { + buffer.AppendFormat("\\u{0:x4}", code); + } + else + { + buffer.Append(c); + } + break; + } + } + buffer.Append("\""); + + writer.WriteRawValue(buffer.ToString()); + } + + public override object ReadJson(JsonReader reader, Type objectType, object originalValue, JsonSerializer serializer) + { + return reader.Value; + } + + public override bool CanConvert(Type objectType) + { + return objectType == typeof(string); + } + } +} + + diff --git a/trunk/hammock/src/net35/Hammock.Tests/Postmark/PostmarkMessage.cs b/trunk/hammock/src/net35/Hammock.Tests/Postmark/PostmarkMessage.cs new file mode 100644 index 0000000..ebc1335 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock.Tests/Postmark/PostmarkMessage.cs @@ -0,0 +1,70 @@ +using System.Collections.Specialized; +using System.Net.Mail; +using System.Text; +using System.Web; + +namespace Hammock.Tests.Postmark +{ + public class PostmarkMessage + { + public PostmarkMessage() + { + Headers = new NameValueCollection(0); + } + + public PostmarkMessage(string from, string to, string subject, string body) : this(from, to, subject, body, null) + { + + } + + public PostmarkMessage(string from, string to, string subject, string body, NameValueCollection headers) + { + var isHtml = !body.Equals(HttpUtility.HtmlEncode(body)); + + From = from; + To = to; + Subject = subject; + TextBody = isHtml ? null : body; + HtmlBody = isHtml ? body : null; + Headers = headers ?? new NameValueCollection(0); + } + + public PostmarkMessage(MailMessage message) + { + From = message.From.DisplayName; + To = message.To.Count > 0 ? message.To[0].DisplayName : null; + Subject = message.Subject; + HtmlBody = message.IsBodyHtml ? message.Body : null; + TextBody = message.IsBodyHtml ? null : message.Body; + +#if NET40 + var sb = new StringBuilder(); + var total = message.ReplyToList.Count; + var count = 0; + foreach(var replyTo in message.ReplyToList) + { + sb.Append(replyTo); + count++; + if(count < total) + { + sb.Append(","); + } + } + ReplyTo = sb.ToString(); +#else + ReplyTo = message.ReplyTo.ToString(); +#endif + Headers = message.Headers; + } + + public string From { get; set; } + public string To { get; set; } + public string ReplyTo { get; set; } + public string Subject { get; set; } + + public string HtmlBody { get; set; } + public string TextBody { get; set; } + + public NameValueCollection Headers { get; set; } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock.Tests/Postmark/PostmarkResponse.cs b/trunk/hammock/src/net35/Hammock.Tests/Postmark/PostmarkResponse.cs new file mode 100644 index 0000000..9f510db --- /dev/null +++ b/trunk/hammock/src/net35/Hammock.Tests/Postmark/PostmarkResponse.cs @@ -0,0 +1,8 @@ +namespace Hammock.Tests.Postmark +{ + public class PostmarkResponse + { + public PostmarkStatus Status { get; set; } + public string Message { get; set; } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock.Tests/Postmark/PostmarkStatus.cs b/trunk/hammock/src/net35/Hammock.Tests/Postmark/PostmarkStatus.cs new file mode 100644 index 0000000..0e386e9 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock.Tests/Postmark/PostmarkStatus.cs @@ -0,0 +1,10 @@ +namespace Hammock.Tests.Postmark +{ + public enum PostmarkStatus + { + Unknown = 0, + Success, + UserError, + ServerError + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock.Tests/Properties/AssemblyInfo.cs b/trunk/hammock/src/net35/Hammock.Tests/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..1ecb243 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock.Tests/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Hammock.Tests")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Hammock.Tests")] +[assembly: AssemblyCopyright("Copyright © Daniel Crenna and Jason Diller")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. RetryIf you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("d631cb7a-6382-4c0c-be0d-119b7f13709e")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/trunk/hammock/src/net35/Hammock.Tests/RestClientTests.cs b/trunk/hammock/src/net35/Hammock.Tests/RestClientTests.cs new file mode 100644 index 0000000..b140660 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock.Tests/RestClientTests.cs @@ -0,0 +1,264 @@ +using System; +using System.Configuration; +using System.Diagnostics; +using System.Net; +using System.Text; +using Hammock.Authentication.OAuth; +using Hammock.Web; +using NUnit.Framework; + +namespace Hammock.Tests +{ + [TestFixture] + public class RestClientTests + { + private string _consumerKey; + private string _consumerSecret; + private string _accessToken; + private string _accessTokenSecret; + private string _twitPicKey; + + [SetUp] + public void SetUp() + { + _consumerKey = ConfigurationManager.AppSettings["OAuthConsumerKey"]; + _consumerSecret = ConfigurationManager.AppSettings["OAuthConsumerSecret"]; + _accessToken = ConfigurationManager.AppSettings["OAuthAccessToken"]; + _accessTokenSecret = ConfigurationManager.AppSettings["OAuthAccessTokenSecret"]; + _twitPicKey = ConfigurationManager.AppSettings["TwitPicKey"]; + + ServicePointManager.Expect100Continue = false; + } + + [Test] + public void Can_request_get() + { + var client = new RestClient + { + Authority = "https://api.twitter.com", + UserAgent = "Hammock" + }; + + var request = new RestRequest + { + Path = "statuses/public_timeline.json", + DecompressionMethods = DecompressionMethods.GZip | + DecompressionMethods.Deflate + }; + + var response = client.Request(request); + + Assert.IsNotNull(response); + Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); + } + + [Test] + public void Can_request_get_with_header_on_client() + { + var client = new RestClient + { + Authority = "https://api.twitter.com", + UserAgent = "Hammock", + Path = "statuses/public_timeline.json", + DecompressionMethods = DecompressionMethods.GZip | DecompressionMethods.Deflate + }; + + client.AddHeader("Accept", "application/json"); + + var response = client.Request(); + + Assert.IsNotNull(response); + Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); + } + + [Test] + public void Can_get_oauth_request_token() + { + var client = new RestClient + { + Authority = "https://api.twitter.com", + UserAgent = "Hammock" + }; + + var request = new RestRequest + { + Path = "oauth/request_token", + Credentials = OAuthCredentials.ForRequestToken(_consumerKey, _consumerSecret) + }; + + var response = client.Request(request); + Assert.IsNotNull(response); + Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); + + Trace.WriteLine(response.Content); + } + + [Test] + public void Can_post_to_protected_resource() + { + var client = new RestClient + { + Authority = "https://api.twitter.com", + VersionPath = "1", + UserAgent = "Hammock" + }; + + var request = new RestRequest + { + Method = WebMethod.Post, + Path = "statuses/update.json?status=" + DateTime.Now.Ticks, + Credentials = OAuthCredentials.ForProtectedResource( + _consumerKey, _consumerSecret, _accessToken, _accessTokenSecret + ) + }; + + var response = client.Request(request); + Assert.IsNotNull(response); + Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); + } + + [Test] + public void Can_post_raw_content() + { + var client = new RestClient {Authority = "http://www.apitize.com"}; + var request = new RestRequest(); + request.AddPostContent(Encoding.UTF8.GetBytes("Babbabooey!")); + + client.Request(request); + } + + [Test] + public void Can_stream_photo_over_delegated_credentials() + { + var client = new RestClient + { + Authority = "http://api.twitpic.com", + VersionPath = "2", + UserAgent = "Hammock" + }; + + var request = PrepareEchoRequest(); + request.Method = WebMethod.Get; + request.Path = "upload.xml"; + request.AddField("key", _twitPicKey); + request.AddFile("media", "failwhale", "_failwhale.jpg", "image/jpeg"); + + var response = client.Request(request); + Assert.IsNotNull(response); + Console.WriteLine(response.Content); + } + + [Test] + [Ignore("Makes a live status update")] + public void Can_prepare_oauth_with_url_parameters() + { + var client = new RestClient + { + Authority = "http://api.twitter.com", + UserAgent = "Hammock" + }; + + var credentials = OAuthCredentials.ForProtectedResource(_consumerKey, _consumerSecret, _accessToken, _accessTokenSecret); + credentials.ParameterHandling = OAuthParameterHandling.UrlOrPostParameters; + + var request = new RestRequest + { + Path = "statuses/update.json", + Method = WebMethod.Post, + Credentials = credentials + }; + + request.AddParameter("status", DateTime.Now.Ticks.ToString()); + request.AddParameter("test", "value"); + + var response = client.Request(request); + Assert.IsNotNull(response); + + Console.WriteLine(response.Content); + + Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); + } + +#if NET40 + [Test] + public void Can_make_dynamic_request_for_collection() + { + var client = new RestClient + { + Authority = "https://api.twitter.com", + UserAgent = "Hammock" + }; + + var request = new RestRequest + { + Path = "statuses/public_timeline.json", + Method = WebMethod.Get + }; + + var response = client.RequestDynamic(request); + Assert.IsNotNull(response); + foreach (var tweet in response.ContentEntity) + { + Assert.IsNotNull(tweet); + Assert.IsNotNullOrEmpty(tweet.Text); + + Can_handle_nested_dynamic_json(tweet); + + Console.WriteLine(tweet.Text); + } + } + + private static void Can_handle_nested_dynamic_json(dynamic tweet) + { + var firstLevel = tweet.User; + Assert.IsNotNull(firstLevel); + + var secondLevel = firstLevel.ScreenName; + Assert.IsNotNull(secondLevel); + } + + [Test] + public void Can_make_dynamic_request_for_single() + { + var client = new RestClient + { + Authority = "https://api.twitter.com", + UserAgent = "Hammock" + }; + + var request = new RestRequest + { + Path = "users/show.json?screen_name=hammockrest", + Method = WebMethod.Get + }; + + var response = client.RequestDynamic(request).ContentEntity; + Assert.IsNotNull(response); + Assert.IsNotNull(response.ScreenName); + } +#endif + + public RestRequest PrepareEchoRequest() + { + var client = new RestClient + { + Authority = "https://api.twitter.com", + VersionPath = "1", + UserAgent = "TweetSharp" + }; + + var request = new RestRequest + { + Method = WebMethod.Get, + Path = "account/verify_credentials.json", + Credentials = OAuthCredentials.ForProtectedResource( + _consumerKey, _consumerSecret, _accessToken, _accessTokenSecret + ) + }; + + return OAuthCredentials.DelegateWith(client, request); + } + } +} + + diff --git a/trunk/hammock/src/net35/Hammock.Tests/_failwhale.jpg b/trunk/hammock/src/net35/Hammock.Tests/_failwhale.jpg new file mode 100644 index 0000000000000000000000000000000000000000..115c47110cb588b30f403be6abe0ec924ed03866 GIT binary patch literal 97982 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 literal 0 HcmV?d00001 diff --git a/trunk/hammock/src/net35/Hammock.Tests/_profile.jpg b/trunk/hammock/src/net35/Hammock.Tests/_profile.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a550bbbe8229c344f8feea061d366d16cf684035 GIT binary patch literal 4114 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 N-2>d!ptrx6{14y3m`nfw literal 0 HcmV?d00001 diff --git a/trunk/hammock/src/net35/Hammock.Tests/app.config b/trunk/hammock/src/net35/Hammock.Tests/app.config new file mode 100644 index 0000000..56494ae --- /dev/null +++ b/trunk/hammock/src/net35/Hammock.Tests/app.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock.Tests/app.config.example b/trunk/hammock/src/net35/Hammock.Tests/app.config.example new file mode 100644 index 0000000..56494ae --- /dev/null +++ b/trunk/hammock/src/net35/Hammock.Tests/app.config.example @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock.Tests/key.snk b/trunk/hammock/src/net35/Hammock.Tests/key.snk new file mode 100644 index 0000000000000000000000000000000000000000..ed404cd2b98794be9654705e03f356546393f826 GIT binary patch literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50097rX2mggb`z#srv=C&u+tgpp^FW^M**Pm zRQO}lqnc-@hC)KUY6}|R0cKtk;e9lD=(rwB+as(MXDb+_+G52=`KS_Isyvj`Lv>t; zyv1GdtazzRJ@~Ikqx~TP`bG%Rj^JO-mWk-SOVW*S-BQylz(lnRD^aU;42ZrfNBOmJ z+wu|=RKI)(tf=kVs&r1#mU7ia^YtqD_N!R!)Mb<04J(7v0b9Z5@VQ zC~!{_9Az!Ik)85nzpjNic*BZ(iJSs=#CEi_EvxKd8YjX}1j8+N2zqaVEoTb{xxA?( zVt8G+Ou_+Iw{;ElEmyRR47jL`4u7RS+VW6jwp=Ns#vPw_+s*hGzc&Int6mW=r8E?B z)qgXtnZUe(Tz`ffc*>2e+Br!=fqNzeZTr56NZVVsD%VFGDVkAw@hwc5(-@Qd=aTqV z(nhX4LsE@8Bh?ITr5k1jJOPeVdipW-lxZ`6M6%|*SG?o?o}O<)9!yjl130Go;PJF4 iINMdx^S=SKvcAYJIsZ6c08B+-O^Q|BqJw=PJm;e#=pQ8j literal 0 HcmV?d00001 diff --git a/trunk/hammock/src/net35/Hammock/Attributes/INamedAttribute.cs b/trunk/hammock/src/net35/Hammock/Attributes/INamedAttribute.cs new file mode 100644 index 0000000..743e89b --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Attributes/INamedAttribute.cs @@ -0,0 +1,7 @@ +namespace Hammock.Attributes +{ + internal interface INamedAttribute + { + string Name { get; } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Attributes/IValidatingAttribute.cs b/trunk/hammock/src/net35/Hammock/Attributes/IValidatingAttribute.cs new file mode 100644 index 0000000..e83c5e1 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Attributes/IValidatingAttribute.cs @@ -0,0 +1,9 @@ +using System.Reflection; + +namespace Hammock.Attributes +{ + public interface IValidatingAttribute + { + string TransformValue(PropertyInfo property, object value); + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Attributes/Specialized/EntityAttribute.cs b/trunk/hammock/src/net35/Hammock/Attributes/Specialized/EntityAttribute.cs new file mode 100644 index 0000000..9b6a5cf --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Attributes/Specialized/EntityAttribute.cs @@ -0,0 +1,21 @@ +using System; +using System.Text; + +namespace Hammock.Attributes.Specialized +{ +#if !SILVERLIGHT + [Serializable] +#endif + [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)] + public class EntityAttribute : Attribute + { + public EntityAttribute() + { + ContentType = "text/xml"; + ContentEncoding = Encoding.UTF8; + } + + public virtual string ContentType { get; private set; } + public virtual Encoding ContentEncoding { get; set; } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Attributes/Specialized/HeaderAttribute.cs b/trunk/hammock/src/net35/Hammock/Attributes/Specialized/HeaderAttribute.cs new file mode 100644 index 0000000..503b058 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Attributes/Specialized/HeaderAttribute.cs @@ -0,0 +1,22 @@ +using System; + +namespace Hammock.Attributes.Specialized +{ +#if !SILVERLIGHT + [Serializable] +#endif + [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)] + public class HeaderAttribute : Attribute, INamedAttribute + { + public HeaderAttribute(string name) + { + Name = name; + } + + #region INamedAttribute Members + + public virtual string Name { get; private set; } + + #endregion + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Attributes/Specialized/ParameterAttribute.cs b/trunk/hammock/src/net35/Hammock/Attributes/Specialized/ParameterAttribute.cs new file mode 100644 index 0000000..84ca1d6 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Attributes/Specialized/ParameterAttribute.cs @@ -0,0 +1,22 @@ +using System; + +namespace Hammock.Attributes.Specialized +{ +#if !SILVERLIGHT + [Serializable] +#endif + [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)] + public class ParameterAttribute : Attribute, INamedAttribute + { + public ParameterAttribute(string name) + { + Name = name; + } + + #region INamedAttribute Members + + public virtual string Name { get; private set; } + + #endregion + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Attributes/Specialized/UserAgentAttribute.cs b/trunk/hammock/src/net35/Hammock/Attributes/Specialized/UserAgentAttribute.cs new file mode 100644 index 0000000..2f19a11 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Attributes/Specialized/UserAgentAttribute.cs @@ -0,0 +1,13 @@ +using System; + +namespace Hammock.Attributes.Specialized +{ +#if !SILVERLIGHT + [Serializable] +#endif + [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)] + public class UserAgentAttribute : Attribute + { + + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Attributes/Specialized/_Specialized.cd b/trunk/hammock/src/net35/Hammock/Attributes/Specialized/_Specialized.cd new file mode 100644 index 0000000..cd445b3 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Attributes/Specialized/_Specialized.cd @@ -0,0 +1,46 @@ + + + + + + AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA= + Attributes\Specialized\HeaderAttribute.cs + + + + + + + AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA= + Attributes\Specialized\ParameterAttribute.cs + + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Attributes\Specialized\UserAgentAttribute.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAACA= + Attributes\Specialized\EntityAttribute.cs + + + + + + + + + + + AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA= + Attributes\INamedAttribute.cs + + + + \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Attributes/Validation/BooleanToIntegerAttribute.cs b/trunk/hammock/src/net35/Hammock/Attributes/Validation/BooleanToIntegerAttribute.cs new file mode 100644 index 0000000..cf3eef4 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Attributes/Validation/BooleanToIntegerAttribute.cs @@ -0,0 +1,31 @@ +using System; +using System.Reflection; + +namespace Hammock.Attributes.Validation +{ +#if !SILVERLIGHT + [Serializable] +#endif + public class BooleanToIntegerAttribute : ValidationAttribute + { + public override string TransformValue(PropertyInfo property, object value) + { +#if !Smartphone && !NETCF + bool result; + return bool.TryParse(value.ToString(), out result) + ? result ? "1" : "0" + : base.TransformValue(property, value); +#else + try + { + var result = bool.Parse(value.ToString()); + return result ? "1" : "0"; + } + catch (Exception) + { + return base.TransformValue(property, value); + } +#endif + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Attributes/Validation/DateTimeFormatAttribute.cs b/trunk/hammock/src/net35/Hammock/Attributes/Validation/DateTimeFormatAttribute.cs new file mode 100644 index 0000000..ce63f45 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Attributes/Validation/DateTimeFormatAttribute.cs @@ -0,0 +1,40 @@ +using System; +using Hammock.Extensions; + +namespace Hammock.Attributes.Validation +{ +#if !SILVERLIGHT + [Serializable] +#endif + public class DateTimeFormatAttribute : ValidationAttribute + { + public DateTimeFormatAttribute(string format) + { + Format = format; + } + + public string Format { get; private set; } + + public override string TransformValue(System.Reflection.PropertyInfo property, object value) + { +#if !Smartphone && !NETCF + DateTime result; + return DateTime.TryParse(value.ToString(), out result) && !Format.IsNullOrBlank() + ? result.ToString(Format) + : base.TransformValue(property, value); +#else + try + { + var result = DateTime.Parse(value.ToString()); + return Format.IsNullOrBlank() + ? result.ToString(Format) + : base.TransformValue(property, value); + } + catch (Exception) + { + return base.TransformValue(property, value); + } +#endif + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Attributes/Validation/RequiredAttribute.cs b/trunk/hammock/src/net35/Hammock/Attributes/Validation/RequiredAttribute.cs new file mode 100644 index 0000000..a83d2c2 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Attributes/Validation/RequiredAttribute.cs @@ -0,0 +1,22 @@ +using System; +using Hammock.Extensions; +using Hammock.Validation; + +namespace Hammock.Attributes.Validation +{ +#if !SILVERLIGHT + [Serializable] +#endif + public class RequiredAttribute : ValidationAttribute + { + public override string TransformValue(System.Reflection.PropertyInfo property, object value) + { + if(value == null) + { + var message = "The property {0} is required, but was null.".FormatWith(property.Name); + throw new ValidationException(message); + } + return base.TransformValue(property, value); + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Attributes/Validation/SpecificationAttribute.cs b/trunk/hammock/src/net35/Hammock/Attributes/Validation/SpecificationAttribute.cs new file mode 100644 index 0000000..20fd499 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Attributes/Validation/SpecificationAttribute.cs @@ -0,0 +1,39 @@ +using System; +using Hammock.Extensions; +using Hammock.Specifications; +using Hammock.Validation; + +namespace Hammock.Attributes.Validation +{ +#if !SILVERLIGHT + [Serializable] +#endif + public class SpecificationAttribute : ValidationAttribute + { + public SpecificationAttribute(Type specificationType) + { + if (!specificationType.Implements(typeof (ISpecification))) + { + throw new ValidationException("You must provide a valid specification type."); + } + + SpecificationType = specificationType as ISpecification; + } + + public ISpecification SpecificationType { get; private set; } + + public override string TransformValue(System.Reflection.PropertyInfo property, object value) + { + if(SpecificationType != null && !value.Satisfies(SpecificationType)) + { + var message = + "The value for '{0}' does not satisfy {1}." + .FormatWith(property.Name, SpecificationType); + + throw new ValidationException(message); + } + + return base.TransformValue(property, value); + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Attributes/Validation/ValidationAttribute.cs b/trunk/hammock/src/net35/Hammock/Attributes/Validation/ValidationAttribute.cs new file mode 100644 index 0000000..18c71dc --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Attributes/Validation/ValidationAttribute.cs @@ -0,0 +1,19 @@ +using System; +using System.Reflection; + +namespace Hammock.Attributes.Validation +{ +#if !SILVERLIGHT + [Serializable] +#endif + [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)] + public class ValidationAttribute : Attribute, IValidatingAttribute + { + public virtual string TransformValue(PropertyInfo property, object value) + { + return value.ToString(); + } + } +} + + diff --git a/trunk/hammock/src/net35/Hammock/Attributes/Validation/_Validation.cd b/trunk/hammock/src/net35/Hammock/Attributes/Validation/_Validation.cd new file mode 100644 index 0000000..2927464 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Attributes/Validation/_Validation.cd @@ -0,0 +1,40 @@ + + + + + + AAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAA= + Attributes\Validation\BooleanToIntegerAttribute.cs + + + + + + AAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAA= + Attributes\Validation\RequiredAttribute.cs + + + + + + AAAAAAAAAAAAAAAAACAAAAAAAAgAAAAAAAAAAAAAAAA= + Attributes\Validation\DateTimeFormatAttribute.cs + + + + + + AAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAI= + Attributes\Validation\SpecificationAttribute.cs + + + + + + AAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAA= + Attributes\Validation\ValidationAttribute.cs + + + + + \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Authentication/Basic/BasicAuthCredentials.cs b/trunk/hammock/src/net35/Hammock/Authentication/Basic/BasicAuthCredentials.cs new file mode 100644 index 0000000..56ee10c --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Authentication/Basic/BasicAuthCredentials.cs @@ -0,0 +1,40 @@ +using System; +using Hammock.Extensions; +using Hammock.Web; + +namespace Hammock.Authentication.Basic +{ +#if !SILVERLIGHT + [Serializable] +#endif + public class BasicAuthCredentials : IWebCredentials + { + public virtual string Username { get; set; } + public virtual string Password { get; set; } + + public WebQuery GetQueryFor(string url, RestBase request, IWebQueryInfo info, WebMethod method, bool enableTrace) + { + return GetQueryForImpl(info, enableTrace); + } + + public WebQuery GetQueryFor(string url, WebParameterCollection parameters, IWebQueryInfo info, WebMethod method, bool enableTrace) + { + return GetQueryForImpl(info, enableTrace); + } + + private WebQuery GetQueryForImpl(IWebQueryInfo info, bool enableTrace) + { + return HasAuth + ? new BasicAuthWebQuery(info, Username, Password, enableTrace) + : new BasicAuthWebQuery(info, enableTrace); + } + + public virtual bool HasAuth + { + get + { + return !Username.IsNullOrBlank() && !Password.IsNullOrBlank(); + } + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Authentication/IWebCredentials.cs b/trunk/hammock/src/net35/Hammock/Authentication/IWebCredentials.cs new file mode 100644 index 0000000..80cc20e --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Authentication/IWebCredentials.cs @@ -0,0 +1,19 @@ +using Hammock.Web; + +namespace Hammock.Authentication +{ + public interface IWebCredentials + { + WebQuery GetQueryFor(string url, + RestBase request, + IWebQueryInfo info, + WebMethod method, + bool enableTrace); + + WebQuery GetQueryFor(string url, + WebParameterCollection parameters, + IWebQueryInfo info, + WebMethod method, + bool enableTrace); + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthCredentials.cs b/trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthCredentials.cs new file mode 100644 index 0000000..2470223 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthCredentials.cs @@ -0,0 +1,214 @@ +using System; +using Hammock.Web; + +#if SILVERLIGHT +using Hammock.Silverlight.Compat; +#endif + +namespace Hammock.Authentication.OAuth +{ +#if !SILVERLIGHT + [Serializable] +#endif + public class OAuthCredentials : IWebCredentials + { + public virtual string ConsumerKey { get; set; } + public virtual string ConsumerSecret { get; set; } + public virtual OAuthParameterHandling ParameterHandling { get; set; } + public virtual OAuthSignatureMethod SignatureMethod { get; set; } + public virtual OAuthSignatureTreatment SignatureTreatment { get; set; } + public virtual OAuthType Type { get; set; } + + public virtual string Token { get; set; } + public virtual string TokenSecret { get; set; } + public virtual string Verifier { get; set; } + public virtual string ClientUsername { get; set; } + public virtual string ClientPassword { get; set; } + public virtual string CallbackUrl { get; set; } + public virtual string Version { get; set; } + public virtual string SessionHandle { get; set; } + + public static RestRequest DelegateWith(RestClient client, RestRequest request) + { + if(request == null) + { + throw new ArgumentNullException("request"); + } + + if(!request.Method.HasValue) + { + throw new ArgumentException("Request must specify a web method."); + } + + var method = request.Method.Value; + var credentials = (OAuthCredentials)request.Credentials; + var url = request.BuildEndpoint(client).ToString(); + var workflow = new OAuthWorkflow(credentials); + var uri = new Uri(client.Authority); + var realm = uri.Host; + var enableTrace = client.TraceEnabled || request.TraceEnabled; + + var info = workflow.BuildProtectedResourceInfo(method, request.GetAllHeaders(), url); + var query = credentials.GetQueryFor(url, request, info, method, enableTrace); + ((OAuthWebQuery) query).Realm = realm; + var auth = query.GetAuthorizationContent(); + + var echo = new RestRequest(); + echo.AddHeader("X-Auth-Service-Provider", url); + echo.AddHeader("X-Verify-Credentials-Authorization", auth); + return echo; + } + + public static OAuthCredentials ForRequestToken(string consumerKey, string consumerSecret) + { + var credentials = new OAuthCredentials + { + Type = OAuthType.RequestToken, + ParameterHandling = OAuthParameterHandling.HttpAuthorizationHeader, + SignatureMethod = OAuthSignatureMethod.HmacSha1, + SignatureTreatment = OAuthSignatureTreatment.Escaped, + ConsumerKey = consumerKey, + ConsumerSecret = consumerSecret + }; + return credentials; + } + + public static OAuthCredentials ForRequestToken(string consumerKey, string consumerSecret, string callbackUrl) + { + var credentials = ForRequestToken(consumerKey, consumerSecret); + credentials.CallbackUrl = callbackUrl; + return credentials; + } + + public static OAuthCredentials ForAccessToken(string consumerKey, string consumerSecret, string requestToken, string requestTokenSecret) + { + var credentials = new OAuthCredentials + { + Type = OAuthType.AccessToken, + ParameterHandling = OAuthParameterHandling.HttpAuthorizationHeader, + SignatureMethod = OAuthSignatureMethod.HmacSha1, + SignatureTreatment = OAuthSignatureTreatment.Escaped, + ConsumerKey = consumerKey, + ConsumerSecret = consumerSecret, + Token = requestToken, + TokenSecret = requestTokenSecret + }; + return credentials; + } + + public static OAuthCredentials ForAccessToken(string consumerKey, string consumerSecret, string requestToken, string requestTokenSecret, string verifier) + { + var credentials = ForAccessToken(consumerKey, consumerSecret, requestToken, requestTokenSecret); + credentials.Verifier = verifier; + return credentials; + } + + public static OAuthCredentials ForAccessTokenRefresh(string consumerKey, string consumerSecret, string accessToken, string accessTokenSecret, string sessionHandle) + { + var credentials = ForAccessToken(consumerKey, consumerSecret, accessToken, accessTokenSecret); + credentials.SessionHandle = sessionHandle; + return credentials; + } + + public static OAuthCredentials ForAccessTokenRefresh(string consumerKey, string consumerSecret, string accessToken, string accessTokenSecret, string sessionHandle, string verifier) + { + var credentials = ForAccessToken(consumerKey, consumerSecret, accessToken, accessTokenSecret); + credentials.SessionHandle = sessionHandle; + credentials.Verifier = verifier; + return credentials; + } + + public static OAuthCredentials ForClientAuthentication(string consumerKey, string consumerSecret, string username, string password) + { + var credentials = new OAuthCredentials + { + Type = OAuthType.ClientAuthentication, + ParameterHandling = OAuthParameterHandling.HttpAuthorizationHeader, + SignatureMethod = OAuthSignatureMethod.HmacSha1, + SignatureTreatment = OAuthSignatureTreatment.Escaped, + ConsumerKey = consumerKey, + ConsumerSecret = consumerSecret, + ClientUsername = username, + ClientPassword = password + }; + + return credentials; + } + + public static OAuthCredentials ForProtectedResource(string consumerKey, string consumerSecret, string accessToken, string accessTokenSecret) + { + var credentials = new OAuthCredentials + { + Type = OAuthType.ProtectedResource, + ParameterHandling = OAuthParameterHandling.HttpAuthorizationHeader, + SignatureMethod = OAuthSignatureMethod.HmacSha1, + SignatureTreatment = OAuthSignatureTreatment.Escaped, + ConsumerKey = consumerKey, + ConsumerSecret = consumerSecret, + Token = accessToken, + TokenSecret = accessTokenSecret + }; + return credentials; + } + + public virtual WebQuery GetQueryFor(string url, + WebParameterCollection parameters, + IWebQueryInfo info, + WebMethod method, + bool enableTrace) + { + OAuthWebQueryInfo oauth; + + var workflow = new OAuthWorkflow + { + ConsumerKey = ConsumerKey, + ConsumerSecret = ConsumerSecret, + ParameterHandling = ParameterHandling, + SignatureMethod = SignatureMethod, + SignatureTreatment = SignatureTreatment, + CallbackUrl = CallbackUrl, + ClientPassword = ClientPassword, + ClientUsername = ClientUsername, + Verifier = Verifier, + Token = Token, + TokenSecret = TokenSecret, + Version = Version ?? "1.0", + SessionHandle = SessionHandle + }; + + switch (Type) + { + case OAuthType.RequestToken: + workflow.RequestTokenUrl = url; + oauth = workflow.BuildRequestTokenInfo(method, parameters); + break; + case OAuthType.AccessToken: + workflow.AccessTokenUrl = url; + oauth = workflow.BuildAccessTokenInfo(method, parameters); + break; + case OAuthType.ClientAuthentication: + method = WebMethod.Post; + workflow.AccessTokenUrl = url; + oauth = workflow.BuildClientAuthAccessTokenInfo(method, parameters); + break; + case OAuthType.ProtectedResource: + oauth = workflow.BuildProtectedResourceInfo(method, parameters, url); + oauth.FirstUse = true; + break; + default: + throw new ArgumentOutOfRangeException(); + } + + return new OAuthWebQuery(oauth, enableTrace); + } + + public virtual WebQuery GetQueryFor(string url, RestBase request, IWebQueryInfo info, WebMethod method, bool enableTrace) + { + var query = GetQueryFor(url, request.Parameters, info, method, enableTrace); + request.Method = method; + return query; + } + } +} + + diff --git a/trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthParameterHandling.cs b/trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthParameterHandling.cs new file mode 100644 index 0000000..189a560 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthParameterHandling.cs @@ -0,0 +1,35 @@ +using System; +using System.Runtime.Serialization; + +namespace Hammock.Authentication.OAuth +{ +#if !SILVERLIGHT + [Serializable] +#endif + public enum OAuthParameterHandling + { +#if !SILVERLIGHT && !Smartphone && !ClientProfiles && !NET20 && !MonoTouch && !NETCF + [EnumMember] HttpAuthorizationHeader, + [EnumMember] UrlOrPostParameters +#else + HttpAuthorizationHeader, + UrlOrPostParameters +#endif + } + +#if !SILVERLIGHT + [Serializable] +#endif + public enum OAuthSignatureTreatment + { +#if !SILVERLIGHT && !Smartphone && !ClientProfiles && !NET20 && !MonoTouch && !NETCF + [EnumMember] + Escaped, + [EnumMember] + Unescaped +#else + Escaped, + Unescaped +#endif + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthSignatureMethod.cs b/trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthSignatureMethod.cs new file mode 100644 index 0000000..b665c2c --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthSignatureMethod.cs @@ -0,0 +1,21 @@ +using System; +using System.Runtime.Serialization; + +namespace Hammock.Authentication.OAuth +{ +#if !SILVERLIGHT + [Serializable] +#endif + public enum OAuthSignatureMethod + { +#if !SILVERLIGHT && !Smartphone && !ClientProfiles && !NET20 && !MonoTouch && !NETCF + [EnumMember] HmacSha1, + [EnumMember] PlainText, + [EnumMember] RsaSha1 +#else + HmacSha1, + PlainText, + RsaSha1 +#endif + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthToken.cs b/trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthToken.cs new file mode 100644 index 0000000..eddb6d5 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthToken.cs @@ -0,0 +1,17 @@ +using System; + +namespace Hammock.Authentication.OAuth +{ +#if !SILVERLIGHT + [Serializable] +#endif + public class OAuthToken + { + public virtual string Token { get; set; } + public virtual string TokenSecret { get; set; } + public virtual string Verifier { get; set; } + public virtual bool CallbackConfirmed { get; set; } + public virtual string UserId { get; set; } + public virtual string ScreenName { get; set; } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthTools.cs b/trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthTools.cs new file mode 100644 index 0000000..cf6997c --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthTools.cs @@ -0,0 +1,315 @@ +using System; +using System.Linq; +using System.Security.Cryptography; +using System.Text; +using Hammock.Extensions; +using Hammock.Web; + +#if NETCF +using Hammock.Security.Cryptography; +#endif + +namespace Hammock.Authentication.OAuth +{ +#if !SILVERLIGHT + [Serializable] +#endif + public static class OAuthTools + { + private const string AlphaNumeric = Upper + Lower + Digit; + private const string Digit = "1234567890"; + private const string Lower = "abcdefghijklmnopqrstuvwxyz"; + private const string Unreserved = AlphaNumeric + "-._~"; + private const string Upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + + private static readonly Random _random; + private static readonly object _randomLock = new object(); + +#if !SILVERLIGHT + private static readonly RandomNumberGenerator _rng = + RandomNumberGenerator.Create(); +#endif + + static OAuthTools() + { +#if !SILVERLIGHT + var bytes = new byte[4]; + _rng.GetNonZeroBytes(bytes); + _random = new Random(BitConverter.ToInt32(bytes, 0)); +#else + _random = new Random(); +#endif + } + + /// + /// All text parameters are UTF-8 encoded (per section 5.1). + /// + /// + private static readonly Encoding _encoding = Encoding.UTF8; + + /// + /// Generates a random 16-byte lowercase alphanumeric string. + /// + /// + /// + public static string GetNonce() + { + const string chars = (Lower + Digit); + + var nonce = new char[16]; + lock (_randomLock) + { + for (var i = 0; i < nonce.Length; i++) + { + nonce[i] = chars[_random.Next(0, chars.Length)]; + } + } + return new string(nonce); + } + + /// + /// Generates a timestamp based on the current elapsed seconds since '01/01/1970 0000 GMT" + /// + /// + /// + public static string GetTimestamp() + { + return GetTimestamp(DateTime.UtcNow); + } + + /// + /// Generates a timestamp based on the elapsed seconds of a given time since '01/01/1970 0000 GMT" + /// + /// + /// A specified point in time. + /// + public static string GetTimestamp(DateTime dateTime) + { + var timestamp = dateTime.ToUnixTime(); + return timestamp.ToString(); + } + + /// + /// URL encodes a string based on section 5.1 of the OAuth spec. + /// Namely, percent encoding with [RFC3986], avoiding unreserved characters, + /// upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + /// + /// + /// + public static string UrlEncodeRelaxed(string value) + { + var escaped = Uri.EscapeDataString(value); + + // LinkedIn users have problems because it requires escaping brackets + escaped = escaped.Replace("(", "(".PercentEncode()) + .Replace(")", ")".PercentEncode()); + + return escaped; + } + + /// + /// URL encodes a string based on section 5.1 of the OAuth spec. + /// Namely, percent encoding with [RFC3986], avoiding unreserved characters, + /// upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + /// + /// + /// + public static string UrlEncodeStrict(string value) + { + // [JD]: We need to escape the apostrophe as well or the signature will fail + var original = value; + var ret = original.Where( + c => !Unreserved.Contains(c) && c != '%').Aggregate( + value, (current, c) => current.Replace( + c.ToString(), c.ToString().PercentEncode() + )); + + return ret.Replace("%%", "%25%"); // Revisit to encode actual %'s + } + + /// + /// Sorts a collection of key-value pairs by name, and then value if equal, + /// concatenating them into a single string. This string should be encoded + /// prior to, or after normalization is run. + /// + /// + /// + /// + public static string NormalizeRequestParameters(WebParameterCollection parameters) + { + var copy = SortParametersExcludingSignature(parameters); + var concatenated = copy.Concatenate("=", "&"); + return concatenated; + } + + /// + /// Sorts a by name, and then value if equal. + /// + /// A collection of parameters to sort + /// A sorted parameter collection + public static WebParameterCollection SortParametersExcludingSignature(WebParameterCollection parameters) + { + var copy = new WebParameterCollection(parameters); + var exclusions = copy.Where(n => n.Name.EqualsIgnoreCase("oauth_signature")); + + copy.RemoveAll(exclusions); + copy.ForEach(p => p.Value = UrlEncodeStrict(p.Value)); + copy.Sort((x, y) => x.Name.Equals(y.Name) ? x.Value.CompareTo(y.Value) : x.Name.CompareTo(y.Name)); + return copy; + } + + /// + /// Creates a request URL suitable for making OAuth requests. + /// Resulting URLs must exclude port 80 or port 443 when accompanied by HTTP and HTTPS, respectively. + /// Resulting URLs must be lower case. + /// + /// + /// The original request URL + /// + public static string ConstructRequestUrl(Uri url) + { + if (url == null) + { + throw new ArgumentNullException("url"); + } + + var sb = new StringBuilder(); + + var requestUrl = "{0}://{1}".FormatWith(url.Scheme, url.Host); + var qualified = ":{0}".FormatWith(url.Port); + var basic = url.Scheme == "http" && url.Port == 80; + var secure = url.Scheme == "https" && url.Port == 443; + + sb.Append(requestUrl); + sb.Append(!basic && !secure ? qualified : ""); + sb.Append(url.AbsolutePath); + + return sb.ToString(); //.ToLower(); + } + + /// + /// Creates a request elements concatentation value to send with a request. + /// This is also known as the signature base. + /// + /// + /// + /// The request's HTTP method type + /// The request URL + /// The request's parameters + /// A signature base string + public static string ConcatenateRequestElements(WebMethod method, string url, WebParameterCollection parameters) + { + var sb = new StringBuilder(); + + // Separating &'s are not URL encoded + var requestMethod = method.ToUpper().Then("&"); + var requestUrl = UrlEncodeRelaxed(ConstructRequestUrl(url.AsUri())).Then("&"); + var requestParameters = UrlEncodeRelaxed(NormalizeRequestParameters(parameters)); + + sb.Append(requestMethod); + sb.Append(requestUrl); + sb.Append(requestParameters); + + return sb.ToString(); + } + + /// + /// Creates a signature value given a signature base and the consumer secret. + /// This method is used when the token secret is currently unknown. + /// + /// + /// The hashing method + /// The signature base + /// The consumer key + /// + public static string GetSignature(OAuthSignatureMethod signatureMethod, + string signatureBase, + string consumerSecret) + { + return GetSignature(signatureMethod, OAuthSignatureTreatment.Escaped, signatureBase, consumerSecret, null); + } + + /// + /// Creates a signature value given a signature base and the consumer secret. + /// This method is used when the token secret is currently unknown. + /// + /// + /// The hashing method + /// The treatment to use on a signature value + /// The signature base + /// The consumer key + /// + public static string GetSignature(OAuthSignatureMethod signatureMethod, + OAuthSignatureTreatment signatureTreatment, + string signatureBase, + string consumerSecret) + { + return GetSignature(signatureMethod, signatureTreatment, signatureBase, consumerSecret, null); + } + + /// + /// Creates a signature value given a signature base and the consumer secret and a known token secret. + /// + /// + /// The hashing method + /// The signature base + /// The consumer secret + /// The token secret + /// + public static string GetSignature(OAuthSignatureMethod signatureMethod, + string signatureBase, + string consumerSecret, + string tokenSecret) + { + return GetSignature(signatureMethod, OAuthSignatureTreatment.Escaped, consumerSecret, tokenSecret); + } + + /// + /// Creates a signature value given a signature base and the consumer secret and a known token secret. + /// + /// + /// The hashing method + /// The treatment to use on a signature value + /// The signature base + /// The consumer secret + /// The token secret + /// + public static string GetSignature(OAuthSignatureMethod signatureMethod, + OAuthSignatureTreatment signatureTreatment, + string signatureBase, + string consumerSecret, + string tokenSecret) + { + if (tokenSecret.IsNullOrBlank()) + { + tokenSecret = String.Empty; + } + + consumerSecret = UrlEncodeRelaxed(consumerSecret); + tokenSecret = UrlEncodeRelaxed(tokenSecret); + + string signature; + switch (signatureMethod) + { + case OAuthSignatureMethod.HmacSha1: + { + var crypto = new HMACSHA1(); + var key = "{0}&{1}".FormatWith(consumerSecret, tokenSecret); + + crypto.Key = _encoding.GetBytes(key); + signature = signatureBase.HashWith(crypto); + + break; + } + default: + throw new NotImplementedException("Only HMAC-SHA1 is currently supported."); + } + + var result = signatureTreatment == OAuthSignatureTreatment.Escaped + ? UrlEncodeRelaxed(signature) + : signature; + + return result; + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthType.cs b/trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthType.cs new file mode 100644 index 0000000..dbf803a --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthType.cs @@ -0,0 +1,23 @@ +using System; +using System.Runtime.Serialization; + +namespace Hammock.Authentication.OAuth +{ +#if !SILVERLIGHT + [Serializable] +#endif + public enum OAuthType + { +#if !SILVERLIGHT && !Smartphone && !ClientProfiles && !NET20 && !MonoTouch && !NETCF + [EnumMember] RequestToken, + [EnumMember] AccessToken, + [EnumMember] ProtectedResource, + [EnumMember] ClientAuthentication +#else + RequestToken, + AccessToken, + ProtectedResource, + ClientAuthentication +#endif + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthWebQuery.cs b/trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthWebQuery.cs new file mode 100644 index 0000000..9aaded1 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthWebQuery.cs @@ -0,0 +1,441 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Net; +using System.Text; +using Hammock.Caching; +using Hammock.Extensions; +using Hammock.Web; + +#if SILVERLIGHT +using Hammock.Silverlight.Compat; +#endif + +namespace Hammock.Authentication.OAuth +{ +#if !SILVERLIGHT + [Serializable] +#endif + public class OAuthWebQuery : WebQuery + { + public virtual string Realm { get; set; } + public virtual OAuthParameterHandling ParameterHandling { get; private set; } + private bool _recalculate; + + public OAuthWebQuery(OAuthWebQueryInfo info, bool enableTrace) : base(info, enableTrace) + { + Initialize(info); + } + + private void Initialize(OAuthWebQueryInfo info) + { + Method = info.WebMethod; + ParameterHandling = info.ParameterHandling; + if(info.FirstUse) + { + _recalculate = false; + } + } + + protected override Func BeforeBuildPostOrPutFormWebRequest() + { + return post => + { + post = AppendParameters(post); + + return post; + }; + } + + protected override byte[] BuildPostOrPutContent(WebRequest request, string post) + { + var content = PostProcessPostParameters(request, post.AsUri()); +#if TRACE + Trace.WriteLineIf(TraceEnabled, string.Concat("\r\n", content)); +#endif + return content; + } + + protected override Func BeforeBuildGetDeleteHeadOptionsWebRequest() + { + return GetOAuthUrl; + } + + protected override Func BeforeBuildPostOrPutEntityWebRequest() + { + return GetOAuthUrl; + } + + private string GetOAuthUrl(string url) + { + // [DC]: Prior to this call, there should be no parameter encoding + url = PreProcessPostParameters(url); + + switch (ParameterHandling) + { + case OAuthParameterHandling.HttpAuthorizationHeader: + url = AppendParameters(url, true /* escape */, true /* skipOAuth */); + break; + case OAuthParameterHandling.UrlOrPostParameters: + url = GetAddressWithOAuthParameters(new Uri(url)); + break; + } + + return url; + } + + protected override string AppendParameters(string url) + { + return AppendParameters(url, true /* escape */, false /* skipOAuth */); + } + + protected virtual string AppendParameters(string url, bool escape, bool skipOAuth) + { + var parameters = 0; + foreach (var parameter in Parameters.Where( + parameter => !(parameter is HttpPostParameter) || Method == WebMethod.Post + )) + { + if (skipOAuth && parameter.Name.StartsWith("oauth_")) + { + continue; + } + + var value = escape + ? OAuthTools.UrlEncodeStrict(parameter.Value) + : parameter.Value; + + // GET parameters in URL + url = url.Then(parameters > 0 || url.Contains("?") ? "&" : "?"); + url = url.Then("{0}={1}".FormatWith(parameter.Name, value)); + parameters++; + } + + return url; + } + + private string GetAddressWithOAuthParameters(Uri address) + { + var sb = new StringBuilder("?"); + var parameters = 0; + foreach (var parameter in Parameters) + { + if (parameter.Name.IsNullOrBlank() || parameter.Value.IsNullOrBlank()) + { + continue; + } + + parameters++; + var format = parameters < Parameters.Count ? "{0}={1}&" : "{0}={1}"; + sb.Append(format.FormatWith(parameter.Name, parameter.Value)); + } + + return address + sb.ToString(); + } + + private byte[] PostProcessPostParameters(WebRequest request, Uri uri) + { + var body = ""; + switch (ParameterHandling) + { + case OAuthParameterHandling.HttpAuthorizationHeader: + SetAuthorizationHeader(request, "Authorization"); +#if SILVERLIGHT + var postParameters = new WebParameterCollection(uri.Query.ParseQueryString()); +#else + var postParameters = new WebParameterCollection(uri.Query.ParseQueryString()); +#endif + // Only use the POST parameters that exist in the body + postParameters = new WebParameterCollection(postParameters.Where(p => !p.Name.StartsWith("oauth_"))); + + // Append any leftover values to the POST body + var nonAuthParameters = GetPostParametersValue(postParameters, true /* escapeParameters */); + if (body.IsNullOrBlank()) + { + body = nonAuthParameters; + } + else + { + if (!nonAuthParameters.IsNullOrBlank()) + { + body += "&".Then(nonAuthParameters); + } + } + break; + case OAuthParameterHandling.UrlOrPostParameters: + body = GetPostParametersValue(Parameters, false /* escapeParameters */); + break; + } + + var content = Encoding.UTF8.GetBytes(body); + return content; + } + + // Removes POST parameters from query + private static string PreProcessPostParameters(string url) + { + var uri = url.AsUri(); + url = uri.Scheme.Then("://") +#if !SILVERLIGHT + .Then(uri.Authority); +#else + .Then(uri.Host); + if ((uri.Scheme.Equals("http") && uri.Port != 80) || + (uri.Scheme.Equals("https") && uri.Port != 443)) + { + url = url.Then(":" + uri.Port); + } +#endif + url = url.Then(uri.AbsolutePath); + return url; + } + + private static string GetPostParametersValue(ICollection postParameters, bool escapeParameters) + { + var body = ""; + var count = 0; + var parameters = postParameters.Where(p => !p.Name.IsNullOrBlank() && + !p.Value.IsNullOrBlank()).ToList(); + + foreach (var postParameter in parameters) + { + // [DC]: client_auth method does not function when these are escaped + var name = escapeParameters + ? OAuthTools.UrlEncodeStrict(postParameter.Name) + : postParameter.Name; + var value = escapeParameters + ? OAuthTools.UrlEncodeStrict(postParameter.Value) + : postParameter.Value; + + var token = "{0}={1}".FormatWith(name, value); + body = body.Then(token); + count++; + if (count < postParameters.Count) + { + body = body.Then("&"); + } + } + return body; + } + + protected override void AuthenticateRequest(WebRequest request) + { + switch(ParameterHandling) + { + case OAuthParameterHandling.HttpAuthorizationHeader: + SetAuthorizationHeader(request, "Authorization"); + break; + case OAuthParameterHandling.UrlOrPostParameters: + // [DC]: Handled in builder method + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + public override string GetAuthorizationContent() + { + switch (ParameterHandling) + { + case OAuthParameterHandling.HttpAuthorizationHeader: + return BuildAuthorizationHeader(); + case OAuthParameterHandling.UrlOrPostParameters: + return GetPostParametersValue(Parameters, false /* escapeParameters */); + default: + return ""; + } + } + + protected override void SetAuthorizationHeader(WebRequest request, string header) + { + request.Headers[header] = BuildAuthorizationHeader(); + } + + private string BuildAuthorizationHeader() + { + var sb = new StringBuilder("OAuth "); + if (!Realm.IsNullOrBlank()) + { + sb.Append("realm=\"{0}\",".FormatWith(OAuthTools.UrlEncodeRelaxed(Realm))); + } + + Parameters.Sort((l, r) => l.Name.CompareTo(r.Name)); + + var parameters = 0; + var pairs = Parameters.Where(parameter => !parameter.Name.IsNullOrBlank() && !parameter.Value.IsNullOrBlank() && parameter.Name.StartsWith("oauth_")); + foreach (var parameter in pairs) + { + parameters++; + var format = parameters < pairs.Count() ? "{0}=\"{1}\"," : "{0}=\"{1}\""; + sb.Append(format.FormatWith(parameter.Name, parameter.Value)); + } + + var authorization = sb.ToString(); + return authorization; + } + +#if !SILVERLIGHT + public override void Request(string url, IEnumerable parameters, out WebException exception) + { + RecalculateProtectedResourceSignature(url); + base.Request(url, parameters, out exception); + } + + public override void Request(string url, out WebException exception) + { + RecalculateProtectedResourceSignature(url); + url = RestoreUrlParams(url, Parameters); + base.Request(url, out exception); + } + + public override void Request(string url, string key, ICache cache, out WebException exception) + { + RecalculateProtectedResourceSignature(url); + base.Request(url, key, cache, out exception); + } + + public override void Request(string url, string key, ICache cache, DateTime absoluteExpiration, out WebException exception) + { + RecalculateProtectedResourceSignature(url); + base.Request(url, key, cache, absoluteExpiration, out exception); + } + + public override void Request(string url, string key, ICache cache, TimeSpan slidingExpiration, out WebException exception) + { + RecalculateProtectedResourceSignature(url); + base.Request(url, key, cache, slidingExpiration, out exception); + } +#endif + +#if !WindowsPhone + public override WebQueryAsyncResult RequestAsync(string url, IEnumerable parameters, object userState) + { + RecalculateProtectedResourceSignature(url); + return base.RequestAsync(url, parameters, userState); + } + + public override WebQueryAsyncResult RequestAsync(string url, object userState) + { + RecalculateProtectedResourceSignature(url); + url = RestoreUrlParams(url, Parameters); + return base.RequestAsync(url, userState); + } + + public override WebQueryAsyncResult RequestAsync(string url, string key, ICache cache, object userState) + { + RecalculateProtectedResourceSignature(url); + return base.RequestAsync(url, key, cache, userState); + } + + public override WebQueryAsyncResult RequestAsync(string url, string key, ICache cache, DateTime absoluteExpiration, object userState) + { + RecalculateProtectedResourceSignature(url); + return base.RequestAsync(url, key, cache, absoluteExpiration, userState); + } + + public override WebQueryAsyncResult RequestAsync(string url, string key, ICache cache, TimeSpan slidingExpiration, object userState) + { + RecalculateProtectedResourceSignature(url); + return base.RequestAsync(url, key, cache, slidingExpiration, userState); + } +#else + public override void RequestAsync(string url, IEnumerable parameters, object userState) + { + RecalculateProtectedResourceSignature(url); + base.RequestAsync(url, parameters, userState); + } + + public override void RequestAsync(string url, object userState) + { + RecalculateProtectedResourceSignature(url); + url = RestoreUrlParams(url, Parameters); + base.RequestAsync(url, userState); + } + + public override void RequestAsync(string url, string key, ICache cache, object userState) + { + RecalculateProtectedResourceSignature(url); + base.RequestAsync(url, key, cache, userState); + } + + public override void RequestAsync(string url, string key, ICache cache, DateTime absoluteExpiration, object userState) + { + RecalculateProtectedResourceSignature(url); + base.RequestAsync(url, key, cache, absoluteExpiration, userState); + } + + public override void RequestAsync(string url, string key, ICache cache, TimeSpan slidingExpiration, object userState) + { + RecalculateProtectedResourceSignature(url); + base.RequestAsync(url, key, cache, slidingExpiration, userState); + } +#endif + + private string RestoreUrlParams(string url, IEnumerable parameters) + { + if (Method != WebMethod.Post && Method != WebMethod.Put) + { + var builder = new StringBuilder(); + var first = true; + foreach (var param in parameters.Where(p => !p.Name.ToLower().StartsWith("oauth_"))) + { + builder.Append(first ? "?" : "&"); + first = false; + builder.Append(param.Name).Append('=').Append(param.Value); + } + url = url + builder; + } + return url; + } + + private void RecalculateProtectedResourceSignature(string url) + { + if(!_recalculate) + { + _recalculate = true; + return; // <-- More efficient for unrecycled queries + } + + var info = (OAuthWebQueryInfo) Info; + + if(!info.ClientUsername.IsNullOrBlank() || !info.ClientPassword.IsNullOrBlank()) + { + // Not a protected resource request + return; + } + + if(!string.IsNullOrEmpty(info.Verifier)) + { + // This is an access token request + return; + } + + var oauth = new OAuthWorkflow + { + ConsumerKey = info.ConsumerKey, + ConsumerSecret = info.ConsumerSecret, + Token = info.Token, + TokenSecret = info.TokenSecret, + ClientUsername = info.ClientUsername, + ClientPassword = info.ClientPassword, + SignatureMethod = info.SignatureMethod.FromRequestValue(), + ParameterHandling = ParameterHandling, + CallbackUrl = info.Callback, + Verifier = info.Verifier + }; + + // [DC]: Add any non-oauth parameters back into the signature hash + var parameters = new WebParameterCollection(); + var nonAuthParameters = Parameters.Where(p => !p.Name.StartsWith("oauth_")); + parameters.AddRange(nonAuthParameters); + + // [DC]: Don't escape parameters again when calcing the signature + Info = oauth.BuildProtectedResourceInfo(Method, parameters, url); + + // [DC]: Add any non-oauth parameters back into parameter bag + Parameters = ParseInfoParameters(); + Parameters.AddRange(nonAuthParameters); + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthWebQueryInfo.cs b/trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthWebQueryInfo.cs new file mode 100644 index 0000000..e43e344 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthWebQueryInfo.cs @@ -0,0 +1,63 @@ +using System; +using Hammock.Attributes.Specialized; +using Hammock.Web; + +namespace Hammock.Authentication.OAuth +{ +#if !SILVERLIGHT + [Serializable] +#endif + public class OAuthWebQueryInfo : IWebQueryInfo + { + [Parameter("oauth_consumer_key")] + public virtual string ConsumerKey { get; set; } + + [Parameter("oauth_token")] + public virtual string Token { get; set; } + + [Parameter("oauth_nonce")] + public virtual string Nonce { get; set; } + + [Parameter("oauth_timestamp")] + public virtual string Timestamp { get; set; } + + [Parameter("oauth_signature_method")] + public virtual string SignatureMethod { get; set; } + + [Parameter("oauth_signature")] + public virtual string Signature { get; set; } + + [Parameter("oauth_version")] + public virtual string Version { get; set; } + + [Parameter("oauth_callback")] + public virtual string Callback { get; set; } + + [Parameter("oauth_verifier")] + public virtual string Verifier { get; set; } + + [Parameter("x_auth_mode")] + public virtual string ClientMode { get; set; } + + [Parameter("x_auth_username")] + public virtual string ClientUsername { get; set; } + + [Parameter("x_auth_password")] + public virtual string ClientPassword { get; set; } + + [UserAgent] + public virtual string UserAgent { get; set; } + + public virtual WebMethod WebMethod { get; set; } + + public virtual OAuthParameterHandling ParameterHandling { get; set; } + + public virtual OAuthSignatureTreatment SignatureTreatment { get; set; } + + internal virtual string ConsumerSecret { get; set; } + + internal virtual string TokenSecret { get; set; } + + internal virtual bool FirstUse { get; set; } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthWorkflow.cs b/trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthWorkflow.cs new file mode 100644 index 0000000..3fdad12 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Authentication/OAuth/OAuthWorkflow.cs @@ -0,0 +1,466 @@ +using System; +using System.Collections.Generic; +using Hammock.Extensions; +using Hammock.Web; +#if !SILVERLIGHT && !MonoTouch &&!NETCF +using System.Web; +#endif + +#if ClientProfiles +using System.Compat.Web; +#endif + +namespace Hammock.Authentication.OAuth +{ + /// + /// A class to encapsulate OAuth authentication flow. + /// + /// + public class OAuthWorkflow + { + public virtual string Version { get; set; } + public virtual string ConsumerKey { get; set; } + public virtual string ConsumerSecret { get; set; } + public virtual string Token { get; set; } + public virtual string TokenSecret { get; set; } + public virtual string CallbackUrl { get; set; } + public virtual string Verifier { get; set; } + public virtual string SessionHandle { get; set; } + + public virtual OAuthSignatureMethod SignatureMethod { get; set; } + public virtual OAuthSignatureTreatment SignatureTreatment { get; set; } + public virtual OAuthParameterHandling ParameterHandling { get; set; } + + public virtual string ClientUsername { get; set; } + public virtual string ClientPassword { get; set; } + + /// + public virtual string RequestTokenUrl { get; set; } + + /// + public virtual string AccessTokenUrl { get; set; } + + /// + public virtual string AuthorizationUrl { get; set; } + + /// + /// Generates a instance to pass to an + /// for the purpose of requesting an + /// unauthorized request token. + /// + /// The HTTP method for the intended request + /// + /// + public OAuthWebQueryInfo BuildRequestTokenInfo(WebMethod method) + { + return BuildRequestTokenInfo(method, null); + } + + public OAuthWorkflow() + { + + } + + /// + /// Creates a new instance of using + /// an instance. + /// + /// The credentials to copy + public OAuthWorkflow(OAuthCredentials credentials) + { + InitializeFromCredentials(credentials); + } + + private void InitializeFromCredentials(OAuthCredentials credentials) + { + ConsumerKey = credentials.ConsumerKey; + ConsumerSecret = credentials.ConsumerSecret; + ParameterHandling = credentials.ParameterHandling; + SignatureMethod = credentials.SignatureMethod; + SignatureTreatment = credentials.SignatureTreatment; + Token = credentials.Token; + TokenSecret = credentials.TokenSecret; + Verifier = credentials.Verifier; + ClientUsername = credentials.ClientUsername; + ClientPassword = credentials.ClientPassword; + CallbackUrl = credentials.CallbackUrl; + Version = credentials.Version; + SessionHandle = credentials.SessionHandle; + } + + /// + /// Generates a instance to pass to an + /// for the purpose of requesting an + /// unauthorized request token. + /// + /// The HTTP method for the intended request + /// Any existing, non-OAuth query parameters desired in the request + /// + /// + public virtual OAuthWebQueryInfo BuildRequestTokenInfo(WebMethod method, WebParameterCollection parameters) + { + ValidateTokenRequestState(); + + if (parameters == null) + { + parameters = new WebParameterCollection(); + } + + var timestamp = OAuthTools.GetTimestamp(); + var nonce = OAuthTools.GetNonce(); + + AddAuthParameters(parameters, timestamp, nonce); + + var signatureBase = OAuthTools.ConcatenateRequestElements(method, RequestTokenUrl, parameters); + var signature = OAuthTools.GetSignature(SignatureMethod, SignatureTreatment, signatureBase, ConsumerSecret); + + var info = new OAuthWebQueryInfo + { + WebMethod = method, + ParameterHandling = ParameterHandling, + ConsumerKey = ConsumerKey, + SignatureMethod = SignatureMethod.ToRequestValue(), + SignatureTreatment = SignatureTreatment, + Signature = signature, + Timestamp = timestamp, + Nonce = nonce, + Version = Version, + Callback = OAuthTools.UrlEncodeRelaxed(CallbackUrl ?? ""), + UserAgent = "Hammock", + TokenSecret = TokenSecret, + ConsumerSecret = ConsumerSecret + }; + + return info; + } + + /// + /// Generates a instance to pass to an + /// for the purpose of exchanging a request token + /// for an access token authorized by the user at the Service Provider site. + /// + /// The HTTP method for the intended request + /// + public virtual OAuthWebQueryInfo BuildAccessTokenInfo(WebMethod method) + { + return BuildAccessTokenInfo(method, null); + } + + /// + /// Generates a instance to pass to an + /// for the purpose of exchanging a request token + /// for an access token authorized by the user at the Service Provider site. + /// + /// The HTTP method for the intended request + /// + /// Any existing, non-OAuth query parameters desired in the request + public virtual OAuthWebQueryInfo BuildAccessTokenInfo(WebMethod method, WebParameterCollection parameters) + { + ValidateAccessRequestState(); + + if (parameters == null) + { + parameters = new WebParameterCollection(); + } + + var uri = new Uri(AccessTokenUrl); + var timestamp = OAuthTools.GetTimestamp(); + var nonce = OAuthTools.GetNonce(); + + AddAuthParameters(parameters, timestamp, nonce); + + var signatureBase = OAuthTools.ConcatenateRequestElements(method, uri.ToString(), parameters); + var signature = OAuthTools.GetSignature(SignatureMethod, SignatureTreatment, signatureBase, ConsumerSecret, TokenSecret); + + var info = new OAuthWebQueryInfo + { + WebMethod = method, + ParameterHandling = ParameterHandling, + ConsumerKey = ConsumerKey, + Token = Token, + SignatureMethod = SignatureMethod.ToRequestValue(), + SignatureTreatment = SignatureTreatment, + Signature = signature, + Timestamp = timestamp, + Nonce = nonce, + Version = Version, + Verifier = Verifier, + Callback = CallbackUrl, + UserAgent = "Hammock", + TokenSecret = TokenSecret, + ConsumerSecret = ConsumerSecret, + }; + + return info; + } + + /// + /// Generates a instance to pass to an + /// for the purpose of exchanging user credentials + /// for an access token authorized by the user at the Service Provider site. + /// + /// The HTTP method for the intended request + /// + /// Any existing, non-OAuth query parameters desired in the request + public virtual OAuthWebQueryInfo BuildClientAuthAccessTokenInfo(WebMethod method, WebParameterCollection parameters) + { + ValidateClientAuthAccessRequestState(); + + if (parameters == null) + { + parameters = new WebParameterCollection(); + } + + var uri = new Uri(AccessTokenUrl); + var timestamp = OAuthTools.GetTimestamp(); + var nonce = OAuthTools.GetNonce(); + + AddXAuthParameters(parameters, timestamp, nonce); + + var signatureBase = OAuthTools.ConcatenateRequestElements(method, uri.ToString(), parameters); + var signature = OAuthTools.GetSignature(SignatureMethod, SignatureTreatment, signatureBase, ConsumerSecret); + + var info = new OAuthWebQueryInfo + { + WebMethod = method, + ParameterHandling = ParameterHandling, + ClientMode = "client_auth", + ClientUsername = ClientUsername, + ClientPassword = ClientPassword, + ConsumerKey = ConsumerKey, + SignatureMethod = SignatureMethod.ToRequestValue(), + SignatureTreatment = SignatureTreatment, + Signature = signature, + Timestamp = timestamp, + Nonce = nonce, + Version = Version, + UserAgent = "Hammock", + TokenSecret = TokenSecret, + ConsumerSecret = ConsumerSecret + }; + + return info; + } + + public virtual OAuthWebQueryInfo BuildProtectedResourceInfo(WebMethod method, + WebParameterCollection parameters, + string url) + { + ValidateProtectedResourceState(); + + if (parameters == null) + { + parameters = new WebParameterCollection(); + } + + // Include url parameters in query pool + var uri = new Uri(url); +#if !SILVERLIGHT + var urlParameters = System.Compat.Web.HttpUtility.ParseQueryString(uri.Query); +#else + var urlParameters = uri.Query.ParseQueryString(); +#endif + +#if !SILVERLIGHT + foreach (var parameter in urlParameters.AllKeys) +#else + foreach (var parameter in urlParameters.Keys) +#endif + { + switch (method) + { + case WebMethod.Post: + parameters.Add(new HttpPostParameter(parameter, urlParameters[parameter])); + break; + default: + parameters.Add(parameter, urlParameters[parameter]); + break; + } + } + + var timestamp = OAuthTools.GetTimestamp(); + var nonce = OAuthTools.GetNonce(); + + // [DC] Make a copy of the parameters so that the signature double-encode isn't used + var copy = new WebParameterCollection(); + foreach(var parameter in parameters) + { + copy.Add(new WebPair(parameter.Name, parameter.Value)); + } + + AddAuthParameters(copy, timestamp, nonce); + + // [DC] Escape parameters at this point; do not escape again if recalculating + var signatureBase = OAuthTools.ConcatenateRequestElements(method, url, copy); + var signature = OAuthTools.GetSignature( + SignatureMethod, SignatureTreatment, signatureBase, ConsumerSecret, TokenSecret + ); + + var info = new OAuthWebQueryInfo + { + WebMethod = method, + ParameterHandling = ParameterHandling, + ConsumerKey = ConsumerKey, + Token = Token, + SignatureMethod = SignatureMethod.ToRequestValue(), + SignatureTreatment = SignatureTreatment, + Signature = signature, + Timestamp = timestamp, + Nonce = nonce, + Version = Version ?? "1.0", + Callback = CallbackUrl, + UserAgent = "Hammock", + ConsumerSecret = ConsumerSecret, + TokenSecret = TokenSecret + }; + + return info; + } + + private void ValidateTokenRequestState() + { + if (RequestTokenUrl.IsNullOrBlank()) + { + throw new ArgumentException("You must specify a request token URL"); + } + + if (ConsumerKey.IsNullOrBlank()) + { + throw new ArgumentException("You must specify a consumer key"); + } + + if (ConsumerSecret.IsNullOrBlank()) + { + throw new ArgumentException("You must specify a consumer secret"); + } + } + + private void ValidateAccessRequestState() + { + if (AccessTokenUrl.IsNullOrBlank()) + { + throw new ArgumentException("You must specify an access token URL"); + } + + if (ConsumerKey.IsNullOrBlank()) + { + throw new ArgumentException("You must specify a consumer key"); + } + + if (ConsumerSecret.IsNullOrBlank()) + { + throw new ArgumentException("You must specify a consumer secret"); + } + + if (Token.IsNullOrBlank()) + { + throw new ArgumentException("You must specify a token"); + } + } + + private void ValidateClientAuthAccessRequestState() + { + if (AccessTokenUrl.IsNullOrBlank()) + { + throw new ArgumentException("You must specify an access token URL"); + } + + if (ConsumerKey.IsNullOrBlank()) + { + throw new ArgumentException("You must specify a consumer key"); + } + + if (ConsumerSecret.IsNullOrBlank()) + { + throw new ArgumentException("You must specify a consumer secret"); + } + + if (ClientUsername.IsNullOrBlank() || ClientPassword.IsNullOrBlank()) + { + throw new ArgumentException("You must specify user credentials"); + } + } + + private void ValidateProtectedResourceState() + { + if (ConsumerKey.IsNullOrBlank()) + { + throw new ArgumentException("You must specify a consumer key"); + } + + if (ConsumerSecret.IsNullOrBlank()) + { + throw new ArgumentException("You must specify a consumer secret"); + } + + /* + if (Token.IsNullOrBlank()) + { + throw new ArgumentException("You must specify a token"); + } + + if (TokenSecret.IsNullOrBlank()) + { + throw new ArgumentException("You must specify a token secret"); + } + */ + } + + private void AddAuthParameters(ICollection parameters, string timestamp, string nonce) + { + var authParameters = new WebParameterCollection + { + new WebPair("oauth_consumer_key", ConsumerKey), + new WebPair("oauth_nonce", nonce), + new WebPair("oauth_signature_method", SignatureMethod.ToRequestValue()), + new WebPair("oauth_timestamp", timestamp), + new WebPair("oauth_version", Version ?? "1.0") + }; + + if (!Token.IsNullOrBlank()) + { + authParameters.Add(new WebPair("oauth_token", Token)); + } + + if (!CallbackUrl.IsNullOrBlank()) + { + authParameters.Add(new WebPair("oauth_callback", CallbackUrl)); + } + + if (!Verifier.IsNullOrBlank()) + { + authParameters.Add(new WebPair("oauth_verifier", Verifier)); + } + + if(!SessionHandle.IsNullOrBlank()) + { + authParameters.Add(new WebPair("oauth_session_handle", SessionHandle)); + } + + foreach (var authParameter in authParameters) + { + parameters.Add(authParameter); + } + } + + private void AddXAuthParameters(ICollection parameters, string timestamp, string nonce) + { + var authParameters = new WebParameterCollection + { + new WebPair("x_auth_username", ClientUsername), + new WebPair("x_auth_password", ClientPassword), + new WebPair("x_auth_mode", "client_auth"), + new WebPair("oauth_consumer_key", ConsumerKey), + new WebPair("oauth_signature_method", SignatureMethod.ToRequestValue()), + new WebPair("oauth_timestamp", timestamp), + new WebPair("oauth_nonce", nonce), + new WebPair("oauth_version", Version ?? "1.0") + }; + + foreach (var authParameter in authParameters) + { + parameters.Add(authParameter); + } + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Authentication/OAuth/_OAuth.cd b/trunk/hammock/src/net35/Hammock/Authentication/OAuth/_OAuth.cd new file mode 100644 index 0000000..dd7011f --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Authentication/OAuth/_OAuth.cd @@ -0,0 +1,84 @@ + + + + + + AIAAABAAAAgQAAEAQQAAAgAAAAABIAQAAQAAAAABACQ= + Authentication\OAuth\OAuthCredentials.cs + + + + + + + + + + + + AAAAQAAAAAAAAAAAAAAAAAgACAAAIAAAAAAAAAABAAA= + Authentication\OAuth\OAuthToken.cs + + + + + + IIAAABAAgAgQAAAAAQAKAgAAAAAAIAQAAAAAAAABSCE= + Authentication\OAuth\OAuthWebQueryInfo.cs + + + + + + + + + + AIAAABACBAgAAwEAQUBAAgAAAACDIAQAAIAAAAAJgCQ= + Authentication\OAuth\OAuthWorkflow.cs + + + + + + + + + + AAAAAAAIAQEAgAAQgQABEAAAoAgBEAAABAAgAAIAAAE= + Authentication\OAuth\OAuthTools.cs + + + + + + AAAgBAAAAAAAAAUAAQAAAAAAAAAAgAQQARAQAQAAABA= + Authentication\OAuth\OAuthWebQuery.cs + + + + + + + + + AAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAA= + Authentication\OAuth\OAuthParameterHandling.cs + + + + + + AAAAAAAAAAAQAAAAAAAgAAAAEIAAAAAAAAAAAAAAAAA= + Authentication\OAuth\OAuthType.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAIAIAAAEAAAAAAAAAAAAAA= + Authentication\OAuth\OAuthSignatureMethod.cs + + + + \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Authentication/_Authentication.cd b/trunk/hammock/src/net35/Hammock/Authentication/_Authentication.cd new file mode 100644 index 0000000..1576b3d --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Authentication/_Authentication.cd @@ -0,0 +1,27 @@ + + + + + + AIAAABAAAAgQAAEAQQAAAgAAAAABIAQAAQAAAAABACQ= + Authentication\OAuth\OAuthCredentials.cs + + + + + + + AAAAAAAAAAAQAAAAAQAAAgAAAAAAAAACAAAAAAAAAAA= + Authentication\Basic\BasicAuthCredentials.cs + + + + + + + AAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Authentication\IWebCredentials.cs + + + + \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Caching/AspNetCache.cs b/trunk/hammock/src/net35/Hammock/Caching/AspNetCache.cs new file mode 100644 index 0000000..513882e --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Caching/AspNetCache.cs @@ -0,0 +1,132 @@ +using System; +using System.Collections.Generic; +using System.Web; + +#if !ClientProfiles +using System.Web.Caching; +#endif + +namespace Hammock.Caching +{ +#if !ClientProfiles +#if !SILVERLIGHT + [Serializable] +#endif + public class AspNetCache : IDependencyCache + { + #region IDependencyCache Members + + public virtual int Count + { + get { return HttpRuntime.Cache.Count; } + } + + public virtual void Add(string key, object value, CacheDependency dependency, DateTime absoluteExpiration, + TimeSpan slidingExpiration, CacheItemPriority priority, + CacheItemRemovedCallback onRemoveCallback) + { + HttpRuntime.Cache.Add(key, value, dependency, absoluteExpiration, Cache.NoSlidingExpiration, priority, + onRemoveCallback); + } + + public virtual void Insert(string key, object value) + { + HttpRuntime.Cache.Insert(key, value); + } + + public virtual void Insert(string key, object value, DateTime absoluteExpiration) + { + HttpRuntime.Cache.Insert(key, value, null, absoluteExpiration, Cache.NoSlidingExpiration); + } + + public virtual void Insert(string key, object value, TimeSpan slidingExpiration) + { + HttpRuntime.Cache.Insert(key, value, null, Cache.NoAbsoluteExpiration, slidingExpiration); + } + + public virtual void Insert(string key, object value, CacheDependency dependencies) + { + HttpRuntime.Cache.Insert(key, value, dependencies, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration); + } + + public virtual void Insert(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration) + { + HttpRuntime.Cache.Insert(key, value, dependencies, absoluteExpiration, Cache.NoSlidingExpiration); + } + + public virtual void Insert(string key, object value, CacheDependency dependencies, TimeSpan slidingExpiration) + { + HttpRuntime.Cache.Insert(key, value, dependencies, Cache.NoAbsoluteExpiration, slidingExpiration); + } + + public virtual void Insert(string key, object value, CacheDependency dependencies, TimeSpan slidingExpiration, + CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback) + { + HttpRuntime.Cache.Insert(key, value, dependencies, Cache.NoAbsoluteExpiration, slidingExpiration, priority, + onRemoveCallback); + } + + public virtual void Insert(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, + CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback) + { + HttpRuntime.Cache.Insert(key, value, dependencies, absoluteExpiration, Cache.NoSlidingExpiration, priority, + onRemoveCallback); + } + + public virtual void Insert(string key, object value, CacheDependency dependencies, TimeSpan slidingExpiration, + CacheItemUpdateCallback onUpdateCallback) + { + HttpRuntime.Cache.Insert(key, value, dependencies, Cache.NoAbsoluteExpiration, slidingExpiration, + onUpdateCallback); + } + + public virtual void Insert(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, + CacheItemUpdateCallback onUpdateCallback) + { + HttpRuntime.Cache.Insert(key, value, dependencies, absoluteExpiration, Cache.NoSlidingExpiration, + onUpdateCallback); + } + + public virtual void Clear() + { + var keys = new List(); + var enumerator = HttpRuntime.Cache.GetEnumerator(); + + while (enumerator.MoveNext()) + { + var key = enumerator.Key.ToString(); + keys.Add(key); + } + + foreach (var key in keys) + { + HttpRuntime.Cache.Remove(key); + } + } + + public virtual T Get(string key) + { + return (T) HttpRuntime.Cache.Get(key); + } + + public virtual void Remove(string key) + { + HttpRuntime.Cache.Remove(key); + } + + public virtual IEnumerable Keys + { + get + { + var enumerator = HttpRuntime.Cache.GetEnumerator(); + while (enumerator.MoveNext()) + { + yield return enumerator.Key.ToString(); + } + } + } + + #endregion + } +#endif +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Caching/CacheFactory.cs b/trunk/hammock/src/net35/Hammock/Caching/CacheFactory.cs new file mode 100644 index 0000000..5dfb494 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Caching/CacheFactory.cs @@ -0,0 +1,29 @@ +using System; + +namespace Hammock.Caching +{ +#if !SILVERLIGHT + [Serializable] +#endif + public static class CacheFactory + { +#if !Smartphone && !Silverlight && !ClientProfiles && !MonoTouch && !NETCF + public static IDependencyCache AspNetCache + { + get { return new AspNetCache(); } + } +#endif + + public static ICache InMemoryCache + { + get { return new SimpleCache(); } + } + +#if SILVERLIGHT + public static ICache IsolatedStorageCache + { + get { throw new NotImplementedException(); } + } +#endif + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Caching/CacheMode.cs b/trunk/hammock/src/net35/Hammock/Caching/CacheMode.cs new file mode 100644 index 0000000..b443bff --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Caching/CacheMode.cs @@ -0,0 +1,21 @@ +using System; +using System.Runtime.Serialization; + +namespace Hammock.Caching +{ +#if !SILVERLIGHT + [Serializable] +#endif + public enum CacheMode + { +#if !SILVERLIGHT && !Smartphone && !ClientProfiles && !NET20 && !MonoTouch && !NETCF + [EnumMember] NoExpiration, + [EnumMember] AbsoluteExpiration, + [EnumMember] SlidingExpiration +#else + NoExpiration, + AbsoluteExpiration, + SlidingExpiration +#endif + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Caching/CacheOptions.cs b/trunk/hammock/src/net35/Hammock/Caching/CacheOptions.cs new file mode 100644 index 0000000..56bc5a1 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Caching/CacheOptions.cs @@ -0,0 +1,13 @@ +using System; + +namespace Hammock.Caching +{ +#if !SILVERLIGHT + [Serializable] +#endif + public class CacheOptions + { + public virtual CacheMode Mode { get; set; } + public virtual TimeSpan Duration { get; set; } + } +} diff --git a/trunk/hammock/src/net35/Hammock/Caching/ICache.cs b/trunk/hammock/src/net35/Hammock/Caching/ICache.cs new file mode 100644 index 0000000..6dad4e5 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Caching/ICache.cs @@ -0,0 +1,14 @@ +using System; + +namespace Hammock.Caching +{ + public interface ICache + { + void Insert(string key, object value); + void Insert(string key, object value, DateTime absoluteExpiration); + void Insert(string key, object value, TimeSpan slidingExpiration); + + T Get(string key); + void Remove(string key); + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Caching/IDependencyCache.cs b/trunk/hammock/src/net35/Hammock/Caching/IDependencyCache.cs new file mode 100644 index 0000000..4b86f22 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Caching/IDependencyCache.cs @@ -0,0 +1,32 @@ +#if !ClientProfiles +using System; +using System.Web.Caching; + +namespace Hammock.Caching +{ + public interface IDependencyCache : ICache + { + void Add(string key, object value, CacheDependency dependency, DateTime absoluteExpiration, + TimeSpan slidingExpiration, CacheItemPriority priority, CacheItemRemovedCallback removedCallback); + + void Insert(string key, object value, CacheDependency dependencies); + void Insert(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration); + void Insert(string key, object value, CacheDependency dependencies, TimeSpan slidingExpiration); + +#if !Mono + void Insert(string key, object value, CacheDependency dependencies, TimeSpan slidingExpiration, + CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback); + + void Insert(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, + CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback); + + void Insert(string key, object value, CacheDependency dependencies, TimeSpan slidingExpiration, + CacheItemUpdateCallback onUpdateCallback); + + void Insert(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, + CacheItemUpdateCallback onUpdateCallback); +#endif + void Clear(); + } +} +#endif \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Caching/SimpleCache.cs b/trunk/hammock/src/net35/Hammock/Caching/SimpleCache.cs new file mode 100644 index 0000000..98d514b --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Caching/SimpleCache.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; + +namespace Hammock.Caching +{ +#if !SILVERLIGHT + [Serializable] +#endif + public class SimpleCache : ICache + { + private const string NotSupportedMessage = "This simple cache does not support expiration."; + + private static readonly IDictionary _cache = new Dictionary(0); + + public virtual int Count + { + get { return _cache.Count; } + } + + public virtual IEnumerable Keys + { + get { return _cache.Keys; } + } + + #region ICache Members + + public virtual void Insert(string key, object value) + { + if (!_cache.ContainsKey(key)) + { + _cache.Add(key, value); + } + else + { + _cache[key] = value; + } + } + + public virtual void Insert(string key, object value, DateTime absoluteExpiration) + { + throw new NotSupportedException(NotSupportedMessage); + } + + public virtual void Insert(string key, object value, TimeSpan slidingExpiration) + { + throw new NotSupportedException(NotSupportedMessage); + } + + public virtual T Get(string key) + { + if (_cache.ContainsKey(key)) + { + return (T)_cache[key]; + } + return default(T); + } + + public virtual void Remove(string key) + { + if (_cache.ContainsKey(key)) + { + _cache.Remove(key); + } + } + + #endregion + } +} diff --git a/trunk/hammock/src/net35/Hammock/Caching/_Caching.cd b/trunk/hammock/src/net35/Hammock/Caching/_Caching.cd new file mode 100644 index 0000000..9ff2abd --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Caching/_Caching.cd @@ -0,0 +1,55 @@ + + + + + + AAIAAEAAAAAAAABACAAABAQAAAAAAAAAAAAAAABAAAA= + Caching\AspNetCache.cs + + + + + + + + + AAAAAEAAAJAAAABACAAABAQAAAAAAAAAAAAAAAAAAAA= + Caching\SimpleCache.cs + + + + + + + AAAAAAAAAIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Caching\CacheOptions.cs + + + + + + + + + AAAAAEAAAAAAAABAAAAABAAAAAAAAAAAAAAAAAAAAAA= + Caching\ICache.cs + + + + + + AAIAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA= + Caching\IDependencyCache.cs + + + + + + AAAAAAAAAACAAAAAABAQAAAAAAAAAAAAAAAAAAAAAAA= + Caching\CacheMode.cs + + + + \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Extensions/CollectionExtensions.cs b/trunk/hammock/src/net35/Hammock/Extensions/CollectionExtensions.cs new file mode 100644 index 0000000..ccd86e7 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Extensions/CollectionExtensions.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Hammock.Web; + +#if SILVERLIGHT +using Hammock.Silverlight.Compat; +#else +using System.Collections.Specialized; +#endif + +namespace Hammock.Extensions +{ + internal static class CollectionExtensions + { + public static IEnumerable AsEnumerable(this T item) + { + return new[] {item}; + } + + public static IEnumerable And(this T item, T other) + { + return new[] {item, other}; + } + + public static IEnumerable And(this IEnumerable items, T item) + { + foreach (var i in items) + { + yield return i; + } + + yield return item; + } + + public static K TryWithKey(this IDictionary dictionary, T key) + { + return dictionary.ContainsKey(key) ? dictionary[key] : default(K); + } + + public static IEnumerable ToEnumerable(this object[] items) where T : class + { + foreach (var item in items) + { + var record = item as T; + yield return record; + } + } + + public static void ForEach(this IEnumerable items, Action action) + { + foreach (var item in items) + { + action(item); + } + } + + public static void AddRange(this IDictionary collection, NameValueCollection range) + { + foreach(string key in range.AllKeys) + { + collection.Add(key, range[key]); + } + } + + public static string ToQueryString(this NameValueCollection collection) + { + var sb = new StringBuilder(); + if (collection.Count > 0) + { + sb.Append("?"); + } + + var count = 0; + foreach(var key in collection.AllKeys) + { + sb.AppendFormat("{0}={1}", key, collection[key].UrlEncode()); + count++; + + if (count >= collection.Count) + { + continue; + } + sb.Append("&"); + } + return sb.ToString(); + } + + public static string Concatenate(this WebParameterCollection collection, string separator, string spacer) + { + var sb = new StringBuilder(); + + var total = collection.Count; + var count = 0; + + foreach (var item in collection) + { + sb.Append(item.Name); + sb.Append(separator); + sb.Append(item.Value); + + count++; + if (count < total) + { + sb.Append(spacer); + } + } + + return sb.ToString(); + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Extensions/FormatExtensions.cs b/trunk/hammock/src/net35/Hammock/Extensions/FormatExtensions.cs new file mode 100644 index 0000000..585c38a --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Extensions/FormatExtensions.cs @@ -0,0 +1,18 @@ +using System; + +namespace Hammock.Extensions +{ + internal static class FormatExtensions + { + // todo find an Invariant alternative for CE + public static string ToLower(this Enum type) + { + return type.ToString().ToLower(); + } + + public static string ToUpper(this Enum type) + { + return type.ToString().ToUpper(); + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Extensions/OAuthExtensions.cs b/trunk/hammock/src/net35/Hammock/Extensions/OAuthExtensions.cs new file mode 100644 index 0000000..7427046 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Extensions/OAuthExtensions.cs @@ -0,0 +1,37 @@ +using System; +using System.Security.Cryptography; +using System.Text; +using Hammock.Authentication.OAuth; + +namespace Hammock.Extensions +{ + internal static class OAuthExtensions + { + public static string ToRequestValue(this OAuthSignatureMethod signatureMethod) + { + var value = signatureMethod.ToString().ToUpper(); + var shaIndex = value.IndexOf("SHA1"); + return shaIndex > -1 ? value.Insert(shaIndex, "-") : value; + } + + public static OAuthSignatureMethod FromRequestValue(this string signatureMethod) + { + switch(signatureMethod) + { + case "HMAC-SHA1": + return OAuthSignatureMethod.HmacSha1; + case "RSA-SHA1": + return OAuthSignatureMethod.RsaSha1; + default: + return OAuthSignatureMethod.PlainText; + } + } + + public static string HashWith(this string input, HashAlgorithm algorithm) + { + var data = Encoding.UTF8.GetBytes(input); + var hash = algorithm.ComputeHash(data); + return Convert.ToBase64String(hash); + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Extensions/ObjectExtensions.cs b/trunk/hammock/src/net35/Hammock/Extensions/ObjectExtensions.cs new file mode 100644 index 0000000..85cdf62 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Extensions/ObjectExtensions.cs @@ -0,0 +1,80 @@ +using System; + +#if NETCF +using System.Linq; +#endif + +namespace Hammock.Extensions +{ + internal static class ObjectExtensions + { + public static bool Implements(this object instance, Type interfaceType) + { + return interfaceType.IsGenericTypeDefinition + ? instance.ImplementsGeneric(interfaceType) + : interfaceType.IsAssignableFrom(instance.GetType()); + } + + private static bool ImplementsGeneric(this Type type, Type targetType) + { + var interfaceTypes = type.GetInterfaces(); + foreach (var interfaceType in interfaceTypes) + { + if (!interfaceType.IsGenericType) + { + continue; + } + + if (interfaceType.GetGenericTypeDefinition() == targetType) + { + return true; + } + } + + var baseType = type.BaseType; + if (baseType == null) + { + return false; + } + + return baseType.IsGenericType + ? baseType.GetGenericTypeDefinition() == targetType + : baseType.ImplementsGeneric(targetType); + } + + private static bool ImplementsGeneric(this object instance, Type targetType) + { + return instance.GetType().ImplementsGeneric(targetType); + } + + public static Type GetDeclaredTypeForGeneric(this object instance, Type interfaceType) + { + return instance.GetType().GetDeclaredTypeForGeneric(interfaceType); + } + + public static Type GetDeclaredTypeForGeneric(this Type baseType, Type interfaceType) + { + var type = default(Type); + + if (baseType.ImplementsGeneric(interfaceType)) + { +#if NETCF + var generic = baseType.GetInterfaces() + .Single(i => i.FullName.Equals(interfaceType.FullName)); +#else + var generic = baseType.GetInterface(interfaceType.FullName, true); +#endif + if (generic.IsGenericType) + { + var args = generic.GetGenericArguments(); + if (args.Length == 1) + { + type = args[0]; + } + } + } + + return type; + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Extensions/ReflectionExtensions.cs b/trunk/hammock/src/net35/Hammock/Extensions/ReflectionExtensions.cs new file mode 100644 index 0000000..dd84363 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Extensions/ReflectionExtensions.cs @@ -0,0 +1,32 @@ +using System.Collections.Generic; +using System.Reflection; + +namespace Hammock.Extensions +{ + internal static class ReflectionExtensions + { + public static IEnumerable GetCustomAttributes(this PropertyInfo info, bool inherit) + where T : class + { + var attributes = info.GetCustomAttributes(typeof (T), inherit); + return attributes.ToEnumerable(); + } + + public static object GetValue(this object instance, string property) + { + var info = instance.GetType().GetProperty(property); + if (info != null) + { + var value = info.GetValue(instance, null); + return value; + } + return null; + } + + public static void SetValue(this object instance, string property, object value) + { + var info = instance.GetType().GetProperty(property); + info.SetValue(instance, value, null); + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Extensions/SpecificationExtensions.cs b/trunk/hammock/src/net35/Hammock/Extensions/SpecificationExtensions.cs new file mode 100644 index 0000000..82db579 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Extensions/SpecificationExtensions.cs @@ -0,0 +1,41 @@ +using System; +using Hammock.Specifications; + +namespace Hammock.Extensions +{ + internal static class SpecificationExtensions + { + public static bool Satisfies(this object instance) where T : ISpecification + { + var marker = Activator.CreateInstance(); + var type = typeof (ISpecification<>).MakeGenericType(instance.GetType()); + var match = marker.Implements(type); + + if (!match) + { + return false; + } + + var method = type.GetMethod("IsSatisfiedBy"); + var result = method.Invoke(marker, new[] {instance}); + + return (bool) result; + } + + public static bool Satisfies(this object instance, ISpecification specificationType) + { + var type = typeof (ISpecification<>).MakeGenericType(instance.GetType()); + var match = specificationType.Implements(type); + + if (!match) + { + return false; + } + + var method = type.GetMethod("IsSatisfiedBy"); + var result = method.Invoke(specificationType, new[] {instance}); + + return (bool) result; + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Extensions/StringExtensions.cs b/trunk/hammock/src/net35/Hammock/Extensions/StringExtensions.cs new file mode 100644 index 0000000..f2fa7e2 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Extensions/StringExtensions.cs @@ -0,0 +1,138 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +#if SILVERLIGHT && !WindowsPhone +using System.Windows.Browser; +#endif + +#if WindowsPhone +using System.Web; +#endif + +#if !SILVERLIGHT && !MonoTouch && !NETCF +using System.Web; +#endif + +namespace Hammock.Extensions +{ + internal static class StringExtensions + { + public static bool IsNullOrBlank(this string value) + { + return String.IsNullOrEmpty(value) || + (!String.IsNullOrEmpty(value) && value.Trim() == String.Empty); + } + + public static bool EqualsIgnoreCase(this string left, string right) + { + return String.Compare(left, right, StringComparison.InvariantCultureIgnoreCase) == 0; + } + + public static bool EqualsAny(this string input, params string[] args) + { + return args.Aggregate(false, (current, arg) => current | input.Equals(arg)); + } + + public static string FormatWith(this string format, params object[] args) + { + return String.Format(format, args); + } + + public static string FormatWithInvariantCulture(this string format, params object[] args) + { + return String.Format(CultureInfo.InvariantCulture, format, args); + } + + public static string Then(this string input, string value) + { + return String.Concat(input, value); + } + + public static string UrlEncode(this string value) + { + // [DC] This is more correct than HttpUtility; it escapes spaces as %20, not + + return Uri.EscapeDataString(value); + } + + public static string UrlDecode(this string value) + { + return Uri.UnescapeDataString(value); + } + + public static Uri AsUri(this string value) + { + return new Uri(value); + } + + public static string ToBase64String(this byte[] input) + { + return Convert.ToBase64String(input); + } + + public static byte[] GetBytes(this string input) + { + return Encoding.UTF8.GetBytes(input); + } + + public static string PercentEncode(this string s) + { + var bytes = s.GetBytes(); + var sb = new StringBuilder(); + foreach (var b in bytes) + { + // [DC]: Support proper encoding of special characters (\n\r\t\b) + if((b > 7 && b < 11) || b == 13) + { + sb.Append(string.Format("%0{0:X}", b)); + } + else + { + sb.Append(string.Format("%{0:X}", b)); + } + } + return sb.ToString(); + } + + public static IDictionary ParseQueryString(this string query) + { + // [DC]: This method does not URL decode, and cannot handle decoded input + if (query.StartsWith("?")) query = query.Substring(1); + + if(query.Equals(string.Empty)) + { + return new Dictionary(); + } + + var parts = query.Split(new[] { '&' }); + + return parts.Select( + part => part.Split(new[] { '=' })).ToDictionary( + pair => pair[0], pair => pair[1] + ); + } + + public static bool TryParse(this string value, out double number) + { + try + { + number = double.Parse(value); + return true; + } + catch + { + number = 0; + return false; + } + } + + private const RegexOptions Options = +#if !SILVERLIGHT && !MonoTouch + RegexOptions.Compiled | RegexOptions.IgnoreCase; +#else + RegexOptions.IgnoreCase; +#endif + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Extensions/TimeExtensions.cs b/trunk/hammock/src/net35/Hammock/Extensions/TimeExtensions.cs new file mode 100644 index 0000000..5505eec --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Extensions/TimeExtensions.cs @@ -0,0 +1,28 @@ +using System; + +namespace Hammock.Extensions +{ + internal static class TimeExtensions + { + public static DateTime FromNow(this TimeSpan value) + { + return new DateTime((DateTime.Now + value).Ticks); + } + + public static DateTime FromUnixTime(this long seconds) + { + var time = new DateTime(1970, 1, 1); + time = time.AddSeconds(seconds); + + return time.ToLocalTime(); + } + + public static long ToUnixTime(this DateTime dateTime) + { + var timeSpan = (dateTime - new DateTime(1970, 1, 1)); + var timestamp = (long)timeSpan.TotalSeconds; + + return timestamp; + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Extensions/WebExtensions.cs b/trunk/hammock/src/net35/Hammock/Extensions/WebExtensions.cs new file mode 100644 index 0000000..9dda9fb --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Extensions/WebExtensions.cs @@ -0,0 +1,106 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Text; +using Hammock.Attributes; +using Hammock.Attributes.Validation; +using Hammock.Web; + +namespace Hammock.Extensions +{ + internal static class WebExtensions + { + public static void ParseNamedAttributes(this IWebQueryInfo info, + IEnumerable properties, + IDictionary transforms, + IDictionary collection) + where T : Attribute, INamedAttribute + { + foreach (var property in properties) + { + var attributes = property.GetCustomAttributes(true); + + foreach (var attribute in attributes) + { + var value = transforms.ContainsKey(property.Name) + ? transforms[property.Name] + : property.GetValue(info, null); + + if (value == null) + { + continue; + } + + var header = value.ToString(); + if (!header.IsNullOrBlank()) + { + collection.Add(attribute.Name, header); + } + } + } + } + + public static Uri UriMinusQuery(this Uri uri, out WebParameterCollection parameters) + { + var sb = new StringBuilder(); + + parameters = new WebParameterCollection(); + var query = uri.Query.ParseQueryString(); + foreach(var key in query.Keys) + { + parameters.Add(key, query[key].UrlDecode()); + } + + var port = uri.Scheme.Equals("http") && uri.Port != 80 || + uri.Scheme.Equals("https") && uri.Port != 443 ? + ":" + uri.Port : ""; + + sb.Append(uri.Scheme) + .Append("://") + .Append(uri.Host) + .Append(port) + .Append(uri.AbsolutePath); + + return new Uri(sb.ToString()); + } + + public static string ToBasicAuthorizationHeader(string username, string password) + { + var token = "{0}:{1}".FormatWith(username, password).GetBytes().ToBase64String(); + return "Basic {0}".FormatWith(token); + } + + public static void ParseValidationAttributes(this IWebQueryInfo info, + IEnumerable properties, + IDictionary collection) + { + foreach (var property in properties) + { + var attributes = property.GetCustomAttributes(true); + + foreach (var attribute in attributes) + { + // Support multiple transforms + var value = collection.ContainsKey(property.Name) + ? collection[property.Name] + : property.GetValue(info, null); + + var transformed = attribute.TransformValue(property, value); + if (transformed.IsNullOrBlank()) + { + continue; + } + + if(collection.ContainsKey(property.Name)) + { + collection[property.Name] = transformed; + } + else + { + collection.Add(property.Name, transformed); + } + } + } + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Hammock.csproj b/trunk/hammock/src/net35/Hammock/Hammock.csproj new file mode 100644 index 0000000..e26734e --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Hammock.csproj @@ -0,0 +1,254 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {6679078A-C585-4CB6-96E9-908DBDAA2716} + Library + Properties + Hammock + Hammock + v3.5 + 512 + true + key.snk + + + 3.5 + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + + + true + full + false + ..\..\..\bin\lib\3.5\ + TRACE;DEBUG;NET35 + prompt + 4 + AllRules.ruleset + + + pdbonly + true + ..\..\..\bin\lib\net35\ + TRACE;NET35 + prompt + 4 + MinimumRecommendedRules.ruleset + + + ..\..\..\bin\mono\ + TRACE + true + pdbonly + AnyCPU + true + GlobalSuppressions.cs + prompt + AllRules.ruleset + + + + + 3.5 + + + + 3.0 + + + + 3.0 + + + 3.5 + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/IRestClient.cs b/trunk/hammock/src/net35/Hammock/IRestClient.cs new file mode 100644 index 0000000..9718e13 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/IRestClient.cs @@ -0,0 +1,69 @@ +using System; + +#if NET40 +using System.Dynamic; +#endif + +namespace Hammock +{ + public interface IRestClient + { +#if !Silverlight + +#if NET40 + RestResponse RequestDynamic(RestRequest request); +#endif + RestResponse Request(RestRequest request); + RestResponse Request(); + + RestResponse Request(RestRequest request); + RestResponse Request(); +#endif + +#if !WindowsPhone + IAsyncResult BeginRequest(); + IAsyncResult BeginRequest(); + + IAsyncResult BeginRequest(RestRequest request, RestCallback callback); + IAsyncResult BeginRequest(RestRequest request, RestCallback callback, object userState); + + IAsyncResult BeginRequest(RestRequest request, RestCallback callback); + IAsyncResult BeginRequest(RestRequest request, RestCallback callback, object userState); + +#if NET40 + IAsyncResult BeginRequestDynamic(); + IAsyncResult BeginRequestDynamic(RestRequest request, RestCallback callback); + IAsyncResult BeginRequestDynamic(RestRequest request, RestCallback callback, object userState); + RestResponse EndRequestDynamic(IAsyncResult result); +#endif + + IAsyncResult BeginRequest(RestRequest request); + IAsyncResult BeginRequest(RestRequest request, object userState); + IAsyncResult BeginRequest(RestRequest request); + IAsyncResult BeginRequest(RestRequest request, object userState); + + IAsyncResult BeginRequest(RestCallback callback); + IAsyncResult BeginRequest(RestCallback callback); + + RestResponse EndRequest(IAsyncResult result); + RestResponse EndRequest(IAsyncResult result); +#else + void BeginRequest(); + void BeginRequest(); + + void BeginRequest(RestRequest request, RestCallback callback); + void BeginRequest(RestRequest request, RestCallback callback, object userState); + + void BeginRequest(RestRequest request, RestCallback callback); + void BeginRequest(RestRequest request, RestCallback callback, object userState); + + void BeginRequest(RestRequest request); + void BeginRequest(RestRequest request, object userState); + void BeginRequest(RestRequest request); + void BeginRequest(RestRequest request, object userState); + + void BeginRequest(RestCallback callback); + void BeginRequest(RestCallback callback); +#endif + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Model/PropertyChangedBase.cs b/trunk/hammock/src/net35/Hammock/Model/PropertyChangedBase.cs new file mode 100644 index 0000000..2f6c12c --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Model/PropertyChangedBase.cs @@ -0,0 +1,32 @@ +using System; +using System.ComponentModel; +using System.Runtime.Serialization; + +namespace Hammock.Model +{ +#if !SILVERLIGHT + [Serializable] +#endif +#if !Smartphone && !NET20 && !ClientProfiles && !NETCF + [DataContract] +#endif + public class PropertyChangedBase : INotifyPropertyChanged + { + #region INotifyPropertyChanged Members + +#if !SILVERLIGHT + [field: NonSerialized] +#endif + public virtual event PropertyChangedEventHandler PropertyChanged; + + #endregion + + public virtual void OnPropertyChanged(string propertyName) + { + if (PropertyChanged != null) + { + PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); + } + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Model/_Model.cd b/trunk/hammock/src/net35/Hammock/Model/_Model.cd new file mode 100644 index 0000000..a1b8860 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Model/_Model.cd @@ -0,0 +1,12 @@ + + + + + + AAAAAAAAAAAAAAAAIAAAAAAAgAAAAAAAAAAAAAAAAAA= + Model\PropertyChangedBase.cs + + + + + \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Mono/HttpUtility.cs b/trunk/hammock/src/net35/Hammock/Mono/HttpUtility.cs new file mode 100644 index 0000000..bd6f030 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Mono/HttpUtility.cs @@ -0,0 +1,1300 @@ +// +// System.Web.HttpUtility +// +// Authors: +// Patrik Torstensson (Patrik.Torstensson@labs2.com) +// Wictor Wilén (decode/encode functions) (wictor@ibizkit.se) +// Tim Coleman (tim@timcoleman.com) +// Gonzalo Paniagua Javier (gonzalo@ximian.com) +// +// Copyright (C) 2005 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + + +using System.Collections; +using System.Collections.Specialized; +using System.Globalization; +using System.IO; +using System.Text; + +namespace System.Compat.Web +{ + public sealed class HttpUtility + { + #region Fields + + private static Hashtable entities; + private static readonly object lock_ = new object(); + + #endregion // Fields + + private static Hashtable Entities + { + get + { + lock (lock_) + { + if (entities == null) + { + InitEntities(); + } + + return entities; + } + } + } + + #region Constructors + + private static void InitEntities() + { + // Build the hash table of HTML entity references. This list comes + // from the HTML 4.01 W3C recommendation. + entities = new Hashtable + { + {"nbsp", '\u00A0'}, + {"iexcl", '\u00A1'}, + {"cent", '\u00A2'}, + {"pound", '\u00A3'}, + {"curren", '\u00A4'}, + {"yen", '\u00A5'}, + {"brvbar", '\u00A6'}, + {"sect", '\u00A7'}, + {"uml", '\u00A8'}, + {"copy", '\u00A9'}, + {"ordf", '\u00AA'}, + {"laquo", '\u00AB'}, + {"not", '\u00AC'}, + {"shy", '\u00AD'}, + {"reg", '\u00AE'}, + {"macr", '\u00AF'}, + {"deg", '\u00B0'}, + {"plusmn", '\u00B1'}, + {"sup2", '\u00B2'}, + {"sup3", '\u00B3'}, + {"acute", '\u00B4'}, + {"micro", '\u00B5'}, + {"para", '\u00B6'}, + {"middot", '\u00B7'}, + {"cedil", '\u00B8'}, + {"sup1", '\u00B9'}, + {"ordm", '\u00BA'}, + {"raquo", '\u00BB'}, + {"frac14", '\u00BC'}, + {"frac12", '\u00BD'}, + {"frac34", '\u00BE'}, + {"iquest", '\u00BF'}, + {"Agrave", '\u00C0'}, + {"Aacute", '\u00C1'}, + {"Acirc", '\u00C2'}, + {"Atilde", '\u00C3'}, + {"Auml", '\u00C4'}, + {"Aring", '\u00C5'}, + {"AElig", '\u00C6'}, + {"Ccedil", '\u00C7'}, + {"Egrave", '\u00C8'}, + {"Eacute", '\u00C9'}, + {"Ecirc", '\u00CA'}, + {"Euml", '\u00CB'}, + {"Igrave", '\u00CC'}, + {"Iacute", '\u00CD'}, + {"Icirc", '\u00CE'}, + {"Iuml", '\u00CF'}, + {"ETH", '\u00D0'}, + {"Ntilde", '\u00D1'}, + {"Ograve", '\u00D2'}, + {"Oacute", '\u00D3'}, + {"Ocirc", '\u00D4'}, + {"Otilde", '\u00D5'}, + {"Ouml", '\u00D6'}, + {"times", '\u00D7'}, + {"Oslash", '\u00D8'}, + {"Ugrave", '\u00D9'}, + {"Uacute", '\u00DA'}, + {"Ucirc", '\u00DB'}, + {"Uuml", '\u00DC'}, + {"Yacute", '\u00DD'}, + {"THORN", '\u00DE'}, + {"szlig", '\u00DF'}, + {"agrave", '\u00E0'}, + {"aacute", '\u00E1'}, + {"acirc", '\u00E2'}, + {"atilde", '\u00E3'}, + {"auml", '\u00E4'}, + {"aring", '\u00E5'}, + {"aelig", '\u00E6'}, + {"ccedil", '\u00E7'}, + {"egrave", '\u00E8'}, + {"eacute", '\u00E9'}, + {"ecirc", '\u00EA'}, + {"euml", '\u00EB'}, + {"igrave", '\u00EC'}, + {"iacute", '\u00ED'}, + {"icirc", '\u00EE'}, + {"iuml", '\u00EF'}, + {"eth", '\u00F0'}, + {"ntilde", '\u00F1'}, + {"ograve", '\u00F2'}, + {"oacute", '\u00F3'}, + {"ocirc", '\u00F4'}, + {"otilde", '\u00F5'}, + {"ouml", '\u00F6'}, + {"divide", '\u00F7'}, + {"oslash", '\u00F8'}, + {"ugrave", '\u00F9'}, + {"uacute", '\u00FA'}, + {"ucirc", '\u00FB'}, + {"uuml", '\u00FC'}, + {"yacute", '\u00FD'}, + {"thorn", '\u00FE'}, + {"yuml", '\u00FF'}, + {"fnof", '\u0192'}, + {"Alpha", '\u0391'}, + {"Beta", '\u0392'}, + {"Gamma", '\u0393'}, + {"Delta", '\u0394'}, + {"Epsilon", '\u0395'}, + {"Zeta", '\u0396'}, + {"Eta", '\u0397'}, + {"Theta", '\u0398'}, + {"Iota", '\u0399'}, + {"Kappa", '\u039A'}, + {"Lambda", '\u039B'}, + {"Mu", '\u039C'}, + {"Nu", '\u039D'}, + {"Xi", '\u039E'}, + {"Omicron", '\u039F'}, + {"Pi", '\u03A0'}, + {"Rho", '\u03A1'}, + {"Sigma", '\u03A3'}, + {"Tau", '\u03A4'}, + {"Upsilon", '\u03A5'}, + {"Phi", '\u03A6'}, + {"Chi", '\u03A7'}, + {"Psi", '\u03A8'}, + {"Omega", '\u03A9'}, + {"alpha", '\u03B1'}, + {"beta", '\u03B2'}, + {"gamma", '\u03B3'}, + {"delta", '\u03B4'}, + {"epsilon", '\u03B5'}, + {"zeta", '\u03B6'}, + {"eta", '\u03B7'}, + {"theta", '\u03B8'}, + {"iota", '\u03B9'}, + {"kappa", '\u03BA'}, + {"lambda", '\u03BB'}, + {"mu", '\u03BC'}, + {"nu", '\u03BD'}, + {"xi", '\u03BE'}, + {"omicron", '\u03BF'}, + {"pi", '\u03C0'}, + {"rho", '\u03C1'}, + {"sigmaf", '\u03C2'}, + {"sigma", '\u03C3'}, + {"tau", '\u03C4'}, + {"upsilon", '\u03C5'}, + {"phi", '\u03C6'}, + {"chi", '\u03C7'}, + {"psi", '\u03C8'}, + {"omega", '\u03C9'}, + {"thetasym", '\u03D1'}, + {"upsih", '\u03D2'}, + {"piv", '\u03D6'}, + {"bull", '\u2022'}, + {"hellip", '\u2026'}, + {"prime", '\u2032'}, + {"Prime", '\u2033'}, + {"oline", '\u203E'}, + {"frasl", '\u2044'}, + {"weierp", '\u2118'}, + {"image", '\u2111'}, + {"real", '\u211C'}, + {"trade", '\u2122'}, + {"alefsym", '\u2135'}, + {"larr", '\u2190'}, + {"uarr", '\u2191'}, + {"rarr", '\u2192'}, + {"darr", '\u2193'}, + {"harr", '\u2194'}, + {"crarr", '\u21B5'}, + {"lArr", '\u21D0'}, + {"uArr", '\u21D1'}, + {"rArr", '\u21D2'}, + {"dArr", '\u21D3'}, + {"hArr", '\u21D4'}, + {"forall", '\u2200'}, + {"part", '\u2202'}, + {"exist", '\u2203'}, + {"empty", '\u2205'}, + {"nabla", '\u2207'}, + {"isin", '\u2208'}, + {"notin", '\u2209'}, + {"ni", '\u220B'}, + {"prod", '\u220F'}, + {"sum", '\u2211'}, + {"minus", '\u2212'}, + {"lowast", '\u2217'}, + {"radic", '\u221A'}, + {"prop", '\u221D'}, + {"infin", '\u221E'}, + {"ang", '\u2220'}, + {"and", '\u2227'}, + {"or", '\u2228'}, + {"cap", '\u2229'}, + {"cup", '\u222A'}, + {"int", '\u222B'}, + {"there4", '\u2234'}, + {"sim", '\u223C'}, + {"cong", '\u2245'}, + {"asymp", '\u2248'}, + {"ne", '\u2260'}, + {"equiv", '\u2261'}, + {"le", '\u2264'}, + {"ge", '\u2265'}, + {"sub", '\u2282'}, + {"sup", '\u2283'}, + {"nsub", '\u2284'}, + {"sube", '\u2286'}, + {"supe", '\u2287'}, + {"oplus", '\u2295'}, + {"otimes", '\u2297'}, + {"perp", '\u22A5'}, + {"sdot", '\u22C5'}, + {"lceil", '\u2308'}, + {"rceil", '\u2309'}, + {"lfloor", '\u230A'}, + {"rfloor", '\u230B'}, + {"lang", '\u2329'}, + {"rang", '\u232A'}, + {"loz", '\u25CA'}, + {"spades", '\u2660'}, + {"clubs", '\u2663'}, + {"hearts", '\u2665'}, + {"diams", '\u2666'}, + {"quot", '\u0022'}, + {"amp", '\u0026'}, + {"lt", '\u003C'}, + {"gt", '\u003E'}, + {"OElig", '\u0152'}, + {"oelig", '\u0153'}, + {"Scaron", '\u0160'}, + {"scaron", '\u0161'}, + {"Yuml", '\u0178'}, + {"circ", '\u02C6'}, + {"tilde", '\u02DC'}, + {"ensp", '\u2002'}, + {"emsp", '\u2003'}, + {"thinsp", '\u2009'}, + {"zwnj", '\u200C'}, + {"zwj", '\u200D'}, + {"lrm", '\u200E'}, + {"rlm", '\u200F'}, + {"ndash", '\u2013'}, + {"mdash", '\u2014'}, + {"lsquo", '\u2018'}, + {"rsquo", '\u2019'}, + {"sbquo", '\u201A'}, + {"ldquo", '\u201C'}, + {"rdquo", '\u201D'}, + {"bdquo", '\u201E'}, + {"dagger", '\u2020'}, + {"Dagger", '\u2021'}, + {"permil", '\u2030'}, + {"lsaquo", '\u2039'}, + {"rsaquo", '\u203A'}, + {"euro", '\u20AC'} + }; + } + + #endregion // Constructors + + #region Methods + + private static readonly char[] hexChars = "0123456789abcdef".ToCharArray(); + + public static void HtmlAttributeEncode(string s, TextWriter output) + { + output.Write(HtmlAttributeEncode(s)); + } + + public static string HtmlAttributeEncode(string s) + { + if (null == s) + { + return null; + } + + var needEncode = false; + for (var i = 0; i < s.Length; i++) + { + if (s[i] == '&' || s[i] == '"' || s[i] == '<') + { + needEncode = true; + break; + } + } + + if (!needEncode) + { + return s; + } + + var output = new StringBuilder(); + var len = s.Length; + for (var i = 0; i < len; i++) + { + switch (s[i]) + { + case '&': + output.Append("&"); + break; + case '"': + output.Append("""); + break; + case '<': + output.Append("<"); + break; + default: + output.Append(s[i]); + break; + } + } + + return output.ToString(); + } + + public static string UrlDecode(string str) + { + return UrlDecode(str, Encoding.UTF8); + } + + private static char[] GetChars(MemoryStream b, Encoding e) + { + return e.GetChars(b.GetBuffer(), 0, (int) b.Length); + } + + public static string UrlDecode(string s, Encoding e) + { + if (null == s) + { + return null; + } + + if (s.IndexOf('%') == -1 && s.IndexOf('+') == -1) + { + return s; + } + + if (e == null) + { + e = Encoding.UTF8; + } + + var output = new StringBuilder(); + long len = s.Length; + var bytes = new MemoryStream(); + + for (var i = 0; i < len; i++) + { + if (s[i] == '%' && i + 2 < len && s[i + 1] != '%') + { + int xchar; + if (s[i + 1] == 'u' && i + 5 < len) + { + if (bytes.Length > 0) + { + output.Append(GetChars(bytes, e)); + bytes.SetLength(0); + } + + xchar = GetChar(s, i + 2, 4); + if (xchar != -1) + { + output.Append((char) xchar); + i += 5; + } + else + { + output.Append('%'); + } + } + else if ((xchar = GetChar(s, i + 1, 2)) != -1) + { + bytes.WriteByte((byte) xchar); + i += 2; + } + else + { + output.Append('%'); + } + continue; + } + + if (bytes.Length > 0) + { + output.Append(GetChars(bytes, e)); + bytes.SetLength(0); + } + + if (s[i] == '+') + { + output.Append(' '); + } + else + { + output.Append(s[i]); + } + } + + if (bytes.Length > 0) + { + output.Append(GetChars(bytes, e)); + } + + return output.ToString(); + } + + public static string UrlDecode(byte[] bytes, Encoding e) + { + return bytes == null ? null : UrlDecode(bytes, 0, bytes.Length, e); + } + + private static int GetInt(byte b) + { + var c = (char) b; + if (c >= '0' && c <= '9') + { + return c - '0'; + } + + if (c >= 'a' && c <= 'f') + { + return c - 'a' + 10; + } + + if (c >= 'A' && c <= 'F') + { + return c - 'A' + 10; + } + + return -1; + } + + private static int GetChar(byte[] bytes, int offset, int length) + { + var value = 0; + var end = length + offset; + for (var i = offset; i < end; i++) + { + var current = GetInt(bytes[i]); + if (current == -1) + { + return -1; + } + value = (value << 4) + current; + } + + return value; + } + + private static int GetChar(string str, int offset, int length) + { + var val = 0; + var end = length + offset; + for (var i = offset; i < end; i++) + { + var c = str[i]; + if (c > 127) + { + return -1; + } + + var current = GetInt((byte) c); + if (current == -1) + { + return -1; + } + val = (val << 4) + current; + } + + return val; + } + + public static string UrlDecode(byte[] bytes, int offset, int count, Encoding e) + { + if (bytes == null) + { + return null; + } + if (count == 0) + { + return String.Empty; + } + + if (bytes == null) + { + throw new ArgumentNullException("bytes"); + } + + if (offset < 0 || offset > bytes.Length) + { + throw new ArgumentOutOfRangeException("offset"); + } + + if (count < 0 || offset + count > bytes.Length) + { + throw new ArgumentOutOfRangeException("count"); + } + + var output = new StringBuilder(); + var acc = new MemoryStream(); + + var end = count + offset; + for (var i = offset; i < end; i++) + { + if (bytes[i] == '%' && i + 2 < count && bytes[i + 1] != '%') + { + int xchar; + if (bytes[i + 1] == (byte) 'u' && i + 5 < end) + { + if (acc.Length > 0) + { + output.Append(GetChars(acc, e)); + acc.SetLength(0); + } + xchar = GetChar(bytes, i + 2, 4); + if (xchar != -1) + { + output.Append((char) xchar); + i += 5; + continue; + } + } + else if ((xchar = GetChar(bytes, i + 1, 2)) != -1) + { + acc.WriteByte((byte) xchar); + i += 2; + continue; + } + } + + if (acc.Length > 0) + { + output.Append(GetChars(acc, e)); + acc.SetLength(0); + } + + if (bytes[i] == '+') + { + output.Append(' '); + } + else + { + output.Append((char) bytes[i]); + } + } + + if (acc.Length > 0) + { + output.Append(GetChars(acc, e)); + } + + return output.ToString(); + } + + public static byte[] UrlDecodeToBytes(byte[] bytes) + { + return bytes == null ? null : UrlDecodeToBytes(bytes, 0, bytes.Length); + } + + public static byte[] UrlDecodeToBytes(string str) + { + return UrlDecodeToBytes(str, Encoding.UTF8); + } + + public static byte[] UrlDecodeToBytes(string str, Encoding e) + { + if (str == null) + { + return null; + } + + if (e == null) + { + throw new ArgumentNullException("e"); + } + + return UrlDecodeToBytes(e.GetBytes(str)); + } + + public static byte[] UrlDecodeToBytes(byte[] bytes, int offset, int count) + { + if (bytes == null) + { + return null; + } + if (count == 0) + { + return new byte[0]; + } + + var len = bytes.Length; + if (offset < 0 || offset >= len) + { + throw new ArgumentOutOfRangeException("offset"); + } + + if (count < 0 || offset > len - count) + { + throw new ArgumentOutOfRangeException("count"); + } + + var result = new MemoryStream(); + var end = offset + count; + for (var i = offset; i < end; i++) + { + var c = (char) bytes[i]; + if (c == '+') + { + c = ' '; + } + else if (c == '%' && i < end - 2) + { + var xchar = GetChar(bytes, i + 1, 2); + if (xchar != -1) + { + c = (char) xchar; + i += 2; + } + } + result.WriteByte((byte) c); + } + + return result.ToArray(); + } + + public static string UrlEncode(string str) + { + return UrlEncode(str, Encoding.UTF8); + } + + public static string UrlEncode(string s, Encoding Enc) + { + if (s == null) + { + return null; + } + + if (s == "") + { + return ""; + } + + var needEncode = false; + var len = s.Length; + for (var i = 0; i < len; i++) + { + var c = s[i]; + if ((c < '0') || (c < 'A' && c > '9') || (c > 'Z' && c < 'a') || (c > 'z')) + { + if (NotEncoded(c)) + { + continue; + } + + needEncode = true; + break; + } + } + + if (!needEncode) + { + return s; + } + + // avoided GetByteCount call + var bytes = new byte[Enc.GetMaxByteCount(s.Length)]; + var realLen = Enc.GetBytes(s, 0, s.Length, bytes, 0); + return Encoding.ASCII.GetString(UrlEncodeToBytes(bytes, 0, realLen), 0, realLen); + } + + public static string UrlEncode(byte[] bytes) + { + if (bytes == null) + { + return null; + } + + if (bytes.Length == 0) + { + return ""; + } + + return Encoding.ASCII.GetString(UrlEncodeToBytes(bytes, 0, bytes.Length), 0, bytes.Length); + } + + public static string UrlEncode(byte[] bytes, int offset, int count) + { + if (bytes == null) + { + return null; + } + + if (bytes.Length == 0) + { + return ""; + } + + return Encoding.ASCII.GetString(UrlEncodeToBytes(bytes, offset, count), offset, count); + } + + public static byte[] UrlEncodeToBytes(string str) + { + return UrlEncodeToBytes(str, Encoding.UTF8); + } + + public static byte[] UrlEncodeToBytes(string str, Encoding e) + { + if (str == null) + { + return null; + } + + if (str == "") + { + return new byte[0]; + } + + var bytes = e.GetBytes(str); + return UrlEncodeToBytes(bytes, 0, bytes.Length); + } + + public static byte[] UrlEncodeToBytes(byte[] bytes) + { + if (bytes == null) + { + return null; + } + + if (bytes.Length == 0) + { + return new byte[0]; + } + + return UrlEncodeToBytes(bytes, 0, bytes.Length); + } + + private static bool NotEncoded(char c) + { + return (c == '!' || c == '\'' || c == '(' || c == ')' || c == '*' || c == '-' || c == '.' || c == '_'); + } + + private static void UrlEncodeChar(char c, Stream result, bool isUnicode) + { + if (c > 255) + { + //FIXME: what happens when there is an internal error? + //if (!isUnicode) + // throw new ArgumentOutOfRangeException ("c", c, "c must be less than 256"); + int i = c; + + result.WriteByte((byte) '%'); + result.WriteByte((byte) 'u'); + var idx = i >> 12; + result.WriteByte((byte) hexChars[idx]); + idx = (i >> 8) & 0x0F; + result.WriteByte((byte) hexChars[idx]); + idx = (i >> 4) & 0x0F; + result.WriteByte((byte) hexChars[idx]); + idx = i & 0x0F; + result.WriteByte((byte) hexChars[idx]); + return; + } + + if (c > ' ' && NotEncoded(c)) + { + result.WriteByte((byte) c); + return; + } + if (c == ' ') + { + result.WriteByte((byte) '+'); + return; + } + if ((c < '0') || + (c < 'A' && c > '9') || + (c > 'Z' && c < 'a') || + (c > 'z')) + { + if (isUnicode && c > 127) + { + result.WriteByte((byte) '%'); + result.WriteByte((byte) 'u'); + result.WriteByte((byte) '0'); + result.WriteByte((byte) '0'); + } + else + { + result.WriteByte((byte) '%'); + } + + var idx = (c) >> 4; + result.WriteByte((byte) hexChars[idx]); + idx = (c) & 0x0F; + result.WriteByte((byte) hexChars[idx]); + } + else + { + result.WriteByte((byte) c); + } + } + + public static byte[] UrlEncodeToBytes(byte[] bytes, int offset, int count) + { + if (bytes == null) + { + return null; + } + + var len = bytes.Length; + if (len == 0) + { + return new byte[0]; + } + + if (offset < 0 || offset >= len) + { + throw new ArgumentOutOfRangeException("offset"); + } + + if (count < 0 || count > len - offset) + { + throw new ArgumentOutOfRangeException("count"); + } + + var result = new MemoryStream(count); + var end = offset + count; + for (var i = offset; i < end; i++) + { + UrlEncodeChar((char) bytes[i], result, false); + } + + return result.ToArray(); + } + + public static string UrlEncodeUnicode(string str) + { + if (str == null) + { + return null; + } + + var bytes = UrlEncodeUnicodeToBytes(str); + return Encoding.ASCII.GetString(bytes, 0, bytes.Length); + } + + public static byte[] UrlEncodeUnicodeToBytes(string str) + { + if (str == null) + { + return null; + } + + if (str == "") + { + return new byte[0]; + } + + var result = new MemoryStream(str.Length); + foreach (var c in str) + { + UrlEncodeChar(c, result, true); + } + return result.ToArray(); + } + + /// + /// Decodes an HTML-encoded string and returns the decoded string. + /// + /// The HTML string to decode. + /// The decoded text. + public static string HtmlDecode(string s) + { + if (s == null) + { + throw new ArgumentNullException("s"); + } + + if (s.IndexOf('&') == -1) + { + return s; + } + + var entity = new StringBuilder(); + var output = new StringBuilder(); + var len = s.Length; + // 0 -> nothing, + // 1 -> right after '&' + // 2 -> between '&' and ';' but no '#' + // 3 -> '#' found after '&' and getting numbers + var state = 0; + var number = 0; + var have_trailing_digits = false; + + for (var i = 0; i < len; i++) + { + var c = s[i]; + if (state == 0) + { + if (c == '&') + { + entity.Append(c); + state = 1; + } + else + { + output.Append(c); + } + continue; + } + + if (c == '&') + { + state = 1; + if (have_trailing_digits) + { + entity.Append(number.ToString(CultureInfo.InvariantCulture)); + have_trailing_digits = false; + } + + output.Append(entity.ToString()); + entity.Length = 0; + entity.Append('&'); + continue; + } + + if (state == 1) + { + if (c == ';') + { + state = 0; + output.Append(entity.ToString()); + output.Append(c); + entity.Length = 0; + } + else + { + number = 0; + state = c != '#' ? 2 : 3; + entity.Append(c); + } + } + else if (state == 2) + { + entity.Append(c); + if (c == ';') + { + var key = entity.ToString(); + if (key.Length > 1 && Entities.ContainsKey(key.Substring(1, key.Length - 2))) + { + key = Entities[key.Substring(1, key.Length - 2)].ToString(); + } + + output.Append(key); + state = 0; + entity.Length = 0; + } + } + else if (state == 3) + { + if (c == ';') + { + if (number > 65535) + { + output.Append("&#"); + output.Append(number.ToString(CultureInfo.InvariantCulture)); + output.Append(";"); + } + else + { + output.Append((char) number); + } + state = 0; + entity.Length = 0; + have_trailing_digits = false; + } + else if (Char.IsDigit(c)) + { + number = number*10 + (c - '0'); + have_trailing_digits = true; + } + else + { + state = 2; + if (have_trailing_digits) + { + entity.Append(number.ToString(CultureInfo.InvariantCulture)); + have_trailing_digits = false; + } + entity.Append(c); + } + } + } + + if (entity.Length > 0) + { + output.Append(entity.ToString()); + } + else if (have_trailing_digits) + { + output.Append(number.ToString(CultureInfo.InvariantCulture)); + } + return output.ToString(); + } + + /// + /// Decodes an HTML-encoded string and sends the resulting output to a TextWriter output stream. + /// + /// The HTML string to decode + /// The TextWriter output stream containing the decoded string. + public static void HtmlDecode(string s, TextWriter output) + { + if (s != null) + { + output.Write(HtmlDecode(s)); + } + } + + /// + /// HTML-encodes a string and returns the encoded string. + /// + /// The text string to encode. + /// The HTML-encoded text. + public static string HtmlEncode(string s) + { + if (s == null) + { + return null; + } + + var needEncode = false; + for (var i = 0; i < s.Length; i++) + { + var c = s[i]; + if (c == '&' || c == '"' || c == '<' || c == '>' || c > 159) + { + needEncode = true; + break; + } + } + + if (!needEncode) + { + return s; + } + + var output = new StringBuilder(); + + var len = s.Length; + for (var i = 0; i < len; i++) + { + switch (s[i]) + { + case '&': + output.Append("&"); + break; + case '>': + output.Append(">"); + break; + case '<': + output.Append("<"); + break; + case '"': + output.Append("""); + break; + default: + // MS starts encoding with &# from 160 and stops at 255. + // We don't do that. One reason is the 65308/65310 unicode + // characters that look like '<' and '>'. +#if TARGET_JVM + if (s [i] > 159 && s [i] < 256) { +#else + if (s[i] > 159) + { +#endif + output.Append("&#"); + output.Append(((int) s[i]).ToString(CultureInfo.InvariantCulture)); + output.Append(";"); + } + else + { + output.Append(s[i]); + } + break; + } + } + return output.ToString(); + } + + /// + /// HTML-encodes a string and sends the resulting output to a TextWriter output stream. + /// + /// The string to encode. + /// The TextWriter output stream containing the encoded string. + public static void HtmlEncode(string s, TextWriter output) + { + if (s != null) + { + output.Write(HtmlEncode(s)); + } + } + + public static string UrlPathEncode(string s) + { + if (string.IsNullOrEmpty(s)) + return s; + + var result = new MemoryStream(); + var length = s.Length; + for (var i = 0; i < length; i++) + { + UrlPathEncodeChar(s[i], result); + } + + var bytes = result.ToArray(); + return Encoding.ASCII.GetString(bytes, 0, bytes.Length); + } + + private static void UrlPathEncodeChar(char c, Stream result) + { + if (c < 33 || c > 126) + { + var bIn = Encoding.UTF8.GetBytes(c.ToString()); + for (var i = 0; i < bIn.Length; i++) + { + result.WriteByte((byte) '%'); + var idx = bIn[i] >> 4; + result.WriteByte((byte) hexChars[idx]); + idx = bIn[i] & 0x0F; + result.WriteByte((byte) hexChars[idx]); + } + } + else if (c == ' ') + { + result.WriteByte((byte) '%'); + result.WriteByte((byte) '2'); + result.WriteByte((byte) '0'); + } + else + result.WriteByte((byte) c); + } + + public static NameValueCollection ParseQueryString(string query) + { + return ParseQueryString(query, Encoding.UTF8); + } + + public static NameValueCollection ParseQueryString(string query, Encoding encoding) + { + if (query == null) + throw new ArgumentNullException("query"); + if (encoding == null) + throw new ArgumentNullException("encoding"); + if (query.Length == 0 || (query.Length == 1 && query[0] == '?')) + return new NameValueCollection(); + if (query[0] == '?') + query = query.Substring(1); + + var result = new NameValueCollection(); + ParseQueryString(query, encoding, result); + return result; + } + + internal static void ParseQueryString(string query, Encoding encoding, NameValueCollection result) + { + if (query.Length == 0) + { + return; + } + + var decoded = HtmlDecode(query); + var decodedLength = decoded.Length; + var namePos = 0; + var first = true; + while (namePos <= decodedLength) + { + int valuePos = -1, valueEnd = -1; + for (var q = namePos; q < decodedLength; q++) + { + if (valuePos == -1 && decoded[q] == '=') + { + valuePos = q + 1; + } + else if (decoded[q] == '&') + { + valueEnd = q; + break; + } + } + + if (first) + { + first = false; + if (decoded[namePos] == '?') + { + namePos++; + } + } + + string name; + if (valuePos == -1) + { + name = null; + valuePos = namePos; + } + else + { + name = UrlDecode(decoded.Substring(namePos, valuePos - namePos - 1), encoding); + } + if (valueEnd < 0) + { + namePos = -1; + valueEnd = decoded.Length; + } + else + { + namePos = valueEnd + 1; + } + var value = UrlDecode(decoded.Substring(valuePos, valueEnd - valuePos), encoding); + + result.Add(name, value); + if (namePos == -1) + { + break; + } + } + } + + #endregion // Methods + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Mono/WebHeaderCollection.cs b/trunk/hammock/src/net35/Hammock/Mono/WebHeaderCollection.cs new file mode 100644 index 0000000..258fb18 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Mono/WebHeaderCollection.cs @@ -0,0 +1,625 @@ +// +// System.Net.WebHeaderCollection +// +// Authors: +// Lawrence Pit (loz@cable.a2000.nl) +// Gonzalo Paniagua Javier (gonzalo@ximian.com) +// Miguel de Icaza (miguel@novell.com) +// +// Copyright 2003 Ximian, Inc. (http://www.ximian.com) +// Copyright 2007 Novell, Inc. (http://www.novell.com) +// +// +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + + +using System; +using System.Collections; +using System.Collections.Specialized; +using System.Net; +using System.Runtime.InteropServices; +using System.Text; + +// See RFC 2068 par 4.2 Message Headers + +namespace Mono.Net +{ + [Serializable] + [ComVisible(true)] + public class WebHeaderCollection : NameValueCollection + { + private static readonly Hashtable _restricted; + private static readonly Hashtable _multiValue; + + private static readonly char[] tspecials = + new[] + { + '(', ')', '<', '>', '@', + ',', ';', ':', '\\', '"', + '/', '[', ']', '?', '=', + '{', '}', ' ', '\t' + }; + + private readonly bool internallyCreated; + + // Static Initializer + + static WebHeaderCollection() + { + // the list of restricted header names as defined + // by the ms.net spec + _restricted = new Hashtable(StringComparer.InvariantCultureIgnoreCase) + { + {"accept", true}, + {"connection", true}, + {"content-length", true}, + {"content-type", true}, + {"date", true}, + {"expect", true}, + {"host", true}, + {"if-modified-since", true}, + {"range", true}, + {"referer", true}, + {"transfer-encoding", true}, + {"user-agent", true} + }; + + // see par 14 of RFC 2068 to see which header names + // accept multiple values each separated by a comma + _multiValue = new Hashtable(StringComparer.InvariantCultureIgnoreCase) + { + {"accept", true}, + {"accept-charset", true}, + {"accept-encoding", true}, + {"accept-language", true}, + {"accept-ranges", true}, + {"allow", true}, + {"authorization", true}, + {"cache-control", true}, + {"connection", true}, + {"content-encoding", true}, + {"content-language", true}, + {"expect", true}, + {"if-match", true}, + {"if-none-match", true}, + {"proxy-authenticate", true}, + {"public", true}, + {"range", true}, + {"transfer-encoding", true}, + {"upgrade", true}, + {"vary", true}, + {"via", true}, + {"warning", true}, + {"www-authenticate", true}, + {"set-cookie", true}, + {"set-cookie2", true} + }; + + // Extra + } + + // Constructors + + public WebHeaderCollection() + { + } + + internal WebHeaderCollection(bool internallyCreated) + { + this.internallyCreated = internallyCreated; + } + + public override string[] AllKeys + { + get { return (base.AllKeys); } + } + + public override int Count + { + get { return (base.Count); } + } + + public override KeysCollection Keys + { + get { return (base.Keys); } + } + + public string this[HttpRequestHeader hrh] + { + get { return Get(RequestHeaderToString(hrh)); } + + set { Add(RequestHeaderToString(hrh), value); } + } + + public string this[HttpResponseHeader hrh] + { + get { return Get(ResponseHeaderToString(hrh)); } + + set { Add(ResponseHeaderToString(hrh), value); } + } + + // Methods + + public void Add(string header) + { + if (header == null) + throw new ArgumentNullException("header"); + var pos = header.IndexOf(':'); + if (pos == -1) + throw new ArgumentException("no colon found", "header"); + Add(header.Substring(0, pos), + header.Substring(pos + 1)); + } + + public override void Add(string name, string value) + { + if (name == null) + throw new ArgumentNullException("name"); + if (internallyCreated && IsRestricted(name)) + throw new ArgumentException("This header must be modified with the appropiate property."); + AddWithoutValidate(name, value); + } + + protected void AddWithoutValidate(string headerName, string headerValue) + { + if (!IsHeaderName(headerName)) + throw new ArgumentException("invalid header name: " + headerName, "headerName"); + headerValue = headerValue == null ? String.Empty : headerValue.Trim(); + if (!IsHeaderValue(headerValue)) + throw new ArgumentException("invalid header value: " + headerValue, "headerValue"); + base.Add(headerName, headerValue); + } + + public override string[] GetValues(string header) + { + if (header == null) + throw new ArgumentNullException("header"); + + var values = base.GetValues(header); + if (values == null || values.Length == 0) + return null; + + /* + if (IsMultiValue (header)) { + values = GetMultipleValues (values); + } + */ + + return values; + } + + public override string[] GetValues(int index) + { + var values = base.GetValues(index); + if (values == null || values.Length == 0) + { + return (null); + } + + return (values); + } + + /* Now i wonder why this is here... + static string [] GetMultipleValues (string [] values) + { + ArrayList mvalues = new ArrayList (values.Length); + StringBuilder sb = null; + for (int i = 0; i < values.Length; ++i) { + string val = values [i]; + if (val.IndexOf (',') == -1) { + mvalues.Add (val); + continue; + } + + if (sb == null) + sb = new StringBuilder (); + + bool quote = false; + for (int k = 0; k < val.Length; k++) { + char c = val [k]; + if (c == '"') { + quote = !quote; + } else if (!quote && c == ',') { + mvalues.Add (sb.ToString ().Trim ()); + sb.Length = 0; + continue; + } + sb.Append (c); + } + + if (sb.Length > 0) { + mvalues.Add (sb.ToString ().Trim ()); + sb.Length = 0; + } + } + + return (string []) mvalues.ToArray (typeof (string)); + } + */ + + public static bool IsRestricted(string headerName) + { + if (headerName == null) + throw new ArgumentNullException("headerName"); + + if (headerName == "") // MS throw nullexception here! + throw new ArgumentException("empty string", "headerName"); + + return _restricted.ContainsKey(headerName); + } + + public static bool IsRestricted(string headerName, bool response) + { + throw new NotImplementedException(); + } + + public override void Remove(string name) + { + if (name == null) + throw new ArgumentNullException("name"); + if (internallyCreated && IsRestricted(name)) + throw new ArgumentException("restricted header"); + base.Remove(name); + } + + public override void Set(string name, string value) + { + if (name == null) + throw new ArgumentNullException("name"); + if (internallyCreated && IsRestricted(name)) + throw new ArgumentException("restricted header"); + if (!IsHeaderName(name)) + throw new ArgumentException("invalid header name"); + value = value == null ? String.Empty : value.Trim(); + if (!IsHeaderValue(value)) + throw new ArgumentException("invalid header value"); + base.Set(name, value); + } + + public byte[] ToByteArray() + { + return Encoding.UTF8.GetBytes(ToString()); + } + + public override string ToString() + { + var sb = new StringBuilder(); + + var count = base.Count; + for (var i = 0; i < count; i++) + sb.Append(GetKey(i)) + .Append(": ") + .Append(Get(i)) + .Append("\r\n"); + + return sb.Append("\r\n").ToString(); + } + + public override string Get(int index) + { + return (base.Get(index)); + } + + public override string Get(string name) + { + return (base.Get(name)); + } + + public override string GetKey(int index) + { + return (base.GetKey(index)); + } + + public void Add(HttpRequestHeader header, string value) + { + Add(RequestHeaderToString(header), value); + } + + public void Remove(HttpRequestHeader header) + { + Remove(RequestHeaderToString(header)); + } + + public void Set(HttpRequestHeader header, string value) + { + Set(RequestHeaderToString(header), value); + } + + public void Add(HttpResponseHeader header, string value) + { + Add(ResponseHeaderToString(header), value); + } + + public void Remove(HttpResponseHeader header) + { + Remove(ResponseHeaderToString(header)); + } + + public void Set(HttpResponseHeader header, string value) + { + Set(ResponseHeaderToString(header), value); + } + + private static string RequestHeaderToString(HttpRequestHeader value) + { + switch (value) + { + case HttpRequestHeader.CacheControl: + return "cache-control"; + case HttpRequestHeader.Connection: + return "connection"; + case HttpRequestHeader.Date: + return "date"; + case HttpRequestHeader.KeepAlive: + return "keep-alive"; + case HttpRequestHeader.Pragma: + return "pragma"; + case HttpRequestHeader.Trailer: + return "trailer"; + case HttpRequestHeader.TransferEncoding: + return "transfer-encoding"; + case HttpRequestHeader.Upgrade: + return "upgrade"; + case HttpRequestHeader.Via: + return "via"; + case HttpRequestHeader.Warning: + return "warning"; + case HttpRequestHeader.Allow: + return "allow"; + case HttpRequestHeader.ContentLength: + return "content-length"; + case HttpRequestHeader.ContentType: + return "content-type"; + case HttpRequestHeader.ContentEncoding: + return "content-encoding"; + case HttpRequestHeader.ContentLanguage: + return "content-language"; + case HttpRequestHeader.ContentLocation: + return "content-location"; + case HttpRequestHeader.ContentMd5: + return "content-md5"; + case HttpRequestHeader.ContentRange: + return "content-range"; + case HttpRequestHeader.Expires: + return "expires"; + case HttpRequestHeader.LastModified: + return "last-modified"; + case HttpRequestHeader.Accept: + return "accept"; + case HttpRequestHeader.AcceptCharset: + return "accept-charset"; + case HttpRequestHeader.AcceptEncoding: + return "accept-encoding"; + case HttpRequestHeader.AcceptLanguage: + return "accept-language"; + case HttpRequestHeader.Authorization: + return "authorization"; + case HttpRequestHeader.Cookie: + return "cookie"; + case HttpRequestHeader.Expect: + return "expect"; + case HttpRequestHeader.From: + return "from"; + case HttpRequestHeader.Host: + return "host"; + case HttpRequestHeader.IfMatch: + return "if-match"; + case HttpRequestHeader.IfModifiedSince: + return "if-modified-since"; + case HttpRequestHeader.IfNoneMatch: + return "if-none-match"; + case HttpRequestHeader.IfRange: + return "if-range"; + case HttpRequestHeader.IfUnmodifiedSince: + return "if-unmodified-since"; + case HttpRequestHeader.MaxForwards: + return "max-forwards"; + case HttpRequestHeader.ProxyAuthorization: + return "proxy-authorization"; + case HttpRequestHeader.Referer: + return "referer"; + case HttpRequestHeader.Range: + return "range"; + case HttpRequestHeader.Te: + return "te"; + case HttpRequestHeader.Translate: + return "translate"; + case HttpRequestHeader.UserAgent: + return "user-agent"; + default: + throw new InvalidOperationException(); + } + } + + + private static string ResponseHeaderToString(HttpResponseHeader value) + { + switch (value) + { + case HttpResponseHeader.CacheControl: + return "cache-control"; + case HttpResponseHeader.Connection: + return "connection"; + case HttpResponseHeader.Date: + return "date"; + case HttpResponseHeader.KeepAlive: + return "keep-alive"; + case HttpResponseHeader.Pragma: + return "pragma"; + case HttpResponseHeader.Trailer: + return "trailer"; + case HttpResponseHeader.TransferEncoding: + return "transfer-encoding"; + case HttpResponseHeader.Upgrade: + return "upgrade"; + case HttpResponseHeader.Via: + return "via"; + case HttpResponseHeader.Warning: + return "warning"; + case HttpResponseHeader.Allow: + return "allow"; + case HttpResponseHeader.ContentLength: + return "content-length"; + case HttpResponseHeader.ContentType: + return "content-type"; + case HttpResponseHeader.ContentEncoding: + return "content-encoding"; + case HttpResponseHeader.ContentLanguage: + return "content-language"; + case HttpResponseHeader.ContentLocation: + return "content-location"; + case HttpResponseHeader.ContentMd5: + return "content-md5"; + case HttpResponseHeader.ContentRange: + return "content-range"; + case HttpResponseHeader.Expires: + return "expires"; + case HttpResponseHeader.LastModified: + return "last-modified"; + case HttpResponseHeader.AcceptRanges: + return "accept-ranges"; + case HttpResponseHeader.Age: + return "age"; + case HttpResponseHeader.ETag: + return "etag"; + case HttpResponseHeader.Location: + return "location"; + case HttpResponseHeader.ProxyAuthenticate: + return "proxy-authenticate"; + case HttpResponseHeader.RetryAfter: + return "RetryAfter"; + case HttpResponseHeader.Server: + return "server"; + case HttpResponseHeader.SetCookie: + return "set-cookie"; + case HttpResponseHeader.Vary: + return "vary"; + case HttpResponseHeader.WwwAuthenticate: + return "www-authenticate"; + default: + throw new InvalidOperationException(); + } + } + + public override IEnumerator GetEnumerator() + { + return (base.GetEnumerator()); + } + + // Internal Methods + + // With this we don't check for invalid characters in header. See bug #55994. + internal void SetInternal(string header) + { + var pos = header.IndexOf(':'); + if (pos == -1) + throw new ArgumentException("no colon found", "header"); + + SetInternal(header.Substring(0, pos), header.Substring(pos + 1)); + } + + internal void SetInternal(string name, string value) + { + value = value == null ? String.Empty : value.Trim(); + if (!IsHeaderValue(value)) + throw new ArgumentException("invalid header value"); + + if (IsMultiValue(name)) + { + base.Add(name, value); + } + else + { + base.Remove(name); + base.Set(name, value); + } + } + + internal void RemoveAndAdd(string name, string value) + { + value = value == null ? String.Empty : value.Trim(); + + base.Remove(name); + base.Set(name, value); + } + + internal void RemoveInternal(string name) + { + if (name == null) + throw new ArgumentNullException("name"); + base.Remove(name); + } + + internal static bool IsMultiValue(string headerName) + { + return !string.IsNullOrEmpty(headerName) && _multiValue.ContainsKey(headerName); + } + + internal static bool IsHeaderValue(string value) + { + // TEXT any 8 bit value except CTL's (0-31 and 127) + // but including \r\n space and \t + // after a newline at least one space or \t must follow + // certain header fields allow comments () + + var len = value.Length; + for (var i = 0; i < len; i++) + { + var c = value[i]; + if (c == 127) + return false; + if (c < 0x20 && (c != '\r' && c != '\n' && c != '\t')) + return false; + if (c == '\n' && ++i < len) + { + c = value[i]; + if (c != ' ' && c != '\t') + return false; + } + } + + return true; + } + + internal static bool IsHeaderName(string name) + { + // token = 1* + // tspecials = "(" | ")" | "<" | ">" | "@" + // | "," | ";" | ":" | "\" | <"> + // | "/" | "[" | "]" | "?" | "=" + // | "{" | "}" | SP | HT + + if (string.IsNullOrEmpty(name)) + return false; + + var len = name.Length; + for (var i = 0; i < len; i++) + { + var c = name[i]; + if (c < 0x20 || c >= 0x7f) + return false; + } + + return name.IndexOfAny(tspecials) == -1; + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Properties/AssemblyInfo.cs b/trunk/hammock/src/net35/Hammock/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..2785f7a --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Properties/AssemblyInfo.cs @@ -0,0 +1,37 @@ +using System.Reflection; +using System.Runtime.InteropServices; +using System.Security; + +// 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("Hammock")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Apitize")] +[assembly: AssemblyProduct("Hammock")] +[assembly: AssemblyCopyright("Copyright © Daniel Crenna and Jason Diller")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: AllowPartiallyTrustedCallers] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. RetryIf you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("f191262b-8d70-4050-89a0-c225cc13d568")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/trunk/hammock/src/net35/Hammock/RestBase.cs b/trunk/hammock/src/net35/Hammock/RestBase.cs new file mode 100644 index 0000000..2af603c --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/RestBase.cs @@ -0,0 +1,260 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net; +using System.Text; +using Hammock.Authentication; +using Hammock.Caching; +using Hammock.Model; +using Hammock.Retries; +using Hammock.Serialization; +using Hammock.Tasks; +using Hammock.Web; +using Hammock.Streaming; + +#if SILVERLIGHT +using Hammock.Silverlight.Compat; +#else +using System.Collections.Specialized; +#endif + +namespace Hammock +{ +#if !SILVERLIGHT + [Serializable] +#endif + public enum QueryHandling + { + /// + /// Query strings present in paths are left alone. + /// + None, + /// + /// Query string pairs present in paths are added to the parameter collection, + /// where they are appended back in the case of GET, HEAD, DELETE, and OPTIONS, or added to the + /// request body in the case of POST, or PUT. + /// + AppendToParameters + } + +#if !SILVERLIGHT + [Serializable] +#endif + public abstract class RestBase : PropertyChangedBase + { + private byte[] _postContent; + private TaskOptions _taskOptions; + private RetryPolicy _retryPolicy; + + public WebParameterCollection GetAllHeaders() + { + var headers = new WebParameterCollection(); + + var parameters = Headers.AllKeys.Select(key => new WebPair(key, Headers[key])); + foreach (var parameter in parameters) + { + headers.Add(parameter.Name, parameter.Value); + } + + return headers; + } + + protected virtual internal NameValueCollection Headers { get; set; } + protected virtual internal WebParameterCollection Parameters { get; set; } + protected virtual internal WebParameterCollection Cookies { get; set; } + protected virtual internal ICollection PostParameters { get; set; } + protected internal virtual bool TraceEnabled { get; set; } + + protected virtual internal byte[] PostContent + { + get + { + return _postContent; + } + set + { + _postContent = value; + if (value != null && (Method != WebMethod.Post && Method != WebMethod.Put)) + { + Method = WebMethod.Post; + } + } + } + + public virtual Func GetErrorResponseEntityType { get; set; } + public virtual string UserAgent { get; set; } + public virtual WebMethod? Method { get; set; } + public virtual IWebCredentials Credentials { get; set; } + public virtual Encoding Encoding { get; set; } + + protected RestBase() + { + Initialize(); + } + + private void Initialize() + { + Headers = new NameValueCollection(0); + Parameters = new WebParameterCollection(); + Cookies = new WebParameterCollection(0); + PostParameters = new List(0); + } + +#if !Silverlight + public virtual ServicePoint ServicePoint { get; set; } + public virtual bool? FollowRedirects { get; set; } +#endif + + public virtual QueryHandling? QueryHandling { get; set; } + public virtual string Proxy { get; set; } + public virtual TimeSpan? Timeout { get; set; } + public virtual string VersionPath { get; set; } + public virtual ISerializer Serializer { get; set; } + public virtual IDeserializer Deserializer { get; set; } + public virtual ICache Cache { get; set; } + public virtual CacheOptions CacheOptions { get; set; } + public virtual RetryPolicy RetryPolicy + { + get { return _retryPolicy; } + set + { + if (_retryPolicy == value) + { + return; + } + _retryPolicy = value; + RetryState = new TaskState(); + } + } + + public virtual TaskOptions TaskOptions + { + get { return _taskOptions; } + set + { + if (_taskOptions == value) + { + return; + } + _taskOptions = value; + TaskState = new TaskState(); + } + } + + public virtual bool IsFirstIteration + { + get + { + if (RetryState != null) + { + return RetryState.RepeatCount == 0; + } + if (TaskState != null) + { + return TaskState.RepeatCount == 0; + } + return true; + } + } + + public virtual ITaskState TaskState { get; set; } + public virtual ITaskState RetryState { get; set; } + public virtual StreamOptions StreamOptions { get; set; } + public virtual Func CacheKeyFunction { get; set; } + public virtual DecompressionMethods? DecompressionMethods { get; set; } + public virtual IWebQueryInfo Info { get; set; } + public virtual string Path { get; set; } + public virtual object Tag { get; set; } + + public virtual void AddHeader(string name, string value) + { + Headers.Add(name, value); + } + + public virtual void AddParameter(string name, string value) + { + Parameters.Add(name, value); + } + + public virtual void AddCookie(string name, string value) + { + Cookies.Add(new HttpCookieParameter(name, value)); + } + + public virtual void AddCookie(Uri domain, string name, string value) + { + Cookies.Add(new HttpCookieParameter(name, value) { Domain = domain }); + } + + public virtual void AddField(string name, string value) + { + var field = new HttpPostParameter(name, value); + PostParameters.Add(field); + } + + public virtual void AddFile(string name, string fileName, string filePath) + { + AddFile(name, fileName, filePath, "application/octet-stream", "form-data"); + } + + public virtual void AddFile(string name, string fileName, string filePath, string contentType) + { + AddFile(name, fileName, filePath, contentType, "form-data"); + } + + public virtual void AddFile(string name, string fileName, Stream stream) + { + AddFile(name, fileName, stream, "application/octet-stream", "form-data"); + } + + public virtual void AddFile(string name, string fileName, Stream stream, string contentType) + { + AddFile(name, fileName, stream, contentType, "form-data"); + } + + public virtual void AddFile(string name, string fileName, string filePath, string contentType, string contentDisposition) + { + var parameter = HttpPostParameter.CreateFile(name, fileName, filePath, contentType, contentDisposition); + PostParameters.Add(parameter); + } + + public virtual void AddFile(string name, string fileName, Stream stream, string contentType, string contentDisposition) + { + var parameter = HttpPostParameter.CreateFile(name, fileName, stream, contentType, contentDisposition); + PostParameters.Add(parameter); + } + + public virtual void AddPostContent(byte[] content) + { + if (PostContent == null) + { + PostContent = content; + } + else + { + var original = PostContent.Length; + var current = content.Length; + + var final = new byte[current + original]; + Array.Copy(PostContent, 0, final, 0, original); + Array.Copy(content, 0, final, original, current); + + PostContent = final; + } + } + } + + public class RetryEventArgs : EventArgs + { + public virtual RestClient Client { get; set; } + public virtual RestRequest Request { get; set; } + } + + public class FileProgressEventArgs : EventArgs + { + public virtual string FileName { get; set; } + public virtual long BytesWritten { get; set; } + public virtual long TotalBytes { get; set; } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/RestCallback.cs b/trunk/hammock/src/net35/Hammock/RestCallback.cs new file mode 100644 index 0000000..7bce326 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/RestCallback.cs @@ -0,0 +1,14 @@ +using System; + +namespace Hammock +{ +#if !SILVERLIGHT + [Serializable] +#endif + public delegate void RestCallback(RestRequest request, RestResponse response, object userState); + +#if !SILVERLIGHT + [Serializable] +#endif + public delegate void RestCallback(RestRequest request, RestResponse response, object userState); +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/RestClient.cs b/trunk/hammock/src/net35/Hammock/RestClient.cs new file mode 100644 index 0000000..0cb7b19 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/RestClient.cs @@ -0,0 +1,2748 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +#if NET40 +using System.Dynamic; +#endif +using System.IO; +using System.Linq; +using System.Net; +using System.Reflection; +using System.Text; +using System.Threading; +using Hammock.Authentication; +using Hammock.Caching; +using Hammock.Extensions; +using Hammock.Retries; +using Hammock.Serialization; +using Hammock.Tasks; +using Hammock.Web; +using Hammock.Streaming; +using Hammock.Web.Mocks; + +#if SILVERLIGHT +using Hammock.Silverlight.Compat; +#endif + +namespace Hammock +{ +#if !Silverlight + [Serializable] +#endif + public class RestClient : RestBase, IRestClient + { + private const string MockContentType = "mockContentType"; + private const string MockScheme = "mockScheme"; + private const string MockProtocol = "mock"; + private const string MockStatusDescription = "mockStatusDescription"; + private const string MockContent = "mockContent"; + private const string MockHttpMethod = "mockHttpMethod"; + private const string EndStreamingContent = "END STREAMING"; + + public virtual string Authority { get; set; } + + public virtual event EventHandler FileProgress; + public virtual void OnFileProgress(FileProgressEventArgs args) + { + var handler = FileProgress; + if (handler != null) + { + handler(this, args); + } + } + + public virtual event EventHandler BeforeRetry; + public virtual void OnBeforeRetry(RetryEventArgs args) + { + var handler = BeforeRetry; + if (handler != null) + { + handler(this, args); + } + } + +#if SILVERLIGHT + public virtual bool HasElevatedPermissions { get; set; } + /// + /// Used to set the name of the "Accept" header used by your Silverlight proxy. + /// + public virtual string SilverlightAcceptEncodingHeader { get; set;} + + /// + /// Used to set the name of the "User-Agent" header used by your Silverlight proxy. + /// + public virtual string SilverlightUserAgentHeader { get; set;} +#endif + +#if !Silverlight + private bool _firstTry = true; +#endif + private int _remainingRetries; + + private readonly object _timedTasksLock = new object(); + private readonly object _streamingLock = new object(); + private WebQuery _streamQuery; + + private readonly Dictionary _tasks = new Dictionary(); + +#if !Silverlight + +#if NET40 + public RestResponse RequestDynamic(RestRequest request) + { + var query = RequestImpl(request); + + dynamic response = BuildResponseFromResultDynamic(request, query); + + return response; + } +#endif + + public virtual RestResponse Request(RestRequest request) + { + var query = RequestImpl(request); + + return BuildResponseFromResult(request, query); + } + + public virtual RestResponse Request(RestRequest request) + { + var query = RequestImpl(request); + + return BuildResponseFromResult(request, query); + } + + public RestResponse Request() + { + var query = RequestImpl(null); + + return BuildResponseFromResult(null, query); + } + + public RestResponse Request() + { + var query = RequestImpl(null); + + return BuildResponseFromResult(null, query); + } + + private static bool _mockFactoryInitialized; + + private WebQuery RequestImpl(RestRequest request) + { + Uri uri; + WebQuery query = null; + request = request ?? new RestRequest(); + + var retryPolicy = GetRetryPolicy(request); + if (_firstTry) + { + _remainingRetries = (retryPolicy != null ? retryPolicy.RetryCount : 0) + 1; + _firstTry = false; + } + + while (_remainingRetries > 0) + { + request = PrepareRequest(request, out uri, out query); + + var url = uri.ToString(); + + if (RequestExpectsMock(request)) + { + if (!_mockFactoryInitialized) + { + WebRequest.RegisterPrefix(MockProtocol, new MockWebRequestFactory()); + _mockFactoryInitialized = true; + } + + url = BuildMockRequestUrl(request, query, url); + } + + UpdateRetryState(request); + + WebException exception; + if (!RequestWithCache(request, query, url, out exception) && + !RequestMultiPart(request, query, url, out exception)) + { + query.Request(url, out exception); + } + + query.Result.Exception = exception; + var current = query.Result; + + if (retryPolicy != null) + { + var retry = _remainingRetries > 0 && ShouldRetry(retryPolicy, exception, current); + + if (retry) + { + _remainingRetries--; + if (_remainingRetries > 0) + { + query.Result = new WebQueryResult { TimesTried = GetIterationCount(request) }; + + OnBeforeRetry(new RetryEventArgs { Client = this, Request = request }); + } + } + else + { + _remainingRetries = 0; + } + } + else + { + _remainingRetries = 0; + } + } + + _firstTry = _remainingRetries == 0; + return query; + } + + private RestRequest PrepareRequest(RestRequest request, out Uri uri, out WebQuery query) + { + request = request ?? new RestRequest(); + uri = request.BuildEndpoint(this); + query = GetQueryFor(request, uri); + SetQueryMeta(request, query); + return request; + } + + private bool RequestMultiPart(RestBase request, WebQuery query, string url, out WebException exception) + { + var parameters = GetPostParameters(request); + if (parameters == null || parameters.Count() == 0) + { + exception = null; + return false; + } + + // [DC]: Default to POST if no method provided + query.Method = query.Method != WebMethod.Post && query.Method != WebMethod.Put ? WebMethod.Post : query.Method; + query.Request(url, parameters, out exception); + return true; + } + + private bool RequestWithCache(RestBase request, WebQuery query, string url, out WebException exception) + { + var cache = GetCache(request); + if (cache == null) + { + exception = null; + return false; + } + + var options = GetCacheOptions(request); + if (options == null) + { + exception = null; + return false; + } + + // [DC]: This is currently prefixed to the full URL + var function = GetCacheKeyFunction(request); + var key = function != null ? function.Invoke() : ""; + + switch (options.Mode) + { + case CacheMode.NoExpiration: + query.Request(url, key, cache, out exception); + break; + case CacheMode.AbsoluteExpiration: + var expiry = options.Duration.FromNow(); + query.Request(url, key, cache, expiry, out exception); + break; + case CacheMode.SlidingExpiration: + query.Request(url, key, cache, options.Duration, out exception); + break; + default: + throw new NotSupportedException("Unknown CacheMode"); + } + + return true; + } +#endif + private void UpdateRepeatingRequestState(RestBase request) + { + var taskState = request.TaskState ?? TaskState; + if (taskState == null) + { + return; + } + taskState.RepeatCount++; + taskState.LastRepeat = DateTime.Now; + } + + private void UpdateRetryState(RestBase request) + { + var retryState = request.RetryState ?? RetryState; + if (retryState == null) + { + return; + } + + retryState.RepeatCount++; + retryState.LastRepeat = DateTime.Now; + } + + private static bool ShouldRetry(RetryPolicy retryPolicy, + Exception exception, + WebQueryResult current) + { + var retry = false; + foreach (var condition in retryPolicy.RetryConditions.OfType()) + { + if (exception == null) + { + continue; + } + retry |= condition.RetryIf(exception); + } + + foreach (var condition in retryPolicy.RetryConditions.OfType()) + { + if (current == null) + { + continue; + } + retry |= condition.RetryIf(current); + } + + foreach (var condition in retryPolicy.RetryConditions.OfType()) + { + var innerType = condition.GetDeclaredTypeForGeneric(typeof(IRetryCondition<>)); + if (innerType == null) + { + continue; + } + + /* + var retryType = typeof(RetryCustomCondition<>).MakeGenericType(innerType); + if (retryType == null) + { + continue; + } + */ + + var func = condition.GetValue("ConditionFunction") as MulticastDelegate; + if (func == null) + { + continue; + } + + // Call the function to find the retry evaluator +#if !Smartphone && !NETCF + var t = func.DynamicInvoke(null); +#else + var del = func.GetInvocationList().FirstOrDefault(); + var t = del.Method.Invoke(func, null); +#endif + + // Invoke the retry predicate and pass the evaluator + var p = condition.GetValue("RetryIf"); + var r = p.GetType().InvokeMember("Invoke", + BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Instance, + null, p, new[] { t }); + + retry |= (bool)r; + } + + return retry; + } + + private string BuildMockRequestUrl(RestRequest request, + WebQuery query, + string url) + { + if (url.Contains("https")) + { + url = url.Replace("https", MockProtocol); + + query.Parameters.Add(MockScheme, "https"); + } + if (url.Contains("http")) + { + url = url.Replace("http", MockProtocol); + query.Parameters.Add(MockScheme, "http"); + } + + if (request.ExpectStatusCode.HasValue) + { + query.Parameters.Add("mockStatusCode", ((int)request.ExpectStatusCode.Value).ToString()); + if (request.ExpectStatusDescription.IsNullOrBlank()) + { + query.Parameters.Add(MockStatusDescription, request.ExpectStatusCode.ToString()); + } + } + if (!request.ExpectStatusDescription.IsNullOrBlank()) + { + query.Parameters.Add(MockStatusDescription, request.ExpectStatusDescription); + } + + query.Parameters.Add( + MockHttpMethod, request.Method.ToString().ToUpper() + ); + + var expectEntity = SerializeExpectEntity(request); + if (expectEntity != null) + { + query.Parameters.Add(MockContent, expectEntity.Content); + query.Parameters.Add(MockContentType, expectEntity.ContentType); + query.HasEntity = true; // Used with POSTs + } + else + { + if (!request.ExpectContent.IsNullOrBlank()) + { + query.Parameters.Add(MockContent, request.ExpectContent); + query.Parameters.Add(MockContentType, + !request.ExpectContentType.IsNullOrBlank() + ? request.ExpectContentType + : "text/html" + ); + } + else + { + if (!request.ExpectContentType.IsNullOrBlank()) + { + query.Parameters.Add( + MockContentType, request.ExpectContentType + ); + } + } + } + + if (request.ExpectHeaders.Count > 0) + { + var names = new StringBuilder(); + var values = new StringBuilder(); + var count = 0; + foreach (var key in request.ExpectHeaders.AllKeys) + { + names.Append(key); + values.Append(request.ExpectHeaders[key].Value); + count++; + if (count < request.ExpectHeaders.Count) + { + names.Append(","); + values.Append(","); + } + } + + query.Parameters.Add("mockHeaderNames", names.ToString()); + query.Parameters.Add("mockHeaderValues", values.ToString()); + } + + return url; + } + + private static bool RequestExpectsMock(RestRequest request) + { + return request.ExpectEntity != null || + request.ExpectHeaders.Count > 0 || + request.ExpectStatusCode.HasValue || + !request.ExpectContent.IsNullOrBlank() || + !request.ExpectContentType.IsNullOrBlank() || + !request.ExpectStatusDescription.IsNullOrBlank(); + } + + private ICache GetCache(RestBase request) + { + return request.Cache ?? Cache; + } + + private IEnumerable GetPostParameters(RestBase request) + { + if (request.PostParameters != null) + { + foreach (var parameter in request.PostParameters) + { + yield return parameter; + } + } + + if (PostParameters == null) + { + yield break; + } + + foreach (var parameter in PostParameters) + { + yield return parameter; + } + } + + private CacheOptions GetCacheOptions(RestBase request) + { + return request.CacheOptions ?? CacheOptions; + } + + private Func GetCacheKeyFunction(RestBase request) + { + return request.CacheKeyFunction ?? CacheKeyFunction; + } + + private string GetProxy(RestBase request) + { + return request.Proxy ?? Proxy; + } + + private string GetUserAgent(RestBase request) + { + var userAgent = request.UserAgent.IsNullOrBlank() + ? UserAgent + : request.UserAgent; + return userAgent; + } + + private ISerializer GetSerializer(RestBase request) + { + return request.Serializer ?? Serializer; + } + + private IWebCredentials GetWebCredentials(RestBase request) + { + var credentials = request.Credentials ?? Credentials; + return credentials; + } + + private IWebQueryInfo GetInfo(RestBase request) + { + var info = request.Info ?? Info; + return info; + } + + private bool GetTraceEnabled(RestBase request) + { + var info = request.TraceEnabled || TraceEnabled; + return info; + } + + private TimeSpan? GetTimeout(RestBase request) + { + return request.Timeout ?? Timeout; + } + + private DecompressionMethods? GetDecompressionMethods(RestBase request) + { + return request.DecompressionMethods ?? DecompressionMethods; + } + + private WebMethod GetWebMethod(RestBase request) + { + var method = !request.Method.HasValue + ? !Method.HasValue + ? WebMethod.Get + : Method.Value + : request.Method.Value; + + return method; + } + + private byte[] GetPostContent(RestBase request) + { + var content = request.PostContent ?? PostContent; + return content; + } + + private RetryPolicy GetRetryPolicy(RestBase request) + { + var policy = request.RetryPolicy ?? RetryPolicy; + return policy; + } + + private Encoding GetEncoding(RestBase request) + { + var encoding = request.Encoding ?? Encoding; + return encoding; + } + +#if !SILVERLIGHT + private bool GetFollowRedirects(RestBase request) + { + var redirects = request.FollowRedirects ?? FollowRedirects ?? false; + return redirects; + } +#endif + + private TaskOptions GetTaskOptions(RestBase request) + { + var options = request.TaskOptions ?? TaskOptions; + return options; + } + + private StreamOptions GetStreamOptions(RestBase request) + { + var options = request.StreamOptions ?? StreamOptions; + return options; + } + + private object GetTag(RestBase request) + { + var tag = request.Tag ?? Tag; + return tag; + } + +#if !WindowsPhone + public virtual IAsyncResult BeginRequest(RestRequest request, RestCallback callback, object userState) + { + return BeginRequestImpl(request, callback, null, null, false /* isInternal */, userState); + } + + public virtual IAsyncResult BeginRequest(RestRequest request, RestCallback callback, object userState) + { + return BeginRequestImpl(request, callback, null, null, false /* isInternal */, null); + } + + public IAsyncResult BeginRequest() + { + return BeginRequest(null /* request */, null /* callback */); + } + + public IAsyncResult BeginRequest() + { + return BeginRequest(null /* request */, null /* callback */); + } + +#if NET40 + public IAsyncResult BeginRequestDynamic() + { + return BeginRequestDynamic(null /* request */, null /* callback */); + } +#endif + + public virtual IAsyncResult BeginRequest(RestRequest request, RestCallback callback) + { + return BeginRequestImpl(request, callback, null, null, false /* isInternal */, null); + } + + public virtual IAsyncResult BeginRequest(RestRequest request, RestCallback callback) + { + return BeginRequestImpl(request, callback, null, null, false /* isInternal */, null); + } + +#if NET40 + public virtual IAsyncResult BeginRequestDynamic(RestRequest request, RestCallback callback) + { + return BeginRequestImplDynamic(request, callback, null, null, false /* isInternal */, null); + } + + public virtual IAsyncResult BeginRequestDynamic(RestRequest request, RestCallback callback, object userState) + { + return BeginRequestImplDynamic(request, callback, null, null, false /* isInternal */, userState); + } +#endif + + public virtual IAsyncResult BeginRequest(RestCallback callback) + { + return BeginRequestImpl(null, callback, null, null, false /* isInternal */, null); + } + + public virtual IAsyncResult BeginRequest(RestRequest request) + { + return BeginRequest(request, null, null); + } + + public IAsyncResult BeginRequest(RestRequest request, object userState) + { + return BeginRequest(request, null, userState); + } + + public virtual IAsyncResult BeginRequest(RestRequest request) + { + return BeginRequest(request, null, null); + } + + public IAsyncResult BeginRequest(RestRequest request, object userState) + { + return BeginRequest(request, null, userState); + } + + public virtual IAsyncResult BeginRequest(RestCallback callback) + { + return BeginRequest(null, callback, null); + } +#else + public virtual void BeginRequest(RestRequest request, RestCallback callback, object userState) + { + BeginRequestImpl(request, callback, null, null, false /* isInternal */, userState); + } + + public virtual void BeginRequest(RestRequest request, RestCallback callback, object userState) + { + BeginRequestImpl(request, callback, null, null, false /* isInternal */, null); + } + + public virtual void BeginRequest() + { + BeginRequest(null /* request */, null /* callback */); + } + + public virtual void BeginRequest() + { + BeginRequest(null /* request */, null /* callback */); + } + + public virtual void BeginRequest(RestRequest request, RestCallback callback) + { + BeginRequestImpl(request, callback, null, null, false /* isInternal */, null); + } + + public virtual void BeginRequest(RestRequest request, RestCallback callback) + { + BeginRequestImpl(request, callback, null, null, false /* isInternal */, null); + } + + public virtual void BeginRequest(RestCallback callback) + { + BeginRequestImpl(null, callback, null, null, false /* isInternal */, null); + } + + public virtual void BeginRequest(RestRequest request) + { + BeginRequest(request, null, null); + } + + public void BeginRequest(RestRequest request, object userState) + { + BeginRequest(request, null, userState); + } + + public virtual void BeginRequest(RestRequest request) + { + BeginRequest(request, null, null); + } + + public void BeginRequest(RestRequest request, object userState) + { + BeginRequest(request, null, userState); + } + + public virtual void BeginRequest(RestCallback callback) + { + BeginRequest(null, callback, null); + } +#endif + +#if !WindowsPhone + public virtual RestResponse EndRequest(IAsyncResult result) + { +#if !Mono && !NETCF + var webResult = EndRequestImpl(result); +#else + var webResult = EndRequestImpl(result, null); +#endif + return webResult.AsyncState as RestResponse; + } + + public virtual RestResponse EndRequest(IAsyncResult result, TimeSpan timeout) + { + var webResult = EndRequestImpl(result, timeout); + return webResult.AsyncState as RestResponse; + } + + public virtual RestResponse EndRequest(IAsyncResult result) + { +#if !Mono && !NETCF + var webResult = EndRequestImpl(result); +#else + var webResult = EndRequestImpl(result, null); +#endif + return webResult.AsyncState as RestResponse; + } + +#if NET40 + public virtual RestResponse EndRequestDynamic(IAsyncResult result) + { +#if !Mono + var webResult = EndRequestImplDynamic(result); +#else + var webResult = EndRequestImplDynamic(result, null); +#endif + return webResult.AsyncState as RestResponse; + } +#endif + + public virtual RestResponse EndRequest(IAsyncResult result, TimeSpan timeout) + { + var webResult = EndRequestImpl(result, timeout); + return webResult.AsyncState as RestResponse; + } + +#if !Mono && !NETCF + private WebQueryAsyncResult EndRequestImpl(IAsyncResult result, TimeSpan? timeout = null) + { +#else + private WebQueryAsyncResult EndRequestImpl(IAsyncResult result, TimeSpan? timeout) + { +#endif + var webResult = result as WebQueryAsyncResult; + if (webResult == null) + { + throw new InvalidOperationException("The IAsyncResult provided was not for this operation."); + } + + var tag = (Triplet)webResult.Tag; + + if (RequestExpectsMock(tag.First)) + { + // [DC]: Mock results come via InnerResult + webResult = (WebQueryAsyncResult)webResult.InnerResult; + } + + if (webResult.CompletedSynchronously) + { + var query = webResult.AsyncState as WebQuery; + if (query != null) + { + // [DC]: From cache + CompleteWithQuery(query, tag.First, tag.Second, webResult); + } + else + { + // [DC]: From mocks + webResult = CompleteWithMockWebResponse(result, webResult, tag); + } + } + + if (!webResult.IsCompleted) + { + if(timeout.HasValue) + { +#if NETCF + var millisecondsTimeout = Convert.ToInt32(timeout.Value.TotalMilliseconds); + webResult.AsyncWaitHandle.WaitOne(millisecondsTimeout, false); +#else + webResult.AsyncWaitHandle.WaitOne(timeout.Value); +#endif + } + else + { + webResult.AsyncWaitHandle.WaitOne(); + } + } + return webResult; + } + +#if !Mono && !NETCF + private WebQueryAsyncResult EndRequestImpl(IAsyncResult result, TimeSpan? timeout = null) +#else + private WebQueryAsyncResult EndRequestImpl(IAsyncResult result, TimeSpan? timeout) +#endif + { + var webResult = result as WebQueryAsyncResult; + if (webResult == null) + { + throw new InvalidOperationException("The IAsyncResult provided was not for this operation."); + } + + var tag = (Triplet, object>)webResult.Tag; + + if (RequestExpectsMock(tag.First)) + { + // [DC]: Mock results come via InnerResult + webResult = (WebQueryAsyncResult)webResult.InnerResult; + } + + if (webResult.CompletedSynchronously) + { + var query = webResult.AsyncState as WebQuery; + if (query != null) + { + // [DC]: From cache + CompleteWithQuery(query, tag.First, tag.Second, webResult); + } + else + { + // [DC]: From mocks + webResult = CompleteWithMockWebResponse(result, webResult, tag); + } + } + + if (!webResult.IsCompleted) + { + if(timeout.HasValue) + { +#if NETCF + var millisecondsTimeout = Convert.ToInt32(timeout.Value.TotalMilliseconds); + webResult.AsyncWaitHandle.WaitOne(millisecondsTimeout, false); +#else + webResult.AsyncWaitHandle.WaitOne(timeout.Value); +#endif + } + else + { + webResult.AsyncWaitHandle.WaitOne(); + } + } + return webResult; + } +#endif + +#if NET40 +#if !Mono + private WebQueryAsyncResult EndRequestImplDynamic(IAsyncResult result, TimeSpan? timeout = null) +#else + private WebQueryAsyncResult EndRequestImplDynamic(IAsyncResult result, TimeSpan? timeout) +#endif + { + var webResult = result as WebQueryAsyncResult; + if (webResult == null) + { + throw new InvalidOperationException("The IAsyncResult provided was not for this operation."); + } + + var tag = (Triplet, object>) webResult.Tag; + + if (RequestExpectsMock(tag.First)) + { + // [DC]: Mock results come via InnerResult + webResult = (WebQueryAsyncResult) webResult.InnerResult; + } + + if (webResult.CompletedSynchronously) + { + var query = webResult.AsyncState as WebQuery; + if (query != null) + { + // [DC]: From cache + CompleteWithQueryDynamic(query, tag.First, tag.Second, webResult); + } + else + { + // [DC]: From mocks + webResult = CompleteWithMockWebResponse(result, webResult, tag); + } + } + + if (!webResult.IsCompleted) + { + if(timeout.HasValue) + { + webResult.AsyncWaitHandle.WaitOne(timeout.Value); + } + else + { + webResult.AsyncWaitHandle.WaitOne(); + } + } + return webResult; + } +#endif + + private WebQueryAsyncResult CompleteWithMockWebResponse( + IAsyncResult result, + IAsyncResult webResult, + Triplet, object> tag) + { + var webResponse = (WebResponse)webResult.AsyncState; + var restRequest = tag.First; + var userState = tag.Third; + + var m = new MemoryStream(); + using (var stream = webResponse.GetResponseStream()) + { + if (stream != null) + { + using (var reader = new StreamReader(stream)) + { + while (reader.Peek() >= 0) + { + m.WriteByte((byte) reader.Read()); + } + } + } + } + m.Position = 0; + + var restResponse = new RestResponse + { + ContentStream = m, + ContentType = webResponse.ContentType, + ContentLength = webResponse.ContentLength, + StatusCode = restRequest.ExpectStatusCode.HasValue + ? restRequest.ExpectStatusCode.Value + : 0, + StatusDescription = restRequest.ExpectStatusDescription, + ResponseUri = webResponse.ResponseUri, + IsMock = true + }; + + foreach (var key in webResponse.Headers.AllKeys) + { + restResponse.Headers.Add(key, webResponse.Headers[key]); + } + + var deserializer = restRequest.Deserializer ?? Deserializer; + if (deserializer != null && !restResponse.Content.IsNullOrBlank()) + { + restResponse.ContentEntity = deserializer.Deserialize(restResponse); + } + + TraceResponseWithMock(restResponse); + + var parentResult = (WebQueryAsyncResult)result; + parentResult.AsyncState = restResponse; + parentResult.IsCompleted = true; + + var callback = tag.Second; + if (callback != null) + { + callback.Invoke(restRequest, restResponse, userState); + } + parentResult.Signal(); + return parentResult; + } + + private WebQueryAsyncResult CompleteWithMockWebResponse( + IAsyncResult result, + IAsyncResult webResult, + Triplet tag) + { + var webResponse = (WebResponse)webResult.AsyncState; + var restRequest = tag.First; + var userState = tag.Third; + + var m = new MemoryStream(); + using (var stream = webResponse.GetResponseStream()) + { + if (stream != null) + { + using (var reader = new StreamReader(stream)) + { + while (reader.Peek() >= 0) + { + m.WriteByte((byte) reader.Read()); + } + } + } + } + m.Position = 0; + + var restResponse = new RestResponse + { + ContentStream = m, + ContentType = webResponse.ContentType, + ContentLength = webResponse.ContentLength, + StatusCode = restRequest.ExpectStatusCode.HasValue + ? restRequest.ExpectStatusCode.Value + : 0, + StatusDescription = restRequest.ExpectStatusDescription, + ResponseUri = webResponse.ResponseUri, + IsMock = true + }; + + foreach (var key in webResponse.Headers.AllKeys) + { + restResponse.Headers.Add(key, webResponse.Headers[key]); + } + + var deserializer = restRequest.Deserializer ?? Deserializer; + if (deserializer != null && !restResponse.Content.IsNullOrBlank() && restRequest.ResponseEntityType != null) + { + restResponse.ContentEntity = deserializer.Deserialize(restResponse, restRequest.ResponseEntityType); + } + + TraceResponseWithMock(restResponse); + + var parentResult = (WebQueryAsyncResult)result; + parentResult.AsyncState = restResponse; + parentResult.IsCompleted = true; + + var callback = tag.Second; + if (callback != null) + { + callback.Invoke(restRequest, restResponse, userState); + } + parentResult.Signal(); + return parentResult; + } + + private void TraceResponseWithMock(RestResponseBase restResponse) + { +#if TRACE + if(!TraceEnabled) + { + return; + } + + Trace.WriteLine(string.Concat("RESPONSE: ", restResponse.StatusCode, " ", restResponse.StatusDescription)); + Trace.WriteLineIf(restResponse.Headers.AllKeys.Count() > 0, "HEADERS:"); + foreach (var trace in restResponse.Headers.AllKeys.Select(key => string.Concat("\t", key, ": ", restResponse.Headers[key]))) + { + Trace.WriteLine(trace); + } + Trace.WriteLine(string.Concat("\r\n", restResponse.Content)); +#endif + } + +#if !WindowsPhone + // TODO BeginRequestImpl and BeginRequestImpl have too much duplication + private IAsyncResult BeginRequestImpl(RestRequest request, + RestCallback callback, + WebQuery query, + string url, + bool isInternal, + object userState) + { + request = request ?? new RestRequest(); + if (!isInternal) + { + // [DC]: Recursive call possible, only do this once + var uri = request.BuildEndpoint(this); + query = GetQueryFor(request, uri); + SetQueryMeta(request, query); + url = uri.ToString(); + } + + if (RequestExpectsMock(request)) + { + url = BuildMockRequestUrl(request, query, url); + } + + var retryPolicy = GetRetryPolicy(request); + bool inRetryScope = false; + if (!isInternal && retryPolicy != null) + { + _remainingRetries = retryPolicy.RetryCount; + inRetryScope = true; + } + + Func beginRequest; + WebQueryAsyncResult asyncResult; + + var streamOptions = GetStreamOptions(request); + if (streamOptions != null) + { +#if !SILVERLIGHT + query.KeepAlive = true; +#endif + var duration = streamOptions.Duration.HasValue + ? streamOptions.Duration.Value + : TimeSpan.Zero; + + var resultCount = streamOptions.ResultsPerCallback.HasValue + ? streamOptions.ResultsPerCallback.Value + : 10; + + beginRequest = () => BeginRequestStreamFunction( + request, query, url, callback, duration, resultCount, userState + ); + + asyncResult = beginRequest.Invoke(); + } + else + { + beginRequest + = () => BeginRequestFunction(isInternal, + request, + query, + url, + callback, + userState); + + asyncResult = beginRequest.Invoke(); + } + + if (isInternal || (request.TaskOptions == null || request.TaskOptions.RepeatInterval.TotalMilliseconds == 0)) + { + if (IsFirstIteration && request.IsFirstIteration) + { + query.QueryResponse += (sender, args) => + { + var current = query.Result; + + if (retryPolicy != null) + { + // [DC]: Query should already have exception applied + var exception = query.Result.Exception; + var retry = inRetryScope && + _remainingRetries > 0 && + ShouldRetry(retryPolicy, exception, current); + + if (retry) + { + UpdateRetryState(request); + BeginRequestImpl(request, callback, query, url, true /* isInternal */, userState); + Interlocked.Decrement(ref _remainingRetries); + if(_remainingRetries > 0) + { + OnBeforeRetry(new RetryEventArgs { Client = this, Request = request }); + } + } + else if (inRetryScope) + { + _remainingRetries = 0; + } + current.TimesTried = GetIterationCount(request); + } + else if (inRetryScope) + { + _remainingRetries = 0; + } + + query.Result = current; + + if (_remainingRetries == 0) + { + CompleteWithQuery(query, request, callback, asyncResult); + } + }; + } + UpdateRepeatingRequestState(request); + } + return asyncResult; + } + + +#if NET40 + private IAsyncResult BeginRequestImplDynamic(RestRequest request, + RestCallback callback, + WebQuery query, + string url, + bool isInternal, + object userState) + { + request = request ?? new RestRequest(); + if (!isInternal) + { + var uri = request.BuildEndpoint(this); + query = GetQueryFor(request, uri); + SetQueryMeta(request, query); + url = uri.ToString(); + } + + if (RequestExpectsMock(request)) + { + url = BuildMockRequestUrl(request, query, url); + } + + var retryPolicy = GetRetryPolicy(request); + bool inRetryScope = false; + if (!isInternal && retryPolicy != null) + { + _remainingRetries = retryPolicy.RetryCount; + inRetryScope = true; + } + + Func beginRequest; + WebQueryAsyncResult asyncResult; + + var streamOptions = GetStreamOptions(request); + if (streamOptions != null) + { +#if !SILVERLIGHT + query.KeepAlive = true; +#endif + + var duration = streamOptions.Duration.HasValue + ? streamOptions.Duration.Value + : TimeSpan.Zero; + + var resultCount = streamOptions.ResultsPerCallback.HasValue + ? streamOptions.ResultsPerCallback.Value + : 10; + + beginRequest = () => BeginRequestStreamFunction( + request, query, url, callback, duration, resultCount, userState + ); + + asyncResult = beginRequest.Invoke(); + } + else + { + beginRequest = () => BeginRequestFunction( + isInternal, request, query, url, callback, userState + ); + + asyncResult = beginRequest.Invoke(); + } + if (isInternal || (request.TaskOptions == null || request.TaskOptions.RepeatInterval.TotalMilliseconds == 0)) + { + if (IsFirstIteration && request.IsFirstIteration) + { + query.QueryResponse += (sender, args) => + { + var current = query.Result; + + if (retryPolicy != null) + { + // [DC]: Query should already have exception applied + var exception = query.Result.Exception; + var retry = inRetryScope && + _remainingRetries > 0 && + ShouldRetry(retryPolicy, exception, current); + + if (retry) + { + UpdateRetryState(request); + BeginRequestImpl(request, callback, query, url, true /* isInternal */, userState); + Interlocked.Decrement(ref _remainingRetries); + if (_remainingRetries > 0) + { + OnBeforeRetry(new RetryEventArgs { Client = this, Request = request }); + } + } + else if (inRetryScope) + { + _remainingRetries = 0; + } + current.TimesTried = GetIterationCount(request); + } + else if (inRetryScope) + { + _remainingRetries = 0; + } + + query.Result = current; + + // [DC]: Callback is for a final result, not a retry + if (_remainingRetries == 0) + { + CompleteWithQueryDynamic(query, request, callback, asyncResult); + } + }; + } + UpdateRepeatingRequestState(request); + } + return asyncResult; + } +#endif + + private IAsyncResult BeginRequestImpl(RestRequest request, + RestCallback callback, + WebQuery query, + string url, + bool isInternal, + object userState) + { + request = request ?? new RestRequest(); + if (!isInternal) + { + var uri = request.BuildEndpoint(this); + query = GetQueryFor(request, uri); + SetQueryMeta(request, query); + url = uri.ToString(); + } + + if (RequestExpectsMock(request)) + { + url = BuildMockRequestUrl(request, query, url); + } + + var retryPolicy = GetRetryPolicy(request); + bool inRetryScope = false; + if (!isInternal && retryPolicy != null) + { + _remainingRetries = retryPolicy.RetryCount; + inRetryScope = true; + } + + Func beginRequest; + WebQueryAsyncResult asyncResult; + + var streamOptions = GetStreamOptions(request); + if (streamOptions != null) + { +#if !SILVERLIGHT + query.KeepAlive = true; +#endif + + var duration = streamOptions.Duration.HasValue + ? streamOptions.Duration.Value + : TimeSpan.Zero; + + var resultCount = streamOptions.ResultsPerCallback.HasValue + ? streamOptions.ResultsPerCallback.Value + : 10; + + beginRequest = () => BeginRequestStreamFunction( + request, query, url, callback, duration, resultCount, userState + ); + + asyncResult = beginRequest.Invoke(); + } + else + { + beginRequest = () => BeginRequestFunction( + isInternal, request, query, url, callback, userState + ); + + asyncResult = beginRequest.Invoke(); + } + if (isInternal || (request.TaskOptions == null || request.TaskOptions.RepeatInterval.TotalMilliseconds == 0)) + { + if (IsFirstIteration && request.IsFirstIteration) + { + query.QueryResponse += (sender, args) => + { + var current = query.Result; + + if (retryPolicy != null) + { + // [DC]: Query should already have exception applied + var exception = query.Result.Exception; + var retry = inRetryScope && + _remainingRetries > 0 && + ShouldRetry(retryPolicy, exception, current); + + if (retry) + { + UpdateRetryState(request); + BeginRequestImpl(request, callback, query, url, true /* isInternal */, userState); + Interlocked.Decrement(ref _remainingRetries); + if(_remainingRetries > 0) + { + OnBeforeRetry(new RetryEventArgs { Client = this, Request = request }); + } + } + else if (inRetryScope) + { + _remainingRetries = 0; + } + current.TimesTried = GetIterationCount(request); + } + else if (inRetryScope) + { + _remainingRetries = 0; + } + + query.Result = current; + + // [DC]: Callback is for a final result, not a retry + if (_remainingRetries == 0) + { + CompleteWithQuery(query, request, callback, asyncResult); + } + }; + } + UpdateRepeatingRequestState(request); + } + return asyncResult; + } +#else + // TODO BeginRequest and BeginRequest have too much duplication + + private void BeginRequestImpl(RestRequest request, + RestCallback callback, + WebQuery query, + string url, + bool isInternal, + object userState) + { + request = request ?? new RestRequest(); + if (!isInternal) + { + // [DC]: Recursive call possible, only do this once + var uri = request.BuildEndpoint(this); + query = GetQueryFor(request, uri); + SetQueryMeta(request, query); + url = uri.ToString(); + } + + if (RequestExpectsMock(request)) + { + url = BuildMockRequestUrl(request, query, url); + } + + var retryPolicy = GetRetryPolicy(request); + _remainingRetries = (retryPolicy != null + ? retryPolicy.RetryCount + : 0); + + Action beginRequest; + + var streamOptions = GetStreamOptions(request); + if (streamOptions != null) + { +#if !SILVERLIGHT + query.KeepAlive = true; +#endif + var duration = streamOptions.Duration.HasValue + ? streamOptions.Duration.Value + : TimeSpan.Zero; + + var resultCount = streamOptions.ResultsPerCallback.HasValue + ? streamOptions.ResultsPerCallback.Value + : 10; + + beginRequest = () => BeginRequestStreamFunction( + request, query, url, callback, duration, resultCount, userState + ); + + beginRequest.Invoke(); + } + else + { + beginRequest = ()=> BeginRequestFunction(isInternal, + request, + query, + url, + callback, + userState); + + beginRequest.Invoke(); + } + + if (isInternal || (request.TaskOptions == null || request.TaskOptions.RepeatInterval.TotalMilliseconds == 0)) + { + if (request.IsFirstIteration && IsFirstIteration) + { + query.QueryResponse += (sender, args) => QueryResponseCallback(query, + retryPolicy, + request, + callback, + url, + userState); + } + UpdateRepeatingRequestState(request); + UpdateRetryState(request); + } + } + + private void BeginRequestImpl(RestRequest request, + RestCallback callback, + WebQuery query, + string url, + bool isInternal, + object userState) + { + request = request ?? new RestRequest(); + if (!isInternal) + { + var uri = request.BuildEndpoint(this); + query = GetQueryFor(request, uri); + SetQueryMeta(request, query); + url = uri.ToString(); + } + + if (RequestExpectsMock(request)) + { + url = BuildMockRequestUrl(request, query, url); + } + + var retryPolicy = GetRetryPolicy(request); + _remainingRetries = (retryPolicy != null + ? retryPolicy.RetryCount + : 0); + + Action beginRequest; + var streamOptions = GetStreamOptions(request); + if (streamOptions != null) + { +#if !SILVERLIGHT + query.KeepAlive = true; +#endif + + var duration = streamOptions.Duration.HasValue + ? streamOptions.Duration.Value + : TimeSpan.Zero; + + var resultCount = streamOptions.ResultsPerCallback.HasValue + ? streamOptions.ResultsPerCallback.Value + : 10; + + beginRequest = () => BeginRequestStreamFunction( + request, query, url, callback, duration, resultCount, userState + ); + + beginRequest.Invoke(); + } + else + { + beginRequest = () => BeginRequestFunction( + isInternal, request, query, url, callback, userState + ); + + beginRequest.Invoke(); + } + if (IsFirstIteration && request.IsFirstIteration) + { + query.QueryResponse += (sender, args) => QueryResponseCallback(query, + retryPolicy, + request, + callback, + url, + userState); + } + UpdateRepeatingRequestState(request); + UpdateRetryState(request); + } + + private void QueryResponseCallback(WebQuery query, + RetryPolicy retryPolicy, + RestRequest request, + RestCallback callback, + string url, + object userState) + { + var current = query.Result; + + if (retryPolicy != null) + { + // [DC]: Query should already have exception applied + var exception = query.Result.Exception; + var retry = _remainingRetries > 0 && ShouldRetry(retryPolicy, exception, current); + + if (retry) + { + BeginRequestImpl(request, callback, query, url, true /* isInternal */, userState); + Interlocked.Decrement(ref _remainingRetries); + } + else + { + _remainingRetries = 0; + } + current.TimesTried = GetIterationCount(request); + } + else + { + _remainingRetries = 0; + } + + query.Result = current; + + // [DC]: Callback is for a final result, not a retry + if (_remainingRetries == 0) + { + CompleteWithQuery(query, request, callback); + } + } + private void QueryResponseCallback(WebQuery query, + RetryPolicy retryPolicy, + RestRequest request, + RestCallback callback, + string url, + object userState) + { + var current = query.Result; + + if (retryPolicy != null) + { + // [DC]: Query should already have exception applied + var exception = query.Result.Exception; + var retry = _remainingRetries > 0 && ShouldRetry(retryPolicy, exception, current); + + if (retry) + { + BeginRequestImpl(request, callback, query, url, true /* isInternal */, userState); + Interlocked.Decrement(ref _remainingRetries); + } + else + { + _remainingRetries = 0; + } + current.TimesTried = GetIterationCount(request); + + } + else + { + _remainingRetries = 0; + } + + query.Result = current; + + // [DC]: Callback is for a final result, not a retry + if (_remainingRetries == 0) + { + CompleteWithQuery(query, request, callback); + } + } +#endif + +#if !WindowsPhone + private WebQueryAsyncResult BeginRequestFunction(bool isInternal, + RestRequest request, + WebQuery query, + string url, + RestCallback callback, + object userState) + { + WebQueryAsyncResult result; + if (!isInternal) + { + if (!BeginRequestWithTask(request, callback, query, url, out result, userState)) + { + if (!BeginRequestWithCache(request, query, url, out result, userState)) + { + if (!BeginRequestMultiPart(request, query, url, out result, userState)) + { + // Normal operation + result = query.RequestAsync(url, userState); + } + } + } + } + else + { + // Normal operation + result = query.RequestAsync(url, userState); + } + + result.Tag = new Triplet + { + First = request, + Second = callback, + Third = userState + }; + + return result; + } +#else + private void BeginRequestFunction(bool isInternal, + RestRequest request, + WebQuery query, + string url, + RestCallback callback, + object userState) + { + if (!isInternal) + { + if (!BeginRequestWithTask(request, callback, query, url, userState)) + { + if (!BeginRequestWithCache(request, query, url, userState)) + { + if (!BeginRequestMultiPart(request, query, url, userState)) + { + // Normal operation + query.RequestAsync(url, userState); + } + } + } + } + else + { + // Normal operation + query.RequestAsync(url, userState); + } + } +#endif + + private void SignalTasks(RestRequest request, WebQueryAsyncResult result) + { + // Recurring tasks are only signalled when cancelled + // or when they reach their iteration limit + lock (_timedTasksLock) + { + if (!_tasks.ContainsKey(request)) + { + result.Signal(); + } + } + } + +#if !WindowsPhone + +#if NET40 + private void CompleteWithQueryDynamic(WebQuery query, + RestRequest request, + RestCallback callback, + WebQueryAsyncResult result) + { + var response = BuildResponseFromResultDynamic(request, query); + + CompleteWithQuery(request, query, callback, response, result); + } +#endif + + private void CompleteWithQuery(WebQuery query, + RestRequest request, + RestCallback callback, + WebQueryAsyncResult result) + { + var response = BuildResponseFromResult(request, query); + + CompleteWithQuery(request, query, callback, response, result); + } + + private void CompleteWithQuery(RestRequest request, WebQuery query, RestCallback callback, RestResponse response, WebQueryAsyncResult result) + { + if (query.IsStreaming && callback != null) + { + callback.Invoke(request, response, query.UserState); + return; + } + + var wasStreaming = response.Content.Equals(EndStreamingContent); + + result.AsyncState = response; + result.IsCompleted = true; + if (callback != null && !wasStreaming) + { + callback.Invoke(request, response, query.UserState); + } + + if (wasStreaming) + { + _streamQuery = null; + } + + SignalTasks(request, result); + } + + private void CompleteWithQuery(WebQuery query, + RestRequest request, + RestCallback callback, + WebQueryAsyncResult result) + { + var response = BuildResponseFromResult(request, query); + if (query.IsStreaming && callback != null) + { + callback.Invoke(request, response, query.UserState); + return; + } + + var wasStreaming = response.Content.Equals(EndStreamingContent); + + result.AsyncState = response; + result.IsCompleted = true; + if (callback != null && !wasStreaming) + { + callback.Invoke(request, response, query.UserState); + } + + if (wasStreaming) + { + _streamQuery = null; + } + + SignalTasks(request, result); + } +#else + private void CompleteWithQuery(WebQuery query, + RestRequest request, + RestCallback callback) + { + var response = BuildResponseFromResult(request, query); + if (query.IsStreaming) + { + return; + } + + var wasStreaming = response.Content.Equals("END STREAMING"); + + if (callback != null && !wasStreaming) + { + callback.Invoke(request, response, query.UserState); + } + } + private void CompleteWithQuery(WebQuery query, + RestRequest request, + RestCallback callback) + { + var response = BuildResponseFromResult(request, query); + if (query.IsStreaming) + { + return; + } + + var wasStreaming = response.Content.Equals("END STREAMING"); + + if (callback != null && !wasStreaming) + { + callback.Invoke(request, response, query.UserState); + } + } +#endif + +#if !WindowsPhone + private WebQueryAsyncResult BeginRequestFunction(bool isInternal, + RestRequest request, + WebQuery query, + string url, + RestCallback callback, + object userState) + { + + WebQueryAsyncResult result; + if (!isInternal) + { + if (!BeginRequestWithTask(request, callback, query, url, out result, userState)) + { + if (!BeginRequestWithCache(request, query, url, out result, userState)) + { + if (!BeginRequestMultiPart(request, query, url, out result, userState)) + { + // Normal operation + result = query.RequestAsync(url, userState); + } + } + } + } + else + { + // Normal operation + result = query.RequestAsync(url, userState); + } + + result.Tag = new Triplet, object> + { + First = request, + Second = callback, + Third = userState + }; + return result; + } +#else + private void BeginRequestFunction(bool isInternal, + RestRequest request, + WebQuery query, + string url, + RestCallback callback, + object userState) + { + + if (!isInternal) + { + if (!BeginRequestWithTask(request, callback, query, url, userState)) + { + if (!BeginRequestWithCache(request, query, url, userState)) + { + if (!BeginRequestMultiPart(request, query, url, userState)) + { + // Normal operation + query.RequestAsync(url, userState); + } + } + } + } + else + { + // Normal operation + query.RequestAsync(url, userState); + } + } +#endif + private WebQueryAsyncResult BeginRequestStreamFunction(RestRequest request, + WebQuery query, + string url, + RestCallback callback, + TimeSpan duration, + int resultsPerCallback, + object userState) + { + var result = GetStreamResult(request, query, url, duration, resultsPerCallback); + + result.Tag = new Triplet, object> + { + First = request, + Second = callback, + Third = userState + }; + + return result; + } + private WebQueryAsyncResult BeginRequestStreamFunction(RestRequest request, + WebQuery query, + string url, + RestCallback callback, + TimeSpan duration, + int resultsPerCallback, + object userState) + { + var result = GetStreamResult(request, query, url, duration, resultsPerCallback); + + result.Tag = new Triplet + { + First = request, + Second = callback, + Third = userState + }; + + return result; + } + + private WebQueryAsyncResult GetStreamResult(RestBase request, + WebQuery query, + string url, + TimeSpan duration, + int resultsPerCallback) + { + if (!request.Method.HasValue) + { + request.Method = WebMethod.Get; + } + + WebQueryAsyncResult result; + switch (request.Method) + { + case WebMethod.Get: + result = query.ExecuteStreamGetAsync(url, duration, resultsPerCallback); + break; + case WebMethod.Post: + result = query.ExecuteStreamPostAsync(url, duration, resultsPerCallback); + break; + default: + throw new NotSupportedException("Unsupported HTTP method declared for streaming."); + } + + _streamQuery = query; + + return result; + } + + private void RegisterTimedTaskForRequest(RestRequest request, TimedTask task) + { + lock (_timedTasksLock) + { + if (_tasks.ContainsKey(request)) + { + throw new InvalidOperationException("Task already has a registered timed task"); + } + task.Stopped += (s, e) => UnregisterTimedTaskForRequest(request); + _tasks.Add(request, task); + } + } + + private void UnregisterTimedTaskForRequest(RestRequest request) + { + lock (_timedTasksLock) + { + if (_tasks.ContainsKey(request)) + { + var task = _tasks[request]; + _tasks.Remove(request); + task.Dispose(); + } + } + } + +#if !WindowsPhone + private bool BeginRequestWithTask(RestRequest request, + RestCallback callback, + WebQuery query, + string url, + out WebQueryAsyncResult asyncResult, + object userState) + { + var taskOptions = GetTaskOptions(request); + if (taskOptions == null) + { + asyncResult = null; + return false; + } + + if (taskOptions.RepeatInterval <= TimeSpan.Zero) + { + asyncResult = null; + return false; + } + + TimedTask task; +#if !NETCF + if (!taskOptions.GetType().IsGenericType) + { +#endif + // Tasks without rate limiting + task = new TimedTask(taskOptions.DueTime, + taskOptions.RepeatInterval, + taskOptions.RepeatTimes, + taskOptions.ContinueOnError, + skip => BeginRequestImpl(request, + callback, + query, + url, + true /* isInternal */, + userState + )); + +#if !NETCF + } + else + { + // Tasks with rate limiting + task = (TimedTask)BuildRateLimitingTask(request, + taskOptions, + callback, + query, + url, + userState); + } +#endif + + RegisterTimedTaskForRequest(request, task); + + Action action = task.Start; + + var inner = action.BeginInvoke(ar => {/* No callback */}, null); + + asyncResult = new WebQueryAsyncResult { InnerResult = inner }; + task.AsyncResult = asyncResult; + return true; + } + + private bool BeginRequestWithTask(RestRequest request, + RestCallback callback, + WebQuery query, + string url, + out WebQueryAsyncResult asyncResult, + object userState) + { + var taskOptions = GetTaskOptions(request); + if (taskOptions == null) + { + asyncResult = null; + return false; + } + + if (taskOptions.RepeatInterval <= TimeSpan.Zero) + { + asyncResult = null; + return false; + } + + TimedTask task; +#if !NETCF + if (!taskOptions.GetType().IsGenericType) + { +#endif + // Tasks without rate limiting + task = new TimedTask(taskOptions.DueTime, + taskOptions.RepeatInterval, + taskOptions.RepeatTimes, + taskOptions.ContinueOnError, + skip => BeginRequestImpl(request, + callback, + query, + url, + true /* isInternal */, + userState)); +#if !NETCF + } + else + { + // Tasks with rate limiting + task = (TimedTask)BuildRateLimitingTask(request, + taskOptions, + callback, + query, + url, + userState); + + } +#endif + lock (_timedTasksLock) + { + _tasks[request] = task; + } + var action = new Action(task.Start); + + var inner = action.BeginInvoke(ar => { /* No callback */ }, null); + asyncResult = new WebQueryAsyncResult { InnerResult = inner }; + task.AsyncResult = asyncResult; + return true; + } +#else + private bool BeginRequestWithTask(RestRequest request, + RestCallback callback, + WebQuery query, + string url, + object userState) + { + var taskOptions = GetTaskOptions(request); + if (taskOptions == null) + { + return false; + } + + if (taskOptions.RepeatInterval <= TimeSpan.Zero) + { + return false; + } + + TimedTask task; + if (!taskOptions.GetType().IsGenericType) + { + // Tasks without rate limiting + task = new TimedTask(taskOptions.DueTime, + taskOptions.RepeatInterval, + taskOptions.RepeatTimes, + taskOptions.ContinueOnError, + skip => BeginRequestImpl(request, + callback, + query, + url, + true /* isInternal */, + userState + )); + } + else + { + // Tasks with rate limiting + task = (TimedTask)BuildRateLimitingTask(request, + taskOptions, + callback, + query, + url, + userState); + } + + RegisterTimedTaskForRequest(request, task); + + var action = new Action(task.Start); + action.Invoke(); + return true; + } + + private bool BeginRequestWithTask(RestRequest request, + RestCallback callback, + WebQuery query, + string url, + object userState) + { + var taskOptions = GetTaskOptions(request); + if (taskOptions == null) + { + return false; + } + + if (taskOptions.RepeatInterval <= TimeSpan.Zero) + { + return false; + } + + TimedTask task; + if (!taskOptions.GetType().IsGenericType) + { + // Tasks without rate limiting + task = new TimedTask(taskOptions.DueTime, + taskOptions.RepeatInterval, + taskOptions.RepeatTimes, + taskOptions.ContinueOnError, + skip => BeginRequestImpl(request, + callback, + query, + url, + true /* isInternal */, + userState)); + } + else + { + // Tasks with rate limiting + task = (TimedTask)BuildRateLimitingTask(request, + taskOptions, + callback, + query, + url, + userState); + + } + lock (_timedTasksLock) + { + _tasks[request] = task; + } + + var action = new Action(task.Start); + action.Invoke(); + return true; + } +#endif + +#if !NETCF + private object BuildRateLimitingTask(RestRequest request, ITaskOptions taskOptions, RestCallback callback, WebQuery query, string url, object userState) + { + var taskAction = new Action(skip => + { + if (!skip) + { + BeginRequestImpl(request, callback, query, url, true /* isInternal */, userState); + } + else + { + callback(request, + new RestResponse { SkippedDueToRateLimitingRule = true }, + userState); + } + }); + + return BuildRateLimitingTaskImpl(taskOptions, taskAction); + } + + private object BuildRateLimitingTask(RestRequest request, + ITaskOptions taskOptions, + RestCallback callback, + WebQuery query, + string url, + object userState) + { + var taskAction = new Action(skip => BeginRequestImpl(request, + callback, + query, + url, + true /* isInternal */, + userState + )); + + return BuildRateLimitingTaskImpl(taskOptions, taskAction); + } + + private static object BuildRateLimitingTaskImpl(ITaskOptions taskOptions, + Action taskAction) + { + var innerType = taskOptions.GetDeclaredTypeForGeneric(typeof(ITaskOptions<>)); + var rateType = typeof(RateLimitingRule<>).MakeGenericType(innerType); + var taskType = typeof(TimedTask<>).MakeGenericType(innerType); + var rateLimitingType = (RateLimitType)taskOptions.GetValue("RateLimitType"); + + object taskRule; + var getRateLimitStatus = taskOptions.GetValue("GetRateLimitStatus"); + switch (rateLimitingType) + { + case RateLimitType.ByPercent: + var rateLimitingPercent = taskOptions.GetValue("RateLimitPercent"); + taskRule = getRateLimitStatus != null + ? Activator.CreateInstance(rateType, getRateLimitStatus, rateLimitingPercent) + : Activator.CreateInstance(rateType, rateLimitingPercent); + break; + case RateLimitType.ByPredicate: + var rateLimitingPredicate = taskOptions.GetValue("RateLimitingPredicate"); + taskRule = getRateLimitStatus != null + ? Activator.CreateInstance(rateType, getRateLimitStatus, rateLimitingPredicate) + : Activator.CreateInstance(rateType, rateLimitingPredicate); + break; + default: + throw new ArgumentOutOfRangeException(); + } + + return Activator.CreateInstance(taskType, + taskOptions.DueTime, + taskOptions.RepeatInterval, + taskOptions.RepeatTimes, + taskOptions.ContinueOnError, + taskAction, + taskRule); + } +#endif + +#if !WindowsPhone + private bool BeginRequestMultiPart(RestBase request, WebQuery query, string url, out WebQueryAsyncResult result, object userState) + { + var parameters = GetPostParameters(request); + if (parameters == null || parameters.Count() == 0) + { + result = null; + return false; + } + + // [DC]: Default to POST if no method provided + query.Method = query.Method != WebMethod.Post && Method != WebMethod.Put ? WebMethod.Post : query.Method; + result = query.RequestAsync(url, parameters, userState); + return true; + } +#else + private bool BeginRequestMultiPart(RestBase request, WebQuery query, string url, object userState) + { + var parameters = GetPostParameters(request); + if (parameters == null || parameters.Count() == 0) + { + return false; + } + + // [DC]: Default to POST if no method provided + query.Method = query.Method != WebMethod.Post && Method != WebMethod.Put ? WebMethod.Post : query.Method; + query.RequestAsync(url, parameters, userState); + return true; + } +#endif + +#if !WindowsPhone + private bool BeginRequestWithCache(RestBase request, + WebQuery query, + string url, + out WebQueryAsyncResult result, + object userState) + { + var cache = GetCache(request); + if (cache == null) + { + result = null; + return false; + } + + var options = GetCacheOptions(request); + if (options == null) + { + result = null; + return false; + } + + // [DC]: This is currently prefixed to the full URL + var function = GetCacheKeyFunction(request); + var key = function != null ? function.Invoke() : ""; + + switch (options.Mode) + { + case CacheMode.NoExpiration: + result = query.RequestAsync(url, key, cache, userState); + break; + case CacheMode.AbsoluteExpiration: + var expiry = options.Duration.FromNow(); + result = query.RequestAsync(url, key, cache, expiry, userState); + break; + case CacheMode.SlidingExpiration: + result = query.RequestAsync(url, key, cache, options.Duration, userState); + break; + default: + throw new NotSupportedException("Unknown CacheMode"); + } + + return true; + } +#else + private bool BeginRequestWithCache(RestBase request, + WebQuery query, + string url, + object userState) + { + var cache = GetCache(request); + if (cache == null) + { + return false; + } + + var options = GetCacheOptions(request); + if (options == null) + { + return false; + } + + // [DC]: This is currently prefixed to the full URL + var function = GetCacheKeyFunction(request); + var key = function != null ? function.Invoke() : ""; + + switch (options.Mode) + { + case CacheMode.NoExpiration: + query.RequestAsync(url, key, cache, userState); + break; + case CacheMode.AbsoluteExpiration: + var expiry = options.Duration.FromNow(); + query.RequestAsync(url, key, cache, expiry, userState); + break; + case CacheMode.SlidingExpiration: + query.RequestAsync(url, key, cache, options.Duration, userState); + break; + default: + throw new NotSupportedException("Unknown CacheMode"); + } + + return true; + } +#endif + + private RestResponse BuildResponseFromResult(RestRequest request, WebQuery query) + { + request = request ?? new RestRequest(); + var result = query.Result; + var response = BuildBaseResponse(result); + + DeserializeEntityBody(request, response); + response.Tag = GetTag(request); + + return response; + } + + private RestResponse BuildResponseFromResult(RestRequest request, WebQuery query) + { + request = request ?? new RestRequest(); + var result = query.Result; + var response = BuildBaseResponse(result); + + DeserializeEntityBody(request, response); + response.Tag = GetTag(request); + + return response; + } + +#if NET40 + private RestResponse BuildResponseFromResultDynamic(RestRequest request, WebQuery query) + { + request = request ?? new RestRequest(); + var result = query.Result; + var response = BuildBaseResponse(result); + + DeserializeEntityBodyDynamic(request, response); + response.Tag = GetTag(request); + + return response; + } +#endif + + private static readonly Func _baseSetter = + (response, result) => + { + response.ContentStream = result.ContentStream; + response.InnerResponse = result.WebResponse; + response.InnerException = result.Exception; + response.RequestDate = result.RequestDate; + response.RequestUri = result.RequestUri; + response.RequestMethod = result.RequestHttpMethod; + response.RequestKeptAlive = result.RequestKeptAlive; + response.ResponseDate = result.ResponseDate; + response.ResponseUri = result.ResponseUri; + response.StatusCode = (HttpStatusCode)result.ResponseHttpStatusCode; + response.StatusDescription = result.ResponseHttpStatusDescription; + response.ContentType = result.ResponseType; + response.ContentLength = result.ResponseLength; + response.IsMock = result.IsMock; + response.TimedOut = result.TimedOut; + response.TimesTried = result.TimesTried; + if (result.WebResponse == null) + { + // [DC] WebResponse could be null, i.e. when streaming + return response; + } +#if !SILVERLIGHT + response.Headers = result.WebResponse.Headers; +#else + response.Headers = new NameValueCollection(); + foreach(var key in result.WebResponse.Headers.AllKeys) + { + response.Headers.Add(key, result.WebResponse.Headers[key]); + } +#endif + +#if !SILVERLIGHT && !NETCF + if(result.WebResponse is HttpWebResponse) + { + var cookies = (result.WebResponse as HttpWebResponse).Cookies; + if(cookies != null) + { + foreach (Cookie cookie in cookies) + { + response.Cookies.Add(cookie.Name, cookie.Value); + } + } + } +#endif + + return response; + }; + + private static RestResponse BuildBaseResponse(WebQueryResult result) + { + var response = new RestResponse(); + + _baseSetter.Invoke(response, result); + + return response; + } + + private static RestResponse BuildBaseResponse(WebQueryResult result) + { + var response = new RestResponse(); + + _baseSetter.Invoke(response, result); + + return response; + } + + private bool ShouldDeserializeEntityBody(RestRequest request, RestResponseBase response, out IDeserializer deserializer) + { + deserializer = request.Deserializer ?? Deserializer; + if (deserializer == null || response.ContentStream == null || string.IsNullOrEmpty(response.ContentType)) + { + return false; + } + if (response.InnerException != null) + { + Type errorResponseEntityType; + var getErrorResponseEntityType = request.GetErrorResponseEntityType ?? GetErrorResponseEntityType; + if (getErrorResponseEntityType != null && (errorResponseEntityType = getErrorResponseEntityType(request, response)) != null) + { + response.ErrorContentEntity = deserializer.Deserialize(response, errorResponseEntityType); + } + return false; + } + + return true; + } + + private void DeserializeEntityBody(RestRequest request, RestResponse response) + { + IDeserializer deserializer; + if (ShouldDeserializeEntityBody(request, response, out deserializer) && request.ResponseEntityType != null) + { + response.ContentEntity = deserializer.Deserialize(response, request.ResponseEntityType); + } + } + + private void DeserializeEntityBody(RestRequest request, RestResponse response) + { + IDeserializer deserializer; + if (ShouldDeserializeEntityBody(request, response, out deserializer)) + { + response.ContentEntity = deserializer.Deserialize(response); + } + } + +#if NET40 + private void DeserializeEntityBodyDynamic(RestRequest request, RestResponse response) + { + IDeserializer deserializer; + if (ShouldDeserializeEntityBody(request, response, out deserializer)) + { + response.ContentEntity = deserializer.DeserializeDynamic(response); + } + } +#endif + + private void SetQueryMeta(RestRequest request, WebQuery query) + { + // Fill query collections with found value pairs + CoalesceWebPairsIntoCollection(query.Parameters, Parameters, request.Parameters); + CoalesceWebPairsIntoCollection(query.Cookies, Cookies, request.Cookies); + + query.Headers.AddRange(Headers); + query.Headers.AddRange(request.Headers); + + // [DC]: These properties are trumped by request over client + query.UserAgent = GetUserAgent(request); + query.Method = GetWebMethod(request); + query.Proxy = GetProxy(request); + query.RequestTimeout = GetTimeout(request); + query.DecompressionMethods = GetDecompressionMethods(request); + query.PostContent = GetPostContent(request); + query.Encoding = GetEncoding(request); + +#if !SILVERLIGHT + query.FollowRedirects = GetFollowRedirects(request); +#endif + SerializeEntityBody(query, request); + } + + // [DC]: Trump duplicates by request over client over info values + private static void CoalesceWebPairsIntoCollection(WebPairCollection target, params IEnumerable[] values) + { + var parameters = new WebPairCollection(values.SelectMany(value => value)); + + foreach (var pair in parameters) + { + if(target[pair.Name] == null) + { + target.Add(pair); + } + } + } + + private void SerializeEntityBody(WebQuery query, RestRequest request) + { + var serializer = GetSerializer(request); + if (serializer == null) + { + // No suitable serializer for entity + return; + } + + if (request.Entity == null || request.RequestEntityType == null) + { + // Not enough information to serialize + return; + } + + var entityBody = serializer.Serialize(request.Entity, request.RequestEntityType); + query.Entity = !entityBody.IsNullOrBlank() + ? new WebEntity + { + Content = entityBody, + ContentEncoding = serializer.ContentEncoding, + ContentType = serializer.ContentType + } + : null; + } + + private WebEntity SerializeExpectEntity(RestRequest request) + { + var serializer = GetSerializer(request); + if (serializer == null || request.ExpectEntity == null) + { + // No suitable serializer or entity + return null; + } + + var entityBody = serializer.Serialize(request.ExpectEntity, request.RequestEntityType); + var entity = !entityBody.IsNullOrBlank() + ? new WebEntity + { + Content = entityBody, + ContentEncoding = serializer.ContentEncoding, + ContentType = serializer.ContentType + } : null; + return entity; + } + + public WebQuery GetQueryFor(RestBase request, Uri uri) + { + var method = GetWebMethod(request); + var credentials = GetWebCredentials(request); + var info = GetInfo(request); + var traceEnabled = GetTraceEnabled(request); + + // [DC]: UserAgent is set via Info + // [DC]: Request credentials trump client credentials + var query = credentials != null + ? credentials.GetQueryFor(uri.ToString(), request, info, method, traceEnabled) + : new BasicAuthWebQuery(info, traceEnabled); + + query.PostProgress += QueryPostProgress; + +#if SILVERLIGHT + query.HasElevatedPermissions = HasElevatedPermissions; + query.SilverlightAcceptEncodingHeader = SilverlightAcceptEncodingHeader; + query.SilverlightUserAgentHeader = SilverlightUserAgentHeader; +#endif + return query; + } + + private void QueryPostProgress(object sender, PostProgressEventArgs e) + { + var args = new FileProgressEventArgs + { + FileName = e.FileName, + BytesWritten = e.BytesWritten, + TotalBytes = e.TotalBytes + }; + OnFileProgress(args); + } + + public void CancelStreaming() + { + lock (_streamingLock) + { + if (_streamQuery != null) + { + _streamQuery.IsStreaming = false; + } + } + } + + public void CancelPeriodicTasks() + { + lock (_timedTasksLock) + { + // Copy to a new list, since canceling + // the task removes it from the _tasks + // list, the enumeration will throw + var toCancel = new List(); + toCancel.AddRange(_tasks.Values); + toCancel.ForEach(t => t.Stop()); + } + } + + public int GetIterationCount(RestRequest request) + { + var retryState = request.RetryState ?? RetryState; + var taskState = request.TaskState ?? TaskState; + if (retryState != null) + { + return retryState.RepeatCount; + } + if (taskState != null) + { + return taskState.RepeatCount; + } + return 0; + } + + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/RestRequest.cs b/trunk/hammock/src/net35/Hammock/RestRequest.cs new file mode 100644 index 0000000..41e3cef --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/RestRequest.cs @@ -0,0 +1,134 @@ +using System; +using System.Net; +using System.Text; +using Hammock.Extensions; +using Hammock.Web; + +#if SILVERLIGHT +using Hammock.Silverlight.Compat; +#endif + +namespace Hammock +{ +#if !Silverlight + [Serializable] +#endif + public class RestRequest : RestBase + { + private object _entity; + private object _expectEntity; + + protected internal virtual Web.WebHeaderCollection ExpectHeaders { get; set; } + public virtual HttpStatusCode? ExpectStatusCode { get; set; } + public virtual string ExpectStatusDescription { get; set; } + public virtual string ExpectContent { get; set; } + public virtual string ExpectContentType { get; set; } + + public RestRequest() + { + Initialize(); + } + + private void Initialize() + { + ExpectHeaders = new Web.WebHeaderCollection(); + } + + public virtual object Entity + { + get + { + return _entity; + } + set + { + if (_entity != null && _entity.Equals(value)) + { + return; + } + + _entity = value; + OnPropertyChanged("Entity"); + + // [DC] Automatically posts an entity unless put is declared + RequestEntityType = _entity.GetType(); + if (_entity != null && (Method != WebMethod.Post && Method != WebMethod.Put)) + { + Method = WebMethod.Post; + } + } + } + + public virtual object ExpectEntity + { + get + { + return _expectEntity; + } + set + { + if (_expectEntity != null && _expectEntity.Equals(value)) + { + return; + } + + _expectEntity = value; + OnPropertyChanged("ExpectEntity"); + } + } + + public virtual Type ResponseEntityType { get; set; } + public virtual Type RequestEntityType { get; set; } + + public Uri BuildEndpoint(RestClient client) + { + var sb = new StringBuilder(); + + var path = Path.IsNullOrBlank() + ? client.Path.IsNullOrBlank() ? "" : client.Path + : Path; + + var versionPath = VersionPath.IsNullOrBlank() + ? client.VersionPath.IsNullOrBlank() ? "" : client.VersionPath + : VersionPath; + var skipAuthority = client.Authority.IsNullOrBlank(); + + sb.Append(skipAuthority ? "" : client.Authority); + sb.Append(skipAuthority ? "" : client.Authority.EndsWith("/") ? "" : "/"); + sb.Append(skipAuthority ? "" : versionPath.IsNullOrBlank() ? "" : versionPath); + if (!skipAuthority && !versionPath.IsNullOrBlank()) + { + sb.Append(versionPath.EndsWith("/") ? "" : "/"); + } + sb.Append(path.IsNullOrBlank() ? "" : path.StartsWith("/") ? path.Substring(1) : path); + + Uri uri; + Uri.TryCreate(sb.ToString(), UriKind.RelativeOrAbsolute, out uri); + + var queryStringHandling = QueryHandling ?? client.QueryHandling ?? Hammock.QueryHandling.None; + + switch (queryStringHandling) + { + case Hammock.QueryHandling.AppendToParameters: + WebParameterCollection parameters; + uri = uri.UriMinusQuery(out parameters); + foreach (var parameter in parameters) + { + Parameters.Add(parameter); + } + break; + default: + break; + } + + return uri; + } + + public void ExpectHeader(string name, string value) + { + ExpectHeaders.Add(name, value); + } + } +} + + diff --git a/trunk/hammock/src/net35/Hammock/RestResponse.cs b/trunk/hammock/src/net35/Hammock/RestResponse.cs new file mode 100644 index 0000000..166c0a9 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/RestResponse.cs @@ -0,0 +1,312 @@ +using System; +using System.IO; +using System.Net; +using Hammock.Extensions; + +#if SILVERLIGHT +using Hammock.Silverlight.Compat; +#else +using System.Collections.Specialized; +#endif + +namespace Hammock +{ +#if !Silverlight + [Serializable] +#endif + public class RestResponseBase : IDisposable + { + private string _content; + public virtual string Content + { + get + { + if(_content == null && ContentStream != null) + { + ContentStream = ReplaceContentStreamWithMemoryStream(); + using (var reader = new StreamReader(ContentStream)) + { + _content = reader.ReadToEnd(); + } + if (ContentStream.CanSeek) + { + ContentStream.Position = 0; + } + } + return _content; + } + } + + private byte[] _contentBytes; + public virtual byte[] ContentBytes + { + get + { + if(_contentBytes == null && ContentStream != null) + { + ContentStream = ReplaceContentStreamWithMemoryStream(); + _contentBytes = ReadFully(ContentStream); + if(ContentStream.CanSeek) + { + ContentStream.Position = 0; + } + } + return _contentBytes; + } + } + + public virtual object ErrorContentEntity { get; set; } + public virtual Stream ContentStream { get; set; } + public virtual WebResponse InnerResponse { get; set; } + public virtual Exception InnerException { get; set; } + public virtual DateTime? RequestDate { get; set; } + public virtual DateTime? ResponseDate { get; set; } + public virtual string RequestMethod { get; set; } + public virtual bool RequestKeptAlive { get; set; } + public virtual HttpStatusCode StatusCode { get; set; } + public virtual string StatusDescription { get; set; } + public virtual string ContentType { get; set; } + public virtual long ContentLength { get; set; } + public virtual Uri RequestUri { get; set; } + public virtual Uri ResponseUri { get; set; } + public virtual bool IsMock { get; set; } + public virtual bool TimedOut { get; set; } + public virtual int TimesTried { get; set; } + public virtual object Tag { get; set; } + public virtual NameValueCollection Headers { get; set; } + public virtual NameValueCollection Cookies { get; set; } + public virtual bool SkippedDueToRateLimitingRule { get; set; } + public virtual bool IsFromCache + { + get + { + return StatusCode == 0 && + StatusDescription.IsNullOrBlank() && + Content != null; + } + } + + public RestResponseBase() + { + Initialize(); + } + + private void Initialize() + { + Headers = new NameValueCollection(0); + Cookies = new NameValueCollection(0); + } + + // http://www.yoda.arachsys.com/csharp/readbinary.html + public static byte[] ReadFully(Stream stream) + { + const int initialLength = 32768; + var buffer = new byte[initialLength]; + var read = 0; + + int chunk; + while ((chunk = stream.Read(buffer, read, buffer.Length - read)) > 0) + { + read += chunk; + if (read != buffer.Length) + { + continue; + } + var nextByte = stream.ReadByte(); + if (nextByte == -1) + { + return buffer; + } + var newBuffer = new byte[buffer.Length * 2]; + Array.Copy(buffer, newBuffer, buffer.Length); + newBuffer[read] = (byte)nextByte; + buffer = newBuffer; + read++; + } + var ret = new byte[read]; + Array.Copy(buffer, ret, read); + return ret; + } + + private Stream ReplaceContentStreamWithMemoryStream() + { + if(ContentStream is DurableMemoryStream) + { + return ContentStream; + } + + var buffer = new byte[4096]; + var stream = new MemoryStream(); + var count = 0; + do + { + if (ContentStream == null) + { + continue; + } + count = ContentStream.Read(buffer, 0, buffer.Length); + stream.Write(buffer, 0, count); + } while (count != 0); + + if (ContentStream != null) + { + ContentStream.Close(); + ContentStream.Dispose(); + } + + if(stream.CanSeek) + { + stream.Position = 0; + } + + return new DurableMemoryStream(stream); + } + + private class DurableMemoryStream : MemoryStream + { + private readonly Stream _stream; + + public DurableMemoryStream(Stream stream) + { + _stream = stream; + } + + public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, + AsyncCallback callback, object state) + { + return _stream.BeginRead(buffer, offset, count, callback, state); + } + + public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, + AsyncCallback callback, object state) + { + return _stream.BeginWrite(buffer, offset, count, callback, state); + } + + public override bool CanRead + { + get { return _stream.CanRead; } + } + + public override bool CanSeek + { + get { return _stream.CanSeek; } + } + + public override bool CanWrite + { + get { return _stream.CanWrite; } + } + + public override void Close() + { + _stream.Flush(); + } + + public override int EndRead(IAsyncResult asyncResult) + { + return _stream.EndRead(asyncResult); + } + + public override void EndWrite(IAsyncResult asyncResult) + { + _stream.EndWrite(asyncResult); + } + + public override void Flush() + { + _stream.Flush(); + } + + public override long Length + { + get + { + return _stream.Length; + } + } + + public override long Position + { + get + { + return _stream.Position; + } + set + { + _stream.Position = value; + } + } + + public override int Read(byte[] buffer, int offset, int count) + { + return _stream.Read(buffer, offset, count); + } + + public override int ReadByte() + { + return _stream.ReadByte(); + } + + public override long Seek(long offset, SeekOrigin origin) + { + return _stream.Seek(offset, origin); + } + + public override void SetLength(long value) + { + _stream.SetLength(value); + } + + public override void Write(byte[] buffer, int offset, int count) + { + _stream.Write(buffer, offset, count); + } + + public override void WriteByte(byte value) + { + _stream.WriteByte(value); + } + + protected override void Dispose(bool disposing) + { + if(disposing) + { + _stream.Dispose(); + } + base.Dispose(disposing); + } + } + + public void SetContent(string content) + { + _content = content; + } + + public void Dispose() + { + if(ContentStream != null) + { + ContentStream.Dispose(); + } + } + } + +#if !Silverlight + [Serializable] +#endif + public class RestResponse : RestResponseBase + { + public virtual object ContentEntity { get; set; } + } + +#if !Silverlight + [Serializable] +#endif + public class RestResponse : RestResponseBase + { + public virtual T ContentEntity { get; set; } + } +} + + diff --git a/trunk/hammock/src/net35/Hammock/Retries/ConnectionClosed.cs b/trunk/hammock/src/net35/Hammock/Retries/ConnectionClosed.cs new file mode 100644 index 0000000..9479334 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Retries/ConnectionClosed.cs @@ -0,0 +1,23 @@ +using System; +using System.Net; + +namespace Hammock.Retries +{ +#if !SILVERLIGHT + [Serializable] +#endif + public class ConnectionClosed : RetryErrorCondition + { + public override Predicate RetryIf + { + get + { + return e => + { + var we = e as WebException; + return we != null && (we.Status == WebExceptionStatus.ConnectionClosed || we.Status == WebExceptionStatus.KeepAliveFailure); + }; + } + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Retries/IRetryCondition.cs b/trunk/hammock/src/net35/Hammock/Retries/IRetryCondition.cs new file mode 100644 index 0000000..f0189fd --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Retries/IRetryCondition.cs @@ -0,0 +1,14 @@ +using System; + +namespace Hammock.Retries +{ + public interface IRetryCondition + { + + } + + public interface IRetryCondition : IRetryCondition + { + Predicate RetryIf { get; } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Retries/IRetryCustomCondition.cs b/trunk/hammock/src/net35/Hammock/Retries/IRetryCustomCondition.cs new file mode 100644 index 0000000..78ee95d --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Retries/IRetryCustomCondition.cs @@ -0,0 +1,7 @@ +namespace Hammock.Retries +{ + public interface IRetryCustomCondition + { + + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Retries/NetworkError.cs b/trunk/hammock/src/net35/Hammock/Retries/NetworkError.cs new file mode 100644 index 0000000..99127f1 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Retries/NetworkError.cs @@ -0,0 +1,28 @@ +using System; +using System.Net; + +namespace Hammock.Retries +{ +#if !SILVERLIGHT + [Serializable] +#endif + public class NetworkError : RetryErrorCondition + { + public override Predicate RetryIf + { + get + { + return e => + { + var we = (e as WebException); + + return we != null && (we.Status != WebExceptionStatus.Success && +#if !SILVERLIGHT + we.Status != WebExceptionStatus.ProtocolError && +#endif + we.Status != WebExceptionStatus.Pending); + }; + } + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Retries/RetryCondition.cs b/trunk/hammock/src/net35/Hammock/Retries/RetryCondition.cs new file mode 100644 index 0000000..e9e5ada --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Retries/RetryCondition.cs @@ -0,0 +1,9 @@ +using System; + +namespace Hammock.Retries +{ + public abstract class RetryCondition : IRetryCondition + { + public abstract Predicate RetryIf { get; } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Retries/RetryCustomCondition.cs b/trunk/hammock/src/net35/Hammock/Retries/RetryCustomCondition.cs new file mode 100644 index 0000000..f6d6688 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Retries/RetryCustomCondition.cs @@ -0,0 +1,21 @@ +using System; + +namespace Hammock.Retries +{ +#if !SILVERLIGHT + [Serializable] +#endif + public abstract class RetryCustomCondition : + IRetryCustomCondition, + IRetryCondition + { + public virtual Func ConditionFunction { get; set; } + public virtual Predicate RetryIf + { + get + { + return t => false; + } + } + } +} diff --git a/trunk/hammock/src/net35/Hammock/Retries/RetryErrorCondition.cs b/trunk/hammock/src/net35/Hammock/Retries/RetryErrorCondition.cs new file mode 100644 index 0000000..f4f9864 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Retries/RetryErrorCondition.cs @@ -0,0 +1,15 @@ +using System; + +namespace Hammock.Retries +{ +#if !SILVERLIGHT + [Serializable] +#endif + public abstract class RetryErrorCondition : IRetryCondition + { + public virtual Predicate RetryIf + { + get { return e => false; } + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Retries/RetryPolicy.cs b/trunk/hammock/src/net35/Hammock/Retries/RetryPolicy.cs new file mode 100644 index 0000000..bffbb8f --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Retries/RetryPolicy.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Hammock.Extensions; + +namespace Hammock.Retries +{ +#if !SILVERLIGHT + [Serializable] +#endif + public class RetryPolicy + { + public virtual ICollection RetryConditions { get; set; } + + public virtual int RetryCount { get; set; } + + public RetryPolicy() + { + Initialize(); + } + + private void Initialize() + { + RetryConditions = new List(0); + } + + public virtual void RetryOn(IEnumerable conditions) + { + foreach(var condition in conditions) + { + RetryConditions.Add(condition); + } + } + + public virtual void RetryOn(params IRetryCondition[] conditions) + { + var enumerable = conditions.ToList(); + RetryOn(enumerable); + } + } +} diff --git a/trunk/hammock/src/net35/Hammock/Retries/RetryResultCondition.cs b/trunk/hammock/src/net35/Hammock/Retries/RetryResultCondition.cs new file mode 100644 index 0000000..2e7d710 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Retries/RetryResultCondition.cs @@ -0,0 +1,16 @@ +using System; +using Hammock.Web; + +namespace Hammock.Retries +{ +#if !SILVERLIGHT + [Serializable] +#endif + public abstract class RetryResultCondition : IRetryCondition + { + public virtual Predicate RetryIf + { + get { return r => false; } + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Retries/Timeout.cs b/trunk/hammock/src/net35/Hammock/Retries/Timeout.cs new file mode 100644 index 0000000..5670c97 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Retries/Timeout.cs @@ -0,0 +1,23 @@ +using System; +using System.Net; + +namespace Hammock.Retries +{ +#if !SILVERLIGHT + [Serializable] +#endif + public class Timeout : RetryErrorCondition + { + public override Predicate RetryIf + { + get + { + return e => + { + var we = (e as WebException); + return we != null && (we.Status == WebExceptionStatus.RequestCanceled || we.Status == WebExceptionStatus.Timeout); + }; + } + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Retries/_Retries.cd b/trunk/hammock/src/net35/Hammock/Retries/_Retries.cd new file mode 100644 index 0000000..f2fbf82 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Retries/_Retries.cd @@ -0,0 +1,57 @@ + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA= + Retries\RetryErrorCondition.cs + + + + + + + QAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAA= + Retries\RetryPolicy.cs + + + + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA= + Retries\Timeout.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA= + Retries\NetworkError.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA= + Retries\ConnectionClosed.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Retries\IRetryCondition.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA= + Retries\IRetryCondition.cs + + + + \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Serialization/DefaultJsonSerializer.cs b/trunk/hammock/src/net35/Hammock/Serialization/DefaultJsonSerializer.cs new file mode 100644 index 0000000..58aa421 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Serialization/DefaultJsonSerializer.cs @@ -0,0 +1,30 @@ +using System; +#if NET40 +using System.Dynamic; +#endif + +namespace Hammock.Serialization +{ + public class DefaultJsonSerializer : IDeserializer + { + public object Deserialize(RestResponseBase response, Type type) + { + var result = JsonParser.Deserialize(response.Content, type); + return result; + } + + public T Deserialize(RestResponseBase response) + { + var result = JsonParser.Deserialize(response.Content); + return result; + } + +#if NET40 + public dynamic DeserializeDynamic(RestResponseBase response) + { + var result = JsonParser.Deserialize(response.Content); + return result; + } +#endif + } +} diff --git a/trunk/hammock/src/net35/Hammock/Serialization/HammockDataContractJsonSerializer.cs b/trunk/hammock/src/net35/Hammock/Serialization/HammockDataContractJsonSerializer.cs new file mode 100644 index 0000000..8fa232e --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Serialization/HammockDataContractJsonSerializer.cs @@ -0,0 +1,90 @@ +using System; +using System.Collections.Generic; +#if NET40 +using System.Dynamic; +#endif +using System.IO; +using System.Runtime.Serialization.Json; + +namespace Hammock.Serialization +{ +#if !SILVERLIGHT + [Serializable] +#endif + public class HammockDataContractJsonSerializer : Utf8Serializer, ISerializer, IDeserializer + { + private readonly Dictionary _serializers = + new Dictionary(); + + #region ISerializer Members + + public virtual string Serialize(object instance, Type type) + { + string result; + using (var stream = new MemoryStream()) + { + var serializer = CacheOrGetSerializerFor(type); + serializer.WriteObject(stream, instance); + + var data = stream.ToArray(); + result = ContentEncoding.GetString(data, 0, data.Length); + } + return result; + } + + public virtual string ContentType + { + get { return "application/json"; } + } + + #endregion + + #region IDeserializer Members + + public virtual object Deserialize(RestResponseBase response, Type type) + { + object instance; + using (var stream = new MemoryStream(ContentEncoding.GetBytes(response.Content))) + { + var serializer = CacheOrGetSerializerFor(type); + instance = serializer.ReadObject(stream); + } + return instance; + } + + public virtual T Deserialize(RestResponseBase response) + { + var type = typeof (T); + T instance; + using (var stream = new MemoryStream(ContentEncoding.GetBytes(response.Content))) + { + var serializer = CacheOrGetSerializerFor(type); + instance = (T) serializer.ReadObject(stream); + } + return instance; + } + +#if NET40 + public dynamic DeserializeDynamic(RestResponseBase response) + { + throw new NotSupportedException(); + } +#endif + + #endregion + + private DataContractJsonSerializer CacheOrGetSerializerFor(Type type) + { + var handle = type.TypeHandle; + if (_serializers.ContainsKey(handle)) + { + return _serializers[handle]; + } + + var serializer = new DataContractJsonSerializer(type); + _serializers.Add(handle, serializer); + + return serializer; + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Serialization/HammockDataContractSerializer.cs b/trunk/hammock/src/net35/Hammock/Serialization/HammockDataContractSerializer.cs new file mode 100644 index 0000000..94d851c --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Serialization/HammockDataContractSerializer.cs @@ -0,0 +1,117 @@ +using System; +using System.Collections.Generic; +#if NET40 +using System.Dynamic; +#endif +using System.IO; +using System.Runtime.Serialization; +using System.Xml; +#if !NET20 +using System.Xml.Linq; +#endif + +namespace Hammock.Serialization +{ +#if !SILVERLIGHT + [Serializable] +#endif + public class HammockDataContractSerializer : Utf8Serializer, ISerializer, IDeserializer + { + private readonly Dictionary _serializers = + new Dictionary(); + +#if !SILVERLIGHT + [NonSerialized] +#endif + private readonly XmlWriterSettings _settings; + + public HammockDataContractSerializer(XmlWriterSettings settings) + { + _settings = settings; + } + + #region IDeserializer Members + + public virtual object Deserialize(RestResponseBase response, Type type) + { + using (var stringReader = new StringReader(response.Content)) + { + var xmlRoot = XElement.Load(stringReader); + var serializer = CacheOrGetSerializerFor(type); + + using (var reader = xmlRoot.CreateReader()) + { + return serializer.ReadObject(reader); + } + } + } + + public virtual T Deserialize(RestResponseBase response) + { + using (var stringReader = new StringReader(response.Content)) + { + var xmlRoot = XElement.Load(stringReader); + var serializer = CacheOrGetSerializerFor(typeof (T)); + + using (var reader = xmlRoot.CreateReader()) + { + return (T) serializer.ReadObject(reader); + } + } + } + +#if NET40 + public dynamic DeserializeDynamic(RestResponseBase response) + { + throw new NotSupportedException(); + } +#endif + + #endregion + + #region ISerializer Members + + public virtual string Serialize(object instance, Type type) + { + string result; + + using (var stream = new MemoryStream()) + { + using (var writer = XmlWriter.Create(stream, _settings)) + { + + var serializer = CacheOrGetSerializerFor(type); + writer.WriteStartDocument(); + serializer.WriteObject(writer, instance); + writer.Flush(); + } + + var data = stream.ToArray(); + result = ContentEncoding.GetString(data, 0, data.Length); + } + + return result; + } + + public virtual string ContentType + { + get { return "application/xml"; } + } + + #endregion + + private DataContractSerializer CacheOrGetSerializerFor(Type type) + { + var handle = type.TypeHandle; + if (_serializers.ContainsKey(handle)) + { + return _serializers[handle]; + } + + var serializer = new DataContractSerializer(type); + _serializers.Add(handle, serializer); + + return serializer; + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Serialization/HammockJavaScriptSerializer.cs b/trunk/hammock/src/net35/Hammock/Serialization/HammockJavaScriptSerializer.cs new file mode 100644 index 0000000..2b1f8a9 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Serialization/HammockJavaScriptSerializer.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Web.Script.Serialization; + +namespace Hammock.Serialization +{ +#if !SILVERLIGHT + [Serializable] +#endif + public class HammockJavaScriptSerializer : Utf8Serializer, ISerializer, IDeserializer + { + private readonly JavaScriptSerializer _serializer; + + public HammockJavaScriptSerializer(JavaScriptTypeResolver resolver) + { + _serializer = new JavaScriptSerializer(resolver); + } + + public HammockJavaScriptSerializer(JavaScriptTypeResolver resolver, IEnumerable converters) + { + _serializer = new JavaScriptSerializer(resolver); + _serializer.RegisterConverters(converters); + } + + public HammockJavaScriptSerializer(IEnumerable converters) + { + _serializer = new JavaScriptSerializer(); + _serializer.RegisterConverters(converters); + } + + public virtual string Serialize(object instance, Type type) + { + return _serializer.Serialize(instance); + } + + public virtual string ContentType + { + get { return "application/json"; } + } + + public virtual object Deserialize(RestResponse response, Type type) + { + return _serializer.DeserializeObject(response.Content); + } + + public virtual T Deserialize(RestResponse response) + { + return _serializer.Deserialize(response.Content); + } + } +} diff --git a/trunk/hammock/src/net35/Hammock/Serialization/HammockXmlSerializer.cs b/trunk/hammock/src/net35/Hammock/Serialization/HammockXmlSerializer.cs new file mode 100644 index 0000000..3fd5495 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Serialization/HammockXmlSerializer.cs @@ -0,0 +1,123 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Xml; +using System.Xml.Serialization; +#if NET40 +using System.Dynamic; +#endif + +namespace Hammock.Serialization +{ +#if !SILVERLIGHT + [Serializable] +#endif + public class HammockXmlSerializer : Utf8Serializer, ISerializer, IDeserializer + { + private readonly Dictionary _serializers = + new Dictionary(); + + [NonSerialized] + private readonly XmlWriterSettings _settings; + + [NonSerialized] + private readonly XmlSerializerNamespaces _namespaces; + + public HammockXmlSerializer(XmlWriterSettings settings) + { + _settings = settings; + } + + public HammockXmlSerializer(XmlWriterSettings settings, XmlSerializerNamespaces namespaces) : this(settings) + { + _namespaces = namespaces; + } + + #region ISerializer Methods + + public virtual string Serialize(object instance, Type type) + { + string result; + using (var stream = new MemoryStream()) + { + using (var writer = XmlWriter.Create(stream, _settings)) + { + var serializer = CacheOrGetSerializerFor(type); + + if (_namespaces != null) + { + serializer.Serialize(writer, instance, _namespaces); + } + else + { + serializer.Serialize(writer, instance); + } + } + +#if !Smartphone && !NETCF + result = ContentEncoding.GetString(stream.ToArray()); +#else + result = ContentEncoding.GetString(stream.ToArray(), 0, (int)stream.Length); +#endif + } + return result; + } + + #endregion + + public virtual string ContentType + { + get { return "application/xml"; } + } + + #region IDeserializer Methods + + public virtual object Deserialize(RestResponseBase response, Type type) + { + object instance; + var serializer = CacheOrGetSerializerFor(type); + using(var reader = new StringReader(response.Content)) + { + instance = serializer.Deserialize(reader); + } + return instance; + } + + public virtual T Deserialize(RestResponseBase response) + { + T instance; + var serializer = CacheOrGetSerializerFor(typeof(T)); + using (var reader = new StringReader(response.Content)) + { + instance = (T) serializer.Deserialize(reader); + } + return instance; + } + +#if NET40 + public virtual dynamic DeserializeDynamic(RestResponseBase response) + { + var result = Deserialize(response); + return result; + } +#endif + + #endregion + + private XmlSerializer CacheOrGetSerializerFor(Type type) + { + var handle = type.TypeHandle; + if (_serializers.ContainsKey(handle)) + { + return _serializers[handle]; + } + + var serializer = new XmlSerializer(type); + _serializers.Add(handle, serializer); + + return serializer; + } + } +} + + diff --git a/trunk/hammock/src/net35/Hammock/Serialization/IDeserializer.cs b/trunk/hammock/src/net35/Hammock/Serialization/IDeserializer.cs new file mode 100644 index 0000000..6fda795 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Serialization/IDeserializer.cs @@ -0,0 +1,16 @@ +using System; +#if NET40 +using System.Dynamic; +#endif + +namespace Hammock.Serialization +{ + public interface IDeserializer + { + object Deserialize(RestResponseBase response, Type type); + T Deserialize(RestResponseBase response); +#if NET40 + dynamic DeserializeDynamic(RestResponseBase response); +#endif + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Serialization/ISerializer.cs b/trunk/hammock/src/net35/Hammock/Serialization/ISerializer.cs new file mode 100644 index 0000000..66e7cd6 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Serialization/ISerializer.cs @@ -0,0 +1,12 @@ +using System; +using System.Text; + +namespace Hammock.Serialization +{ + public interface ISerializer + { + string Serialize(object instance, Type type); + string ContentType { get; } + Encoding ContentEncoding { get; } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Serialization/JsonParser.cs b/trunk/hammock/src/net35/Hammock/Serialization/JsonParser.cs new file mode 100644 index 0000000..6abf169 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Serialization/JsonParser.cs @@ -0,0 +1,976 @@ +#region Public Domain License +/* + * JSON Parser + * Written by Daniel Crenna + * (http://danielcrenna.com) + * + * This work is public domain. + * + * "The person who associated a work with this document has + * dedicated the work to the Commons by waiving all of his + * or her rights to the work worldwide under copyright law + * and all related or neighboring legal rights he or she + * had in the work, to the extent allowable by law." + * + * For more information, please visit: + * http://creativecommons.org/publicdomain/zero/1.0/ + */ +#endregion + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Reflection; +using System.Text; +#if NET40 +using System.Dynamic; +#endif +#if NETCF +using Hammock.Extensions; +#endif + + +namespace Hammock.Serialization +{ + /// + /// Possible JSON tokens in parsed input. + /// + public enum JsonToken + { + Unknown, + LeftBrace, + RightBrace, + Colon, + Comma, + LeftBracket, + RightBracket, + String, + Number, + True, + False, + Null + } + + /// + /// Exception raised when encounters an invalid token. + /// + public class InvalidJsonException : Exception + { + public InvalidJsonException(string message) + : base(message) + { + + } + } + +#if NET40 + public interface IJson { } + + public class JsonArray : DynamicObject, IEnumerable, IJson + { + private readonly List _collection; + + public JsonArray(ICollection collection) + { + _collection = new List(collection.Count); + foreach (var instance in collection.Cast>()) + { + _collection.Add(new JsonObject(instance)); + } + } + + public IEnumerator GetEnumerator() + { + return _collection.GetEnumerator(); + } + } + + public class JsonObject : DynamicObject, IJson + { + private readonly IDictionary _hash = new Dictionary(); + + public JsonObject(IDictionary hash) + { + _hash = hash; + } + + public override bool TrySetMember(SetMemberBinder binder, object value) + { + var name = Underscored(binder.Name); + _hash[name] = value; + return _hash[name] == value; + } + + public override bool TryGetMember(GetMemberBinder binder, out object result) + { + var name = Underscored(binder.Name); + return YieldMember(name, out result); + } + + private bool YieldMember(string name, out object result) + { + if (_hash.ContainsKey(name)) + { + result = _hash[name]; + + if (result is IDictionary) + { + result = new JsonObject((IDictionary)result); + return true; + } + + return _hash[name] == result; + } + result = null; + return false; + } + + private static string Underscored(IEnumerable pascalCase) + { + var sb = new StringBuilder(); + var i = 0; + foreach (var c in pascalCase) + { + if (char.IsUpper(c) && i > 0) + { + sb.Append("_"); + } + sb.Append(c); + i++; + } + return sb.ToString().ToLowerInvariant(); + } + } +#endif + + /// + /// A parser for JSON. + /// + /// + public class JsonParser + { +#if !NETCF + private const NumberStyles JsonNumbers = NumberStyles.Float; +#endif + private static readonly IDictionary _cache; + + private static readonly char[] _base16 = new[] + { + '0', '1', '2', '3', + '4', '5', '6', '7', + '8', '9', 'A', 'B', + 'C', 'D', 'E', 'F' + }; + + static JsonParser() + { + _cache = new Dictionary(0); + } + + public static string Serialize(T instance) + { + var bag = GetBagForObject(instance); + + return ToJson(bag); + } + + public static object Deserialize(string json, Type type) + { + object instance; + var map = PrepareInstance(out instance, type); + var bag = FromJson(json); + + DeserializeImpl(map, bag, instance); + return instance; + } + + public static T Deserialize(string json) + { + T instance; + var map = PrepareInstance(out instance); + var bag = FromJson(json); + + DeserializeImpl(map, bag, instance); + return instance; + } + +#if NET40 + public static dynamic Deserialize(string json) + { + JsonToken type; + var inner = FromJson(json, out type); + dynamic instance = null; + + switch (type) + { + case JsonToken.LeftBrace: + var @object = (IDictionary)inner.Single().Value; + instance = new JsonObject(@object); + break; + case JsonToken.LeftBracket: + var @array = (IList)inner.Single().Value; + instance = new JsonArray(@array); + break; + } + + return instance; + } +#endif + + private static void DeserializeImpl(IEnumerable map, + IDictionary bag, + object instance) + { + DeserializeType(map, bag, instance); + } + + private static void DeserializeImpl(IEnumerable map, + IDictionary bag, + T instance) + { + DeserializeType(map, bag, instance); + } + + private static void DeserializeType(IEnumerable map, IDictionary bag, object instance) + { + foreach (var info in map) + { + var key = info.Name; + if (!bag.ContainsKey(key)) + { + key = info.Name.Replace("_", ""); + if (!bag.ContainsKey(key)) + { + key = info.Name.Replace("-", ""); + if (!bag.ContainsKey(key)) + { + continue; + } + } + } + + var value = bag[key]; + if (info.PropertyType == typeof(DateTime)) + { + // Dates (Not part of spec, using lossy epoch convention) + var seconds = Int32.Parse( + value.ToString(), NumberStyles.Number, CultureInfo.InvariantCulture + ); + var time = new DateTime(1970, 1, 1).ToUniversalTime(); + value = time.AddSeconds(seconds); + } + + if (info.PropertyType == typeof(byte[])) + { + var bytes = (List)value; +#if NETCF + value = bytes.Select(o => Convert.ToByte(o)).ToArray(); +#else + value = bytes.Select(Convert.ToByte).ToArray(); +#endif + } + + if (info.PropertyType == typeof(double)) + { + value = Convert.ToDouble(value); + } + + if (info.PropertyType == typeof(int)) + { + value = Convert.ToInt32(value); + } + + if (info.PropertyType == typeof(long)) + { + value = Convert.ToInt64(value); + } + + info.SetValue(instance, value, null); + } + } + + public static IDictionary FromJson(string json) + { + JsonToken type; + + var result = FromJson(json, out type); + + switch (type) + { + case JsonToken.LeftBrace: + var @object = (IDictionary)result.Single().Value; + return @object; + } + + return result; + } + + public static IDictionary FromJson(string json, out JsonToken type) + { + var data = json.ToCharArray(); + var index = 0; + + // Rewind index for first token + var token = NextToken(data, ref index); + switch (token) + { + case JsonToken.LeftBrace: // Start Object + case JsonToken.LeftBracket: // Start Array + index--; + type = token; + break; + default: + throw new InvalidJsonException("JSON must begin with an object or array"); + } + + return ParseObject(data, ref index); + } + + public static string ToJson(IDictionary bag) + { + var sb = new StringBuilder(0); + + SerializeItem(sb, bag); + + return sb.ToString(); + } + + internal static IDictionary GetBagForObject(Type type, object instance) + { + CacheReflection(type); + + if (type.FullName == null) + { + return null; + } + + var anonymous = type.FullName.Contains("__AnonymousType"); + var map = _cache[type]; + + IDictionary bag = InitializeBag(); + foreach (var info in map) + { + var readWrite = (info.CanWrite && info.CanRead); + if (!readWrite && !anonymous) + { + continue; + } + var value = info.GetValue(instance, null); + bag.Add(info.Name, value); + } + + return bag; + } + + internal static IDictionary GetBagForObject(T instance) + { + return GetBagForObject(typeof(T), instance); + } + + internal static Dictionary InitializeBag() + { + return new Dictionary( + 0, StringComparer.OrdinalIgnoreCase + ); + } + + internal static IEnumerable PrepareInstance(out object instance, Type type) + { + instance = Activator.CreateInstance(type); + + CacheReflection(type); + + return _cache[type]; + } + + internal static IEnumerable PrepareInstance(out T instance) + { + instance = Activator.CreateInstance(); + var item = typeof(T); + + CacheReflection(item); + + return _cache[item]; + } + + internal static void CacheReflection(Type item) + { + if (_cache.ContainsKey(item)) + { + return; + } + + var properties = item.GetProperties( + BindingFlags.Public | BindingFlags.Instance + ); + + _cache.Add(item, properties); + } + + internal static void SerializeItem(StringBuilder sb, object item) + { + if (item is IDictionary) + { + SerializeObject(item, sb); + return; + } + + if (item is IEnumerable) + { + SerializeArray(item, sb); + return; + } + + if (item is DateTime) + { + SerializeDateTime(sb); + return; + } + + if (item is bool) + { + sb.Append(((bool)item).ToString().ToLower()); + return; + } + + double number; + var input = item != null ? item.ToString() : ""; +#if NETCF + if (input.TryParse(out number)) + { + sb.Append(number); + } +#else + if (double.TryParse(input, JsonNumbers, CultureInfo.InvariantCulture, out number)) + { + sb.Append(number); + return; + } +#endif + if (item == null) + { + sb.Append("null"); + return; + } + + var bag = GetBagForObject(item.GetType(), item); + SerializeItem(sb, bag); + } + + internal static void SerializeDateTime(StringBuilder sb) + { + var elapsed = DateTime.UtcNow - new DateTime(1970, 1, 1).ToUniversalTime(); + var epoch = (long)elapsed.TotalSeconds; + SerializeString(sb, epoch); + } + + internal static void SerializeArray(object item, StringBuilder sb) + { + var array = (IEnumerable)item; + sb.Append("["); + var count = 0; + + var total = array.Cast().Count(); + foreach (var element in array) + { + SerializeItem(sb, element); + count++; + if (count < total) + { + sb.Append(","); + } + } + sb.Append("]"); + } + + internal static void SerializeObject(object item, StringBuilder sb) + { + var nested = (IDictionary)item; + sb.Append("{"); + + var count = 0; + foreach (var key in nested.Keys) + { + SerializeString(sb, key.ToLower()); + sb.Append(":"); + + var value = nested[key]; + if (value is string) + { + SerializeString(sb, value); + } + else + { + SerializeItem(sb, nested[key]); + } + + if (count < nested.Keys.Count - 1) + { + sb.Append(","); + } + count++; + } + sb.Append("}"); + } + + + internal static void SerializeString(StringBuilder sb, object item) + { + sb.Append("\""); + var symbols = item.ToString().ToCharArray(); +#if NETCF + foreach (var unicode in symbols.Select(symbol => (int)symbol).Select(code => GetUnicode(code))) +#else + foreach (var unicode in symbols.Select(symbol => (int)symbol).Select(GetUnicode)) +#endif + { + sb.Append(unicode); + } + sb.Append("\""); + } + + internal static string GetUnicode(int code) + { + // http://unicode.org/roadmaps/bmp/ + var basicLatin = code >= 32 && code <= 126; + if (basicLatin) + { + return new string((char)code, 1); + } + + var unicode = BaseConvert(code, _base16, 4); + return string.Concat("\\u", unicode); + } + + internal static KeyValuePair ParsePair(IList data, ref int index) + { + var valid = true; + + var name = ParseString(data, ref index); + if (name == null) + { + valid = false; + } + + if (!ParseToken(JsonToken.Colon, data, ref index)) + { + valid = false; + } + + if (!valid) + { + throw new InvalidJsonException(string.Format( + "Invalid JSON found while parsing a value pair at index {0}.", index + )); + } + + index++; + var value = ParseValue(data, ref index); + return new KeyValuePair(name, value); + } + + internal static bool ParseToken(JsonToken token, IList data, ref int index) + { + var nextToken = NextToken(data, ref index); + return token == nextToken; + } + + internal static string ParseString(IList data, ref int index) + { + var symbol = data[index]; + IgnoreWhitespace(data, ref index, symbol); + symbol = data[++index]; // Skip first quotation + + var sb = new StringBuilder(); + while (true) + { + if (index >= data.Count - 1) + { + return null; + } + switch (symbol) + { + case '"': // End String + index++; + return sb.ToString(); + case '\\': // Control Character + symbol = data[++index]; + switch (symbol) + { + case '/': + sb.Append(symbol); + break; + case '\\': + case 'b': + case 'f': + case 'n': + case 'r': + case 't': + break; + case 'u': // Unicode literals + if (index < data.Count - 5) + { + var array = data.ToArray(); + var buffer = new char[4]; + Array.Copy(array, index + 1, buffer, 0, 4); + + // http://msdn.microsoft.com/en-us/library/aa664669%28VS.71%29.aspx + // http://www.yoda.arachsys.com/csharp/unicode.html + // http://en.wikipedia.org/wiki/UTF-32/UCS-4 + var hex = new string(buffer); + var unicode = (char)Convert.ToInt32(hex, 16); + sb.Append(unicode); + index += 4; + } + else + { + break; + } + break; + } + break; + default: + sb.Append(symbol); + break; + } + symbol = data[++index]; + } + } + + internal static object ParseValue(IList data, ref int index) + { + var token = NextToken(data, ref index); + + switch (token) + { + // End Tokens + case JsonToken.RightBracket: // Bad Data + case JsonToken.RightBrace: + case JsonToken.Unknown: + case JsonToken.Colon: + case JsonToken.Comma: + throw new InvalidJsonException(string.Format( + "Invalid JSON found while parsing a value at index {0}.", index + )); + // Value Tokens + case JsonToken.LeftBrace: + return ParseObject(data, ref index); + case JsonToken.LeftBracket: + return ParseArray(data, ref index); + case JsonToken.String: + return ParseString(data, ref index); + case JsonToken.Number: + return ParseNumber(data, ref index); + case JsonToken.True: + return true; + case JsonToken.False: + return false; + case JsonToken.Null: + return null; + default: + throw new ArgumentOutOfRangeException(); + } + } + + internal static IDictionary ParseObject(IList data, ref int index) + { + var result = InitializeBag(); + + index++; // Skip first token + + while (index < data.Count - 1) + { + var token = NextToken(data, ref index); + switch (token) + { + // End Tokens + case JsonToken.Unknown: // Bad Data + case JsonToken.True: + case JsonToken.False: + case JsonToken.Null: + case JsonToken.Colon: + case JsonToken.RightBracket: + case JsonToken.Number: + throw new InvalidJsonException(string.Format( + "Invalid JSON found while parsing an object at index {0}.", index + )); + case JsonToken.RightBrace: // End Object + index++; + return result; + // Skip Tokens + case JsonToken.Comma: + index++; + break; + // Start Tokens + case JsonToken.LeftBrace: // Start Object + var @object = ParseObject(data, ref index); + if (@object != null) + { + result.Add(string.Concat("object", result.Count), @object); + } + index++; + break; + case JsonToken.LeftBracket: // Start Array + var @array = ParseArray(data, ref index); + if (@array != null) + { + result.Add(string.Concat("array", result.Count), @array); + } + index++; + break; + case JsonToken.String: + var pair = ParsePair(data, ref index); + result.Add(pair.Key, pair.Value); + break; + default: + throw new NotSupportedException("Invalid token expected."); + } + } + + return result; + } + + internal static IEnumerable ParseArray(IList data, ref int index) + { + var result = new List(); + + index++; // Skip first bracket + while (index < data.Count - 1) + { + var token = NextToken(data, ref index); + switch (token) + { + // End Tokens + case JsonToken.Unknown: // Bad Data + throw new InvalidJsonException(string.Format( + "Invalid JSON found while parsing an array at index {0}.", index + )); + case JsonToken.RightBracket: // End Array + index++; + return result; + // Skip Tokens + case JsonToken.Comma: // Separator + case JsonToken.RightBrace: // End Object + case JsonToken.Colon: // Separator + index++; + break; + // Value Tokens + case JsonToken.LeftBrace: // Start Object + var nested = ParseObject(data, ref index); + result.Add(nested); + break; + case JsonToken.LeftBracket: // Start Array + case JsonToken.String: + case JsonToken.Number: + case JsonToken.True: + case JsonToken.False: + case JsonToken.Null: + var value = ParseValue(data, ref index); + result.Add(value); + break; + default: + throw new ArgumentOutOfRangeException(); + } + + //index++; + } + + return result; + } + + internal static object ParseNumber(IList data, ref int index) + { + var symbol = data[index]; + IgnoreWhitespace(data, ref index, symbol); + + var start = index; + var length = 0; + while (ParseToken(JsonToken.Number, data, ref index)) + { + length++; + index++; + } + + var number = new char[length]; + Array.Copy(data.ToArray(), start, number, 0, length); + + double result; + var buffer = new string(number); +#if NETCF + if (!buffer.TryParse(out result)) + { + throw new InvalidJsonException( + string.Format("Value '{0}' was not a valid JSON number", buffer) + ); + } +#else + if (!double.TryParse(buffer, JsonNumbers, CultureInfo.InvariantCulture, out result)) + { + throw new InvalidJsonException( + string.Format("Value '{0}' was not a valid JSON number", buffer) + ); + } +#endif + + return result; + } + + internal static JsonToken NextToken(IList data, ref int index) + { + var symbol = data[index]; + var token = GetTokenFromSymbol(symbol); + token = IgnoreWhitespace(data, ref index, ref token, symbol); + + GetKeyword("true", JsonToken.True, data, ref index, ref token); + GetKeyword("false", JsonToken.False, data, ref index, ref token); + GetKeyword("null", JsonToken.Null, data, ref index, ref token); + + return token; + } + + internal static JsonToken GetTokenFromSymbol(char symbol) + { + return GetTokenFromSymbol(symbol, JsonToken.Unknown); + } + + internal static JsonToken GetTokenFromSymbol(char symbol, JsonToken token) + { + switch (symbol) + { + case '{': + token = JsonToken.LeftBrace; + break; + case '}': + token = JsonToken.RightBrace; + break; + case ':': + token = JsonToken.Colon; + break; + case ',': + token = JsonToken.Comma; + break; + case '[': + token = JsonToken.LeftBracket; + break; + case ']': + token = JsonToken.RightBracket; + break; + case '"': + token = JsonToken.String; + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '.': + case 'e': + case 'E': + case '+': + case '-': + token = JsonToken.Number; + break; + } + return token; + } + + internal static void IgnoreWhitespace(IList data, ref int index, char symbol) + { + var token = JsonToken.Unknown; + IgnoreWhitespace(data, ref index, ref token, symbol); + return; + } + + internal static JsonToken IgnoreWhitespace(IList data, ref int index, ref JsonToken token, char symbol) + { + switch (symbol) + { + case ' ': + case '\\': + case '/': + case '\b': + case '\f': + case '\n': + case '\r': + case '\t': + index++; + token = NextToken(data, ref index); + break; + } + return token; + } + + internal static void GetKeyword(string word, + JsonToken target, + IList data, + ref int index, + ref JsonToken result) + { + var buffer = data.Count - index; + if (buffer < word.Length) + { + return; + } + + for (var i = 0; i < word.Length; i++) + { + if (data[index + i] != word[i]) + { + return; + } + } + + result = target; + index += word.Length; + } + + internal static string BaseConvert(int input, char[] charSet, int minLength) + { + var sb = new StringBuilder(); + var @base = charSet.Length; + + while (input > 0) + { + var index = input % @base; + sb.Insert(0, new[] { charSet[index] }); + input = input / @base; + } + + while (sb.Length < minLength) + { + sb.Insert(0, "0"); + } + + return sb.ToString(); + } + } + +#if NETCF + public static class CompactExtensions + { + private const NumberStyles JsonNumbers = NumberStyles.Float; + + public static bool TryParse(this string input, out double result) + { + try + { + result = double.Parse(input, JsonNumbers, CultureInfo.InvariantCulture); + return true; + } + catch (Exception) + { + result = 0; + return false; + } + } + } +#endif +} + diff --git a/trunk/hammock/src/net35/Hammock/Serialization/Utf8Serializer.cs b/trunk/hammock/src/net35/Hammock/Serialization/Utf8Serializer.cs new file mode 100644 index 0000000..0628765 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Serialization/Utf8Serializer.cs @@ -0,0 +1,16 @@ +using System; +using System.Text; + +namespace Hammock.Serialization +{ +#if !SILVERLIGHT + [Serializable] +#endif + public class Utf8Serializer + { + public virtual Encoding ContentEncoding + { + get { return Encoding.UTF8; } + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Specifications/AndSpecification.cs b/trunk/hammock/src/net35/Hammock/Specifications/AndSpecification.cs new file mode 100644 index 0000000..3aa17aa --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Specifications/AndSpecification.cs @@ -0,0 +1,14 @@ +namespace Hammock.Specifications +{ + internal class AndSpecification : CompositeSpecificationBase + { + public AndSpecification(ISpecification one, ISpecification other) : base(one, other) + { + } + + public override bool IsSatisfiedBy(T instance) + { + return One.IsSatisfiedBy(instance) && Other.IsSatisfiedBy(instance); + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Specifications/CompositeSpecificationBase.cs b/trunk/hammock/src/net35/Hammock/Specifications/CompositeSpecificationBase.cs new file mode 100644 index 0000000..4c032d7 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Specifications/CompositeSpecificationBase.cs @@ -0,0 +1,14 @@ +namespace Hammock.Specifications +{ + internal abstract class CompositeSpecificationBase : HammockSpecification + { + protected CompositeSpecificationBase(ISpecification one, ISpecification other) + { + One = one; + Other = other; + } + + public ISpecification One { get; private set; } + public ISpecification Other { get; private set; } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Specifications/HammockSpecification.cs b/trunk/hammock/src/net35/Hammock/Specifications/HammockSpecification.cs new file mode 100644 index 0000000..b812ae6 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Specifications/HammockSpecification.cs @@ -0,0 +1,36 @@ +namespace Hammock.Specifications +{ + public abstract class HammockSpecification : ISpecification + { + #region ISpecification Members + + public abstract bool IsSatisfiedBy(T instance); + + public virtual ISpecification And(ISpecification other) + { + return new AndSpecification(this, other); + } + + public virtual ISpecification Or(ISpecification other) + { + return new OrSpecification(this, other); + } + + public virtual ISpecification Not() + { + return new NotSpecification(this); + } + + #endregion + + public static ISpecification operator &(HammockSpecification one, ISpecification other) + { + return one.And(other); + } + + public static ISpecification operator |(HammockSpecification one, ISpecification other) + { + return one.Or(other); + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Specifications/ISpecification.cs b/trunk/hammock/src/net35/Hammock/Specifications/ISpecification.cs new file mode 100644 index 0000000..3a86538 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Specifications/ISpecification.cs @@ -0,0 +1,15 @@ +namespace Hammock.Specifications +{ + public interface ISpecification + { + + } + + public interface ISpecification : ISpecification + { + bool IsSatisfiedBy(T instance); + ISpecification And(ISpecification other); + ISpecification Or(ISpecification other); + ISpecification Not(); + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Specifications/NotSpecification.cs b/trunk/hammock/src/net35/Hammock/Specifications/NotSpecification.cs new file mode 100644 index 0000000..2efbb16 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Specifications/NotSpecification.cs @@ -0,0 +1,17 @@ +namespace Hammock.Specifications +{ + internal class NotSpecification : HammockSpecification + { + private readonly ISpecification _original; + + public NotSpecification(ISpecification original) + { + _original = original; + } + + public override bool IsSatisfiedBy(T instance) + { + return !_original.IsSatisfiedBy(instance); + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Specifications/OrSpecification.cs b/trunk/hammock/src/net35/Hammock/Specifications/OrSpecification.cs new file mode 100644 index 0000000..8a188f5 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Specifications/OrSpecification.cs @@ -0,0 +1,14 @@ +namespace Hammock.Specifications +{ + internal class OrSpecification : CompositeSpecificationBase + { + public OrSpecification(ISpecification one, ISpecification other) : base(one, other) + { + } + + public override bool IsSatisfiedBy(T instance) + { + return One.IsSatisfiedBy(instance) || Other.IsSatisfiedBy(instance); + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Streaming/StreamOptions.cs b/trunk/hammock/src/net35/Hammock/Streaming/StreamOptions.cs new file mode 100644 index 0000000..7f36c06 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Streaming/StreamOptions.cs @@ -0,0 +1,13 @@ +using System; + +namespace Hammock.Streaming +{ +#if !SILVERLIGHT + [Serializable] +#endif + public class StreamOptions + { + public virtual TimeSpan? Duration { get; set; } + public virtual int? ResultsPerCallback { get; set; } + } +} diff --git a/trunk/hammock/src/net35/Hammock/Tasks/IRateLimitStatus.cs b/trunk/hammock/src/net35/Hammock/Tasks/IRateLimitStatus.cs new file mode 100644 index 0000000..5bca372 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Tasks/IRateLimitStatus.cs @@ -0,0 +1,21 @@ +using System; + + +namespace Hammock.Tasks +{ + /// + /// Describes the current status of a rate limited API or other resource + /// Based mostly on Twitter's rate limit status + /// + public interface IRateLimitStatus + { + /// + /// Gets the current number of resource uses available + /// + int RemainingUses { get; } + /// + /// Gets the next time the is due to be refreshed + /// + DateTime NextReset { get; } + } +} diff --git a/trunk/hammock/src/net35/Hammock/Tasks/IRateLimitingRule.cs b/trunk/hammock/src/net35/Hammock/Tasks/IRateLimitingRule.cs new file mode 100644 index 0000000..62b1d69 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Tasks/IRateLimitingRule.cs @@ -0,0 +1,14 @@ +using System; + +namespace Hammock.Tasks +{ + public interface IRateLimitingRule + { + double? LimitToPercentOfTotal { get; } + RateLimitType RateLimitType { get; } + Func GetRateLimitStatus { get; set; } + Predicate RateLimitIf { get; } + bool ShouldSkipForRateLimiting(); + TimeSpan? CalculateNewInterval(); + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Tasks/ITaskOptions.cs b/trunk/hammock/src/net35/Hammock/Tasks/ITaskOptions.cs new file mode 100644 index 0000000..d26460e --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Tasks/ITaskOptions.cs @@ -0,0 +1,20 @@ +using System; + +namespace Hammock.Tasks +{ + public interface ITaskOptions + { + double? RateLimitPercent { get; set; } + RateLimitType RateLimitType { get; } + Predicate RateLimitingPredicate { get; } + Func GetRateLimitStatus { get; } + } + + public interface ITaskOptions + { + TimeSpan DueTime { get; set; } + int RepeatTimes { get; set; } + TimeSpan RepeatInterval { get; set; } + bool ContinueOnError { get; set; } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Tasks/ITaskState.cs b/trunk/hammock/src/net35/Hammock/Tasks/ITaskState.cs new file mode 100644 index 0000000..af0cd1a --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Tasks/ITaskState.cs @@ -0,0 +1,14 @@ +using System; + +namespace Hammock.Tasks +{ + public interface ITaskState + { + int RepeatCount { get; set; } + DateTime? LastRepeat { get; set; } + } + + public interface IRetryState :ITaskState + { + } +} diff --git a/trunk/hammock/src/net35/Hammock/Tasks/ITimedTask.cs b/trunk/hammock/src/net35/Hammock/Tasks/ITimedTask.cs new file mode 100644 index 0000000..8c60a38 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Tasks/ITimedTask.cs @@ -0,0 +1,23 @@ +using System; + +namespace Hammock.Tasks +{ + public interface ITimedTask : IDisposable + { + Action Action { get; } + Exception Exception { get; } + + TimeSpan DueTime { get; } + TimeSpan Interval { get; } + + void Start(); + void Start(TimeSpan dueTime, TimeSpan interval); + void Stop(); + } + + public interface ITimedTask : ITimedTask + { + bool RateLimited { get; } + IRateLimitingRule RateLimitingRule { get; } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Tasks/RateLimitType.cs b/trunk/hammock/src/net35/Hammock/Tasks/RateLimitType.cs new file mode 100644 index 0000000..c8bbdba --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Tasks/RateLimitType.cs @@ -0,0 +1,19 @@ +using System; +using System.Runtime.Serialization; + +namespace Hammock.Tasks +{ +#if !SILVERLIGHT + [Serializable] +#endif + public enum RateLimitType + { +#if !SILVERLIGHT && !Smartphone && !ClientProfiles && !NET20 && !MonoTouch && !NETCF + [EnumMember] ByPercent, + [EnumMember] ByPredicate +#else + ByPercent, + ByPredicate +#endif + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Tasks/RateLimitingRule.cs b/trunk/hammock/src/net35/Hammock/Tasks/RateLimitingRule.cs new file mode 100644 index 0000000..d42e22b --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Tasks/RateLimitingRule.cs @@ -0,0 +1,94 @@ +using System; + +namespace Hammock.Tasks +{ +#if !SILVERLIGHT + [Serializable] +#endif + public class RateLimitingRule : IRateLimitingRule + { + private readonly RateLimitType _rateLimitType; + + public RateLimitingRule(Predicate rateLimitIf) + { + _rateLimitType = RateLimitType.ByPredicate; + RateLimitIf = rateLimitIf; + } + + public RateLimitingRule(double percentOfTotal) + { + _rateLimitType = RateLimitType.ByPercent; + LimitToPercentOfTotal = percentOfTotal; + } + + public RateLimitingRule(Func getRateLimitStatus, Predicate rateLimitIf) + { + _rateLimitType = RateLimitType.ByPredicate; + GetRateLimitStatus = getRateLimitStatus; + RateLimitIf = rateLimitIf; + } + + public RateLimitingRule(Func getRateLimitStatus, double percentOfTotal) + { + _rateLimitType = RateLimitType.ByPercent; + GetRateLimitStatus = getRateLimitStatus; + LimitToPercentOfTotal = percentOfTotal; + } + + #region IRateLimitingRule Members + + public virtual double? LimitToPercentOfTotal { get; private set; } + public virtual RateLimitType RateLimitType + { + get { return _rateLimitType; } + } + + public Func GetRateLimitStatus { get; set; } + public Predicate RateLimitIf { get; private set; } + + #endregion + + public bool ShouldSkipForRateLimiting() + { + // [JD]: Only pre-skip via predicate; percentage based adjusts rate after the call + if (RateLimitType != RateLimitType.ByPredicate) + { + return false; + } + + if (RateLimitIf == null) + { + throw new InvalidOperationException("Rule is set to use predicate, but no predicate is defined."); + } + + var status = default(T); + if (GetRateLimitStatus != null) + { + status = GetRateLimitStatus(); + } + return !RateLimitIf(status); + } + + public TimeSpan? CalculateNewInterval() + { + if (RateLimitType != RateLimitType.ByPercent) + { + return null; + } + + if (!LimitToPercentOfTotal.HasValue) + { + return null; + } + var currentRateLimit = (IRateLimitStatus)GetRateLimitStatus(); + if (currentRateLimit.RemainingUses == 0) + { + return currentRateLimit.NextReset - DateTime.Now; + } + var secondsUntilNextReset = (currentRateLimit.NextReset - DateTime.Now).TotalSeconds; + var desiredRetriesBeforeReset = currentRateLimit.RemainingUses * LimitToPercentOfTotal.Value; + var desiredInterval = (int)Math.Floor(secondsUntilNextReset / desiredRetriesBeforeReset); + return new TimeSpan(0, 0, 0, desiredInterval); + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Tasks/TaskOptions.cs b/trunk/hammock/src/net35/Hammock/Tasks/TaskOptions.cs new file mode 100644 index 0000000..5f259d5 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Tasks/TaskOptions.cs @@ -0,0 +1,46 @@ +using System; + +namespace Hammock.Tasks +{ + + +#if !SILVERLIGHT + [Serializable] +#endif + public class TaskOptions : TaskOptions, ITaskOptions + { + private RateLimitType _rateLimitType = RateLimitType.ByPredicate; + private double? _rateLimitPercent; + + public virtual RateLimitType RateLimitType { get { return _rateLimitType; } } + public virtual Predicate RateLimitingPredicate { get; set; } + public virtual Func GetRateLimitStatus { get; set; } + public virtual double? RateLimitPercent + { + get { return _rateLimitPercent; } + set + { + if ( value != null) + { + _rateLimitType = RateLimitType.ByPercent; + } + else + { + _rateLimitType = RateLimitType.ByPredicate; + } + _rateLimitPercent = value; + } + } + } + +#if !SILVERLIGHT + [Serializable] +#endif + public class TaskOptions : ITaskOptions + { + public virtual TimeSpan DueTime { get; set; } + public virtual int RepeatTimes { get; set; } + public virtual TimeSpan RepeatInterval { get; set; } + public virtual bool ContinueOnError { get; set; } + } +} diff --git a/trunk/hammock/src/net35/Hammock/Tasks/TaskState.cs b/trunk/hammock/src/net35/Hammock/Tasks/TaskState.cs new file mode 100644 index 0000000..f719745 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Tasks/TaskState.cs @@ -0,0 +1,24 @@ +using System; + +namespace Hammock.Tasks +{ +#if !SILVERLIGHT + [Serializable] +#endif + public class TaskState : IRetryState + { + #region ITaskState Members + + public int RepeatCount + { + get;set; + } + + public DateTime? LastRepeat + { + get; set; + } + + #endregion + } +} diff --git a/trunk/hammock/src/net35/Hammock/Tasks/TimedTask.cs b/trunk/hammock/src/net35/Hammock/Tasks/TimedTask.cs new file mode 100644 index 0000000..1ed1680 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Tasks/TimedTask.cs @@ -0,0 +1,243 @@ +using System; +using System.Diagnostics; +using System.Threading; +using Hammock.Web; + +#if SILVERLIGHT +using Hammock.Silverlight.Compat; +#endif +namespace Hammock.Tasks +{ + public class TimedTask : ITimedTask + { + protected readonly object Lock = new object(); + protected bool Active; + protected int Iterations; + protected Timer Timer; + protected bool ContinueOnError; + + public Action Action { get; protected set; } + public Exception Exception { get; protected set; } + public TimeSpan DueTime { get; protected set; } + public TimeSpan Interval { get; protected set; } + internal WebQueryAsyncResult AsyncResult { get; set; } + public event Action Stopped; + + public TimedTask(TimeSpan due, + TimeSpan interval, + int iterations, + bool continueOnError, + Action action) : + this(due, interval, iterations, action) + { + ContinueOnError = continueOnError; + } + + public TimedTask(TimeSpan due, + TimeSpan interval, + int iterations, + Action action) + { + DueTime = due; + Interval = interval; + Iterations = iterations; + Action = action; + } + + protected virtual void Start(bool continueOnError) + { + var count = 0; + Timer = new Timer(state => + { + try + { + Action(false); + count++; + if (Iterations > 0 && count > Iterations) + { + Stop(); + } + } + catch (Exception ex) + { + Exception = ex; + if (!continueOnError) + { + Stop(); + } + } + }, null, DueTime, Interval); + } + + + public virtual void Stop() + { + if (Active) + { + lock (Lock) + { + if (Active) + { + Active = false; + Timer.Change(-1, -1); + OnStopped(EventArgs.Empty); + if (AsyncResult != null) + { + AsyncResult.Signal(); + } + } + } + } + } + + public virtual void Start() + { + if (!Active) + { + lock (Lock) + { + if (!Active) + { + Active = true; + if (Timer != null) + { + Timer.Change(DueTime, Interval); + } + else + { + Start(ContinueOnError); + } + } + } + } + } + + public virtual void Start(TimeSpan dueTime, TimeSpan interval) + { + if (!Active) + { + lock (Lock) + { + if (!Active) + { + DueTime = dueTime; + Interval = interval; + Timer.Change(DueTime, Interval); + } + } + } + } + protected virtual void OnStopped(EventArgs e) + { + if (Stopped != null) + { + Stopped(this, e); + } + } + + public virtual void Dispose() + { + Stop(); + Timer.Dispose(); + } + } + +#if !SILVERLIGHT + [Serializable] +#endif + public class TimedTask : TimedTask, ITimedTask + { + public TimedTask(TimeSpan due, + TimeSpan interval, + int iterations, + bool continueOnError, + Action action, + IRateLimitingRule rateLimitingRule) : + base(due, interval, iterations, action) + { + RateLimitingRule = rateLimitingRule; + ContinueOnError = continueOnError; + } + + protected override void Start(bool continueOnError) + { + var count = 0; + Timer = new Timer(state => + { + try + { + //[JD] + //only allow the task to run once concurrently. + //if a second task attempts to enter the monitor while + //the first one is still running, simply drop it + if (Monitor.TryEnter(Lock)) + { + try + { +#if TRACE + Trace.WriteLine("Running a periodic task"); +#endif + var skip = RateLimitingRule.ShouldSkipForRateLimiting(); +#if TRACE + Trace.WriteLine(string.Format("{0} Evaluated rate limiting predicate and result was {1}", + DateTime.Now.ToShortTimeString(), + skip ? "'skip'" : "'don't skip'")); +#endif + Action(skip); + var newInterval = RateLimitingRule.CalculateNewInterval(); +#if TRACE + Trace.WriteLine(string.Format("{0} Calculated new interval for throttled task and result was: {1}", + DateTime.Now.ToShortTimeString(), + newInterval.HasValue ? newInterval.Value.ToString() : "'no change'")); +#endif + count++; + + if (Iterations > 0 && count >= Iterations) + { + Stop(); + } + else if (newInterval.HasValue) + { + Timer.Change((int)newInterval.Value.TotalMilliseconds, (int)newInterval.Value.TotalMilliseconds); + } + } + finally + { + Monitor.Exit(Lock); + } + } + else + { +#if TRACE + Trace.WriteLine("Skipping recurring task because the previous iteration is still active"); +#endif + Action(true); + } + } + catch (Exception ex) + { + Exception = ex; + if (!continueOnError) + { + Stop(); + } + } + }, null, DueTime, Interval); + } + + #region ITimedTask Members + + public virtual bool RateLimited + { + get { return RateLimitingRule != null; } + } + + public IRateLimitingRule RateLimitingRule { get; set; } + + public override void Dispose() + { + base.Dispose(); + } + #endregion + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Tasks/_Tasks.cd b/trunk/hammock/src/net35/Hammock/Tasks/_Tasks.cd new file mode 100644 index 0000000..20bc447 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Tasks/_Tasks.cd @@ -0,0 +1,67 @@ + + + + + + AAAAAAAAAAAAAAAAAAAAAAAIAAAAAQAAAAAJAAAAAAA= + Tasks\RateLimitingRule.cs + + + + + + + + + + AAoAAAAAAAAAAAAECAAAAAAAAAAAAAAAAAAAAAAAAAA= + Tasks\TimedTaskCollection.cs + + + + + + + + + + + AAAAAAAAACAgAAACAIAAAAAgAAAAAAAAKABAAAAAgAQ= + Tasks\TimedTask.cs + + + + + + + + + + AAAAAAAAAAAAAAAAAAAAAAAIAAAAAQAAAAAJAAAAAAA= + Tasks\IRateLimitingRule.cs + + + + + + + + + AAAAAAAAACAAAAAAAIAAAAAgAAAAAAAAKABAAAAAAAQ= + Tasks\ITimedTask.cs + + + + + + + + + iAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Tasks\RateLimitingType.cs + + + + \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Validation/ValidEmailSpecification.cs b/trunk/hammock/src/net35/Hammock/Validation/ValidEmailSpecification.cs new file mode 100644 index 0000000..bfac71b --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Validation/ValidEmailSpecification.cs @@ -0,0 +1,35 @@ +using System.Text.RegularExpressions; +using Hammock.Specifications; + +namespace Hammock.Validation +{ + public class ValidEmailSpecification : HammockSpecification + { + // Accepts names, i.e. John Smith + private static readonly Regex _names = + new Regex( + @"\w*<([-_a-z0-9'+*$^&%=~!?{}]+(?:\.[-_a-z0-9'+*$^&%=~!?{}]+)*@(?:(?![-.])[-a-z0-9.]+(?", +#if !SL4 && !MonoTouch + RegexOptions.Compiled | +#endif + RegexOptions.IgnoreCase + ); + + // Just an email address + private static readonly Regex _explicit = + new Regex( + @"^[-_a-z0-9'+*$^&%=~!?{}]+(?:\.[-_a-z0-9'+*$^&%=~!?{}]+)*@(?:(?![-.])[-a-z0-9.]+(? + /// A web query engine for making requests that use basic HTTP authorization. + /// + public class BasicAuthWebQuery : WebQuery + { + private readonly string _password; + private readonly string _username; + + public BasicAuthWebQuery(IWebQueryInfo info, string username, string password, bool enableTrace) : this(info, enableTrace) + { + _username = username; + _password = password; + } + + public BasicAuthWebQuery(IWebQueryInfo info, bool enableTrace) : base(info, enableTrace) + { + + } + + public bool HasAuth + { + get + { + return + (!_username.IsNullOrBlank() + && !String.IsNullOrEmpty(_password)); + } + } + + protected override void SetAuthorizationHeader(WebRequest request, string header) + { + if (!HasAuth) + { + return; + } + + var credentials = GetAuthorizationHeader(); + request.Headers[header] = credentials; + } + + private string GetAuthorizationHeader() + { + return WebExtensions.ToBasicAuthorizationHeader(_username, _password); + } + + protected override void AuthenticateRequest(WebRequest request) + { + SetAuthorizationHeader(request, "Authorization"); + } + + public override string GetAuthorizationContent() + { + return GetAuthorizationHeader(); + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Web/GetOrDelete.cs b/trunk/hammock/src/net35/Hammock/Web/GetOrDelete.cs new file mode 100644 index 0000000..8e39df4 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Web/GetOrDelete.cs @@ -0,0 +1,10 @@ +namespace Hammock.Web +{ + public enum GetDeleteHeadOptions + { + Get, + Delete, + Head, + Options + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Web/HttpCookieParameter.cs b/trunk/hammock/src/net35/Hammock/Web/HttpCookieParameter.cs new file mode 100644 index 0000000..0846cc3 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Web/HttpCookieParameter.cs @@ -0,0 +1,14 @@ +using System; + +namespace Hammock.Web +{ + public class HttpCookieParameter : WebParameter + { + public virtual Uri Domain { get; set; } + + public HttpCookieParameter(string name, string value) : base(name, value) + { + + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Web/HttpPostParameter.cs b/trunk/hammock/src/net35/Hammock/Web/HttpPostParameter.cs new file mode 100644 index 0000000..fd16e18 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Web/HttpPostParameter.cs @@ -0,0 +1,55 @@ +using System; +using System.IO; + +namespace Hammock.Web +{ + public class HttpPostParameter : WebParameter + { + public HttpPostParameter(string name, string value) : base(name, value) + { + + } + + public virtual HttpPostParameterType Type { get; private set; } + public virtual string FileName { get; private set; } + public virtual string FilePath { get; private set; } + public virtual Stream FileStream { get; set; } + public virtual string ContentType { get; private set; } + public virtual string ContentDisposition { get; set; } + + public static HttpPostParameter CreateFile(string name, + string fileName, + string filePath, + string contentType, + string contentDisposition) + { + var parameter = new HttpPostParameter(name, string.Empty) + { + Type = HttpPostParameterType.File, + FileName = fileName, + FilePath = filePath, + ContentType = contentType, + ContentDisposition = contentDisposition + }; + return parameter; + } + + public static HttpPostParameter CreateFile(string name, + string fileName, + Stream fileStream, + string contentType, + string contentDisposition) + { + var parameter = new HttpPostParameter(name, string.Empty) + { + Type = HttpPostParameterType.File, + FileName = fileName, + FileStream = fileStream, + ContentType = contentType, + ContentDisposition = contentDisposition + }; + + return parameter; + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Web/HttpPostParameterType.cs b/trunk/hammock/src/net35/Hammock/Web/HttpPostParameterType.cs new file mode 100644 index 0000000..893ae71 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Web/HttpPostParameterType.cs @@ -0,0 +1,19 @@ +using System; +using System.Runtime.Serialization; + +namespace Hammock.Web +{ +#if !SILVERLIGHT + [Serializable] +#endif + public enum HttpPostParameterType + { +#if !SILVERLIGHT && !Smartphone && !ClientProfiles && !NET20 && !MonoTouch && !NETCF + [EnumMember] Field, + [EnumMember] File +#else + Field, + File +#endif + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Web/IWebQueryInfo.cs b/trunk/hammock/src/net35/Hammock/Web/IWebQueryInfo.cs new file mode 100644 index 0000000..44788a7 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Web/IWebQueryInfo.cs @@ -0,0 +1,7 @@ +namespace Hammock.Web +{ + public interface IWebQueryInfo + { + + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Web/Mocks/IMockable.cs b/trunk/hammock/src/net35/Hammock/Web/Mocks/IMockable.cs new file mode 100644 index 0000000..a4938fe --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Web/Mocks/IMockable.cs @@ -0,0 +1,7 @@ +namespace Hammock.Web.Mocks +{ + public interface IMockable + { + + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Web/Mocks/IWebResponse.cs b/trunk/hammock/src/net35/Hammock/Web/Mocks/IWebResponse.cs new file mode 100644 index 0000000..f0134da --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Web/Mocks/IWebResponse.cs @@ -0,0 +1,7 @@ +namespace Hammock.Web.Mocks +{ + public interface IWebResponse + { + string Response { get; } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Web/Mocks/MockHttpWebRequest.cs b/trunk/hammock/src/net35/Hammock/Web/Mocks/MockHttpWebRequest.cs new file mode 100644 index 0000000..3eb331b --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Web/Mocks/MockHttpWebRequest.cs @@ -0,0 +1,135 @@ +using System; +using System.IO; +using System.Net; + +namespace Hammock.Web.Mocks +{ +#if !SILVERLIGHT + [Serializable] +#endif + public class MockHttpWebRequest : WebRequest + { + private readonly Uri _requestUri; + + public virtual HttpStatusCode ExpectStatusCode { get; protected internal set; } + public virtual string ExpectStatusDescription { get; protected internal set; } + public virtual WebHeaderCollection ExpectHeaders { get; protected internal set; } +#if SILVERLIGHT + // Need a wrapper around System.Net.WebHeaderCollection to allow headers in mocks +#endif + + public virtual string Content { get; set; } + +#if WindowsPhone + public long ContentLength { get; set; } +#elif !SILVERLIGHT + public override long ContentLength { get; set; } +#elif !WindowsPhone + public long ContentLength { get; set; } +#endif + public override string ContentType { get; set; } + + public MockHttpWebRequest(Uri requestUri) + { + _requestUri = requestUri; + Initialize(); + } + + private void Initialize() + { + Headers = new System.Net.WebHeaderCollection(); + ExpectHeaders = new WebHeaderCollection(); + } + +#if !SILVERLIGHT + public override WebResponse GetResponse() + { + return CreateResponse(); + } +#endif + public override void Abort() + { + + } + + private WebResponse CreateResponse() + { + var response = new MockHttpWebResponse(_requestUri, ContentType) + { + StatusCode = ExpectStatusCode, + StatusDescription = ExpectStatusDescription, + Content = Content + }; + + foreach (var key in ExpectHeaders.AllKeys) + { + response.MockHeaders.Add(key, ExpectHeaders[key].Value); + } + + return response; + } + +#if !SILVERLIGHT + public override Stream GetRequestStream() + { + return new MemoryStream(); + } +#endif + public override IAsyncResult BeginGetRequestStream(AsyncCallback callback, object state) + { + // [DC]: Mock POSTs never write to the request + return BeginGetResponse(callback, state); + + /* var result = new WebQueryAsyncResult + { + AsyncState = new MemoryStream(), + IsCompleted = true, + CompletedSynchronously = true + };*/ + } + + public override IAsyncResult BeginGetResponse(AsyncCallback callback, object state) + { + var response = CreateResponse(); + var result = new WebQueryAsyncResult + { + AsyncState = response, + IsCompleted = true, + CompletedSynchronously = true + }; + + return result; + } + + public override Stream EndGetRequestStream(IAsyncResult asyncResult) + { + var result = (WebQueryAsyncResult) asyncResult; + return result.AsyncState as MemoryStream; + } + + public override WebResponse EndGetResponse(IAsyncResult asyncResult) + { + var result = (WebQueryAsyncResult)asyncResult; + return result.AsyncState as WebResponse; + } + + public override System.Net.WebHeaderCollection Headers { get; set; } + public override string Method { get; set; } + + public override Uri RequestUri + { + get { return _requestUri; } + } + +#if !SILVERLIGHT + public override int Timeout + { + get + { + return int.MaxValue; + } + } +#endif + + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Web/Mocks/MockHttpWebResponse.cs b/trunk/hammock/src/net35/Hammock/Web/Mocks/MockHttpWebResponse.cs new file mode 100644 index 0000000..bd311b0 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Web/Mocks/MockHttpWebResponse.cs @@ -0,0 +1,79 @@ +using System; +using System.IO; +using System.Net; +using System.Text; +using Hammock.Extensions; + +namespace Hammock.Web.Mocks +{ +#if !SILVERLIGHT + [Serializable] +#endif + public class MockHttpWebResponse : WebResponse + { + private readonly Uri _requestUri; + private readonly string _contentType; + + public virtual string Content { get; protected internal set; } + public virtual HttpStatusCode StatusCode { get; protected internal set; } + public virtual string StatusDescription { get; protected internal set; } + + protected internal WebHeaderCollection MockHeaders { get; set; } + +#if !SILVERLIGHT + public override System.Net.WebHeaderCollection Headers + { + get + { + var headers = new System.Net.WebHeaderCollection(); + foreach(var key in MockHeaders.AllKeys) + { + headers.Add(key, MockHeaders[key].Value); + } + return headers; + } + } +#endif + + public override Stream GetResponseStream() + { + if(Content.IsNullOrBlank()) + { + return new MemoryStream(); + } + var bytes = Encoding.UTF8.GetBytes(Content); + var stream = new MemoryStream(bytes); + stream.Seek(0, SeekOrigin.Begin); + return stream; + } + + public override void Close() + { + + } + + public override long ContentLength + { + get { return Content != null ? Content.Length : 0; } + } + + public override string ContentType + { + get { return _contentType; } + } + + public override Uri ResponseUri + { + get { return _requestUri; } + } + + public MockHttpWebResponse(Uri requestUri, + string contentType) + { + _requestUri = requestUri; + _contentType = contentType; + + MockHeaders = new WebHeaderCollection(0); + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Web/Mocks/MockWebRequestFactory.cs b/trunk/hammock/src/net35/Hammock/Web/Mocks/MockWebRequestFactory.cs new file mode 100644 index 0000000..281b81b --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Web/Mocks/MockWebRequestFactory.cs @@ -0,0 +1,139 @@ +using System; +using System.Net; +using System.Linq; +using Hammock.Extensions; + +#if !SILVERLIGHT && !ClientProfiles && !MonoTouch +#if !NETCF +using System.Web; +#endif +using System.Collections.Specialized; +#endif + +#if Silverlight +using Hammock.Silverlight.Compat; +#endif + +#if ClientProfiles || MonoTouch +using System.Collections.Specialized; +using System.Compat.Web; +#endif + +#if SL3 || SL4 +using System.Windows.Browser; +#endif + +namespace Hammock.Web.Mocks +{ + internal class MockWebRequestFactory : IWebRequestCreate + { + public const string MockScheme = "mockScheme"; + public const string MockStatusCode = "mockStatusCode"; + public const string MockStatusDescription = "mockStatusDescription"; + public const string MockContent = "mockContent"; + public const string MockContentType = "mockContentType"; + public const string MockHeaderNames = "mockHeaderNames"; + public const string MockHeaderValues = "mockHeaderValues"; + public const string MockHttpMethod = "mockHttpMethod"; + + public WebRequest Create(Uri uri) + { +#if !SILVERLIGHT && !MonoTouch && !NETCF + var query = HttpUtility.ParseQueryString(uri.Query); +#else + var query = uri.Query.ParseQueryString(); +#endif + var scheme = query[MockScheme]; + var statusCode = query[MockStatusCode]; + var statusDescription = query[MockStatusDescription]; + var content = query[MockContent]; + var contentType = query[MockContentType]; + var headerNames = query[MockHeaderNames]; + var headerValues = query[MockHeaderValues]; + + // Remove mocks parameters + var queryString = new NameValueCollection(); +#if !SILVERLIGHT && !MonoTouch && !NETCF + foreach(var key in query.AllKeys) +#else + foreach (var key in query.Keys) +#endif + { + if(key.EqualsAny( + MockScheme, + MockStatusCode, + MockStatusDescription, + MockContent, + MockContentType, + MockHeaderNames, + MockHeaderValues, + MockHttpMethod + )) + { + continue; + } + queryString.Add(key, query[key]); + } + + // [DC] Silverlight does not have uri.Authority + var uriQuery = queryString.ToQueryString(); + var authority = "{0}{1}".FormatWith( + uri.Host, + (uri.Scheme.EqualsIgnoreCase("http") && uri.Port != 80 || + uri.Scheme.EqualsIgnoreCase("https") && uri.Port != 443) + ? ":" + uri.Port + : ""); + + var built = "{0}://{1}{2}{3}".FormatWithInvariantCulture( + scheme, authority, uri.AbsolutePath, uriQuery + ); + + Uri mockUri; + var request = Uri.TryCreate( + built, UriKind.RelativeOrAbsolute, out mockUri + ) ? new MockHttpWebRequest(mockUri) + : new MockHttpWebRequest( + new Uri(uri.ToString().Replace( + "mock", scheme)) + ); + + int statusCodeValue; +#if !NETCF + int.TryParse(statusCode, out statusCodeValue); +#else + try + { + statusCodeValue = int.Parse(statusCode); + } + catch (Exception) + { + statusCodeValue = 0; + } +#endif + if (!statusCode.IsNullOrBlank()) request.ExpectStatusCode = (HttpStatusCode)statusCodeValue; + if (!statusDescription.IsNullOrBlank()) request.ExpectStatusDescription = statusDescription; + if (!content.IsNullOrBlank()) request.Content = content; + if (!contentType.IsNullOrBlank()) request.ContentType = contentType; + + if(!headerNames.IsNullOrBlank() && !headerValues.IsNullOrBlank()) + { + var headers = new NameValueCollection(); + var names = headerNames.Split(',').Where(n => !n.IsNullOrBlank()).ToArray(); + var values = headerValues.Split(',').Where(v => !v.IsNullOrBlank()).ToArray(); + if(names.Count() == values.Count()) + { + for(var i = 0; i < names.Count(); i++) + { + headers.Add(names[i], values[i]); + } + } + + foreach(var key in headers.AllKeys) + { + request.ExpectHeaders.Add(key, headers[key]); + } + } + return request; + } + } +} diff --git a/trunk/hammock/src/net35/Hammock/Web/Mocks/_Mocks.cd b/trunk/hammock/src/net35/Hammock/Web/Mocks/_Mocks.cd new file mode 100644 index 0000000..0fedbc9 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Web/Mocks/_Mocks.cd @@ -0,0 +1,42 @@ + + + + + + AAAAAAQAAAAAACAAAAAAAAAAAAAEAAAAAAAAAAAAAAA= + Web\Mocks\MockWebRequest.cs + + + + + + AAAAAAQAAgAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAA= + Web\Mocks\MockWebResponse.cs + + + + + + + + + + + + + + + + AAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Web\Mocks\IWebResponse.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Web\Mocks\IMockable.cs + + + + \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Web/Pair.cs b/trunk/hammock/src/net35/Hammock/Web/Pair.cs new file mode 100644 index 0000000..7f0a6fd --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Web/Pair.cs @@ -0,0 +1,8 @@ +namespace Hammock.Web +{ + public class Pair + { + public TFirst First { get; set; } + public TSecond Second { get; set; } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Web/PostOrPut.cs b/trunk/hammock/src/net35/Hammock/Web/PostOrPut.cs new file mode 100644 index 0000000..8903c48 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Web/PostOrPut.cs @@ -0,0 +1,8 @@ +namespace Hammock.Web +{ + public enum PostOrPut + { + Post, + Put + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Web/Triplet.cs b/trunk/hammock/src/net35/Hammock/Web/Triplet.cs new file mode 100644 index 0000000..177f48f --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Web/Triplet.cs @@ -0,0 +1,9 @@ +namespace Hammock.Web +{ + internal class Triplet + { + public TFirst First { get; set; } + public TSecond Second { get; set; } + public TThird Third { get; set; } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Web/WebCallback.cs b/trunk/hammock/src/net35/Hammock/Web/WebCallback.cs new file mode 100644 index 0000000..05c4ba3 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Web/WebCallback.cs @@ -0,0 +1,4 @@ +namespace Hammock.Web +{ + public delegate void WebCallback(object sender, WebQueryResponseEventArgs e); +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Web/WebEntity.cs b/trunk/hammock/src/net35/Hammock/Web/WebEntity.cs new file mode 100644 index 0000000..9791fb0 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Web/WebEntity.cs @@ -0,0 +1,11 @@ +using System.Text; + +namespace Hammock.Web +{ + public class WebEntity + { + public string Content { get; set; } + public string ContentType { get; set; } + public Encoding ContentEncoding { get; set; } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Web/WebHeader.cs b/trunk/hammock/src/net35/Hammock/Web/WebHeader.cs new file mode 100644 index 0000000..1389190 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Web/WebHeader.cs @@ -0,0 +1,18 @@ +using System; +using System.Diagnostics; + +namespace Hammock.Web +{ +#if !Smartphone && !NETCF + [DebuggerDisplay("{Name}:{Value}")] +#endif +#if !Silverlight + [Serializable] +#endif + public class WebHeader : WebPair + { + public WebHeader(string name, string value) : base(name, value) + { + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Web/WebHeaderCollection.cs b/trunk/hammock/src/net35/Hammock/Web/WebHeaderCollection.cs new file mode 100644 index 0000000..125f1c5 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Web/WebHeaderCollection.cs @@ -0,0 +1,47 @@ +using System.Collections.Generic; +#if !SILVERLIGHT +using System.Collections.Specialized; +#else +using Hammock.Silverlight.Compat; +#endif +using System.Linq; + +namespace Hammock.Web +{ + public class WebHeaderCollection : WebPairCollection + { + public WebHeaderCollection(NameValueCollection collection) : base(collection) + { + } + + public WebHeaderCollection(IEnumerable parameters) : base(parameters) + { + } + + public WebHeaderCollection() + { + } + + public WebHeaderCollection(IDictionary collection) : base(collection) + { + } + + public WebHeaderCollection(int capacity) : base(capacity) + { + } + + public override WebPair this[string name] + { + // Headers can be non-unique + get { return this.First(p => p.Name.Equals(name)); } + } + + public IEnumerable AllKeys + { + get + { + return Names; + } + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Web/WebMethod.cs b/trunk/hammock/src/net35/Hammock/Web/WebMethod.cs new file mode 100644 index 0000000..d5d1119 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Web/WebMethod.cs @@ -0,0 +1,12 @@ +namespace Hammock.Web +{ + public enum WebMethod + { + Get, + Post, + Delete, + Put, + Head, + Options + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Web/WebPair.cs b/trunk/hammock/src/net35/Hammock/Web/WebPair.cs new file mode 100644 index 0000000..103245a --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Web/WebPair.cs @@ -0,0 +1,14 @@ +namespace Hammock.Web +{ + public class WebPair + { + public WebPair(string name, string value) + { + Name = name; + Value = value; + } + + public string Value { get; set; } + public string Name { get; private set; } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Web/WebPairCollection.cs b/trunk/hammock/src/net35/Hammock/Web/WebPairCollection.cs new file mode 100644 index 0000000..d24d792 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Web/WebPairCollection.cs @@ -0,0 +1,205 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; + +#if !SILVERLIGHT +using System.Collections.Specialized; +#else +using Hammock.Silverlight.Compat; +#endif + +namespace Hammock.Web +{ + public class WebPairCollection : IList + { + private IList _parameters; + + public virtual WebPair this[string name] + { + get + { + var parameters = this.Where(p => p.Name.Equals(name)); + + if(parameters.Count() == 0) + { + return null; + } + + if(parameters.Count() == 1) + { + return parameters.Single(); + } + + var value = string.Join(",", parameters.Select(p => p.Value).ToArray()); + return new WebPair(name, value); + } + } + + public virtual IEnumerable Names + { + get { return _parameters.Select(p => p.Name); } + } + + public virtual IEnumerable Values + { + get { return _parameters.Select(p => p.Value); } + } + + public WebPairCollection(IEnumerable parameters) + { + _parameters = new List(parameters); + } + + public WebPairCollection(NameValueCollection collection) : this() + { + AddCollection(collection); + } + + public virtual void AddRange(NameValueCollection collection) + { + AddCollection(collection); + } + + private void AddCollection(NameValueCollection collection) + { + var parameters = collection.AllKeys.Select(key => new WebPair(key, collection[key])); + foreach (var parameter in parameters) + { + _parameters.Add(parameter); + } + } + + public WebPairCollection(IDictionary collection) : this() + { + AddCollection(collection); + } + + public void AddCollection(IDictionary collection) + { + foreach (var parameter in collection.Keys.Select(key => new WebPair(key, collection[key]))) + { + _parameters.Add(parameter); + } + } + + public WebPairCollection() + { + _parameters = new List(0); + } + + public WebPairCollection(int capacity) + { + _parameters = new List(capacity); + } + + private void AddCollection(IEnumerable collection) + { + foreach (var pair in collection.Select(parameter => new WebPair(parameter.Name, parameter.Value))) + { + _parameters.Add(pair); + } + } + + public virtual void AddRange(WebPairCollection collection) + { + AddCollection(collection); + } + + public virtual void AddRange(IEnumerable collection) + { + AddCollection(collection); + } + + public virtual void Sort(Comparison comparison) + { + var sorted = new List(_parameters); + sorted.Sort(comparison); + _parameters = sorted; + } + + public virtual bool RemoveAll(IEnumerable parameters) + { + var array = parameters.ToArray(); + var success = array.Aggregate(true, (current, parameter) => current & _parameters.Remove(parameter)); + return success && array.Length > 0; + } + + public virtual void Add(string name, string value) + { + var pair = new WebPair(name, value); + _parameters.Add(pair); + } + + #region IList Members + + public virtual IEnumerator GetEnumerator() + { + return _parameters.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public virtual void Add(WebPair parameter) + { + + _parameters.Add(parameter); + } + + public virtual void Clear() + { + _parameters.Clear(); + } + + public virtual bool Contains(WebPair parameter) + { + return _parameters.Contains(parameter); + } + + public virtual void CopyTo(WebPair[] parameters, int arrayIndex) + { + _parameters.CopyTo(parameters, arrayIndex); + } + + public virtual bool Remove(WebPair parameter) + { + return _parameters.Remove(parameter); + } + + public virtual int Count + { + get { return _parameters.Count; } + } + + public virtual bool IsReadOnly + { + get { return _parameters.IsReadOnly; } + } + + public virtual int IndexOf(WebPair parameter) + { + return _parameters.IndexOf(parameter); + } + + public virtual void Insert(int index, WebPair parameter) + { + _parameters.Insert(index, parameter); + } + + public virtual void RemoveAt(int index) + { + _parameters.RemoveAt(index); + } + + public virtual WebPair this[int index] + { + get { return _parameters[index]; } + set { _parameters[index] = value; } + } + + #endregion + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Web/WebParameter.cs b/trunk/hammock/src/net35/Hammock/Web/WebParameter.cs new file mode 100644 index 0000000..d5f2143 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Web/WebParameter.cs @@ -0,0 +1,20 @@ +#if !Smartphone && !NETCF +using System.Diagnostics; +#endif +using System; +namespace Hammock.Web +{ +#if !Smartphone && !NETCF + [DebuggerDisplay("{Name}:{Value}")] +#endif +#if !SILVERLIGHT + [Serializable] +#endif + public class WebParameter : WebPair + { + public WebParameter(string name, string value) : base(name, value) + { + + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Web/WebParameterCollection.cs b/trunk/hammock/src/net35/Hammock/Web/WebParameterCollection.cs new file mode 100644 index 0000000..3918227 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Web/WebParameterCollection.cs @@ -0,0 +1,41 @@ +using System.Collections.Generic; +#if !SILVERLIGHT +using System.Collections.Specialized; +#else +using Hammock.Silverlight.Compat; +#endif + +namespace Hammock.Web +{ + public class WebParameterCollection : WebPairCollection + { + public WebParameterCollection(IEnumerable parameters) + : base(parameters) + { + + } + + public WebParameterCollection(NameValueCollection collection) : base(collection) + { + } + + public WebParameterCollection() + { + } + + public WebParameterCollection(int capacity) : base(capacity) + { + } + + public WebParameterCollection(IDictionary collection) : base(collection) + { + + } + + public override void Add(string name, string value) + { + var parameter = new WebParameter(name, value); + base.Add(parameter); + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Web/WebQuery.Async.cs b/trunk/hammock/src/net35/Hammock/Web/WebQuery.Async.cs new file mode 100644 index 0000000..cf52621 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Web/WebQuery.Async.cs @@ -0,0 +1,1366 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Globalization; +using System.IO; +using System.Net; +using System.Text; +using System.Threading; +using Hammock.Caching; +using Hammock.Extensions; +using Hammock.Web.Mocks; +#if SILVERLIGHT +using Hammock.Silverlight.Compat; +#endif +namespace Hammock.Web +{ + public partial class WebQuery + { + protected virtual WebQueryAsyncResult ExecuteGetOrDeleteAsync(GetDeleteHeadOptions method, string url, object userState) + { + WebResponse = null; + + var request = BuildGetDeleteHeadOptionsWebRequest(method, url); + var state = new Triplet + { + First = request, + Second = null, + Third = userState + }; + + var args = new WebQueryRequestEventArgs(url); + OnQueryRequest(args); + + var inner = request.BeginGetResponse(GetAsyncResponseCallback, state); + RegisterAbortTimer(request, inner); + var result = new WebQueryAsyncResult { InnerResult = inner }; + return result; + } + + private WebQueryAsyncResult ExecuteGetOrDeleteAsync(ICache cache, + string key, + string url, + WebRequest request, + object userState) + { + var fetch = cache.Get(key); + if (fetch != null) + { + var args = new WebQueryResponseEventArgs(fetch); + OnQueryResponse(args); + + var result = new WebQueryAsyncResult + { + CompletedSynchronously = true + }; + return result; + } + else + { + var state = new Triplet, object> + { + First = request, + Second = new Pair + { + First = cache, + Second = key + }, + Third = userState + }; + + var args = new WebQueryRequestEventArgs(url); + OnQueryRequest(args); + + var inner = request.BeginGetResponse(GetAsyncResponseCallback, state); + RegisterAbortTimer(request, inner); + var result = new WebQueryAsyncResult { InnerResult = inner }; + return result; + } + } + + private WebQueryAsyncResult ExecuteGetOrDeleteAsync(ICache cache, + string key, + string url, + DateTime absoluteExpiration, + WebRequest request, + object userState) + { + var fetch = cache.Get(key); + if (fetch != null) + { + var args = new WebQueryResponseEventArgs(fetch); + OnQueryResponse(args); + + var result = new WebQueryAsyncResult + { + CompletedSynchronously = true, + AsyncState = this + }; + return result; + } + else + { + var state = new Triplet>, object> + { + First = request, + Second = new Pair> + { + First = cache, + Second = new Pair + { + First = key, + Second = absoluteExpiration + } + }, + Third = userState + }; + + var args = new WebQueryRequestEventArgs(url); + OnQueryRequest(args); + + var inner = request.BeginGetResponse(GetAsyncResponseCallback, state); + RegisterAbortTimer(request, inner); + var result = new WebQueryAsyncResult { InnerResult = inner }; + return result; + } + } + + private WebQueryAsyncResult ExecuteGetOrDeleteAsync(ICache cache, + string key, + string url, + TimeSpan slidingExpiration, + WebRequest request, + object userState) + { + var fetch = cache.Get(key); + if (fetch != null) + { + var args = new WebQueryResponseEventArgs(fetch); + OnQueryResponse(args); + + var result = new WebQueryAsyncResult + { + CompletedSynchronously = true + }; + return result; + } + else + { + var state = new Triplet>, object> + { + First = request, + Second = new Pair> + { + First = cache, + Second = new Pair + { + First = key, + Second = slidingExpiration + } + }, + Third = userState + }; + + var args = new WebQueryRequestEventArgs(url); + OnQueryRequest(args); + + var inner = request.BeginGetResponse(GetAsyncResponseCallback, state); + RegisterAbortTimer(request, inner); + var result = new WebQueryAsyncResult { InnerResult = inner }; + return result; + } + } + + // [DC] This is necessary to inform the client handle that a POST has timed out + private readonly List _postHandles = new List(); + + protected virtual void RegisterAbortTimer(WebRequest request, IAsyncResult result) + { + if(request is MockHttpWebRequest) + { + return; + } + +#if !Smartphone && !WindowsPhone && !SL4 && !NETCF + // [DC] request.Timeout is ignored with async + var timeout = RequestTimeout != null ? + (int)RequestTimeout.Value.TotalMilliseconds + : 300000; // Default ReadWriteTimeout + + var isPost = result is WebQueryAsyncResult; + if (isPost) + { + _postHandles.Add((WebQueryAsyncResult)result); + } + var handle = isPost + ? ((WebQueryAsyncResult) result).InnerResult.AsyncWaitHandle + : result.AsyncWaitHandle; + + var state = new Pair + { + First = request, + Second = result + }; + + // Async operations ignore the WebRequest's Timeout property + ThreadPool.RegisterWaitForSingleObject(handle, + TimedOutCallback, + state, + timeout, + true /* executeOnlyOnce */); +#endif + } + + private void TimedOutCallback(object state, bool timedOut) + { + if (!timedOut) + { + return; + } + + var pair = state as Pair; + if (pair != null) + { + var request = pair.First; + var result = pair.Second; + + TimedOut = true; + request.Abort(); + + // [DC] LSP violation necessary for POST functionality; + // [DC] We did not get far enough along to prepare a response + if (result is WebQueryAsyncResult) + { + var response = new RestResponse + { + TimedOut = true, + StatusCode = 0 + }; +#if TRACE + // Just for cosmetic purposes + Trace.WriteLineIf(TraceEnabled, string.Concat("RESPONSE: ", response.StatusCode)); + Trace.WriteLineIf(TraceEnabled, "\r\n"); +#endif + foreach(var postHandle in _postHandles) + { + postHandle.AsyncState = response; + postHandle.Signal(); + } + _postHandles.Clear(); + } + } + } + + protected virtual WebQueryAsyncResult ExecuteGetOrDeleteAsync(GetDeleteHeadOptions method, + string url, + string prefixKey, + ICache cache, + object userState) + { + WebResponse = null; + + var request = BuildGetDeleteHeadOptionsWebRequest(method, url); + var key = CreateCacheKey(prefixKey, url); + + return ExecuteGetOrDeleteAsync(cache, key, url, request, userState); + } + + protected virtual WebQueryAsyncResult ExecuteGetOrDeleteAsync(GetDeleteHeadOptions method, + string url, + string prefixKey, + ICache cache, + DateTime absoluteExpiration, + object userState) + { + WebResponse = null; + + var request = BuildGetDeleteHeadOptionsWebRequest(method, url); + var key = CreateCacheKey(prefixKey, url); + + return ExecuteGetOrDeleteAsync(cache, key, url, absoluteExpiration, request, userState); + } + + protected virtual WebQueryAsyncResult ExecuteGetOrDeleteAsync(GetDeleteHeadOptions method, + string url, + string prefixKey, + ICache cache, + TimeSpan slidingExpiration, + object userState) + { + WebResponse = null; + + var request = BuildGetDeleteHeadOptionsWebRequest(method, url); + var key = CreateCacheKey(prefixKey, url); + + return ExecuteGetOrDeleteAsync(cache, key, url, slidingExpiration, request, userState); + } + + protected virtual void GetAsyncResponseCallback(IAsyncResult asyncResult) + { + object store; + var request = GetAsyncCacheStore(asyncResult, out store); + + try + { + var response = request.EndGetResponse(asyncResult); + using (response) + { +#if SILVERLIGHT + if (DecompressionMethods == Silverlight.Compat.DecompressionMethods.GZip || + DecompressionMethods == Silverlight.Compat.DecompressionMethods.Deflate || + DecompressionMethods == (Silverlight.Compat.DecompressionMethods.GZip | Silverlight.Compat.DecompressionMethods.Deflate) + ) + { + response = new GzipHttpWebResponse((HttpWebResponse)response); + } +#endif + WebResponse = response; + + ContentStream = response.GetResponseStream(); + + if (store != null) + { + // No expiration specified + if (store is Pair) + { + var cache = store as Pair; + cache.First.Insert(cache.Second, ContentStream); + } + + // Absolute expiration specified + if (store is Pair>) + { + var cache = store as Pair>; + cache.First.Insert(cache.Second.First, ContentStream, cache.Second.Second); + } + + // Sliding expiration specified + if (store is Pair>) + { + var cache = store as Pair>; + cache.First.Insert(cache.Second.First, ContentStream, cache.Second.Second); + } + } + + // Only send query when caching is complete + var args = new WebQueryResponseEventArgs(ContentStream); + OnQueryResponse(args); + } + } + catch (WebException ex) + { + HandleWebException(ex); + } + } + + private static WebRequest GetAsyncCacheStore(IAsyncResult asyncResult, out object store) + { + /* + var state = asyncResult.AsyncState as Triplet, object>; + if (state == null) + { + throw new ArgumentNullException("asyncResult", + "The asynchronous post failed to return its state"); + } + + var request = state.First; + if (request == null) + { + throw new ArgumentNullException("asyncResult", + "The asynchronous post failed to return a request"); + } + */ + + + WebRequest request; + + var noCache = asyncResult.AsyncState as Triplet; + if(noCache != null) + { + request = noCache.First; + store = noCache.Second; + } + else + { + var absoluteCache = asyncResult.AsyncState as Triplet>, object>; + if(absoluteCache != null) + { + request = absoluteCache.First; + store = absoluteCache.Second; + } + else + { + var slidingCache = asyncResult.AsyncState as Triplet>, object>; + if(slidingCache != null) + { + request = slidingCache.First; + store = slidingCache.Second; + } + else + { + throw new ArgumentOutOfRangeException( + "asyncResult", "Wrong cache signature found." + ); + } + } + } + return request; + } + + private bool _isStreaming; + private readonly byte[] _endStreamBytes = Encoding.UTF8.GetBytes("END STREAMING"); + + public virtual bool IsStreaming + { + get + { + lock(_sync) + { + return _isStreaming; + } + } + set + { + lock(_sync) + { + _isStreaming = value; + } + } + } + + public virtual bool TimedOut { get; set; } + + private void AsyncStreamCallback(IAsyncResult asyncResult) + { + var state = asyncResult.AsyncState as Pair>; + if (state == null) + { + // Unrecognized state signature + throw new ArgumentNullException("asyncResult", + "The asynchronous post failed to return its state"); + } + + var request = state.First; + var duration = state.Second.First; + var resultCount = state.Second.Second; + + WebResponse response = null; + Stream stream = null; + + try + { + using (response = request.EndGetResponse(asyncResult)) + { +#if SILVERLIGHT + if (DecompressionMethods == Silverlight.Compat.DecompressionMethods.GZip || + DecompressionMethods == Silverlight.Compat.DecompressionMethods.Deflate || + DecompressionMethods == (Silverlight.Compat.DecompressionMethods.GZip | Silverlight.Compat.DecompressionMethods.Deflate) + ) + { + response = new GzipHttpWebResponse((HttpWebResponse)response); + } +#endif + StreamImpl(out stream, request, response, duration, resultCount); + } + } + catch (WebException ex) + { + HandleWebException(ex); + } + finally + { + if (stream != null) + { + stream.Close(); + stream.Dispose(); + } + + WebResponse = response; + } + } + + public delegate void NewStreamMessage(Stream message); + public event NewStreamMessage NewStreamMessageEvent; + + private void StreamImpl(out Stream stream, + WebRequest request, WebResponse response, + TimeSpan duration, int resultCount) + { + + using (stream = response.GetResponseStream()) + { + if (stream == null) + { + return; + } + + NewStreamMessageEvent += WebQueryNewStreamMessageEvent; + + _isStreaming = true; + + var count = 0; + var results = new List(); + var start = DateTime.UtcNow; + var bufferString = string.Empty; + + while (stream.CanRead) + { + var data = new byte[4096]; + try + { + int read; + while ((read = stream.Read(data, 0, data.Length)) > 0) + { + var readString = Encoding.UTF8.GetString(data, 0, read); + bufferString = ProcessBuffer(bufferString + readString); + if (!_isStreaming) + { + // [DC] Streaming was cancelled out of band + EndStreaming(request); + return; + } + + if (readString.Equals(Environment.NewLine)) + { + // Keep-Alive + continue; + } + + if (readString.Equals("")) + { + // We're looking at a 401 or similar; construct error result? + EndStreaming(request); + return; + } + + results.Add(readString); + + count++; + if (count < resultCount) + { + // Result buffer + continue; + } + + var sb = new StringBuilder(); + foreach (var result in results) + { + sb.AppendLine(result); + } + + results.Clear(); + + count = 0; + + var now = DateTime.UtcNow; + + if (duration == new TimeSpan() || now.Subtract(start) < duration) + { + continue; + } + + // Time elapsed + EndStreaming(request); + return; + } + } + catch (Exception) + { + EndStreaming(request); + } + // Stream dried up + } + EndStreaming(request); + } + } + + private void WebQueryNewStreamMessageEvent(Stream message) + { + var args = new WebQueryResponseEventArgs(message); + OnQueryResponse(args); + } + + // TODO make part of StreamOptions + private const char StreamResultDelimiter = '\r'; + + private string ProcessBuffer(string bufferString) + { + var buffer = bufferString; + var position = buffer.IndexOf(StreamResultDelimiter); + + while (position >= 0) + { + string message = buffer.Substring(0, position).Replace(StreamResultDelimiter.ToString(),""); + var messageBytes = Encoding.UTF8.GetBytes(message); + + buffer = buffer.Length <= position + 1 ? + string.Empty : buffer.Substring(position + 1); + + if (message.Trim().Length > 1 && NewStreamMessageEvent != null) + { + NewStreamMessageEvent(new MemoryStream(messageBytes)); + } + + position = buffer.IndexOf(StreamResultDelimiter); + } + + return buffer; + } + + private void EndStreaming(WebRequest request) + { + _isStreaming = false; + + var stream = new MemoryStream(_endStreamBytes); + var args = new WebQueryResponseEventArgs(stream); + OnQueryResponse(args); + request.Abort(); + } + + protected virtual void PostAsyncStreamRequestCallback(IAsyncResult asyncResult) + { + var state = asyncResult.AsyncState as Triplet>; + if (state == null) + { + // Unrecognized state signature + throw new ArgumentNullException("asyncResult", + "The asynchronous post failed to return its state"); + } + + var request = state.First; + var content = state.Second; + + using (var stream = request.EndGetRequestStream(asyncResult)) + { + if (content != null) + { + stream.Write(content, 0, content.Length); + stream.Flush(); + } + stream.Close(); + + request.BeginGetResponse(AsyncStreamCallback, + new Pair> + { + First = request, + Second = state.Third + } + ); + } + } + + protected virtual void PostAsyncRequestCallback(IAsyncResult asyncResult) + { + WebRequest request; + byte[] post; + object userState; + Triplet store; + + var state = asyncResult.AsyncState as Triplet; + if (state == null) + { + // No expiration specified + if (asyncResult is Triplet, object>) + { + var cacheScheme = (Triplet, object>)asyncResult; + var cache = cacheScheme.Second.Second; + + var url = cacheScheme.First.RequestUri.ToString(); + var prefix = cacheScheme.Second.Third; + var key = CreateCacheKey(prefix, url); + + var fetch = cache.Get(key); + if (fetch != null) + { + var args = new WebQueryResponseEventArgs(fetch); + OnQueryResponse(args); + return; + } + + request = cacheScheme.First; + post = cacheScheme.Second.First; + userState = cacheScheme.Third; + store = new Triplet + { + First = cache, + Second = null, + Third = prefix + }; + } + else + // Absolute expiration specified + if (asyncResult is Triplet>, object>) + { + var cacheScheme = (Triplet>, object>)asyncResult; + var url = cacheScheme.First.RequestUri.ToString(); + var cache = cacheScheme.Second.Second.First; + var expiry = cacheScheme.Second.Second.Second; + + var prefix = cacheScheme.Second.Second.Third; + var key = CreateCacheKey(prefix, url); + + var fetch = cache.Get(key); + if (fetch != null) + { + var args = new WebQueryResponseEventArgs(fetch); + OnQueryResponse(args); + return; + } + + request = cacheScheme.First; + post = cacheScheme.Second.First; + userState = cacheScheme.Third; + store = new Triplet + { + First = cache, + Second = expiry, + Third = prefix + }; + } + else + // Sliding expiration specified + if (asyncResult is Triplet>, object>) + { + var cacheScheme = (Triplet>, object>)asyncResult; + var url = cacheScheme.First.RequestUri.ToString(); + var cache = cacheScheme.Second.Second.First; + var expiry = cacheScheme.Second.Second.Second; + + var prefix = cacheScheme.Second.Second.Third; + var key = CreateCacheKey(prefix, url); + + var fetch = cache.Get(key); + if (fetch != null) + { + var args = new WebQueryResponseEventArgs(fetch); + OnQueryResponse(args); + return; + } + + request = cacheScheme.First; + post = cacheScheme.Second.First; + userState = cacheScheme.Third; + store = new Triplet + { + First = cache, + Second = expiry, + Third = prefix + }; + } + else + { + // Unrecognized state signature + throw new ArgumentNullException("asyncResult", + "The asynchronous post failed to return its state"); + } + } + else + { + request = state.First; + post = state.Second; + userState = state.Third; + store = null; + } + + // No cached response + using (var stream = request.EndGetRequestStream(asyncResult)) + { + WritePostContentToRequestStream(post, stream); + + var inner = request.BeginGetResponse(PostAsyncResponseCallback, + new Triplet, object> + { + First = request, + Second = store, + Third = userState + }); + + RegisterAbortTimer(request, new WebQueryAsyncResult { InnerResult = inner }); + } + } + + private void WritePostContentToRequestStream(byte[] post, Stream stream) + { + if (post != null) + { + stream.Write(post, 0, post.Length); + stream.Flush(); + } + stream.Close(); +#if TRACE + var encoding = Encoding ?? new UTF8Encoding(); + if (post != null) + { + Trace.WriteLineIf(TraceEnabled, encoding.GetString(post, 0, post.Length)); + } +#endif + } + + protected virtual void PostAsyncRequestCallbackMultiPart(IAsyncResult asyncResult) + { + WebRequest request; + string boundary; + IEnumerable parameters; + object userState; + Triplet store; + + var state = asyncResult.AsyncState as Triplet>, object>; + if (state == null) + { + // No expiration specified + if (asyncResult is Triplet>, ICache, string>, object>) + { + #region No Expiration + var cacheScheme = (Triplet>, ICache, string>, object>)asyncResult; + var cache = cacheScheme.Second.Second; + + var url = cacheScheme.First.RequestUri.ToString(); + var prefix = cacheScheme.Second.Third; + var key = CreateCacheKey(prefix, url); + + var fetch = cache.Get(key); + if (fetch != null) + { + var args = new WebQueryResponseEventArgs(fetch); + OnQueryResponse(args); + return; + } + + request = cacheScheme.First; + boundary = cacheScheme.Second.First.First; + parameters = cacheScheme.Second.First.Second; + userState = cacheScheme.Third; + store = new Triplet + { + First = cache, + Second = null, + Third = prefix + }; + #endregion + } + else + // Absolute expiration specified + if (asyncResult is Triplet>, Triplet>, object>) + { + #region Absolute Expiration + var cacheScheme = (Triplet>, Triplet>, object>)asyncResult; + var url = cacheScheme.First.RequestUri.ToString(); + var cache = cacheScheme.Second.Second.First; + var expiry = cacheScheme.Second.Second.Second; + + var prefix = cacheScheme.Second.Second.Third; + var key = CreateCacheKey(prefix, url); + + var fetch = cache.Get(key); + if (fetch != null) + { + var args = new WebQueryResponseEventArgs(fetch); + OnQueryResponse(args); + return; + } + + request = cacheScheme.First; + boundary = cacheScheme.Second.First.First; + parameters = cacheScheme.Second.First.Second; + userState = cacheScheme.Third; + store = new Triplet + { + First = cache, + Second = expiry, + Third = prefix + }; + #endregion + } + else + // Sliding expiration specified + if (asyncResult is Triplet>, Triplet>, object>) + { + #region Sliding Expiration + var cacheScheme = (Triplet>, Triplet>, object>)asyncResult; + var url = cacheScheme.First.RequestUri.ToString(); + var cache = cacheScheme.Second.Second.First; + var expiry = cacheScheme.Second.Second.Second; + + var prefix = cacheScheme.Second.Second.Third; + var key = CreateCacheKey(prefix, url); + + var fetch = cache.Get(key); + if (fetch != null) + { + var args = new WebQueryResponseEventArgs(fetch); + OnQueryResponse(args); + return; + } + + request = cacheScheme.First; + boundary = cacheScheme.Second.First.First; + parameters = cacheScheme.Second.First.Second; + userState = cacheScheme.Third; + store = new Triplet + { + First = cache, + Second = expiry, + Third = prefix + }; + #endregion + } + else + { + // Unrecognized state signature + throw new ArgumentNullException("asyncResult", + "The asynchronous post failed to return its state"); + } + } + else + { + request = state.First; + boundary = state.Second.First; + parameters = state.Second.Second; + userState = state.Third; + store = null; + } + +#if !Smartphone + var encoding = Encoding ?? Encoding.GetEncoding("ISO-8859-1"); +#else + var encoding = Encoding ?? Encoding.GetEncoding(1252); +#endif + var expected = WriteMultiPartImpl( + false /* write */, parameters, boundary, encoding, null + ); + + // No cached response + using (var requestStream = request.EndGetRequestStream(asyncResult)) + { + var actual = WriteMultiPartImpl( + true /* write */, parameters, boundary, encoding, requestStream + ); + + Debug.Assert(expected == actual, string.Format("Expected {0} bytes but wrote {1}!", expected, actual)); + + var inner = request.BeginGetResponse(PostAsyncResponseCallback, + new Triplet, object> + { + First = request, + Second = store, + Third = userState + }); + + RegisterAbortTimer(request, new WebQueryAsyncResult { InnerResult = inner }); + } + } + + protected virtual void PostAsyncResponseCallback(IAsyncResult asyncResult) + { + WebRequest request; + Triplet, object> state; + try + { + state = asyncResult.AsyncState as Triplet, object>; + if (state == null) + { + throw new ArgumentNullException("asyncResult", "The asynchronous post failed to return its state"); + } + + request = state.First; + if (request == null) + { + throw new ArgumentNullException("asyncResult", "The asynchronous post failed to return a request"); + } + } + catch(Exception ex) + { + var args = new WebQueryResponseEventArgs(new MemoryStream(), ex); + OnQueryResponse(args); + return; + } + + try + { + // Avoid disposing until no longer needed to build results + var response = request.EndGetResponse(asyncResult); + +#if SILVERLIGHT + if (DecompressionMethods == Silverlight.Compat.DecompressionMethods.GZip || + DecompressionMethods == Silverlight.Compat.DecompressionMethods.Deflate || + DecompressionMethods == (Silverlight.Compat.DecompressionMethods.GZip | Silverlight.Compat.DecompressionMethods.Deflate) + ) + { + response = new GzipHttpWebResponse((HttpWebResponse)response); + } +#endif + WebResponse = response; + + ContentStream = response.GetResponseStream(); + if (state.Second != null) + { + var cache = state.Second.First; + var expiry = state.Second.Second; + var url = request.RequestUri.ToString(); + + var prefix = state.Second.Third; + var key = CreateCacheKey(prefix, url); + + if (expiry is DateTime) + { + // absolute + cache.Insert(key, ContentStream, (DateTime)expiry); + } + + if (expiry is TimeSpan) + { + // sliding + cache.Insert(key, ContentStream, (TimeSpan)expiry); + } + } + + var args = new WebQueryResponseEventArgs(ContentStream); + OnQueryResponse(args); + } + catch (WebException ex) + { + HandleWebException(ex); + } + } + + protected virtual WebQueryAsyncResult ExecutePostOrPutAsync(PostOrPut method, string url, object userState) + { + WebResponse = null; + + byte[] content; + var request = BuildPostOrPutWebRequest(method, url, out content); + + var state = new Triplet + { + First = request, + Second = content, + Third = userState + }; + + var args = new WebQueryRequestEventArgs(url); + OnQueryRequest(args); + + var inner = request.BeginGetRequestStream(PostAsyncRequestCallback, state); + var result = new WebQueryAsyncResult { InnerResult = inner }; + RegisterAbortTimer(request, result); + return result; + } + + protected virtual WebQueryAsyncResult ExecutePostOrPutAsync(PostOrPut method, + string url, + IEnumerable parameters, + object userState) + { + WebResponse = null; + + string boundary; + var request = BuildMultiPartFormRequest(method, url, parameters, out boundary); + + var state = new Triplet>, object> + { + First = request, + Second = new Pair> + { + First = boundary, + Second = parameters + }, + Third = userState + }; + var args = new WebQueryRequestEventArgs(url); + + OnQueryRequest(args); + + var inner = request.BeginGetRequestStream(PostAsyncRequestCallbackMultiPart, state); + var result = new WebQueryAsyncResult { InnerResult = inner }; + RegisterAbortTimer(request, result); + return result; + } + + protected virtual WebQueryAsyncResult ExecutePostOrPutAsync(PostOrPut method, + string url, + string prefixKey, + ICache cache, + object userState) + { + WebResponse = null; + + byte[] content; + var request = BuildPostOrPutWebRequest(method, url, out content); + + var state = new Triplet, object> + { + First = request, + Second = new Triplet + { + First = content, + Second = cache, + Third = prefixKey + }, + Third = userState + }; + + var args = new WebQueryRequestEventArgs(url); + OnQueryRequest(args); + + var inner = request.BeginGetRequestStream(PostAsyncRequestCallback, state); + var result = new WebQueryAsyncResult { InnerResult = inner }; + RegisterAbortTimer(request, result); + return result; + } + + protected virtual WebQueryAsyncResult ExecutePostOrPutAsync(PostOrPut method, + string url, + string prefixKey, + ICache cache, + DateTime absoluteExpiration, + object userState) + { + WebResponse = null; + + byte[] content; + var request = BuildPostOrPutWebRequest(method, url, out content); + + var state = new Triplet>, object> + { + First = request, + Second = new Pair> + { + First = content, + Second = new Triplet + { + First = cache, + Second = absoluteExpiration, + Third = prefixKey + } + }, + Third = userState + }; + + var args = new WebQueryRequestEventArgs(url); + OnQueryRequest(args); + + var inner = request.BeginGetRequestStream(PostAsyncRequestCallback, state); + var result = new WebQueryAsyncResult { InnerResult = inner }; + RegisterAbortTimer(request, result); + return result; + } + + protected virtual WebQueryAsyncResult ExecutePostOrPutAsync(PostOrPut method, + string url, + string prefixKey, + ICache cache, + TimeSpan slidingExpiration, + object userState) + { + WebResponse = null; + + byte[] content; + var request = BuildPostOrPutWebRequest(method, url, out content); + + var state = new Triplet>, object> + { + First = request, + Second = new Pair> + { + First = content, + Second = new Triplet + { + First = cache, + Second = slidingExpiration, + Third = prefixKey + } + }, + Third = userState + }; + + var args = new WebQueryRequestEventArgs(url); + OnQueryRequest(args); + + var inner = request.BeginGetRequestStream(PostAsyncRequestCallback, state); + var result = new WebQueryAsyncResult { InnerResult = inner }; + RegisterAbortTimer(request, result); + return result; + } + + public virtual WebQueryAsyncResult ExecuteStreamGetAsync(string url, + TimeSpan duration, + int resultCount) + { + WebResponse = null; + + var request = BuildGetDeleteHeadOptionsWebRequest(GetDeleteHeadOptions.Get, url); + var state = OnGetStreamQueryRequest(url, request, duration, resultCount); + +#if SILVERLIGHT + var httpRequest = request as HttpWebRequest; + if (httpRequest != null) + { + httpRequest.AllowReadStreamBuffering = false; + } +#endif + + var inner = request.BeginGetResponse(AsyncStreamCallback, state); + var result = new WebQueryAsyncResult { InnerResult = inner }; + return result; + } + + private Pair> OnGetStreamQueryRequest(string url, WebRequest request, TimeSpan duration, int resultCount) + { + var state = new Pair> + { + First = request, + Second = new Pair + { + First = duration, + Second = resultCount + } + }; + + var args = new WebQueryRequestEventArgs(url); + OnQueryRequest(args); + return state; + } + + private Triplet> OnPostStreamQueryRequest(string url, WebRequest request, byte[] content, TimeSpan duration, int resultCount) + { + var state = new Triplet> + { + First = request, + Second = content, + Third = new Pair + { + First = duration, + Second = resultCount + } + }; + + var args = new WebQueryRequestEventArgs(url); + OnQueryRequest(args); + return state; + } + + public virtual WebQueryAsyncResult ExecuteStreamPostAsync(string url, + TimeSpan duration, + int resultCount) + { + WebResponse = null; + + byte[] content; + var request = BuildPostOrPutWebRequest(PostOrPut.Post, url, out content); + var state = OnPostStreamQueryRequest(url, request, content, duration, resultCount); + +#if SILVERLIGHT + var httpRequest = request as HttpWebRequest; + if (httpRequest != null) + { + httpRequest.AllowReadStreamBuffering = false; + } +#endif + + var inner = request.BeginGetRequestStream(PostAsyncStreamRequestCallback, state); + var result = new WebQueryAsyncResult { InnerResult = inner }; + return result; + } + + private object ResponseAsHttpWebResponse(out string version, + out int statusCode, + out string statusDescription, + out string contentType, + out long contentLength, + out Uri responseUri, + out System.Net.WebHeaderCollection headers) + { + var httpWebResponse = WebResponse != null && + (WebResponse is HttpWebResponse) + ? (HttpWebResponse) WebResponse + : null; + + if(httpWebResponse == null) + { + version = null; + statusCode = 0; + statusDescription = null; + contentType = null; + contentLength = 0; + responseUri = null; + headers = null; + return null; + } + +#if !SILVERLIGHT + version = string.Concat("HTTP/", httpWebResponse.ProtocolVersion); +#else + version = "HTTP/1.1"; +#endif + statusCode = Convert.ToInt32(httpWebResponse.StatusCode, CultureInfo.InvariantCulture); + statusDescription = httpWebResponse.StatusDescription; + contentType = httpWebResponse.ContentType; + contentLength = httpWebResponse.ContentLength; + responseUri = httpWebResponse.ResponseUri; + headers = httpWebResponse.Headers; + return httpWebResponse; + } + + private object ResponseAsMockHttpWebResponse(out int statusCode, + out string statusDescription, + out string contentType, + out long contentLength, + out Uri responseUri, + out System.Net.WebHeaderCollection headers) + { + var httpWebResponse = WebResponse != null && WebResponse is MockHttpWebResponse + ? (MockHttpWebResponse)WebResponse + : null; + + if (httpWebResponse == null) + { + statusCode = 0; + statusDescription = null; + contentType = null; + contentLength = 0; + responseUri = null; + headers = null; + return null; + } + + statusCode = Convert.ToInt32(httpWebResponse.StatusCode, CultureInfo.InvariantCulture); + statusDescription = httpWebResponse.StatusDescription; + contentType = httpWebResponse.ContentType; + contentLength = httpWebResponse.ContentLength; + responseUri = httpWebResponse.ResponseUri; + headers = httpWebResponse.Headers; + return httpWebResponse; + } + + private void CastWebResponse(out string version, + out int statusCode, + out string statusDescription, + out System.Net.WebHeaderCollection headers, + out string contentType, + out long contentLength, + out Uri responseUri) + { + var response = ResponseAsHttpWebResponse( + out version, out statusCode, out statusDescription, + out contentType, out contentLength, + out responseUri, out headers + ); + if (response != null) + { + return; + } + + response = ResponseAsMockHttpWebResponse( + out statusCode, out statusDescription, + out contentType, out contentLength, + out responseUri, out headers + ); + + // [DC]: Caching would result in a null response + if(response == null) + { + headers = new System.Net.WebHeaderCollection(); + } + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Web/WebQuery.cs b/trunk/hammock/src/net35/Hammock/Web/WebQuery.cs new file mode 100644 index 0000000..c1e4943 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Web/WebQuery.cs @@ -0,0 +1,1819 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Net; +using System.Reflection; +using System.Text; +using Hammock.Attributes.Specialized; +using Hammock.Caching; +using Hammock.Extensions; +using Hammock.Validation; +using Hammock.Web.Mocks; + +#if SILVERLIGHT +using Hammock.Silverlight.Compat; +using System.IO.IsolatedStorage; +#endif + +#if SILVERLIGHT && !WindowsPhone +using System.Windows.Browser; +using System.Net.Browser; +#endif + +namespace Hammock.Web +{ + public abstract partial class WebQuery: IDisposable + { + private const string AcceptEncodingHeader = "Accept-Encoding"; + private static readonly object _sync = new object(); + private readonly WebHeaderCollection _restrictedHeaders = new WebHeaderCollection(0); + + public virtual Encoding Encoding { get; protected internal set; } + public virtual IWebQueryInfo Info { get; protected set; } + public virtual string UserAgent { get; protected internal set; } + public virtual WebHeaderCollection Headers { get; protected set; } + public virtual WebParameterCollection Parameters { get; protected set; } + public virtual WebParameterCollection Cookies { get; protected set; } + + private WebEntity _entity; + protected internal virtual WebEntity Entity + { + get + { + return _entity; + } + set + { + _entity = value; + HasEntity = _entity != null; + } + } + + public virtual WebMethod Method { get; set; } + public virtual string Proxy { get; set; } + public virtual string AuthorizationHeader { get; internal set; } + public DecompressionMethods? DecompressionMethods { get; set; } + public virtual TimeSpan? RequestTimeout { get; set; } + public virtual WebQueryResult Result { get; internal set; } + public virtual object UserState { get; internal set; } + +#if SILVERLIGHT + public virtual bool HasElevatedPermissions { get; set; } + + // [DC]: Headers to use when access isn't direct + public virtual string SilverlightUserAgentHeader { get; set; } + public virtual string SilverlightAcceptEncodingHeader { get; set; } +#endif + +#if !Silverlight + public virtual ServicePoint ServicePoint { get; set; } + public virtual bool KeepAlive { get; set; } + public virtual bool FollowRedirects { get; internal set; } +#endif + + private WebResponse _webResponse; + public virtual WebResponse WebResponse + { + get + { + lock (_sync) + { + return _webResponse; + } + } + set + { + lock (_sync) + { + _webResponse = value; + } + } + } + + protected virtual Stream ContentStream { get; set; } + public virtual bool HasEntity { get; set; } + public virtual byte[] PostContent { get; set; } + +#if SL3 || SL4 + static WebQuery() + { + // [DC]: Opt-in to the networking stack so we can get headers for proxies + WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp); + WebRequest.RegisterPrefix("https://", WebRequestCreator.ClientHttp); + } +#endif + + protected WebQuery(bool enableTrace) : this(null, enableTrace) + { + + } + + protected WebQuery(IWebQueryInfo info, bool enableTrace) + { + TraceEnabled = enableTrace; + SetQueryMeta(info); + InitializeResult(); + } + + protected bool TraceEnabled { get; private set; } + + private void SetQueryMeta(IWebQueryInfo info) + { + Cookies = new WebParameterCollection(0); + + if(info == null) + { + Headers = new WebHeaderCollection(0); + Parameters = new WebParameterCollection(0); + return; + } + + Info = info; + IEnumerable properties; + IDictionary transforms; + + ParseTransforms(out properties, out transforms); + Headers = ParseInfoHeaders(properties, transforms); + Parameters = ParseInfoParameters(properties, transforms); + ParseUserAgent(properties); + ParseWebEntity(properties); + } + + private void ParseTransforms(out IEnumerable properties, + out IDictionary transforms) + { + properties = Info.GetType().GetProperties(); + transforms = new Dictionary(0); + Info.ParseValidationAttributes(properties, transforms); + } + + private void InitializeResult() + { + Result = new WebQueryResult(); + QueryRequest += (s, e) => SetRequestResults(e); + QueryResponse += (s, e) => SetResponseResults(e); + } + + private void SetResponseResults(WebQueryResponseEventArgs e) + { + Result.ContentStream = e.Response; + Result.ResponseDate = DateTime.UtcNow; + Result.RequestHttpMethod = Method.ToUpper(); + Result.IsMock = WebResponse is MockHttpWebResponse; + Result.TimedOut = TimedOut; + + string version; + int statusCode; + string statusDescription; + System.Net.WebHeaderCollection headers; + string contentType; + long contentLength; + Uri responseUri; + CastWebResponse( + out version, out statusCode, out statusDescription, out headers, + out contentType, out contentLength, out responseUri + ); + +#if !MonoTouch + TraceResponse( + responseUri, version, headers, statusCode, statusDescription + ); +#endif + + Result.WebResponse = WebResponse; + Result.ResponseHttpStatusCode = statusCode; + Result.ResponseHttpStatusDescription = statusDescription; + Result.ResponseType = contentType; + Result.ResponseLength = contentLength; + Result.ResponseUri = responseUri; + Result.Exception = e.Exception; + } + +#if !MonoTouch + [Conditional("TRACE")] + private void TraceResponse(Uri uri, string version, System.Net.WebHeaderCollection headers, int statusCode, string statusDescription) + { + if(!TraceEnabled) + { + return; + } + + Trace.WriteLine( + String.Concat("\r\n--RESPONSE:", " ", uri) + ); + Trace.WriteLine( + String.Concat(version, " ", statusCode, " ", statusDescription) + ); + foreach (var trace in headers.AllKeys.Select( + key => String.Concat(key, ": ", headers[key]))) + { + Trace.WriteLine(trace); + } + } +#endif + + private void SetRequestResults(WebQueryRequestEventArgs e) + { + Result.RequestDate = DateTime.UtcNow; + Result.RequestUri = new Uri(e.Request); +#if !SILVERLIGHT + Result.RequestKeptAlive = KeepAlive; +#endif + } + +#if !SILVERLIGHT + protected virtual void SetWebProxy(WebRequest request) + { +#if !Smartphone && !NETCF + var proxyUriBuilder = new UriBuilder(Proxy); + request.Proxy = new WebProxy(proxyUriBuilder.Host, + proxyUriBuilder.Port); + + if (!proxyUriBuilder.UserName.IsNullOrBlank()) + { + request.Headers["Proxy-Authorization"] = WebExtensions.ToBasicAuthorizationHeader(proxyUriBuilder.UserName, + proxyUriBuilder.Password); + } +#else + var uri = new Uri(Proxy); + request.Proxy = new WebProxy(uri.Host, uri.Port); + var userParts = uri.UserInfo.Split(new[] { ':' }).Where(ui => !ui.IsNullOrBlank()).ToArray(); + if (userParts.Length == 2) + { + request.Proxy.Credentials = new NetworkCredential(userParts[0], userParts[1]); + } +#endif + } +#endif + + protected virtual WebRequest BuildPostOrPutWebRequest(PostOrPut method, string url, out byte[] content) + { + return !HasEntity + ? BuildPostOrPutFormWebRequest(method, url, out content) + : BuildPostOrPutEntityWebRequest(method, url, out content); + } + + protected virtual Func BeforeBuildPostOrPutFormWebRequest() + { + return url => AppendParameters(url).Replace(url + "?", ""); + } + + protected virtual WebRequest BuildPostOrPutFormWebRequest(PostOrPut method, string url, out byte[] content) + { + var post = BeforeBuildPostOrPutFormWebRequest().Invoke(url); + + var request = WebRequest.Create(url); + + AuthenticateRequest(request); + + SetMethod(method.ToString(), request); + + // It should be possible to override the content type in the case of AddPostContent + var hasContentType = Headers.AllKeys.Where( + key => key.Equals("Content-Type", StringComparison.InvariantCultureIgnoreCase) + ).Count() > 0; + + if(!hasContentType) + { + request.ContentType = "application/x-www-form-urlencoded"; + } + + HandleRequestMeta(request); + +#if !MonoTouch + TraceRequest(request); +#endif + content = BuildPostOrPutContent(request, post); + +#if !SILVERLIGHT + request.ContentLength = content.Length; +#endif + return request; + } + + protected virtual byte[] BuildPostOrPutContent(WebRequest request, string post) + { + var encoding = Encoding ?? Encoding.UTF8; + + var content = PostContent ?? encoding.GetBytes(post); + +#if TRACE + Trace.WriteLineIf(TraceEnabled, string.Concat("\r\n", content)); +#endif + return content; + } + + protected virtual Func BeforeBuildPostOrPutEntityWebRequest() + { + return AppendParameters; + } + + protected virtual WebRequest BuildPostOrPutEntityWebRequest(PostOrPut method, string url, out byte[] content) + { + url = BeforeBuildPostOrPutEntityWebRequest().Invoke(url); + + var request = WebRequest.Create(url); + + SetMethod(method.ToString(), request); + + AuthenticateRequest(request); + + HandleRequestMeta(request); + +#if !MonoTouch + TraceRequest(request); +#endif + + if (Entity != null) + { + var entity = Entity.Content; + + var encoding = Entity.ContentEncoding ?? Encoding ?? Encoding.UTF8; + + content = encoding.GetBytes(entity); + + request.ContentType = Entity.ContentType; +#if TRACE + Trace.WriteLineIf(TraceEnabled, string.Concat("\r\n", entity)); +#endif + +#if !SILVERLIGHT + // [DC]: This is set by Silverlight + request.ContentLength = content.Length; +#endif + } + else + { + using(var ms = new MemoryStream()) + { + content = ms.ToArray(); + } + } + + return request; + } + + protected virtual Func BeforeBuildGetDeleteHeadOptionsWebRequest() + { + return AppendParameters; + } + + protected virtual WebRequest BuildGetDeleteHeadOptionsWebRequest(GetDeleteHeadOptions method, string url) + { + url = BeforeBuildGetDeleteHeadOptionsWebRequest().Invoke(url); + + var request = WebRequest.Create(url); + + SetMethod(method.ToString(), request); + + AuthenticateRequest(request); + + HandleRequestMeta(request); + +#if !MonoTouch + TraceRequest(request); +#endif + return request; + } + + private void SetMethod(string method, WebRequest request) + { + request.Method = method.ToUpper(); + } + + private void HandleRequestMeta(WebRequest request) + { + // [DC] LSP violation necessary for "pure" mocks + if (request is HttpWebRequest) + { + SetRequestMeta((HttpWebRequest)request); + } + else + { + AppendHeaders(request); + SetUserAgent(request); + } + } + + protected virtual void SetUserAgent(WebRequest request) + { + if (!UserAgent.IsNullOrBlank()) + { +#if SILVERLIGHT && !WindowsPhone + // [DC] User-Agent is still restricted in elevated mode + request.Headers[SilverlightUserAgentHeader ?? "X-User-Agent"] = UserAgent; +#else + if(request is HttpWebRequest) + { + ((HttpWebRequest) request).UserAgent = UserAgent; + } + else + { + request.Headers["User-Agent"] = UserAgent; + } +#endif + } + } + + protected virtual void SetRequestMeta(HttpWebRequest request) + { + AppendHeaders(request); + AppendCookies(request); + +#if !SILVERLIGHT + if (ServicePoint != null) + { +#if !Smartphone && !NETCF + request.ServicePoint.ConnectionLeaseTimeout = ServicePoint.ConnectionLeaseTimeout; + request.ServicePoint.ReceiveBufferSize = ServicePoint.ReceiveBufferSize; + request.ServicePoint.UseNagleAlgorithm = ServicePoint.UseNagleAlgorithm; + request.ServicePoint.BindIPEndPointDelegate = ServicePoint.BindIPEndPointDelegate; +#endif + request.ServicePoint.ConnectionLimit = ServicePoint.ConnectionLimit; + request.ServicePoint.Expect100Continue = ServicePoint.Expect100Continue; + request.ServicePoint.MaxIdleTime = ServicePoint.MaxIdleTime; + } +#endif + +#if !SILVERLIGHT + if (!Proxy.IsNullOrBlank()) + { + SetWebProxy(request); + } + request.AllowAutoRedirect = FollowRedirects; +#endif + + SetUserAgent(request); + + if (DecompressionMethods.HasValue) + { + var decompressionMethods = DecompressionMethods.Value; + +#if !SILVERLIGHT && !WindowsPhone + request.AutomaticDecompression = decompressionMethods; +#else + +#if !WindowsPhone + if (HasElevatedPermissions) + { +#endif + switch (decompressionMethods) + { + case Silverlight.Compat.DecompressionMethods.GZip: + request.Headers[SilverlightAcceptEncodingHeader ?? "X-Accept-Encoding"] = "gzip"; + break; + case Silverlight.Compat.DecompressionMethods.Deflate: + request.Headers[SilverlightAcceptEncodingHeader ?? "X-Accept-Encoding"] = "deflate"; + break; + case Silverlight.Compat.DecompressionMethods.GZip | Silverlight.Compat.DecompressionMethods.Deflate: + request.Headers[SilverlightAcceptEncodingHeader ?? "X-Accept-Encoding"] = "gzip,deflate"; + break; + } + +#if !WindowsPhone + } + else + { + switch (decompressionMethods) + { + case Silverlight.Compat.DecompressionMethods.GZip: + request.Headers[SilverlightAcceptEncodingHeader ?? "X-Accept-Encoding"] = "gzip"; + break; + case Silverlight.Compat.DecompressionMethods.Deflate: + request.Headers[SilverlightAcceptEncodingHeader ?? "X-Accept-Encoding"] = "deflate"; + break; + case Silverlight.Compat.DecompressionMethods.GZip | Silverlight.Compat.DecompressionMethods.Deflate: + request.Headers[SilverlightAcceptEncodingHeader ?? "X-Accept-Encoding"] = "gzip,deflate"; + break; + } + } +#endif + +#endif + } +#if !SILVERLIGHT + if (RequestTimeout.HasValue) + { + // [DC] Need to synchronize these as Timeout is ignored in async requests + request.Timeout = (int)RequestTimeout.Value.TotalMilliseconds; + request.ReadWriteTimeout = (int)RequestTimeout.Value.TotalMilliseconds; + } + + if (KeepAlive) + { + request.KeepAlive = true; + } +#endif + } + + private void AppendCookies(HttpWebRequest request) + { +#if !NETCF + request.CookieContainer = new CookieContainer(); + + foreach(var cookie in Cookies.OfType()) + { + var value = new Cookie(cookie.Name, cookie.Value); + if(cookie.Domain != null) + { + request.CookieContainer.Add(cookie.Domain, value); + } +#if !SILVERLIGHT + else + { + request.CookieContainer.Add(value); + } +#endif + } +#endif + } + + protected virtual void AppendHeaders(WebRequest request) + { + if (!(request is HttpWebRequest) && + !(request is MockHttpWebRequest)) + { + return; + } + + // [DC]: Combine all duplicate headers into CSV + var headers = new Dictionary(0); + foreach(var header in Headers) + { + string value; + if(headers.ContainsKey(header.Name)) + { + value = String.Concat(headers[header.Name], ",", header.Value); + headers.Remove(header.Name); + } + else + { + value = header.Value; + } + + headers.Add(header.Name, value); + } + + foreach (var header in headers) + { + if (_restrictedHeaderActions.ContainsKey(header.Key)) + { + if(request is HttpWebRequest) + { +#if SILVERLIGHT + if(header.Key.EqualsIgnoreCase("User-Agent")) + { + // [DC]: User-Agent is still restricted in elevated mode + request.Headers[SilverlightUserAgentHeader ?? "X-User-Agent"] = UserAgent; + continue; + } +#endif + _restrictedHeaderActions[header.Key].Invoke((HttpWebRequest) request, header.Value); + _restrictedHeaders.Add(header.Key, header.Value); + } + if(request is MockHttpWebRequest) + { + AddHeader(header, request); + } + } + else + { + AddHeader(header, request); + } + } + } + +#if !MonoTouch + [Conditional("TRACE")] + private void TraceHeaders(WebRequest request) + { + if (!TraceEnabled) + { + return; + } + + var restricted = _restrictedHeaders.AllKeys.Select(key => String.Concat(key, ": ", request.Headers[key])); + var remaining = request.Headers.AllKeys.Except(_restrictedHeaders.AllKeys).Select(key => String.Concat(key, ": ", request.Headers[key])); + var all = restricted.ToList(); + all.AddRange(remaining); + all.Sort(); + + foreach (var trace in all) + { + Trace.WriteLine(trace); + } + } +#endif + + private static void AddHeader(KeyValuePair header, WebRequest request) + { +#if !SILVERLIGHT + request.Headers.Add(header.Key, header.Value); +#else + request.Headers[header.Key] = header.Value; +#endif + } + +#if !SILVERLIGHT + private readonly IDictionary> _restrictedHeaderActions + = new Dictionary>(StringComparer.OrdinalIgnoreCase) + { + {"Accept", (r, v) => r.Accept = v}, + {"Connection", (r, v) => r.Connection = v}, + {"Content-Length", (r, v) => r.ContentLength = Convert.ToInt64(v)}, + {"Content-Type", (r, v) => r.ContentType = v}, + {"Expect", (r, v) => r.Expect = v}, + {"Date", (r, v) => { /* Set by system */ }}, + {"Host", (r, v) => { /* Set by system */ }}, + {"If-Modified-Since", (r, v) => r.IfModifiedSince = Convert.ToDateTime(v)}, + {"Range", (r, v) => { throw new NotSupportedException( /* r.AddRange() */); }}, + {"Referer", (r, v) => r.Referer = v}, + {"Transfer-Encoding", (r, v) => { r.TransferEncoding = v; r.SendChunked = true; }}, + {"User-Agent", (r, v) => r.UserAgent = v } + }; +#else + private readonly IDictionary> _restrictedHeaderActions + = new Dictionary>(StringComparer.OrdinalIgnoreCase) { + { "Accept", (r, v) => r.Accept = v }, + { "Connection", (r, v) => { /* Set by Silverlight */ }}, + { "Content-Length", (r, v) => { /* Set by Silverlight */ }}, + { "Content-Type", (r, v) => r.ContentType = v }, + { "Expect", (r, v) => { /* Set by Silverlight */ }}, + { "Date", (r, v) => { /* Set by Silverlight */ }}, + { "Host", (r, v) => { /* Set by Silverlight */ }}, + { "If-Modified-Since", (r, v) => { /* Not supported */ }}, + { "Range", (r, v) => { /* Not supported */ }}, + { "Referer", (r, v) => { /* Not supported */ }}, + { "Transfer-Encoding", (r, v) => { /* Not supported */ }}, + { "User-Agent", (r, v) => { /* Not supported here */ }} + }; +#endif + + protected virtual string AppendParameters(string url) + { + var count = 0; + + var parameters = Parameters.Where( + parameter => !(parameter is HttpPostParameter) || Method == WebMethod.Post).Where( + parameter => !string.IsNullOrEmpty(parameter.Name) && !string.IsNullOrEmpty(parameter.Value) + ); + + foreach (var parameter in parameters) + { + // GET parameters in URL + url = url.Then(count > 0 || url.Contains("?") ? "&" : "?"); + url = url.Then("{0}={1}".FormatWith(parameter.Name, parameter.Value.UrlEncode())); + count++; + } + + return url; + } + + // [DC] Headers don't need to be unique, this should change + protected virtual WebHeaderCollection ParseInfoHeaders(IEnumerable properties, + IDictionary transforms) + { + var headers = new Dictionary(); + + Info.ParseNamedAttributes(properties, transforms, headers); + + var collection = new WebHeaderCollection(); + headers.ForEach(p => collection.Add(new WebHeader(p.Key, p.Value))); + + return collection; + } + + protected virtual WebParameterCollection ParseInfoParameters(IEnumerable properties, + IDictionary transforms) + { + var parameters = new Dictionary(); + + Info.ParseNamedAttributes(properties, transforms, parameters); + + var collection = new WebParameterCollection(); + parameters.ForEach(p => collection.Add(new WebParameter(p.Key, p.Value))); + + return collection; + } + + protected virtual WebParameterCollection ParseInfoParameters() + { + IEnumerable properties; + IDictionary transforms; + ParseTransforms(out properties, out transforms); + return ParseInfoParameters(properties, transforms); + } + + private void ParseUserAgent(IEnumerable properties) + { + var count = 0; + foreach (var property in properties) + { + var attributes = property.GetCustomAttributes(true); + count += attributes.Count(); + if (count > 1) + { + throw new ArgumentException("Cannot declare more than one user agent per query"); + } + + if (count < 1) + { + continue; + } + + if (!UserAgent.IsNullOrBlank()) + { + continue; + } + + var value = property.GetValue(Info, null); + UserAgent = value != null ? value.ToString() : null; + } + } + + private void ParseWebEntity(IEnumerable properties) + { + if (Entity != null) + { + // Already set by client or request + return; + } + + var count = 0; + foreach (var property in properties) + { + var attributes = property.GetCustomAttributes(true); + count += attributes.Count(); + if (count > 1) + { + throw new ValidationException("Cannot declare more than one entity per query"); + } + + if (count < 1) + { + continue; + } + + if (Entity != null) + { + // Already set in this pass + continue; + } + + var value = property.GetValue(Info, null); + + var content = value != null ? value.ToString() : null; + var contentEncoding = attributes.Single().ContentEncoding; + var contentType = attributes.Single().ContentType; + + Entity = new WebEntity + { + Content = content, + ContentEncoding = contentEncoding, + ContentType = contentType + }; + } + } + + protected void HandleWebException(WebException exception) + { + if (!(exception.Response is HttpWebResponse)) + { + return; + } + + var response = exception.Response; +#if SILVERLIGHT + if (DecompressionMethods == Silverlight.Compat.DecompressionMethods.GZip || + DecompressionMethods == Silverlight.Compat.DecompressionMethods.Deflate || + DecompressionMethods == (Silverlight.Compat.DecompressionMethods.GZip | Silverlight.Compat.DecompressionMethods.Deflate) + ) + { + response = new GzipHttpWebResponse((HttpWebResponse)response); + } +#endif + WebResponse = response; + var stream = WebResponse.GetResponseStream(); + + if (stream == null) + { + return; + } + + var args = new WebQueryResponseEventArgs(stream, exception); + OnQueryResponse(args); + } + + protected abstract void SetAuthorizationHeader(WebRequest request, string header); + + protected abstract void AuthenticateRequest(WebRequest request); + + public abstract string GetAuthorizationContent(); + + private static string CreateCacheKey(string prefix, string url) + { + return !prefix.IsNullOrBlank() ? "{0}_{1}".FormatWith(prefix, url) : url; + } + + protected virtual void ExecuteWithCache(ICache cache, + string url, + string key, + Action cacheScheme) + { + var fetch = cache.Get(CreateCacheKey(key, url)); + if (fetch != null) + { + // [DC]: In order to build results, an event must still raise + var responseArgs = new WebQueryResponseEventArgs(fetch); + OnQueryResponse(responseArgs); + } + else + { + cacheScheme.Invoke(cache, url); + } + } + + protected virtual void ExecuteWithCacheAndAbsoluteExpiration(ICache cache, + string url, + string key, + DateTime expiry, + Action cacheScheme) + { + var fetch = cache.Get(CreateCacheKey(key, url)); + if (fetch != null) + { + // [DC]: In order to build results, an event must still raise + var responseArgs = new WebQueryResponseEventArgs(fetch); + OnQueryResponse(responseArgs); + } + else + { + cacheScheme.Invoke(cache, url, expiry); + } + } + + protected virtual void ExecuteWithCacheAndSlidingExpiration(ICache cache, + string url, + string key, + TimeSpan expiry, + Action cacheScheme) + { + var fetch = cache.Get(CreateCacheKey(key, url)); + if (fetch != null) + { + // [DC]: In order to build results, an event must still raise + var responseArgs = new WebQueryResponseEventArgs(fetch); + OnQueryResponse(responseArgs); + } + else + { + cacheScheme.Invoke(cache, url, expiry); + } + } + +#if !SILVERLIGHT + protected virtual void ExecuteGetDeleteHeadOptions(GetDeleteHeadOptions method, string url, string key, ICache cache, out WebException exception) + { + WebException ex = null; + ExecuteWithCache(cache, url, key, (c, u) => ExecuteGetDeleteHeadOptions(method, cache, url, key, out ex)); + exception = ex; + } + + protected virtual void ExecuteGetDeleteHeadOptions(GetDeleteHeadOptions method, + string url, + string key, + ICache cache, + DateTime absoluteExpiration, + out WebException exception) + { + WebException ex = null; + ExecuteWithCacheAndAbsoluteExpiration(cache, url, key, absoluteExpiration, + (c, u, e) => + ExecuteGetDeleteHeadOptions(method, cache, url, key, absoluteExpiration, out ex)); + exception = ex; + } + + protected virtual void ExecuteGetDeleteHeadOptions(GetDeleteHeadOptions method, + string url, + string key, + ICache cache, + TimeSpan slidingExpiration, + out WebException exception) + { + WebException ex = null; + ExecuteWithCacheAndSlidingExpiration(cache, url, key, slidingExpiration, + (c, u, e) => + ExecuteGetDeleteHeadOptions(method, cache, url, key, slidingExpiration, out ex)); + exception = ex; + } + + private void ExecuteGetDeleteHeadOptions(GetDeleteHeadOptions method, + ICache cache, + string url, + string key, + out WebException exception) + { + ExecuteGetDeleteHeadOptions(method, url, out exception); + if (exception == null) + { + cache.Insert(CreateCacheKey(key, url), ContentStream); + } + } + + private void ExecuteGetDeleteHeadOptions(GetDeleteHeadOptions method, + ICache cache, + string url, + string key, + DateTime absoluteExpiration, + out WebException exception) + { + ExecuteGetDeleteHeadOptions(method, url, out exception); + if (exception == null) + { + cache.Insert(CreateCacheKey(key, url), ContentStream, absoluteExpiration); + } + } + + private void ExecuteGetDeleteHeadOptions(GetDeleteHeadOptions method, ICache cache, string url, string key, + TimeSpan slidingExpiration, out WebException exception) + { + ExecuteGetDeleteHeadOptions(method, url, out exception); + if (exception == null) + { + cache.Insert(CreateCacheKey(key, url), ContentStream, slidingExpiration); + } + } +#endif + + public virtual event EventHandler QueryRequest; + public virtual void OnQueryRequest(WebQueryRequestEventArgs args) + { + var handler = QueryRequest; + if (handler != null) + { + handler(this, args); + } + } + + public virtual event EventHandler QueryResponse; + public virtual void OnQueryResponse(WebQueryResponseEventArgs args) + { + var handler = QueryResponse; + if (handler != null) + { + handler(this, args); + } + } + + internal virtual event EventHandler PostProgress; + internal virtual void OnPostProgress(PostProgressEventArgs args) + { + var handler = PostProgress; + if (handler != null) + { + handler(this, args); + } + } +#if !SILVERLIGHT + protected virtual void ExecuteGetDeleteHeadOptions(GetDeleteHeadOptions method, string url, out WebException exception) + { + WebResponse = null; + var request = BuildGetDeleteHeadOptionsWebRequest(method, url); + + var requestArgs = new WebQueryRequestEventArgs(url); + OnQueryRequest(requestArgs); + + ExecuteGetDeleteHeadOptions(request, out exception); + } + + private void ExecuteGetDeleteHeadOptions(WebRequest request, out WebException exception) + { + try + { + // [DC] Avoid disposing until no longer needed to build results + var response = request.GetResponse(); + WebResponse = response; + + if (response != null) + { + ContentStream = response.GetResponseStream(); + if (ContentStream != null) + { + var args = new WebQueryResponseEventArgs(ContentStream); + OnQueryResponse(args); + } + } + + exception = null; + } + catch (WebException ex) + { + exception = ex; + HandleWebException(ex); + } + } + +#endif + protected virtual WebRequest BuildMultiPartFormRequest(PostOrPut method, string url, IEnumerable parameters, out string boundary) + { + url = AppendParameters(url); + + boundary = Guid.NewGuid().ToString(); + var request = WebRequest.Create(url); + AuthenticateRequest(request); + + request.ContentType = string.Format("multipart/form-data; boundary={0}", boundary); + request.Method = method == PostOrPut.Post ? "POST" : "PUT"; + + HandleRequestMeta(request); + +#if !MonoTouch + TraceRequest(request); +#endif + + return request; + } + +#if !MonoTouch + [Conditional("TRACE")] + protected void TraceRequest(WebRequest request) + { + if (!TraceEnabled) + { + return; + } + + var version = request is HttpWebRequest ? +#if SILVERLIGHT + "HTTP/v1.1" : +#else + string.Concat("HTTP/", ((HttpWebRequest)request).ProtocolVersion) : +#endif + "HTTP/v1.1"; + + Trace.WriteLine( + String.Concat("--REQUEST: ", request.RequestUri.Scheme, "://", request.RequestUri.Host) + ); + var pathAndQuery = String.Concat( + request.RequestUri.AbsolutePath, string.IsNullOrEmpty(request.RequestUri.Query) + ? "" + : string.Concat(request.RequestUri.Query) + ); + Trace.WriteLine( + String.Concat(request.Method, " ", pathAndQuery, " ", version + )); + + TraceHeaders(request); + } +#endif + +#if !SILVERLIGHT + protected virtual void ExecutePostOrPut(PostOrPut method, string url, out WebException exception) + { + WebResponse = null; + exception = null; + byte[] post; + var request = BuildPostOrPutWebRequest(method, url, out post); + + var requestArgs = new WebQueryRequestEventArgs(url); + OnQueryRequest(requestArgs); + + try + { + using (var stream = request.GetRequestStream()) + { + stream.Write(post, 0, post.Length); + stream.Close(); + +#if TRACE + var encoding = Encoding ?? new UTF8Encoding(); +#if NETCF + Trace.WriteLineIf(TraceEnabled, encoding.GetString(post, 0, post.Length)); +#else + Trace.WriteLineIf(TraceEnabled, encoding.GetString(post)); +#endif +#endif + + // [DC] Avoid disposing until no longer needed to build results + var response = request.GetResponse(); + WebResponse = response; + + if (response != null) + { + ContentStream = response.GetResponseStream(); + if (ContentStream != null) + { + var args = new WebQueryResponseEventArgs(ContentStream); + OnQueryResponse(args); + } + } + } + } + catch (WebException ex) + { + exception = ex; + HandleWebException(ex); + } + } + + protected virtual void ExecutePostOrPut(PostOrPut method, + string url, + IEnumerable parameters, + out WebException exception) + { + WebResponse = null; + + string boundary; + var request = BuildMultiPartFormRequest(method, url, parameters, out boundary); + +#if !Smartphone + var encoding = Encoding ?? Encoding.GetEncoding("ISO-8859-1"); +#else + var encoding = Encoding ?? Encoding.GetEncoding(1252); +#endif + var expected = WriteMultiPartImpl( + false /* write */, parameters, boundary, encoding, null + ); + + request.ContentLength = expected; + + try + { + using (var requestStream = request.GetRequestStream()) + { +#if DEBUG + var actual = WriteMultiPartImpl( + true /* write */, parameters, boundary, encoding, requestStream + ); + + Debug.Assert(expected == actual, string.Format("Expected {0} bytes but wrote {1}!", expected, actual)); +#else + WriteMultiPartImpl( + true /* write */, parameters, boundary, encoding, requestStream + ); +#endif + + // [DC] Avoid disposing until no longer needed to build results + var response = request.GetResponse(); + WebResponse = response; + + if (response != null) + { + ContentStream = response.GetResponseStream(); + if (ContentStream != null) + { + var args = new WebQueryResponseEventArgs(ContentStream); + OnQueryResponse(args); + } + } + + exception = null; + } + } + catch (WebException ex) + { + exception = ex; + HandleWebException(ex); + } + } +#endif + + private static int Write(bool write, Encoding encoding, Stream requestStream, string input) + { + var dataBytes = encoding.GetBytes(input); + if(write) + { + requestStream.Write(dataBytes, 0, dataBytes.Length); + } + return dataBytes.Length; + } + + private static int WriteLine(bool write, Encoding encoding, Stream requestStream, string input) + { + var sb = new StringBuilder(); + sb.AppendLine(input); + + var dataBytes = encoding.GetBytes(sb.ToString()); + if (write) + { + requestStream.Write(dataBytes, 0, dataBytes.Length); + } + return dataBytes.Length; + } + + private long WriteMultiPartImpl(bool write, IEnumerable parameters, string boundary, Encoding encoding, Stream requestStream) + { + Stream fs = null; + var header = string.Format("--{0}", boundary); + var footer = string.Format("--{0}--", boundary); + long written = 0; + + foreach (var parameter in parameters) + { + written += WriteLine(write, encoding, requestStream, header); +#if TRACE + if(write) + { + Trace.WriteLineIf(TraceEnabled, header); + } +#endif + switch (parameter.Type) + { + case HttpPostParameterType.File: + { + var disposition = parameter.ContentDisposition ?? "form-data"; + var fileMask = "Content-Disposition: " + disposition + "; name=\"{0}\"; filename=\"{1}\""; + var fileHeader = fileMask.FormatWith(parameter.Name, parameter.FileName); + var fileLine = "Content-Type: {0}".FormatWith(parameter.ContentType.ToLower()); + + written += WriteLine(write, encoding, requestStream, fileHeader); + written += WriteLine(write, encoding, requestStream, fileLine); + written += WriteLine(write, encoding, requestStream, ""); +#if TRACE + if (write) + { + Trace.WriteLineIf(TraceEnabled, fileHeader); + Trace.WriteLineIf(TraceEnabled, fileLine); + Trace.WriteLineIf(TraceEnabled, ""); + Trace.WriteLineIf(TraceEnabled, "[FILE DATA]"); + } +#endif + +#if !SILVERLIGHT + fs = parameter.FileStream ?? new FileStream(parameter.FilePath, FileMode.Open, FileAccess.Read); +#else + if (parameter.FileStream == null) + { + var store = IsolatedStorageFile.GetUserStoreForApplication(); + var stream = store.OpenFile(parameter.FilePath, FileMode.Open, FileAccess.Read); + parameter.FileStream = stream; + } + + fs = parameter.FileStream; // <-- WP7 requires a stream +#endif + { + if(!write) + { + written += fs.Length; + } + else + { + var fileWritten = default(long); + using (var br = new BinaryReader(fs)) + { + while (fileWritten < fs.Length) + { + var buffer = br.ReadBytes(8192); + requestStream.Write(buffer, 0, buffer.Length); + written += buffer.Length; + fileWritten += buffer.Length; + + var args = new PostProgressEventArgs + { + FileName = parameter.FileName, + BytesWritten = fileWritten, + TotalBytes = fs.Length + }; + OnPostProgress(args); + } + } + } + } + written += WriteLine(write, encoding, requestStream, ""); + break; + } + case HttpPostParameterType.Field: + { + var fieldLine = "Content-Disposition: form-data; name=\"{0}\"".FormatWith(parameter.Name); + + written += WriteLine(write, encoding, requestStream, fieldLine); + written += WriteLine(write, encoding, requestStream, ""); + written += WriteLine(write, encoding, requestStream, parameter.Value); +#if TRACE + if(write) + { + Trace.WriteLineIf(TraceEnabled, fieldLine); + Trace.WriteLineIf(TraceEnabled, ""); + Trace.WriteLineIf(TraceEnabled, parameter.Value); + } +#endif + break; + } + } + } + + written += Write(write, encoding, requestStream, footer); +#if TRACE + if(write) + { + Trace.WriteLineIf(TraceEnabled, footer); + } +#endif + if(write) + { + requestStream.Flush(); + requestStream.Close(); + if (fs != null) + { + fs.Dispose(); + } + } + + return written; + } + +#if !SILVERLIGHT + public virtual void Request(string url, out WebException exception) + { + switch (Method) + { + case WebMethod.Get: + ExecuteGetDeleteHeadOptions(GetDeleteHeadOptions.Get, url, out exception); + break; + case WebMethod.Put: + ExecutePostOrPut(PostOrPut.Put, url, out exception); + break; + case WebMethod.Post: + ExecutePostOrPut(PostOrPut.Post, url, out exception); + break; + case WebMethod.Delete: + ExecuteGetDeleteHeadOptions(GetDeleteHeadOptions.Delete, url, out exception); + break; + case WebMethod.Head: + ExecuteGetDeleteHeadOptions(GetDeleteHeadOptions.Head, url, out exception); + break; + case WebMethod.Options: + ExecuteGetDeleteHeadOptions(GetDeleteHeadOptions.Options, url, out exception); + break; + default: + throw new NotSupportedException("Unsupported web method"); + } + } + + public virtual void Request(string url, string key, ICache cache, out WebException exception) + { + switch (Method) + { + case WebMethod.Get: + ExecuteGetDeleteHeadOptions(GetDeleteHeadOptions.Get, url, key, cache, out exception); + break; + case WebMethod.Put: + ExecutePostOrPut(PostOrPut.Put, url, key, cache, out exception); + break; + case WebMethod.Post: + ExecutePostOrPut(PostOrPut.Post, url, key, cache, out exception); + break; + case WebMethod.Delete: + ExecuteGetDeleteHeadOptions(GetDeleteHeadOptions.Delete, url, key, cache, out exception); + break; + case WebMethod.Head: + ExecuteGetDeleteHeadOptions(GetDeleteHeadOptions.Head, url, key, cache, out exception); + break; + case WebMethod.Options: + ExecuteGetDeleteHeadOptions(GetDeleteHeadOptions.Options, url, key, cache, out exception); + break; + default: + throw new NotSupportedException("Unsupported web method"); + } + } + + public virtual void Request(string url, string key, ICache cache, DateTime absoluteExpiration, out WebException exception) + { + switch (Method) + { + case WebMethod.Get: + ExecuteGetDeleteHeadOptions(GetDeleteHeadOptions.Get, url, key, cache, absoluteExpiration, out exception); + break; + case WebMethod.Put: + ExecutePostOrPut(PostOrPut.Put, url, key, cache, absoluteExpiration, out exception); + break; + case WebMethod.Post: + ExecutePostOrPut(PostOrPut.Post, url, key, cache, absoluteExpiration, out exception); + break; + case WebMethod.Delete: + ExecuteGetDeleteHeadOptions(GetDeleteHeadOptions.Delete, url, key, cache, absoluteExpiration, out exception); + break; + case WebMethod.Head: + ExecuteGetDeleteHeadOptions(GetDeleteHeadOptions.Head, url, key, cache, absoluteExpiration, out exception); + break; + case WebMethod.Options: + ExecuteGetDeleteHeadOptions(GetDeleteHeadOptions.Options, url, key, cache, absoluteExpiration, out exception); + break; + default: + throw new NotSupportedException("Unsupported web method"); + } + } + + public virtual void Request(string url, string key, ICache cache, TimeSpan slidingExpiration, out WebException exception) + { + switch (Method) + { + case WebMethod.Get: + ExecuteGetDeleteHeadOptions(GetDeleteHeadOptions.Get, url, key, cache, slidingExpiration, out exception); + break; + case WebMethod.Put: + ExecutePostOrPut(PostOrPut.Put, url, key, cache, slidingExpiration, out exception); + break; + case WebMethod.Post: + ExecutePostOrPut(PostOrPut.Post, url, key, cache, slidingExpiration, out exception); + break; + case WebMethod.Delete: + ExecuteGetDeleteHeadOptions(GetDeleteHeadOptions.Delete, url, key, cache, slidingExpiration, out exception); + break; + case WebMethod.Head: + ExecuteGetDeleteHeadOptions(GetDeleteHeadOptions.Head, url, key, cache, slidingExpiration, out exception); + break; + case WebMethod.Options: + ExecuteGetDeleteHeadOptions(GetDeleteHeadOptions.Options, url, key, cache, slidingExpiration, out exception); + break; + default: + throw new NotSupportedException("Unsupported web method"); + } + } + + public virtual void Request(string url, IEnumerable parameters, out WebException exception) + { + switch (Method) + { + case WebMethod.Put: + ExecutePostOrPut(PostOrPut.Put, url, parameters, out exception); + break; + case WebMethod.Post: + ExecutePostOrPut(PostOrPut.Post, url, parameters, out exception); + break; + default: + throw new NotSupportedException("Only HTTP POSTs and PUTs can use multi-part parameters"); + } + } +#endif + +#if !WindowsPhone + public virtual WebQueryAsyncResult RequestAsync(string url, object userState) + { + UserState = userState; + + switch (Method) + { + case WebMethod.Get: + return ExecuteGetOrDeleteAsync(GetDeleteHeadOptions.Get, url, userState); + case WebMethod.Put: + return ExecutePostOrPutAsync(PostOrPut.Put, url, userState); + case WebMethod.Post: + return ExecutePostOrPutAsync(PostOrPut.Post, url, userState); + case WebMethod.Delete: + return ExecuteGetOrDeleteAsync(GetDeleteHeadOptions.Delete, url, userState); + case WebMethod.Head: + return ExecuteGetOrDeleteAsync(GetDeleteHeadOptions.Head, url, userState); + case WebMethod.Options: + return ExecuteGetOrDeleteAsync(GetDeleteHeadOptions.Options, url, userState); + default: + throw new NotSupportedException("Unknown web method"); + } + } +#else + public virtual void RequestAsync(string url, object userState) + { + UserState = userState; + + switch (Method) + { + case WebMethod.Get: + ExecuteGetOrDeleteAsync(GetDeleteHeadOptions.Get, url, userState); + break; + case WebMethod.Put: + ExecutePostOrPutAsync(PostOrPut.Put, url, userState); + break; + case WebMethod.Post: + ExecutePostOrPutAsync(PostOrPut.Post, url, userState); + break; + case WebMethod.Delete: + ExecuteGetOrDeleteAsync(GetDeleteHeadOptions.Delete, url, userState); + break; + case WebMethod.Head: + ExecuteGetOrDeleteAsync(GetDeleteHeadOptions.Head, url, userState); + break; + case WebMethod.Options: + ExecuteGetOrDeleteAsync(GetDeleteHeadOptions.Options, url, userState); + break; + default: + throw new NotSupportedException("Unknown web method"); + } + } +#endif + +#if !WindowsPhone + public virtual WebQueryAsyncResult RequestAsync(string url, + string key, + ICache cache, + object userState) + { + UserState = userState; + + switch (Method) + { + case WebMethod.Get: + return ExecuteGetOrDeleteAsync(GetDeleteHeadOptions.Get, url, key, cache, userState); + case WebMethod.Put: + return ExecutePostOrPutAsync(PostOrPut.Put, url, key, cache, userState); + case WebMethod.Post: + return ExecutePostOrPutAsync(PostOrPut.Post, url, key, cache, userState); + case WebMethod.Delete: + return ExecuteGetOrDeleteAsync(GetDeleteHeadOptions.Delete, url, key, cache, userState); + case WebMethod.Head: + return ExecuteGetOrDeleteAsync(GetDeleteHeadOptions.Head, url, key, cache, userState); + case WebMethod.Options: + return ExecuteGetOrDeleteAsync(GetDeleteHeadOptions.Options, url, key, cache, userState); + default: + throw new NotSupportedException( + "Unsupported web method: {0}".FormatWith(Method.ToUpper()) + ); + } + } +#else + public virtual void RequestAsync(string url, + string key, + ICache cache, + object userState) + { + UserState = userState; + + switch (Method) + { + case WebMethod.Get: + ExecuteGetOrDeleteAsync(GetDeleteHeadOptions.Get, url, key, cache, userState); + break; + case WebMethod.Put: + ExecutePostOrPutAsync(PostOrPut.Put, url, key, cache, userState); + break; + case WebMethod.Post: + ExecutePostOrPutAsync(PostOrPut.Post, url, key, cache, userState); + break; + case WebMethod.Delete: + ExecuteGetOrDeleteAsync(GetDeleteHeadOptions.Delete, url, key, cache, userState); + break; + case WebMethod.Head: + ExecuteGetOrDeleteAsync(GetDeleteHeadOptions.Head, url, key, cache, userState); + break; + case WebMethod.Options: + ExecuteGetOrDeleteAsync(GetDeleteHeadOptions.Options, url, key, cache, userState); + break; + default: + throw new NotSupportedException( + "Unsupported web method: {0}".FormatWith(Method.ToUpper()) + ); + } + } +#endif + +#if !WindowsPhone + public virtual WebQueryAsyncResult RequestAsync(string url, + string key, + ICache cache, + DateTime absoluteExpiration, + object userState) + { + UserState = userState; + + switch (Method) + { + case WebMethod.Get: + return ExecuteGetOrDeleteAsync(GetDeleteHeadOptions.Get, url, key, cache, absoluteExpiration, userState); + case WebMethod.Put: + return ExecutePostOrPutAsync(PostOrPut.Put, url, key, cache, absoluteExpiration, userState); + case WebMethod.Post: + return ExecutePostOrPutAsync(PostOrPut.Post, url, key, cache, absoluteExpiration, userState); + case WebMethod.Delete: + return ExecuteGetOrDeleteAsync(GetDeleteHeadOptions.Delete, url, key, cache, absoluteExpiration, userState); + default: + throw new NotSupportedException( + "Unsupported web method: {0}".FormatWith(Method.ToUpper()) + ); + } + } +#else + public virtual void RequestAsync(string url, + string key, + ICache cache, + DateTime absoluteExpiration, + object userState) + { + UserState = userState; + + switch (Method) + { + case WebMethod.Get: + ExecuteGetOrDeleteAsync(GetDeleteHeadOptions.Get, url, key, cache, absoluteExpiration, userState); + break; + case WebMethod.Put: + ExecutePostOrPutAsync(PostOrPut.Put, url, key, cache, absoluteExpiration, userState); + break; + case WebMethod.Post: + ExecutePostOrPutAsync(PostOrPut.Post, url, key, cache, absoluteExpiration, userState); + break; + case WebMethod.Delete: + ExecuteGetOrDeleteAsync(GetDeleteHeadOptions.Delete, url, key, cache, absoluteExpiration, userState); + break; + case WebMethod.Head: + ExecuteGetOrDeleteAsync(GetDeleteHeadOptions.Head, url, key, cache, absoluteExpiration, userState); + break; + case WebMethod.Options: + ExecuteGetOrDeleteAsync(GetDeleteHeadOptions.Options, url, key, cache, absoluteExpiration, userState); + break; + default: + throw new NotSupportedException( + "Unsupported web method: {0}".FormatWith(Method.ToUpper()) + ); + } + } +#endif + +#if !WindowsPhone + public virtual WebQueryAsyncResult RequestAsync(string url, + string key, + ICache cache, + TimeSpan slidingExpiration, + object userState) + { + UserState = userState; + + switch (Method) + { + case WebMethod.Get: + return ExecuteGetOrDeleteAsync(GetDeleteHeadOptions.Get, url, key, cache, slidingExpiration, userState); + case WebMethod.Post: + return ExecutePostOrPutAsync(PostOrPut.Post, url, key, cache, slidingExpiration, userState); + case WebMethod.Put: + return ExecutePostOrPutAsync(PostOrPut.Put, url, key, cache, slidingExpiration, userState); + case WebMethod.Delete: + return ExecuteGetOrDeleteAsync(GetDeleteHeadOptions.Delete, url, key, cache, slidingExpiration, userState); + case WebMethod.Head: + return ExecuteGetOrDeleteAsync(GetDeleteHeadOptions.Head, url, key, cache, slidingExpiration, userState); + case WebMethod.Options: + return ExecuteGetOrDeleteAsync(GetDeleteHeadOptions.Options, url, key, cache, slidingExpiration, userState); + default: + throw new NotSupportedException( + "Unsupported web method: {0}".FormatWith(Method.ToUpper()) + ); + } + } +#else + public virtual void RequestAsync(string url, + string key, + ICache cache, + TimeSpan slidingExpiration, + object userState) + { + UserState = userState; + + switch (Method) + { + case WebMethod.Get: + ExecuteGetOrDeleteAsync(GetDeleteHeadOptions.Get, url, key, cache, slidingExpiration, userState); + break; + case WebMethod.Post: + ExecutePostOrPutAsync(PostOrPut.Post, url, key, cache, slidingExpiration, userState); + break; + case WebMethod.Put: + ExecutePostOrPutAsync(PostOrPut.Put, url, key, cache, slidingExpiration, userState); + break; + case WebMethod.Delete: + ExecuteGetOrDeleteAsync(GetDeleteHeadOptions.Delete, url, key, cache, slidingExpiration, userState); + break; + case WebMethod.Head: + ExecuteGetOrDeleteAsync(GetDeleteHeadOptions.Head, url, key, cache, slidingExpiration, userState); + break; + case WebMethod.Options: + ExecuteGetOrDeleteAsync(GetDeleteHeadOptions.Options, url, key, cache, slidingExpiration, userState); + break; + default: + throw new NotSupportedException( + "Unsupported web method: {0}".FormatWith(Method.ToUpper()) + ); + } + } +#endif + +#if !WindowsPhone + public virtual WebQueryAsyncResult RequestAsync(string url, + IEnumerable parameters, + object userState) + { + UserState = userState; + + switch (Method) + { + case WebMethod.Put: + return ExecutePostOrPutAsync(PostOrPut.Put, url, parameters, userState); + case WebMethod.Post: + return ExecutePostOrPutAsync(PostOrPut.Post, url, parameters, userState); + default: + throw new NotSupportedException("Only HTTP POSTS can use multi-part forms"); + } + } +#else + public virtual void RequestAsync(string url, + IEnumerable parameters, + object userState) + { + UserState = userState; + + switch (Method) + { + case WebMethod.Put: + ExecutePostOrPutAsync(PostOrPut.Put, url, parameters, userState); + break; + case WebMethod.Post: + ExecutePostOrPutAsync(PostOrPut.Post, url, parameters, userState); + break; + default: + throw new NotSupportedException("Only HTTP POSTS can use multi-part forms"); + } + } +#endif + +#if !SILVERLIGHT + public virtual void ExecutePostOrPut(PostOrPut method, + string url, + string key, + ICache cache, + out WebException exception) + { + WebException ex = null; + ExecuteWithCache(cache, url, key, (c, u) => ExecutePostOrPut(method, cache, url, key, out ex)); + exception = ex; + } + + public virtual void ExecutePostOrPut(PostOrPut method, string url, string key, ICache cache, DateTime absoluteExpiration, out WebException exception) + { + WebException ex = null; + ExecuteWithCacheAndAbsoluteExpiration(cache, url, key, absoluteExpiration, + (c, u, e) => + ExecutePostOrPut(method, cache, url, key, absoluteExpiration, out ex)); + exception = ex; + } + + public virtual void ExecutePostOrPut(PostOrPut method, string url, string key, ICache cache, TimeSpan slidingExpiration, out WebException exception) + { + WebException ex = null; + ExecuteWithCacheAndSlidingExpiration(cache, url, key, slidingExpiration, + (c, u, e) => + ExecutePostOrPut(method, cache, url, key, slidingExpiration, out ex)); + exception = ex; + } + + private void ExecutePostOrPut(PostOrPut method, + ICache cache, + string url, + string key, + out WebException exception) + { + ExecutePostOrPut(method, url, out exception); + if (exception == null) + { + cache.Insert(CreateCacheKey(key, url), ContentStream); + } + } + + private void ExecutePostOrPut(PostOrPut method, + ICache cache, + string url, + string key, + DateTime absoluteExpiration, + out WebException exception) + { + ExecutePostOrPut(method, url, out exception); + if (exception == null) + { + cache.Insert(CreateCacheKey(key, url), ContentStream, absoluteExpiration); + } + } + + private void ExecutePostOrPut(PostOrPut method, ICache cache, string url, string key, + TimeSpan slidingExpiration, out WebException exception) + { + ExecutePostOrPut(method, url, out exception); + if (exception == null) + { + cache.Insert(CreateCacheKey(key, url), ContentStream, slidingExpiration); + } + } +#endif + + public void Dispose() + { + if(ContentStream != null) + { + ContentStream.Dispose(); + } + } + } + + internal class PostProgressEventArgs : EventArgs + { + public virtual string FileName { get; set; } + public virtual long BytesWritten { get; set; } + public virtual long TotalBytes { get; set; } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Web/WebQueryAsyncResult.cs b/trunk/hammock/src/net35/Hammock/Web/WebQueryAsyncResult.cs new file mode 100644 index 0000000..88b6b0e --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Web/WebQueryAsyncResult.cs @@ -0,0 +1,45 @@ +using System; +using System.Threading; + +namespace Hammock.Web +{ +#if !SILVERLIGHT + [Serializable] +#endif + public class WebQueryAsyncResult : IAsyncResult, IDisposable + { + public virtual bool IsCompleted { get; protected internal set; } + public virtual WaitHandle AsyncWaitHandle { get; protected internal set; } + public virtual object AsyncState { get; protected internal set; } + public virtual bool CompletedSynchronously { get; protected internal set; } + + public virtual IAsyncResult InnerResult { get; set; } + public virtual object Tag { get; set; } + +#if !SILVERLIGHT + [NonSerialized] +#endif + private AutoResetEvent _block; + + public WebQueryAsyncResult() + { + Initialize(); + } + + private void Initialize() + { + _block = new AutoResetEvent(false); + AsyncWaitHandle = _block; + } + + protected internal void Signal() + { + _block.Set(); + } + + public void Dispose() + { + + } + } +} diff --git a/trunk/hammock/src/net35/Hammock/Web/WebQueryRequestEventArgs.cs b/trunk/hammock/src/net35/Hammock/Web/WebQueryRequestEventArgs.cs new file mode 100644 index 0000000..a0748a6 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Web/WebQueryRequestEventArgs.cs @@ -0,0 +1,14 @@ +using System; + +namespace Hammock.Web +{ + public class WebQueryRequestEventArgs : EventArgs + { + public WebQueryRequestEventArgs(string request) + { + Request = request; + } + + public string Request { get; private set; } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Web/WebQueryResponseEventArgs.cs b/trunk/hammock/src/net35/Hammock/Web/WebQueryResponseEventArgs.cs new file mode 100644 index 0000000..9c36c6d --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Web/WebQueryResponseEventArgs.cs @@ -0,0 +1,23 @@ +using System; +using System.IO; +using System.Net; + +namespace Hammock.Web +{ + public class WebQueryResponseEventArgs : EventArgs + { + public WebQueryResponseEventArgs(Stream response) + { + Response = response; + } + + public WebQueryResponseEventArgs(Stream response, Exception exception) + { + Response = response; + Exception = exception; + } + + public Stream Response { get; set; } + public Exception Exception { get; set; } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Web/WebQueryResult.cs b/trunk/hammock/src/net35/Hammock/Web/WebQueryResult.cs new file mode 100644 index 0000000..1fa9c90 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Web/WebQueryResult.cs @@ -0,0 +1,35 @@ +using System; +using System.IO; +using System.Net; + +namespace Hammock.Web +{ +#if !SILVERLIGHT + [Serializable] +#endif + public class WebQueryResult + { + public virtual Stream ContentStream { get; set; } + + // Set by WebQuery + public virtual DateTime? RequestDate { get; set; } + public virtual Uri RequestUri { get; set; } + public virtual string RequestHttpMethod { get; set; } + public virtual bool RequestKeptAlive { get; set; } + + public virtual DateTime? ResponseDate { get; set; } + public virtual WebResponse WebResponse { get; set; } + public virtual string ResponseType { get; set; } + public virtual int ResponseHttpStatusCode { get; set; } + public virtual string ResponseHttpStatusDescription { get; set; } + public virtual long ResponseLength { get; set; } + public virtual Uri ResponseUri { get; set; } + public virtual bool IsMock { get; set; } + public virtual bool TimedOut { get; set; } + + // Set by RestClient + public virtual int TimesTried { get; set; } + public virtual Exception Exception { get; set; } + public virtual bool WasRateLimited { get; set; } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/Web/_Web.cd b/trunk/hammock/src/net35/Hammock/Web/_Web.cd new file mode 100644 index 0000000..0519ecb --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/Web/_Web.cd @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/_Hammock.cd b/trunk/hammock/src/net35/Hammock/_Hammock.cd new file mode 100644 index 0000000..62be618 --- /dev/null +++ b/trunk/hammock/src/net35/Hammock/_Hammock.cd @@ -0,0 +1,89 @@ + + + + + + + + IIkAKAAAAAgQJASKAQAgJJAgEDEhgkAMEIAAAhABEAA= + RestClient.cs + + + + + + + + + EABAgAAQAAAABQEAAAAAAAgAAAAoAAAAAJAAEAAAAAA= + RestRequest.cs + + + + + + AAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + RestResponse.cs + + + + + + AAAAAgAAAgQAAAAAAAAAAAAIAAAAABAAIAAQAAAAAAA= + RestResponse.cs + + + + + + AgAAABAkCAASASIAIAAgAAACCAFEAAIAAIgAAECACQA= + RestBase.cs + + + + + + AAAAAAAAAAAABAAAAAAAAAAAAAAAgAAAAAAAAAAAAAA= + IRestClient.cs + + + + \ No newline at end of file diff --git a/trunk/hammock/src/net35/Hammock/key.snk b/trunk/hammock/src/net35/Hammock/key.snk new file mode 100644 index 0000000000000000000000000000000000000000..ed404cd2b98794be9654705e03f356546393f826 GIT binary patch literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50097rX2mggb`z#srv=C&u+tgpp^FW^M**Pm zRQO}lqnc-@hC)KUY6}|R0cKtk;e9lD=(rwB+as(MXDb+_+G52=`KS_Isyvj`Lv>t; zyv1GdtazzRJ@~Ikqx~TP`bG%Rj^JO-mWk-SOVW*S-BQylz(lnRD^aU;42ZrfNBOmJ z+wu|=RKI)(tf=kVs&r1#mU7ia^YtqD_N!R!)Mb<04J(7v0b9Z5@VQ zC~!{_9Az!Ik)85nzpjNic*BZ(iJSs=#CEi_EvxKd8YjX}1j8+N2zqaVEoTb{xxA?( zVt8G+Ou_+Iw{;ElEmyRR47jL`4u7RS+VW6jwp=Ns#vPw_+s*hGzc&Int6mW=r8E?B z)qgXtnZUe(Tz`ffc*>2e+Br!=fqNzeZTr56NZVVsD%VFGDVkAw@hwc5(-@Qd=aTqV z(nhX4LsE@8Bh?ITr5k1jJOPeVdipW-lxZ`6M6%|*SG?o?o}O<)9!yjl130Go;PJF4 iINMdx^S=SKvcAYJIsZ6c08B+-O^Q|BqJw=PJm;e#=pQ8j literal 0 HcmV?d00001 diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/BZip2/Bzip2Tests.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/BZip2/Bzip2Tests.cs new file mode 100644 index 0000000..9717a44 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/BZip2/Bzip2Tests.cs @@ -0,0 +1,86 @@ +using System; +using System.IO; +using ICSharpCode.SharpZipLib.Silverlight.BZip2; +using NUnit.Framework; + +namespace ICSharpCode.SharpZipLib.Tests.BZip2 +{ + /// + /// This class contains test cases for Bzip2 compression + /// + [TestFixture] + public class BZip2Suite + { + /// + /// Basic compress/decompress test BZip2 + /// + [Test] + [Category("BZip2")] + public void BasicRoundTrip() + { + MemoryStream ms = new MemoryStream(); + BZip2OutputStream outStream = new BZip2OutputStream(ms); + + byte[] buf = new byte[10000]; + System.Random rnd = new Random(); + rnd.NextBytes(buf); + + outStream.Write(buf, 0, buf.Length); + outStream.Close(); + ms = new MemoryStream(ms.GetBuffer()); + ms.Seek(0, SeekOrigin.Begin); + + using (BZip2InputStream inStream = new BZip2InputStream(ms)) + { + byte[] buf2 = new byte[buf.Length]; + int pos = 0; + while (true) + { + int numRead = inStream.Read(buf2, pos, 4096); + if (numRead <= 0) + { + break; + } + pos += numRead; + } + + for (int i = 0; i < buf.Length; ++i) + { + Assert.AreEqual(buf2[i], buf[i]); + } + } + } + + /// + /// Check that creating an empty archive is handled ok + /// + [Test] + [Category("BZip2")] + public void CreateEmptyArchive() + { + MemoryStream ms = new MemoryStream(); + BZip2OutputStream outStream = new BZip2OutputStream(ms); + outStream.Close(); + ms = new MemoryStream(ms.GetBuffer()); + + ms.Seek(0, SeekOrigin.Begin); + + using (BZip2InputStream inStream = new BZip2InputStream(ms)) + { + byte[] buffer = new byte[1024]; + int pos = 0; + while (true) + { + int numRead = inStream.Read(buffer, 0, buffer.Length); + if (numRead <= 0) + { + break; + } + pos += numRead; + } + + Assert.AreEqual(pos, 0); + } + } + } +} diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/Base/InflaterDeflaterTests.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/Base/InflaterDeflaterTests.cs new file mode 100644 index 0000000..de57299 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/Base/InflaterDeflaterTests.cs @@ -0,0 +1,334 @@ +using System; +using System.IO; +using System.Text; +using System.Security; +using ICSharpCode.SharpZipLib.Silverlight.Zip.Compression; +using ICSharpCode.SharpZipLib.Silverlight.Zip.Compression.Streams; +using NUnit.Framework; + +using ICSharpCode.SharpZipLib.Tests.TestSupport; + +namespace ICSharpCode.SharpZipLib.Tests.Base +{ + /// + /// This class contains test cases for Deflater/Inflater streams. + /// + [TestFixture] + public class InflaterDeflaterTestSuite + { + void Inflate(MemoryStream ms, byte[] original, int level, bool zlib) + { + ms.Seek(0, SeekOrigin.Begin); + + Inflater inflater = new Inflater(!zlib); + InflaterInputStream inStream = new InflaterInputStream(ms, inflater); + byte[] buf2 = new byte[original.Length]; + + int currentIndex = 0; + int count = buf2.Length; + + try + { + while (true) + { + int numRead = inStream.Read(buf2, currentIndex, count); + if (numRead <= 0) + { + break; + } + currentIndex += numRead; + count -= numRead; + } + } + catch(Exception ex) + { + Console.WriteLine("Unexpected exception - '{0}'", ex.Message); + throw; + } + + if ( currentIndex != original.Length ) + { + Console.WriteLine("Original {0}, new {1}", original.Length, currentIndex); + Assert.Fail("Lengths different"); + } + + for (int i = 0; i < original.Length; ++i) + { + if ( buf2[i] != original[i] ) + { + string description = string.Format("Difference at {0} level {1} zlib {2} ", i, level, zlib); + if ( original.Length < 2048 ) + { + StringBuilder builder = new StringBuilder(description); + for (int d = 0; d < original.Length; ++d) + { + builder.AppendFormat("{0} ", original[d]); + } + + Assert.Fail(builder.ToString()); + } + else + { + Assert.Fail(description); + } + } + } + } + + MemoryStream Deflate(byte[] data, int level, bool zlib) + { + MemoryStream memoryStream = new MemoryStream(); + + Deflater deflater = new Deflater(level, !zlib); + using ( DeflaterOutputStream outStream = new DeflaterOutputStream(memoryStream, deflater) ) + { + outStream.IsStreamOwner = false; + outStream.Write(data, 0, data.Length); + outStream.Flush(); + outStream.Finish(); + } + return memoryStream; + } + + void RandomDeflateInflate(int size, int level, bool zlib) + { + byte[] buffer = new byte[size]; + System.Random rnd = new Random(); + rnd.NextBytes(buffer); + + MemoryStream ms = Deflate(buffer, level, zlib); + Inflate(ms, buffer, level, zlib); + } + + /// + /// Basic inflate/deflate test + /// + [Test] + [Category("Base")] + public void InflateDeflateZlib() + { + for (int level = 0; level < 10; ++level) + { + RandomDeflateInflate(100000, level, true); + } + } + + delegate void RunCompress(byte[] buffer); + + int runLevel; + bool runZlib; + long runCount = 0; + Random runRandom = new Random(5); + + void DeflateAndInflate(byte[] buffer) + { + ++runCount; + MemoryStream ms = Deflate(buffer, runLevel, runZlib); + Inflate(ms, buffer, runLevel, runZlib); + } + + void TryVariants(RunCompress test, byte[] buffer, int index) + { + int worker = 0; + while ( worker <= 255 ) + { + buffer[index] = (byte)worker; + if ( index < buffer.Length - 1) + { + TryVariants(test, buffer, index + 1); + } + else + { + test(buffer); + } + + worker += runRandom.Next(256); + } + } + + void TryManyVariants(int level, bool zlib, RunCompress test, byte[] buffer) + { + runLevel = level; + runZlib = zlib; + TryVariants(test, buffer, 0); + } + + + [Test] + [Category("Base")] + public void SmallBlocks() + { + byte[] buffer = new byte[10]; + Array.Clear(buffer, 0, buffer.Length); + TryManyVariants(0, false, new RunCompress(DeflateAndInflate), buffer); + } + + [Test] + [Explicit] + [Category("Base")] + [Category("ExcludeFromAutoBuild")] + public void FindBug() + { + using ( FileStream fs = File.OpenRead("c:\\tmp\\original.dat") ) + { + long readOffset = 0; + long readLength = fs.Length - readOffset; +// readLength -= 5567; // 5568 works 5567 doesnt.... + + fs.Seek(readOffset, SeekOrigin.Begin); + + byte[] original = new byte[readLength]; + + int bytesRead = fs.Read(original, 0, original.Length); + Assert.AreEqual(bytesRead, original.Length); + + MemoryStream ms = Deflate(original, Deflater.BEST_SPEED, true); + Inflate(ms, original, Deflater.BEST_SPEED, true); + } + } + + /// + /// Basic inflate/deflate test + /// + [Test] + [Category("Base")] + public void InflateDeflateNonZlib() + { + for (int level = 0; level < 10; ++level) + { + RandomDeflateInflate(100000, level, false); + } + } + + [Test] + [Category("Base")] + public void CloseDeflatorWithNestedUsing() + { + string tempFile = null; + try + { + tempFile = Path.GetTempPath(); + } + catch (SecurityException) + { + } + + Assert.IsNotNull(tempFile, "No permission to execute this test?"); + if (tempFile != null) + { + tempFile = Path.Combine(tempFile, "SharpZipTest.Zip"); + using (FileStream diskFile = File.Create(tempFile)) + using (DeflaterOutputStream deflator = new DeflaterOutputStream(diskFile)) + using (StreamWriter txtFile = new StreamWriter(deflator)) + { + txtFile.Write("Hello"); + txtFile.Flush(); + } + + File.Delete(tempFile); + } + } + + [Test] + [Category("Base")] + public void DeflatorStreamOwnership() + { + MemoryStreamEx memStream = new MemoryStreamEx(); + DeflaterOutputStream s = new DeflaterOutputStream(memStream); + + Assert.IsFalse(memStream.IsClosed, "Shouldnt be closed initially"); + Assert.IsFalse(memStream.IsDisposed, "Shouldnt be disposed initially"); + + s.Close(); + + Assert.IsTrue(memStream.IsClosed, "Should be closed after parent owner close"); + Assert.IsTrue(memStream.IsDisposed, "Should be disposed after parent owner close"); + + memStream = new MemoryStreamEx(); + s = new DeflaterOutputStream(memStream); + + Assert.IsFalse(memStream.IsClosed, "Shouldnt be closed initially"); + Assert.IsFalse(memStream.IsDisposed, "Shouldnt be disposed initially"); + + s.IsStreamOwner = false; + s.Close(); + + Assert.IsFalse(memStream.IsClosed, "Should not be closed after parent owner close"); + Assert.IsFalse(memStream.IsDisposed, "Should not be disposed after parent owner close"); + + } + + [Test] + [Category("Base")] + public void InflatorStreamOwnership() + { + MemoryStreamEx memStream = new MemoryStreamEx(); + InflaterInputStream s = new InflaterInputStream(memStream); + + Assert.IsFalse(memStream.IsClosed, "Shouldnt be closed initially"); + Assert.IsFalse(memStream.IsDisposed, "Shouldnt be disposed initially"); + + s.Close(); + + Assert.IsTrue(memStream.IsClosed, "Should be closed after parent owner close"); + Assert.IsTrue(memStream.IsDisposed, "Should be disposed after parent owner close"); + + memStream = new MemoryStreamEx(); + s = new InflaterInputStream(memStream); + + Assert.IsFalse(memStream.IsClosed, "Shouldnt be closed initially"); + Assert.IsFalse(memStream.IsDisposed, "Shouldnt be disposed initially"); + + s.IsStreamOwner = false; + s.Close(); + + Assert.IsFalse(memStream.IsClosed, "Should not be closed after parent owner close"); + Assert.IsFalse(memStream.IsDisposed, "Should not be disposed after parent owner close"); + + } + + [Test] + [Category("Base")] + public void CloseInflatorWithNestedUsing() + { + string tempFile = null; + try + { + tempFile = Path.GetTempPath(); + } + catch (SecurityException) + { + } + + Assert.IsNotNull(tempFile, "No permission to execute this test?"); + + if (tempFile != null) + { + tempFile = Path.Combine(tempFile, "SharpZipTest.Zip"); + using (FileStream diskFile = File.Create(tempFile)) + using (DeflaterOutputStream deflator = new DeflaterOutputStream(diskFile)) + using (StreamWriter textWriter = new StreamWriter(deflator)) + { + textWriter.Write("Hello"); + textWriter.Flush(); + } + + using (FileStream diskFile = File.OpenRead(tempFile)) + using (InflaterInputStream deflator = new InflaterInputStream(diskFile)) + using (StreamReader textReader = new StreamReader(deflator)) + { + char[] buffer = new char[5]; + int readCount = textReader.Read(buffer, 0, 5); + Assert.AreEqual(5, readCount); + + StringBuilder b = new StringBuilder(); + b.Append(buffer); + Assert.AreEqual("Hello", b.ToString()); + + } + + File.Delete(tempFile); + } + } + } +} diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/GZip/GZipTests.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/GZip/GZipTests.cs new file mode 100644 index 0000000..1f42c6d --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/GZip/GZipTests.cs @@ -0,0 +1,259 @@ +using System; +using System.IO; +using System.Threading; +using ICSharpCode.SharpZipLib.Silverlight.GZip; +using NUnit.Framework; + +using ICSharpCode.SharpZipLib.Tests.TestSupport; + +namespace ICSharpCode.SharpZipLib.Tests.GZip +{ + /// + /// This class contains test cases for GZip compression + /// + [TestFixture] + public class GZipTestSuite + { + /// + /// Basic compress/decompress test + /// + [Test] + [Category("GZip")] + public void TestGZip() + { + MemoryStream ms = new MemoryStream(); + GZipOutputStream outStream = new GZipOutputStream(ms); + + byte[] buf = new byte[100000]; + System.Random rnd = new Random(); + rnd.NextBytes(buf); + + outStream.Write(buf, 0, buf.Length); + outStream.Flush(); + outStream.Finish(); + + ms.Seek(0, SeekOrigin.Begin); + + GZipInputStream inStream = new GZipInputStream(ms); + byte[] buf2 = new byte[buf.Length]; + int currentIndex = 0; + int count = buf2.Length; + + while (true) { + int numRead = inStream.Read(buf2, currentIndex, count); + if (numRead <= 0) { + break; + } + currentIndex += numRead; + count -= numRead; + } + + Assert.AreEqual(0, count); + + for (int i = 0; i < buf.Length; ++i) { + Assert.AreEqual(buf2[i], buf[i]); + } + } + + /// + /// Writing GZip headers is delayed so that this stream can be used with HTTP/IIS. + /// + [Test] + [Category("GZip")] + public void DelayedHeaderWriteNoData() + { + MemoryStream ms = new MemoryStream(); + Assert.AreEqual(0, ms.Length); + + using (GZipOutputStream outStream = new GZipOutputStream(ms)) { + Assert.AreEqual(0, ms.Length); + } + + byte[] data = ms.ToArray(); + + Assert.IsTrue(data.Length > 0); + } + + /// + /// Writing GZip headers is delayed so that this stream can be used with HTTP/IIS. + /// + [Test] + [Category("GZip")] + public void DelayedHeaderWriteWithData() + { + MemoryStream ms = new MemoryStream(); + Assert.AreEqual(0, ms.Length); + using (GZipOutputStream outStream = new GZipOutputStream(ms)) { + Assert.AreEqual(0, ms.Length); + outStream.WriteByte(45); + + // Should in fact contain header right now with + // 1 byte in the compression pipeline + Assert.AreEqual(10, ms.Length); + } + byte[] data = ms.ToArray(); + + Assert.IsTrue(data.Length > 0); + } + + [Test] + [Category("GZip")] + public void ZeroLengthInputStream() + { + GZipInputStream gzi = new GZipInputStream(new MemoryStream()); + bool exception = false; + try { + gzi.ReadByte(); + } + catch { + exception = true; + } + + Assert.IsTrue(exception, "reading from an empty stream should cause an exception"); + } + + [Test] + [Category("GZip")] + public void OutputStreamOwnership() + { + MemoryStreamEx memStream = new MemoryStreamEx(); + GZipOutputStream s = new GZipOutputStream(memStream); + + Assert.IsFalse(memStream.IsClosed, "Shouldnt be closed initially"); + Assert.IsFalse(memStream.IsDisposed, "Shouldnt be disposed initially"); + + s.Close(); + + Assert.IsTrue(memStream.IsClosed, "Should be closed after parent owner close"); + Assert.IsTrue(memStream.IsDisposed, "Should be disposed after parent owner close"); + + memStream = new MemoryStreamEx(); + s = new GZipOutputStream(memStream); + + Assert.IsFalse(memStream.IsClosed, "Shouldnt be closed initially"); + Assert.IsFalse(memStream.IsDisposed, "Shouldnt be disposed initially"); + + s.IsStreamOwner = false; + s.Close(); + + Assert.IsFalse(memStream.IsClosed, "Should not be closed after parent owner close"); + Assert.IsFalse(memStream.IsDisposed, "Should not be disposed after parent owner close"); + } + + [Test] + [Category("GZip")] + public void InputStreamOwnership() + { + MemoryStreamEx memStream = new MemoryStreamEx(); + GZipInputStream s = new GZipInputStream(memStream); + + Assert.IsFalse(memStream.IsClosed, "Shouldnt be closed initially"); + Assert.IsFalse(memStream.IsDisposed, "Shouldnt be disposed initially"); + + s.Close(); + + Assert.IsTrue(memStream.IsClosed, "Should be closed after parent owner close"); + Assert.IsTrue(memStream.IsDisposed, "Should be disposed after parent owner close"); + + memStream = new MemoryStreamEx(); + s = new GZipInputStream(memStream); + + Assert.IsFalse(memStream.IsClosed, "Shouldnt be closed initially"); + Assert.IsFalse(memStream.IsDisposed, "Shouldnt be disposed initially"); + + s.IsStreamOwner = false; + s.Close(); + + Assert.IsFalse(memStream.IsClosed, "Should not be closed after parent owner close"); + Assert.IsFalse(memStream.IsDisposed, "Should not be disposed after parent owner close"); + + } + + [Test] + [Category("GZip")] + [Category("Long Running")] + public void BigStream() + { + window_ = new WindowedStream(0x3ffff); + outStream_ = new GZipOutputStream(window_); + inStream_ = new GZipInputStream(window_); + + long target = 0x10000000; + readTarget_ = writeTarget_ = target; + + Thread reader = new Thread(Reader); + reader.Name = "Reader"; + reader.Start(); + + Thread writer = new Thread(Writer); + writer.Name = "Writer"; + + DateTime startTime = DateTime.Now; + writer.Start(); + + writer.Join(); + reader.Join(); + + DateTime endTime = DateTime.Now; + + TimeSpan span = endTime - startTime; + Console.WriteLine("Time {0} processes {1} KB/Sec", span, (target / 1024) / span.TotalSeconds); + } + + void Reader() + { + const int Size = 8192; + int readBytes = 1; + byte[] buffer = new byte[Size]; + + long passifierLevel = readTarget_ - 0x10000000; + + while ( (readTarget_ > 0) && (readBytes > 0) ) { + int count = Size; + if (count > readTarget_) { + count = (int)readTarget_; + } + + readBytes = inStream_.Read(buffer, 0, count); + readTarget_ -= readBytes; + + if (readTarget_ <= passifierLevel) { + Console.WriteLine("Reader {0} bytes remaining", readTarget_); + passifierLevel = readTarget_ - 0x10000000; + } + } + + Assert.IsTrue(window_.IsClosed, "Window should be closed"); + + // This shouldnt read any data but should read the footer + readBytes = inStream_.Read(buffer, 0, 1); + Assert.AreEqual(0, readBytes, "Stream should be empty"); + Assert.AreEqual(0, window_.Length, "Window should be closed"); + inStream_.Close(); + } + + void Writer() + { + const int Size = 8192; + + byte[] buffer = new byte[Size]; + + while (writeTarget_ > 0) { + int thisTime = Size; + if (thisTime > writeTarget_) { + thisTime = (int)writeTarget_; + } + + outStream_.Write(buffer, 0, thisTime); + writeTarget_-= thisTime; + } + outStream_.Close(); + } + + WindowedStream window_; + GZipOutputStream outStream_; + GZipInputStream inStream_; + long readTarget_; + long writeTarget_; + } +} diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/ICSharpCode.SharpZipLib.Silverlight.Tests.csproj b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/ICSharpCode.SharpZipLib.Silverlight.Tests.csproj new file mode 100644 index 0000000..b590878 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/ICSharpCode.SharpZipLib.Silverlight.Tests.csproj @@ -0,0 +1,155 @@ + + + + v3.5 + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {3808F0EB-14CF-4919-87F3-97FB9D225A80} + {A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + SharpZipLibTests.Silverlight + SharpZipLibTests.Silverlight + v3.0 + false + + + 3.5 + + + false + true + key.snk + Silverlight + $(TargetFrameworkVersion) + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + true + + + true + full + false + ClientBin\ + DEBUG;TRACE;SILVERLIGHT + true + true + prompt + 4 + AllRules.ruleset + + + pdbonly + true + ClientBin\ + TRACE;SILVERLIGHT + true + true + prompt + 4 + MinimumRecommendedRules.ruleset + + + + + + + True + + + + True + + + True + + + True + + + True + + + + + + + + + + + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 2.0 %28x86%29 + false + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + {2E420750-6124-473B-808D-41755C907648} + ICSharpCode.SharpZipLib.Silverlight %28.NET 3.5\SharpZipLib\ICSharpCode.SharpZipLib.Silverlight%29 + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/Properties/AssemblyInfo.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..2ab00a2 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("SharpZipLibTests.Silverlight")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("SharpZipLibTests.Silverlight")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("5aa62b43-d301-483f-ae12-acf0612bedae")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/Tar/TarTests.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/Tar/TarTests.cs new file mode 100644 index 0000000..9f0e47f --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/Tar/TarTests.cs @@ -0,0 +1,559 @@ +using System; +using System.IO; +using System.Text; +using ICSharpCode.SharpZipLib.Silverlight.Tar; +using NUnit.Framework; + +namespace ICSharpCode.SharpZipLib.Tests.Tar { + + /// + /// This class contains test cases for Tar archive handling + /// + [TestFixture] + public class TarTestSuite + { + int entryCount; + + void EntryCounter(TarArchive archive, TarEntry entry, string message) + { + entryCount++; + } + + /// + /// Test that an empty archive can be created and when read has 0 entries in it + /// + [Test] + [Category("Tar")] + public void EmptyTar() + { + MemoryStream ms = new MemoryStream(); + int recordSize = 0; + using ( TarArchive tarOut = TarArchive.CreateOutputTarArchive(ms) ) + { + recordSize = tarOut.RecordSize; + } + + Assert.IsTrue(ms.GetBuffer().Length > 0, "Archive size must be > zero"); + Assert.AreEqual(ms.GetBuffer().Length % recordSize, 0, "Archive size must be a multiple of record size"); + + MemoryStream ms2 = new MemoryStream(); + ms2.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length); + ms2.Seek(0, SeekOrigin.Begin); + + using ( TarArchive tarIn = TarArchive.CreateInputTarArchive(ms2) ) + { + entryCount = 0; + tarIn.ProgressMessageEvent += new ProgressMessageHandler(EntryCounter); + tarIn.ListContents(); + Assert.AreEqual(0, entryCount, "Expected 0 tar entries"); + } + } + /// + /// Check that the tar block factor can be varied successfully. + /// + [Test] + public void BlockFactorHandling() + { + const int MinimumBlockFactor = 1; + const int MaximumBlockFactor = 64; + const int FillFactor = 2; + + for ( int factor = MinimumBlockFactor; factor < MaximumBlockFactor; ++factor) + { + MemoryStream ms = new MemoryStream(); + + using ( TarOutputStream tarOut = new TarOutputStream(ms, factor) ) + { + TarEntry entry = TarEntry.CreateTarEntry("TestEntry"); + entry.Size = (TarBuffer.BlockSize * factor * FillFactor); + tarOut.PutNextEntry(entry); + + byte[] buffer = new byte[TarBuffer.BlockSize]; + + Random r = new Random(); + r.NextBytes(buffer); + + // Last block is a partial one + for ( int i = 0; i < factor * FillFactor; ++i) + { + tarOut.Write(buffer, 0, buffer.Length); + } + } + + byte[] tarData = ms.ToArray(); + Assert.IsNotNull(tarData, "Data written is null"); + + // Blocks = Header + Data Blocks + Zero block + Record trailer + int usedBlocks = 1 + (factor * FillFactor) + 1; + int totalBlocks = usedBlocks + (factor - 1); + totalBlocks /= factor; + totalBlocks *= factor; + + Assert.AreEqual(TarBuffer.BlockSize * totalBlocks, tarData.Length, "Tar file should contain {0} blocks in length", + totalBlocks); + + if ( usedBlocks < totalBlocks ) + { + // Start at first byte after header. + int byteIndex = TarBuffer.BlockSize * ((factor * FillFactor)+ 1); + while ( byteIndex < tarData.Length ) + { + int blockNumber = byteIndex / TarBuffer.BlockSize; + int offset = blockNumber % TarBuffer.BlockSize; + Assert.AreEqual(0, tarData[byteIndex], + string.Format("Trailing block data should be null iteration {0} block {1} offset {2} index {3}", + factor, + blockNumber, offset, byteIndex)); + byteIndex += 1; + } + } + } + } + + + /// + /// Check that the tar trailer only contains nulls. + /// + [Test] + public void TrailerContainsNulls() + { + const int TestBlockFactor = 3; + + for ( int iteration = 0; iteration < TestBlockFactor * 2; ++iteration) + { + MemoryStream ms = new MemoryStream(); + + using ( TarOutputStream tarOut = new TarOutputStream(ms, TestBlockFactor) ) + { + TarEntry entry = TarEntry.CreateTarEntry("TestEntry"); + if ( iteration > 0 ) + { + entry.Size = (TarBuffer.BlockSize * (iteration - 1)) + 9; + } + tarOut.PutNextEntry(entry); + + byte[] buffer = new byte[TarBuffer.BlockSize]; + + Random r = new Random(); + r.NextBytes(buffer); + + if ( iteration > 0 ) + { + for ( int i = 0; i < iteration - 1; ++i ) + { + tarOut.Write(buffer, 0, buffer.Length); + } + + // Last block is a partial one + for ( int i = 1; i < 10; ++i) + { + tarOut.WriteByte((byte)i); + } + } + } + + byte[] tarData = ms.ToArray(); + Assert.IsNotNull(tarData, "Data written is null"); + + // Blocks = Header + Data Blocks + Zero block + Record trailer + int usedBlocks = 1 + iteration + 1; + int totalBlocks = usedBlocks + (TestBlockFactor - 1); + totalBlocks /= TestBlockFactor; + totalBlocks *= TestBlockFactor; + + Assert.AreEqual(TarBuffer.BlockSize * totalBlocks, tarData.Length, + string.Format("Tar file should be {0} blocks in length", totalBlocks)); + + if ( usedBlocks < totalBlocks ) + { + // Start at first byte after header. + int byteIndex = TarBuffer.BlockSize * (iteration + 1); + while ( byteIndex < tarData.Length ) + { + int blockNumber = byteIndex / TarBuffer.BlockSize; + int offset = blockNumber % TarBuffer.BlockSize; + Assert.AreEqual(0, tarData[byteIndex], + string.Format("Trailing block data should be null iteration {0} block {1} offset {2} index {3}", + iteration, + blockNumber, offset, byteIndex)); + byteIndex += 1; + } + } + } + } + + void TryLongName(string name) + { + MemoryStream ms = new MemoryStream(); + using ( TarOutputStream tarOut = new TarOutputStream(ms) ) + { + DateTime modTime = DateTime.Now; + + TarEntry entry = TarEntry.CreateTarEntry(name); + tarOut.PutNextEntry(entry); + } + + MemoryStream ms2 = new MemoryStream(); + ms2.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length); + ms2.Seek(0, SeekOrigin.Begin); + + using (TarInputStream tarIn = new TarInputStream(ms2)) + { + TarEntry nextEntry = tarIn.GetNextEntry(); + + Assert.AreEqual(nextEntry.Name, name, "Name match failure"); + } + } + + /// + /// Check that long names are handled correctly for reading and writing. + /// + [Test] + [Category("Tar")] + public void LongNames() + { + TryLongName("11111111112222222222333333333344444444445555555555" + + "6666666666777777777788888888889999999999000000000"); + + TryLongName("11111111112222222222333333333344444444445555555555" + + "66666666667777777777888888888899999999990000000000"); + + TryLongName("11111111112222222222333333333344444444445555555555" + + "66666666667777777777888888888899999999990000000000" + + "1"); + + TryLongName("11111111112222222222333333333344444444445555555555" + + "66666666667777777777888888888899999999990000000000" + + "11111111112222222222333333333344444444445555555555" + + "66666666667777777777888888888899999999990000000000"); + + TryLongName("11111111112222222222333333333344444444445555555555" + + "66666666667777777777888888888899999999990000000000" + + "11111111112222222222333333333344444444445555555555" + + "66666666667777777777888888888899999999990000000000" + + "11111111112222222222333333333344444444445555555555" + + "66666666667777777777888888888899999999990000000000" + + "11111111112222222222333333333344444444445555555555" + + "66666666667777777777888888888899999999990000000000" + + "11111111112222222222333333333344444444445555555555" + + "66666666667777777777888888888899999999990000000000"); + + for (int n = 1; n < 1024; ++n) + { + string format = "{0," + n + "}"; + string formatted = string.Format(format, "A"); + TryLongName(formatted); + } + } + + /// + /// Test equals function for tar headers. + /// + [Test] + [Category("Tar")] + public void HeaderEquality() + { + TarHeader h1 = new TarHeader(); + TarHeader h2 = new TarHeader(); + + Assert.IsTrue(h1.Equals(h2)); + + h1.Name = "ABCDEFG"; + Assert.IsFalse(h1.Equals(h2)); + h2.Name = h1.Name; + Assert.IsTrue(h1.Equals(h2)); + + h1.Mode = 33188; + Assert.IsFalse(h1.Equals(h2)); + h2.Mode = h1.Mode; + Assert.IsTrue(h1.Equals(h2)); + + h1.UserId = 654; + Assert.IsFalse(h1.Equals(h2)); + h2.UserId = h1.UserId; + Assert.IsTrue(h1.Equals(h2)); + + h1.GroupId = 654; + Assert.IsFalse(h1.Equals(h2)); + h2.GroupId = h1.GroupId; + Assert.IsTrue(h1.Equals(h2)); + + h1.Size = 654; + Assert.IsFalse(h1.Equals(h2)); + h2.Size = h1.Size; + Assert.IsTrue(h1.Equals(h2)); + + h1.ModTime = DateTime.Now; + Assert.IsFalse(h1.Equals(h2)); + h2.ModTime = h1.ModTime; + Assert.IsTrue(h1.Equals(h2)); + + h1.TypeFlag = 165; + Assert.IsFalse(h1.Equals(h2)); + h2.TypeFlag = h1.TypeFlag; + Assert.IsTrue(h1.Equals(h2)); + + h1.LinkName = "link"; + Assert.IsFalse(h1.Equals(h2)); + h2.LinkName = h1.LinkName; + Assert.IsTrue(h1.Equals(h2)); + + h1.Magic = "ustar"; + Assert.IsFalse(h1.Equals(h2)); + h2.Magic = h1.Magic; + Assert.IsTrue(h1.Equals(h2)); + + h1.Version = "1"; + Assert.IsFalse(h1.Equals(h2)); + h2.Version = h1.Version; + Assert.IsTrue(h1.Equals(h2)); + + h1.UserName = "user"; + Assert.IsFalse(h1.Equals(h2)); + h2.UserName = h1.UserName; + Assert.IsTrue(h1.Equals(h2)); + + h1.GroupName = "group"; + Assert.IsFalse(h1.Equals(h2)); + h2.GroupName = h1.GroupName; + Assert.IsTrue(h1.Equals(h2)); + + + h1.DevMajor = 165; + Assert.IsFalse(h1.Equals(h2)); + h2.DevMajor = h1.DevMajor; + Assert.IsTrue(h1.Equals(h2)); + + h1.DevMinor = 164; + Assert.IsFalse(h1.Equals(h2)); + h2.DevMinor = h1.DevMinor; + Assert.IsTrue(h1.Equals(h2)); + + } + + [Test] + [Category("Tar")] + public void Checksum() + { + MemoryStream ms = new MemoryStream(); + using ( TarOutputStream tarOut = new TarOutputStream(ms) ) + { + DateTime modTime = DateTime.Now; + + TarEntry entry = TarEntry.CreateTarEntry("TestEntry"); + entry.TarHeader.Mode = 12345; + + tarOut.PutNextEntry(entry); + } + + MemoryStream ms2 = new MemoryStream(); + ms2.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length); + ms2.Seek(0, SeekOrigin.Begin); + TarEntry nextEntry; + + using (TarInputStream tarIn = new TarInputStream(ms2)) + { + nextEntry = tarIn.GetNextEntry(); + Assert.IsTrue(nextEntry.TarHeader.IsChecksumValid, "Checksum should be valid"); + } + + MemoryStream ms3 = new MemoryStream(); + ms3.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length); + ms3.Seek(0, SeekOrigin.Begin); + ms3.Write(new byte[1] { 34 }, 0, 1); + ms3.Seek(0, SeekOrigin.Begin); + + using (TarInputStream tarIn = new TarInputStream(ms3)) + { + bool trapped = false; + + try + { + nextEntry = tarIn.GetNextEntry(); + } + catch (TarException) + { + trapped = true; + } + + Assert.IsTrue(trapped, "Checksum should be invalid"); + } + } + + /// + /// Check that values set are preserved when writing and reading archives. + /// + [Test] + [Category("Tar")] + public void ValuesPreserved() + { + MemoryStream ms = new MemoryStream(); + TarEntry entry; + DateTime modTime = DateTime.Now; + + using (TarOutputStream tarOut = new TarOutputStream(ms)) + { + entry = TarEntry.CreateTarEntry("TestEntry"); + entry.GroupId = 12; + entry.UserId = 14; + entry.ModTime = modTime; + entry.UserName = "UserName"; + entry.GroupName = "GroupName"; + entry.TarHeader.Mode = 12345; + + tarOut.PutNextEntry(entry); + } + + MemoryStream ms2 = new MemoryStream(); + ms2.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length); + ms2.Seek(0, SeekOrigin.Begin); + + using (TarInputStream tarIn = new TarInputStream(ms2)) + { + TarEntry nextEntry = tarIn.GetNextEntry(); + Assert.AreEqual(entry.TarHeader.Checksum, nextEntry.TarHeader.Checksum, "Checksum"); + + Assert.IsTrue(nextEntry.Equals(entry), "Entries should be equal"); + Assert.IsTrue(nextEntry.TarHeader.Equals(entry.TarHeader), "Headers should match"); + + // Tar only stores seconds + DateTime truncatedTime = new DateTime(modTime.Year, modTime.Month, modTime.Day, + modTime.Hour, modTime.Minute, modTime.Second); + Assert.AreEqual(truncatedTime, nextEntry.ModTime, "Modtimes should match"); + + int entryCount = 0; + while ( nextEntry != null ) + { + ++entryCount; + nextEntry = tarIn.GetNextEntry(); + } + + Assert.AreEqual(1, entryCount, "Expected 1 entry"); + } + } + + /// + /// Check invalid mod times are detected + /// + [Test] + [ExpectedException(typeof(ArgumentOutOfRangeException))] + public void InvalidModTime() + { + TarEntry e = TarEntry.CreateTarEntry("test"); + e.ModTime = DateTime.MinValue; + } + + + /// + /// Check invalid sizes are detected + /// + [Test] + [ExpectedException(typeof(ArgumentOutOfRangeException))] + public void InvalidSize() + { + TarEntry e = TarEntry.CreateTarEntry("test"); + e.Size = -6; + } + + /// + /// Check invalid names are detected + /// + [Test] + [ExpectedException(typeof(ArgumentNullException))] + public void InvalidName() + { + TarEntry e = TarEntry.CreateTarEntry("test"); + e.Name = null; + } + + /// + /// Check setting user and group names. + /// + [Test] + public void UserAndGroupNames() + { + TarEntry e = TarEntry.CreateTarEntry("test"); + e.UserName = null; + Assert.IsNotNull(e.UserName, "Name set to OS default"); + e.UserName = ""; + Assert.AreEqual(0, e.UserName.Length, "Empty name allowed"); + e.GroupName = null; + Assert.AreEqual("None", e.GroupName, "default group name is None"); + } + + /// + /// Check invalid magic values are detected + /// + [Test] + [ExpectedException(typeof(ArgumentNullException))] + public void InvalidMagic() + { + TarEntry e = TarEntry.CreateTarEntry("test"); + e.TarHeader.Magic = null; + } + + /// + /// Check invalid link names are detected + /// + [Test] + [ExpectedException(typeof(ArgumentNullException))] + public void InvalidLinkName() + { + TarEntry e = TarEntry.CreateTarEntry("test"); + e.TarHeader.LinkName = null; + } + + /// + /// Check invalid version names are detected + /// + [Test] + [ExpectedException(typeof(ArgumentNullException))] + public void InvalidVersionName() + { + TarEntry e = TarEntry.CreateTarEntry("test"); + e.TarHeader.Version = null; + } + + [Test] + public void CloningAndUniqueness() + { + // Partial test of cloning for TarHeader and TarEntry + TarEntry e = TarEntry.CreateTarEntry("ohsogood"); + e.GroupId = 47; + e.GroupName = "GroupName"; + e.ModTime = DateTime.Now; + e.Size = 123234; + + TarHeader headerE = e.TarHeader; + + headerE.DevMajor = 99; + headerE.DevMinor = 98; + headerE.LinkName = "LanceLink"; + + TarEntry d = (TarEntry)e.Clone(); + + Assert.AreEqual(d.File, e.File); + Assert.AreEqual(d.GroupId, e.GroupId); + Assert.AreEqual(d.GroupName, e.GroupName); + Assert.AreEqual(d.IsDirectory, e.IsDirectory); + Assert.AreEqual(d.ModTime, e.ModTime); + Assert.AreEqual(d.Size, e.Size); + + TarHeader headerD = d.TarHeader; + + Assert.AreEqual(headerE.Checksum, headerD.Checksum); + Assert.AreEqual(headerE.LinkName, headerD.LinkName); + + Assert.AreEqual(99, headerD.DevMajor); + Assert.AreEqual(98, headerD.DevMinor); + + Assert.AreEqual("LanceLink", headerD.LinkName); + + TarEntry entryf = new TarEntry(headerD); + + headerD.LinkName = "Something different"; + + Assert.AreNotEqual(headerD.LinkName, entryf.TarHeader.LinkName, "Entry headers should be unique"); + } + } +} diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/TestSupport/RingBuffer.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/TestSupport/RingBuffer.cs new file mode 100644 index 0000000..d3d45cd --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/TestSupport/RingBuffer.cs @@ -0,0 +1,558 @@ +// Define this to use simple synchronisation rather than events. +// They are about the same in terms of speed. +#define SimpleSynch + +using System; +using System.IO; +using System.Threading; + +using NUnit.Framework; + + +namespace ICSharpCode.SharpZipLib.Tests.TestSupport +{ + /// + /// A fixed size buffer of bytes. Both reading and writing are supported. + /// Reading from an empty buffer will wait until data is written. Writing to a full buffer + /// will wait until data is read. + /// + public class ReadWriteRingBuffer + { + #region Constructors + /// + /// Create a new RingBuffer with a specified size. + /// + /// The size of the ring buffer to create. + public ReadWriteRingBuffer( int size ) + { + if ( size <= 0 ) { + throw new ArgumentOutOfRangeException( "size" ); + } + + array_ = new byte[size]; + lockObject_ = new object(); + +#if SimpleSynch + waitSpan_ = TimeSpan.FromMilliseconds(1); +#else + notEmptyEvent_ = new ManualResetEvent(false); + notFullEvent_ = new ManualResetEvent(true); +#endif + } + #endregion + + /// + /// Clear the buffer contents. + /// + public void Clear() + { + tail_ = 0; + head_ = 0; + count_ = 0; + + Array.Clear( array_, 0, array_.Length ); + +#if !SimpleSynch + notFullEvent_.Set(); + notEmptyEvent_.Reset(); +#endif + } + + /// + /// Close the buffer for writing. + /// + /// A Read when the buffer is closed and there is no data will return -1. + public void Close() + { + isClosed_ = true; +#if !SimpleSynch + notEmptyEvent_.Set(); +#endif + } + + /// + /// Write adds a byte to the head of the RingBuffer. + /// + /// The value to add. + public void WriteByte( byte value ) + { + if (isClosed_) { + throw new Exception("Buffer is closed"); + } + +#if SimpleSynch + while (IsFull) { + Thread.Sleep(waitSpan_); + } +#else + notFullEvent_.WaitOne(); +#endif + + lock (lockObject_) { + array_[head_] = value; + head_ = (head_ + 1) % array_.Length; + +#if !SimpleSynch + bool setEmpty = (count_ == 0); +#endif + + count_ += 1; + +#if !SimpleSynch + if (IsFull) + { + notFullEvent_.Reset(); + } + + if (setEmpty) + { + notEmptyEvent_.Set(); + } +#endif + } + + bytesWritten_++; + } + + public void Write(byte[] buffer, int index, int count) + { + if (isClosed_) + { + throw new Exception("Buffer is closed"); + } + + while ( count > 0 ) + { +#if SimpleSynch + while (IsFull) { + Thread.Sleep(waitSpan_); + } +#else + notFullEvent_.WaitOne(); +#endif + + // Gauranteed to not be full at this point, however readers may sill read + // from the buffer first. + lock (lockObject_) + { + int bytesToWrite = Length - Count; + + if (count < bytesToWrite) + { + bytesToWrite = count; + } +#if !SimpleSynch + bool setEmpty = (count_ == 0); +#endif + + while (bytesToWrite > 0) + { + array_[head_] = buffer[index]; + index++; + + head_ = (head_ + 1) % array_.Length; + + bytesToWrite--; + bytesWritten_++; + count--; + count_++; + } + +#if !SimpleSynch + if (IsFull) + { + notFullEvent_.Reset(); + } + + if (setEmpty) + { + notEmptyEvent_.Set(); + } +#endif + } + } + } + + /// + /// Read a byte from the buffer. + /// + /// + public int ReadByte() + { + int result = -1; + +#if SimpleSynch + while (!isClosed_ && IsEmpty) { + Thread.Sleep(waitSpan_); + } +#else + notEmptyEvent_.WaitOne(); +#endif + + if ( !IsEmpty ) { + lock (lockObject_) { + result = array_[tail_]; + tail_ = (tail_ + 1) % array_.Length; +#if !SimpleSynch + bool setFull = IsFull; +#endif + count_ -= 1; +#if !SimpleSynch + if (!isClosed_ && (count_ == 0)) + { + notEmptyEvent_.Reset(); + } + + if (setFull) + { + notFullEvent_.Set(); + } +#endif + } + } + + bytesRead_++; + + return result; + } + + public int Read(byte[] buffer, int index, int count) + { + int result = 0; + + while (count > 0) + { +#if SimpleSynch + while (!isClosed_ && IsEmpty) + { + Thread.Sleep(waitSpan_); + } +#else + notEmptyEvent_.WaitOne(); +#endif + + if (IsEmpty) + { + count = 0; + } + else + { + lock (lockObject_) + { + int toRead = Count; + + if (toRead > count) + { + toRead = count; + } + + result += toRead; + +#if !SimpleSynch + bool setFull = IsFull; +#endif + + while (toRead > 0) + { + buffer[index] = array_[tail_]; + index++; + + tail_ = (tail_ + 1) % array_.Length; + count--; + count_--; + toRead--; + bytesRead_++; + } +#if !SimpleSynch + if (!isClosed_ && (count_ == 0)) + { + notEmptyEvent_.Reset(); + } + + if (setFull) + { + notFullEvent_.Set(); + } +#endif + } + } + } + + return result; + } + + #region Properties + + /// + /// Gets a value indicating wether the buffer is empty or not. + /// + public bool IsEmpty + { + get { return count_ == 0; } + } + + public bool IsFull + { + get { + return (count_ == array_.Length); + } + } + + public bool IsClosed + { + get { return isClosed_; } + } + + /// + /// Gets the number of elements in the buffer. + /// + public int Count + { + get { + return count_; + } + } + + + public int Length + { + get { return array_.Length; } + } + + public long BytesWritten + { + get { return bytesWritten_; } + } + + public long BytesRead + { + get { return bytesRead_; } + } + + /// + /// Indexer - Get an element from the tail of the RingBuffer. + /// + public byte this[ int index ] + { + get { + if ( ( index < 0 ) || ( index >= array_.Length ) ) { + throw new ArgumentOutOfRangeException( "index" ); + } + + return array_[ ( tail_ + index ) % array_.Length ]; + } + } + + #endregion + + #region Instance Variables + /// + /// Flag indicating the buffer is closed. + /// + bool isClosed_; + + /// + /// Index for the head of the buffer. + /// + /// Its the index of the next byte to be written. + int head_; + + /// + /// Index for the tail of the buffer. + /// + /// Its the index of the next byte to be written. + int tail_; + + /// + /// The total number of elements added to the buffer. + /// + int count_; + + /// + /// Storage for the ring buffer contents. + /// + byte[] array_; + + long bytesWritten_; + long bytesRead_; + + object lockObject_; + + TimeSpan waitSpan_; + +#if !SimpleSynch + ManualResetEvent notEmptyEvent_; + ManualResetEvent notFullEvent_; +#endif + #endregion + } + + [TestFixture] + public class ExerciseBuffer + { + [Test] + public void Basic() + { + const int Size = 64; + + buffer_ = new ReadWriteRingBuffer(Size); + + Assert.IsFalse(buffer_.IsFull); + Assert.IsTrue(buffer_.IsEmpty); + + buffer_.WriteByte(1); + + Assert.IsFalse(buffer_.IsFull); + Assert.IsFalse(buffer_.IsEmpty); + Assert.AreEqual(1, buffer_.Count); + + Assert.AreEqual(1, buffer_.ReadByte()); + + Assert.IsFalse(buffer_.IsFull); + Assert.IsTrue(buffer_.IsEmpty); + + for (int i = 0; i < buffer_.Length; ++i) + { + buffer_.WriteByte(unchecked((byte)(i & 0xff))); + } + + Assert.IsTrue(buffer_.IsFull); + Assert.IsFalse(buffer_.IsEmpty); + + buffer_.Close(); + + Assert.IsTrue(buffer_.IsClosed); + + bool caught = false; + try + { + buffer_.WriteByte(1); + } + catch + { + caught = true; + } + + Assert.IsTrue(caught); + + int count = Size; + int expected = 0; + + while (count != 0) + { + Assert.AreEqual(count, buffer_.Count); + Assert.AreEqual(expected, buffer_.ReadByte()); + count--; + expected = (expected + 1) & 0xff; + } + + Assert.IsTrue(buffer_.IsEmpty); + Assert.AreEqual(-1, buffer_.ReadByte()); + } + + [Test] + public void Buffered() + { + + const int Size = 64; + + buffer_ = new ReadWriteRingBuffer(Size); + + byte[] writeBuffer = new byte[16]; + for (int i = 0; i < 16; ++i) + { + writeBuffer[i] = (byte)i; + } + + buffer_.Write(writeBuffer, 0, 3); + Assert.AreEqual(3, buffer_.Count); + + byte[] readBuffer = new byte[16]; + Assert.AreEqual(3, buffer_.Read(readBuffer, 0, 3)); + for (int i = 0; i < 3; ++i) + { + Assert.AreEqual(i, readBuffer[i]); + } + + } + + [Test] + public void Threaded() + { + buffer_ = new ReadWriteRingBuffer(8); + readTarget_ = writeTarget_ = 16384; + + Thread reader = new Thread(Reader); + reader.Start(); + + Thread writer = new Thread(Writer); + writer.Start(); + + writer.Join(); + reader.Join(); + } + + void Reader() + { + Random r = new Random(); + byte nextValue = 0; + + while (readTarget_ > 0) + { + int thisTime = r.Next(16); + if (thisTime > readTarget_) + { + thisTime = readTarget_; + } + + while (thisTime > 0) + { + int readValue = buffer_.ReadByte(); + Assert.AreEqual(nextValue, readValue); + nextValue = (byte)((nextValue + 1) & 0xff); + thisTime--; + readTarget_--; + } + + Thread.Sleep(r.Next(10)); + + } + + int last = buffer_.ReadByte(); + + Assert.AreEqual(-1, last); + Assert.IsTrue(buffer_.IsClosed); + } + + void Writer() + { + Random r = new Random(); + + byte nextValue = 0; + while (writeTarget_ > 0) + { + int thisTime = r.Next(16); + if (thisTime > writeTarget_) + { + thisTime = writeTarget_; + } + + while (thisTime > 0) + { + buffer_.WriteByte(nextValue); + nextValue = (byte)((nextValue + 1) & 0xff); + thisTime--; + writeTarget_--; + } + Thread.Sleep(r.Next(10)); + } + buffer_.Close(); + } + + int readTarget_; + int writeTarget_; + + ReadWriteRingBuffer buffer_; + + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/TestSupport/Streams.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/TestSupport/Streams.cs new file mode 100644 index 0000000..37a02c1 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/TestSupport/Streams.cs @@ -0,0 +1,242 @@ +/* + * Created by SharpDevelop. + * User: JohnR + * Date: 4/08/2007 + * Time: 7:09 a.m. + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ + +using System; +using System.IO; + +namespace ICSharpCode.SharpZipLib.Tests.TestSupport +{ + /// + /// An extended memory stream + /// that tracks closing and diposing + /// + public class MemoryStreamEx : MemoryStream + { + public MemoryStreamEx() + : base() + { + } + + public MemoryStreamEx(byte[] buffer) + : base(buffer) + { + } + + protected override void Dispose(bool disposing) + { + isDisposed_=true; + base.Dispose(disposing); + } + + public override void Close() + { + isClosed_=true; + base.Close(); + } + + public bool IsClosed + { + get { return isClosed_; } + } + + public bool IsDisposed + { + get { return isDisposed_; } + set { isDisposed_=value; } + } + + #region Instance Fields + bool isDisposed_; + + bool isClosed_; + #endregion + } + + /// + /// A stream that cannot seek. + /// + public class MemoryStreamWithoutSeek : MemoryStreamEx + { + public override bool CanSeek + { + get { + return false; + } + } + } + + public class NullStream : Stream + { + public override bool CanRead + { + get { return false; } + } + + public override bool CanSeek + { + get { return false; } + } + + public override bool CanWrite + { + get { return true; } + } + + public override void Flush() + { + } + + public override long Length + { + get { throw new Exception("The method or operation is not implemented."); } + } + + public override long Position + { + get + { + throw new Exception("The method or operation is not implemented."); + } + set + { + throw new Exception("The method or operation is not implemented."); + } + } + + public override int Read(byte[] buffer, int offset, int count) + { + throw new Exception("The method or operation is not implemented."); + } + + public override long Seek(long offset, SeekOrigin origin) + { + throw new Exception("The method or operation is not implemented."); + } + + public override void SetLength(long value) + { + throw new Exception("The method or operation is not implemented."); + } + + public override void Write(byte[] buffer, int offset, int count) + { + } + } + + public class WindowedStream : Stream + { + public WindowedStream(int size) + { + ringBuffer_ = new ReadWriteRingBuffer(size); + } + + public override bool CanRead + { + get { return true; } + } + + public override bool CanSeek + { + get { return false; } + } + + public override bool CanWrite + { + get { return true; } + } + + public override void Flush() + { + // Do nothing + } + + public override long Length + { + // A bit of a HAK as its not true in the stream sense. + get { return ringBuffer_.Count; } + } + + public override long Position + { + get + { + throw new Exception("The method or operation is not implemented."); + } + set + { + throw new Exception("The method or operation is not implemented."); + } + } + + public override int Read(byte[] buffer, int offset, int count) + { + int bytesRead = 0; + while (count > 0) + { + int value = ringBuffer_.ReadByte(); + if (value >= 0) + { + buffer[offset] = (byte)(value & 0xff); + offset++; + bytesRead++; + count--; + } + else + { + break; + } + } + + return bytesRead; + } + + public override long Seek(long offset, SeekOrigin origin) + { + throw new Exception("The method or operation is not implemented."); + } + + public override void SetLength(long value) + { + throw new Exception("The method or operation is not implemented."); + } + + public override void Write(byte[] buffer, int offset, int count) + { + for (int i = 0; i < count; ++i) + { + ringBuffer_.WriteByte(buffer[offset + i]); + } + } + + public bool IsClosed + { + get { return ringBuffer_.IsClosed; } + } + + public override void Close() + { + ringBuffer_.Close(); + } + + public long BytesWritten + { + get { return ringBuffer_.BytesWritten; } + } + + public long BytesRead + { + get { return ringBuffer_.BytesRead; } + } + + #region Instance Fields + ReadWriteRingBuffer ringBuffer_; + + #endregion + } +} diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/Zip/ZipTests.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/Zip/ZipTests.cs new file mode 100644 index 0000000..18160c6 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/Zip/ZipTests.cs @@ -0,0 +1,3693 @@ +using System; +using System.IO; +using System.Reflection; +using System.Security; +using System.Text; +using System.Threading; +using ICSharpCode.SharpZipLib.Silverlight.Checksums; +using ICSharpCode.SharpZipLib.Silverlight.Core; +using ICSharpCode.SharpZipLib.Silverlight.Serialization; +using ICSharpCode.SharpZipLib.Silverlight.Zip; +using ICSharpCode.SharpZipLib.Tests.TestSupport; +using ICSharpCode.SharpZipLib.Zip; +using NUnit.Framework; + +namespace ICSharpCode.SharpZipLib.Tests.Zip +{ + + #region Local Support Classes + + internal class RuntimeInfo + { + public RuntimeInfo(CompressionMethod method, int compressionLevel, int size, string password, bool getCrc) + { + this.method = method; + this.compressionLevel = compressionLevel; + this.password = password; + this.size = size; + random = false; + + original = new byte[Size]; + if (random) + { + var rnd = new Random(); + rnd.NextBytes(original); + } + else + { + for (var i = 0; i < size; ++i) + { + original[i] = (byte) 'A'; + } + } + + if (getCrc) + { + var crc32 = new Crc32(); + crc32.Update(original, 0, size); + crc = crc32.Value; + } + } + + + public RuntimeInfo(string password, bool isDirectory) + { + method = CompressionMethod.Stored; + compressionLevel = 1; + this.password = password; + size = 0; + random = false; + isDirectory_ = isDirectory; + original = new byte[0]; + } + + + public byte[] Original + { + get { return original; } + } + + public CompressionMethod Method + { + get { return method; } + } + + public int CompressionLevel + { + get { return compressionLevel; } + } + + public int Size + { + get { return size; } + } + + public string Password + { + get { return password; } + } + + private bool Random + { + get { return random; } + } + + public long Crc + { + get { return crc; } + } + + public bool IsDirectory + { + get { return isDirectory_; } + } + + #region Instance Fields + + private readonly int compressionLevel; + private readonly long crc = -1; + private readonly bool isDirectory_; + private readonly CompressionMethod method; + private readonly byte[] original; + private readonly string password; + private readonly bool random; + private readonly int size; + + #endregion + } + + internal class MemoryDataSource : IStaticDataSource + { + #region Constructors + + /// + /// Initialise a new instance. + /// + /// The data to provide. + public MemoryDataSource(byte[] data) + { + data_ = data; + } + + #endregion + + #region IStaticDataSource Members + + /// + /// Get a Stream for this + /// + /// Returns a + public Stream GetSource() + { + return new MemoryStream(data_); + } + + #endregion + + #region Instance Fields + + private readonly byte[] data_; + + #endregion + } + + internal class StringMemoryDataSource : MemoryDataSource + { + public StringMemoryDataSource(string data) + : base(Encoding.UTF8.GetBytes(data)) + { + } + } + + #endregion + + #region ZipBase + + public class ZipBase + { + protected static string GetTempFilePath() + { + string result = null; + try + { + result = Path.GetTempPath(); + } + catch (SecurityException) + { + } + return result; + } + + protected byte[] MakeInMemoryZip(bool withSeek, params object[] createSpecs) + { + MemoryStream ms; + + if (withSeek) + { + ms = new MemoryStream(); + } + else + { + ms = new MemoryStreamWithoutSeek(); + } + + using (var outStream = new ZipOutputStream(ms)) + { + for (var counter = 0; counter < createSpecs.Length; ++counter) + { + var info = createSpecs[counter] as RuntimeInfo; + outStream.Password = info.Password; + + if (info.Method != CompressionMethod.Stored) + { + outStream.SetLevel(info.CompressionLevel); // 0 - store only to 9 - means best compression + } + + string entryName; + + if (info.IsDirectory) + { + entryName = "dir" + counter + "/"; + } + else + { + entryName = "entry" + counter + ".tst"; + } + + var entry = new ZipEntry(entryName); + entry.CompressionMethod = info.Method; + if (info.Crc >= 0) + { + entry.Crc = info.Crc; + } + + outStream.PutNextEntry(entry); + + if (info.Size > 0) + { + outStream.Write(info.Original, 0, info.Original.Length); + } + } + } + return ms.ToArray(); + } + + protected byte[] MakeInMemoryZip(ref byte[] original, CompressionMethod method, + int compressionLevel, int size, string password, bool withSeek) + { + MemoryStream ms; + + if (withSeek) + { + ms = new MemoryStream(); + } + else + { + ms = new MemoryStreamWithoutSeek(); + } + + using (var outStream = new ZipOutputStream(ms)) + { + outStream.Password = password; + + if (method != CompressionMethod.Stored) + { + outStream.SetLevel(compressionLevel); // 0 - store only to 9 - means best compression + } + + var entry = new ZipEntry("dummyfile.tst"); + entry.CompressionMethod = method; + + outStream.PutNextEntry(entry); + + if (size > 0) + { + var rnd = new Random(); + original = new byte[size]; + rnd.NextBytes(original); + + outStream.Write(original, 0, original.Length); + } + } + return ms.ToArray(); + } + + protected static void MakeTempFile(string name, int size) + { + using (var fs = File.Create(name)) + { + var buffer = new byte[4096]; + while (size > 0) + { + fs.Write(buffer, 0, Math.Min(size, buffer.Length)); + size -= buffer.Length; + } + } + } + + protected static byte ScatterValue(byte rhs) + { + return (byte) ((rhs*253 + 7) & 0xff); + } + + + private static void AddKnownDataToEntry(ZipOutputStream zipStream, int size) + { + if (size > 0) + { + byte nextValue = 0; + var bufferSize = Math.Min(size, 65536); + var data = new byte[bufferSize]; + var currentIndex = 0; + for (var i = 0; i < size; ++i) + { + data[currentIndex] = nextValue; + nextValue = ScatterValue(nextValue); + + currentIndex += 1; + if ((currentIndex >= data.Length) || (i + 1 == size)) + { + zipStream.Write(data, 0, currentIndex); + currentIndex = 0; + } + } + } + } + + public void WriteToFile(string fileName, byte[] data) + { + using (var fs = File.Open(fileName, FileMode.Create, FileAccess.ReadWrite, FileShare.Read)) + { + fs.Write(data, 0, data.Length); + } + } + + protected static void CheckKnownEntry(Stream inStream, int expectedCount) + { + var buffer = new byte[1024]; + + int bytesRead; + var total = 0; + byte nextValue = 0; + while ((bytesRead = inStream.Read(buffer, 0, buffer.Length)) > 0) + { + total += bytesRead; + for (var i = 0; i < bytesRead; ++i) + { + Assert.AreEqual(nextValue, buffer[i], "Wrong value read from entry"); + nextValue = ScatterValue(nextValue); + } + } + Assert.AreEqual(expectedCount, total, "Wrong number of bytes read from entry"); + } + + protected byte ReadByteChecked(Stream stream) + { + var rawValue = stream.ReadByte(); + Assert.IsTrue(rawValue >= 0); + return (byte) rawValue; + } + + protected int ReadInt(Stream stream) + { + return ReadByteChecked(stream) | + (ReadByteChecked(stream) << 8) | + (ReadByteChecked(stream) << 16) | + (ReadByteChecked(stream) << 24); + } + + protected long ReadLong(Stream stream) + { + var result = ReadInt(stream) & 0xffffffff; + return result | (((long) ReadInt(stream)) << 32); + } + + #region MakeZipFile Names + + protected void MakeZipFile(Stream storage, bool isOwner, string[] names, int size, string comment) + { + using (var zOut = new ZipOutputStream(storage)) + { + zOut.IsStreamOwner = isOwner; + zOut.SetComment(comment); + for (var i = 0; i < names.Length; ++i) + { + zOut.PutNextEntry(new ZipEntry(names[i])); + AddKnownDataToEntry(zOut, size); + } + zOut.Close(); + } + } + + protected void MakeZipFile(string name, string[] names, int size, string comment) + { + using (var fs = File.Create(name)) + { + using (var zOut = new ZipOutputStream(fs)) + { + zOut.SetComment(comment); + for (var i = 0; i < names.Length; ++i) + { + zOut.PutNextEntry(new ZipEntry(names[i])); + AddKnownDataToEntry(zOut, size); + } + zOut.Close(); + } + fs.Close(); + } + } + + #endregion + + #region MakeZipFile Entries + + protected void MakeZipFile(string name, string entryNamePrefix, int entries, int size, string comment) + { + using (var fs = File.Create(name)) + { + using (var zOut = new ZipOutputStream(fs)) + { + zOut.SetComment(comment); + for (var i = 0; i < entries; ++i) + { + zOut.PutNextEntry(new ZipEntry(entryNamePrefix + (i + 1))); + AddKnownDataToEntry(zOut, size); + } + } + } + } + + protected void MakeZipFile(Stream storage, bool isOwner, + string entryNamePrefix, int entries, int size, string comment) + { + using (var zOut = new ZipOutputStream(storage)) + { + zOut.IsStreamOwner = isOwner; + zOut.SetComment(comment); + for (var i = 0; i < entries; ++i) + { + zOut.PutNextEntry(new ZipEntry(entryNamePrefix + (i + 1))); + AddKnownDataToEntry(zOut, size); + } + } + } + + #endregion + } + + #endregion + + internal class TestHelper + { + public static void SaveMemoryStream(MemoryStream ms, string fileName) + { + var data = ms.ToArray(); + using (var fs = File.Open(fileName, FileMode.Create, FileAccess.ReadWrite, FileShare.Read)) + { + fs.Write(data, 0, data.Length); + } + } + + public static int CompareDosDateTimes(DateTime l, DateTime r) + { + // Compare dates to dos accuracy... + // Ticks can be different yet all these values are still the same! + var result = l.Year - r.Year; + if (result == 0) + { + result = l.Month - r.Month; + if (result == 0) + { + result = l.Day - r.Day; + if (result == 0) + { + result = l.Hour - r.Hour; + if (result == 0) + { + result = l.Minute - r.Minute; + if (result == 0) + { + result = (l.Second/2) - (r.Second/2); + } + } + } + } + } + + return result; + } + } + + [TestFixture] + public class ZipEntryHandling : ZipBase + { + private void PiecewiseCompare(ZipEntry lhs, ZipEntry rhs) + { + var entryType = typeof (ZipEntry); + var binding = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance; + + var fields = entryType.GetFields(binding); + + Assert.Greater(fields.Length, 8, "Failed to find fields"); + + foreach (var info in fields) + { + var lValue = info.GetValue(lhs); + var rValue = info.GetValue(rhs); + + Assert.AreEqual(lValue, rValue); + } + } + + /// + /// Check that cloned entries are correct. + /// + [Test] + [Category("Zip")] + public void Cloning() + { + long testCrc = 3456; + long testSize = 99874276; + long testCompressedSize = 72347; + var testExtraData = new byte[]{0x00, 0x01, 0x00, 0x02, 0x0EF, 0xFE}; + var testName = "Namu"; + var testFlags = 4567; + long testDosTime = 23434536; + var testMethod = CompressionMethod.Deflated; + + var testComment = "A comment"; + + var source = new ZipEntry(testName); + source.Crc = testCrc; + source.Comment = testComment; + source.Size = testSize; + source.CompressedSize = testCompressedSize; + source.ExtraData = testExtraData; + source.Flags = testFlags; + source.DosTime = testDosTime; + source.CompressionMethod = testMethod; + + var clone = (ZipEntry) source.Clone(); + + // Check values against originals + Assert.AreEqual(testName, clone.Name, "Cloned name mismatch"); + Assert.AreEqual(testCrc, clone.Crc, "Cloned crc mismatch"); + Assert.AreEqual(testComment, clone.Comment, "Cloned comment mismatch"); + Assert.AreEqual(testExtraData, clone.ExtraData, "Cloned Extra data mismatch"); + Assert.AreEqual(testSize, clone.Size, "Cloned size mismatch"); + Assert.AreEqual(testCompressedSize, clone.CompressedSize, "Cloned compressed size mismatch"); + Assert.AreEqual(testFlags, clone.Flags, "Cloned flags mismatch"); + Assert.AreEqual(testDosTime, clone.DosTime, "Cloned DOSTime mismatch"); + Assert.AreEqual(testMethod, clone.CompressionMethod, "Cloned Compression method mismatch"); + + // Check against source + PiecewiseCompare(source, clone); + } + + /// + /// Test that obsolete copy constructor works correctly. + /// + [Test] + [Category("Zip")] + public void Copying() + { + long testCrc = 3456; + long testSize = 99874276; + long testCompressedSize = 72347; + var testExtraData = new byte[]{0x00, 0x01, 0x00, 0x02, 0x0EF, 0xFE}; + var testName = "Namu"; + var testFlags = 4567; + long testDosTime = 23434536; + var testMethod = CompressionMethod.Deflated; + + var testComment = "A comment"; + + var source = new ZipEntry(testName); + source.Crc = testCrc; + source.Comment = testComment; + source.Size = testSize; + source.CompressedSize = testCompressedSize; + source.ExtraData = testExtraData; + source.Flags = testFlags; + source.DosTime = testDosTime; + source.CompressionMethod = testMethod; + +#pragma warning disable 0618 + var clone = new ZipEntry(source); +#pragma warning restore + + PiecewiseCompare(source, clone); + } + + [Test] + [Category("Zip")] + public void DateAndTime() + { + var ze = new ZipEntry("Pok"); + + // -1 is not strictly a valid MS-DOS DateTime value. + // ZipEntry is lenient about handling invalid values. + ze.DosTime = -1; + + Assert.AreEqual(new DateTime(2107, 12, 31, 23, 59, 59), ze.DateTime); + + // 0 is a special value meaning Now. + ze.DosTime = 0; + var diff = DateTime.Now - ze.DateTime; + + // Value == 2 seconds! + ze.DosTime = 1; + Assert.AreEqual(new DateTime(1980, 1, 1, 0, 0, 2), ze.DateTime); + + // Over the limit are set to max. + ze.DateTime = new DateTime(2108, 1, 1); + Assert.AreEqual(new DateTime(2107, 12, 31, 23, 59, 58), ze.DateTime); + + // Under the limit are set to min. + ze.DateTime = new DateTime(1906, 12, 4); + Assert.AreEqual(new DateTime(1980, 1, 1, 0, 0, 0), ze.DateTime); + } + + [Test] + [Category("Zip")] + public void DateTimeSetsDosTime() + { + var ze = new ZipEntry("Pok"); + + var original = ze.DosTime; + + ze.DateTime = new DateTime(1987, 9, 12); + Assert.AreNotEqual(original, ze.DosTime); + Assert.AreEqual(0, TestHelper.CompareDosDateTimes(new DateTime(1987, 9, 12), ze.DateTime)); + } + + /// + /// Setting entry comments to null should be allowed + /// + [Test] + [Category("Zip")] + public void NullEntryComment() + { + var test = new ZipEntry("null"); + test.Comment = null; + } + + /// + /// Entries with null names arent allowed + /// + [Test] + [Category("Zip")] + [ExpectedException(typeof (ArgumentNullException))] + public void NullNameInConstructor() + { + string name = null; + var test = new ZipEntry(name); + } + } + + /// + /// This contains newer tests for stream handling. Much of this is still in GeneralHandling + /// + [TestFixture] + public class StreamHandling : ZipBase + { + private void MustFailRead(Stream s, byte[] buffer, int offset, int count) + { + var exception = false; + try + { + s.Read(buffer, offset, count); + } + catch + { + exception = true; + } + Assert.IsTrue(exception, "Read should fail"); + } + + private void Reader() + { + const int Size = 8192; + var readBytes = 1; + var buffer = new byte[Size]; + + var passifierLevel = readTarget_ - 0x10000000; + var single = inStream_.GetNextEntry(); + + Assert.AreEqual(single.Name, "CantSeek"); + Assert.IsTrue((single.Flags & (int) GeneralBitFlags.Descriptor) != 0); + + while ((readTarget_ > 0) && (readBytes > 0)) + { + var count = Size; + if (count > readTarget_) + { + count = (int) readTarget_; + } + + readBytes = inStream_.Read(buffer, 0, count); + readTarget_ -= readBytes; + + if (readTarget_ <= passifierLevel) + { + Console.WriteLine("Reader {0} bytes remaining", readTarget_); + passifierLevel = readTarget_ - 0x10000000; + } + } + + Assert.IsTrue(window_.IsClosed, "Window should be closed"); + + // This shouldnt read any data but should read the footer + readBytes = inStream_.Read(buffer, 0, 1); + Assert.AreEqual(0, readBytes, "Stream should be empty"); + Assert.AreEqual(0, window_.Length, "Window should be closed"); + inStream_.Close(); + } + + private void WriteTargetBytes() + { + const int Size = 8192; + + var buffer = new byte[Size]; + + while (writeTarget_ > 0) + { + var thisTime = Size; + if (thisTime > writeTarget_) + { + thisTime = (int) writeTarget_; + } + + outStream_.Write(buffer, 0, thisTime); + writeTarget_ -= thisTime; + } + } + + private void Writer() + { + outStream_.PutNextEntry(new ZipEntry("CantSeek")); + WriteTargetBytes(); + outStream_.Close(); + } + + private WindowedStream window_; + private ZipOutputStream outStream_; + private ZipInputStream inStream_; + private long readTarget_; + private long writeTarget_; + + /// + /// Check that base stream is not closed when IsOwner is false; + /// + [Test] + public void BaseClosedAfterFailure() + { + var ms = new MemoryStreamEx(new byte[32]); + + Assert.IsFalse(ms.IsClosed, "Underlying stream should NOT be closed initially"); + var blewUp = false; + try + { + using (var stream = new ZipOutputStream(ms)) + { + Assert.IsTrue(stream.IsStreamOwner, "Should be stream owner by default"); + try + { + stream.PutNextEntry(new ZipEntry("Tiny")); + stream.Write(new byte[32], 0, 32); + } + finally + { + Assert.IsFalse(ms.IsClosed, "Stream should still not be closed."); + stream.Close(); + Assert.Fail("Exception not thrown"); + } + } + } + catch + { + blewUp = true; + } + + Assert.IsTrue(blewUp, "Should have failed to write to stream"); + Assert.IsTrue(ms.IsClosed, "Underlying stream should be closed"); + } + + /// + /// Base stream is closed when IsOwner is true ( default); + /// + [Test] + public void BaseClosedWhenOwner() + { + var ms = new MemoryStreamEx(); + + Assert.IsFalse(ms.IsClosed, "Underlying stream should NOT be closed"); + + using (var stream = new ZipOutputStream(ms)) + { + Assert.IsTrue(stream.IsStreamOwner, "Should be stream owner by default"); + } + + Assert.IsTrue(ms.IsClosed, "Underlying stream should be closed"); + } + + /// + /// Check that base stream is not closed when IsOwner is false; + /// + [Test] + public void BaseNotClosedWhenNotOwner() + { + var ms = new MemoryStreamEx(); + + Assert.IsFalse(ms.IsClosed, "Underlying stream should NOT be closed"); + + using (var stream = new ZipOutputStream(ms)) + { + Assert.IsTrue(stream.IsStreamOwner, "Should be stream owner by default"); + stream.IsStreamOwner = false; + } + Assert.IsFalse(ms.IsClosed, "Underlying stream should still NOT be closed"); + } + + /// + /// Empty zips can be created and read? + /// + [Test] + [Category("Zip")] + public void CreateAndReadEmptyZip() + { + var ms = new MemoryStream(); + var outStream = new ZipOutputStream(ms); + outStream.Finish(); + + ms.Seek(0, SeekOrigin.Begin); + + var inStream = new ZipInputStream(ms); + ZipEntry entry; + while ((entry = inStream.GetNextEntry()) != null) + { + Assert.Fail("No entries should be found in empty zip"); + } + } + + /// + /// Empty zip entries can be created and read? + /// + [Test] + [Category("Zip")] + public void EmptyZipEntries() + { + var ms = new MemoryStream(); + var outStream = new ZipOutputStream(ms); + for (var i = 0; i < 10; ++i) + { + outStream.PutNextEntry(new ZipEntry(i.ToString())); + } + outStream.Finish(); + + ms.Seek(0, SeekOrigin.Begin); + + var inStream = new ZipInputStream(ms); + + var extractCount = 0; + ZipEntry entry; + var decompressedData = new byte[100]; + + while ((entry = inStream.GetNextEntry()) != null) + { + while (true) + { + var numRead = inStream.Read(decompressedData, extractCount, decompressedData.Length); + if (numRead <= 0) + { + break; + } + extractCount += numRead; + } + } + inStream.Close(); + Assert.AreEqual(extractCount, 0, "No data should be read from empty entries"); + } + + /// + /// Check that adding an entry with no data and Zip64 works OK + /// + [Test] + [Category("Zip")] + public void EntryWithNoDataAndZip64() + { + MemoryStream msw = new MemoryStreamWithoutSeek(); + var outStream = new ZipOutputStream(msw); + + outStream.IsStreamOwner = false; + var ze = new ZipEntry("Striped Marlin"); + ze.ForceZip64(); + ze.Size = 0; + outStream.PutNextEntry(ze); + outStream.CloseEntry(); + outStream.Finish(); + outStream.Close(); + + var ms = new MemoryStream(msw.ToArray()); + using (var zf = new ZipFile(ms)) + { + Assert.IsTrue(zf.TestArchive(true)); + } + } + + [Test] + [Category("Zip")] + public void ParameterHandling() + { + var buffer = new byte[10]; + var emptyBuffer = new byte[0]; + + var ms = new MemoryStream(); + var outStream = new ZipOutputStream(ms); + outStream.IsStreamOwner = false; + outStream.PutNextEntry(new ZipEntry("Floyd")); + outStream.Write(buffer, 0, 10); + outStream.Finish(); + + ms.Seek(0, SeekOrigin.Begin); + + var inStream = new ZipInputStream(ms); + var e = inStream.GetNextEntry(); + + MustFailRead(inStream, null, 0, 0); + MustFailRead(inStream, buffer, -1, 1); + MustFailRead(inStream, buffer, 0, 11); + MustFailRead(inStream, buffer, 7, 5); + MustFailRead(inStream, buffer, 0, -1); + + MustFailRead(inStream, emptyBuffer, 0, 1); + + var bytesRead = inStream.Read(buffer, 10, 0); + Assert.AreEqual(0, bytesRead, "Should be able to read zero bytes"); + + bytesRead = inStream.Read(emptyBuffer, 0, 0); + Assert.AreEqual(0, bytesRead, "Should be able to read zero bytes"); + } + + [Test] + [Category("Zip")] + [Category("Long Running")] + public void SingleLargeEntry() + { + window_ = new WindowedStream(0x10000); + outStream_ = new ZipOutputStream(window_); + inStream_ = new ZipInputStream(window_); + + long target = 0x10000000; + readTarget_ = writeTarget_ = target; + + var reader = new Thread(Reader); + reader.Name = "Reader"; + + var writer = new Thread(Writer); + writer.Name = "Writer"; + + var startTime = DateTime.Now; + reader.Start(); + writer.Start(); + + writer.Join(); + reader.Join(); + + var endTime = DateTime.Now; + var span = endTime - startTime; + Console.WriteLine("Time {0} throughput {1} KB/Sec", span, (target/1024)/span.TotalSeconds); + } + + [Test] + [Category("Zip")] + public void WriteThroughput() + { + outStream_ = new ZipOutputStream(new NullStream()); + + var startTime = DateTime.Now; + + long target = 0x10000000; + + writeTarget_ = target; + outStream_.PutNextEntry(new ZipEntry("0")); + WriteTargetBytes(); + + outStream_.Close(); + + var endTime = DateTime.Now; + var span = endTime - startTime; + Console.WriteLine("Time {0} throughput {1} KB/Sec", span, (target/1024)/span.TotalSeconds); + } + + /// + /// Check that Zip64 descriptor is added to an entry OK. + /// + [Test] + [Category("Zip")] + public void Zip64Descriptor() + { + MemoryStream msw = new MemoryStreamWithoutSeek(); + var outStream = new ZipOutputStream(msw); + outStream.UseZip64 = UseZip64.Off; + + outStream.IsStreamOwner = false; + outStream.PutNextEntry(new ZipEntry("StripedMarlin")); + outStream.WriteByte(89); + outStream.Close(); + + var ms = new MemoryStream(msw.ToArray()); + using (var zf = new ZipFile(ms)) + { + Assert.IsTrue(zf.TestArchive(true)); + } + + + msw = new MemoryStreamWithoutSeek(); + outStream = new ZipOutputStream(msw); + outStream.UseZip64 = UseZip64.On; + + outStream.IsStreamOwner = false; + outStream.PutNextEntry(new ZipEntry("StripedMarlin")); + outStream.WriteByte(89); + outStream.Close(); + + ms = new MemoryStream(msw.ToArray()); + using (var zf = new ZipFile(ms)) + { + Assert.IsTrue(zf.TestArchive(true)); + } + } + } + + [TestFixture] + public class NameHandling : ZipBase + { + private void TestFile(ZipNameTransform t, string original, string expected) + { + var transformed = t.TransformFile(original); + Assert.AreEqual(expected, transformed, "Should be equal"); + } + + [Test] + [Category("Zip")] + public void Basic() + { + var t = new ZipNameTransform(); + + TestFile(t, "abcdef", "abcdef"); + TestFile(t, @"\\uncpath\d1\file1", "file1"); + TestFile(t, @"C:\absolute\file2", "absolute/file2"); + + // This is ignored but could be converted to 'file3' + TestFile(t, @"./file3", "./file3"); + + // The following relative paths cant be handled and are ignored + TestFile(t, @"../file3", "../file3"); + TestFile(t, @".../file3", ".../file3"); + + // Trick filenames. + TestFile(t, @".....file3", ".....file3"); + } + + /// + /// Test ZipEntry static file name cleaning methods + /// + [Test] + [Category("Zip")] + public void FilenameCleaning() + { + Assert.AreEqual(0, string.Compare(ZipEntry.CleanName("hello"), "hello")); + Assert.AreEqual(0, string.Compare(ZipEntry.CleanName(@"z:\eccles"), "eccles")); + Assert.AreEqual(0, string.Compare(ZipEntry.CleanName(@"\\server\share\eccles"), "eccles")); + Assert.AreEqual(0, string.Compare(ZipEntry.CleanName(@"\\server\share\dir\eccles"), "dir/eccles")); + } + + [Test] + [Category("Zip")] + public void NameTransforms() + { + INameTransform t = new ZipNameTransform(@"C:\Slippery"); + Assert.AreEqual("Pongo/Directory/", t.TransformDirectory(@"C:\Slippery\Pongo\Directory"), + "Value should be trimmed and converted"); + Assert.AreEqual("PoNgo/Directory/", t.TransformDirectory(@"c:\slipperY\PoNgo\Directory"), + "Trimming should be case insensitive"); + Assert.AreEqual("slippery/Pongo/Directory/", t.TransformDirectory(@"d:\slippery\Pongo\Directory"), + "Trimming should be case insensitive"); + } + + [Test] + [Category("Zip")] + public void PathalogicalNames() + { + var badName = ".*:\\zy3$"; + + Assert.IsFalse(ZipNameTransform.IsValidName(badName)); + + var t = new ZipNameTransform(); + var result = t.TransformFile(badName); + + Assert.IsTrue(ZipNameTransform.IsValidName(result)); + } + } + + /// + /// This class contains test cases for Zip compression and decompression + /// + [TestFixture] + public class GeneralHandling : ZipBase + { + private void AddRandomDataToEntry(ZipOutputStream zipStream, int size) + { + if (size > 0) + { + var data = new byte[size]; + var rnd = new Random(); + rnd.NextBytes(data); + + zipStream.Write(data, 0, data.Length); + } + } + + private void ExerciseZip(CompressionMethod method, int compressionLevel, + int size, string password, bool canSeek) + { + byte[] originalData = null; + var compressedData = MakeInMemoryZip(ref originalData, method, compressionLevel, size, password, canSeek); + + var ms = new MemoryStream(compressedData); + ms.Seek(0, SeekOrigin.Begin); + + using (var inStream = new ZipInputStream(ms)) + { + var decompressedData = new byte[size]; + if (password != null) + { + inStream.Password = password; + } + + var entry2 = inStream.GetNextEntry(); + + if ((entry2.Flags & 8) == 0) + { + Assert.AreEqual(size, entry2.Size, "Entry size invalid"); + } + + var currentIndex = 0; + + if (size > 0) + { + var count = decompressedData.Length; + + while (true) + { + var numRead = inStream.Read(decompressedData, currentIndex, count); + if (numRead <= 0) + { + break; + } + currentIndex += numRead; + count -= numRead; + } + } + + Assert.AreEqual(currentIndex, size, "Original and decompressed data different sizes"); + + if (originalData != null) + { + for (var i = 0; i < originalData.Length; ++i) + { + Assert.AreEqual(decompressedData[i], originalData[i], + "Decompressed data doesnt match original, compression level: " + + compressionLevel); + } + } + } + } + + private string DescribeAttributes(FieldAttributes attributes) + { + var att = string.Empty; + if ((FieldAttributes.Public & attributes) != 0) + { + att = att + "Public,"; + } + + if ((FieldAttributes.Static & attributes) != 0) + { + att = att + "Static,"; + } + + if ((FieldAttributes.Literal & attributes) != 0) + { + att = att + "Literal,"; + } + + if ((FieldAttributes.HasDefault & attributes) != 0) + { + att = att + "HasDefault,"; + } + + if ((FieldAttributes.InitOnly & attributes) != 0) + { + att = att + "InitOnly,"; + } + + if ((FieldAttributes.Assembly & attributes) != 0) + { + att = att + "Assembly,"; + } + + if ((FieldAttributes.FamANDAssem & attributes) != 0) + { + att = att + "FamANDAssembly,"; + } + + if ((FieldAttributes.FamORAssem & attributes) != 0) + { + att = att + "FamORAssembly,"; + } + + if ((FieldAttributes.HasFieldMarshal & attributes) != 0) + { + att = att + "HasFieldMarshal,"; + } + + return att; + } + + private void TestLargeZip(string tempFile, int targetFiles) + { + const int BlockSize = 4096; + + var data = new byte[BlockSize]; + byte nextValue = 0; + for (var i = 0; i < BlockSize; ++i) + { + nextValue = ScatterValue(nextValue); + data[i] = nextValue; + } + + using (var zFile = new ZipFile(tempFile)) + { + Assert.AreEqual(targetFiles, zFile.Count); + var readData = new byte[BlockSize]; + int readIndex; + foreach (ZipEntry ze in zFile) + { + var s = zFile.GetInputStream(ze); + readIndex = 0; + while (readIndex < readData.Length) + { + readIndex += s.Read(readData, readIndex, data.Length - readIndex); + } + + for (var ii = 0; ii < BlockSize; ++ii) + { + Assert.AreEqual(data[ii], readData[ii]); + } + } + zFile.Close(); + } + } + + // [Test] + // [Category("Zip")] + // [Category("CreatesTempFile")] + public void TestLargeZipFile() + { + var tempFile = @"g:\\tmp"; + tempFile = Path.Combine(tempFile, "SharpZipTest.Zip"); + TestLargeZip(tempFile, 8100); + } + + // [Test] + // [Category("Zip")] + // [Category("CreatesTempFile")] + public void MakeLargeZipFile() + { + string tempFile = null; + try + { + // tempFile = Path.GetTempPath(); + tempFile = @"g:\\tmp"; + } + catch (SecurityException) + { + } + + Assert.IsNotNull(tempFile, "No permission to execute this test?"); + + if (tempFile != null) + { + const int blockSize = 4096; + + var data = new byte[blockSize]; + byte nextValue = 0; + for (var i = 0; i < blockSize; ++i) + { + nextValue = ScatterValue(nextValue); + data[i] = nextValue; + } + + tempFile = Path.Combine(tempFile, "SharpZipTest.Zip"); + Console.WriteLine("Starting at {0}", DateTime.Now); + try + { + // MakeZipFile(tempFile, new String[] {"1", "2" }, int.MaxValue, "C1"); + using (var fs = File.Create(tempFile)) + { + var zOut = new ZipOutputStream(fs); + zOut.SetLevel(4); + const int TargetFiles = 8100; + for (var i = 0; i < TargetFiles; ++i) + { + var e = new ZipEntry(i.ToString()); + e.CompressionMethod = CompressionMethod.Stored; + + zOut.PutNextEntry(e); + for (var block = 0; block < 128; ++block) + { + zOut.Write(data, 0, blockSize); + } + } + zOut.Close(); + fs.Close(); + + TestLargeZip(tempFile, TargetFiles); + } + } + finally + { + Console.WriteLine("Starting at {0}", DateTime.Now); + // File.Delete(tempFile); + } + } + } + + private byte[] ZipZeroLength(ISerializable data) + { + var formatter = new XmlFormatter(); + var memStream = new MemoryStream(); + + using (var zipStream = new ZipOutputStream(memStream)) + { + zipStream.PutNextEntry(new ZipEntry("data")); + formatter.Serialize(zipStream, data); + zipStream.CloseEntry(); + zipStream.Close(); + } + + var result = memStream.ToArray(); + memStream.Close(); + + return result; + } + + private ISerializable UnZipZeroLength(byte[] zipped) + { + if (zipped == null) + { + return null; + } + + object result = null; + var formatter = new XmlFormatter(); + var memStream = new MemoryStream(zipped); + using (var zipStream = new ZipInputStream(memStream)) + { + var zipEntry = zipStream.GetNextEntry(); + if (zipEntry != null) + { + result = formatter.Deserialize(zipStream); + } + zipStream.Close(); + } + memStream.Close(); + + return (ISerializable)result; + } + + private void CheckNameConversion(string toCheck) + { + var intermediate = ZipConstants.ConvertToArray(toCheck); + var final = ZipConstants.ConvertToString(intermediate); + + Assert.AreEqual(toCheck, final, "Expected identical result"); + } + + /// + /// Adding an entry after the stream has Finished should fail + /// + [Test] + [Category("Zip")] + [ExpectedException(typeof (InvalidOperationException))] + public void AddEntryAfterFinish() + { + var ms = new MemoryStream(); + var s = new ZipOutputStream(ms); + s.Finish(); + s.PutNextEntry(new ZipEntry("dummyfile.tst")); + } + + /// + /// Basic compress/decompress test, no encryption, size is important here as its big enough + /// to force multiple write to output which was a problem... + /// + [Test] + [Category("Zip")] + public void BasicDeflated() + { + for (var i = 0; i <= 9; ++i) + { + ExerciseZip(CompressionMethod.Deflated, i, 50000, null, true); + } + } + + /// + /// Basic compress/decompress test, with encryption, size is important here as its big enough + /// to force multiple write to output which was a problem... + /// + [Test] + [Category("Zip")] + public void BasicDeflatedEncrypted() + { + for (var i = 0; i <= 9; ++i) + { + ExerciseZip(CompressionMethod.Deflated, i, 50000, "Rosebud", true); + } + } + + /// + /// Basic compress/decompress test, with encryption, size is important here as its big enough + /// to force multiple write to output which was a problem... + /// + [Test] + [Category("Zip")] + public void BasicDeflatedEncryptedNonSeekable() + { + for (var i = 0; i <= 9; ++i) + { + ExerciseZip(CompressionMethod.Deflated, i, 50000, "Rosebud", false); + } + } + + /// + /// Basic compress/decompress test, no encryption, size is important here as its big enough + /// to force multiple write to output which was a problem... + /// + [Test] + [Category("Zip")] + public void BasicDeflatedNonSeekable() + { + for (var i = 0; i <= 9; ++i) + { + ExerciseZip(CompressionMethod.Deflated, i, 50000, null, false); + } + } + + /// + /// Basic stored file test, no encryption. + /// + [Test] + [Category("Zip")] + public void BasicStored() + { + ExerciseZip(CompressionMethod.Stored, 0, 50000, null, true); + } + + /// + /// Basic stored file test, with encryption. + /// + [Test] + [Category("Zip")] + public void BasicStoredEncrypted() + { + ExerciseZip(CompressionMethod.Stored, 0, 50000, "Rosebud", true); + } + + /// + /// Basic stored file test, with encryption, non seekable output. + /// NOTE this gets converted deflate level 0 + /// + [Test] + [Category("Zip")] + public void BasicStoredEncryptedNonSeekable() + { + ExerciseZip(CompressionMethod.Stored, 0, 50000, "Rosebud", false); + } + + /// + /// Basic stored file test, no encryption, non seekable output + /// NOTE this gets converted to deflate level 0 + /// + [Test] + [Category("Zip")] + public void BasicStoredNonSeekable() + { + ExerciseZip(CompressionMethod.Stored, 0, 50000, null, false); + } + + /// + /// Check that simply closing ZipOutputStream finishes the zip correctly + /// + [Test] + [Category("Zip")] + public void CloseOnlyHandled() + { + var ms = new MemoryStream(); + var s = new ZipOutputStream(ms); + s.PutNextEntry(new ZipEntry("dummyfile.tst")); + s.Close(); + + Assert.IsTrue(s.IsFinished, "Output stream should be finished"); + } + + /// + /// Check that GetNextEntry can handle the situation where part of the entry data has been read + /// before the call is made. ZipInputStream.CloseEntry wasnt handling this at all. + /// + [Test] + [Category("Zip")] + public void ExerciseGetNextEntry() + { + var compressedData = MakeInMemoryZip( + true, + new RuntimeInfo(CompressionMethod.Deflated, 9, 50, null, true), + new RuntimeInfo(CompressionMethod.Deflated, 2, 50, null, true), + new RuntimeInfo(CompressionMethod.Deflated, 9, 50, null, true), + new RuntimeInfo(CompressionMethod.Deflated, 2, 50, null, true), + new RuntimeInfo(null, true), + new RuntimeInfo(CompressionMethod.Stored, 2, 50, null, true), + new RuntimeInfo(CompressionMethod.Deflated, 9, 50, null, true) + ); + + var ms = new MemoryStream(compressedData); + ms.Seek(0, SeekOrigin.Begin); + + using (var inStream = new ZipInputStream(ms)) + { + var buffer = new byte[10]; + + ZipEntry entry; + while ((entry = inStream.GetNextEntry()) != null) + { + // Read a portion of the data, so GetNextEntry has some work to do. + inStream.Read(buffer, 0, 10); + } + } + } + + /// + /// Invalid passwords should be detected early if possible, non seekable stream + /// + [Test] + [Category("Zip")] + [ExpectedException(typeof (ZipException))] + public void InvalidPasswordNonSeekable() + { + byte[] originalData = null; + var compressedData = MakeInMemoryZip(ref originalData, CompressionMethod.Deflated, 3, 500, "Hola", false); + + var ms = new MemoryStream(compressedData); + ms.Seek(0, SeekOrigin.Begin); + + var buf2 = new byte[originalData.Length]; + var pos = 0; + + var inStream = new ZipInputStream(ms); + inStream.Password = "redhead"; + + var entry2 = inStream.GetNextEntry(); + + while (true) + { + var numRead = inStream.Read(buf2, pos, buf2.Length); + if (numRead <= 0) + { + break; + } + pos += numRead; + } + } + + /// + /// Invalid passwords should be detected early if possible, seekable stream + /// + [Test] + [Category("Zip")] + [ExpectedException(typeof (ZipException))] + public void InvalidPasswordSeekable() + { + byte[] originalData = null; + var compressedData = MakeInMemoryZip(ref originalData, CompressionMethod.Deflated, 3, 500, "Hola", true); + + var ms = new MemoryStream(compressedData); + ms.Seek(0, SeekOrigin.Begin); + + var buf2 = new byte[originalData.Length]; + var pos = 0; + + var inStream = new ZipInputStream(ms); + inStream.Password = "redhead"; + + var entry2 = inStream.GetNextEntry(); + + while (true) + { + var numRead = inStream.Read(buf2, pos, buf2.Length); + if (numRead <= 0) + { + break; + } + pos += numRead; + } + } + + [Test] + [Category("Zip")] + public void MixedEncryptedAndPlain() + { + var compressedData = MakeInMemoryZip(true, + new RuntimeInfo(CompressionMethod.Deflated, 2, 1, null, true), + new RuntimeInfo(CompressionMethod.Deflated, 9, 1, "1234", false), + new RuntimeInfo(CompressionMethod.Deflated, 2, 1, null, false), + new RuntimeInfo(CompressionMethod.Deflated, 9, 1, "1234", true) + ); + + var ms = new MemoryStream(compressedData); + using (var inStream = new ZipInputStream(ms)) + { + inStream.Password = "1234"; + + var extractCount = 0; + var extractIndex = 0; + ZipEntry entry; + var decompressedData = new byte[100]; + + while ((entry = inStream.GetNextEntry()) != null) + { + extractCount = decompressedData.Length; + extractIndex = 0; + while (true) + { + var numRead = inStream.Read(decompressedData, extractIndex, extractCount); + if (numRead <= 0) + { + break; + } + extractIndex += numRead; + extractCount -= numRead; + } + } + inStream.Close(); + } + } + + [Test] + [Category("Zip")] + public void NameConversion() + { + CheckNameConversion("Hello"); + CheckNameConversion("a/b/c/d/e/f/g/h/SomethingLikeAnArchiveName.txt"); + } + + [Test] + [Category("Zip")] + [Category("CreatesTempFile")] + public void PartialStreamClosing() + { + var tempFile = GetTempFilePath(); + Assert.IsNotNull(tempFile, "No permission to execute this test?"); + + if (tempFile != null) + { + tempFile = Path.Combine(tempFile, "SharpZipTest.Zip"); + MakeZipFile(tempFile, new[]{"Farriera", "Champagne", "Urban myth"}, 10, "Aha"); + + using (var zipFile = new ZipFile(tempFile)) + { + var stream = zipFile.GetInputStream(0); + stream.Close(); + + stream = zipFile.GetInputStream(1); + zipFile.Close(); + } + File.Delete(tempFile); + } + } + + /// + /// Regression test for problem where the password check would fail for an archive whose + /// date was updated from the extra data. + /// This applies to archives where the crc wasnt know at the time of encryption. + /// The date of the entry is used in its place. + /// + [Test] + [Category("Zip")] + public void PasswordCheckingWithDateInExtraData() + { + var ms = new MemoryStream(); + var checkTime = new DateTime(2010, 10, 16, 0, 3, 28); + + using (var zos = new ZipOutputStream(ms)) + { + zos.IsStreamOwner = false; + zos.Password = "secret"; + var ze = new ZipEntry("uno"); + ze.DateTime = new DateTime(1998, 6, 5, 4, 3, 2); + + var zed = new ZipExtraData(); + + zed.StartNewEntry(); + + zed.AddData(1); + + var delta = checkTime.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime(); + var seconds = (int) delta.TotalSeconds; + zed.AddLeInt(seconds); + zed.AddNewEntry(0x5455); + + ze.ExtraData = zed.GetEntryData(); + zos.PutNextEntry(ze); + zos.WriteByte(54); + } + + ms.Position = 0; + using (var zis = new ZipInputStream(ms)) + { + zis.Password = "secret"; + var uno = zis.GetNextEntry(); + var theByte = (byte) zis.ReadByte(); + Assert.AreEqual(54, theByte); + Assert.AreEqual(-1, zis.ReadByte()); + Assert.AreEqual(checkTime, uno.DateTime); + } + } + + /// + /// Test for handling of serialized reference and value objects. + /// + [Test] + [Category("Zip")] + public void SerializedObject() + { + var sampleDateTime = new SerializableDateTime(1853, 8, 26); + ISerializable data = sampleDateTime; + + var zipped = ZipZeroLength(data); + var rawObject = UnZipZeroLength(zipped); + + var returnedDateTime = (SerializableDateTime) rawObject; + + Assert.AreEqual(sampleDateTime, returnedDateTime); + + var sampleString = new SerializableString("Mary had a giant cat its ears were green and smelly"); + zipped = ZipZeroLength(sampleString); + + rawObject = UnZipZeroLength(zipped); + + var returnedString = rawObject as SerializableString; + + Assert.AreEqual(sampleString, returnedString); + } + + /// + /// Test for handling of zero lengths in compression using a formatter which + /// will request reads of zero length... + /// + [Test] + [Category("Zip")] + public void SerializedObjectZeroLength() + { +// object data = new SerializableByteArray[0]; +// // This wont be zero length here due to serialisation. +// var zipped = ZipZeroLength(data); +// var o = UnZipZeroLength(zipped); +// +// var returned = o as byte[]; +// +// Assert.IsNotNull(returned, "Expected a byte[]"); +// Assert.AreEqual(0, returned.Length); + } + + /// + /// Test setting file commment to a value that is too long + /// + [Test] + [Category("Zip")] + [ExpectedException(typeof (ArgumentOutOfRangeException))] + public void SetCommentOversize() + { + var ms = new MemoryStream(); + var s = new ZipOutputStream(ms); + s.SetComment(new String('A', 65536)); + } + + [Test] + [Category("Zip")] + public void SkipEncryptedEntriesWithoutSettingPassword() + { + var compressedData = MakeInMemoryZip(true, + new RuntimeInfo("1234", true), + new RuntimeInfo(CompressionMethod.Deflated, 2, 1, null, true), + new RuntimeInfo(CompressionMethod.Deflated, 9, 1, "1234", true), + new RuntimeInfo(CompressionMethod.Deflated, 2, 1, null, true), + new RuntimeInfo(null, true), + new RuntimeInfo(CompressionMethod.Stored, 2, 1, "4321", true), + new RuntimeInfo(CompressionMethod.Deflated, 9, 1, "1234", true) + ); + + var ms = new MemoryStream(compressedData); + var inStream = new ZipInputStream(ms); + + ZipEntry entry; + while ((entry = inStream.GetNextEntry()) != null) + { + } + + inStream.Close(); + } + + /// + /// Check that when the output stream cannot seek that requests for stored + /// are in fact converted to defalted level 0 + /// + [Test] + [Category("Zip")] + public void StoredNonSeekableConvertToDeflate() + { + var ms = new MemoryStreamWithoutSeek(); + + var outStream = new ZipOutputStream(ms); + outStream.SetLevel(8); + Assert.AreEqual(8, outStream.GetLevel(), "Compression level invalid"); + + var entry = new ZipEntry("1.tst"); + entry.CompressionMethod = CompressionMethod.Stored; + outStream.PutNextEntry(entry); + Assert.AreEqual(0, outStream.GetLevel(), "Compression level invalid"); + + AddRandomDataToEntry(outStream, 100); + entry = new ZipEntry("2.tst"); + entry.CompressionMethod = CompressionMethod.Deflated; + outStream.PutNextEntry(entry); + Assert.AreEqual(8, outStream.GetLevel(), "Compression level invalid"); + AddRandomDataToEntry(outStream, 100); + + outStream.Close(); + } + + /// + /// Check that adding more than the 2.0 limit for entry numbers is detected and handled + /// + [Test] + [Category("Zip")] + [Category("Long Running")] + public void Stream_64KPlusOneEntries() + { + const int target = 65537; + var ms = new MemoryStream(); + using (var s = new ZipOutputStream(ms)) + { + for (var i = 0; i < target; ++i) + { + s.PutNextEntry(new ZipEntry("dummyfile.tst")); + } + + s.Finish(); + ms.Seek(0, SeekOrigin.Begin); + using (var zipFile = new ZipFile(ms)) + { + Assert.AreEqual(target, zipFile.Count, "Incorrect number of entries stored"); + } + } + } + + /// + /// Check that Unicode filename support works. + /// + [Test] + [Category("Zip")] + public void Stream_UnicodeEntries() + { + var ms = new MemoryStream(); + using (var s = new ZipOutputStream(ms)) + { + s.IsStreamOwner = false; + + var sampleName = "\u03A5\u03d5\u03a3"; + var sample = new ZipEntry(sampleName); + sample.IsUnicodeText = true; + s.PutNextEntry(sample); + + s.Finish(); + ms.Seek(0, SeekOrigin.Begin); + + using (var zis = new ZipInputStream(ms)) + { + var ze = zis.GetNextEntry(); + Assert.AreEqual(sampleName, ze.Name, "Expected name to match original"); + Assert.IsTrue(ze.IsUnicodeText, "Expected IsUnicodeText flag to be set"); + } + } + } + + [Test] + [Category("Zip")] + public void UnicodeNameConversion() + { + var sample = "Hello world"; + + byte[] rawData = Encoding.UTF8.GetBytes(sample); + + var converted = ZipConstants.ConvertToStringExt(0, rawData); + Assert.AreEqual(sample, converted); + + converted = ZipConstants.ConvertToStringExt((int) GeneralBitFlags.UnicodeText, rawData); + Assert.AreEqual(sample, converted); + + // This time use some greek characters + sample = "\u03A5\u03d5\u03a3"; + rawData = Encoding.UTF8.GetBytes(sample); + + converted = ZipConstants.ConvertToStringExt((int) GeneralBitFlags.UnicodeText, rawData); + Assert.AreEqual(sample, converted); + } + + [Test] + [Category("Zip")] + [ExpectedException(typeof (NotSupportedException))] + public void UnsupportedCompressionMethod() + { + var ze = new ZipEntry("HumblePie"); + var type = typeof (CompressionMethod); + // System.Reflection.FieldInfo[] info = type.GetFields(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); + var info = type.GetFields(); + + var aValue = CompressionMethod.Deflated; + for (var i = 0; i < info.Length; i++) + { + var attributes = info[i].Attributes; + DescribeAttributes(attributes); + if ((FieldAttributes.Static & attributes) != 0) + { + var obj = info[i].GetValue(null); + var bb = obj.ToString(); + if (bb == null) + { + throw new Exception(); + } + } + var x = string.Format("The value of {0} is: {1}", + info[i].Name, info[i].GetValue(aValue)); + } + + ze.CompressionMethod = CompressionMethod.BZip2; + } + } + + [TestFixture] + public class ZipExtraDataHandling : ZipBase + { + [Test] + [Category("Zip")] + public void BasicOperations() + { + var zed = new ZipExtraData(null); + Assert.AreEqual(0, zed.Length); + + zed = new ZipExtraData(new byte[]{1, 0, 0, 0}); + Assert.AreEqual(4, zed.Length, "A length should be 4"); + + var zed2 = new ZipExtraData(); + Assert.AreEqual(0, zed2.Length); + + zed2.AddEntry(1, new byte[]{}); + + var data = zed.GetEntryData(); + for (var i = 0; i < data.Length; ++i) + { + Assert.AreEqual(zed2.GetEntryData()[i], data[i]); + } + + Assert.AreEqual(4, zed2.Length, "A1 length should be 4"); + + var findResult = zed.Find(2); + Assert.IsFalse(findResult, "A - Shouldnt find tag 2"); + + findResult = zed.Find(1); + Assert.IsTrue(findResult, "A - Should find tag 1"); + Assert.AreEqual(0, zed.ValueLength, "A- Length of entry should be 0"); + Assert.AreEqual(-1, zed.ReadByte()); + Assert.AreEqual(0, zed.GetStreamForTag(1).Length, "A - Length of stream should be 0"); + + zed = new ZipExtraData(new byte[]{1, 0, 3, 0, 1, 2, 3}); + Assert.AreEqual(7, zed.Length, "Expected a length of 7"); + + findResult = zed.Find(1); + Assert.IsTrue(findResult, "B - Should find tag 1"); + Assert.AreEqual(3, zed.ValueLength, "B - Length of entry should be 3"); + for (var i = 1; i <= 3; ++i) + { + Assert.AreEqual(i, zed.ReadByte()); + } + Assert.AreEqual(-1, zed.ReadByte()); + + var s = zed.GetStreamForTag(1); + Assert.AreEqual(3, s.Length, "B.1 Stream length should be 3"); + for (var i = 1; i <= 3; ++i) + { + Assert.AreEqual(i, s.ReadByte()); + } + Assert.AreEqual(-1, s.ReadByte()); + + zed = new ZipExtraData(new byte[]{1, 0, 3, 0, 1, 2, 3, 2, 0, 1, 0, 56}); + Assert.AreEqual(12, zed.Length, "Expected a length of 12"); + + findResult = zed.Find(1); + Assert.IsTrue(findResult, "C.1 - Should find tag 1"); + Assert.AreEqual(3, zed.ValueLength, "C.1 - Length of entry should be 3"); + for (var i = 1; i <= 3; ++i) + { + Assert.AreEqual(i, zed.ReadByte()); + } + Assert.AreEqual(-1, zed.ReadByte()); + + findResult = zed.Find(2); + Assert.IsTrue(findResult, "C.2 - Should find tag 2"); + Assert.AreEqual(1, zed.ValueLength, "C.2 - Length of entry should be 1"); + Assert.AreEqual(56, zed.ReadByte()); + Assert.AreEqual(-1, zed.ReadByte()); + + s = zed.GetStreamForTag(2); + Assert.AreEqual(1, s.Length); + Assert.AreEqual(56, s.ReadByte()); + Assert.AreEqual(-1, s.ReadByte()); + + zed = new ZipExtraData(); + zed.AddEntry(7, new byte[]{33, 44, 55}); + findResult = zed.Find(7); + Assert.IsTrue(findResult, "Add.1 should find new tag"); + Assert.AreEqual(3, zed.ValueLength, "Add.1 length should be 3"); + Assert.AreEqual(33, zed.ReadByte()); + Assert.AreEqual(44, zed.ReadByte()); + Assert.AreEqual(55, zed.ReadByte()); + Assert.AreEqual(-1, zed.ReadByte()); + + zed.AddEntry(7, null); + findResult = zed.Find(7); + Assert.IsTrue(findResult, "Add.2 should find new tag"); + Assert.AreEqual(0, zed.ValueLength, "Add.2 length should be 0"); + + zed.StartNewEntry(); + zed.AddData(0xae); + zed.AddNewEntry(55); + + findResult = zed.Find(55); + Assert.IsTrue(findResult, "Add.3 should find new tag"); + Assert.AreEqual(1, zed.ValueLength, "Add.3 length should be 1"); + Assert.AreEqual(0xae, zed.ReadByte()); + Assert.AreEqual(-1, zed.ReadByte()); + + zed = new ZipExtraData(); + zed.StartNewEntry(); + zed.AddLeLong(0); + zed.AddLeLong(-4); + zed.AddLeLong(-1); + zed.AddLeLong(long.MaxValue); + zed.AddLeLong(long.MinValue); + zed.AddLeLong(0x123456789ABCDEF0); + zed.AddLeLong(unchecked((long) 0xFEDCBA9876543210)); + zed.AddNewEntry(567); + + s = zed.GetStreamForTag(567); + var longValue = ReadLong(s); + Assert.AreEqual(longValue, zed.ReadLong(), "Read/stream mismatch"); + Assert.AreEqual(0, longValue, "Expected long value of zero"); + + longValue = ReadLong(s); + Assert.AreEqual(longValue, zed.ReadLong(), "Read/stream mismatch"); + Assert.AreEqual(-4, longValue, "Expected long value of -4"); + + longValue = ReadLong(s); + Assert.AreEqual(longValue, zed.ReadLong(), "Read/stream mismatch"); + Assert.AreEqual(-1, longValue, "Expected long value of -1"); + + longValue = ReadLong(s); + Assert.AreEqual(longValue, zed.ReadLong(), "Read/stream mismatch"); + Assert.AreEqual(long.MaxValue, longValue, "Expected long value of MaxValue"); + + longValue = ReadLong(s); + Assert.AreEqual(longValue, zed.ReadLong(), "Read/stream mismatch"); + Assert.AreEqual(long.MinValue, longValue, "Expected long value of MinValue"); + + longValue = ReadLong(s); + Assert.AreEqual(longValue, zed.ReadLong(), "Read/stream mismatch"); + Assert.AreEqual(0x123456789abcdef0, longValue, "Expected long value of MinValue"); + + longValue = ReadLong(s); + Assert.AreEqual(longValue, zed.ReadLong(), "Read/stream mismatch"); + Assert.AreEqual(unchecked((long) 0xFEDCBA9876543210), longValue, "Expected long value of MinValue"); + } + + [Test] + [Category("Zip")] + public void Deleting() + { + var zed = new ZipExtraData(); + Assert.AreEqual(0, zed.Length); + + // Tag 1 Totoal length 10 + zed.AddEntry(1, new byte[]{10, 11, 12, 13, 14, 15}); + Assert.AreEqual(10, zed.Length, "Length should be 10"); + Assert.AreEqual(10, zed.GetEntryData().Length, "Data length should be 10"); + + // Tag 2 total length 9 + zed.AddEntry(2, new byte[]{20, 21, 22, 23, 24}); + Assert.AreEqual(19, zed.Length, "Length should be 19"); + Assert.AreEqual(19, zed.GetEntryData().Length, "Data length should be 19"); + + // Tag 3 Total Length 6 + zed.AddEntry(3, new byte[]{30, 31}); + Assert.AreEqual(25, zed.Length, "Length should be 25"); + Assert.AreEqual(25, zed.GetEntryData().Length, "Data length should be 25"); + + zed.Delete(2); + Assert.AreEqual(16, zed.Length, "Length should be 16"); + Assert.AreEqual(16, zed.GetEntryData().Length, "Data length should be 16"); + + // Tag 2 total length 9 + zed.AddEntry(2, new byte[]{20, 21, 22, 23, 24}); + Assert.AreEqual(25, zed.Length, "Length should be 25"); + Assert.AreEqual(25, zed.GetEntryData().Length, "Data length should be 25"); + + zed.AddEntry(3, null); + Assert.AreEqual(23, zed.Length, "Length should be 23"); + Assert.AreEqual(23, zed.GetEntryData().Length, "Data length should be 23"); + } + + [Test] + [Category("Zip")] + public void ExceedSize() + { + var zed = new ZipExtraData(); + var buffer = new byte[65506]; + zed.AddEntry(1, buffer); + Assert.AreEqual(65510, zed.Length); + zed.AddEntry(2, new byte[21]); + Assert.AreEqual(65535, zed.Length); + + var caught = false; + try + { + zed.AddEntry(3, null); + } + catch + { + caught = true; + } + Assert.IsTrue(caught, "Expected an exception when max size exceeded"); + Assert.AreEqual(65535, zed.Length); + + zed.Delete(2); + Assert.AreEqual(65510, zed.Length); + + caught = false; + try + { + zed.AddEntry(2, new byte[22]); + } + catch + { + caught = true; + } + Assert.IsTrue(caught, "Expected an exception when max size exceeded"); + Assert.AreEqual(65510, zed.Length); + } + + /// + /// Extra data for separate entries should be unique to that entry + /// + [Test] + [Category("Zip")] + public void IsDataUnique() + { + var a = new ZipEntry("Basil"); + var extra = new byte[4]; + extra[0] = 27; + a.ExtraData = extra; + + var b = (ZipEntry) a.Clone(); + b.ExtraData[0] = 89; + Assert.IsTrue(b.ExtraData[0] != a.ExtraData[0], + "Extra data not unique " + b.ExtraData[0] + " " + a.ExtraData[0]); + + var c = (ZipEntry) a.Clone(); + c.ExtraData[0] = 45; + Assert.IsTrue(a.ExtraData[0] != c.ExtraData[0], + "Extra data not unique " + a.ExtraData[0] + " " + c.ExtraData[0]); + } + + [Test] + [Category("Zip")] + public void ReadOverrunInt() + { + var zed = new ZipExtraData(new byte[]{1, 0, 0, 0}); + Assert.AreEqual(4, zed.Length, "Length should be 4"); + Assert.IsTrue(zed.Find(1), "Should find tag 1"); + + // Empty Tag + var exceptionCaught = false; + try + { + zed.ReadInt(); + } + catch (ZipException) + { + exceptionCaught = true; + } + Assert.IsTrue(exceptionCaught, "Expected EOS exception"); + + // three bytes + zed = new ZipExtraData(new byte[]{1, 0, 3, 0, 1, 2, 3}); + Assert.IsTrue(zed.Find(1), "Should find tag 1"); + + exceptionCaught = false; + try + { + zed.ReadInt(); + } + catch (ZipException) + { + exceptionCaught = true; + } + Assert.IsTrue(exceptionCaught, "Expected EOS exception"); + + zed = new ZipExtraData(new byte[]{1, 0, 7, 0, 1, 2, 3, 4, 5, 6, 7}); + Assert.IsTrue(zed.Find(1), "Should find tag 1"); + + zed.ReadInt(); + + exceptionCaught = false; + try + { + zed.ReadInt(); + } + catch (ZipException) + { + exceptionCaught = true; + } + Assert.IsTrue(exceptionCaught, "Expected EOS exception"); + } + + [Test] + [Category("Zip")] + public void ReadOverrunLong() + { + var zed = new ZipExtraData(new byte[]{1, 0, 0, 0}); + Assert.AreEqual(4, zed.Length, "Length should be 4"); + Assert.IsTrue(zed.Find(1), "Should find tag 1"); + + // Empty Tag + var exceptionCaught = false; + try + { + zed.ReadLong(); + } + catch (ZipException) + { + exceptionCaught = true; + } + Assert.IsTrue(exceptionCaught, "Expected EOS exception"); + + // seven bytes + zed = new ZipExtraData(new byte[]{1, 0, 7, 0, 1, 2, 3, 4, 5, 6, 7}); + Assert.IsTrue(zed.Find(1), "Should find tag 1"); + + exceptionCaught = false; + try + { + zed.ReadLong(); + } + catch (ZipException) + { + exceptionCaught = true; + } + Assert.IsTrue(exceptionCaught, "Expected EOS exception"); + + zed = new ZipExtraData(new byte[]{1, 0, 15, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}); + Assert.IsTrue(zed.Find(1), "Should find tag 1"); + + zed.ReadLong(); + + exceptionCaught = false; + try + { + zed.ReadLong(); + } + catch (ZipException) + { + exceptionCaught = true; + } + Assert.IsTrue(exceptionCaught, "Expected EOS exception"); + } + + [Test] + [Category("Zip")] + public void ReadOverrunShort() + { + var zed = new ZipExtraData(new byte[]{1, 0, 0, 0}); + Assert.AreEqual(4, zed.Length, "Length should be 4"); + Assert.IsTrue(zed.Find(1), "Should find tag 1"); + + // Empty Tag + var exceptionCaught = false; + try + { + zed.ReadShort(); + } + catch (ZipException) + { + exceptionCaught = true; + } + Assert.IsTrue(exceptionCaught, "Expected EOS exception"); + + // Single byte + zed = new ZipExtraData(new byte[]{1, 0, 1, 0, 1}); + Assert.IsTrue(zed.Find(1), "Should find tag 1"); + + exceptionCaught = false; + try + { + zed.ReadShort(); + } + catch (ZipException) + { + exceptionCaught = true; + } + Assert.IsTrue(exceptionCaught, "Expected EOS exception"); + + zed = new ZipExtraData(new byte[]{1, 0, 2, 0, 1, 2}); + Assert.IsTrue(zed.Find(1), "Should find tag 1"); + + zed.ReadShort(); + + exceptionCaught = false; + try + { + zed.ReadShort(); + } + catch (ZipException) + { + exceptionCaught = true; + } + Assert.IsTrue(exceptionCaught, "Expected EOS exception"); + } + + [Test] + [Category("Zip")] + public void Skipping() + { + var zed = new ZipExtraData(new byte[]{1, 0, 7, 0, 1, 2, 3, 4, 5, 6, 7}); + Assert.AreEqual(11, zed.Length, "Length should be 11"); + Assert.IsTrue(zed.Find(1), "Should find tag 1"); + + Assert.AreEqual(7, zed.UnreadCount); + Assert.AreEqual(4, zed.CurrentReadIndex); + + zed.ReadByte(); + Assert.AreEqual(6, zed.UnreadCount); + Assert.AreEqual(5, zed.CurrentReadIndex); + + zed.Skip(1); + Assert.AreEqual(5, zed.UnreadCount); + Assert.AreEqual(6, zed.CurrentReadIndex); + + zed.Skip(-1); + Assert.AreEqual(6, zed.UnreadCount); + Assert.AreEqual(5, zed.CurrentReadIndex); + + zed.Skip(6); + Assert.AreEqual(0, zed.UnreadCount); + Assert.AreEqual(11, zed.CurrentReadIndex); + + var exceptionCaught = false; + + try + { + zed.Skip(1); + } + catch (ZipException) + { + exceptionCaught = true; + } + Assert.IsTrue(exceptionCaught, "Should fail to skip past end"); + + Assert.AreEqual(0, zed.UnreadCount); + Assert.AreEqual(11, zed.CurrentReadIndex); + + zed.Skip(-7); + Assert.AreEqual(7, zed.UnreadCount); + Assert.AreEqual(4, zed.CurrentReadIndex); + + try + { + zed.Skip(-1); + } + catch (ZipException) + { + exceptionCaught = true; + } + Assert.IsTrue(exceptionCaught, "Should fail to skip before beginning"); + } + + [Test] + [Category("Zip")] + public void TaggedDataHandling() + { + var tagData = new NTTaggedData(); + var modTime = tagData.LastModificationTime; + var rawData = tagData.GetData(); + tagData.LastModificationTime = tagData.LastModificationTime + TimeSpan.FromSeconds(40); + tagData.SetData(rawData, 0, rawData.Length); + Assert.AreEqual(10, tagData.TagID, "TagID mismatch"); + Assert.AreEqual(modTime, tagData.LastModificationTime, "NT Mod time incorrect"); + + tagData.CreateTime = DateTime.FromFileTimeUtc(0); + tagData.LastAccessTime = new DateTime(9999, 12, 31, 23, 59, 59); + rawData = tagData.GetData(); + + var unixData = new ExtendedUnixData(); + modTime = unixData.ModificationTime; + unixData.ModificationTime = modTime; // Ensure flag is set. + + rawData = unixData.GetData(); + unixData.ModificationTime += TimeSpan.FromSeconds(100); + unixData.SetData(rawData, 0, rawData.Length); + Assert.AreEqual(0x5455, unixData.TagID, "TagID mismatch"); + Assert.AreEqual(modTime, unixData.ModificationTime, "Unix mod time incorrect"); + } + + [Test] + [Category("Zip")] + public void UnreadCountValid() + { + var zed = new ZipExtraData(new byte[]{1, 0, 0, 0}); + Assert.AreEqual(4, zed.Length, "Length should be 4"); + Assert.IsTrue(zed.Find(1), "Should find tag 1"); + Assert.AreEqual(0, zed.UnreadCount); + + // seven bytes + zed = new ZipExtraData(new byte[]{1, 0, 7, 0, 1, 2, 3, 4, 5, 6, 7}); + Assert.IsTrue(zed.Find(1), "Should find tag 1"); + + for (var i = 0; i < 7; ++i) + { + Assert.AreEqual(7 - i, zed.UnreadCount); + zed.ReadByte(); + } + + zed.ReadByte(); + Assert.AreEqual(0, zed.UnreadCount); + } + } + + [TestFixture] + public class FastZipHandling : ZipBase + { + private const string ZipTempDir = "SharpZipLibTest"; + + private void EnsureTestDirectoryIsEmpty(string baseDir) + { + var name = Path.Combine(baseDir, ZipTempDir); + + if (Directory.Exists(name)) + { + Directory.Delete(name, true); + } + + Directory.CreateDirectory(name); + } + + [Test] + [Category("Zip")] + [Category("CreatesTempFile")] + public void Basics() + { + const string tempName1 = "a.dat"; + + var target = new MemoryStream(); + + var tempFilePath = GetTempFilePath(); + Assert.IsNotNull(tempFilePath, "No permission to execute this test?"); + + var addFile = Path.Combine(tempFilePath, tempName1); + MakeTempFile(addFile, 1); + + try + { + var fastZip = new FastZip(); + fastZip.CreateZip(target, tempFilePath, false, @"a\.dat", null); + + var archive = new MemoryStream(target.ToArray()); + using (var zf = new ZipFile(archive)) + { + Assert.AreEqual(1, zf.Count); + var entry = zf[0]; + Assert.AreEqual(tempName1, entry.Name); + Assert.AreEqual(1, entry.Size); + Assert.IsTrue(zf.TestArchive(true)); + + zf.Close(); + } + } + finally + { + File.Delete(tempName1); + } + } + + [Test] + [Category("Zip")] + public void Encryption() + { + const string tempName1 = "a.dat"; + + var target = new MemoryStream(); + + var tempFilePath = GetTempFilePath(); + Assert.IsNotNull(tempFilePath, "No permission to execute this test?"); + + var addFile = Path.Combine(tempFilePath, tempName1); + MakeTempFile(addFile, 1); + + try + { + var fastZip = new FastZip(); + fastZip.Password = "Ahoy"; + + fastZip.CreateZip(target, tempFilePath, false, @"a\.dat", null); + + var archive = new MemoryStream(target.ToArray()); + using (var zf = new ZipFile(archive)) + { + zf.Password = "Ahoy"; + Assert.AreEqual(1, zf.Count); + var entry = zf[0]; + Assert.AreEqual(tempName1, entry.Name); + Assert.AreEqual(1, entry.Size); + Assert.IsTrue(zf.TestArchive(true)); + Assert.IsTrue(entry.IsCrypted); + } + } + finally + { + File.Delete(tempName1); + } + } + + [Test] + [Category("Zip")] + [Category("CreatesTempFile")] + public void ExtractEmptyDirectories() + { + var tempFilePath = GetTempFilePath(); + Assert.IsNotNull(tempFilePath, "No permission to execute this test?"); + + var name = Path.Combine(tempFilePath, "x.zip"); + + EnsureTestDirectoryIsEmpty(tempFilePath); + + var targetDir = Path.Combine(tempFilePath, ZipTempDir + @"\floyd"); + using (var fs = File.Create(name)) + { + using (var zOut = new ZipOutputStream(fs)) + { + zOut.PutNextEntry(new ZipEntry("floyd/")); + } + } + + var fastZip = new FastZip(); + fastZip.CreateEmptyDirectories = true; + fastZip.ExtractZip(name, targetDir, "zz"); + + File.Delete(name); + Assert.IsTrue(Directory.Exists(targetDir), "Empty directory should be created"); + } + + [Test] + [Category("Zip")] + public void NonAsciiPasswords() + { + const string tempName1 = "a.dat"; + + var target = new MemoryStream(); + + var tempFilePath = GetTempFilePath(); + Assert.IsNotNull(tempFilePath, "No permission to execute this test?"); + + var addFile = Path.Combine(tempFilePath, tempName1); + MakeTempFile(addFile, 1); + + var password = "abc\u0066\u0393"; + try + { + var fastZip = new FastZip(); + fastZip.Password = password; + + fastZip.CreateZip(target, tempFilePath, false, @"a\.dat", null); + + var archive = new MemoryStream(target.ToArray()); + using (var zf = new ZipFile(archive)) + { + zf.Password = password; + Assert.AreEqual(1, zf.Count); + var entry = zf[0]; + Assert.AreEqual(tempName1, entry.Name); + Assert.AreEqual(1, entry.Size); + Assert.IsTrue(zf.TestArchive(true)); + Assert.IsTrue(entry.IsCrypted); + } + } + finally + { + File.Delete(tempName1); + } + } + } + + [TestFixture] + public class ZipFileHandling : ZipBase + { + private void Compare(byte[] a, byte[] b) + { + Assert.AreEqual(a.Length, b.Length); + for (var i = 0; i < a.Length; ++i) + { + Assert.AreEqual(a[i], b[i]); + } + } + + private void TryDeleting(byte[] master, int totalEntries, int additions, params string[] toDelete) + { + var ms = new MemoryStream(); + ms.Write(master, 0, master.Length); + + using (var f = new ZipFile(ms)) + { + f.IsStreamOwner = false; + Assert.AreEqual(totalEntries, f.Count); + Assert.IsTrue(f.TestArchive(true)); + f.BeginUpdate(new MemoryArchiveStorage()); + + for (var i = 0; i < additions; ++i) + { + f.Add(new StringMemoryDataSource("Another great file"), + string.Format("Add{0}.dat", i + 1)); + } + + foreach (var name in toDelete) + { + f.Delete(name); + } + f.CommitUpdate(); + + // write stream to file to assist debugging. + // WriteToFile(@"c:\aha.zip", ms.ToArray()); + + var newTotal = totalEntries + additions - toDelete.Length; + Assert.AreEqual(newTotal, f.Count, + string.Format("Expected {0} entries after update found {1}", newTotal, f.Count)); + Assert.IsTrue(f.TestArchive(true), "Archive test should pass"); + } + } + + private void TryDeleting(byte[] master, int totalEntries, int additions, params int[] toDelete) + { + var ms = new MemoryStream(); + ms.Write(master, 0, master.Length); + + using (var f = new ZipFile(ms)) + { + f.IsStreamOwner = false; + Assert.AreEqual(totalEntries, f.Count); + Assert.IsTrue(f.TestArchive(true)); + f.BeginUpdate(new MemoryArchiveStorage()); + + for (var i = 0; i < additions; ++i) + { + f.Add(new StringMemoryDataSource("Another great file"), + string.Format("Add{0}.dat", i + 1)); + } + + foreach (var i in toDelete) + { + f.Delete(f[i]); + } + f.CommitUpdate(); + + /* write stream to file to assist debugging. + byte[] data = ms.ToArray(); + using ( FileStream fs = File.Open(@"c:\aha.zip", FileMode.Create, FileAccess.ReadWrite, FileShare.Read) ) { + fs.Write(data, 0, data.Length); + } + */ + var newTotal = totalEntries + additions - toDelete.Length; + Assert.AreEqual(newTotal, f.Count, + string.Format("Expected {0} entries after update found {1}", newTotal, f.Count)); + Assert.IsTrue(f.TestArchive(true), "Archive test should pass"); + } + } + + [Test] + [Category("Zip")] + [Category("CreatesTempFile")] + public void AddAndDeleteEntries() + { + var tempFile = GetTempFilePath(); + Assert.IsNotNull(tempFile, "No permission to execute this test?"); + + var addFile = Path.Combine(tempFile, "a.dat"); + MakeTempFile(addFile, 1); + + var addFile2 = Path.Combine(tempFile, "b.dat"); + MakeTempFile(addFile2, 259); + + tempFile = Path.Combine(tempFile, "SharpZipTest.Zip"); + + using (var f = ZipFile.Create(tempFile)) + { + f.BeginUpdate(); + f.Add(addFile); + f.Add(addFile2); + f.CommitUpdate(); + Assert.IsTrue(f.TestArchive(true)); + } + + using (var f = new ZipFile(tempFile)) + { + Assert.AreEqual(2, f.Count); + Assert.IsTrue(f.TestArchive(true)); + f.BeginUpdate(); + f.Delete(f[0]); + f.CommitUpdate(); + Assert.AreEqual(1, f.Count); + Assert.IsTrue(f.TestArchive(true)); + } + + File.Delete(addFile); + File.Delete(addFile2); + File.Delete(tempFile); + } + + [Test] + [Category("Zip")] + public void AddAndDeleteEntriesMemory() + { + var memStream = new MemoryStream(); + + using (var f = new ZipFile(memStream)) + { + f.IsStreamOwner = false; + + f.BeginUpdate(new MemoryArchiveStorage()); + f.Add(new StringMemoryDataSource("Hello world"), @"z:\a\a.dat"); + f.Add(new StringMemoryDataSource("Another"), @"\b\b.dat"); + f.Add(new StringMemoryDataSource("Mr C"), @"c\c.dat"); + f.Add(new StringMemoryDataSource("Mrs D was a star"), @"d\d.dat"); + f.CommitUpdate(); + Assert.IsTrue(f.TestArchive(true)); + } + + var master = memStream.ToArray(); + + TryDeleting(master, 4, 1, @"z:\a\a.dat"); + TryDeleting(master, 4, 1, @"\a\a.dat"); + TryDeleting(master, 4, 1, @"a/a.dat"); + + TryDeleting(master, 4, 0, 0); + TryDeleting(master, 4, 0, 1); + TryDeleting(master, 4, 0, 2); + TryDeleting(master, 4, 0, 3); + TryDeleting(master, 4, 0, 0, 1); + TryDeleting(master, 4, 0, 0, 2); + TryDeleting(master, 4, 0, 0, 3); + TryDeleting(master, 4, 0, 1, 2); + TryDeleting(master, 4, 0, 1, 3); + TryDeleting(master, 4, 0, 2); + + TryDeleting(master, 4, 1, 0); + TryDeleting(master, 4, 1, 1); + TryDeleting(master, 4, 3, 2); + TryDeleting(master, 4, 4, 3); + TryDeleting(master, 4, 10, 0, 1); + TryDeleting(master, 4, 10, 0, 2); + TryDeleting(master, 4, 10, 0, 3); + TryDeleting(master, 4, 20, 1, 2); + TryDeleting(master, 4, 30, 1, 3); + TryDeleting(master, 4, 40, 2); + } + + [Test] + [Category("Zip")] + public void AddEncryptedEntriesToExistingArchive() + { + const string TestValue = "0001000"; + var memStream = new MemoryStream(); + using (var f = new ZipFile(memStream)) + { + f.IsStreamOwner = false; + f.UseZip64 = UseZip64.Off; + + var m = new StringMemoryDataSource(TestValue); + f.BeginUpdate(new MemoryArchiveStorage()); + f.Add(m, "a.dat"); + f.CommitUpdate(); + Assert.IsTrue(f.TestArchive(true), "Archive test should pass"); + } + + using (var g = new ZipFile(memStream)) + { + var ze = g[0]; + + Assert.IsFalse(ze.IsCrypted, "Entry should NOT be encrypted"); + using (var r = new StreamReader(g.GetInputStream(0))) + { + var data = r.ReadToEnd(); + Assert.AreEqual(TestValue, data); + } + + var n = new StringMemoryDataSource(TestValue); + + g.Password = "Axolotyl"; + g.UseZip64 = UseZip64.Off; + g.IsStreamOwner = false; + g.BeginUpdate(); + g.Add(n, "a1.dat"); + g.CommitUpdate(); + Assert.IsTrue(g.TestArchive(true), "Archive test should pass"); + ze = g[1]; + Assert.IsTrue(ze.IsCrypted, "New entry should be encrypted"); + using (var r = new StreamReader(g.GetInputStream(0))) + { + var data = r.ReadToEnd(); + Assert.AreEqual(TestValue, data); + } + } + } + + [Test] + [Category("Zip")] + public void AddToEmptyArchive() + { + var tempFile = GetTempFilePath(); + Assert.IsNotNull(tempFile, "No permission to execute this test?"); + if (tempFile != null) + { + var addFile = Path.Combine(tempFile, "a.dat"); + MakeTempFile(addFile, 1); + + tempFile = Path.Combine(tempFile, "SharpZipTest.Zip"); + + using (var f = ZipFile.Create(tempFile)) + { + f.BeginUpdate(); + f.Add(addFile); + f.CommitUpdate(); + Assert.AreEqual(1, f.Count); + Assert.IsTrue(f.TestArchive(true)); + } + + using (var f = new ZipFile(tempFile)) + { + Assert.AreEqual(1, f.Count); + f.BeginUpdate(); + f.Delete(f[0]); + f.CommitUpdate(); + Assert.AreEqual(0, f.Count); + Assert.IsTrue(f.TestArchive(true)); + f.Close(); + } + + File.Delete(addFile); + File.Delete(tempFile); + } + } + + [Test] + [Category("Zip")] + public void ArchiveTesting() + { + byte[] originalData = null; + var compressedData = MakeInMemoryZip(ref originalData, CompressionMethod.Deflated, + 6, 1024, null, true); + + var ms = new MemoryStream(compressedData); + ms.Seek(0, SeekOrigin.Begin); + + using (var testFile = new ZipFile(ms)) + { + Assert.IsTrue(testFile.TestArchive(true), "Unexpected error in archive detected"); + + var corrupted = new byte[compressedData.Length]; + Array.Copy(compressedData, corrupted, compressedData.Length); + + corrupted[123] = (byte) (~corrupted[123] & 0xff); + ms = new MemoryStream(corrupted); + } + + using (var testFile = new ZipFile(ms)) + { + Assert.IsFalse(testFile.TestArchive(true), "Error in archive not detected"); + } + } + + [Test] + [Category("Zip")] + public void BasicEncryption() + { + const string TestValue = "0001000"; + var memStream = new MemoryStream(); + using (var f = new ZipFile(memStream)) + { + f.IsStreamOwner = false; + f.Password = "Hello"; + + var m = new StringMemoryDataSource(TestValue); + f.BeginUpdate(new MemoryArchiveStorage()); + f.Add(m, "a.dat"); + f.CommitUpdate(); + Assert.IsTrue(f.TestArchive(true), "Archive test should pass"); + } + + using (var g = new ZipFile(memStream)) + { + g.Password = "Hello"; + var ze = g[0]; + + Assert.IsTrue(ze.IsCrypted, "Entry should be encrypted"); + using (var r = new StreamReader(g.GetInputStream(0))) + { + var data = r.ReadToEnd(); + Assert.AreEqual(TestValue, data); + } + } + } + + [Test] + [Category("Zip")] + [Category("CreatesTempFile")] + public void BasicEncryptionToDisk() + { + const string TestValue = "0001000"; + var tempFile = GetTempFilePath(); + Assert.IsNotNull(tempFile, "No permission to execute this test?"); + + tempFile = Path.Combine(tempFile, "SharpZipTest.Zip"); + + using (var f = ZipFile.Create(tempFile)) + { + f.Password = "Hello"; + + var m = new StringMemoryDataSource(TestValue); + f.BeginUpdate(); + f.Add(m, "a.dat"); + f.CommitUpdate(); + } + + using (var f = new ZipFile(tempFile)) + { + f.Password = "Hello"; + Assert.IsTrue(f.TestArchive(true), "Archive test should pass"); + } + + using (var g = new ZipFile(tempFile)) + { + g.Password = "Hello"; + var ze = g[0]; + + Assert.IsTrue(ze.IsCrypted, "Entry should be encrypted"); + using (var r = new StreamReader(g.GetInputStream(0))) + { + var data = r.ReadToEnd(); + Assert.AreEqual(TestValue, data); + } + } + + File.Delete(tempFile); + } + + [Test] + [Category("Zip")] + public void CreateEmptyArchive() + { + var tempFile = GetTempFilePath(); + Assert.IsNotNull(tempFile, "No permission to execute this test?"); + + if (tempFile != null) + { + tempFile = Path.Combine(tempFile, "SharpZipTest.Zip"); + + using (var f = ZipFile.Create(tempFile)) + { + f.BeginUpdate(); + f.CommitUpdate(); + Assert.IsTrue(f.TestArchive(true)); + f.Close(); + } + + using (var f = new ZipFile(tempFile)) + { + Assert.AreEqual(0, f.Count); + } + } + } + + [Test] + [Category("Zip")] + public void Crypto_AddEncryptedEntryToExistingArchiveDirect() + { + var ms = new MemoryStream(); + + byte[] rawData; + + using (var testFile = new ZipFile(ms)) + { + testFile.IsStreamOwner = false; + testFile.BeginUpdate(); + testFile.Add(new StringMemoryDataSource("Aha"), "No1", CompressionMethod.Stored); + testFile.Add(new StringMemoryDataSource("And so it goes"), "No2", CompressionMethod.Stored); + testFile.Add(new StringMemoryDataSource("No3"), "No3", CompressionMethod.Stored); + testFile.CommitUpdate(); + + Assert.IsTrue(testFile.TestArchive(true)); + rawData = ms.ToArray(); + } + + using (var testFile = new ZipFile(ms)) + { + Assert.IsTrue(testFile.TestArchive(true)); + testFile.IsStreamOwner = false; + + testFile.BeginUpdate(); + testFile.Password = "pwd"; + testFile.Add(new StringMemoryDataSource("Zapata!"), "encrypttest.xml"); + testFile.CommitUpdate(); + + Assert.IsTrue(testFile.TestArchive(true)); + + var entryIndex = testFile.FindEntry("encrypttest.xml", true); + Assert.IsNotNull(entryIndex >= 0); + Assert.IsTrue(testFile[entryIndex].IsCrypted); + } + } + + [Test] + [Category("Zip")] + public void Crypto_AddEncryptedEntryToExistingArchiveSafe() + { + var ms = new MemoryStream(); + + byte[] rawData; + + using (var testFile = new ZipFile(ms)) + { + testFile.IsStreamOwner = false; + testFile.BeginUpdate(); + testFile.Add(new StringMemoryDataSource("Aha"), "No1", CompressionMethod.Stored); + testFile.Add(new StringMemoryDataSource("And so it goes"), "No2", CompressionMethod.Stored); + testFile.Add(new StringMemoryDataSource("No3"), "No3", CompressionMethod.Stored); + testFile.CommitUpdate(); + + Assert.IsTrue(testFile.TestArchive(true)); + rawData = ms.ToArray(); + } + + ms = new MemoryStream(rawData); + + using (var testFile = new ZipFile(ms)) + { + Assert.IsTrue(testFile.TestArchive(true)); + + testFile.BeginUpdate(new MemoryArchiveStorage(FileUpdateMode.Safe)); + testFile.Password = "pwd"; + testFile.Add(new StringMemoryDataSource("Zapata!"), "encrypttest.xml"); + testFile.CommitUpdate(); + + Assert.IsTrue(testFile.TestArchive(true)); + + var entryIndex = testFile.FindEntry("encrypttest.xml", true); + Assert.IsNotNull(entryIndex >= 0); + Assert.IsTrue(testFile[entryIndex].IsCrypted); + } + } + + [Test] + [Category("Zip")] + public void EmbeddedArchive() + { + var memStream = new MemoryStream(); + using (var f = new ZipFile(memStream)) + { + f.IsStreamOwner = false; + + var m = new StringMemoryDataSource("0000000"); + f.BeginUpdate(new MemoryArchiveStorage()); + f.Add(m, "a.dat"); + f.Add(m, "b.dat"); + f.CommitUpdate(); + Assert.IsTrue(f.TestArchive(true)); + } + + var rawArchive = memStream.ToArray(); + var pseudoSfx = new byte[1049 + rawArchive.Length]; + Array.Copy(rawArchive, 0, pseudoSfx, 1049, rawArchive.Length); + + memStream = new MemoryStream(pseudoSfx); + using (var f = new ZipFile(memStream)) + { + for (var index = 0; index < f.Count; ++index) + { + var entryStream = f.GetInputStream(index); + var data = new MemoryStream(); + StreamUtils.Copy(entryStream, data, new byte[128]); + + var bytes = data.ToArray(); + string contents = Encoding.UTF8.GetString(bytes, 0, bytes.Length); + Assert.AreEqual("0000000", contents); + } + } + } + + /// + /// Check that ZipFile doesnt find entries when there is more than 64K of data at the end. + /// + /// + /// This may well be flawed but is the current behaviour. + /// + [Test] + [Category("Zip")] + [Category("CreatesTempFile")] + public void FindEntriesInArchiveExtraData() + { + var tempFile = GetTempFilePath(); + Assert.IsNotNull(tempFile, "No permission to execute this test?"); + + if (tempFile != null) + { + tempFile = Path.Combine(tempFile, "SharpZipTest.Zip"); + var longComment = new String('A', 65535); + var tempStream = File.Create(tempFile); + MakeZipFile(tempStream, false, "", 1, 1, longComment); + + tempStream.WriteByte(85); + tempStream.Close(); + + var fails = false; + try + { + using (var zipFile = new ZipFile(tempFile)) + { + foreach (ZipEntry e in zipFile) + { + var instream = zipFile.GetInputStream(e); + CheckKnownEntry(instream, 1); + } + zipFile.Close(); + } + } + catch + { + fails = true; + } + + File.Delete(tempFile); + Assert.IsTrue(fails, "Currently zip file wont be found"); + } + } + + /// + /// Check that ZipFile finds entries when its got a long comment + /// + [Test] + [Category("Zip")] + [Category("CreatesTempFile")] + public void FindEntriesInArchiveWithLongComment() + { + var tempFile = GetTempFilePath(); + Assert.IsNotNull(tempFile, "No permission to execute this test?"); + + if (tempFile != null) + { + tempFile = Path.Combine(tempFile, "SharpZipTest.Zip"); + var longComment = new String('A', 65535); + MakeZipFile(tempFile, "", 1, 1, longComment); + using (var zipFile = new ZipFile(tempFile)) + { + foreach (ZipEntry e in zipFile) + { + var instream = zipFile.GetInputStream(e); + CheckKnownEntry(instream, 1); + } + zipFile.Close(); + } + File.Delete(tempFile); + } + } + + /// + /// Test ZipFile Find method operation + /// + [Test] + [Category("Zip")] + [Category("CreatesTempFile")] + public void FindEntry() + { + var tempFile = GetTempFilePath(); + Assert.IsNotNull(tempFile, "No permission to execute this test?"); + + if (tempFile != null) + { + tempFile = Path.Combine(tempFile, "SharpZipTest.Zip"); + MakeZipFile(tempFile, new[]{"Farriera", "Champagne", "Urban myth"}, 10, "Aha"); + + using (var zipFile = new ZipFile(tempFile)) + { + Assert.AreEqual(3, zipFile.Count, "Expected 1 entry"); + + var testIndex = zipFile.FindEntry("Farriera", false); + Assert.AreEqual(0, testIndex, "Case sensitive find failure"); + Assert.IsTrue(string.Compare(zipFile[testIndex].Name, "Farriera", StringComparison.InvariantCulture) == 0); + + testIndex = zipFile.FindEntry("Farriera", true); + Assert.AreEqual(0, testIndex, "Case insensitive find failure"); + Assert.IsTrue(string.Compare(zipFile[testIndex].Name, "Farriera", StringComparison.InvariantCultureIgnoreCase) == 0); + + testIndex = zipFile.FindEntry("urban mYTH", false); + Assert.AreEqual(-1, testIndex, "Case sensitive find failure"); + + testIndex = zipFile.FindEntry("urban mYTH", true); + Assert.AreEqual(2, testIndex, "Case insensitive find failure"); + Assert.IsTrue(string.Compare(zipFile[testIndex].Name, "urban mYTH", StringComparison.InvariantCultureIgnoreCase) == 0); + + testIndex = zipFile.FindEntry("Champane.", false); + Assert.AreEqual(-1, testIndex, "Case sensitive find failure"); + + testIndex = zipFile.FindEntry("Champane.", true); + Assert.AreEqual(-1, testIndex, "Case insensitive find failure"); + + zipFile.Close(); + } + File.Delete(tempFile); + } + } + + /// + /// Check that ZipFile class handles no entries in zip file + /// + [Test] + [Category("Zip")] + [Category("CreatesTempFile")] + public void HandlesNoEntries() + { + var tempFile = GetTempFilePath(); + Assert.IsNotNull(tempFile, "No permission to execute this test?"); + + if (tempFile != null) + { + tempFile = Path.Combine(tempFile, "SharpZipTest.Zip"); + MakeZipFile(tempFile, "", 0, 1, "Aha"); + + using (var zipFile = new ZipFile(tempFile)) + { + Assert.AreEqual(0, zipFile.Count); + zipFile.Close(); + } + + File.Delete(tempFile); + } + } + + [Test] + [Category("Zip")] + public void NameFactory() + { + var memStream = new MemoryStream(); + var fixedTime = new DateTime(1981, 4, 3); + using (var f = new ZipFile(memStream)) + { + f.IsStreamOwner = false; + ((ZipEntryFactory) f.EntryFactory).IsUnicodeText = true; + ((ZipEntryFactory) f.EntryFactory).Setting = ZipEntryFactory.TimeSetting.Fixed; + ((ZipEntryFactory) f.EntryFactory).FixedDateTime = fixedTime; + ((ZipEntryFactory) f.EntryFactory).SetAttributes = 1; + f.BeginUpdate(new MemoryArchiveStorage()); + + var names = new[]{ + "\u030A\u03B0", // Greek + "\u0680\u0685", // Arabic + }; + + foreach (var name in names) + { + f.Add(new StringMemoryDataSource("Hello world"), name, + CompressionMethod.Deflated, true); + } + f.CommitUpdate(); + Assert.IsTrue(f.TestArchive(true)); + + foreach (var name in names) + { + var index = f.FindEntry(name, true); + + Assert.IsTrue(index >= 0); + var found = f[index]; + Assert.AreEqual(name, found.Name); + Assert.IsTrue(found.IsUnicodeText); + Assert.AreEqual(fixedTime, found.DateTime); + Assert.IsTrue(found.IsDOSEntry); + } + } + } + + [Test] + [Category("Zip")] + public void NullStreamDetected() + { + ZipFile bad = null; + FileStream nullStream = null; + + var nullStreamDetected = false; + + try + { + bad = new ZipFile(nullStream); + } + catch + { + nullStreamDetected = true; + } + + Assert.IsTrue(nullStreamDetected, "Null stream should be detected in ZipFile constructor"); + Assert.IsNull(bad, "ZipFile instance should not be created"); + } + + /// + /// Simple round trip test for ZipFile class + /// + [Test] + [Category("Zip")] + [Category("CreatesTempFile")] + public void RoundTrip() + { + var tempFile = GetTempFilePath(); + Assert.IsNotNull(tempFile, "No permission to execute this test?"); + + if (tempFile != null) + { + tempFile = Path.Combine(tempFile, "SharpZipTest.Zip"); + MakeZipFile(tempFile, "", 10, 1024, ""); + + using (var zipFile = new ZipFile(tempFile)) + { + foreach (ZipEntry e in zipFile) + { + var instream = zipFile.GetInputStream(e); + CheckKnownEntry(instream, 1024); + } + zipFile.Close(); + } + + File.Delete(tempFile); + } + } + + /// + /// Simple round trip test for ZipFile class + /// + [Test] + [Category("Zip")] + public void RoundTripInMemory() + { + var storage = new MemoryStream(); + MakeZipFile(storage, false, "", 10, 1024, ""); + + using (var zipFile = new ZipFile(storage)) + { + foreach (ZipEntry e in zipFile) + { + var instream = zipFile.GetInputStream(e); + CheckKnownEntry(instream, 1024); + } + zipFile.Close(); + } + } + + [Test] + [Category("Zip")] + public void UnicodeNames() + { + var memStream = new MemoryStream(); + using (var f = new ZipFile(memStream)) + { + f.IsStreamOwner = false; + + f.BeginUpdate(new MemoryArchiveStorage()); + + var names = new[]{ + "\u030A\u03B0", // Greek + "\u0680\u0685", // Arabic + }; + + foreach (var name in names) + { + f.Add(new StringMemoryDataSource("Hello world"), name, + CompressionMethod.Deflated, true); + } + f.CommitUpdate(); + Assert.IsTrue(f.TestArchive(true)); + + foreach (var name in names) + { + var index = f.FindEntry(name, true); + + Assert.IsTrue(index >= 0); + var found = f[index]; + Assert.AreEqual(name, found.Name); + } + } + } + + [Test] + [Category("Zip")] + public void UpdateCommentOnlyInMemory() + { + var ms = new MemoryStream(); + + using (var testFile = new ZipFile(ms)) + { + testFile.IsStreamOwner = false; + testFile.BeginUpdate(); + testFile.Add(new StringMemoryDataSource("Aha"), "No1", CompressionMethod.Stored); + testFile.Add(new StringMemoryDataSource("And so it goes"), "No2", CompressionMethod.Stored); + testFile.Add(new StringMemoryDataSource("No3"), "No3", CompressionMethod.Stored); + testFile.CommitUpdate(); + + Assert.IsTrue(testFile.TestArchive(true)); + } + + using (var testFile = new ZipFile(ms)) + { + Assert.IsTrue(testFile.TestArchive(true)); + Assert.AreEqual("", testFile.ZipFileComment); + testFile.IsStreamOwner = false; + + testFile.BeginUpdate(); + testFile.SetComment("Here is my comment"); + testFile.CommitUpdate(); + + Assert.IsTrue(testFile.TestArchive(true)); + } + + using (var testFile = new ZipFile(ms)) + { + Assert.IsTrue(testFile.TestArchive(true)); + Assert.AreEqual("Here is my comment", testFile.ZipFileComment); + } + } + + [Test] + [Category("Zip")] + [Category("CreatesTempFile")] + public void UpdateCommentOnlyOnDisk() + { + var tempFile = GetTempFilePath(); + Assert.IsNotNull(tempFile, "No permission to execute this test?"); + + tempFile = Path.Combine(tempFile, "SharpZipTest.Zip"); + if (File.Exists(tempFile)) + { + File.Delete(tempFile); + } + + using (var testFile = ZipFile.Create(tempFile)) + { + testFile.BeginUpdate(); + testFile.Add(new StringMemoryDataSource("Aha"), "No1", CompressionMethod.Stored); + testFile.Add(new StringMemoryDataSource("And so it goes"), "No2", CompressionMethod.Stored); + testFile.Add(new StringMemoryDataSource("No3"), "No3", CompressionMethod.Stored); + testFile.CommitUpdate(); + + Assert.IsTrue(testFile.TestArchive(true)); + } + + using (var testFile = new ZipFile(tempFile)) + { + Assert.IsTrue(testFile.TestArchive(true)); + Assert.AreEqual("", testFile.ZipFileComment); + + testFile.BeginUpdate(new DiskArchiveStorage(testFile, FileUpdateMode.Direct)); + testFile.SetComment("Here is my comment"); + testFile.CommitUpdate(); + + Assert.IsTrue(testFile.TestArchive(true)); + } + + using (var testFile = new ZipFile(tempFile)) + { + Assert.IsTrue(testFile.TestArchive(true)); + Assert.AreEqual("Here is my comment", testFile.ZipFileComment); + } + File.Delete(tempFile); + + // Variant using indirect updating. + using (var testFile = ZipFile.Create(tempFile)) + { + testFile.BeginUpdate(); + testFile.Add(new StringMemoryDataSource("Aha"), "No1", CompressionMethod.Stored); + testFile.Add(new StringMemoryDataSource("And so it goes"), "No2", CompressionMethod.Stored); + testFile.Add(new StringMemoryDataSource("No3"), "No3", CompressionMethod.Stored); + testFile.CommitUpdate(); + + Assert.IsTrue(testFile.TestArchive(true)); + } + + using (var testFile = new ZipFile(tempFile)) + { + Assert.IsTrue(testFile.TestArchive(true)); + Assert.AreEqual("", testFile.ZipFileComment); + + testFile.BeginUpdate(); + testFile.SetComment("Here is my comment"); + testFile.CommitUpdate(); + + Assert.IsTrue(testFile.TestArchive(true)); + } + + using (var testFile = new ZipFile(tempFile)) + { + Assert.IsTrue(testFile.TestArchive(true)); + Assert.AreEqual("Here is my comment", testFile.ZipFileComment); + } + File.Delete(tempFile); + } + + /// + /// Check that adding too many entries is detected and handled + /// + [Test] + [Category("Zip")] + [Category("CreatesTempFile")] + public void Zip64Entries() + { + var tempFile = GetTempFilePath(); + Assert.IsNotNull(tempFile, "No permission to execute this test?"); + + const int target = 65537; + + using (var zipFile = ZipFile.Create(Path.GetTempFileName())) + { + zipFile.BeginUpdate(); + + for (var i = 0; i < target; ++i) + { + var ze = new ZipEntry(i.ToString()); + ze.CompressedSize = 0; + ze.Size = 0; + zipFile.Add(ze); + } + zipFile.CommitUpdate(); + + Assert.IsTrue(zipFile.TestArchive(true)); + Assert.AreEqual(target, zipFile.Count, "Incorrect number of entries stored"); + } + } + + [Test] + [Category("Zip")] + [Explicit] + public void Zip64Offset() + { + // TODO: Test to check that a zip64 offset value is loaded correctly. + // Changes in ZipEntry to CentralHeaderRequiresZip64 and LocalHeaderRequiresZip64 + // were not quite correct... + } + + [Test] + [Category("Zip")] + public void Zip64Useage() + { + var memStream = new MemoryStream(); + using (var f = new ZipFile(memStream)) + { + f.IsStreamOwner = false; + f.UseZip64 = UseZip64.On; + + var m = new StringMemoryDataSource("0000000"); + f.BeginUpdate(new MemoryArchiveStorage()); + f.Add(m, "a.dat"); + f.Add(m, "b.dat"); + f.CommitUpdate(); + Assert.IsTrue(f.TestArchive(true)); + } + + var rawArchive = memStream.ToArray(); + + var pseudoSfx = new byte[1049 + rawArchive.Length]; + Array.Copy(rawArchive, 0, pseudoSfx, 1049, rawArchive.Length); + + memStream = new MemoryStream(pseudoSfx); + using (var f = new ZipFile(memStream)) + { + for (var index = 0; index < f.Count; ++index) + { + var entryStream = f.GetInputStream(index); + var data = new MemoryStream(); + StreamUtils.Copy(entryStream, data, new byte[128]); + + var bytes = data.ToArray(); + string contents = Encoding.UTF8.GetString(bytes, 0, bytes.Length); + Assert.AreEqual("0000000", contents); + } + } + } + } + + [TestFixture] + public class ZipEntryFactoryHandling : ZipBase + { + // TODO: Complete testing for ZipEntryFactory + + [Test] + [Category("Zip")] + public void CreateInMemoryValues() + { + var tempFile = "bingo:"; + + // Note the seconds returned will be even! + var epochTime = new DateTime(1980, 1, 1); + var createTime = new DateTime(2100, 2, 27, 11, 07, 56); + var lastWriteTime = new DateTime(2050, 11, 3, 7, 23, 32); + var lastAccessTime = new DateTime(2050, 11, 3, 0, 42, 12); + + var factory = new ZipEntryFactory(); + ZipEntry entry; + int combinedAttributes; + + var startTime = DateTime.Now; + + factory.Setting = ZipEntryFactory.TimeSetting.CreateTime; + factory.GetAttributes = ~((int) FileAttributes.ReadOnly); + factory.SetAttributes = (int) FileAttributes.ReadOnly; + combinedAttributes = (int) FileAttributes.ReadOnly; + + entry = factory.MakeFileEntry(tempFile, false); + Assert.IsTrue(TestHelper.CompareDosDateTimes(startTime, entry.DateTime) <= 0, "Create time failure"); + Assert.AreEqual(entry.ExternalFileAttributes, combinedAttributes); + Assert.AreEqual(-1, entry.Size); + + factory.FixedDateTime = startTime; + factory.Setting = ZipEntryFactory.TimeSetting.Fixed; + entry = factory.MakeFileEntry(tempFile, false); + Assert.AreEqual(0, TestHelper.CompareDosDateTimes(startTime, entry.DateTime), "Access time failure"); + Assert.AreEqual(-1, entry.Size); + + factory.Setting = ZipEntryFactory.TimeSetting.LastWriteTime; + entry = factory.MakeFileEntry(tempFile, false); + Assert.IsTrue(TestHelper.CompareDosDateTimes(startTime, entry.DateTime) <= 0, "Write time failure"); + Assert.AreEqual(-1, entry.Size); + } + + [Test] + [Category("Zip")] + public void Defaults() + { + var testStart = DateTime.Now; + var f = new ZipEntryFactory(); + Assert.IsNotNull(f.NameTransform); + Assert.AreEqual(-1, f.GetAttributes); + Assert.AreEqual(0, f.SetAttributes); + Assert.AreEqual(ZipEntryFactory.TimeSetting.LastWriteTime, f.Setting); + + Assert.LessOrEqual(testStart, f.FixedDateTime); + Assert.GreaterOrEqual(DateTime.Now, f.FixedDateTime); + + f = new ZipEntryFactory(ZipEntryFactory.TimeSetting.LastAccessTimeUtc); + Assert.IsNotNull(f.NameTransform); + Assert.AreEqual(-1, f.GetAttributes); + Assert.AreEqual(0, f.SetAttributes); + Assert.AreEqual(ZipEntryFactory.TimeSetting.LastAccessTimeUtc, f.Setting); + Assert.LessOrEqual(testStart, f.FixedDateTime); + Assert.GreaterOrEqual(DateTime.Now, f.FixedDateTime); + + var fixedDate = new DateTime(1999, 1, 2); + f = new ZipEntryFactory(fixedDate); + Assert.IsNotNull(f.NameTransform); + Assert.AreEqual(-1, f.GetAttributes); + Assert.AreEqual(0, f.SetAttributes); + Assert.AreEqual(ZipEntryFactory.TimeSetting.Fixed, f.Setting); + Assert.AreEqual(fixedDate, f.FixedDateTime); + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/key.snk b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/key.snk new file mode 100644 index 0000000000000000000000000000000000000000..ed404cd2b98794be9654705e03f356546393f826 GIT binary patch literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50097rX2mggb`z#srv=C&u+tgpp^FW^M**Pm zRQO}lqnc-@hC)KUY6}|R0cKtk;e9lD=(rwB+as(MXDb+_+G52=`KS_Isyvj`Lv>t; zyv1GdtazzRJ@~Ikqx~TP`bG%Rj^JO-mWk-SOVW*S-BQylz(lnRD^aU;42ZrfNBOmJ z+wu|=RKI)(tf=kVs&r1#mU7ia^YtqD_N!R!)Mb<04J(7v0b9Z5@VQ zC~!{_9Az!Ik)85nzpjNic*BZ(iJSs=#CEi_EvxKd8YjX}1j8+N2zqaVEoTb{xxA?( zVt8G+Ou_+Iw{;ElEmyRR47jL`4u7RS+VW6jwp=Ns#vPw_+s*hGzc&Int6mW=r8E?B z)qgXtnZUe(Tz`ffc*>2e+Br!=fqNzeZTr56NZVVsD%VFGDVkAw@hwc5(-@Qd=aTqV z(nhX4LsE@8Bh?ITr5k1jJOPeVdipW-lxZ`6M6%|*SG?o?o}O<)9!yjl130Go;PJF4 iINMdx^S=SKvcAYJIsZ6c08B+-O^Q|BqJw=PJm;e#=pQ8j literal 0 HcmV?d00001 diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/packages.config b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/packages.config new file mode 100644 index 0000000..0c82178 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight.Tests/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/BZip2/BZip2.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/BZip2/BZip2.cs new file mode 100644 index 0000000..0828964 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/BZip2/BZip2.cs @@ -0,0 +1,118 @@ +// BZip2.cs +// +// Copyright (C) 2001 Mike Krueger +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using System.IO; + +namespace ICSharpCode.SharpZipLib.Silverlight.BZip2 +{ + /// + /// A helper class to simplify compressing and decompressing streams. + /// + public static class BZip2 + { + /// + /// Decompress input writing + /// decompressed data to the output stream + /// + /// The stream containing data to decompress. + /// The stream to write decompressed data to. + /// Both streams are closed on completion + public static void Decompress(Stream inStream, Stream outStream) + { + if ( inStream == null ) { + throw new ArgumentNullException("inStream"); + } + + if ( outStream == null ) { + throw new ArgumentNullException("outStream"); + } + + using ( outStream ) { + using ( var bzis = new BZip2InputStream(inStream) ) { + var ch = bzis.ReadByte(); + while (ch != -1) { + outStream.WriteByte((byte)ch); + ch = bzis.ReadByte(); + } + } + } + } + + /// + /// Compress input stream sending + /// result to output stream + /// + /// The stream to compress. + /// The stream to write compressed data to. + /// The block size to use. + /// Both streams are closed on completion + public static void Compress(Stream inStream, Stream outStream, int blockSize) + { + if ( inStream == null ) { + throw new ArgumentNullException("inStream"); + } + + if ( outStream == null ) { + throw new ArgumentNullException("outStream"); + } + + using ( inStream ) { + using (var bzos = new BZip2OutputStream(outStream, blockSize)) { + var ch = inStream.ReadByte(); + while (ch != -1) { + bzos.WriteByte((byte)ch); + ch = inStream.ReadByte(); + } + } + } + } + } +} + +/* derived from a file which contained this license : + * Copyright (c) 1999-2001 Keiron Liddle, Aftex Software + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * +*/ diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/BZip2/BZip2Constants.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/BZip2/BZip2Constants.cs new file mode 100644 index 0000000..4c18f03 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/BZip2/BZip2Constants.cs @@ -0,0 +1,192 @@ +// BZip2Constants.cs +// Copyright (C) 2001 Mike Krueger +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +namespace ICSharpCode.SharpZipLib.Silverlight.BZip2 +{ + /// + /// Defines internal values for both compression and decompression + /// + public static class BZip2Constants + { + /// + /// Random numbers used to randomise repetitive blocks + /// + public readonly static int[] rNums = { + 619, 720, 127, 481, 931, 816, 813, 233, 566, 247, + 985, 724, 205, 454, 863, 491, 741, 242, 949, 214, + 733, 859, 335, 708, 621, 574, 73, 654, 730, 472, + 419, 436, 278, 496, 867, 210, 399, 680, 480, 51, + 878, 465, 811, 169, 869, 675, 611, 697, 867, 561, + 862, 687, 507, 283, 482, 129, 807, 591, 733, 623, + 150, 238, 59, 379, 684, 877, 625, 169, 643, 105, + 170, 607, 520, 932, 727, 476, 693, 425, 174, 647, + 73, 122, 335, 530, 442, 853, 695, 249, 445, 515, + 909, 545, 703, 919, 874, 474, 882, 500, 594, 612, + 641, 801, 220, 162, 819, 984, 589, 513, 495, 799, + 161, 604, 958, 533, 221, 400, 386, 867, 600, 782, + 382, 596, 414, 171, 516, 375, 682, 485, 911, 276, + 98, 553, 163, 354, 666, 933, 424, 341, 533, 870, + 227, 730, 475, 186, 263, 647, 537, 686, 600, 224, + 469, 68, 770, 919, 190, 373, 294, 822, 808, 206, + 184, 943, 795, 384, 383, 461, 404, 758, 839, 887, + 715, 67, 618, 276, 204, 918, 873, 777, 604, 560, + 951, 160, 578, 722, 79, 804, 96, 409, 713, 940, + 652, 934, 970, 447, 318, 353, 859, 672, 112, 785, + 645, 863, 803, 350, 139, 93, 354, 99, 820, 908, + 609, 772, 154, 274, 580, 184, 79, 626, 630, 742, + 653, 282, 762, 623, 680, 81, 927, 626, 789, 125, + 411, 521, 938, 300, 821, 78, 343, 175, 128, 250, + 170, 774, 972, 275, 999, 639, 495, 78, 352, 126, + 857, 956, 358, 619, 580, 124, 737, 594, 701, 612, + 669, 112, 134, 694, 363, 992, 809, 743, 168, 974, + 944, 375, 748, 52, 600, 747, 642, 182, 862, 81, + 344, 805, 988, 739, 511, 655, 814, 334, 249, 515, + 897, 955, 664, 981, 649, 113, 974, 459, 893, 228, + 433, 837, 553, 268, 926, 240, 102, 654, 459, 51, + 686, 754, 806, 760, 493, 403, 415, 394, 687, 700, + 946, 670, 656, 610, 738, 392, 760, 799, 887, 653, + 978, 321, 576, 617, 626, 502, 894, 679, 243, 440, + 680, 879, 194, 572, 640, 724, 926, 56, 204, 700, + 707, 151, 457, 449, 797, 195, 791, 558, 945, 679, + 297, 59, 87, 824, 713, 663, 412, 693, 342, 606, + 134, 108, 571, 364, 631, 212, 174, 643, 304, 329, + 343, 97, 430, 751, 497, 314, 983, 374, 822, 928, + 140, 206, 73, 263, 980, 736, 876, 478, 430, 305, + 170, 514, 364, 692, 829, 82, 855, 953, 676, 246, + 369, 970, 294, 750, 807, 827, 150, 790, 288, 923, + 804, 378, 215, 828, 592, 281, 565, 555, 710, 82, + 896, 831, 547, 261, 524, 462, 293, 465, 502, 56, + 661, 821, 976, 991, 658, 869, 905, 758, 745, 193, + 768, 550, 608, 933, 378, 286, 215, 979, 792, 961, + 61, 688, 793, 644, 986, 403, 106, 366, 905, 644, + 372, 567, 466, 434, 645, 210, 389, 550, 919, 135, + 780, 773, 635, 389, 707, 100, 626, 958, 165, 504, + 920, 176, 193, 713, 857, 265, 203, 50, 668, 108, + 645, 990, 626, 197, 510, 357, 358, 850, 858, 364, + 936, 638 + }; + + /// + /// When multiplied by compression parameter (1-9) gives the block size for compression + /// 9 gives the best compresssion but uses the most memory. + /// + public const int baseBlockSize = 100000; + + /// + /// Backend constant + /// + public const int MAX_ALPHA_SIZE = 258; + + /// + /// Backend constant + /// + public const int MAX_CODE_LEN = 23; + + /// + /// Backend constant + /// + public const int RUNA = 0; + + /// + /// Backend constant + /// + public const int RUNB = 1; + + /// + /// Backend constant + /// + public const int N_GROUPS = 6; + + /// + /// Backend constant + /// + public const int G_SIZE = 50; + + /// + /// Backend constant + /// + public const int N_ITERS = 4; + + /// + /// Backend constant + /// + public const int MAX_SELECTORS = (2 + (900000 / G_SIZE)); + + /// + /// Backend constant + /// + public const int NUM_OVERSHOOT_BYTES = 20; + } +} + +/* This file was derived from a file containing this license: + * + * This file is a part of bzip2 and/or libbzip2, a program and + * library for lossless, block-sorting data compression. + * + * Copyright (C) 1996-1998 Julian R Seward. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. The origin of this software must not be misrepresented; you must + * not claim that you wrote the original software. If you use this + * software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 3. Altered source versions must be plainly marked as such, and must + * not be misrepresented as being the original software. + * + * 4. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Java version ported by Keiron Liddle, Aftex Software 1999-2001 + */ diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/BZip2/BZip2Exception.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/BZip2/BZip2Exception.cs new file mode 100644 index 0000000..4dec360 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/BZip2/BZip2Exception.cs @@ -0,0 +1,81 @@ +// BZip2.cs +// +// Copyright 2004 John Reilly +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using ICSharpCode.SharpZipLib.Silverlight.Serialization; + +namespace ICSharpCode.SharpZipLib.Silverlight.BZip2 +{ + /// + /// BZip2Exception represents exceptions specific to Bzip2 algorithm + /// + [Serializable] + public class BZip2Exception : SharpZipBaseException + { + /// + /// Deserialization constructor + /// + /// for this constructor + protected BZip2Exception(SerializationInfo info) : base(info) + { + } + + /// + /// Initialise a new instance of BZip2Exception + /// + public BZip2Exception() + { + + } + + /// + /// Initialise a new instance of BZip2Exception with its message set to message. + /// + /// The message describing the error. + public BZip2Exception(string message) : base(message) + { + } + + /// + /// Initialise an instance of BZip2Exception + /// + /// A message describing the error. + /// The exception that is the cause of the current exception. + public BZip2Exception(string message, Exception exception) + : base(message, exception) + { + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/BZip2/BZip2InputStream.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/BZip2/BZip2InputStream.cs new file mode 100644 index 0000000..b184d24 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/BZip2/BZip2InputStream.cs @@ -0,0 +1,1087 @@ +// BZip2InputStream.cs +// +// Copyright (C) 2001 Mike Krueger +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using System.IO; +using ICSharpCode.SharpZipLib.Silverlight.Checksums; + +namespace ICSharpCode.SharpZipLib.Silverlight.BZip2 +{ + /// + /// An input stream that decompresses files in the BZip2 format + /// + public class BZip2InputStream : Stream + { + #region Constants + + private const int NO_RAND_PART_A_STATE = 5; + private const int NO_RAND_PART_B_STATE = 6; + private const int NO_RAND_PART_C_STATE = 7; + private const int RAND_PART_A_STATE = 2; + private const int RAND_PART_B_STATE = 3; + private const int RAND_PART_C_STATE = 4; + private const int START_BLOCK_STATE = 1; + + #endregion + + #region Constructors + + /// + /// Construct instance for reading from stream + /// + /// Data source + public BZip2InputStream(Stream stream) + { + // init arrays + for (var i = 0; i < BZip2Constants.N_GROUPS; ++i) + { + limit[i] = new int[BZip2Constants.MAX_ALPHA_SIZE]; + baseArray[i] = new int[BZip2Constants.MAX_ALPHA_SIZE]; + perm[i] = new int[BZip2Constants.MAX_ALPHA_SIZE]; + } + + BsSetStream(stream); + Initialize(); + InitBlock(); + SetupBlock(); + } + + #endregion + + /// + /// Get/set flag indicating ownership of underlying stream. + /// When the flag is true will close the underlying stream also. + /// + public bool IsStreamOwner + { + get { return isStreamOwner; } + set { isStreamOwner = value; } + } + + #region Stream Overrides + + /// + /// Gets a value indicating if the stream supports reading + /// + public override bool CanRead + { + get { return baseStream.CanRead; } + } + + /// + /// Gets a value indicating whether the current stream supports seeking. + /// + public override bool CanSeek + { + get { return baseStream.CanSeek; } + } + + /// + /// Gets a value indicating whether the current stream supports writing. + /// This property always returns false + /// + public override bool CanWrite + { + get { return false; } + } + + /// + /// Gets the length in bytes of the stream. + /// + public override long Length + { + get { return baseStream.Length; } + } + + /// + /// Gets or sets the streams position. + /// Setting the position is not supported and will throw a NotSupportException + /// + /// Any attempt to set the position + public override long Position + { + get { return baseStream.Position; } + set { throw new NotSupportedException("BZip2InputStream position cannot be set"); } + } + + /// + /// Flushes the stream. + /// + public override void Flush() + { + if (baseStream != null) + { + baseStream.Flush(); + } + } + + /// + /// Set the streams position. This operation is not supported and will throw a NotSupportedException + /// + /// A byte offset relative to the parameter. + /// A value of type indicating the reference point used to obtain the new position. + /// The new position of the stream. + /// Any access + public override long Seek(long offset, SeekOrigin origin) + { + throw new NotSupportedException("BZip2InputStream Seek not supported"); + } + + /// + /// Sets the length of this stream to the given value. + /// This operation is not supported and will throw a NotSupportedExceptionortedException + /// + /// The new length for the stream. + /// Any access + public override void SetLength(long value) + { + throw new NotSupportedException("BZip2InputStream SetLength not supported"); + } + + /// + /// Writes a block of bytes to this stream using data from a buffer. + /// This operation is not supported and will throw a NotSupportedException + /// + /// The buffer to source data from. + /// The offset to start obtaining data from. + /// The number of bytes of data to write. + /// Any access + public override void Write(byte[] buffer, int offset, int count) + { + throw new NotSupportedException("BZip2InputStream Write not supported"); + } + + /// + /// Writes a byte to the current position in the file stream. + /// This operation is not supported and will throw a NotSupportedException + /// + /// The value to write. + /// Any access + public override void WriteByte(byte value) + { + throw new NotSupportedException("BZip2InputStream WriteByte not supported"); + } + + /// + /// Read a sequence of bytes and advances the read position by one byte. + /// + /// Array of bytes to store values in + /// Offset in array to begin storing data + /// The maximum number of bytes to read + /// The total number of bytes read into the buffer. This might be less + /// than the number of bytes requested if that number of bytes are not + /// currently available or zero if the end of the stream is reached. + /// + public override int Read(byte[] buffer, int offset, int count) + { + if (buffer == null) + { + throw new ArgumentNullException("buffer"); + } + + for (var i = 0; i < count; ++i) + { + var rb = ReadByte(); + if (rb == -1) + { + return i; + } + buffer[offset + i] = (byte) rb; + } + return count; + } + + /// + /// Closes the stream, releasing any associated resources. + /// + public override void Close() + { + if (IsStreamOwner && (baseStream != null)) + { + baseStream.Close(); + } + } + + /// + /// Read a byte from stream advancing position + /// + /// byte read or -1 on end of stream + public override int ReadByte() + { + if (streamEnd) + { + return -1; // ok + } + + var retChar = currentChar; + switch (currentState) + { + case RAND_PART_B_STATE: + SetupRandPartB(); + break; + case RAND_PART_C_STATE: + SetupRandPartC(); + break; + case NO_RAND_PART_B_STATE: + SetupNoRandPartB(); + break; + case NO_RAND_PART_C_STATE: + SetupNoRandPartC(); + break; + case START_BLOCK_STATE: + case NO_RAND_PART_A_STATE: + case RAND_PART_A_STATE: + break; + default: + break; + } + return retChar; + } + + #endregion + + private void MakeMaps() + { + nInUse = 0; + for (var i = 0; i < 256; ++i) + { + if (inUse[i]) + { + seqToUnseq[nInUse] = (byte) i; + unseqToSeq[i] = (byte) nInUse; + nInUse++; + } + } + } + + private void Initialize() + { + var magic1 = BsGetUChar(); + var magic2 = BsGetUChar(); + + var magic3 = BsGetUChar(); + var magic4 = BsGetUChar(); + + if (magic1 != 'B' || magic2 != 'Z' || magic3 != 'h' || magic4 < '1' || magic4 > '9') + { + streamEnd = true; + return; + } + + SetDecompressStructureSizes(magic4 - '0'); + computedCombinedCRC = 0; + } + + private void InitBlock() + { + var magic1 = BsGetUChar(); + var magic2 = BsGetUChar(); + var magic3 = BsGetUChar(); + var magic4 = BsGetUChar(); + var magic5 = BsGetUChar(); + var magic6 = BsGetUChar(); + + if (magic1 == 0x17 && magic2 == 0x72 && magic3 == 0x45 && magic4 == 0x38 && magic5 == 0x50 && magic6 == 0x90) + { + Complete(); + return; + } + + if (magic1 != 0x31 || magic2 != 0x41 || magic3 != 0x59 || magic4 != 0x26 || magic5 != 0x53 || magic6 != 0x59) + { + BadBlockHeader(); + streamEnd = true; + return; + } + + storedBlockCRC = BsGetInt32(); + + blockRandomised = (BsR(1) == 1); + + GetAndMoveToFrontDecode(); + + mCrc.Reset(); + currentState = START_BLOCK_STATE; + } + + private void EndBlock() + { + computedBlockCRC = (int) mCrc.Value; + + // -- A bad CRC is considered a fatal error. -- + if (storedBlockCRC != computedBlockCRC) + { + CrcError(); + } + + // 1528150659 + computedCombinedCRC = ((computedCombinedCRC << 1) & 0xFFFFFFFF) | (computedCombinedCRC >> 31); + computedCombinedCRC = computedCombinedCRC ^ (uint) computedBlockCRC; + } + + private void Complete() + { + storedCombinedCRC = BsGetInt32(); + if (storedCombinedCRC != (int) computedCombinedCRC) + { + CrcError(); + } + + streamEnd = true; + } + + private void BsSetStream(Stream stream) + { + baseStream = stream; + bsLive = 0; + bsBuff = 0; + } + + private void FillBuffer() + { + var thech = 0; + + try + { + thech = baseStream.ReadByte(); + } + catch (Exception) + { + CompressedStreamEOF(); + } + + if (thech == -1) + { + CompressedStreamEOF(); + } + + bsBuff = (bsBuff << 8) | (thech & 0xFF); + bsLive += 8; + } + + private int BsR(int n) + { + while (bsLive < n) + { + FillBuffer(); + } + + var v = (bsBuff >> (bsLive - n)) & ((1 << n) - 1); + bsLive -= n; + return v; + } + + private char BsGetUChar() + { + return (char) BsR(8); + } + + private int BsGetint() + { + var u = BsR(8); + u = (u << 8) | BsR(8); + u = (u << 8) | BsR(8); + u = (u << 8) | BsR(8); + return u; + } + + private int BsGetIntVS(int numBits) + { + return BsR(numBits); + } + + private int BsGetInt32() + { + return BsGetint(); + } + + private void RecvDecodingTables() + { + var len = new char[BZip2Constants.N_GROUPS][]; + for (var i = 0; i < BZip2Constants.N_GROUPS; ++i) + { + len[i] = new char[BZip2Constants.MAX_ALPHA_SIZE]; + } + + var inUse16 = new bool[16]; + + //--- Receive the mapping table --- + for (var i = 0; i < 16; i++) + { + inUse16[i] = (BsR(1) == 1); + } + + for (var i = 0; i < 16; i++) + { + if (inUse16[i]) + { + for (var j = 0; j < 16; j++) + { + inUse[i*16 + j] = (BsR(1) == 1); + } + } + else + { + for (var j = 0; j < 16; j++) + { + inUse[i*16 + j] = false; + } + } + } + + MakeMaps(); + var alphaSize = nInUse + 2; + + //--- Now the selectors --- + var nGroups = BsR(3); + var nSelectors = BsR(15); + + for (var i = 0; i < nSelectors; i++) + { + var j = 0; + while (BsR(1) == 1) + { + j++; + } + selectorMtf[i] = (byte) j; + } + + //--- Undo the MTF values for the selectors. --- + var pos = new byte[BZip2Constants.N_GROUPS]; + for (var v = 0; v < nGroups; v++) + { + pos[v] = (byte) v; + } + + for (var i = 0; i < nSelectors; i++) + { + int v = selectorMtf[i]; + var tmp = pos[v]; + while (v > 0) + { + pos[v] = pos[v - 1]; + v--; + } + pos[0] = tmp; + selector[i] = tmp; + } + + //--- Now the coding tables --- + for (var t = 0; t < nGroups; t++) + { + var curr = BsR(5); + for (var i = 0; i < alphaSize; i++) + { + while (BsR(1) == 1) + { + if (BsR(1) == 0) + { + curr++; + } + else + { + curr--; + } + } + len[t][i] = (char) curr; + } + } + + //--- Create the Huffman decoding tables --- + for (var t = 0; t < nGroups; t++) + { + var minLen = 32; + var maxLen = 0; + for (var i = 0; i < alphaSize; i++) + { + maxLen = Math.Max(maxLen, len[t][i]); + minLen = Math.Min(minLen, len[t][i]); + } + HbCreateDecodeTables(limit[t], baseArray[t], perm[t], len[t], minLen, maxLen, alphaSize); + minLens[t] = minLen; + } + } + + private void GetAndMoveToFrontDecode() + { + var yy = new byte[256]; + + var limitLast = BZip2Constants.baseBlockSize*blockSize100k; + origPtr = BsGetIntVS(24); + + RecvDecodingTables(); + var EOB = nInUse + 1; + var groupNo = -1; + var groupPos = 0; + + /*-- + Setting up the unzftab entries here is not strictly + necessary, but it does save having to do it later + in a separate pass, and so saves a block's worth of + cache misses. + --*/ + for (var i = 0; i <= 255; i++) + { + unzftab[i] = 0; + } + + for (var i = 0; i <= 255; i++) + { + yy[i] = (byte) i; + } + + last = -1; + + if (groupPos == 0) + { + groupNo++; + groupPos = BZip2Constants.G_SIZE; + } + + groupPos--; + int zt = selector[groupNo]; + var zn = minLens[zt]; + var zvec = BsR(zn); + int zj; + + while (zvec > limit[zt][zn]) + { + if (zn > 20) + { + // the longest code + throw new BZip2Exception("Bzip data error"); + } + zn++; + while (bsLive < 1) + { + FillBuffer(); + } + zj = (bsBuff >> (bsLive - 1)) & 1; + bsLive--; + zvec = (zvec << 1) | zj; + } + if (zvec - baseArray[zt][zn] < 0 || zvec - baseArray[zt][zn] >= BZip2Constants.MAX_ALPHA_SIZE) + { + throw new BZip2Exception("Bzip data error"); + } + int nextSym = perm[zt][zvec - baseArray[zt][zn]]; + + while (true) + { + if (nextSym == EOB) + { + break; + } + + if (nextSym == BZip2Constants.RUNA || nextSym == BZip2Constants.RUNB) + { + var s = -1; + var n = 1; + do + { + if (nextSym == BZip2Constants.RUNA) + { + s += (0 + 1)*n; + } + else if (nextSym == BZip2Constants.RUNB) + { + s += (1 + 1)*n; + } + + n <<= 1; + + if (groupPos == 0) + { + groupNo++; + groupPos = BZip2Constants.G_SIZE; + } + + groupPos--; + + zt = selector[groupNo]; + zn = minLens[zt]; + zvec = BsR(zn); + + while (zvec > limit[zt][zn]) + { + zn++; + while (bsLive < 1) + { + FillBuffer(); + } + zj = (bsBuff >> (bsLive - 1)) & 1; + bsLive--; + zvec = (zvec << 1) | zj; + } + nextSym = perm[zt][zvec - baseArray[zt][zn]]; + } while (nextSym == BZip2Constants.RUNA || nextSym == BZip2Constants.RUNB); + + s++; + var ch = seqToUnseq[yy[0]]; + unzftab[ch] += s; + + while (s > 0) + { + last++; + ll8[last] = ch; + s--; + } + + if (last >= limitLast) + { + BlockOverrun(); + } + continue; + } + last++; + if (last >= limitLast) + { + BlockOverrun(); + } + + var tmp = yy[nextSym - 1]; + unzftab[seqToUnseq[tmp]]++; + ll8[last] = seqToUnseq[tmp]; + + for (var j = nextSym - 1; j > 0; --j) + { + yy[j] = yy[j - 1]; + } + yy[0] = tmp; + + if (groupPos == 0) + { + groupNo++; + groupPos = BZip2Constants.G_SIZE; + } + + groupPos--; + zt = selector[groupNo]; + zn = minLens[zt]; + zvec = BsR(zn); + while (zvec > limit[zt][zn]) + { + zn++; + while (bsLive < 1) + { + FillBuffer(); + } + zj = (bsBuff >> (bsLive - 1)) & 1; + bsLive--; + zvec = (zvec << 1) | zj; + } + nextSym = perm[zt][zvec - baseArray[zt][zn]]; + continue; + } + } + + private void SetupBlock() + { + var cftab = new int[257]; + + cftab[0] = 0; + Array.Copy(unzftab, 0, cftab, 1, 256); + + for (var i = 1; i <= 256; i++) + { + cftab[i] += cftab[i - 1]; + } + + for (var i = 0; i <= last; i++) + { + var ch = ll8[i]; + tt[cftab[ch]] = i; + cftab[ch]++; + } + + tPos = tt[origPtr]; + + count = 0; + i2 = 0; + ch2 = 256; /*-- not a char and not EOF --*/ + + if (blockRandomised) + { + rNToGo = 0; + rTPos = 0; + SetupRandPartA(); + } + else + { + SetupNoRandPartA(); + } + } + + private void SetupRandPartA() + { + if (i2 <= last) + { + chPrev = ch2; + ch2 = ll8[tPos]; + tPos = tt[tPos]; + if (rNToGo == 0) + { + rNToGo = BZip2Constants.rNums[rTPos]; + rTPos++; + if (rTPos == 512) + { + rTPos = 0; + } + } + rNToGo--; + ch2 ^= ((rNToGo == 1) ? 1 : 0); + i2++; + + currentChar = ch2; + currentState = RAND_PART_B_STATE; + mCrc.Update(ch2); + } + else + { + EndBlock(); + InitBlock(); + SetupBlock(); + } + } + + private void SetupNoRandPartA() + { + if (i2 <= last) + { + chPrev = ch2; + ch2 = ll8[tPos]; + tPos = tt[tPos]; + i2++; + + currentChar = ch2; + currentState = NO_RAND_PART_B_STATE; + mCrc.Update(ch2); + } + else + { + EndBlock(); + InitBlock(); + SetupBlock(); + } + } + + private void SetupRandPartB() + { + if (ch2 != chPrev) + { + currentState = RAND_PART_A_STATE; + count = 1; + SetupRandPartA(); + } + else + { + count++; + if (count >= 4) + { + z = ll8[tPos]; + tPos = tt[tPos]; + if (rNToGo == 0) + { + rNToGo = BZip2Constants.rNums[rTPos]; + rTPos++; + if (rTPos == 512) + { + rTPos = 0; + } + } + rNToGo--; + z ^= (byte) ((rNToGo == 1) ? 1 : 0); + j2 = 0; + currentState = RAND_PART_C_STATE; + SetupRandPartC(); + } + else + { + currentState = RAND_PART_A_STATE; + SetupRandPartA(); + } + } + } + + private void SetupRandPartC() + { + if (j2 < z) + { + currentChar = ch2; + mCrc.Update(ch2); + j2++; + } + else + { + currentState = RAND_PART_A_STATE; + i2++; + count = 0; + SetupRandPartA(); + } + } + + private void SetupNoRandPartB() + { + if (ch2 != chPrev) + { + currentState = NO_RAND_PART_A_STATE; + count = 1; + SetupNoRandPartA(); + } + else + { + count++; + if (count >= 4) + { + z = ll8[tPos]; + tPos = tt[tPos]; + currentState = NO_RAND_PART_C_STATE; + j2 = 0; + SetupNoRandPartC(); + } + else + { + currentState = NO_RAND_PART_A_STATE; + SetupNoRandPartA(); + } + } + } + + private void SetupNoRandPartC() + { + if (j2 < z) + { + currentChar = ch2; + mCrc.Update(ch2); + j2++; + } + else + { + currentState = NO_RAND_PART_A_STATE; + i2++; + count = 0; + SetupNoRandPartA(); + } + } + + private void SetDecompressStructureSizes(int newSize100k) + { + if (!(0 <= newSize100k && newSize100k <= 9 && 0 <= blockSize100k && blockSize100k <= 9)) + { + throw new BZip2Exception("Invalid block size"); + } + + blockSize100k = newSize100k; + + if (newSize100k == 0) + { + return; + } + + var n = BZip2Constants.baseBlockSize*newSize100k; + ll8 = new byte[n]; + tt = new int[n]; + } + + private static void CompressedStreamEOF() + { + throw new EndOfStreamException("BZip2 input stream end of compressed stream"); + } + + private static void BlockOverrun() + { + throw new BZip2Exception("BZip2 input stream block overrun"); + } + + private static void BadBlockHeader() + { + throw new BZip2Exception("BZip2 input stream bad block header"); + } + + private static void CrcError() + { + throw new BZip2Exception("BZip2 input stream crc error"); + } + + private static void HbCreateDecodeTables(int[] limit, int[] baseArray, int[] perm, char[] length, int minLen, + int maxLen, int alphaSize) + { + var pp = 0; + + for (var i = minLen; i <= maxLen; ++i) + { + for (var j = 0; j < alphaSize; ++j) + { + if (length[j] == i) + { + perm[pp] = j; + ++pp; + } + } + } + + for (var i = 0; i < BZip2Constants.MAX_CODE_LEN; i++) + { + baseArray[i] = 0; + } + + for (var i = 0; i < alphaSize; i++) + { + ++baseArray[length[i] + 1]; + } + + for (var i = 1; i < BZip2Constants.MAX_CODE_LEN; i++) + { + baseArray[i] += baseArray[i - 1]; + } + + for (var i = 0; i < BZip2Constants.MAX_CODE_LEN; i++) + { + limit[i] = 0; + } + + var vec = 0; + + for (var i = minLen; i <= maxLen; i++) + { + vec += (baseArray[i + 1] - baseArray[i]); + limit[i] = vec - 1; + vec <<= 1; + } + + for (var i = minLen + 1; i <= maxLen; i++) + { + baseArray[i] = ((limit[i - 1] + 1) << 1) - baseArray[i]; + } + } + + #region Instance Fields + + /*-- + index of the last char in the block, so + the block size == last + 1. + --*/ + + private readonly int[][] baseArray = new int[BZip2Constants.N_GROUPS][]; + private readonly bool[] inUse = new bool[256]; + private readonly int[][] limit = new int[BZip2Constants.N_GROUPS][]; + private readonly IChecksum mCrc = new StrangeCRC(); + private readonly int[] minLens = new int[BZip2Constants.N_GROUPS]; + private readonly int[][] perm = new int[BZip2Constants.N_GROUPS][]; + + private readonly byte[] selector = new byte[BZip2Constants.MAX_SELECTORS]; + private readonly byte[] selectorMtf = new byte[BZip2Constants.MAX_SELECTORS]; + private readonly byte[] seqToUnseq = new byte[256]; + private readonly byte[] unseqToSeq = new byte[256]; + + /*-- + freq table collected to save a pass over the data + during decompression. + --*/ + private readonly int[] unzftab = new int[256]; + + private Stream baseStream; + private bool blockRandomised; + private int blockSize100k; + private int bsBuff; + private int bsLive; + private int ch2; + private int chPrev; + private int computedBlockCRC; + private uint computedCombinedCRC; + + private int count; + private int currentChar = -1; + + private int currentState = START_BLOCK_STATE; + private int i2; + private bool isStreamOwner = true; + private int j2; + private int last; + private byte[] ll8; + private int nInUse; + private int origPtr; + private int rNToGo; + private int rTPos; + private int storedBlockCRC, storedCombinedCRC; + private bool streamEnd; + private int tPos; + private int[] tt; + private byte z; + + #endregion + } +} + +/* This file was derived from a file containing this license: + * + * This file is a part of bzip2 and/or libbzip2, a program and + * library for lossless, block-sorting data compression. + * + * Copyright (C) 1996-1998 Julian R Seward. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. The origin of this software must not be misrepresented; you must + * not claim that you wrote the original software. If you use this + * software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 3. Altered source versions must be plainly marked as such, and must + * not be misrepresented as being the original software. + * + * 4. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Java version ported by Keiron Liddle, Aftex Software 1999-2001 + */ \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/BZip2/BZip2OutputStream.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/BZip2/BZip2OutputStream.cs new file mode 100644 index 0000000..0e835cb --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/BZip2/BZip2OutputStream.cs @@ -0,0 +1,1911 @@ +// BZip2OutputStream.cs +// +// Copyright (C) 2001 Mike Krueger +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using System.IO; +using ICSharpCode.SharpZipLib.Silverlight.BZip2; +using ICSharpCode.SharpZipLib.Silverlight.Checksums; + +namespace ICSharpCode.SharpZipLib.Silverlight.BZip2 +{ + /// + /// An output stream that compresses into the BZip2 format + /// including file header chars into another stream. + /// + public class BZip2OutputStream : Stream + { + #region Constants + const int SETMASK = (1 << 21); + const int CLEARMASK = (~SETMASK); + const int GREATER_ICOST = 15; + const int LESSER_ICOST = 0; + const int SMALL_THRESH = 20; + const int DEPTH_THRESH = 10; + + /*-- + If you are ever unlucky/improbable enough + to get a stack overflow whilst sorting, + increase the following constant and try + again. In practice I have never seen the + stack go above 27 elems, so the following + limit seems very generous. + --*/ + const int QSORT_STACK_SIZE = 1000; + + /*-- + Knuth's increments seem to work better + than Incerpi-Sedgewick here. Possibly + because the number of elems to sort is + usually small, typically <= 20. + --*/ + readonly int[] increments = new int[] { + 1, 4, 13, 40, 121, 364, 1093, 3280, + 9841, 29524, 88573, 265720, + 797161, 2391484 + }; + #endregion + + #region Constructors + /// + /// Construct a default output stream with maximum block size + /// + /// The stream to write BZip data onto. + public BZip2OutputStream(Stream stream) : this(stream, 9) + { + } + + /// + /// Initialise a new instance of the + /// for the specified stream, using the given blocksize. + /// + /// The stream to write compressed data to. + /// The block size to use. + /// + /// Valid block sizes are in the range 1..9, with 1 giving + /// the lowest compression and 9 the highest. + /// + public BZip2OutputStream(Stream stream, int blockSize) + { + BsSetStream(stream); + + workFactor = 50; + if (blockSize > 9) { + blockSize = 9; + } + + if (blockSize < 1) { + blockSize = 1; + } + blockSize100k = blockSize; + AllocateCompressStructures(); + Initialize(); + InitBlock(); + } + #endregion + + #region Destructor + /// + /// Ensures that resources are freed and other cleanup operations + /// are performed when the garbage collector reclaims the BZip2OutputStream. + /// + ~BZip2OutputStream() + { + Dispose(false); + } + #endregion + + /// + /// Get/set flag indicating ownership of underlying stream. + /// When the flag is true will close the underlying stream also. + /// + public bool IsStreamOwner + { + get { return isStreamOwner; } + set { isStreamOwner = value; } + } + + + #region Stream overrides + /// + /// Gets a value indicating whether the current stream supports reading + /// + public override bool CanRead + { + get { + return false; + } + } + + /// + /// Gets a value indicating whether the current stream supports seeking + /// + public override bool CanSeek { + get { + return false; + } + } + + /// + /// Gets a value indicating whether the current stream supports writing + /// + public override bool CanWrite { + get { + return baseStream.CanWrite; + } + } + + /// + /// Gets the length in bytes of the stream + /// + public override long Length { + get { + return baseStream.Length; + } + } + + /// + /// Gets or sets the current position of this stream. + /// + public override long Position { + get { + return baseStream.Position; + } + set { + throw new NotSupportedException("BZip2OutputStream position cannot be set"); + } + } + + /// + /// Sets the current position of this stream to the given value. + /// + /// The point relative to the offset from which to being seeking. + /// The reference point from which to begin seeking. + /// The new position in the stream. + public override long Seek(long offset, SeekOrigin origin) + { + throw new NotSupportedException("BZip2OutputStream Seek not supported"); + } + + /// + /// Sets the length of this stream to the given value. + /// + /// The new stream length. + public override void SetLength(long value) + { + throw new NotSupportedException("BZip2OutputStream SetLength not supported"); + } + + /// + /// Read a byte from the stream advancing the position. + /// + /// The byte read cast to an int; -1 if end of stream. + public override int ReadByte() + { + throw new NotSupportedException("BZip2OutputStream ReadByte not supported"); + } + + /// + /// Read a block of bytes + /// + /// The buffer to read into. + /// The offset in the buffer to start storing data at. + /// The maximum number of bytes to read. + /// The total number of bytes read. This might be less than the number of bytes + /// requested if that number of bytes are not currently available, or zero + /// if the end of the stream is reached. + public override int Read(byte[] buffer, int offset, int count) + { + throw new NotSupportedException("BZip2OutputStream Read not supported"); + } + + /// + /// Write a block of bytes to the stream + /// + /// The buffer containing data to write. + /// The offset of the first byte to write. + /// The number of bytes to write. + public override void Write(byte[] buffer, int offset, int count) + { + if ( buffer == null ) { + throw new ArgumentNullException("buffer"); + } + + if ( offset < 0 ) + { + throw new ArgumentOutOfRangeException("offset"); + } + + if ( count < 0 ) + { + throw new ArgumentOutOfRangeException("count"); + } + + if ( buffer.Length - offset < count ) + { + throw new ArgumentException("Offset/count out of range"); + } + + for (int i = 0; i < count; ++i) { + WriteByte(buffer[offset + i]); + } + } + + /// + /// Write a byte to the stream. + /// + /// The byte to write to the stream. + public override void WriteByte(byte value) + { + int b = (256 + value) % 256; + if (currentChar != -1) { + if (currentChar == b) { + runLength++; + if (runLength > 254) { + WriteRun(); + currentChar = -1; + runLength = 0; + } + } else { + WriteRun(); + runLength = 1; + currentChar = b; + } + } else { + currentChar = b; + runLength++; + } + } + + /// + /// End the current block and end compression. + /// Close the stream and free any resources + /// + public override void Close() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + #endregion + void MakeMaps() + { + nInUse = 0; + for (int i = 0; i < 256; i++) { + if (inUse[i]) { + seqToUnseq[nInUse] = (char)i; + unseqToSeq[i] = (char)nInUse; + nInUse++; + } + } + } + + /// + /// Get the number of bytes written to output. + /// + void WriteRun() + { + if (last < allowableBlockSize) { + inUse[currentChar] = true; + for (int i = 0; i < runLength; i++) { + mCrc.Update(currentChar); + } + + switch (runLength) { + case 1: + last++; + block[last + 1] = (byte)currentChar; + break; + case 2: + last++; + block[last + 1] = (byte)currentChar; + last++; + block[last + 1] = (byte)currentChar; + break; + case 3: + last++; + block[last + 1] = (byte)currentChar; + last++; + block[last + 1] = (byte)currentChar; + last++; + block[last + 1] = (byte)currentChar; + break; + default: + inUse[runLength - 4] = true; + last++; + block[last + 1] = (byte)currentChar; + last++; + block[last + 1] = (byte)currentChar; + last++; + block[last + 1] = (byte)currentChar; + last++; + block[last + 1] = (byte)currentChar; + last++; + block[last + 1] = (byte)(runLength - 4); + break; + } + } else { + EndBlock(); + InitBlock(); + WriteRun(); + } + } + + /// + /// Get the number of bytes written to the output. + /// + public int BytesWritten + { + get { return bytesOut; } + } + + /// + /// Releases the unmanaged resources used by the and optionally releases the managed resources. + /// + /// true to release both managed and unmanaged resources; false to release only unmanaged resources. + override protected void Dispose(bool disposing) + { + try { + base.Dispose(disposing); + if( !disposed_ ) { + disposed_=true; + + if( runLength>0 ) { + WriteRun(); + } + + currentChar=-1; + EndBlock(); + EndCompression(); + Flush(); + } + } + finally { + if ( disposing ) { + if ( IsStreamOwner ) { + baseStream.Close(); + } + } + } + } + + /// + /// Flush output buffers + /// + public override void Flush() + { + baseStream.Flush(); + } + + void Initialize() + { + bytesOut = 0; + nBlocksRandomised = 0; + + /*--- Write header `magic' bytes indicating file-format == huffmanised, + followed by a digit indicating blockSize100k. + ---*/ + + BsPutUChar('B'); + BsPutUChar('Z'); + + BsPutUChar('h'); + BsPutUChar('0' + blockSize100k); + + combinedCRC = 0; + } + + void InitBlock() + { + mCrc.Reset(); + last = -1; + + for (int i = 0; i < 256; i++) { + inUse[i] = false; + } + + /*--- 20 is just a paranoia constant ---*/ + allowableBlockSize = BZip2Constants.baseBlockSize * blockSize100k - 20; + } + + void EndBlock() + { + if (last < 0) { // dont do anything for empty files, (makes empty files compatible with original Bzip) + return; + } + + blockCRC = unchecked((uint)mCrc.Value); + combinedCRC = (combinedCRC << 1) | (combinedCRC >> 31); + combinedCRC ^= blockCRC; + + /*-- sort the block and establish position of original string --*/ + DoReversibleTransformation(); + + /*-- + A 6-byte block header, the value chosen arbitrarily + as 0x314159265359 :-). A 32 bit value does not really + give a strong enough guarantee that the value will not + appear by chance in the compressed datastream. Worst-case + probability of this event, for a 900k block, is about + 2.0e-3 for 32 bits, 1.0e-5 for 40 bits and 4.0e-8 for 48 bits. + For a compressed file of size 100Gb -- about 100000 blocks -- + only a 48-bit marker will do. NB: normal compression/ + decompression do *not* rely on these statistical properties. + They are only important when trying to recover blocks from + damaged files. + --*/ + BsPutUChar(0x31); + BsPutUChar(0x41); + BsPutUChar(0x59); + BsPutUChar(0x26); + BsPutUChar(0x53); + BsPutUChar(0x59); + + /*-- Now the block's CRC, so it is in a known place. --*/ + unchecked { + BsPutint((int)blockCRC); + } + + /*-- Now a single bit indicating randomisation. --*/ + if (blockRandomised) { + BsW(1,1); + nBlocksRandomised++; + } else { + BsW(1,0); + } + + /*-- Finally, block's contents proper. --*/ + MoveToFrontCodeAndSend(); + } + + void EndCompression() + { + /*-- + Now another magic 48-bit number, 0x177245385090, to + indicate the end of the last block. (sqrt(pi), if + you want to know. I did want to use e, but it contains + too much repetition -- 27 18 28 18 28 46 -- for me + to feel statistically comfortable. Call me paranoid.) + --*/ + BsPutUChar(0x17); + BsPutUChar(0x72); + BsPutUChar(0x45); + BsPutUChar(0x38); + BsPutUChar(0x50); + BsPutUChar(0x90); + + unchecked { + BsPutint((int)combinedCRC); + } + + BsFinishedWithStream(); + } + + void BsSetStream(Stream stream) + { + baseStream = stream; + bsLive = 0; + bsBuff = 0; + bytesOut = 0; + } + + void BsFinishedWithStream() + { + while (bsLive > 0) + { + int ch = (bsBuff >> 24); + baseStream.WriteByte((byte)ch); // write 8-bit + bsBuff <<= 8; + bsLive -= 8; + bytesOut++; + } + } + + void BsW(int n, int v) + { + while (bsLive >= 8) { + int ch = (bsBuff >> 24); + unchecked{baseStream.WriteByte((byte)ch);} // write 8-bit + bsBuff <<= 8; + bsLive -= 8; + ++bytesOut; + } + bsBuff |= (v << (32 - bsLive - n)); + bsLive += n; + } + + void BsPutUChar(int c) + { + BsW(8, c); + } + + void BsPutint(int u) + { + BsW(8, (u >> 24) & 0xFF); + BsW(8, (u >> 16) & 0xFF); + BsW(8, (u >> 8) & 0xFF); + BsW(8, u & 0xFF); + } + + void BsPutIntVS(int numBits, int c) + { + BsW(numBits, c); + } + + void SendMTFValues() + { + char[][] len = new char[BZip2Constants.N_GROUPS][]; + for (int i = 0; i < BZip2Constants.N_GROUPS; ++i) { + len[i] = new char[BZip2Constants.MAX_ALPHA_SIZE]; + } + + int gs, ge, totc, bt, bc, iter; + int nSelectors = 0, alphaSize, minLen, maxLen, selCtr; + int nGroups; + + alphaSize = nInUse + 2; + for (int t = 0; t < BZip2Constants.N_GROUPS; t++) { + for (int v = 0; v < alphaSize; v++) { + len[t][v] = (char)GREATER_ICOST; + } + } + + /*--- Decide how many coding tables to use ---*/ + if (nMTF <= 0) { + Panic(); + } + + if (nMTF < 200) { + nGroups = 2; + } else if (nMTF < 600) { + nGroups = 3; + } else if (nMTF < 1200) { + nGroups = 4; + } else if (nMTF < 2400) { + nGroups = 5; + } else { + nGroups = 6; + } + + /*--- Generate an initial set of coding tables ---*/ + int nPart = nGroups; + int remF = nMTF; + gs = 0; + while (nPart > 0) { + int tFreq = remF / nPart; + int aFreq = 0; + ge = gs - 1; + while (aFreq < tFreq && ge < alphaSize - 1) { + ge++; + aFreq += mtfFreq[ge]; + } + + if (ge > gs && nPart != nGroups && nPart != 1 && ((nGroups - nPart) % 2 == 1)) { + aFreq -= mtfFreq[ge]; + ge--; + } + + for (int v = 0; v < alphaSize; v++) { + if (v >= gs && v <= ge) { + len[nPart - 1][v] = (char)LESSER_ICOST; + } else { + len[nPart - 1][v] = (char)GREATER_ICOST; + } + } + + nPart--; + gs = ge + 1; + remF -= aFreq; + } + + int[][] rfreq = new int[BZip2Constants.N_GROUPS][]; + for (int i = 0; i < BZip2Constants.N_GROUPS; ++i) { + rfreq[i] = new int[BZip2Constants.MAX_ALPHA_SIZE]; + } + + int[] fave = new int[BZip2Constants.N_GROUPS]; + short[] cost = new short[BZip2Constants.N_GROUPS]; + /*--- + Iterate up to N_ITERS times to improve the tables. + ---*/ + for (iter = 0; iter < BZip2Constants.N_ITERS; ++iter) { + for (int t = 0; t < nGroups; ++t) { + fave[t] = 0; + } + + for (int t = 0; t < nGroups; ++t) { + for (int v = 0; v < alphaSize; ++v) { + rfreq[t][v] = 0; + } + } + + nSelectors = 0; + totc = 0; + gs = 0; + while (true) { + /*--- Set group start & end marks. --*/ + if (gs >= nMTF) { + break; + } + ge = gs + BZip2Constants.G_SIZE - 1; + if (ge >= nMTF) { + ge = nMTF - 1; + } + + /*-- + Calculate the cost of this group as coded + by each of the coding tables. + --*/ + for (int t = 0; t < nGroups; t++) { + cost[t] = 0; + } + + if (nGroups == 6) { + short cost0, cost1, cost2, cost3, cost4, cost5; + cost0 = cost1 = cost2 = cost3 = cost4 = cost5 = 0; + for (int i = gs; i <= ge; ++i) { + short icv = szptr[i]; + cost0 += (short)len[0][icv]; + cost1 += (short)len[1][icv]; + cost2 += (short)len[2][icv]; + cost3 += (short)len[3][icv]; + cost4 += (short)len[4][icv]; + cost5 += (short)len[5][icv]; + } + cost[0] = cost0; + cost[1] = cost1; + cost[2] = cost2; + cost[3] = cost3; + cost[4] = cost4; + cost[5] = cost5; + } else { + for (int i = gs; i <= ge; ++i) { + short icv = szptr[i]; + for (int t = 0; t < nGroups; t++) { + cost[t] += (short)len[t][icv]; + } + } + } + + /*-- + Find the coding table which is best for this group, + and record its identity in the selector table. + --*/ + bc = 999999999; + bt = -1; + for (int t = 0; t < nGroups; ++t) { + if (cost[t] < bc) { + bc = cost[t]; + bt = t; + } + } + totc += bc; + fave[bt]++; + selector[nSelectors] = (char)bt; + nSelectors++; + + /*-- + Increment the symbol frequencies for the selected table. + --*/ + for (int i = gs; i <= ge; ++i) { + ++rfreq[bt][szptr[i]]; + } + + gs = ge+1; + } + + /*-- + Recompute the tables based on the accumulated frequencies. + --*/ + for (int t = 0; t < nGroups; ++t) { + HbMakeCodeLengths(len[t], rfreq[t], alphaSize, 20); + } + } + + rfreq = null; + fave = null; + cost = null; + + if (!(nGroups < 8)) { + Panic(); + } + + if (!(nSelectors < 32768 && nSelectors <= (2 + (900000 / BZip2Constants.G_SIZE)))) { + Panic(); + } + + /*--- Compute MTF values for the selectors. ---*/ + char[] pos = new char[BZip2Constants.N_GROUPS]; + char ll_i, tmp2, tmp; + + for (int i = 0; i < nGroups; i++) { + pos[i] = (char)i; + } + + for (int i = 0; i < nSelectors; i++) { + ll_i = selector[i]; + int j = 0; + tmp = pos[j]; + while (ll_i != tmp) { + j++; + tmp2 = tmp; + tmp = pos[j]; + pos[j] = tmp2; + } + pos[0] = tmp; + selectorMtf[i] = (char)j; + } + + int[][] code = new int[BZip2Constants.N_GROUPS][]; + + for (int i = 0; i < BZip2Constants.N_GROUPS; ++i) { + code[i] = new int[BZip2Constants.MAX_ALPHA_SIZE]; + } + + /*--- Assign actual codes for the tables. --*/ + for (int t = 0; t < nGroups; t++) { + minLen = 32; + maxLen = 0; + for (int i = 0; i < alphaSize; i++) { + if (len[t][i] > maxLen) { + maxLen = len[t][i]; + } + if (len[t][i] < minLen) { + minLen = len[t][i]; + } + } + if (maxLen > 20) { + Panic(); + } + if (minLen < 1) { + Panic(); + } + HbAssignCodes(code[t], len[t], minLen, maxLen, alphaSize); + } + + /*--- Transmit the mapping table. ---*/ + bool[] inUse16 = new bool[16]; + for (int i = 0; i < 16; ++i) { + inUse16[i] = false; + for (int j = 0; j < 16; ++j) { + if (inUse[i * 16 + j]) { + inUse16[i] = true; + } + } + } + + for (int i = 0; i < 16; ++i) { + if (inUse16[i]) { + BsW(1,1); + } else { + BsW(1,0); + } + } + + for (int i = 0; i < 16; ++i) { + if (inUse16[i]) { + for (int j = 0; j < 16; ++j) { + if (inUse[i * 16 + j]) { + BsW(1,1); + } else { + BsW(1,0); + } + } + } + } + + /*--- Now the selectors. ---*/ + BsW(3, nGroups); + BsW(15, nSelectors); + for (int i = 0; i < nSelectors; ++i) { + for (int j = 0; j < selectorMtf[i]; ++j) { + BsW(1,1); + } + BsW(1,0); + } + + /*--- Now the coding tables. ---*/ + for (int t = 0; t < nGroups; ++t) { + int curr = len[t][0]; + BsW(5, curr); + for (int i = 0; i < alphaSize; ++i) { + while (curr < len[t][i]) { + BsW(2, 2); + curr++; /* 10 */ + } + while (curr > len[t][i]) { + BsW(2, 3); + curr--; /* 11 */ + } + BsW (1, 0); + } + } + + /*--- And finally, the block data proper ---*/ + selCtr = 0; + gs = 0; + while (true) { + if (gs >= nMTF) { + break; + } + ge = gs + BZip2Constants.G_SIZE - 1; + if (ge >= nMTF) { + ge = nMTF - 1; + } + + for (int i = gs; i <= ge; i++) { + BsW(len[selector[selCtr]][szptr[i]], code[selector[selCtr]][szptr[i]]); + } + + gs = ge + 1; + ++selCtr; + } + if (!(selCtr == nSelectors)) { + Panic(); + } + } + + void MoveToFrontCodeAndSend () + { + BsPutIntVS(24, origPtr); + GenerateMTFValues(); + SendMTFValues(); + } + + void SimpleSort(int lo, int hi, int d) + { + int i, j, h, bigN, hp; + int v; + + bigN = hi - lo + 1; + if (bigN < 2) { + return; + } + + hp = 0; + while (increments[hp] < bigN) { + hp++; + } + hp--; + + for (; hp >= 0; hp--) { + h = increments[hp]; + + i = lo + h; + while (true) { + /*-- copy 1 --*/ + if (i > hi) + break; + v = zptr[i]; + j = i; + while (FullGtU(zptr[j-h]+d, v+d)) { + zptr[j] = zptr[j-h]; + j = j - h; + if (j <= (lo + h - 1)) + break; + } + zptr[j] = v; + i++; + + /*-- copy 2 --*/ + if (i > hi) { + break; + } + v = zptr[i]; + j = i; + while (FullGtU ( zptr[j-h]+d, v+d )) { + zptr[j] = zptr[j-h]; + j = j - h; + if (j <= (lo + h - 1)) { + break; + } + } + zptr[j] = v; + i++; + + /*-- copy 3 --*/ + if (i > hi) { + break; + } + v = zptr[i]; + j = i; + while (FullGtU ( zptr[j-h]+d, v+d)) { + zptr[j] = zptr[j-h]; + j = j - h; + if (j <= (lo + h - 1)) { + break; + } + } + zptr[j] = v; + i++; + + if (workDone > workLimit && firstAttempt) { + return; + } + } + } + } + + void Vswap(int p1, int p2, int n ) + { + int temp = 0; + while (n > 0) { + temp = zptr[p1]; + zptr[p1] = zptr[p2]; + zptr[p2] = temp; + p1++; + p2++; + n--; + } + } + + void QSort3(int loSt, int hiSt, int dSt) + { + int unLo, unHi, ltLo, gtHi, med, n, m; + int lo, hi, d; + StackElement[] stack = new StackElement[QSORT_STACK_SIZE]; + for (int count = 0; count < QSORT_STACK_SIZE; count++) { + stack[count] = new StackElement(); + } + + int sp = 0; + + stack[sp].ll = loSt; + stack[sp].hh = hiSt; + stack[sp].dd = dSt; + sp++; + + while (sp > 0) { + if (sp >= QSORT_STACK_SIZE) { + Panic(); + } + + sp--; + lo = stack[sp].ll; + hi = stack[sp].hh; + d = stack[sp].dd; + + if (hi - lo < SMALL_THRESH || d > DEPTH_THRESH) { + SimpleSort(lo, hi, d); + if (workDone > workLimit && firstAttempt) { + return; + } + continue; + } + + med = Med3(block[zptr[lo] + d + 1], + block[zptr[hi ] + d + 1], + block[zptr[(lo + hi) >> 1] + d + 1]); + + unLo = ltLo = lo; + unHi = gtHi = hi; + + while (true) { + while (true) { + if (unLo > unHi) { + break; + } + n = ((int)block[zptr[unLo]+d + 1]) - med; + if (n == 0) { + int temp = 0; + temp = zptr[unLo]; + zptr[unLo] = zptr[ltLo]; + zptr[ltLo] = temp; + ltLo++; + unLo++; + continue; + } + if (n > 0) { + break; + } + unLo++; + } + + while (true) { + if (unLo > unHi) { + break; + } + n = ((int)block[zptr[unHi]+d + 1]) - med; + if (n == 0) { + int temp = 0; + temp = zptr[unHi]; + zptr[unHi] = zptr[gtHi]; + zptr[gtHi] = temp; + gtHi--; + unHi--; + continue; + } + if (n < 0) { + break; + } + unHi--; + } + + if (unLo > unHi) { + break; + } + + { + int temp = zptr[unLo]; + zptr[unLo] = zptr[unHi]; + zptr[unHi] = temp; + unLo++; + unHi--; + } + } + + if (gtHi < ltLo) { + stack[sp].ll = lo; + stack[sp].hh = hi; + stack[sp].dd = d+1; + sp++; + continue; + } + + n = ((ltLo-lo) < (unLo-ltLo)) ? (ltLo-lo) : (unLo-ltLo); + Vswap(lo, unLo-n, n); + m = ((hi-gtHi) < (gtHi-unHi)) ? (hi-gtHi) : (gtHi-unHi); + Vswap(unLo, hi-m+1, m); + + n = lo + unLo - ltLo - 1; + m = hi - (gtHi - unHi) + 1; + + stack[sp].ll = lo; + stack[sp].hh = n; + stack[sp].dd = d; + sp++; + + stack[sp].ll = n + 1; + stack[sp].hh = m - 1; + stack[sp].dd = d+1; + sp++; + + stack[sp].ll = m; + stack[sp].hh = hi; + stack[sp].dd = d; + sp++; + } + } + + void MainSort() + { + int i, j, ss, sb; + int[] runningOrder = new int[256]; + int[] copy = new int[256]; + bool[] bigDone = new bool[256]; + int c1, c2; + int numQSorted; + + /*-- + In the various block-sized structures, live data runs + from 0 to last+NUM_OVERSHOOT_BYTES inclusive. First, + set up the overshoot area for block. + --*/ + + // if (verbosity >= 4) fprintf ( stderr, " sort initialise ...\n" ); + for (i = 0; i < BZip2Constants.NUM_OVERSHOOT_BYTES; i++) { + block[last + i + 2] = block[(i % (last + 1)) + 1]; + } + for (i = 0; i <= last + BZip2Constants.NUM_OVERSHOOT_BYTES; i++) { + quadrant[i] = 0; + } + + block[0] = (byte)(block[last + 1]); + + if (last < 4000) { + /*-- + Use simpleSort(), since the full sorting mechanism + has quite a large constant overhead. + --*/ + for (i = 0; i <= last; i++) { + zptr[i] = i; + } + firstAttempt = false; + workDone = workLimit = 0; + SimpleSort(0, last, 0); + } else { + numQSorted = 0; + for (i = 0; i <= 255; i++) { + bigDone[i] = false; + } + for (i = 0; i <= 65536; i++) { + ftab[i] = 0; + } + + c1 = block[0]; + for (i = 0; i <= last; i++) { + c2 = block[i + 1]; + ftab[(c1 << 8) + c2]++; + c1 = c2; + } + + for (i = 1; i <= 65536; i++) { + ftab[i] += ftab[i - 1]; + } + + c1 = block[1]; + for (i = 0; i < last; i++) { + c2 = block[i + 2]; + j = (c1 << 8) + c2; + c1 = c2; + ftab[j]--; + zptr[ftab[j]] = i; + } + + j = ((block[last + 1]) << 8) + (block[1]); + ftab[j]--; + zptr[ftab[j]] = last; + + /*-- + Now ftab contains the first loc of every small bucket. + Calculate the running order, from smallest to largest + big bucket. + --*/ + + for (i = 0; i <= 255; i++) { + runningOrder[i] = i; + } + + int vv; + int h = 1; + do { + h = 3 * h + 1; + } while (h <= 256); + do { + h = h / 3; + for (i = h; i <= 255; i++) { + vv = runningOrder[i]; + j = i; + while ((ftab[((runningOrder[j-h])+1) << 8] - ftab[(runningOrder[j-h]) << 8]) > (ftab[((vv)+1) << 8] - ftab[(vv) << 8])) { + runningOrder[j] = runningOrder[j-h]; + j = j - h; + if (j <= (h - 1)) { + break; + } + } + runningOrder[j] = vv; + } + } while (h != 1); + + /*-- + The main sorting loop. + --*/ + for (i = 0; i <= 255; i++) { + + /*-- + Process big buckets, starting with the least full. + --*/ + ss = runningOrder[i]; + + /*-- + Complete the big bucket [ss] by quicksorting + any unsorted small buckets [ss, j]. Hopefully + previous pointer-scanning phases have already + completed many of the small buckets [ss, j], so + we don't have to sort them at all. + --*/ + for (j = 0; j <= 255; j++) { + sb = (ss << 8) + j; + if(!((ftab[sb] & SETMASK) == SETMASK)) { + int lo = ftab[sb] & CLEARMASK; + int hi = (ftab[sb+1] & CLEARMASK) - 1; + if (hi > lo) { + QSort3(lo, hi, 2); + numQSorted += (hi - lo + 1); + if (workDone > workLimit && firstAttempt) { + return; + } + } + ftab[sb] |= SETMASK; + } + } + + /*-- + The ss big bucket is now done. Record this fact, + and update the quadrant descriptors. Remember to + update quadrants in the overshoot area too, if + necessary. The "if (i < 255)" test merely skips + this updating for the last bucket processed, since + updating for the last bucket is pointless. + --*/ + bigDone[ss] = true; + + if (i < 255) { + int bbStart = ftab[ss << 8] & CLEARMASK; + int bbSize = (ftab[(ss+1) << 8] & CLEARMASK) - bbStart; + int shifts = 0; + + while ((bbSize >> shifts) > 65534) { + shifts++; + } + + for (j = 0; j < bbSize; j++) { + int a2update = zptr[bbStart + j]; + int qVal = (j >> shifts); + quadrant[a2update] = qVal; + if (a2update < BZip2Constants.NUM_OVERSHOOT_BYTES) { + quadrant[a2update + last + 1] = qVal; + } + } + + if (!(((bbSize-1) >> shifts) <= 65535)) { + Panic(); + } + } + + /*-- + Now scan this big bucket so as to synthesise the + sorted order for small buckets [t, ss] for all t != ss. + --*/ + for (j = 0; j <= 255; j++) { + copy[j] = ftab[(j << 8) + ss] & CLEARMASK; + } + + for (j = ftab[ss << 8] & CLEARMASK; j < (ftab[(ss+1) << 8] & CLEARMASK); j++) { + c1 = block[zptr[j]]; + if (!bigDone[c1]) { + zptr[copy[c1]] = zptr[j] == 0 ? last : zptr[j] - 1; + copy[c1] ++; + } + } + + for (j = 0; j <= 255; j++) { + ftab[(j << 8) + ss] |= SETMASK; + } + } + } + } + + void RandomiseBlock() + { + int i; + int rNToGo = 0; + int rTPos = 0; + for (i = 0; i < 256; i++) { + inUse[i] = false; + } + + for (i = 0; i <= last; i++) { + if (rNToGo == 0) { + rNToGo = (int)BZip2Constants.rNums[rTPos]; + rTPos++; + if (rTPos == 512) { + rTPos = 0; + } + } + rNToGo--; + block[i + 1] ^= (byte)((rNToGo == 1) ? 1 : 0); + // handle 16 bit signed numbers + block[i + 1] &= 0xFF; + + inUse[block[i + 1]] = true; + } + } + + void DoReversibleTransformation() + { + workLimit = workFactor * last; + workDone = 0; + blockRandomised = false; + firstAttempt = true; + + MainSort(); + + if (workDone > workLimit && firstAttempt) { + RandomiseBlock(); + workLimit = workDone = 0; + blockRandomised = true; + firstAttempt = false; + MainSort(); + } + + origPtr = -1; + for (int i = 0; i <= last; i++) { + if (zptr[i] == 0) { + origPtr = i; + break; + } + } + + if (origPtr == -1) { + Panic(); + } + } + + bool FullGtU(int i1, int i2) + { + int k; + byte c1, c2; + int s1, s2; + + c1 = block[i1 + 1]; + c2 = block[i2 + 1]; + if (c1 != c2) { + return c1 > c2; + } + i1++; + i2++; + + c1 = block[i1 + 1]; + c2 = block[i2 + 1]; + if (c1 != c2) { + return c1 > c2; + } + i1++; + i2++; + + c1 = block[i1 + 1]; + c2 = block[i2 + 1]; + if (c1 != c2) { + return c1 > c2; + } + i1++; + i2++; + + c1 = block[i1 + 1]; + c2 = block[i2 + 1]; + if (c1 != c2) { + return c1 > c2; + } + i1++; + i2++; + + c1 = block[i1 + 1]; + c2 = block[i2 + 1]; + if (c1 != c2) { + return c1 > c2; + } + i1++; + i2++; + + c1 = block[i1 + 1]; + c2 = block[i2 + 1]; + if (c1 != c2) { + return c1 > c2; + } + i1++; + i2++; + + k = last + 1; + + do { + c1 = block[i1 + 1]; + c2 = block[i2 + 1]; + if (c1 != c2) { + return c1 > c2; + } + s1 = quadrant[i1]; + s2 = quadrant[i2]; + if (s1 != s2) { + return s1 > s2; + } + i1++; + i2++; + + c1 = block[i1 + 1]; + c2 = block[i2 + 1]; + if (c1 != c2) { + return c1 > c2; + } + s1 = quadrant[i1]; + s2 = quadrant[i2]; + if (s1 != s2) { + return s1 > s2; + } + i1++; + i2++; + + c1 = block[i1 + 1]; + c2 = block[i2 + 1]; + if (c1 != c2) { + return c1 > c2; + } + s1 = quadrant[i1]; + s2 = quadrant[i2]; + if (s1 != s2) { + return s1 > s2; + } + i1++; + i2++; + + c1 = block[i1 + 1]; + c2 = block[i2 + 1]; + if (c1 != c2) { + return c1 > c2; + } + s1 = quadrant[i1]; + s2 = quadrant[i2]; + if (s1 != s2) { + return s1 > s2; + } + i1++; + i2++; + + if (i1 > last) { + i1 -= last; + i1--; + } + if (i2 > last) { + i2 -= last; + i2--; + } + + k -= 4; + ++workDone; + } while (k >= 0); + + return false; + } + + void AllocateCompressStructures() + { + int n = BZip2Constants.baseBlockSize * blockSize100k; + block = new byte[(n + 1 + BZip2Constants.NUM_OVERSHOOT_BYTES)]; + quadrant = new int[(n + BZip2Constants.NUM_OVERSHOOT_BYTES)]; + zptr = new int[n]; + ftab = new int[65537]; + + if (block == null || quadrant == null || zptr == null || ftab == null) { + // int totalDraw = (n + 1 + NUM_OVERSHOOT_BYTES) + (n + NUM_OVERSHOOT_BYTES) + n + 65537; + // compressOutOfMemory ( totalDraw, n ); + } + + /* + The back end needs a place to store the MTF values + whilst it calculates the coding tables. We could + put them in the zptr array. However, these values + will fit in a short, so we overlay szptr at the + start of zptr, in the hope of reducing the number + of cache misses induced by the multiple traversals + of the MTF values when calculating coding tables. + Seems to improve compression speed by about 1%. + */ + // szptr = zptr; + + + szptr = new short[2 * n]; + } + + void GenerateMTFValues() + { + char[] yy = new char[256]; + int i, j; + char tmp; + char tmp2; + int zPend; + int wr; + int EOB; + + MakeMaps(); + EOB = nInUse+1; + + for (i = 0; i <= EOB; i++) { + mtfFreq[i] = 0; + } + + wr = 0; + zPend = 0; + for (i = 0; i < nInUse; i++) { + yy[i] = (char) i; + } + + + for (i = 0; i <= last; i++) { + char ll_i; + + ll_i = unseqToSeq[block[zptr[i]]]; + + j = 0; + tmp = yy[j]; + while (ll_i != tmp) { + j++; + tmp2 = tmp; + tmp = yy[j]; + yy[j] = tmp2; + } + yy[0] = tmp; + + if (j == 0) { + zPend++; + } else { + if (zPend > 0) { + zPend--; + while (true) { + switch (zPend % 2) { + case 0: + szptr[wr] = (short)BZip2Constants.RUNA; + wr++; + mtfFreq[BZip2Constants.RUNA]++; + break; + case 1: + szptr[wr] = (short)BZip2Constants.RUNB; + wr++; + mtfFreq[BZip2Constants.RUNB]++; + break; + } + if (zPend < 2) { + break; + } + zPend = (zPend - 2) / 2; + } + zPend = 0; + } + szptr[wr] = (short)(j + 1); + wr++; + mtfFreq[j + 1]++; + } + } + + if (zPend > 0) { + zPend--; + while (true) { + switch (zPend % 2) { + case 0: + szptr[wr] = (short)BZip2Constants.RUNA; + wr++; + mtfFreq[BZip2Constants.RUNA]++; + break; + case 1: + szptr[wr] = (short)BZip2Constants.RUNB; + wr++; + mtfFreq[BZip2Constants.RUNB]++; + break; + } + if (zPend < 2) { + break; + } + zPend = (zPend - 2) / 2; + } + } + + szptr[wr] = (short)EOB; + wr++; + mtfFreq[EOB]++; + + nMTF = wr; + } + + static void Panic() + { + throw new BZip2Exception("BZip2 output stream panic"); + } + + static void HbMakeCodeLengths(char[] len, int[] freq, int alphaSize, int maxLen) + { + /*-- + Nodes and heap entries run from 1. Entry 0 + for both the heap and nodes is a sentinel. + --*/ + int nNodes, nHeap, n1, n2, j, k; + bool tooLong; + + int[] heap = new int[BZip2Constants.MAX_ALPHA_SIZE + 2]; + int[] weight = new int[BZip2Constants.MAX_ALPHA_SIZE * 2]; + int[] parent = new int[BZip2Constants.MAX_ALPHA_SIZE * 2]; + + for (int i = 0; i < alphaSize; ++i) + { + weight[i+1] = (freq[i] == 0 ? 1 : freq[i]) << 8; + } + + while (true) + { + nNodes = alphaSize; + nHeap = 0; + + heap[0] = 0; + weight[0] = 0; + parent[0] = -2; + + for (int i = 1; i <= alphaSize; ++i) + { + parent[i] = -1; + nHeap++; + heap[nHeap] = i; + int zz = nHeap; + int tmp = heap[zz]; + while (weight[tmp] < weight[heap[zz >> 1]]) + { + heap[zz] = heap[zz >> 1]; + zz >>= 1; + } + heap[zz] = tmp; + } + if (!(nHeap < (BZip2Constants.MAX_ALPHA_SIZE+2))) + { + Panic(); + } + + while (nHeap > 1) + { + n1 = heap[1]; + heap[1] = heap[nHeap]; + nHeap--; + int zz = 1; + int yy = 0; + int tmp = heap[zz]; + while (true) + { + yy = zz << 1; + if (yy > nHeap) + { + break; + } + if (yy < nHeap && weight[heap[yy+1]] < weight[heap[yy]]) + { + yy++; + } + if (weight[tmp] < weight[heap[yy]]) + { + break; + } + + heap[zz] = heap[yy]; + zz = yy; + } + heap[zz] = tmp; + n2 = heap[1]; + heap[1] = heap[nHeap]; + nHeap--; + + zz = 1; + yy = 0; + tmp = heap[zz]; + while (true) + { + yy = zz << 1; + if (yy > nHeap) + { + break; + } + if (yy < nHeap && weight[heap[yy+1]] < weight[heap[yy]]) + { + yy++; + } + if (weight[tmp] < weight[heap[yy]]) + { + break; + } + heap[zz] = heap[yy]; + zz = yy; + } + heap[zz] = tmp; + nNodes++; + parent[n1] = parent[n2] = nNodes; + + weight[nNodes] = (int)((weight[n1] & 0xffffff00) + (weight[n2] & 0xffffff00)) | + (int)(1 + (((weight[n1] & 0x000000ff) > (weight[n2] & 0x000000ff)) ? (weight[n1] & 0x000000ff) : (weight[n2] & 0x000000ff))); + + parent[nNodes] = -1; + nHeap++; + heap[nHeap] = nNodes; + + zz = nHeap; + tmp = heap[zz]; + while (weight[tmp] < weight[heap[zz >> 1]]) + { + heap[zz] = heap[zz >> 1]; + zz >>= 1; + } + heap[zz] = tmp; + } + if (!(nNodes < (BZip2Constants.MAX_ALPHA_SIZE * 2))) + { + Panic(); + } + + tooLong = false; + for (int i = 1; i <= alphaSize; ++i) + { + j = 0; + k = i; + while (parent[k] >= 0) + { + k = parent[k]; + j++; + } + len[i - 1] = (char)j; + if (j > maxLen) + { + tooLong = true; + } + } + + if (!tooLong) + { + break; + } + + for (int i = 1; i < alphaSize; ++i) + { + j = weight[i] >> 8; + j = 1 + (j / 2); + weight[i] = j << 8; + } + } + } + + static void HbAssignCodes (int[] code, char[] length, int minLen, int maxLen, int alphaSize) + { + int vec = 0; + for (int n = minLen; n <= maxLen; ++n) + { + for (int i = 0; i < alphaSize; ++i) + { + if (length[i] == n) + { + code[i] = vec; + ++vec; + } + } + vec <<= 1; + } + } + + static byte Med3(byte a, byte b, byte c ) + { + byte t; + if (a > b) + { + t = a; + a = b; + b = t; + } + if (b > c) + { + t = b; + b = c; + c = t; + } + if (a > b) + { + b = a; + } + return b; + } + + class StackElement + { + public int ll; + public int hh; + public int dd; + } + + #region Instance Fields + bool isStreamOwner = true; + + /*-- + index of the last char in the block, so + the block size == last + 1. + --*/ + int last; + + /*-- + index in zptr[] of original string after sorting. + --*/ + int origPtr; + + /*-- + always: in the range 0 .. 9. + The current block size is 100000 * this number. + --*/ + int blockSize100k; + + bool blockRandomised; + + int bytesOut; + int bsBuff; + int bsLive; + IChecksum mCrc = new StrangeCRC(); + + bool[] inUse = new bool[256]; + int nInUse; + + char[] seqToUnseq = new char[256]; + char[] unseqToSeq = new char[256]; + + char[] selector = new char[BZip2Constants.MAX_SELECTORS]; + char[] selectorMtf = new char[BZip2Constants.MAX_SELECTORS]; + + byte[] block; + int[] quadrant; + int[] zptr; + short[] szptr; + int[] ftab; + + int nMTF; + + int[] mtfFreq = new int[BZip2Constants.MAX_ALPHA_SIZE]; + + /* + * Used when sorting. If too many long comparisons + * happen, we stop sorting, randomise the block + * slightly, and try again. + */ + int workFactor; + int workDone; + int workLimit; + bool firstAttempt; + int nBlocksRandomised; + + int currentChar = -1; + int runLength; + uint blockCRC, combinedCRC; + int allowableBlockSize; + Stream baseStream; + bool disposed_; + #endregion + } +} + +/* This file was derived from a file containing this license: + * + * This file is a part of bzip2 and/or libbzip2, a program and + * library for lossless, block-sorting data compression. + * + * Copyright (C) 1996-1998 Julian R Seward. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. The origin of this software must not be misrepresented; you must + * not claim that you wrote the original software. If you use this + * software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 3. Altered source versions must be plainly marked as such, and must + * not be misrepresented as being the original software. + * + * 4. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Java version ported by Keiron Liddle, Aftex Software 1999-2001 + */ diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Checksums/Adler32.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Checksums/Adler32.cs new file mode 100644 index 0000000..fd671ee --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Checksums/Adler32.cs @@ -0,0 +1,221 @@ +// Adler32.cs - Computes Adler32 data checksum of a data stream +// Copyright (C) 2001 Mike Krueger +// +// This file was translated from java, it was part of the GNU Classpath +// Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using ICSharpCode.SharpZipLib.Silverlight.Zip.Compression.Streams; + +namespace ICSharpCode.SharpZipLib.Silverlight.Checksums +{ + /// + /// Computes Adler32 checksum for a stream of data. An Adler32 + /// checksum is not as reliable as a CRC32 checksum, but a lot faster to + /// compute. + /// + /// The specification for Adler32 may be found in RFC 1950. + /// ZLIB Compressed Data Format Specification version 3.3) + /// + /// + /// From that document: + /// + /// "ADLER32 (Adler-32 checksum) + /// This contains a checksum value of the uncompressed data + /// (excluding any dictionary data) computed according to Adler-32 + /// algorithm. This algorithm is a 32-bit extension and improvement + /// of the Fletcher algorithm, used in the ITU-T X.224 / ISO 8073 + /// standard. + /// + /// Adler-32 is composed of two sums accumulated per byte: s1 is + /// the sum of all bytes, s2 is the sum of all s1 values. Both sums + /// are done modulo 65521. s1 is initialized to 1, s2 to zero. The + /// Adler-32 checksum is stored as s2*65536 + s1 in most- + /// significant-byte first (network) order." + /// + /// "8.2. The Adler-32 algorithm + /// + /// The Adler-32 algorithm is much faster than the CRC32 algorithm yet + /// still provides an extremely low probability of undetected errors. + /// + /// The modulo on unsigned long accumulators can be delayed for 5552 + /// bytes, so the modulo operation time is negligible. If the bytes + /// are a, b, c, the second sum is 3a + 2b + c + 3, and so is position + /// and order sensitive, unlike the first sum, which is just a + /// checksum. That 65521 is prime is important to avoid a possible + /// large class of two-byte errors that leave the check unchanged. + /// (The Fletcher checksum uses 255, which is not prime and which also + /// makes the Fletcher check insensitive to single byte changes 0 - + /// 255.) + /// + /// The sum s1 is initialized to 1 instead of zero to make the length + /// of the sequence part of s2, so that the length does not have to be + /// checked separately. (Any sequence of zeroes has a Fletcher + /// checksum of zero.)" + /// + /// + /// + public sealed class Adler32 : IChecksum + { + /// + /// largest prime smaller than 65536 + /// + const uint BASE = 65521; + + /// + /// Returns the Adler32 data checksum computed so far. + /// + public long Value { + get { + return checksum; + } + } + + /// + /// Creates a new instance of the Adler32 class. + /// The checksum starts off with a value of 1. + /// + public Adler32() + { + Reset(); + } + + /// + /// Resets the Adler32 checksum to the initial value. + /// + public void Reset() + { + checksum = 1; + } + + /// + /// Updates the checksum with a byte value. + /// + /// + /// The data value to add. The high byte of the int is ignored. + /// + public void Update(int value) + { + // We could make a length 1 byte array and call update again, but I + // would rather not have that overhead + uint s1 = checksum & 0xFFFF; + uint s2 = checksum >> 16; + + s1 = (s1 + ((uint)value & 0xFF)) % BASE; + s2 = (s1 + s2) % BASE; + + checksum = (s2 << 16) + s1; + } + + /// + /// Updates the checksum with an array of bytes. + /// + /// + /// The source of the data to update with. + /// + public void Update(byte[] buffer) + { + if ( buffer == null ) { + throw new ArgumentNullException("buffer"); + } + + Update(buffer, 0, buffer.Length); + } + + /// + /// Updates the checksum with the bytes taken from the array. + /// + /// + /// an array of bytes + /// + /// + /// the start of the data used for this update + /// + /// + /// the number of bytes to use for this update + /// + public void Update(byte[] buffer, int offset, int count) + { + if (buffer == null) { + throw new ArgumentNullException("buffer"); + } + + if (offset < 0) { + throw new ArgumentOutOfRangeException("offset", "cannot be negative"); + } + + if ( count < 0 ) + { + throw new ArgumentOutOfRangeException("count", "cannot be negative"); + } + + if (offset >= buffer.Length) + { + throw new ArgumentOutOfRangeException("offset", "not a valid index into buffer"); + } + + if (offset + count > buffer.Length) + { + throw new ArgumentOutOfRangeException("count", "exceeds buffer size"); + } + + //(By Per Bothner) + var s1 = checksum & 0xFFFF; + var s2 = checksum >> 16; + + while (count > 0) { + // We can defer the modulo operation: + // s1 maximally grows from 65521 to 65521 + 255 * 3800 + // s2 maximally grows by 3800 * median(s1) = 2090079800 < 2^31 + var n = 3800; + if (n > count) { + n = count; + } + count -= n; + while (--n >= 0) { + s1 = s1 + (uint)(buffer[offset++] & 0xff); + s2 = s2 + s1; + } + s1 %= BASE; + s2 %= BASE; + } + + checksum = (s2 << 16) | s1; + } + + #region Instance Fields + uint checksum; + #endregion + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Checksums/CRC32.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Checksums/CRC32.cs new file mode 100644 index 0000000..e4fb5db --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Checksums/CRC32.cs @@ -0,0 +1,218 @@ +// CRC32.cs - Computes CRC32 data checksum of a data stream +// Copyright (C) 2001 Mike Krueger +// +// This file was translated from java, it was part of the GNU Classpath +// Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; + +namespace ICSharpCode.SharpZipLib.Silverlight.Checksums +{ + /// + /// Generate a table for a byte-wise 32-bit CRC calculation on the polynomial: + /// x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. + /// + /// Polynomials over GF(2) are represented in binary, one bit per coefficient, + /// with the lowest powers in the most significant bit. Then adding polynomials + /// is just exclusive-or, and multiplying a polynomial by x is a right shift by + /// one. If we call the above polynomial p, and represent a byte as the + /// polynomial q, also with the lowest power in the most significant bit (so the + /// byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p, + /// where a mod b means the remainder after dividing a by b. + /// + /// This calculation is done using the shift-register method of multiplying and + /// taking the remainder. The register is initialized to zero, and for each + /// incoming bit, x^32 is added mod p to the register if the bit is a one (where + /// x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by + /// x (which is shifting right by one and adding x^32 mod p if the bit shifted + /// out is a one). We start with the highest power (least significant bit) of + /// q and repeat for all eight bits of q. + /// + /// The table is simply the CRC of all possible eight bit values. This is all + /// the information needed to generate CRC's on data a byte at a time for all + /// combinations of CRC register values and incoming bytes. + /// + public sealed class Crc32 : IChecksum + { + private const uint CrcSeed = 0xFFFFFFFF; + + readonly static uint[] CrcTable = new uint[] { + 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, + 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, + 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, + 0x90BF1D91, 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, + 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, + 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, + 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, + 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, + 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, + 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, + 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, + 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, + 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, + 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, + 0x9FBFE4A5, 0xE8B8D433, 0x7807C9A2, 0x0F00F934, 0x9609A88E, + 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, + 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, + 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950, + 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, + 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, + 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, + 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, + 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, + 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, + 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, + 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, + 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, + 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, + 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, 0xF00F9344, + 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, + 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, + 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, + 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, + 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, + 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, + 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, + 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, + 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, + 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, + 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, + 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, + 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, + 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, + 0x18B74777, 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, + 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278, + 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, + 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, + 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, + 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, + 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, + 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, + 0x2D02EF8D + }; + + internal static uint ComputeCrc32(uint oldCrc, byte value) + { + return CrcTable[(oldCrc ^ value) & 0xFF] ^ (oldCrc >> 8); + } + + /// + /// The crc data checksum so far. + /// + uint crc; + + /// + /// Returns the CRC32 data checksum computed so far. + /// + public long Value { + get { + return crc; + } + set { + crc = (uint)value; + } + } + + /// + /// Resets the CRC32 data checksum as if no update was ever called. + /// + public void Reset() + { + crc = 0; + } + + /// + /// Updates the checksum with the int bval. + /// + /// + /// the byte is taken as the lower 8 bits of value + /// + public void Update(int value) + { + crc ^= CrcSeed; + crc = CrcTable[(crc ^ value) & 0xFF] ^ (crc >> 8); + crc ^= CrcSeed; + } + + /// + /// Updates the checksum with the bytes taken from the array. + /// + /// + /// buffer an array of bytes + /// + public void Update(byte[] buffer) + { + if (buffer == null) { + throw new ArgumentNullException("buffer"); + } + + Update(buffer, 0, buffer.Length); + } + + /// + /// Adds the byte array to the data checksum. + /// + /// + /// The buffer which contains the data + /// + /// + /// The offset in the buffer where the data starts + /// + /// + /// The number of data bytes to update the CRC with. + /// + public void Update(byte[] buffer, int offset, int count) + { + if (buffer == null) { + throw new ArgumentNullException("buffer"); + } + + if ( count < 0 ) { + throw new ArgumentOutOfRangeException("count", "Count cannot be less than zero"); + } + + if (offset < 0 || offset + count > buffer.Length) { + throw new ArgumentOutOfRangeException("offset"); + } + + crc ^= CrcSeed; + + while (--count >= 0) { + crc = CrcTable[(crc ^ buffer[offset++]) & 0xFF] ^ (crc >> 8); + } + + crc ^= CrcSeed; + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Checksums/IChecksum.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Checksums/IChecksum.cs new file mode 100644 index 0000000..b2f3ebc --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Checksums/IChecksum.cs @@ -0,0 +1,92 @@ +// IChecksum.cs - Interface to compute a data checksum +// Copyright (C) 2001 Mike Krueger +// +// This file was translated from java, it was part of the GNU Classpath +// Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +namespace ICSharpCode.SharpZipLib.Silverlight.Checksums +{ + /// + /// Interface to compute a data checksum used by checked input/output streams. + /// A data checksum can be updated by one byte or with a byte array. After each + /// update the value of the current checksum can be returned by calling + /// getValue. The complete checksum object can also be reset + /// so it can be used again with new data. + /// + public interface IChecksum + { + /// + /// Returns the data checksum computed so far. + /// + long Value + { + get; + } + + /// + /// Resets the data checksum as if no update was ever called. + /// + void Reset(); + + /// + /// Adds one byte to the data checksum. + /// + /// + /// the data value to add. The high byte of the int is ignored. + /// + void Update(int value); + + /// + /// Updates the data checksum with the bytes taken from the array. + /// + /// + /// buffer an array of bytes + /// + void Update(byte[] buffer); + + /// + /// Adds the byte array to the data checksum. + /// + /// + /// The buffer which contains the data + /// + /// + /// The offset in the buffer where the data starts + /// + /// + /// the number of data bytes to add. + /// + void Update(byte[] buffer, int offset, int count); + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Checksums/StrangeCRC.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Checksums/StrangeCRC.cs new file mode 100644 index 0000000..3a43291 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Checksums/StrangeCRC.cs @@ -0,0 +1,200 @@ +// StrangeCRC.cs - computes a crc used in the bziplib +// +// Copyright (C) 2001 Mike Krueger +// +// This file was translated from java, it was part of the GNU Classpath +// Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; + +namespace ICSharpCode.SharpZipLib.Silverlight.Checksums +{ + /// + /// Bzip2 checksum algorithm + /// + public class StrangeCRC : IChecksum + { + readonly static uint[] crc32Table = { + 0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, + 0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005, + 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61, + 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd, + 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, + 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75, + 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011, + 0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd, + 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039, + 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, + 0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81, + 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d, + 0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49, + 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95, + 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, + 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, + 0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae, + 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072, + 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, + 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca, + 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde, + 0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02, + 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066, + 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba, + 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, + 0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692, + 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6, + 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a, + 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e, + 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, + 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686, + 0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a, + 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637, + 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb, + 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, + 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53, + 0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47, + 0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b, + 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff, + 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, + 0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, + 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b, + 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f, + 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3, + 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, + 0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, + 0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f, + 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3, + 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640, + 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, + 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8, + 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24, + 0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30, + 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec, + 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, + 0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654, + 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0, + 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c, + 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18, + 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, + 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0, + 0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c, + 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668, + 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4 + }; + + int globalCrc; + + /// + /// Initialise a default instance of + /// + public StrangeCRC() + { + Reset(); + } + + /// + /// Reset the state of Crc. + /// + public void Reset() + { + globalCrc = -1; + } + + /// + /// Get the current Crc value. + /// + public long Value { + get { + return ~globalCrc; + } + } + + /// + /// Update the Crc value. + /// + /// data update is based on + public void Update(int value) + { + int temp = (globalCrc >> 24) ^ value; + if (temp < 0) { + temp = 256 + temp; + } + globalCrc = unchecked((int)((globalCrc << 8) ^ crc32Table[temp])); + } + + /// + /// Update Crc based on a block of data + /// + /// The buffer containing data to update the crc with. + public void Update(byte[] buffer) + { + if (buffer == null) { + throw new ArgumentNullException("buffer"); + } + + Update(buffer, 0, buffer.Length); + } + + /// + /// Update Crc based on a portion of a block of data + /// + /// block of data + /// index of first byte to use + /// number of bytes to use + public void Update(byte[] buffer, int offset, int count) + { + if (buffer == null) { + throw new ArgumentNullException("buffer"); + } + + if ( offset < 0 ) + { + throw new ArgumentOutOfRangeException("offset", "cannot be less than zero"); + } + + if ( count < 0 ) + { + throw new ArgumentOutOfRangeException("count", "cannot be less than zero"); + } + + if ( offset + count > buffer.Length ) + { + throw new ArgumentOutOfRangeException("count"); + } + + for (int i = 0; i < count; ++i) { + Update(buffer[offset++]); + } + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Compat/Extensions.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Compat/Extensions.cs new file mode 100644 index 0000000..fba5499 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Compat/Extensions.cs @@ -0,0 +1,19 @@ +using System; +using System.Globalization; + +namespace ICSharpCode.SharpZipLib.Silverlight.Compat +{ + public static class Extensions + { + public static int Compare(this string left, string right, bool ignoreCase, CultureInfo info) + { + if (info == null) + { + throw new ArgumentNullException("CultureInfo cannot be null!"); + } + return ignoreCase + ? info.CompareInfo.Compare(left, right, CompareOptions.IgnoreCase) + : info.CompareInfo.Compare(left, right, CompareOptions.None); + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Core/FileSystemScanner.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Core/FileSystemScanner.cs new file mode 100644 index 0000000..1fac214 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Core/FileSystemScanner.cs @@ -0,0 +1,558 @@ +// FileSystemScanner.cs +// +// Copyright 2005 John Reilly +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + + +using System; +using System.IO; +using System.Linq; + +namespace ICSharpCode.SharpZipLib.Silverlight.Core +{ + /// + /// Event arguments for scanning. + /// + public class ScanEventArgs : EventArgs + { + #region Constructors + + /// + /// Initialise a new instance of + /// + /// The file or directory name. + public ScanEventArgs(string name) + { + name_ = name; + } + + #endregion + + /// + /// The fie or directory name for this event. + /// + public string Name + { + get { return name_; } + } + + /// + /// Get set a value indicating if scanning should continue or not. + /// + public bool ContinueRunning + { + get { return continueRunning_; } + set { continueRunning_ = value; } + } + + #region Instance Fields + + private readonly string name_; + private bool continueRunning_ = true; + + #endregion + } + + /// + /// Event arguments during processing of a single file or directory. + /// + public class ProgressEventArgs : EventArgs + { + #region Constructors + + /// + /// Initialise a new instance of + /// + /// The file or directory name if known. + /// The number of bytes processed so far + /// The total number of bytes to process, 0 if not known + public ProgressEventArgs(string name, long processed, long target) + { + name_ = name; + processed_ = processed; + target_ = target; + } + + #endregion + + /// + /// The name for this event if known. + /// + public string Name + { + get { return name_; } + } + + /// + /// Get set a value indicating wether scanning should continue or not. + /// + public bool ContinueRunning + { + get { return continueRunning_; } + set { continueRunning_ = value; } + } + + /// + /// Get a percentage representing how much of the has been processed + /// + /// 0.0 to 100.0 percent; 0 if target is not known. + public float PercentComplete + { + get + { + if (target_ <= 0) + { + return 0; + } + return (processed_/(float) target_)*100.0f; + } + } + + /// + /// The number of bytes processed so far + /// + public long Processed + { + get { return processed_; } + } + + /// + /// The number of bytes to process. + /// + /// Target may be 0 or negative if the value isnt known. + public long Target + { + get { return target_; } + } + + #region Instance Fields + + private readonly string name_; + private readonly long processed_; + private readonly long target_; + private bool continueRunning_ = true; + + #endregion + } + + /// + /// Event arguments for directories. + /// + public class DirectoryEventArgs : ScanEventArgs + { + #region Constructors + + /// + /// Initialize an instance of . + /// + /// The name for this directory. + /// Flag value indicating if any matching files are contained in this directory. + public DirectoryEventArgs(string name, bool hasMatchingFiles) + : base(name) + { + hasMatchingFiles_ = hasMatchingFiles; + } + + #endregion + + /// + /// Get a value indicating if the directory contains any matching files or not. + /// + public bool HasMatchingFiles + { + get { return hasMatchingFiles_; } + } + + #region Instance Fields + + private readonly bool hasMatchingFiles_; + + #endregion + } + + /// + /// Arguments passed when scan failures are detected. + /// + public class ScanFailureEventArgs + { + #region Constructors + + /// + /// Initialise a new instance of + /// + /// The name to apply. + /// The exception to use. + public ScanFailureEventArgs(string name, Exception e) + { + name_ = name; + exception_ = e; + ContinueRunning = true; + } + + #endregion + + /// + /// The applicable name. + /// + public string Name + { + get { return name_; } + } + + /// + /// The applicable exception. + /// + public Exception Exception + { + get { return exception_; } + } + + /// + /// Get / set a value indicating wether scanning should continue. + /// + public bool ContinueRunning { get; set; } + + #region Instance Fields + + private readonly Exception exception_; + private readonly string name_; + + #endregion + } + + /// + /// Delegate invoked before starting to process a directory. + /// + public delegate void ProcessDirectoryHandler(object sender, DirectoryEventArgs e); + + /// + /// Delegate invoked before starting to process a file. + /// + /// The source of the event + /// The event arguments. + public delegate void ProcessFileHandler(object sender, ScanEventArgs e); + + /// + /// Delegate invoked during processing of a file or directory + /// + /// The source of the event + /// The event arguments. + public delegate void ProgressHandler(object sender, ProgressEventArgs e); + + /// + /// Delegate invoked when a file has been completely processed. + /// + /// The source of the event + /// The event arguments. + public delegate void CompletedFileHandler(object sender, ScanEventArgs e); + + /// + /// Delegate invoked when a directory failure is detected. + /// + /// The source of the event + /// The event arguments. + public delegate void DirectoryFailureHandler(object sender, ScanFailureEventArgs e); + + /// + /// Delegate invoked when a file failure is detected. + /// + /// The source of the event + /// The event arguments. + public delegate void FileFailureHandler(object sender, ScanFailureEventArgs e); + + /// + /// FileSystemScanner provides facilities scanning of files and directories. + /// + public class FileSystemScanner + { + #region Constructors + + /// + /// Initialise a new instance of + /// + /// The file filter to apply when scanning. + public FileSystemScanner(string filter) + { + fileFilter_ = new PathFilter(filter); + } + + /// + /// Initialise a new instance of + /// + /// The file filter to apply. + /// The directory filter to apply. + public FileSystemScanner(string fileFilter, string directoryFilter) + { + fileFilter_ = new PathFilter(fileFilter); + directoryFilter_ = new PathFilter(directoryFilter); + } + + /// + /// Initialise a new instance of + /// + /// The file filter to apply. + public FileSystemScanner(IScanFilter fileFilter) + { + fileFilter_ = fileFilter; + } + + /// + /// Initialise a new instance of + /// + /// The file filter to apply. + /// The directory filter to apply. + public FileSystemScanner(IScanFilter fileFilter, IScanFilter directoryFilter) + { + fileFilter_ = fileFilter; + directoryFilter_ = directoryFilter; + } + + #endregion + + /// + /// Delegate to invoke when processing for a file has finished. + /// + public CompletedFileHandler CompletedFile; + + /// + /// Delegate to invoke when a directory failure is detected. + /// + public DirectoryFailureHandler DirectoryFailure; + + /// + /// Delegate to invoke when a file failure is detected. + /// + public FileFailureHandler FileFailure; + + /// + /// Delegate to invoke when a directory is processed. + /// + public ProcessDirectoryHandler ProcessDirectory; + + /// + /// Delegate to invoke when a file is processed. + /// + public ProcessFileHandler ProcessFile; + + /// + /// Raise the DirectoryFailure event. + /// + /// The directory name. + /// The exception detected. + private void OnDirectoryFailure(string directory, Exception e) + { + if (DirectoryFailure == null) + { + alive_ = false; + } + else + { + var args = new ScanFailureEventArgs(directory, e); + DirectoryFailure(this, args); + alive_ = args.ContinueRunning; + } + } + + /// + /// Raise the FileFailure event. + /// + /// The file name. + /// The exception detected. + private void OnFileFailure(string file, Exception e) + { + if (FileFailure == null) + { + alive_ = false; + } + else + { + var args = new ScanFailureEventArgs(file, e); + FileFailure(this, args); + alive_ = args.ContinueRunning; + } + } + + /// + /// Raise the ProcessFile event. + /// + /// The file name. + private void OnProcessFile(string file) + { + if (ProcessFile != null) + { + var args = new ScanEventArgs(file); + ProcessFile(this, args); + alive_ = args.ContinueRunning; + } + } + + /// + /// Raise the complete file event + /// + /// The file name + private void OnCompleteFile(string file) + { + if (CompletedFile == null) + { + return; + } + var args = new ScanEventArgs(file); + CompletedFile(this, args); + alive_ = args.ContinueRunning; + } + + /// + /// Raise the ProcessDirectory event. + /// + /// The directory name. + /// Flag indicating if the directory has matching files. + private void OnProcessDirectory(string directory, bool hasMatchingFiles) + { + if (ProcessDirectory != null) + { + var args = new DirectoryEventArgs(directory, hasMatchingFiles); + ProcessDirectory(this, args); + alive_ = args.ContinueRunning; + } + } + + /// + /// Scan a directory. + /// + /// The base directory to scan. + /// True to recurse subdirectories, false to scan a single directory. + public void Scan(string directory, bool recurse) + { + alive_ = true; + ScanDir(directory, recurse); + } + + private void ScanDir(string directory, bool recurse) + { + try + { +#if !SL4 + var names = Directory.GetFiles(directory); +#else + var names = Directory.EnumerateFiles(directory).ToArray(); +#endif + var hasMatch = false; + for (var fileIndex = 0; fileIndex < names.Length; ++fileIndex) + { + if (!fileFilter_.IsMatch(names[fileIndex])) + { + names[fileIndex] = null; + } + else + { + hasMatch = true; + } + } + + OnProcessDirectory(directory, hasMatch); + + if (alive_ && hasMatch) + { + foreach (var fileName in names) + { + try + { + if (fileName != null) + { + OnProcessFile(fileName); + if (!alive_) + { + break; + } + } + } + catch (Exception e) + { + OnFileFailure(fileName, e); + } + } + } + } + catch (Exception e) + { + OnDirectoryFailure(directory, e); + } + + if (alive_ && recurse) + { + try + { +#if !SL4 + var names = Directory.GetDirectories(directory); +#else + var names = System.IO.Directory.EnumerateDirectories(directory); +#endif + foreach (var fulldir in names) + { + if ((directoryFilter_ == null) || (directoryFilter_.IsMatch(fulldir))) + { + ScanDir(fulldir, true); + if (!alive_) + { + break; + } + } + } + } + catch (Exception e) + { + OnDirectoryFailure(directory, e); + } + } + } + + #region Instance Fields + + /// + /// The directory filter currently in use. + /// + private readonly IScanFilter directoryFilter_; + + /// + /// The file filter currently in use. + /// + private readonly IScanFilter fileFilter_; + + /// + /// Flag indicating if scanning should continue running. + /// + private bool alive_; + + #endregion + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Core/INameTransform.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Core/INameTransform.cs new file mode 100644 index 0000000..dedf49e --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Core/INameTransform.cs @@ -0,0 +1,57 @@ +// INameTransform.cs +// +// Copyright 2005 John Reilly +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +namespace ICSharpCode.SharpZipLib.Silverlight.Core +{ + /// + /// INameTransform defines how file system names are transformed for use with archives. + /// + public interface INameTransform + { + /// + /// Given a file name determine the transformed value. + /// + /// The name to transform. + /// The transformed file name. + string TransformFile(string name); + + /// + /// Given a directory name determine the transformed value. + /// + /// The name to transform. + /// The transformed directory name + string TransformDirectory(string name); + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Core/IScanFilter.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Core/IScanFilter.cs new file mode 100644 index 0000000..1f485b8 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Core/IScanFilter.cs @@ -0,0 +1,52 @@ +// IScanFilter.cs +// +// Copyright 2006 John Reilly +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; + +namespace ICSharpCode.SharpZipLib.Silverlight.Core +{ + /// + /// Scanning filters support filtering of names. + /// + public interface IScanFilter + { + /// + /// Test a name to see if it 'matches' the filter. + /// + /// The name to test. + /// Returns true if the name matches the filter, false if it does not match. + bool IsMatch(string name); + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Core/NameFilter.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Core/NameFilter.cs new file mode 100644 index 0000000..71b53e2 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Core/NameFilter.cs @@ -0,0 +1,267 @@ +// NameFilter.cs +// +// Copyright 2005 John Reilly +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + + +using System; +using System.Collections.Generic; +using System.Text.RegularExpressions; + +namespace ICSharpCode.SharpZipLib.Silverlight.Core +{ + /// + /// NameFilter is a string matching class which allows for both positive and negative + /// matching. + /// A filter is a sequence of independant regular expressions separated by semi-colons ';' + /// Each expression can be prefixed by a plus '+' sign or a minus '-' sign to denote the expression + /// is intended to include or exclude names. If neither a plus or minus sign is found include is the default + /// A given name is tested for inclusion before checking exclusions. Only names matching an include spec + /// and not matching an exclude spec are deemed to match the filter. + /// An empty filter matches any name. + /// + /// The following expression includes all name ending in '.dat' with the exception of 'dummy.dat' + /// "+\.dat$;-^dummy\.dat$" + /// + public class NameFilter : IScanFilter + { + #region Constructors + + /// + /// Construct an instance based on the filter expression passed + /// + /// The filter expression. + public NameFilter(string filter) + { + filter_ = filter; + inclusions_ = new List(); + exclusions_ = new List(); + Compile(); + } + + #endregion + + #region IScanFilter Members + + /// + /// Test a value to see if it matches the filter. + /// + /// The value to test. + /// True if the value matches, false otherwise. + public bool IsMatch(string name) + { + return IsIncluded(name) && (IsExcluded(name) == false); + } + + #endregion + + /// + /// Test a string to see if it is a valid regular expression. + /// + /// The expression to test. + /// True if expression is a valid false otherwise. + public static bool IsValidExpression(string expression) + { + var result = true; + try + { + var exp = new Regex(expression, RegexOptions.IgnoreCase | RegexOptions.Singleline); + } + catch + { + result = false; + } + return result; + } + + /// + /// Test an expression to see if it is valid as a filter. + /// + /// The filter expression to test. + /// True if the expression is valid, false otherwise. + public static bool IsValidFilterExpression(string toTest) + { + if (toTest == null) + { + throw new ArgumentNullException("toTest"); + } + + var result = true; + + try + { + var items = toTest.Split(';'); + for (var i = 0; i < items.Length; ++i) + { + if (string.IsNullOrEmpty(items[i])) + { + continue; + } + string toCompile; + + switch (items[i][0]) + { + case '+': + toCompile = items[i].Substring(1, items[i].Length - 1); + break; + case '-': + toCompile = items[i].Substring(1, items[i].Length - 1); + break; + default: + toCompile = items[i]; + break; + } + var testRegex = new Regex(toCompile, RegexOptions.IgnoreCase | RegexOptions.Singleline); + } + } + catch (Exception) + { + result = false; + } + + return result; + } + + /// + /// Convert this filter to its string equivalent. + /// + /// The string equivalent for this filter. + public override string ToString() + { + return filter_; + } + + /// + /// Test a value to see if it is included by the filter. + /// + /// The value to test. + /// True if the value is included, false otherwise. + public bool IsIncluded(string name) + { + var result = false; + if (inclusions_.Count == 0) + { + result = true; + } + else + { + foreach (var r in inclusions_) + { + if (r.IsMatch(name)) + { + result = true; + break; + } + } + } + return result; + } + + /// + /// Test a value to see if it is excluded by the filter. + /// + /// The value to test. + /// True if the value is excluded, false otherwise. + public bool IsExcluded(string name) + { + var result = false; + foreach (var r in exclusions_) + { + if (r.IsMatch(name)) + { + result = true; + break; + } + } + return result; + } + + /// + /// Compile this filter. + /// + private void Compile() + { + // TODO: Check to see if combining RE's makes it faster/smaller. + // simple scheme would be to have one RE for inclusion and one for exclusion. + if (filter_ == null) + { + return; + } + + // TODO: Allow for paths to include ';' + var items = filter_.Split(';'); + for (var i = 0; i < items.Length; ++i) + { + if (string.IsNullOrEmpty(items[i])) + { + continue; + } + var include = (items[i][0] != '-'); + string toCompile; + + switch (items[i][0]) + { + case '+': + toCompile = items[i].Substring(1, items[i].Length - 1); + break; + case '-': + toCompile = items[i].Substring(1, items[i].Length - 1); + break; + default: + toCompile = items[i]; + break; + } + + // NOTE: Regular expressions can fail to compile here for a number of reasons that cause an exception + // these are left unhandled here as the caller is responsible for ensuring all is valid. + // several functions IsValidFilterExpression and IsValidExpression are provided for such checking + if (include) + { + inclusions_.Add(new Regex(toCompile, RegexOptions.IgnoreCase | RegexOptions.Singleline)); + } + else + { + exclusions_.Add(new Regex(toCompile, RegexOptions.IgnoreCase | RegexOptions.Singleline)); + } + } + } + + #region Instance Fields + + private readonly List exclusions_; + private readonly string filter_; + private readonly List inclusions_; + + #endregion + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Core/PathFilter.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Core/PathFilter.cs new file mode 100644 index 0000000..3250f28 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Core/PathFilter.cs @@ -0,0 +1,335 @@ +// PathFilter.cs +// +// Copyright 2005 John Reilly +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using System.IO; + +namespace ICSharpCode.SharpZipLib.Silverlight.Core +{ + /// + /// PathFilter filters directories and files using a form of regular expressions + /// by full path name. + /// See NameFilter for more detail on filtering. + /// + public class PathFilter : IScanFilter + { + #region Constructors + + /// + /// Initialise a new instance of . + /// + /// The filter expression to apply. + public PathFilter(string filter) + { + nameFilter_ = new NameFilter(filter); + } + + #endregion + + #region IScanFilter Members + + /// + /// Test a name to see if it matches the filter. + /// + /// The name to test. + /// True if the name matches, false otherwise. + public virtual bool IsMatch(string name) + { + var result = false; + + if (name != null) + { + var cooked = (name.Length > 0) ? Path.GetFullPath(name) : ""; + result = nameFilter_.IsMatch(cooked); + } + return result; + } + + #endregion + + #region Instance Fields + + private readonly NameFilter nameFilter_; + + #endregion + } + + /// + /// ExtendedPathFilter filters based on name, file size, and the last write time of the file. + /// + /// Provides an example of how to customise filtering. + public class ExtendedPathFilter : PathFilter + { + #region Constructors + + /// + /// Initialise a new instance of ExtendedPathFilter. + /// + /// The filter to apply. + /// The minimum file size to include. + /// The maximum file size to include. + public ExtendedPathFilter(string filter, + long minSize, long maxSize) + : base(filter) + { + MinSize = minSize; + MaxSize = maxSize; + } + + /// + /// Initialise a new instance of ExtendedPathFilter. + /// + /// The filter to apply. + /// The minimum to include. + /// The maximum to include. + public ExtendedPathFilter(string filter, + DateTime minDate, DateTime maxDate) + : base(filter) + { + MinDate = minDate; + MaxDate = maxDate; + } + + /// + /// Initialise a new instance of ExtendedPathFilter. + /// + /// The filter to apply. + /// The minimum file size to include. + /// The maximum file size to include. + /// The minimum to include. + /// The maximum to include. + public ExtendedPathFilter(string filter, + long minSize, long maxSize, + DateTime minDate, DateTime maxDate) + : base(filter) + { + MinSize = minSize; + MaxSize = maxSize; + MinDate = minDate; + MaxDate = maxDate; + } + + #endregion + + /// + /// Test a filename to see if it matches the filter. + /// + /// The filename to test. + /// True if the filter matches, false otherwise. + public override bool IsMatch(string name) + { + var result = base.IsMatch(name); + + if (result) + { + var fileInfo = new FileInfo(name); + result = + (MinSize <= fileInfo.Length) && + (MaxSize >= fileInfo.Length) && + (MinDate <= fileInfo.LastWriteTime) && + (MaxDate >= fileInfo.LastWriteTime) + ; + } + return result; + } + + #region Properties + + /// + /// Get/set the minimum size for a file that will match this filter. + /// + public long MinSize + { + get { return minSize_; } + set + { + if ((value < 0) || (maxSize_ < value)) + { + throw new ArgumentOutOfRangeException("value"); + } + + minSize_ = value; + } + } + + /// + /// Get/set the maximum size for a file that will match this filter. + /// + public long MaxSize + { + get { return maxSize_; } + set + { + if ((value < 0) || (minSize_ > value)) + { + throw new ArgumentOutOfRangeException("value"); + } + + maxSize_ = value; + } + } + + /// + /// Get/set the minimum value that will match for this filter. + /// + /// Files with a LastWrite time less than this value are excluded by the filter. + public DateTime MinDate + { + get { return minDate_; } + + set + { + if (value > maxDate_) + { + throw new ArgumentException("Exceeds MaxDate", "value"); + } + + minDate_ = value; + } + } + + /// + /// Get/set the maximum value that will match for this filter. + /// + /// Files with a LastWrite time greater than this value are excluded by the filter. + public DateTime MaxDate + { + get { return maxDate_; } + + set + { + if (minDate_ > value) + { + throw new ArgumentException("Exceeds MinDate", "value"); + } + + maxDate_ = value; + } + } + + #endregion + + #region Instance Fields + + private DateTime maxDate_ = DateTime.MaxValue; + private long maxSize_ = long.MaxValue; + private DateTime minDate_ = DateTime.MinValue; + private long minSize_; + + #endregion + } + + /// + /// NameAndSizeFilter filters based on name and file size. + /// + /// A sample showing how filters might be extended. + [Obsolete("Use ExtendedPathFilter instead")] + public class NameAndSizeFilter : PathFilter + { + /// + /// Initialise a new instance of NameAndSizeFilter. + /// + /// The filter to apply. + /// The minimum file size to include. + /// The maximum file size to include. + public NameAndSizeFilter(string filter, long minSize, long maxSize) + : base(filter) + { + MinSize = minSize; + MaxSize = maxSize; + } + + /// + /// Get/set the minimum size for a file that will match this filter. + /// + public long MinSize + { + get { return minSize_; } + set + { + if ((value < 0) || (maxSize_ < value)) + { + throw new ArgumentOutOfRangeException("value"); + } + + minSize_ = value; + } + } + + /// + /// Get/set the maximum size for a file that will match this filter. + /// + public long MaxSize + { + get { return maxSize_; } + set + { + if ((value < 0) || (minSize_ > value)) + { + throw new ArgumentOutOfRangeException("value"); + } + + maxSize_ = value; + } + } + + #region Instance Fields + + private long maxSize_ = long.MaxValue; + private long minSize_; + + #endregion + + /// + /// Test a filename to see if it matches the filter. + /// + /// The filename to test. + /// True if the filter matches, false otherwise. + public override bool IsMatch(string name) + { + var result = base.IsMatch(name); + + if (result) + { + var fileInfo = new FileInfo(name); + var length = fileInfo.Length; + result = + (MinSize <= length) && + (MaxSize >= length); + } + return result; + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Core/StreamUtils.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Core/StreamUtils.cs new file mode 100644 index 0000000..7741065 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Core/StreamUtils.cs @@ -0,0 +1,209 @@ +// StreamUtils.cs +// +// Copyright 2005 John Reilly +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using System.IO; +using ICSharpCode.SharpZipLib.Silverlight.Core; + +namespace ICSharpCode.SharpZipLib.Silverlight.Core +{ + /// + /// Provides simple " utilities. + /// + public static class StreamUtils + { + /// + /// Read from a ensuring all the required data is read. + /// + /// The stream to read. + /// The buffer to fill. + static public void ReadFully(Stream stream, byte[] buffer) + { + ReadFully(stream, buffer, 0, buffer.Length); + } + + /// + /// Read from a " ensuring all the required data is read. + /// + /// The stream to read data from. + /// The buffer to store data in. + /// The offset at which to begin storing data. + /// The number of bytes of data to store. + static public void ReadFully(Stream stream, byte[] buffer, int offset, int count) + { + if ( stream == null ) { + throw new ArgumentNullException("stream"); + } + + if ( buffer == null ) { + throw new ArgumentNullException("buffer"); + } + + // Offset can equal length when buffer and count are 0. + if ( (offset < 0) || (offset > buffer.Length) ) { + throw new ArgumentOutOfRangeException("offset"); + } + + if ( (count < 0) || (offset + count > buffer.Length) ) { + throw new ArgumentOutOfRangeException("count"); + } + + while ( count > 0 ) { + int readCount = stream.Read(buffer, offset, count); + if ( readCount <= 0 ) { + throw new EndOfStreamException(); + } + offset += readCount; + count -= readCount; + } + } + + /// + /// Copy the contents of one to another. + /// + /// The stream to source data from. + /// The stream to write data to. + /// The buffer to use during copying. + /// The progress handler delegate to use. + /// The minimum between progress updates. + /// The source for this event. + /// The name to use with the event. + static public void Copy(Stream source, Stream destination, + byte[] buffer, ProgressHandler progressHandler, TimeSpan updateInterval, object sender, string name) + { + if (source == null) { + throw new ArgumentNullException("source"); + } + + if (destination == null) { + throw new ArgumentNullException("destination"); + } + + if (buffer == null) { + throw new ArgumentNullException("buffer"); + } + + // Ensure a reasonable size of buffer is used without being prohibitive. + if (buffer.Length < 128) { + throw new ArgumentException("Buffer is too small", "buffer"); + } + + if (progressHandler == null) { + throw new ArgumentNullException("progressHandler"); + } + + bool copying = true; + + DateTime marker = DateTime.Now; + long processed = 0; + long target = 0; + + if (source.CanSeek) { + target = source.Length - source.Position; + } + + // Always fire 0% progress.. + var args = new ProgressEventArgs(name, processed, target); + progressHandler(sender, args); + + bool completeFired = false; + + while (copying) { + int bytesRead = source.Read(buffer, 0, buffer.Length); + if (bytesRead > 0) { + processed += bytesRead; + destination.Write(buffer, 0, bytesRead); + } + else { + destination.Flush(); + copying = false; + } + + if (DateTime.Now - marker > updateInterval) { + completeFired = (processed == target); + marker = DateTime.Now; + args = new ProgressEventArgs(name, processed, target); + progressHandler(sender, args); + + copying = args.ContinueRunning; + } + } + + if (!completeFired) { + args = new ProgressEventArgs(name, processed, target); + progressHandler(sender, args); + } + } + + /// + /// Copy the contents of one to another. + /// + /// The stream to source data from. + /// The stream to write data to. + /// The buffer to use during copying. + static public void Copy(Stream source, Stream destination, byte[] buffer) + { + if ( source == null ) { + throw new ArgumentNullException("source"); + } + + if ( destination == null ) { + throw new ArgumentNullException("destination"); + } + + if ( buffer == null ) { + throw new ArgumentNullException("buffer"); + } + + // Ensure a reasonable size of buffer is used without being prohibitive. + if ( buffer.Length < 128 ) { + throw new ArgumentException("Buffer is too small", "buffer"); + } + + bool copying = true; + + while ( copying ) { + int bytesRead = source.Read(buffer, 0, buffer.Length); + if ( bytesRead > 0 ) { + destination.Write(buffer, 0, bytesRead); + } + else { + destination.Flush(); + copying = false; + } + } + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Encryption/PkzipClassic.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Encryption/PkzipClassic.cs new file mode 100644 index 0000000..52a07ec --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Encryption/PkzipClassic.cs @@ -0,0 +1,489 @@ +// +// PkzipClassic encryption +// +// Copyright 2004 John Reilly +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. +// + +using System; +using System.Security.Cryptography; +using ICSharpCode.SharpZipLib.Silverlight.Checksums; + +namespace ICSharpCode.SharpZipLib.Silverlight.Encryption +{ + /// + /// PkzipClassic embodies the classic or original encryption facilities used in Pkzip archives. + /// While it has been superceded by more recent and more powerful algorithms, its still in use and + /// is viable for preventing casual snooping + /// + public abstract class PkzipClassic : SymmetricAlgorithm + { + /// + /// Generates new encryption keys based on given seed + /// + /// The seed value to initialise keys with. + /// A new key value. + public static byte[] GenerateKeys(byte[] seed) + { + if (seed == null) + { + throw new ArgumentNullException("seed"); + } + + if (seed.Length == 0) + { + throw new ArgumentException("Length is zero", "seed"); + } + + var newKeys = new uint[]{ + 0x12345678, + 0x23456789, + 0x34567890 + }; + + for (var i = 0; i < seed.Length; ++i) + { + newKeys[0] = Crc32.ComputeCrc32(newKeys[0], seed[i]); + newKeys[1] = newKeys[1] + (byte) newKeys[0]; + newKeys[1] = newKeys[1]*134775813 + 1; + newKeys[2] = Crc32.ComputeCrc32(newKeys[2], (byte) (newKeys[1] >> 24)); + } + + var result = new byte[12]; + result[0] = (byte) (newKeys[0] & 0xff); + result[1] = (byte) ((newKeys[0] >> 8) & 0xff); + result[2] = (byte) ((newKeys[0] >> 16) & 0xff); + result[3] = (byte) ((newKeys[0] >> 24) & 0xff); + result[4] = (byte) (newKeys[1] & 0xff); + result[5] = (byte) ((newKeys[1] >> 8) & 0xff); + result[6] = (byte) ((newKeys[1] >> 16) & 0xff); + result[7] = (byte) ((newKeys[1] >> 24) & 0xff); + result[8] = (byte) (newKeys[2] & 0xff); + result[9] = (byte) ((newKeys[2] >> 8) & 0xff); + result[10] = (byte) ((newKeys[2] >> 16) & 0xff); + result[11] = (byte) ((newKeys[2] >> 24) & 0xff); + return result; + } + } + + /// + /// PkzipClassicCryptoBase provides the low level facilities for encryption + /// and decryption using the PkzipClassic algorithm. + /// + internal class PkzipClassicCryptoBase + { + /// + /// Transform a single byte + /// + /// + /// The transformed value + /// + protected byte TransformByte() + { + var temp = ((keys[2] & 0xFFFF) | 2); + return (byte) ((temp*(temp ^ 1)) >> 8); + } + + /// + /// Set the key schedule for encryption/decryption. + /// + /// The data use to set the keys from. + protected void SetKeys(byte[] keyData) + { + if (keyData == null) + { + throw new ArgumentNullException("keyData"); + } + + if (keyData.Length != 12) + { + throw new InvalidOperationException("Key length is not valid"); + } + + keys = new uint[3]; + keys[0] = (uint) ((keyData[3] << 24) | (keyData[2] << 16) | (keyData[1] << 8) | keyData[0]); + keys[1] = (uint) ((keyData[7] << 24) | (keyData[6] << 16) | (keyData[5] << 8) | keyData[4]); + keys[2] = (uint) ((keyData[11] << 24) | (keyData[10] << 16) | (keyData[9] << 8) | keyData[8]); + } + + /// + /// Update encryption keys + /// + protected void UpdateKeys(byte ch) + { + keys[0] = Crc32.ComputeCrc32(keys[0], ch); + keys[1] = keys[1] + (byte) keys[0]; + keys[1] = keys[1]*134775813 + 1; + keys[2] = Crc32.ComputeCrc32(keys[2], (byte) (keys[1] >> 24)); + } + + /// + /// Reset the internal state. + /// + protected void Reset() + { + keys[0] = 0; + keys[1] = 0; + keys[2] = 0; + } + + #region Instance Fields + + private uint[] keys; + + #endregion + } + + /// + /// PkzipClassic CryptoTransform for encryption. + /// + internal class PkzipClassicEncryptCryptoTransform : PkzipClassicCryptoBase, ICryptoTransform + { + /// + /// Initialise a new instance of + /// + /// The key block to use. + internal PkzipClassicEncryptCryptoTransform(byte[] keyBlock) + { + SetKeys(keyBlock); + } + + #region ICryptoTransform Members + + /// + /// Transforms the specified region of the specified byte array. + /// + /// The input for which to compute the transform. + /// The offset into the byte array from which to begin using data. + /// The number of bytes in the byte array to use as data. + /// The computed transform. + public byte[] TransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount) + { + var result = new byte[inputCount]; + TransformBlock(inputBuffer, inputOffset, inputCount, result, 0); + return result; + } + + /// + /// Transforms the specified region of the input byte array and copies + /// the resulting transform to the specified region of the output byte array. + /// + /// The input for which to compute the transform. + /// The offset into the input byte array from which to begin using data. + /// The number of bytes in the input byte array to use as data. + /// The output to which to write the transform. + /// The offset into the output byte array from which to begin writing data. + /// The number of bytes written. + public int TransformBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, + int outputOffset) + { + for (var i = inputOffset; i < inputOffset + inputCount; ++i) + { + var oldbyte = inputBuffer[i]; + outputBuffer[outputOffset++] = (byte) (inputBuffer[i] ^ TransformByte()); + UpdateKeys(oldbyte); + } + return inputCount; + } + + /// + /// Gets a value indicating whether the current transform can be reused. + /// + public bool CanReuseTransform + { + get { return true; } + } + + /// + /// Gets the size of the input data blocks in bytes. + /// + public int InputBlockSize + { + get { return 1; } + } + + /// + /// Gets the size of the output data blocks in bytes. + /// + public int OutputBlockSize + { + get { return 1; } + } + + /// + /// Gets a value indicating whether multiple blocks can be transformed. + /// + public bool CanTransformMultipleBlocks + { + get { return true; } + } + + /// + /// Cleanup internal state. + /// + public void Dispose() + { + Reset(); + } + + #endregion + } + + /// + /// PkzipClassic CryptoTransform for decryption. + /// + internal class PkzipClassicDecryptCryptoTransform : PkzipClassicCryptoBase, ICryptoTransform + { + /// + /// Initialise a new instance of . + /// + /// The key block to decrypt with. + internal PkzipClassicDecryptCryptoTransform(byte[] keyBlock) + { + SetKeys(keyBlock); + } + + #region ICryptoTransform Members + + /// + /// Transforms the specified region of the specified byte array. + /// + /// The input for which to compute the transform. + /// The offset into the byte array from which to begin using data. + /// The number of bytes in the byte array to use as data. + /// The computed transform. + public byte[] TransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount) + { + var result = new byte[inputCount]; + TransformBlock(inputBuffer, inputOffset, inputCount, result, 0); + return result; + } + + /// + /// Transforms the specified region of the input byte array and copies + /// the resulting transform to the specified region of the output byte array. + /// + /// The input for which to compute the transform. + /// The offset into the input byte array from which to begin using data. + /// The number of bytes in the input byte array to use as data. + /// The output to which to write the transform. + /// The offset into the output byte array from which to begin writing data. + /// The number of bytes written. + public int TransformBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, + int outputOffset) + { + for (var i = inputOffset; i < inputOffset + inputCount; ++i) + { + var newByte = (byte) (inputBuffer[i] ^ TransformByte()); + outputBuffer[outputOffset++] = newByte; + UpdateKeys(newByte); + } + return inputCount; + } + + /// + /// Gets a value indicating whether the current transform can be reused. + /// + public bool CanReuseTransform + { + get { return true; } + } + + /// + /// Gets the size of the input data blocks in bytes. + /// + public int InputBlockSize + { + get { return 1; } + } + + /// + /// Gets the size of the output data blocks in bytes. + /// + public int OutputBlockSize + { + get { return 1; } + } + + /// + /// Gets a value indicating whether multiple blocks can be transformed. + /// + public bool CanTransformMultipleBlocks + { + get { return true; } + } + + /// + /// Cleanup internal state. + /// + public void Dispose() + { + Reset(); + } + + #endregion + } + + /// + /// Defines a wrapper object to access the Pkzip algorithm. + /// This class cannot be inherited. + /// + public sealed class PkzipClassicManaged : PkzipClassic + { + /// + /// Get / set the applicable block size in bits. + /// + /// The only valid block size is 8. + public override int BlockSize + { + get { return 8; } + + set + { + if (value != 8) + { + throw new CryptographicException("Block size is invalid"); + } + } + } + + /// + /// Get an array of legal key sizes. + /// + public override KeySizes[] LegalKeySizes + { + get + { + var keySizes = new KeySizes[1]; + keySizes[0] = new KeySizes(12*8, 12*8, 0); + return keySizes; + } + } + + /// + /// Get an array of legal block sizes. + /// + public override KeySizes[] LegalBlockSizes + { + get + { + var keySizes = new KeySizes[1]; + keySizes[0] = new KeySizes(1*8, 1*8, 0); + return keySizes; + } + } + + /// + /// Get / set the key value applicable. + /// + public override byte[] Key + { + get + { + if (key_ == null) + { + GenerateKey(); + } + + return (byte[]) key_.Clone(); + } + + set + { + if (value == null) + { + throw new ArgumentNullException("value"); + } + + if (value.Length != 12) + { + throw new CryptographicException("Key size is illegal"); + } + + key_ = (byte[]) value.Clone(); + } + } + + /// + /// Generate an initial vector. + /// + public override void GenerateIV() + { + // Do nothing. + } + + /// + /// Generate a new random key. + /// + public override void GenerateKey() + { + key_ = new byte[12]; + var rnd = new Random(); + rnd.NextBytes(key_); + } + + /// + /// Create an encryptor. + /// + /// The key to use for this encryptor. + /// Initialisation vector for the new encryptor. + /// Returns a new PkzipClassic encryptor + public override ICryptoTransform CreateEncryptor( + byte[] rgbKey, + byte[] rgbIV) + { + key_ = rgbKey; + return new PkzipClassicEncryptCryptoTransform(Key); + } + + /// + /// Create a decryptor. + /// + /// Keys to use for this new decryptor. + /// Initialisation vector for the new decryptor. + /// Returns a new decryptor. + public override ICryptoTransform CreateDecryptor( + byte[] rgbKey, + byte[] rgbIV) + { + key_ = rgbKey; + return new PkzipClassicDecryptCryptoTransform(Key); + } + + #region Instance Fields + + private byte[] key_; + + #endregion + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/GZip/GZIPConstants.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/GZip/GZIPConstants.cs new file mode 100644 index 0000000..1c0e389 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/GZip/GZIPConstants.cs @@ -0,0 +1,97 @@ +// GZipConstants.cs +// +// Copyright (C) 2001 Mike Krueger +// +// This file was translated from java, it was part of the GNU Classpath +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +namespace ICSharpCode.SharpZipLib.GZip +{ + + /// + /// This class contains constants used for gzip. + /// + sealed public class GZipConstants + { + /// + /// Magic number found at start of GZIP header + /// + public const int GZIP_MAGIC = 0x1F8B; + + /* The flag byte is divided into individual bits as follows: + + bit 0 FTEXT + bit 1 FHCRC + bit 2 FEXTRA + bit 3 FNAME + bit 4 FCOMMENT + bit 5 reserved + bit 6 reserved + bit 7 reserved + */ + + /// + /// Flag bit mask for text + /// + public const int FTEXT = 0x1; + + /// + /// Flag bitmask for Crc + /// + public const int FHCRC = 0x2; + + /// + /// Flag bit mask for extra + /// + public const int FEXTRA = 0x4; + + /// + /// flag bitmask for name + /// + public const int FNAME = 0x8; + + /// + /// flag bit mask indicating comment is present + /// + public const int FCOMMENT = 0x10; + + /// + /// Initialise default instance. + /// + /// Constructor is private to prevent instances being created. + GZipConstants() + { + } + } +} diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/GZip/GZipException.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/GZip/GZipException.cs new file mode 100644 index 0000000..1ca8bec --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/GZip/GZipException.cs @@ -0,0 +1,82 @@ +// GZipException.cs +// +// Copyright 2004 John Reilly +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using ICSharpCode.SharpZipLib.Silverlight.Serialization; + +namespace ICSharpCode.SharpZipLib.Silverlight.GZip +{ + /// + /// GZipException represents a Gzip specific exception + /// + public class GZipException : SharpZipBaseException + { + /// + /// Deserialization constructor + /// + /// for this constructor + protected GZipException(SerializationInfo info) + : base(info) + { + + } + + /// + /// Initialise a new instance of GZipException + /// + public GZipException() + { + } + + /// + /// Initialise a new instance of GZipException with its message string. + /// + /// A that describes the error. + public GZipException(string message) + : base(message) + { + } + + /// + /// Initialise a new instance of . + /// + /// A that describes the error. + /// The that caused this exception. + public GZipException(string message, Exception innerException) + : base (message, innerException) + { + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/GZip/GzipInputStream.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/GZip/GzipInputStream.cs new file mode 100644 index 0000000..4c57214 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/GZip/GzipInputStream.cs @@ -0,0 +1,405 @@ +// GzipInputStream.cs +// +// Copyright (C) 2001 Mike Krueger +// +// This file was translated from java, it was part of the GNU Classpath +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using System.IO; +using ICSharpCode.SharpZipLib.GZip; +using ICSharpCode.SharpZipLib.Silverlight.Checksums; +using ICSharpCode.SharpZipLib.Silverlight.Zip.Compression; +using ICSharpCode.SharpZipLib.Silverlight.Zip.Compression.Streams; + +namespace ICSharpCode.SharpZipLib.Silverlight.GZip +{ + /// + /// This filter stream is used to decompress a "GZIP" format stream. + /// The "GZIP" format is described baseInputStream RFC 1952. + /// + /// author of the original java version : John Leuner + /// + /// This sample shows how to unzip a gzipped file + /// + /// using System; + /// using System.IO; + /// + /// using ICSharpCode.SharpZipLib.Core; + /// using ICSharpCode.SharpZipLib.GZip; + /// + /// class MainClass + /// { + /// public static void Main(string[] args) + /// { + /// using (Stream inStream = new GZipInputStream(File.OpenRead(args[0]))) + /// using (FileStream outStream = File.Create(Path.GetFileNameWithoutExtension(args[0]))) { + /// byte[] buffer = new byte[4096]; + /// StreamUtils.Copy(inStream, outStream, buffer); + /// } + /// } + /// } + /// + /// + public class GZipInputStream : InflaterInputStream + { + #region Instance Fields + + /// + /// CRC-32 value for uncompressed data + /// + protected Crc32 crc = new Crc32(); + + /// + /// Indicates end of stream + /// + protected bool eos; + + // Have we read the GZIP header yet? + private bool readGZIPHeader; + + #endregion + + #region Constructors + + /// + /// Creates a GZipInputStream with the default buffer size + /// + /// + /// The stream to read compressed data from (baseInputStream GZIP format) + /// + public GZipInputStream(Stream baseInputStream) + : this(baseInputStream, 4096) + { + } + + /// + /// Creates a GZIPInputStream with the specified buffer size + /// + /// + /// The stream to read compressed data from (baseInputStream GZIP format) + /// + /// + /// Size of the buffer to use + /// + public GZipInputStream(Stream baseInputStream, int size) + : base(baseInputStream, new Inflater(true), size) + { + } + + #endregion + + #region Stream overrides + + /// + /// Reads uncompressed data into an array of bytes + /// + /// + /// The buffer to read uncompressed data into + /// + /// + /// The offset indicating where the data should be placed + /// + /// + /// The number of uncompressed bytes to be read + /// + /// Returns the number of bytes actually read. + public override int Read(byte[] buffer, int offset, int count) + { + // We first have to read the GZIP header, then we feed all the + // rest of the data to the base class. + // + // As we do that we continually update the CRC32. Once the data is + // finished, we check the CRC32 + // + // This means we don't need our own buffer, as everything is done + // in baseInputStream the superclass. + if (!readGZIPHeader) + { + ReadHeader(); + } + + if (eos) + { + return 0; + } + + // We don't have to read the header, so we just grab data from the superclass + var bytesRead = base.Read(buffer, offset, count); + if (bytesRead > 0) + { + crc.Update(buffer, offset, bytesRead); + } + + if (inf.IsFinished) + { + ReadFooter(); + } + return bytesRead; + } + + #endregion + + #region Support routines + + private void ReadHeader() + { + // 1. Check the two magic bytes + var headCRC = new Crc32(); + var magic = baseInputStream.ReadByte(); + + if (magic < 0) + { + throw new EndOfStreamException("EOS reading GZIP header"); + } + + headCRC.Update(magic); + if (magic != (GZipConstants.GZIP_MAGIC >> 8)) + { + throw new GZipException("Error GZIP header, first magic byte doesn't match"); + } + + magic = baseInputStream.ReadByte(); + + if (magic < 0) + { + throw new EndOfStreamException("EOS reading GZIP header"); + } + + if (magic != (GZipConstants.GZIP_MAGIC & 0xFF)) + { + throw new GZipException("Error GZIP header, second magic byte doesn't match"); + } + + headCRC.Update(magic); + + // 2. Check the compression type (must be 8) + var compressionType = baseInputStream.ReadByte(); + + if (compressionType < 0) + { + throw new EndOfStreamException("EOS reading GZIP header"); + } + + if (compressionType != 8) + { + throw new GZipException("Error GZIP header, data not in deflate format"); + } + headCRC.Update(compressionType); + + // 3. Check the flags + var flags = baseInputStream.ReadByte(); + if (flags < 0) + { + throw new EndOfStreamException("EOS reading GZIP header"); + } + headCRC.Update(flags); + + /* This flag byte is divided into individual bits as follows: + + bit 0 FTEXT + bit 1 FHCRC + bit 2 FEXTRA + bit 3 FNAME + bit 4 FCOMMENT + bit 5 reserved + bit 6 reserved + bit 7 reserved + */ + + // 3.1 Check the reserved bits are zero + + if ((flags & 0xd0) != 0) + { + throw new GZipException("Reserved flag bits in GZIP header != 0"); + } + + // 4.-6. Skip the modification time, extra flags, and OS type + for (var i = 0; i < 6; i++) + { + var readByte = baseInputStream.ReadByte(); + if (readByte < 0) + { + throw new EndOfStreamException("EOS reading GZIP header"); + } + headCRC.Update(readByte); + } + + // 7. Read extra field + if ((flags & GZipConstants.FEXTRA) != 0) + { + // Skip subfield id + for (var i = 0; i < 2; i++) + { + var readByte = baseInputStream.ReadByte(); + if (readByte < 0) + { + throw new EndOfStreamException("EOS reading GZIP header"); + } + headCRC.Update(readByte); + } + + if (baseInputStream.ReadByte() < 0 || baseInputStream.ReadByte() < 0) + { + throw new EndOfStreamException("EOS reading GZIP header"); + } + + var len1 = baseInputStream.ReadByte(); + var len2 = baseInputStream.ReadByte(); + if ((len1 < 0) || (len2 < 0)) + { + throw new EndOfStreamException("EOS reading GZIP header"); + } + headCRC.Update(len1); + headCRC.Update(len2); + + var extraLen = (len1 << 8) | len2; + for (var i = 0; i < extraLen; i++) + { + var readByte = baseInputStream.ReadByte(); + if (readByte < 0) + { + throw new EndOfStreamException("EOS reading GZIP header"); + } + headCRC.Update(readByte); + } + } + + // 8. Read file name + if ((flags & GZipConstants.FNAME) != 0) + { + int readByte; + while ((readByte = baseInputStream.ReadByte()) > 0) + { + headCRC.Update(readByte); + } + + if (readByte < 0) + { + throw new EndOfStreamException("EOS reading GZIP header"); + } + headCRC.Update(readByte); + } + + // 9. Read comment + if ((flags & GZipConstants.FCOMMENT) != 0) + { + int readByte; + while ((readByte = baseInputStream.ReadByte()) > 0) + { + headCRC.Update(readByte); + } + + if (readByte < 0) + { + throw new EndOfStreamException("EOS reading GZIP header"); + } + + headCRC.Update(readByte); + } + + // 10. Read header CRC + if ((flags & GZipConstants.FHCRC) != 0) + { + var crcval = baseInputStream.ReadByte(); + if (crcval < 0) + { + throw new EndOfStreamException("EOS reading GZIP header"); + } + + int tempByte = baseInputStream.ReadByte(); + if (tempByte < 0) + { + throw new EndOfStreamException("EOS reading GZIP header"); + } + + crcval = (crcval << 8) | tempByte; + if (crcval != ((int) headCRC.Value & 0xffff)) + { + throw new GZipException("Header CRC value mismatch"); + } + } + + readGZIPHeader = true; + } + + private void ReadFooter() + { + var footer = new byte[8]; + var avail = inf.RemainingInput; + + if (avail > 8) + { + avail = 8; + } + + Array.Copy(inputBuffer.RawData, inputBuffer.RawLength - inf.RemainingInput, footer, 0, avail); + var needed = 8 - avail; + + while (needed > 0) + { + var count = baseInputStream.Read(footer, 8 - needed, needed); + if (count <= 0) + { + throw new EndOfStreamException("EOS reading GZIP footer"); + } + needed -= count; // Jewel Jan 16 + } + + var crcval = (footer[0] & 0xff) | ((footer[1] & 0xff) << 8) | ((footer[2] & 0xff) << 16) | (footer[3] << 24); + if (crcval != (int) crc.Value) + { + throw new GZipException("GZIP crc sum mismatch, theirs \"" + crcval + "\" and ours \"" + (int) crc.Value); + } + + // NOTE The total here is the original total modulo 2 ^ 32. + var total = + ((uint) footer[4] & 0xff) | + (((uint) footer[5] & 0xff) << 8) | + (((uint) footer[6] & 0xff) << 16) | + ((uint) footer[7] << 24); + + if ((inf.TotalOut & 0xffffffff) != total) + { + throw new GZipException("Number of bytes mismatch in footer"); + } + + // Should we support multiple gzip members. + // Difficult, since there may be some bytes still in baseInputStream dataBuffer + eos = true; + } + + #endregion + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/GZip/GzipOutputStream.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/GZip/GzipOutputStream.cs new file mode 100644 index 0000000..169ffd6 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/GZip/GzipOutputStream.cs @@ -0,0 +1,248 @@ +// GZipOutputStream.cs +// +// Copyright (C) 2001 Mike Krueger +// +// This file was translated from java, it was part of the GNU Classpath +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using System.IO; +using ICSharpCode.SharpZipLib.GZip; +using ICSharpCode.SharpZipLib.Silverlight.Checksums; +using ICSharpCode.SharpZipLib.Silverlight.Zip.Compression; +using ICSharpCode.SharpZipLib.Silverlight.Zip.Compression.Streams; + +namespace ICSharpCode.SharpZipLib.Silverlight.GZip +{ + /// + /// This filter stream is used to compress a stream into a "GZIP" stream. + /// The "GZIP" format is described in RFC 1952. + /// + /// author of the original java version : John Leuner + /// + /// This sample shows how to gzip a file + /// + /// using System; + /// using System.IO; + /// + /// using ICSharpCode.SharpZipLib.GZip; + /// using ICSharpCode.SharpZipLib.Core; + /// + /// class MainClass + /// { + /// public static void Main(string[] args) + /// { + /// using (Stream s = new GZipOutputStream(File.Create(args[0] + ".gz"))) + /// using (FileStream fs = File.OpenRead(args[0])) { + /// byte[] writeData = new byte[4096]; + /// Streamutils.Copy(s, fs, writeData); + /// } + /// } + /// } + /// } + /// + /// + public class GZipOutputStream : DeflaterOutputStream + { + #region Instance Fields + + /// + /// CRC-32 value for uncompressed data + /// + protected Crc32 crc = new Crc32(); + + private bool headerWritten_; + + #endregion + + #region Constructors + + /// + /// Creates a GzipOutputStream with the default buffer size + /// + /// + /// The stream to read data (to be compressed) from + /// + public GZipOutputStream(Stream baseOutputStream) : this(baseOutputStream, 4096) + { + } + + /// + /// Creates a GZipOutputStream with the specified buffer size + /// + /// + /// The stream to read data (to be compressed) from + /// + /// + /// Size of the buffer to use + /// + public GZipOutputStream(Stream baseOutputStream, int size) + : base(baseOutputStream, new Deflater(Deflater.DEFAULT_COMPRESSION, true), size) + { + } + + #endregion + + #region Public API + + /// + /// Sets the active compression level (1-9). The new level will be activated + /// immediately. + /// + /// The compression level to set. + /// + /// Level specified is not supported. + /// + /// + public void SetLevel(int level) + { + if (level < Deflater.BEST_SPEED) + { + throw new ArgumentOutOfRangeException("level"); + } + deflater_.SetLevel(level); + } + + /// + /// Get the current compression level. + /// + /// The current compression level. + public int GetLevel() + { + return deflater_.GetLevel(); + } + + #endregion + + #region Stream overrides + + /// + /// Write given buffer to output updating crc + /// + /// Buffer to write + /// Offset of first byte in buf to write + /// Number of bytes to write + public override void Write(byte[] buffer, int offset, int count) + { + if (! headerWritten_) + { + WriteHeader(); + } + + crc.Update(buffer, offset, count); + base.Write(buffer, offset, count); + } + + /// + /// Writes remaining compressed output data to the output stream + /// and closes it. + /// + public override void Close() + { + try + { + Finish(); + } + finally + { + if (IsStreamOwner) + { + baseOutputStream_.Close(); + } + } + } + + #endregion + + #region DeflaterOutputStream overrides + + /// + /// Finish compression and write any footer information required to stream + /// + public override void Finish() + { + // If no data has been written a header should be added. + if (!headerWritten_) + { + WriteHeader(); + } + + base.Finish(); + + var totalin = deflater_.TotalIn; + var crcval = (int) (crc.Value & 0xffffffff); + + byte[] gzipFooter = { + (byte) crcval, (byte) (crcval >> 8), + (byte) (crcval >> 16), (byte) (crcval >> 24), + (byte) totalin, (byte) (totalin >> 8), + (byte) (totalin >> 16), (byte) (totalin >> 24) + }; + + baseOutputStream_.Write(gzipFooter, 0, gzipFooter.Length); + } + + #endregion + + #region Support Routines + + private void WriteHeader() + { + if (!headerWritten_) + { + headerWritten_ = true; + var mod_time = (int) ((DateTime.Now.Ticks - new DateTime(1970, 1, 1).Ticks)/10000000L); + // Ticks give back 100ns intervals + byte[] gzipHeader = { + // The two magic bytes + (GZipConstants.GZIP_MAGIC >> 8), (GZipConstants.GZIP_MAGIC & 0xff), + // The compression type + Deflater.DEFLATED, + // The flags (not set) + 0, + // The modification time + (byte) mod_time, (byte) (mod_time >> 8), + (byte) (mod_time >> 16), (byte) (mod_time >> 24), + // The extra flags + 0, + // The OS type (unknown) + 255 + }; + baseOutputStream_.Write(gzipHeader, 0, gzipHeader.Length); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/ICSharpCode.SharpZipLib.Silverlight.csproj b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/ICSharpCode.SharpZipLib.Silverlight.csproj new file mode 100644 index 0000000..2756e6b --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/ICSharpCode.SharpZipLib.Silverlight.csproj @@ -0,0 +1,198 @@ + + + + v3.5 + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {2E420750-6124-473B-808D-41755C907648} + {A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + ICSharpCode.SharpZipLib.Silverlight + ICSharpCode.SharpZipLib.Silverlight + v3.0 + false + true + false + + + 3.5 + + + false + true + key.snk + Silverlight + $(TargetFrameworkVersion) + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + true + + + true + full + false + Bin\Debug + DEBUG;TRACE;SILVERLIGHT + true + true + prompt + 4 + AllRules.ruleset + + + pdbonly + true + Bin\Release + TRACE;SILVERLIGHT + true + true + prompt + 4 + MinimumRecommendedRules.ruleset + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 2.0 %28x86%29 + false + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Main.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Main.cs new file mode 100644 index 0000000..fbf0bdf --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Main.cs @@ -0,0 +1,36 @@ +// Main.cs +// +// Copyright (C) 2001 Mike Krueger +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. +// + diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Properties/AssemblyInfo.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..85ebf5b --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("SharpZipLibSilverlight")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("SharpZipLibSilverlight")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("4637877e-ab6e-4e03-a771-87d88d1d33ac")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/ISerializable.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/ISerializable.cs new file mode 100644 index 0000000..536a916 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/ISerializable.cs @@ -0,0 +1,13 @@ +namespace ICSharpCode.SharpZipLib.Silverlight.Serialization +{ + /// + /// Code originally authored by Rockford Lhotka: + /// http://www.lhotka.net/weblog/SilverlightSerialization.aspx, + /// presented here with minor naming and code changes. + /// + public interface ISerializable + { + void Serialize(SerializationInfo info, XmlFormatter formatter); + void Deserialize(SerializationInfo info, XmlFormatter formatter); + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/NonSerializedAttribute.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/NonSerializedAttribute.cs new file mode 100644 index 0000000..d9ada28 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/NonSerializedAttribute.cs @@ -0,0 +1,15 @@ +using System; + +namespace ICSharpCode.SharpZipLib.Silverlight.Serialization +{ + /// + /// Code originally authored by Rockford Lhotka: + /// http://www.lhotka.net/weblog/SilverlightSerialization.aspx, + /// presented here with minor naming and code changes. + /// + [AttributeUsage(AttributeTargets.Field)] + public class NonSerializedAttribute : Attribute + { + // + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/SerializableAttribute.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/SerializableAttribute.cs new file mode 100644 index 0000000..9709b6a --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/SerializableAttribute.cs @@ -0,0 +1,15 @@ +using System; + +namespace ICSharpCode.SharpZipLib.Silverlight.Serialization +{ + /// + /// Code originally authored by Rockford Lhotka: + /// http://www.lhotka.net/weblog/SilverlightSerialization.aspx, + /// presented here with minor naming and code changes. + /// + [AttributeUsage(AttributeTargets.Class)] + public class SerializableAttribute : Attribute + { + // + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/SerializableBase.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/SerializableBase.cs new file mode 100644 index 0000000..9b6de0d --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/SerializableBase.cs @@ -0,0 +1,102 @@ +using System; +using System.Reflection; + +namespace ICSharpCode.SharpZipLib.Silverlight.Serialization +{ + /// + /// Code originally authored by Rockford Lhotka: + /// http://www.lhotka.net/weblog/SilverlightSerialization.aspx, + /// presented here with minor naming and code changes. + /// + [Serializable] + public abstract class SerializableBase : ISerializable + { + #region ISerializable Members + + void ISerializable.Serialize(SerializationInfo info, XmlFormatter formatter) + { + var thisType = GetType(); + info.TypeName = string.Format("{0},{1}", thisType.FullName, thisType.Assembly.FullName); + Serialize(info, formatter); + } + + void ISerializable.Deserialize(SerializationInfo info, XmlFormatter formatter) + { + Deserialize(info, formatter); + } + + #endregion + + protected virtual void Serialize(SerializationInfo info, XmlFormatter formatter) + { + var currentType = GetType(); + + while (currentType != null) + { + var fields = currentType.GetFields( + BindingFlags.NonPublic | + BindingFlags.Instance | + BindingFlags.Public); + + foreach (var field in fields) + { + if (field.IsNotSerialized || IsNonSerialized(field)) + { + continue; + } + + var value = GetValue(field); + var mobile = value as ISerializable; + info.AddValue( + string.Format("{0}!{1}", field.DeclaringType.Name, field.Name), + mobile == null ? value : formatter.SerializeObject(mobile)); + } + currentType = currentType.BaseType; + } + } + + private static bool IsNonSerialized(ICustomAttributeProvider field) + { + var a = field.GetCustomAttributes(typeof(NonSerializedAttribute), false); + return a.Length > 0; + } + + protected virtual void Deserialize(SerializationInfo info, XmlFormatter formatter) + { + var currentType = GetType(); + + while (currentType != null) + { + // get the list of fields in this type + var fields = currentType.GetFields( + BindingFlags.NonPublic | + BindingFlags.Instance | + BindingFlags.Public); + + foreach (var field in fields) + { + // see if this field is marked as not undoable + if (field.IsNotSerialized || IsNonSerialized(field)) + { + continue; + } + + var value = info.GetValue(string.Format("{0}!{1}", field.DeclaringType.Name, field.Name)); + var valueInfo = value as SerializationInfo; + if (valueInfo == null) + { + SetValue(field, Convert.ChangeType(value, field.FieldType, null)); + } + else + { + SetValue(field, formatter.GetObject(valueInfo.ReferenceId)); + } + } + currentType = currentType.BaseType; + } + } + + protected abstract void SetValue(FieldInfo field, object value); + protected abstract object GetValue(FieldInfo field); + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/SerializableDateTime.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/SerializableDateTime.cs new file mode 100644 index 0000000..42713ee --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/SerializableDateTime.cs @@ -0,0 +1,60 @@ +using System; + +namespace ICSharpCode.SharpZipLib.Silverlight.Serialization +{ + [Serializable] + public class SerializableDateTime : SerializableBase + { + public DateTime DateTime { get; set; } + + public SerializableDateTime(int year, int month, int day) + { + DateTime = new DateTime(year, month, day); + } + + public SerializableDateTime() + { + + } + + protected override object GetValue(System.Reflection.FieldInfo field) + { + return field.DeclaringType == typeof (SerializableDateTime) ? field.GetValue(this) : null; + } + + protected override void SetValue(System.Reflection.FieldInfo field, object value) + { + if (field.DeclaringType == typeof(SerializableDateTime)) + { + field.SetValue(this, value); + } + } + + public bool Equals(SerializableDateTime other) + { + if (ReferenceEquals(null, other)) + { + return false; + } + return ReferenceEquals(this, other) || Equals(other.DateTime, DateTime); + } + + public override bool Equals(object other) + { + if (ReferenceEquals(null, other)) + { + return false; + } + if (ReferenceEquals(this, other)) + { + return true; + } + return other.GetType() == typeof (SerializableDateTime) && Equals((SerializableDateTime) other); + } + + public override int GetHashCode() + { + return DateTime.GetHashCode(); + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/SerializableString.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/SerializableString.cs new file mode 100644 index 0000000..440d213 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/SerializableString.cs @@ -0,0 +1,58 @@ +namespace ICSharpCode.SharpZipLib.Silverlight.Serialization +{ + [Serializable] + public class SerializableString : SerializableBase + { + public string String { get; set; } + + public SerializableString (string value) + { + String = value; + } + + public SerializableString() + { + + } + + protected override object GetValue(System.Reflection.FieldInfo field) + { + return field.DeclaringType == typeof (SerializableString) ? field.GetValue(this) : null; + } + + public bool Equals(SerializableString other) + { + if (ReferenceEquals(null, other)) + { + return false; + } + return ReferenceEquals(this, other) || Equals(other.String, String); + } + + public override bool Equals(object other) + { + if (ReferenceEquals(null, other)) + { + return false; + } + if (ReferenceEquals(this, other)) + { + return true; + } + return other.GetType() == typeof (SerializableString) && Equals((SerializableString) other); + } + + public override int GetHashCode() + { + return (String != null ? String.GetHashCode() : 0); + } + + protected override void SetValue(System.Reflection.FieldInfo field, object value) + { + if (field.DeclaringType == typeof(SerializableString)) + { + field.SetValue(this, value); + } + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/SerializationInfo.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/SerializationInfo.cs new file mode 100644 index 0000000..b1e55f1 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/SerializationInfo.cs @@ -0,0 +1,122 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Xml.Linq; + +namespace ICSharpCode.SharpZipLib.Silverlight.Serialization +{ + /// + /// Code originally authored by Rockford Lhotka: + /// http://www.lhotka.net/weblog/SilverlightSerialization.aspx, + /// presented here with minor naming and code changes. + /// + public class SerializationInfo + { + private class ValueEntry + { + public string Name { get; private set; } + public object Value { get; private set; } + + public ValueEntry(string name, object value) + { + Name = name; + Value = value; + } + } + + private readonly Dictionary _values = new Dictionary(); + + internal SerializationInfo(int referenceId) + { + ReferenceId = referenceId; + } + + internal int ReferenceId { get; private set; } + + public string TypeName { get; set; } + + public void AddValue(string name, object value) + { + _values.Add(name, new ValueEntry(name, value)); + } + + public object GetValue(string name) + { + ValueEntry result; + return _values.TryGetValue(name, out result) ? result.Value : null; + } + + internal XElement ToXElement() + { + var root = new XElement("o"); + root.Add(new XAttribute("i", ReferenceId)); + root.Add(new XAttribute("t", TypeName)); + + foreach (var item in _values) + { + var info = item.Value.Value as SerializationInfo; + if (info == null) + { + var list = item.Value.Value as List; + if (list == null) + { + if (item.Value.Value != null) + root.Add(new XElement("f", + new XAttribute("n", item.Value.Name), + new XAttribute("v", item.Value.Value))); + } + else + { + var listElement = new XElement("l", + new XAttribute("n", item.Value.Name)); + foreach (var listItem in list) + listElement.Add(new XElement("r", + new XAttribute("i", listItem.ReferenceId))); + root.Add(listElement); + } + } + else + root.Add(new XElement("r", + new XAttribute("n", item.Value.Name), + new XAttribute("i", info.ReferenceId))); + } + return root; + } + + internal SerializationInfo(XElement data) + { + ReferenceId = Convert.ToInt32(data.Attribute("i").Value); + if (data.Name == "o") + { + TypeName = data.Attribute("t").Value; + } + } + + internal void Deserialize(XElement data, XmlFormatter formatter) + { + foreach (var item in data.Elements()) + { + if (item.Name == "f") + { + var entry = new ValueEntry(item.Attribute("n").Value, item.Attribute("v").Value); + _values.Add(entry.Name, entry); + } + else if (item.Name == "l") + { + var listItems = item.Elements().Select(content => new SerializationInfo(content)).ToList(); + + var entry = new ValueEntry(item.Attribute("n").Value, listItems); + _values.Add(entry.Name, entry); + } + else + { + var referenceId = Convert.ToInt32(item.Attribute("i").Value); + var entry = new ValueEntry( + item.Attribute("n").Value, + new SerializationInfo(referenceId)); + _values.Add(entry.Name, entry); + } + } + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/XmlFormatter.Deserialize.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/XmlFormatter.Deserialize.cs new file mode 100644 index 0000000..350b8de --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/XmlFormatter.Deserialize.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using System.Xml; +using System.Xml.Linq; + +namespace ICSharpCode.SharpZipLib.Silverlight.Serialization +{ + /// + /// Code originally authored by Rockford Lhotka: + /// http://www.lhotka.net/weblog/SilverlightSerialization.aspx, + /// presented here with minor naming and code changes. + /// + public sealed partial class XmlFormatter + { + private readonly Dictionary _serializationReferences = + new Dictionary(); + + public void Serialize(Stream serializationStream, object graph) + { + var writer = XmlWriter.Create(serializationStream); + Serialize(writer, graph); + if (writer != null) + { + writer.Flush(); + } + } + + public void Serialize(TextWriter textWriter, object graph) + { + var writer = XmlWriter.Create(textWriter); + Serialize(writer, graph); + if (writer != null) + { + writer.Flush(); + } + } + + public void Serialize(XmlWriter writer, object graph) + { + _serializationReferences.Clear(); + + var document = new XDocument(); + SerializeObject(graph); + var root = new XElement("g"); + foreach (var item in _serializationReferences) + { + root.Add(item.Value.ToXElement()); + } + document.Add(root); + document.Save(writer); + } + + internal SerializationInfo SerializeObject(object obj) + { + var thisType = obj.GetType(); + if (!IsSerializable(thisType)) + { + throw new InvalidOperationException("Object not serializable"); + } + var mobile = obj as ISerializable; + if (mobile == null) + { + throw new InvalidOperationException( + string.Format("Type {0} must implement ISerializable", + thisType.Name)); + } + + SerializationInfo info; + if (!_serializationReferences.TryGetValue(mobile, out info)) + { + info = new SerializationInfo(_serializationReferences.Count + 1); + _serializationReferences.Add(mobile, info); + mobile.Serialize(info, this); + } + return info; + } + + private static bool IsSerializable(ICustomAttributeProvider objectType) + { + var a = objectType.GetCustomAttributes(typeof (SerializableAttribute), false); + return a.Length > 0; + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/XmlFormatter.Serialize.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/XmlFormatter.Serialize.cs new file mode 100644 index 0000000..db9aa1a --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Serialization/XmlFormatter.Serialize.cs @@ -0,0 +1,79 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Xml; +using System.Xml.Linq; + +namespace ICSharpCode.SharpZipLib.Silverlight.Serialization +{ + /// + /// Code originally authored by Rockford Lhotka: + /// http://www.lhotka.net/weblog/SilverlightSerialization.aspx, + /// presented here with minor naming and code changes. + /// + public sealed partial class XmlFormatter + { + private readonly Dictionary _deserializationReferences = + new Dictionary(); + + public object Deserialize(Stream serializationStream) + { + var reader = XmlReader.Create(serializationStream); + return Deserialize(reader); + } + + public object Deserialize(TextReader textReader) + { + var reader = XmlReader.Create(textReader); + return Deserialize(reader); + } + + public object Deserialize(XmlReader reader) + { + var doc = XDocument.Load(reader); + var root = (XElement) doc.FirstNode; + + _deserializationReferences.Clear(); + + var objects = from e in root.Elements() + where e.Name == "o" + select e; + + var infos = new Dictionary(); + + foreach (var item in objects) + { + var info = new SerializationInfo(item); + infos.Add(info.ReferenceId, info); + var objType = Type.GetType(info.TypeName); + var mobile = Activator.CreateInstance(objType) as ISerializable; + _deserializationReferences.Add(info.ReferenceId, mobile); + } + + foreach (var item in objects) + { + if (item == null) + { + continue; + } + + var referenceId = Convert.ToInt32(item.Attribute("i").Value); + var info = infos[referenceId]; + info.Deserialize(item, this); + } + + foreach (var info in infos) + { + GetObject(info.Value.ReferenceId).Deserialize(info.Value, this); + } + + return _deserializationReferences[1]; + } + + internal ISerializable GetObject(int referenceId) + { + return _deserializationReferences[referenceId]; + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/SharpZipBaseException.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/SharpZipBaseException.cs new file mode 100644 index 0000000..f2d5912 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/SharpZipBaseException.cs @@ -0,0 +1,85 @@ +// SharpZipBaseException.cs +// +// Copyright 2004 John Reilly +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using ICSharpCode.SharpZipLib.Silverlight.Serialization; + +namespace ICSharpCode.SharpZipLib.Silverlight +{ + /// + /// SharpZipBaseException is the base exception class for the SharpZipLibrary. + /// All library exceptions are derived from this. + /// + /// NOTE: Not all exceptions thrown will be derived from this class. + /// A variety of other exceptions are possible for example + [Serializable] + public class SharpZipBaseException : Exception + { + /// + /// Deserialization constructor + /// + /// for this constructor + protected SharpZipBaseException(SerializationInfo info) + { + } + + /// + /// Initializes a new instance of the SharpZipBaseException class. + /// + public SharpZipBaseException() + { + } + + /// + /// Initializes a new instance of the SharpZipBaseException class with a specified error message. + /// + /// A message describing the exception. + public SharpZipBaseException(string message) + : base(message) + { + } + + /// + /// Initializes a new instance of the SharpZipBaseException class with a specified + /// error message and a reference to the inner exception that is the cause of this exception. + /// + /// A message describing the exception. + /// The inner exception + public SharpZipBaseException(string message, Exception innerException) + : base(message, innerException) + { + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Tar/InvalidHeaderException.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Tar/InvalidHeaderException.cs new file mode 100644 index 0000000..ab5e194 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Tar/InvalidHeaderException.cs @@ -0,0 +1,98 @@ +// InvalidHeaderException.cs +// +// Copyright (C) 2001 Mike Krueger +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using ICSharpCode.SharpZipLib.Silverlight.Serialization; + +namespace ICSharpCode.SharpZipLib.Silverlight.Tar +{ + /// + /// This exception is used to indicate that there is a problem + /// with a TAR archive header. + /// + [Serializable] + public class InvalidHeaderException : TarException + { + /// + /// Deserialization constructor + /// + /// for this constructor + protected InvalidHeaderException(SerializationInfo information) + : base(information) + { + } + + /// + /// Initialise a new instance of the InvalidHeaderException class. + /// + public InvalidHeaderException() + { + } + + /// + /// Initialises a new instance of the InvalidHeaderException class with a specified message. + /// + /// Message describing the exception cause. + public InvalidHeaderException(string message) + : base(message) + { + } + + /// + /// Initialise a new instance of InvalidHeaderException + /// + /// Message describing the problem. + /// The exception that is the cause of the current exception. + public InvalidHeaderException(string message, Exception exception) + : base(message, exception) + { + } + } +} + +/* The original Java file had this header: +** Authored by Timothy Gerard Endres +** +** +** This work has been placed into the public domain. +** You may use this work in any way and for any purpose you wish. +** +** THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND, +** NOT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY. THE AUTHOR +** OF THIS SOFTWARE, ASSUMES _NO_ RESPONSIBILITY FOR ANY +** CONSEQUENCE RESULTING FROM THE USE, MODIFICATION, OR +** REDISTRIBUTION OF THIS SOFTWARE. +** +*/ \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Tar/TarArchive.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Tar/TarArchive.cs new file mode 100644 index 0000000..6651316 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Tar/TarArchive.cs @@ -0,0 +1,953 @@ +// TarArchive.cs +// +// Copyright (C) 2001 Mike Krueger +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using System.IO; +using System.Text; + +namespace ICSharpCode.SharpZipLib.Silverlight.Tar +{ + /// + /// Used to advise clients of 'events' while processing archives + /// + public delegate void ProgressMessageHandler(TarArchive archive, TarEntry entry, string message); + + /// + /// The TarArchive class implements the concept of a + /// 'Tape Archive'. A tar archive is a series of entries, each of + /// which represents a file system object. Each entry in + /// the archive consists of a header block followed by 0 or more data blocks. + /// Directory entries consist only of the header block, and are followed by entries + /// for the directory's contents. File entries consist of a + /// header followed by the number of blocks needed to + /// contain the file's contents. All entries are written on + /// block boundaries. Blocks are 512 bytes long. + /// + /// TarArchives are instantiated in either read or write mode, + /// based upon whether they are instantiated with an InputStream + /// or an OutputStream. Once instantiated TarArchives read/write + /// mode can not be changed. + /// + /// There is currently no support for random access to tar archives. + /// However, it seems that subclassing TarArchive, and using the + /// TarBuffer.CurrentRecord and TarBuffer.CurrentBlock + /// properties, this would be rather trivial. + /// + public class TarArchive : IDisposable + { + /// + /// Get/set the ascii file translation flag. If ascii file translation + /// is true, then the file is checked to see if it a binary file or not. + /// If the flag is true and the test indicates it is ascii text + /// file, it will be translated. The translation converts the local + /// operating system's concept of line ends into the UNIX line end, + /// '\n', which is the defacto standard for a TAR archive. This makes + /// text files compatible with UNIX. + /// + public bool AsciiTranslate + { + get + { + if (isDisposed) + { + throw new ObjectDisposedException("TarArchive"); + } + + return _asciiTranslate; + } + + set + { + if (isDisposed) + { + throw new ObjectDisposedException("TarArchive"); + } + + _asciiTranslate = value; + } + } + + /// + /// PathPrefix is added to entry names as they are written if the value is not null. + /// A slash character is appended after PathPrefix + /// + public string PathPrefix + { + get + { + if (isDisposed) + { + throw new ObjectDisposedException("TarArchive"); + } + + return pathPrefix; + } + + set + { + if (isDisposed) + { + throw new ObjectDisposedException("TarArchive"); + } + + pathPrefix = value; + } + } + + /// + /// RootPath is removed from entry names if it is found at the + /// beginning of the name. + /// + public string RootPath + { + get + { + if (isDisposed) + { + throw new ObjectDisposedException("TarArchive"); + } + + return rootPath; + } + + set + { + if (isDisposed) + { + throw new ObjectDisposedException("TarArchive"); + } + + rootPath = value; + } + } + + /// + /// Get or set a value indicating if overrides defined by SetUserInfo should be applied. + /// + /// If overrides are not applied then the values as set in each header will be used. + public bool ApplyUserInfoOverrides + { + get + { + if (isDisposed) + { + throw new ObjectDisposedException("TarArchive"); + } + + return _applyUserInfoOverrides; + } + + set + { + if (isDisposed) + { + throw new ObjectDisposedException("TarArchive"); + } + + _applyUserInfoOverrides = value; + } + } + + /// + /// Get the archive user id. + /// See ApplyUserInfoOverrides for detail + /// on how to allow setting values on a per entry basis. + /// + /// + /// The current user id. + /// + public int UserId + { + get + { + if (isDisposed) + { + throw new ObjectDisposedException("TarArchive"); + } + + return _userId; + } + } + + /// + /// Get the archive user name. + /// See ApplyUserInfoOverrides for detail + /// on how to allow setting values on a per entry basis. + /// + /// + /// The current user name. + /// + public string UserName + { + get + { + if (isDisposed) + { + throw new ObjectDisposedException("TarArchive"); + } + + return _userName; + } + } + + /// + /// Get the archive group id. + /// See ApplyUserInfoOverrides for detail + /// on how to allow setting values on a per entry basis. + /// + /// + /// The current group id. + /// + public int GroupId + { + get + { + if (isDisposed) + { + throw new ObjectDisposedException("TarArchive"); + } + + return _groupId; + } + } + + /// + /// Get the archive group name. + /// See ApplyUserInfoOverrides for detail + /// on how to allow setting values on a per entry basis. + /// + /// + /// The current group name. + /// + public string GroupName + { + get + { + if (isDisposed) + { + throw new ObjectDisposedException("TarArchive"); + } + + return _groupName; + } + } + + /// + /// Get the archive's record size. Tar archives are composed of + /// a series of RECORDS each containing a number of BLOCKS. + /// This allowed tar archives to match the IO characteristics of + /// the physical device being used. Archives are expected + /// to be properly "blocked". + /// + /// + /// The record size this archive is using. + /// + public int RecordSize + { + get + { + if (isDisposed) + { + throw new ObjectDisposedException("TarArchive"); + } + + if (tarIn != null) + { + return tarIn.RecordSize; + } + if (tarOut != null) + { + return tarOut.RecordSize; + } + return TarBuffer.DefaultRecordSize; + } + } + + #region IDisposable Members + + void IDisposable.Dispose() + { + Close(); + } + + #endregion + + /// + /// Client hook allowing detailed information to be reported during processing + /// + public event ProgressMessageHandler ProgressMessageEvent; + + /// + /// Raises the ProgressMessage event + /// + /// The TarEntry for this event + /// message for this event. Null is no message + protected virtual void OnProgressMessageEvent(TarEntry entry, string message) + { + if (ProgressMessageEvent != null) + { + ProgressMessageEvent(this, entry, message); + } + } + + /// + /// Set the flag that determines whether existing files are + /// kept, or overwritten during extraction. + /// + /// + /// If true, do not overwrite existing files. + /// + public void SetKeepOldFiles(bool keepOldFiles) + { + if (isDisposed) + { + throw new ObjectDisposedException("TarArchive"); + } + _keepOldFiles = keepOldFiles; + } + + /// + /// Set the ascii file translation flag. + /// + /// + /// If true, translate ascii text files. + /// + [Obsolete("Use the AsciiTranslate property")] + public void SetAsciiTranslation(bool asciiTranslate) + { + if (isDisposed) + { + throw new ObjectDisposedException("TarArchive"); + } + + _asciiTranslate = asciiTranslate; + } + + /// + /// Set user and group information that will be used to fill in the + /// tar archive's entry headers. This information based on that available + /// for the linux operating system, which is not always available on other + /// operating systems. TarArchive allows the programmer to specify values + /// to be used in their place. + /// is set to true by this call. + /// + /// + /// The user id to use in the headers. + /// + /// + /// The user name to use in the headers. + /// + /// + /// The group id to use in the headers. + /// + /// + /// The group name to use in the headers. + /// + public void SetUserInfo(int userId, string userName, int groupId, string groupName) + { + if (isDisposed) + { + throw new ObjectDisposedException("TarArchive"); + } + + _userId = userId; + _userName = userName; + _groupId = groupId; + _groupName = groupName; + _applyUserInfoOverrides = true; + } + + /// + /// Close the archive. + /// + [Obsolete("Use Close instead")] + public void CloseArchive() + { + Close(); + } + + /// + /// Perform the "list" command for the archive contents. + /// + /// NOTE That this method uses the progress event to actually list + /// the contents. If the progress display event is not set, nothing will be listed! + /// + public void ListContents() + { + if (isDisposed) + { + throw new ObjectDisposedException("TarArchive"); + } + + while (true) + { + var entry = tarIn.GetNextEntry(); + + if (entry == null) + { + break; + } + OnProgressMessageEvent(entry, null); + } + } + + /// + /// Perform the "extract" command and extract the contents of the archive. + /// + /// + /// The destination directory into which to extract. + /// + public void ExtractContents(string destinationDirectory) + { + if (isDisposed) + { + throw new ObjectDisposedException("TarArchive"); + } + + while (true) + { + var entry = tarIn.GetNextEntry(); + + if (entry == null) + { + break; + } + + ExtractEntry(destinationDirectory, entry); + } + } + + /// + /// Extract an entry from the archive. This method assumes that the + /// tarIn stream has been properly set with a call to GetNextEntry(). + /// + /// + /// The destination directory into which to extract. + /// + /// + /// The TarEntry returned by tarIn.GetNextEntry(). + /// + private void ExtractEntry(string destDir, TarEntry entry) + { + OnProgressMessageEvent(entry, null); + + var name = entry.Name; + + if (Path.IsPathRooted(name)) + { + // NOTE: + // for UNC names... \\machine\share\zoom\beet.txt gives \zoom\beet.txt + name = name.Substring(Path.GetPathRoot(name).Length); + } + + name = name.Replace('/', Path.DirectorySeparatorChar); + + var destFile = Path.Combine(destDir, name); + + if (entry.IsDirectory) + { + EnsureDirectoryExists(destFile); + } + else + { + var parentDirectory = Path.GetDirectoryName(destFile); + EnsureDirectoryExists(parentDirectory); + + var process = true; + var fileInfo = new FileInfo(destFile); + if (fileInfo.Exists) + { + if (_keepOldFiles) + { + OnProgressMessageEvent(entry, "Destination file already exists"); + process = false; + } + else if ((fileInfo.Attributes & FileAttributes.ReadOnly) != 0) + { + OnProgressMessageEvent(entry, "Destination file already exists, and is read-only"); + process = false; + } + } + + if (process) + { + var asciiTrans = false; + + Stream outputStream = File.Create(destFile); + if (_asciiTranslate) + { + asciiTrans = !IsBinary(destFile); + } + + StreamWriter outw = null; + if (asciiTrans) + { + outw = new StreamWriter(outputStream); + } + + var rdbuf = new byte[32*1024]; + + while (true) + { + var numRead = tarIn.Read(rdbuf, 0, rdbuf.Length); + + if (numRead <= 0) + { + break; + } + + if (asciiTrans) + { + for (int off = 0, b = 0; b < numRead; ++b) + { + if (rdbuf[b] == 10) + { + var s = Encoding.UTF8.GetString(rdbuf, off, (b - off)); + outw.WriteLine(s); + off = b + 1; + } + } + } + else + { + outputStream.Write(rdbuf, 0, numRead); + } + } + + if (asciiTrans) + { + outw.Close(); + } + else + { + outputStream.Close(); + } + } + } + } + + /// + /// Write an entry to the archive. This method will call the putNextEntry + /// and then write the contents of the entry, and finally call closeEntry() + /// for entries that are files. For directories, it will call putNextEntry(), + /// and then, if the recurse flag is true, process each entry that is a + /// child of the directory. + /// + /// + /// The TarEntry representing the entry to write to the archive. + /// + /// + /// If true, process the children of directory entries. + /// + public void WriteEntry(TarEntry sourceEntry, bool recurse) + { + if (sourceEntry == null) + { + throw new ArgumentNullException("sourceEntry"); + } + + if (isDisposed) + { + throw new ObjectDisposedException("TarArchive"); + } + + try + { + if (recurse) + { + TarHeader.SetValueDefaults(sourceEntry.UserId, sourceEntry.UserName, + sourceEntry.GroupId, sourceEntry.GroupName); + } + InternalWriteEntry(sourceEntry, recurse); + } + finally + { + if (recurse) + { + TarHeader.RestoreSetValues(); + } + } + } + + /// + /// Write an entry to the archive. This method will call the putNextEntry + /// and then write the contents of the entry, and finally call closeEntry() + /// for entries that are files. For directories, it will call putNextEntry(), + /// and then, if the recurse flag is true, process each entry that is a + /// child of the directory. + /// + /// + /// The TarEntry representing the entry to write to the archive. + /// + /// + /// If true, process the children of directory entries. + /// + private void InternalWriteEntry(TarEntry sourceEntry, bool recurse) + { + string tempFileName = null; + var entryFilename = sourceEntry.File; + + var entry = (TarEntry) sourceEntry.Clone(); + + if (_applyUserInfoOverrides) + { + entry.GroupId = _groupId; + entry.GroupName = _groupName; + entry.UserId = _userId; + entry.UserName = _userName; + } + + OnProgressMessageEvent(entry, null); + + if (_asciiTranslate && !entry.IsDirectory) + { + var asciiTrans = !IsBinary(entryFilename); + + if (asciiTrans) + { + tempFileName = Path.GetTempFileName(); + + using (var inStream = File.OpenText(entryFilename)) + { + using (Stream outStream = File.Create(tempFileName)) + { + while (true) + { + var line = inStream.ReadLine(); + if (line == null) + { + break; + } + var data = Encoding.UTF8.GetBytes(line); + outStream.Write(data, 0, data.Length); + outStream.WriteByte((byte) '\n'); + } + + outStream.Flush(); + } + } + + entry.Size = new FileInfo(tempFileName).Length; + entryFilename = tempFileName; + } + } + + string newName = null; + + if (rootPath != null) + { + if (entry.Name.StartsWith(rootPath)) + { + newName = entry.Name.Substring(rootPath.Length + 1); + } + } + + if (pathPrefix != null) + { + newName = (newName == null) ? string.Format("{0}/{1}", pathPrefix, entry.Name) : pathPrefix + "/" + newName; + } + + if (newName != null) + { + entry.Name = newName; + } + + tarOut.PutNextEntry(entry); + + if (entry.IsDirectory) + { + if (recurse) + { + var list = entry.GetDirectoryEntries(); + for (var i = 0; i < list.Length; ++i) + { + InternalWriteEntry(list[i], recurse); + } + } + } + else + { + using (Stream inputStream = File.OpenRead(entryFilename)) + { + var localBuffer = new byte[32*1024]; + while (true) + { + var numRead = inputStream.Read(localBuffer, 0, localBuffer.Length); + + if (numRead <= 0) + { + break; + } + + tarOut.Write(localBuffer, 0, numRead); + } + } + + if (!string.IsNullOrEmpty(tempFileName)) + { + File.Delete(tempFileName); + } + + tarOut.CloseEntry(); + } + } + + /// + /// Releases the unmanaged resources used by the FileStream and optionally releases the managed resources. + /// + /// true to release both managed and unmanaged resources; + /// false to release only unmanaged resources. + protected virtual void Dispose(bool disposing) + { + if (!isDisposed) + { + isDisposed = true; + if (disposing) + { + if (tarOut != null) + { + tarOut.Flush(); + tarOut.Close(); + } + + if (tarIn != null) + { + tarIn.Close(); + } + } + } + } + + /// + /// Closes the archive and releases any associated resources. + /// + public virtual void Close() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// Ensures that resources are freed and other cleanup operations are performed + /// when the garbage collector reclaims the . + /// + ~TarArchive() + { + Dispose(false); + } + + private static void EnsureDirectoryExists(string directoryName) + { + if (!Directory.Exists(directoryName)) + { + try + { + Directory.CreateDirectory(directoryName); + } + catch (Exception e) + { + throw new TarException("Exception creating directory '" + directoryName + "', " + e.Message, e); + } + } + } + + // TODO: TarArchive - Is there a better way to test for a text file? + // It no longer reads entire files into memory but is still a weak test! + // This assumes that byte values 0-7, 14-31 or 255 are binary + // and that all non text files contain one of these values + private static bool IsBinary(string filename) + { + using (var fs = File.OpenRead(filename)) + { + var sampleSize = Math.Min(4096, (int) fs.Length); + var content = new byte[sampleSize]; + + var bytesRead = fs.Read(content, 0, sampleSize); + + for (var i = 0; i < bytesRead; ++i) + { + var b = content[i]; + if ((b < 8) || ((b > 13) && (b < 32)) || (b == 255)) + { + return true; + } + } + } + return false; + } + + #region Instance Fields + + private readonly TarInputStream tarIn; + private readonly TarOutputStream tarOut; + private bool _applyUserInfoOverrides; + private bool _asciiTranslate; + + private int _groupId; + private string _groupName = string.Empty; + + private bool isDisposed; + private bool _keepOldFiles; + private string pathPrefix; + private string rootPath; + private int _userId; + private string _userName = string.Empty; + + #endregion + + #region Constructors + + /// + /// Constructor for a default . + /// + protected TarArchive() + { + } + + /// + /// Initalise a TarArchive for input. + /// + /// The to use for input. + protected TarArchive(TarInputStream stream) + { + if (stream == null) + { + throw new ArgumentNullException("stream"); + } + + tarIn = stream; + } + + /// + /// Initialise a TarArchive for output. + /// + /// The to use for output. + protected TarArchive(TarOutputStream stream) + { + if (stream == null) + { + throw new ArgumentNullException("stream"); + } + + tarOut = stream; + } + + #endregion + + #region Static factory methods + + /// + /// The InputStream based constructors create a TarArchive for the + /// purposes of extracting or listing a tar archive. Thus, use + /// these constructors when you wish to extract files from or list + /// the contents of an existing tar archive. + /// + /// The stream to retrieve archive data from. + /// Returns a new suitable for reading from. + public static TarArchive CreateInputTarArchive(Stream inputStream) + { + if (inputStream == null) + { + throw new ArgumentNullException("inputStream"); + } + + return CreateInputTarArchive(inputStream, TarBuffer.DefaultBlockFactor); + } + + /// + /// Create TarArchive for reading setting block factor + /// + /// Stream for tar archive contents + /// The blocking factor to apply + /// Returns a suitable for reading. + public static TarArchive CreateInputTarArchive(Stream inputStream, int blockFactor) + { + if (inputStream == null) + { + throw new ArgumentNullException("inputStream"); + } + + return new TarArchive(new TarInputStream(inputStream, blockFactor)); + } + + /// + /// Create a TarArchive for writing to, using the default blocking factor + /// + /// The to write to + /// Returns a suitable for writing. + public static TarArchive CreateOutputTarArchive(Stream outputStream) + { + if (outputStream == null) + { + throw new ArgumentNullException("outputStream"); + } + + return CreateOutputTarArchive(outputStream, TarBuffer.DefaultBlockFactor); + } + + /// + /// Create a TarArchive for writing to + /// + /// The stream to write to + /// The blocking factor to use for buffering. + /// Returns a suitable for writing. + public static TarArchive CreateOutputTarArchive(Stream outputStream, int blockFactor) + { + if (outputStream == null) + { + throw new ArgumentNullException("outputStream"); + } + + return new TarArchive(new TarOutputStream(outputStream, blockFactor)); + } + + #endregion + } +} + +/* The original Java file had this header: + ** Authored by Timothy Gerard Endres + ** + ** + ** This work has been placed into the public domain. + ** You may use this work in any way and for any purpose you wish. + ** + ** THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND, + ** NOT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY. THE AUTHOR + ** OF THIS SOFTWARE, ASSUMES _NO_ RESPONSIBILITY FOR ANY + ** CONSEQUENCE RESULTING FROM THE USE, MODIFICATION, OR + ** REDISTRIBUTION OF THIS SOFTWARE. + ** + */ \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Tar/TarBuffer.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Tar/TarBuffer.cs new file mode 100644 index 0000000..888cccf --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Tar/TarBuffer.cs @@ -0,0 +1,595 @@ +// TarBuffer.cs +// Copyright (C) 2001 Mike Krueger +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using System.IO; + +namespace ICSharpCode.SharpZipLib.Silverlight.Tar +{ + /// + /// The TarBuffer class implements the tar archive concept + /// of a buffered input stream. This concept goes back to the + /// days of blocked tape drives and special io devices. In the + /// C# universe, the only real function that this class + /// performs is to ensure that files have the correct "record" + /// size, or other tars will complain. + ///

    + /// You should never have a need to access this class directly. + /// TarBuffers are created by Tar IO Streams. + ///

    + ///
    + public class TarBuffer + { + #region Constants + + /// + /// The size of a block in a tar archive in bytes. + /// + /// This is 512 bytes. + public const int BlockSize = 512; + + /// + /// The number of blocks in a default record. + /// + /// + /// The default value is 20 blocks per record. + /// + public const int DefaultBlockFactor = 20; + + /// + /// The size in bytes of a default record. + /// + /// + /// The default size is 10KB. + /// + public const int DefaultRecordSize = BlockSize*DefaultBlockFactor; + + #endregion + +/* A quote from GNU tar man file on blocking and records + A `tar' archive file contains a series of blocks. Each block +contains `BLOCKSIZE' bytes. Although this format may be thought of as +being on magnetic tape, other media are often used. + + Each file archived is represented by a header block which describes +the file, followed by zero or more blocks which give the contents of +the file. At the end of the archive file there may be a block filled +with binary zeros as an end-of-file marker. A reasonable system should +write a block of zeros at the end, but must not assume that such a +block exists when reading an archive. + + The blocks may be "blocked" for physical I/O operations. Each +record of N blocks is written with a single 'write ()' +operation. On magnetic tapes, the result of such a write is a single +record. When writing an archive, the last record of blocks should be +written at the full size, with blocks after the zero block containing +all zeros. When reading an archive, a reasonable system should +properly handle an archive whose last record is shorter than the rest, +or which contains garbage records after a zero block. +*/ + + /// + /// Construct a default TarBuffer + /// + protected TarBuffer() + { + } + + /// + /// Get the record size for this buffer + /// + /// The record size in bytes. + /// This is equal to the multiplied by the + public int RecordSize + { + get { return recordSize; } + } + + /// + /// Get the Blocking factor for the buffer + /// + /// This is the number of block in each record. + public int BlockFactor + { + get { return _blockFactor; } + } + + /// + /// Get the current block number, within the current record, zero based. + /// + public int CurrentBlock + { + get { return currentBlockIndex; } + } + + /// + /// Get the current record number. + /// + /// + /// The current zero based record number. + /// + public int CurrentRecord + { + get { return currentRecordIndex; } + } + + /// + /// Get the TAR Buffer's record size. + /// + /// The record size in bytes. + /// This is equal to the multiplied by the + [Obsolete("Use RecordSize property instead")] + public int GetRecordSize() + { + return recordSize; + } + + /// + /// Get the TAR Buffer's block factor + /// + /// The block factor; the number of blocks per record. + [Obsolete("Use BlockFactor property instead")] + public int GetBlockFactor() + { + return _blockFactor; + } + + /// + /// Create TarBuffer for reading with default BlockFactor + /// + /// Stream to buffer + /// A new suitable for input. + public static TarBuffer CreateInputTarBuffer(Stream inputStream) + { + if (inputStream == null) + { + throw new ArgumentNullException("inputStream"); + } + + return CreateInputTarBuffer(inputStream, DefaultBlockFactor); + } + + /// + /// Construct TarBuffer for reading inputStream setting BlockFactor + /// + /// Stream to buffer + /// Blocking factor to apply + /// A new suitable for input. + public static TarBuffer CreateInputTarBuffer(Stream inputStream, int blockFactor) + { + if (inputStream == null) + { + throw new ArgumentNullException("inputStream"); + } + + if (blockFactor <= 0) + { + throw new ArgumentOutOfRangeException("blockFactor", "Factor cannot be negative"); + } + + var tarBuffer = new TarBuffer{inputStream = inputStream, outputStream = null}; + tarBuffer.Initialize(blockFactor); + + return tarBuffer; + } + + /// + /// Construct TarBuffer for writing with default BlockFactor + /// + /// output stream for buffer + /// A new suitable for output. + public static TarBuffer CreateOutputTarBuffer(Stream outputStream) + { + if (outputStream == null) + { + throw new ArgumentNullException("outputStream"); + } + + return CreateOutputTarBuffer(outputStream, DefaultBlockFactor); + } + + /// + /// Construct TarBuffer for writing Tar output to streams. + /// + /// Output stream to write to. + /// Blocking factor to apply + /// A new suitable for output. + public static TarBuffer CreateOutputTarBuffer(Stream outputStream, int blockFactor) + { + if (outputStream == null) + { + throw new ArgumentNullException("outputStream"); + } + + if (blockFactor <= 0) + { + throw new ArgumentOutOfRangeException("blockFactor", "Factor cannot be negative"); + } + + var tarBuffer = new TarBuffer{inputStream = null, outputStream = outputStream}; + tarBuffer.Initialize(blockFactor); + + return tarBuffer; + } + + /// + /// Initialization common to all constructors. + /// + private void Initialize(int blockFactor) + { + _blockFactor = blockFactor; + recordSize = blockFactor*BlockSize; + recordBuffer = new byte[RecordSize]; + + if (inputStream != null) + { + currentRecordIndex = -1; + currentBlockIndex = BlockFactor; + } + else + { + currentRecordIndex = 0; + currentBlockIndex = 0; + } + } + + // TODO: IsEOFBlock could/should be static but this is a breaking change. + + /// + /// Determine if an archive block indicates End of Archive. End of + /// archive is indicated by a block that consists entirely of null bytes. + /// All remaining blocks for the record should also be null's + /// However some older tars only do a couple of null blocks (Old GNU tar for one) + /// and also partial records + /// + /// The data block to check. + /// Returns true if the block is an EOF block; false otherwise. + public bool IsEOFBlock(byte[] block) + { + if (block == null) + { + throw new ArgumentNullException("block"); + } + + if (block.Length != BlockSize) + { + throw new ArgumentException("block length is invalid"); + } + + for (var i = 0; i < BlockSize; ++i) + { + if (block[i] != 0) + { + return false; + } + } + + return true; + } + + /// + /// Skip over a block on the input stream. + /// + public void SkipBlock() + { + if (inputStream == null) + { + throw new TarException("no input stream defined"); + } + + if (currentBlockIndex >= BlockFactor) + { + if (!ReadRecord()) + { + throw new TarException("Failed to read a record"); + } + } + + currentBlockIndex++; + } + + /// + /// Read a block from the input stream. + /// + /// + /// The block of data read. + /// + public byte[] ReadBlock() + { + if (inputStream == null) + { + throw new TarException("TarBuffer.ReadBlock - no input stream defined"); + } + + if (currentBlockIndex >= BlockFactor) + { + if (!ReadRecord()) + { + throw new TarException("Failed to read a record"); + } + } + + var result = new byte[BlockSize]; + + Array.Copy(recordBuffer, (currentBlockIndex*BlockSize), result, 0, BlockSize); + currentBlockIndex++; + return result; + } + + /// + /// Read a record from data stream. + /// + /// + /// false if End-Of-File, else true. + /// + private bool ReadRecord() + { + if (inputStream == null) + { + throw new TarException("no input stream stream defined"); + } + + currentBlockIndex = 0; + + var offset = 0; + var bytesNeeded = RecordSize; + + while (bytesNeeded > 0) + { + long numBytes = inputStream.Read(recordBuffer, offset, bytesNeeded); + + // + // NOTE + // We have found EOF, and the record is not full! + // + // This is a broken archive. It does not follow the standard + // blocking algorithm. However, because we are generous, and + // it requires little effort, we will simply ignore the error + // and continue as if the entire record were read. This does + // not appear to break anything upstream. We used to return + // false in this case. + // + // Thanks to 'Yohann.Roussel@alcatel.fr' for this fix. + // + if (numBytes <= 0) + { + break; + } + + offset += (int) numBytes; + bytesNeeded -= (int) numBytes; + } + + currentRecordIndex++; + return true; + } + + /// + /// Get the current block number, within the current record, zero based. + /// + /// + /// The current zero based block number. + /// + /// + /// The absolute block number = (record number * block factor) + block number. + /// + [Obsolete("Use CurrentBlock property instead")] + public int GetCurrentBlockNum() + { + return currentBlockIndex; + } + + /// + /// Get the current record number. + /// + /// + /// The current zero based record number. + /// + [Obsolete("Use CurrentRecord property instead")] + public int GetCurrentRecordNum() + { + return currentRecordIndex; + } + + /// + /// Write a block of data to the archive. + /// + /// + /// The data to write to the archive. + /// + public void WriteBlock(byte[] block) + { + if (block == null) + { + throw new ArgumentNullException("block"); + } + + if (outputStream == null) + { + throw new TarException("TarBuffer.WriteBlock - no output stream defined"); + } + + if (block.Length != BlockSize) + { + var errorText = + string.Format( + "TarBuffer.WriteBlock - block to write has length '{0}' which is not the block size of '{1}'", + block.Length, BlockSize); + throw new TarException(errorText); + } + + if (currentBlockIndex >= BlockFactor) + { + WriteRecord(); + } + + Array.Copy(block, 0, recordBuffer, (currentBlockIndex*BlockSize), BlockSize); + currentBlockIndex++; + } + + /// + /// Write an archive record to the archive, where the record may be + /// inside of a larger array buffer. The buffer must be "offset plus + /// record size" long. + /// + /// + /// The buffer containing the record data to write. + /// + /// + /// The offset of the record data within buffer. + /// + public void WriteBlock(byte[] buffer, int offset) + { + if (buffer == null) + { + throw new ArgumentNullException("buffer"); + } + + if (outputStream == null) + { + throw new TarException("TarBuffer.WriteBlock - no output stream stream defined"); + } + + if ((offset < 0) || (offset >= buffer.Length)) + { + throw new ArgumentOutOfRangeException("offset"); + } + + if ((offset + BlockSize) > buffer.Length) + { + var errorText = + string.Format( + "TarBuffer.WriteBlock - record has length '{0}' with offset '{1}' which is less than the record size of '{2}'", + buffer.Length, offset, recordSize); + throw new TarException(errorText); + } + + if (currentBlockIndex >= BlockFactor) + { + WriteRecord(); + } + + Array.Copy(buffer, offset, recordBuffer, (currentBlockIndex*BlockSize), BlockSize); + + currentBlockIndex++; + } + + /// + /// Write a TarBuffer record to the archive. + /// + private void WriteRecord() + { + if (outputStream == null) + { + throw new TarException("TarBuffer.WriteRecord no output stream defined"); + } + + outputStream.Write(recordBuffer, 0, RecordSize); + outputStream.Flush(); + + currentBlockIndex = 0; + currentRecordIndex++; + } + + /// + /// Flush the current record if it has any data in it. + /// + private void Flush() + { + if (outputStream == null) + { + throw new TarException("TarBuffer.Flush no output stream defined"); + } + + if (currentBlockIndex > 0) + { + var dataBytes = currentBlockIndex*BlockSize; + Array.Clear(recordBuffer, dataBytes, RecordSize - dataBytes); + WriteRecord(); + } + + outputStream.Flush(); + } + + /// + /// Close the TarBuffer. If this is an output buffer, also flush the + /// current block before closing. + /// + public void Close() + { + if (outputStream != null) + { + Flush(); + + outputStream.Close(); + outputStream = null; + } + else if (inputStream != null) + { + inputStream.Close(); + inputStream = null; + } + } + + #region Instance Fields + + private int _blockFactor = DefaultBlockFactor; + private int currentBlockIndex; + private int currentRecordIndex; + private Stream inputStream; + private Stream outputStream; + + private byte[] recordBuffer; + + private int recordSize = DefaultRecordSize; + + #endregion + } +} + +/* The original Java file had this header: + * + ** Authored by Timothy Gerard Endres + ** + ** + ** This work has been placed into the public domain. + ** You may use this work in any way and for any purpose you wish. + ** + ** THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND, + ** NOT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY. THE AUTHOR + ** OF THIS SOFTWARE, ASSUMES _NO_ RESPONSIBILITY FOR ANY + ** CONSEQUENCE RESULTING FROM THE USE, MODIFICATION, OR + ** REDISTRIBUTION OF THIS SOFTWARE. + ** + */ \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Tar/TarEntry.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Tar/TarEntry.cs new file mode 100644 index 0000000..c59597d --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Tar/TarEntry.cs @@ -0,0 +1,549 @@ +// TarEntry.cs +// +// Copyright (C) 2001 Mike Krueger +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using System.IO; +using System.Linq; + +namespace ICSharpCode.SharpZipLib.Silverlight.Tar +{ + /// + /// This class represents an entry in a Tar archive. It consists + /// of the entry's _header, as well as the entry's File. Entries + /// can be instantiated in one of three ways, depending on how + /// they are to be used. + ///

    + /// TarEntries that are created from the _header bytes read from + /// an archive are instantiated with the TarEntry( byte[] ) + /// constructor. These entries will be used when extracting from + /// or listing the contents of an archive. These entries have their + /// _header filled in using the _header bytes. They also set the File + /// to null, since they reference an archive entry not a _file.

    + ///

    + /// TarEntries that are created from files that are to be written + /// into an archive are instantiated with the CreateEntryFromFile(string) + /// pseudo constructor. These entries have their _header filled in using + /// the File's information. They also keep a reference to the File + /// for convenience when writing entries.

    + ///

    + /// Finally, TarEntries can be constructed from nothing but a name. + /// This allows the programmer to construct the entry by hand, for + /// instance when only an InputStream is available for writing to + /// the archive, and the _header information is constructed from + /// other information. In this case the _header fields are set to + /// defaults and the File is set to null.

    + /// + ///
    + public class TarEntry + { + #region Constructors + + /// + /// Initialise a default instance of . + /// + private TarEntry() + { + _header = new TarHeader(); + } + + /// + /// Construct an entry from an archive's _header bytes. File is set + /// to null. + /// + /// + /// The _header bytes from a tar archive entry. + /// + public TarEntry(byte[] headerBuffer) + { + _header = new TarHeader(); + _header.ParseBuffer(headerBuffer); + } + + /// + /// Construct a TarEntry using the _header provided + /// + /// Header details for entry + public TarEntry(TarHeader header) + { + if (header == null) + { + throw new ArgumentNullException("header"); + } + + _header = (TarHeader) header.Clone(); + } + + #endregion + + /// + /// Get this entry's _header. + /// + /// + /// This entry's TarHeader. + /// + public TarHeader TarHeader + { + get { return _header; } + } + + /// + /// Get/Set this entry's name. + /// + public string Name + { + get { return _header.Name; } + set { _header.Name = value; } + } + + /// + /// Get/set this entry's user id. + /// + public int UserId + { + get { return _header.UserId; } + set { _header.UserId = value; } + } + + /// + /// Get/set this entry's group id. + /// + public int GroupId + { + get { return _header.GroupId; } + set { _header.GroupId = value; } + } + + /// + /// Get/set this entry's user name. + /// + public string UserName + { + get { return _header.UserName; } + set { _header.UserName = value; } + } + + /// + /// Get/set this entry's group name. + /// + public string GroupName + { + get { return _header.GroupName; } + set { _header.GroupName = value; } + } + + /// + /// Get/Set the modification time for this entry + /// + public DateTime ModTime + { + get { return _header.ModTime; } + set { _header.ModTime = value; } + } + + /// + /// Get this entry's _file. + /// + /// + /// This entry's _file. + /// + public string File + { + get { return _file; } + } + + /// + /// Get/set this entry's recorded _file size. + /// + public long Size + { + get { return _header.Size; } + set { _header.Size = value; } + } + + /// + /// Return true if this entry represents a directory, false otherwise + /// + /// + /// True if this entry is a directory. + /// + public bool IsDirectory + { + get + { + if (_file != null) + { + return Directory.Exists(_file); + } + + if (_header != null) + { + if ((_header.TypeFlag == TarHeader.LF_DIR) || Name.EndsWith("/")) + { + return true; + } + } + return false; + } + } + + /// + /// Clone this tar entry. + /// + /// Returns a clone of this entry. + public object Clone() + { + var entry = new TarEntry{_file = _file, _header = ((TarHeader) _header.Clone()), Name = Name}; + return entry; + } + + /// + /// Construct an entry with only a name. + /// This allows the programmer to construct the entry's _header "by hand". + /// + /// The name to use for the entry + /// Returns the newly created + public static TarEntry CreateTarEntry(string name) + { + var entry = new TarEntry(); + NameTarHeader(entry._header, name); + return entry; + } + + /// + /// Construct an entry for a _file. File is set to _file, and the + /// _header is constructed from information from the _file. + /// + /// The _file name that the entry represents. + /// Returns the newly created + public static TarEntry CreateEntryFromFile(string fileName) + { + var entry = new TarEntry(); + entry.GetFileTarHeader(entry._header, fileName); + return entry; + } + + /// + /// Determine if the two entries are equal. Equality is determined + /// by the _header names being equal. + /// + /// The to compare with the current Object. + /// + /// True if the entries are equal; false if not. + /// + public override bool Equals(object obj) + { + var localEntry = obj as TarEntry; + + if (localEntry != null) + { + return Name.Equals(localEntry.Name); + } + return false; + } + + /// + /// Derive a Hash value for the current + /// + /// A Hash code for the current + public override int GetHashCode() + { + return Name.GetHashCode(); + } + + /// + /// Determine if the given entry is a descendant of this entry. + /// Descendancy is determined by the name of the descendant + /// starting with this entry's name. + /// + /// + /// Entry to be checked as a descendent of this. + /// + /// + /// True if entry is a descendant of this. + /// + public bool IsDescendent(TarEntry toTest) + { + if (toTest == null) + { + throw new ArgumentNullException("toTest"); + } + + return toTest.Name.StartsWith(Name); + } + + /// + /// Convenience method to set this entry's group and user ids. + /// + /// + /// This entry's new user id. + /// + /// + /// This entry's new group id. + /// + public void SetIds(int userId, int groupId) + { + UserId = userId; + GroupId = groupId; + } + + /// + /// Convenience method to set this entry's group and user names. + /// + /// + /// This entry's new user name. + /// + /// + /// This entry's new group name. + /// + public void SetNames(string userName, string groupName) + { + UserName = userName; + GroupName = groupName; + } + + /// + /// Fill in a TarHeader with information from a File. + /// + /// + /// The TarHeader to fill in. + /// + /// + /// The _file from which to get the _header information. + /// + public void GetFileTarHeader(TarHeader header, string file) + { + if (header == null) + { + throw new ArgumentNullException("header"); + } + + if (file == null) + { + throw new ArgumentNullException("file"); + } + + _file = file; + + // bugfix from torhovl from #D forum: + var name = file; + + // 23-Jan-2004 GnuTar allows device names in path where the name is not local to the current directory + if (name.IndexOf(Environment.CurrentDirectory) == 0) + { + name = name.Substring(Environment.CurrentDirectory.Length); + } +/* + if (Path.DirectorySeparatorChar == '\\') + { + // check if the OS is Windows + // Strip off drive letters! + if (name.Length > 2) + { + char ch1 = name[0]; + char ch2 = name[1]; + + if (ch2 == ':' && Char.IsLetter(ch1)) + { + name = name.Substring(2); + } + } + } +*/ + + name = name.Replace(Path.DirectorySeparatorChar, '/'); + + // No absolute pathnames + // Windows (and Posix?) paths can start with UNC style "\\NetworkDrive\", + // so we loop on starting /'s. + while (name.StartsWith("/")) + { + name = name.Substring(1); + } + + header.LinkName = String.Empty; + header.Name = name; + + if (Directory.Exists(file)) + { + header.Mode = 1003; // Magic number for security access for a UNIX filesystem + header.TypeFlag = TarHeader.LF_DIR; + if ((header.Name.Length == 0) || header.Name[header.Name.Length - 1] != '/') + { + header.Name = header.Name + "/"; + } + + header.Size = 0; + } + else + { + header.Mode = 33216; // Magic number for security access for a UNIX filesystem + header.TypeFlag = TarHeader.LF_NORMAL; + header.Size = new FileInfo(file.Replace('/', Path.DirectorySeparatorChar)).Length; + } + + header.ModTime = + System.IO.File.GetLastWriteTime(file.Replace('/', Path.DirectorySeparatorChar)).ToUniversalTime(); + header.DevMajor = 0; + header.DevMinor = 0; + } + + /// + /// Get entries for all files present in this entries directory. + /// If this entry doesnt represent a directory zero entries are returned. + /// + /// + /// An array of TarEntry's for this entry's children. + /// + public TarEntry[] GetDirectoryEntries() + { + if ((_file == null) || !Directory.Exists(_file)) + { + return new TarEntry[0]; + } + +#if !SL4 + var list = Directory.GetFileSystemEntries(_file); +#else + var list = Directory.EnumerateFileSystemEntries(_file).ToArray(); +#endif + var result = new TarEntry[list.Length]; + + for (var i = 0; i < list.Length; ++i) + { + result[i] = CreateEntryFromFile(list[i]); + } + + return result; + } + + /// + /// Write an entry's _header information to a _header buffer. + /// + /// + /// The tar entry _header buffer to fill in. + /// + public void WriteEntryHeader(byte[] outBuffer) + { + _header.WriteHeader(outBuffer); + } + + /// + /// Convenience method that will modify an entry's name directly + /// in place in an entry _header buffer byte array. + /// + /// + /// The buffer containing the entry _header to modify. + /// + /// + /// The new name to place into the _header buffer. + /// + public static void AdjustEntryName(byte[] buffer, string newName) + { + var offset = 0; + TarHeader.GetNameBytes(newName, buffer, offset, TarHeader.NAMELEN); + } + + /// + /// Fill in a TarHeader given only the entry's name. + /// + /// + /// The TarHeader to fill in. + /// + /// + /// The tar entry name. + /// + public static void NameTarHeader(TarHeader header, string name) + { + if (header == null) + { + throw new ArgumentNullException("header"); + } + + if (name == null) + { + throw new ArgumentNullException("name"); + } + + var isDir = name.EndsWith("/"); + + header.Name = name; + header.Mode = isDir ? 1003 : 33216; + header.UserId = 0; + header.GroupId = 0; + header.Size = 0; + + header.ModTime = DateTime.UtcNow; + + header.TypeFlag = isDir ? TarHeader.LF_DIR : TarHeader.LF_NORMAL; + + header.LinkName = String.Empty; + header.UserName = String.Empty; + header.GroupName = String.Empty; + + header.DevMajor = 0; + header.DevMinor = 0; + } + + #region Instance Fields + + /// + /// The name of the _file this entry represents or null if the entry is not based on a _file. + /// + private string _file; + + /// + /// The entry's _header information. + /// + private TarHeader _header; + + #endregion + } +} + +/* The original Java file had this header: + * + ** Authored by Timothy Gerard Endres + ** + ** + ** This work has been placed into the public domain. + ** You may use this work in any way and for any purpose you wish. + ** + ** THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND, + ** NOT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY. THE AUTHOR + ** OF THIS SOFTWARE, ASSUMES _NO_ RESPONSIBILITY FOR ANY + ** CONSEQUENCE RESULTING FROM THE USE, MODIFICATION, OR + ** REDISTRIBUTION OF THIS SOFTWARE. + ** + */ \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Tar/TarException.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Tar/TarException.cs new file mode 100644 index 0000000..6bffabd --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Tar/TarException.cs @@ -0,0 +1,85 @@ +// TarException.cs +// +// Copyright 2004 John Reilly +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using ICSharpCode.SharpZipLib.Silverlight.Serialization; + +namespace ICSharpCode.SharpZipLib.Silverlight.Tar +{ + /// + /// TarExceptions are used for exceptions specific to tar classes and code. + /// + [Serializable] + public class TarException : SharpZipBaseException + { + /// + /// Deserialization constructor + /// + /// for this constructor + protected TarException(SerializationInfo info) + : base(info) + { + + } + + /// + /// Initialises a new instance of the TarException class. + /// + public TarException() + { + + } + + /// + /// Initialises a new instance of the TarException class with a specified message. + /// + /// The message that describes the error. + public TarException(string message) + : base(message) + { + + } + + /// + /// + /// + /// A message describing the error. + /// The exception that is the cause of the current exception. + public TarException(string message, Exception exception) + : base(message, exception) + { + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Tar/TarHeader.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Tar/TarHeader.cs new file mode 100644 index 0000000..e32ef15 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Tar/TarHeader.cs @@ -0,0 +1,1130 @@ +// TarHeader.cs +// +// Copyright (C) 2001 Mike Krueger +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + + +/* The tar format and its POSIX successor PAX have a long history which makes for compatability + issues when creating and reading files. + + This is further complicated by a large number of programs with variations on formats + One common issue is the handling of names longer than 100 characters. + GNU style long names are currently supported. + +This is the ustar (Posix 1003.1) header. + +struct header +{ + char t_name[100]; // 0 Filename + char t_mode[8]; // 100 Permissions + char t_uid[8]; // 108 Numerical User ID + char t_gid[8]; // 116 Numerical Group ID + char t_size[12]; // 124 Filesize + char t_mtime[12]; // 136 st_mtime + char t_chksum[8]; // 148 Checksum + char t_typeflag; // 156 Type of File + char t_linkname[100]; // 157 Target of Links + char t_magic[6]; // 257 "ustar" or other... + char t_version[2]; // 263 Version fixed to 00 + char t_uname[32]; // 265 User Name + char t_gname[32]; // 297 Group Name + char t_devmajor[8]; // 329 Major for devices + char t_devminor[8]; // 337 Minor for devices + char t_prefix[155]; // 345 Prefix for t_name + char t_mfill[12]; // 500 Filler up to 512 +}; + +*/ + +using System; +using System.Text; + +namespace ICSharpCode.SharpZipLib.Silverlight.Tar +{ + /// + /// This class encapsulates the Tar Entry Header used in Tar Archives. + /// The class also holds a number of tar constants, used mostly in headers. + /// + public class TarHeader + { + #region Constants + + /// + /// The length of the checksum field in a header buffer. + /// + public const int CHKSUMLEN = 8; + + /// + /// Offset of checksum in a header buffer. + /// + public const int CHKSUMOFS = 148; + + /// + /// The length of the devices field in a header buffer. + /// + public const int DEVLEN = 8; + + /// + /// The length of the group id field in a header buffer. + /// + public const int GIDLEN = 8; + + /// + /// The length of the group name field in a header buffer. + /// + public const int GNAMELEN = 32; + + /// + /// The magic tag representing an old GNU tar archive where version is included in magic and overwrites it + /// + public const string GNU_TMAGIC = "ustar "; + + /// + /// Solaris access control list file type + /// + public const byte LF_ACL = (byte) 'A'; + + // + // LF_ constants represent the "type" of an entry + // + + /// + /// Block device file type. + /// + public const byte LF_BLK = (byte) '4'; + + /// + /// Character device file type. + /// + public const byte LF_CHR = (byte) '3'; + + /// + /// Contiguous file type. + /// + public const byte LF_CONTIG = (byte) '7'; + + /// + /// Directory file type. + /// + public const byte LF_DIR = (byte) '5'; + + /// + /// Solaris Extended Attribute File + /// + public const byte LF_EXTATTR = (byte) 'E'; + + /// + /// FIFO (pipe) file type. + /// + public const byte LF_FIFO = (byte) '6'; + + /// + /// Posix.1 2001 global extended header + /// + public const byte LF_GHDR = (byte) 'g'; + + /// + /// GNU dir dump file type + /// This is a dir entry that contains the names of files that were in the + /// dir at the time the dump was made + /// + public const byte LF_GNU_DUMPDIR = (byte) 'D'; + + /// + /// Identifies the next file on the tape as having a long link name + /// + public const byte LF_GNU_LONGLINK = (byte) 'K'; + + /// + /// Identifies the next file on the tape as having a long name + /// + public const byte LF_GNU_LONGNAME = (byte) 'L'; + + /// + /// Continuation of a file that began on another volume + /// + public const byte LF_GNU_MULTIVOL = (byte) 'M'; + + /// + /// For storing filenames that dont fit in the main header (old GNU) + /// + public const byte LF_GNU_NAMES = (byte) 'N'; + + /// + /// GNU Sparse file + /// + public const byte LF_GNU_SPARSE = (byte) 'S'; + + /// + /// GNU Tape/volume header ignore on extraction + /// + public const byte LF_GNU_VOLHDR = (byte) 'V'; + + /// + /// Link file type. + /// + public const byte LF_LINK = (byte) '1'; + + /// + /// Inode (metadata only) no file content + /// + public const byte LF_META = (byte) 'I'; + + /// + /// Normal file type. + /// + public const byte LF_NORMAL = (byte) '0'; + + /// + /// The "old way" of indicating a normal file. + /// + public const byte LF_OLDNORM = 0; + + /// + /// Symbolic link file type. + /// + public const byte LF_SYMLINK = (byte) '2'; + + /// + /// Posix.1 2001 extended header + /// + public const byte LF_XHDR = (byte) 'x'; + + /// + /// The length of the magic field in a header buffer. + /// + public const int MAGICLEN = 6; + + /// + /// The length of the mode field in a header buffer. + /// + public const int MODELEN = 8; + + /// + /// The length of the modification time field in a header buffer. + /// + public const int MODTIMELEN = 12; + + /// + /// The length of the name field in a header buffer. + /// + public const int NAMELEN = 100; + + /// + /// The length of the size field in a header buffer. + /// + public const int SIZELEN = 12; + + private const long timeConversionFactor = 10000000L; // 1 tick == 100 nanoseconds + + /// + /// The magic tag representing a POSIX tar archive. (includes trailing NULL) + /// + public const string TMAGIC = "ustar "; + + /// + /// The length of the user id field in a header buffer. + /// + public const int UIDLEN = 8; + + /// + /// The length of the user name field in a header buffer. + /// + public const int UNAMELEN = 32; + + /// + /// The length of the version field in a header buffer. + /// + public const int VERSIONLEN = 2; + + private static readonly DateTime dateTime1970 = new DateTime(1970, 1, 1, 0, 0, 0, 0); + + #endregion + + #region Constructors + + /// + /// Initialise a default TarHeader instance + /// + public TarHeader() + { + Magic = TMAGIC; + Version = " "; + + Name = ""; + LinkName = ""; + + UserId = defaultUserId; + GroupId = defaultGroupId; + UserName = defaultUser; + GroupName = defaultGroupName; + Size = 0; + } + + #endregion + + #region Properties + + /// + /// Get/set the name for this tar entry. + /// + /// Thrown when attempting to set the property to null. + public string Name + { + get { return name; } + set + { + if (value == null) + { + throw new ArgumentNullException("value"); + } + name = value; + } + } + + /// + /// Get/set the entry's Unix style permission mode. + /// + public int Mode + { + get { return mode; } + set { mode = value; } + } + + + /// + /// The entry's user id. + /// + /// + /// This is only directly relevant to unix systems. + /// The default is zero. + /// + public int UserId { get; set; } + + + /// + /// Get/set the entry's group id. + /// + /// + /// This is only directly relevant to linux/unix systems. + /// The default value is zero. + /// + public int GroupId { get; set; } + + + /// + /// Get/set the entry's size. + /// + /// Thrown when setting the size to less than zero. + public long Size + { + get { return _size; } + set + { + if (value < 0) + { + throw new ArgumentOutOfRangeException("value", "Cannot be less than zero"); + } + _size = value; + } + } + + + /// + /// Get/set the entry's modification time. + /// + /// + /// The modification time is only accurate to within a second. + /// + /// Thrown when setting the date time to less than 1/1/1970. + public DateTime ModTime + { + get { return modTime; } + set + { + if (value < dateTime1970) + { + throw new ArgumentOutOfRangeException("value", "ModTime cannot be before Jan 1st 1970"); + } + modTime = new DateTime(value.Year, value.Month, value.Day, value.Hour, value.Minute, value.Second); + } + } + + + /// + /// Get the entry's checksum. This is only valid/updated after writing or reading an entry. + /// + public int Checksum { get; private set; } + + /// + /// Get value of true if the header checksum is valid, false otherwise. + /// + public bool IsChecksumValid { get; private set; } + + /// + /// Get/set the entry's type flag. + /// + public byte TypeFlag { get; set; } + + /// + /// The entry's link name. + /// + /// Thrown when attempting to set LinkName to null. + public string LinkName + { + get { return linkName; } + set + { + if (value == null) + { + throw new ArgumentNullException("value"); + } + linkName = value; + } + } + + + /// + /// Get/set the entry's magic tag. + /// + /// Thrown when attempting to set Magic to null. + public string Magic + { + get { return magic; } + set + { + if (value == null) + { + throw new ArgumentNullException("value"); + } + magic = value; + } + } + + + /// + /// The entry's version. + /// + /// Thrown when attempting to set Version to null. + public string Version + { + get { return version; } + + set + { + if (value == null) + { + throw new ArgumentNullException("value"); + } + version = value; + } + } + + + /// + /// The entry's user name. + /// + public string UserName + { + get { return userName; } + set + { + if (value != null) + { + userName = value.Substring(0, Math.Min(UNAMELEN, value.Length)); + } + else + { + var currentUser = "Silverlight"; //Environment.UserName; + if (currentUser.Length > UNAMELEN) + { + currentUser = currentUser.Substring(0, UNAMELEN); + } + userName = currentUser; + } + } + } + + /// + /// Get/set the entry's group name. + /// + /// + /// This is only directly relevant to unix systems. + /// + public string GroupName + { + get { return groupName; } + set + { + groupName = value ?? "None"; + } + } + + + /// + /// Get/set the entry's major device number. + /// + public int DevMajor { get; set; } + + + /// + /// Get/set the entry's minor device number. + /// + public int DevMinor { get; set; } + + /// + /// Get the name of this entry. + /// + /// The entry's name. + [Obsolete("Use the Name property instead", true)] + public string GetName() + { + return name; + } + + #endregion + + /// + /// Create a new that is a copy of the current instance. + /// + /// A new that is a copy of the current instance. + public object Clone() + { + return MemberwiseClone(); + } + + /// + /// Parse TarHeader information from a header buffer. + /// + /// + /// The tar entry header buffer to get information from. + /// + public void ParseBuffer(byte[] header) + { + if (header == null) + { + throw new ArgumentNullException("header"); + } + + var offset = 0; + + name = ParseName(header, offset, NAMELEN).ToString(); + offset += NAMELEN; + + mode = (int) ParseOctal(header, offset, MODELEN); + offset += MODELEN; + + UserId = (int) ParseOctal(header, offset, UIDLEN); + offset += UIDLEN; + + GroupId = (int) ParseOctal(header, offset, GIDLEN); + offset += GIDLEN; + + Size = ParseOctal(header, offset, SIZELEN); + offset += SIZELEN; + + ModTime = GetDateTimeFromCTime(ParseOctal(header, offset, MODTIMELEN)); + offset += MODTIMELEN; + + Checksum = (int) ParseOctal(header, offset, CHKSUMLEN); + offset += CHKSUMLEN; + + TypeFlag = header[offset++]; + + LinkName = ParseName(header, offset, NAMELEN).ToString(); + offset += NAMELEN; + + Magic = ParseName(header, offset, MAGICLEN).ToString(); + offset += MAGICLEN; + + Version = ParseName(header, offset, VERSIONLEN).ToString(); + offset += VERSIONLEN; + + UserName = ParseName(header, offset, UNAMELEN).ToString(); + offset += UNAMELEN; + + GroupName = ParseName(header, offset, GNAMELEN).ToString(); + offset += GNAMELEN; + + DevMajor = (int) ParseOctal(header, offset, DEVLEN); + offset += DEVLEN; + + DevMinor = (int) ParseOctal(header, offset, DEVLEN); + + // Fields past this point not currently parsed or used... + + IsChecksumValid = Checksum == MakeCheckSum(header); + } + + /// + /// 'Write' header information to buffer provided, updating the check sum. + /// + /// output buffer for header information + public void WriteHeader(byte[] outBuffer) + { + if (outBuffer == null) + { + throw new ArgumentNullException("outBuffer"); + } + + var offset = 0; + + offset = GetNameBytes(Name, outBuffer, offset, NAMELEN); + offset = GetOctalBytes(mode, outBuffer, offset, MODELEN); + offset = GetOctalBytes(UserId, outBuffer, offset, UIDLEN); + offset = GetOctalBytes(GroupId, outBuffer, offset, GIDLEN); + + var size = Size; + + offset = GetLongOctalBytes(size, outBuffer, offset, SIZELEN); + offset = GetLongOctalBytes(GetCTime(ModTime), outBuffer, offset, MODTIMELEN); + + var csOffset = offset; + for (var c = 0; c < CHKSUMLEN; ++c) + { + outBuffer[offset++] = (byte) ' '; + } + + outBuffer[offset++] = TypeFlag; + + offset = GetNameBytes(LinkName, outBuffer, offset, NAMELEN); + offset = GetAsciiBytes(Magic, 0, outBuffer, offset, MAGICLEN); + offset = GetNameBytes(Version, outBuffer, offset, VERSIONLEN); + offset = GetNameBytes(UserName, outBuffer, offset, UNAMELEN); + offset = GetNameBytes(GroupName, outBuffer, offset, GNAMELEN); + + if (TypeFlag == LF_CHR || TypeFlag == LF_BLK) + { + offset = GetOctalBytes(DevMajor, outBuffer, offset, DEVLEN); + offset = GetOctalBytes(DevMinor, outBuffer, offset, DEVLEN); + } + + for (; offset < outBuffer.Length;) + { + outBuffer[offset++] = 0; + } + + Checksum = ComputeCheckSum(outBuffer); + + GetCheckSumOctalBytes(Checksum, outBuffer, csOffset, CHKSUMLEN); + IsChecksumValid = true; + } + + /// + /// Get a hash code for the current object. + /// + /// A hash code for the current object. + public override int GetHashCode() + { + return Name.GetHashCode(); + } + + /// + /// Determines if this instance is equal to the specified object. + /// + /// The object to compare with. + /// true if the objects are equal, false otherwise. + public override bool Equals(object obj) + { + var localHeader = obj as TarHeader; + + if (localHeader != null) + { + return name == localHeader.name + && mode == localHeader.mode + && UserId == localHeader.UserId + && GroupId == localHeader.GroupId + && Size == localHeader.Size + && ModTime == localHeader.ModTime + && Checksum == localHeader.Checksum + && TypeFlag == localHeader.TypeFlag + && LinkName == localHeader.LinkName + && Magic == localHeader.Magic + && Version == localHeader.Version + && UserName == localHeader.UserName + && GroupName == localHeader.GroupName + && DevMajor == localHeader.DevMajor + && DevMinor == localHeader.DevMinor; + } + return false; + } + + /// + /// Set defaults for values used when constructing a TarHeader instance. + /// + /// Value to apply as a default for userId. + /// Value to apply as a default for userName. + /// Value to apply as a default for groupId. + /// Value to apply as a default for groupName. + internal static void SetValueDefaults(int userId, string userName, int groupId, string groupName) + { + defaultUserId = userIdAsSet = userId; + defaultUser = userNameAsSet = userName; + defaultGroupId = groupIdAsSet = groupId; + defaultGroupName = groupNameAsSet = groupName; + } + + internal static void RestoreSetValues() + { + defaultUserId = userIdAsSet; + defaultUser = userNameAsSet; + defaultGroupId = groupIdAsSet; + defaultGroupName = groupNameAsSet; + } + + /// + /// Parse an octal string from a header buffer. + /// + /// The header buffer from which to parse. + /// The offset into the buffer from which to parse. + /// The number of header bytes to parse. + /// The long equivalent of the octal string. + public static long ParseOctal(byte[] header, int offset, int length) + { + if (header == null) + { + throw new NullReferenceException("header"); + } + + long result = 0; + var stillPadding = true; + + var end = offset + length; + for (var i = offset; i < end; ++i) + { + if (header[i] == 0) + { + break; + } + + if (header[i] == (byte) ' ' || header[i] == '0') + { + if (stillPadding) + { + continue; + } + + if (header[i] == (byte) ' ') + { + break; + } + } + + stillPadding = false; + + result = (result << 3) + (header[i] - '0'); + } + + return result; + } + + /// + /// Parse a name from a header buffer. + /// + /// + /// The header buffer from which to parse. + /// + /// + /// The offset into the buffer from which to parse. + /// + /// + /// The number of header bytes to parse. + /// + /// + /// The name parsed. + /// + public static StringBuilder ParseName(byte[] header, int offset, int length) + { + if (header == null) + { + throw new ArgumentNullException("header"); + } + + if (offset < 0) + { + throw new ArgumentOutOfRangeException("offset", "Cannot be less than zero"); + } + + if (length < 0) + { + throw new ArgumentOutOfRangeException("length", "Cannot be less than zero"); + } + + if (offset + length > header.Length) + { + throw new ArgumentException("Exceeds header size", "length"); + } + + var result = new StringBuilder(length); + + for (var i = offset; i < offset + length; ++i) + { + if (header[i] == 0) + { + break; + } + result.Append((char) header[i]); + } + + return result; + } + + /// + /// Add name to the buffer as a collection of bytes + /// + /// The name to add + /// The offset of the first character + /// The buffer to add to + /// The index of the first byte to add + /// The number of characters/bytes to add + /// The next free index in the buffer + public static int GetNameBytes(StringBuilder name, int nameOffset, byte[] buffer, int bufferOffset, int length) + { + if (name == null) + { + throw new ArgumentNullException("name"); + } + + if (buffer == null) + { + throw new ArgumentNullException("buffer"); + } + + return GetNameBytes(name.ToString(), nameOffset, buffer, bufferOffset, length); + } + + /// + /// Add name to the buffer as a collection of bytes + /// + /// The name to add + /// The offset of the first character + /// The buffer to add to + /// The index of the first byte to add + /// The number of characters/bytes to add + /// The next free index in the buffer + public static int GetNameBytes(string name, int nameOffset, byte[] buffer, int bufferOffset, int length) + { + if (name == null) + { + throw new ArgumentNullException("name"); + } + + if (buffer == null) + { + throw new ArgumentNullException("buffer"); + } + + int i; + + for (i = 0; i < length - 1 && nameOffset + i < name.Length; ++i) + { + buffer[bufferOffset + i] = (byte) name[nameOffset + i]; + } + + for (; i < length; ++i) + { + buffer[bufferOffset + i] = 0; + } + + return bufferOffset + length; + } + + /// + /// Add an entry name to the buffer + /// + /// + /// The name to add + /// + /// + /// The buffer to add to + /// + /// + /// The offset into the buffer from which to start adding + /// + /// + /// The number of header bytes to add + /// + /// + /// The index of the next free byte in the buffer + /// + public static int GetNameBytes(StringBuilder name, byte[] buffer, int offset, int length) + { + if (name == null) + { + throw new ArgumentNullException("name"); + } + + if (buffer == null) + { + throw new ArgumentNullException("buffer"); + } + + return GetNameBytes(name.ToString(), 0, buffer, offset, length); + } + + /// + /// Add an entry name to the buffer + /// + /// The name to add + /// The buffer to add to + /// The offset into the buffer from which to start adding + /// The number of header bytes to add + /// The index of the next free byte in the buffer + public static int GetNameBytes(string name, byte[] buffer, int offset, int length) + { + if (name == null) + { + throw new ArgumentNullException("name"); + } + + if (buffer == null) + { + throw new ArgumentNullException("buffer"); + } + + return GetNameBytes(name, 0, buffer, offset, length); + } + + /// + /// Add a string to a buffer as a collection of ascii bytes. + /// + /// The string to add + /// The offset of the first character to add. + /// The buffer to add to. + /// The offset to start adding at. + /// The number of ascii characters to add. + /// The next free index in the buffer. + public static int GetAsciiBytes(string toAdd, int nameOffset, byte[] buffer, int bufferOffset, int length) + { + if (toAdd == null) + { + throw new ArgumentNullException("toAdd"); + } + + if (buffer == null) + { + throw new ArgumentNullException("buffer"); + } + + for (var i = 0; i < length && nameOffset + i < toAdd.Length; ++i) + { + buffer[bufferOffset + i] = (byte) toAdd[nameOffset + i]; + } + return bufferOffset + length; + } + + /// + /// Put an octal representation of a value into a buffer + /// + /// + /// the value to be converted to octal + /// + /// + /// buffer to store the octal string + /// + /// + /// The offset into the buffer where the value starts + /// + /// + /// The length of the octal string to create + /// + /// + /// The offset of the character next byte after the octal string + /// + public static int GetOctalBytes(long value, byte[] buffer, int offset, int length) + { + if (buffer == null) + { + throw new ArgumentNullException("buffer"); + } + + var localIndex = length - 1; + + // Either a space or null is valid here. We use NULL as per GNUTar + buffer[offset + localIndex] = 0; + --localIndex; + + if (value > 0) + { + for (var v = value; (localIndex >= 0) && (v > 0); --localIndex) + { + buffer[offset + localIndex] = (byte) ((byte) '0' + (byte) (v & 7)); + v >>= 3; + } + } + + for (; localIndex >= 0; --localIndex) + { + buffer[offset + localIndex] = (byte) '0'; + } + + return offset + length; + } + + /// + /// Put an octal representation of a value into a buffer + /// + /// Value to be convert to octal + /// The buffer to update + /// The offset into the buffer to store the value + /// The length of the octal string + /// Index of next byte + public static int GetLongOctalBytes(long value, byte[] buffer, int offset, int length) + { + return GetOctalBytes(value, buffer, offset, length); + } + + /// + /// Add the checksum integer to header buffer. + /// + /// + /// The header buffer to set the checksum for + /// The offset into the buffer for the checksum + /// The number of header bytes to update. + /// It's formatted differently from the other fields: it has 6 digits, a + /// null, then a space -- rather than digits, a space, then a null. + /// The final space is already there, from checksumming + /// + /// The modified buffer offset + private static int GetCheckSumOctalBytes(long value, byte[] buffer, int offset, int length) + { + GetOctalBytes(value, buffer, offset, length - 1); + return offset + length; + } + + /// + /// Compute the checksum for a tar entry header. + /// The checksum field must be all spaces prior to this happening + /// + /// The tar entry's header buffer. + /// The computed checksum. + private static int ComputeCheckSum(byte[] buffer) + { + var sum = 0; + for (var i = 0; i < buffer.Length; ++i) + { + sum += buffer[i]; + } + return sum; + } + + /// + /// Make a checksum for a tar entry ignoring the checksum contents. + /// + /// The tar entry's header buffer. + /// The checksum for the buffer + private static int MakeCheckSum(byte[] buffer) + { + var sum = 0; + for (var i = 0; i < CHKSUMOFS; ++i) + { + sum += buffer[i]; + } + + for (var i = 0; i < CHKSUMLEN; ++i) + { + sum += (byte) ' '; + } + + for (var i = CHKSUMOFS + CHKSUMLEN; i < buffer.Length; ++i) + { + sum += buffer[i]; + } + return sum; + } + + private static int GetCTime(DateTime dateTime) + { + return unchecked((int) ((dateTime.Ticks - dateTime1970.Ticks)/timeConversionFactor)); + } + + private static DateTime GetDateTimeFromCTime(long ticks) + { + DateTime result; + + try + { + result = new DateTime(dateTime1970.Ticks + ticks*timeConversionFactor); + } + catch (ArgumentOutOfRangeException) + { + result = dateTime1970; + } + return result; + } + + #region Instance Fields + + private string groupName; + private string linkName; + private string magic; + private int mode; + private DateTime modTime; + private string name; + private long _size; + private string userName; + private string version; + + #endregion + + #region Class Fields + + // Values used during recursive operations. + internal static int defaultGroupId; + internal static string defaultGroupName = "None"; + internal static string defaultUser; + internal static int defaultUserId; + internal static int groupIdAsSet; + internal static string groupNameAsSet = "None"; + internal static int userIdAsSet; + internal static string userNameAsSet; + + #endregion + } +} + +/* The original Java file had this header: + * +** Authored by Timothy Gerard Endres +** +** +** This work has been placed into the public domain. +** You may use this work in any way and for any purpose you wish. +** +** THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND, +** NOT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY. THE AUTHOR +** OF THIS SOFTWARE, ASSUMES _NO_ RESPONSIBILITY FOR ANY +** CONSEQUENCE RESULTING FROM THE USE, MODIFICATION, OR +** REDISTRIBUTION OF THIS SOFTWARE. +** +*/ \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Tar/TarInputStream.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Tar/TarInputStream.cs new file mode 100644 index 0000000..ffaa90c --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Tar/TarInputStream.cs @@ -0,0 +1,722 @@ +// TarInputStream.cs +// +// Copyright (C) 2001 Mike Krueger +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using System.IO; +using System.Text; + +namespace ICSharpCode.SharpZipLib.Silverlight.Tar +{ + /// + /// The TarInputStream reads a UNIX tar archive as an InputStream. + /// methods are provided to position at each successive entry in + /// the archive, and the read each entry as a normal input stream + /// using read(). + /// + public class TarInputStream : Stream + { + #region Constructors + + /// + /// Construct a TarInputStream with default block factor + /// + /// stream to source data from + public TarInputStream(Stream inputStream) + : this(inputStream, TarBuffer.DefaultBlockFactor) + { + } + + /// + /// Construct a TarInputStream with user specified block factor + /// + /// stream to source data from + /// block factor to apply to archive + public TarInputStream(Stream inputStream, int blockFactor) + { + this.inputStream = inputStream; + _buffer = TarBuffer.CreateInputTarBuffer(inputStream, blockFactor); + } + + #endregion + + #region Stream Overrides + + /// + /// Gets a value indicating whether the current stream supports reading + /// + public override bool CanRead + { + get { return inputStream.CanRead; } + } + + /// + /// Gets a value indicating whether the current stream supports seeking + /// This property always returns false. + /// + public override bool CanSeek + { + get { return false; } + } + + /// + /// Gets a value indicating if the stream supports writing. + /// This property always returns false. + /// + public override bool CanWrite + { + get { return false; } + } + + /// + /// The length in bytes of the stream + /// + public override long Length + { + get { return inputStream.Length; } + } + + /// + /// Gets or sets the position within the stream. + /// Setting the Position is not supported and throws a NotSupportedExceptionNotSupportedException + /// + /// Any attempt to set position + public override long Position + { + get { return inputStream.Position; } + set { throw new NotSupportedException("TarInputStream Seek not supported"); } + } + + /// + /// Flushes the baseInputStream + /// + public override void Flush() + { + inputStream.Flush(); + } + + /// + /// Set the streams position. This operation is not supported and will throw a NotSupportedException + /// + /// The offset relative to the origin to seek to. + /// The to start seeking from. + /// The new position in the stream. + /// Any access + public override long Seek(long offset, SeekOrigin origin) + { + throw new NotSupportedException("TarInputStream Seek not supported"); + } + + /// + /// Sets the length of the stream + /// This operation is not supported and will throw a NotSupportedException + /// + /// The new stream length. + /// Any access + public override void SetLength(long value) + { + throw new NotSupportedException("TarInputStream SetLength not supported"); + } + + /// + /// Writes a block of bytes to this stream using data from a buffer. + /// This operation is not supported and will throw a NotSupportedException + /// + /// The buffer containing bytes to write. + /// The offset in the buffer of the frist byte to write. + /// The number of bytes to write. + /// Any access + public override void Write(byte[] buffer, int offset, int count) + { + throw new NotSupportedException("TarInputStream Write not supported"); + } + + /// + /// Writes a byte to the current position in the file stream. + /// This operation is not supported and will throw a NotSupportedException + /// + /// The byte value to write. + /// Any access + public override void WriteByte(byte value) + { + throw new NotSupportedException("TarInputStream WriteByte not supported"); + } + + /// + /// Reads a byte from the current tar archive entry. + /// + /// A byte cast to an int; -1 if the at the end of the stream. + public override int ReadByte() + { + var oneByteBuffer = new byte[1]; + var num = Read(oneByteBuffer, 0, 1); + if (num <= 0) + { + // return -1 to indicate that no byte was read. + return -1; + } + return oneByteBuffer[0]; + } + + /// + /// Reads bytes from the current tar archive entry. + /// + /// This method is aware of the boundaries of the current + /// entry in the archive and will deal with them appropriately + /// + /// + /// The buffer into which to place bytes read. + /// + /// + /// The offset at which to place bytes read. + /// + /// + /// The number of bytes to read. + /// + /// + /// The number of bytes read, or 0 at end of stream/EOF. + /// + public override int Read(byte[] buffer, int offset, int count) + { + if (buffer == null) + { + throw new ArgumentNullException("buffer"); + } + + var totalRead = 0; + + if (entryOffset >= entrySize) + { + return 0; + } + + long numToRead = count; + + if ((numToRead + entryOffset) > entrySize) + { + numToRead = entrySize - entryOffset; + } + + if (readBuffer != null) + { + var sz = (numToRead > readBuffer.Length) ? readBuffer.Length : (int) numToRead; + + Array.Copy(readBuffer, 0, buffer, offset, sz); + + if (sz >= readBuffer.Length) + { + readBuffer = null; + } + else + { + var newLen = readBuffer.Length - sz; + var newBuf = new byte[newLen]; + Array.Copy(readBuffer, sz, newBuf, 0, newLen); + readBuffer = newBuf; + } + + totalRead += sz; + numToRead -= sz; + offset += sz; + } + + while (numToRead > 0) + { + var rec = _buffer.ReadBlock(); + if (rec == null) + { + // Unexpected EOF! + throw new TarException("unexpected EOF with " + numToRead + " bytes unread"); + } + + var sz = (int) numToRead; + var recLen = rec.Length; + + if (recLen > sz) + { + Array.Copy(rec, 0, buffer, offset, sz); + readBuffer = new byte[recLen - sz]; + Array.Copy(rec, sz, readBuffer, 0, recLen - sz); + } + else + { + sz = recLen; + Array.Copy(rec, 0, buffer, offset, recLen); + } + + totalRead += sz; + numToRead -= sz; + offset += sz; + } + + entryOffset += totalRead; + + return totalRead; + } + + /// + /// Closes this stream. Calls the TarBuffer's close() method. + /// The underlying stream is closed by the TarBuffer. + /// + public override void Close() + { + _buffer.Close(); + } + + #endregion + + /// + /// Get the record size being used by this stream's TarBuffer. + /// + public int RecordSize + { + get { return _buffer.RecordSize; } + } + + /// + /// Get the available data that can be read from the current + /// entry in the archive. This does not indicate how much data + /// is left in the entire archive, only in the current entry. + /// This value is determined from the entry's size header field + /// and the amount of data already read from the current entry. + /// + /// + /// The number of available bytes for the current entry. + /// + public long Available + { + get { return entrySize - entryOffset; } + } + + /// + /// Return a value of true if marking is supported; false otherwise. + /// + /// Currently marking is not supported, the return value is always false. + public bool IsMarkSupported + { + get { return false; } + } + + /// + /// Set the entry factory for this instance. + /// + /// The factory for creating new entries + public void SetEntryFactory(IEntryFactory factory) + { + entryFactory = factory; + } + + /// + /// Get the record size being used by this stream's TarBuffer. + /// + /// + /// TarBuffer record size. + /// + [Obsolete("Use RecordSize property instead")] + public int GetRecordSize() + { + return _buffer.RecordSize; + } + + /// + /// Skip bytes in the input buffer. This skips bytes in the + /// current entry's data, not the entire archive, and will + /// stop at the end of the current entry's data if the number + /// to skip extends beyond that point. + /// + /// + /// The number of bytes to skip. + /// + public void Skip(long skipCount) + { + // TODO: REVIEW efficiency of TarInputStream.Skip + // This is horribly inefficient, but it ensures that we + // properly skip over bytes via the TarBuffer... + // + var skipBuf = new byte[8*1024]; + + for (var num = skipCount; num > 0;) + { + var toRead = num > skipBuf.Length ? skipBuf.Length : (int) num; + var numRead = Read(skipBuf, 0, toRead); + + if (numRead == -1) + { + break; + } + + num -= numRead; + } + } + + /// + /// Since we do not support marking just yet, we do nothing. + /// + /// + /// The limit to mark. + /// + public void Mark(int markLimit) + { + } + + /// + /// Since we do not support marking just yet, we do nothing. + /// + public void Reset() + { + } + + /// + /// Get the next entry in this tar archive. This will skip + /// over any remaining data in the current entry, if there + /// is one, and place the input stream at the header of the + /// next entry, and read the header and instantiate a new + /// TarEntry from the header bytes and return that entry. + /// If there are no more entries in the archive, null will + /// be returned to indicate that the end of the archive has + /// been reached. + /// + /// + /// The next TarEntry in the archive, or null. + /// + public TarEntry GetNextEntry() + { + if (hasHitEOF) + { + return null; + } + + if (currentEntry != null) + { + SkipToNextEntry(); + } + + var headerBuf = _buffer.ReadBlock(); + + if (headerBuf == null) + { + hasHitEOF = true; + } + else if (_buffer.IsEOFBlock(headerBuf)) + { + hasHitEOF = true; + } + + if (hasHitEOF) + { + currentEntry = null; + } + else + { + try + { + var header = new TarHeader(); + header.ParseBuffer(headerBuf); + if (!header.IsChecksumValid) + { + throw new TarException("Header checksum is invalid"); + } + entryOffset = 0; + entrySize = header.Size; + + StringBuilder longName = null; + + if (header.TypeFlag == TarHeader.LF_GNU_LONGNAME) + { + var nameBuffer = new byte[TarBuffer.BlockSize]; + var numToRead = entrySize; + + longName = new StringBuilder(); + + while (numToRead > 0) + { + var numRead = Read(nameBuffer, 0, + (numToRead > nameBuffer.Length ? nameBuffer.Length : (int) numToRead)); + + if (numRead == -1) + { + throw new InvalidHeaderException("Failed to read long name entry"); + } + + longName.Append(TarHeader.ParseName(nameBuffer, 0, numRead).ToString()); + numToRead -= numRead; + } + + SkipToNextEntry(); + headerBuf = _buffer.ReadBlock(); + } + else if (header.TypeFlag == TarHeader.LF_GHDR) + { + // POSIX global extended header + // Ignore things we dont understand completely for now + SkipToNextEntry(); + headerBuf = _buffer.ReadBlock(); + } + else if (header.TypeFlag == TarHeader.LF_XHDR) + { + // POSIX extended header + // Ignore things we dont understand completely for now + SkipToNextEntry(); + headerBuf = _buffer.ReadBlock(); + } + else if (header.TypeFlag == TarHeader.LF_GNU_VOLHDR) + { + // TODO: could show volume name when verbose + SkipToNextEntry(); + headerBuf = _buffer.ReadBlock(); + } + else if (header.TypeFlag != TarHeader.LF_NORMAL && + header.TypeFlag != TarHeader.LF_OLDNORM && + header.TypeFlag != TarHeader.LF_DIR) + { + // Ignore things we dont understand completely for now + SkipToNextEntry(); + headerBuf = _buffer.ReadBlock(); + } + + if (entryFactory == null) + { + currentEntry = new TarEntry(headerBuf); + if (longName != null) + { + currentEntry.Name = longName.ToString(); + } + } + else + { + currentEntry = entryFactory.CreateEntry(headerBuf); + } + + // Magic was checked here for 'ustar' but there are multiple valid possibilities + // so this is not done anymore. + + entryOffset = 0; + + // TODO: Review How do we resolve this discrepancy?! + entrySize = currentEntry.Size; + } + catch (InvalidHeaderException ex) + { + entrySize = 0; + entryOffset = 0; + currentEntry = null; + var errorText = string.Format("Bad header in record {0} block {1} {2}", + _buffer.CurrentRecord, _buffer.CurrentBlock, ex.Message); + throw new InvalidHeaderException(errorText); + } + } + return currentEntry; + } + + /// + /// Copies the contents of the current tar archive entry directly into + /// an output stream. + /// + /// + /// The OutputStream into which to write the entry's data. + /// + public void CopyEntryContents(Stream outputStream) + { + var tempBuffer = new byte[32*1024]; + + while (true) + { + var numRead = Read(tempBuffer, 0, tempBuffer.Length); + if (numRead <= 0) + { + break; + } + outputStream.Write(tempBuffer, 0, numRead); + } + } + + private void SkipToNextEntry() + { + var numToSkip = entrySize - entryOffset; + + if (numToSkip > 0) + { + Skip(numToSkip); + } + + readBuffer = null; + } + + #region Nested type: EntryFactoryAdapter + + /// + /// Standard entry factory class creating instances of the class TarEntry + /// + public class EntryFactoryAdapter : IEntryFactory + { + #region IEntryFactory Members + + /// + /// Create a based on named + /// + /// The name to use for the entry + /// A new + public TarEntry CreateEntry(string name) + { + return TarEntry.CreateTarEntry(name); + } + + /// + /// Create a tar entry with details obtained from file + /// + /// The name of the file to retrieve details from. + /// A new + public TarEntry CreateEntryFromFile(string fileName) + { + return TarEntry.CreateEntryFromFile(fileName); + } + + /// + /// Create an entry based on details in header + /// + /// The buffer containing entry details. + /// A new + public TarEntry CreateEntry(byte[] headerBuffer) + { + return new TarEntry(headerBuffer); + } + + #endregion + } + + #endregion + + #region Instance Fields + + /// + /// Stream used as the source of input data. + /// + private readonly Stream inputStream; + + /// + /// Working buffer + /// + protected TarBuffer _buffer; + + /// + /// Current entry being read + /// + private TarEntry currentEntry; + + /// + /// Factory used to create TarEntry or descendant class instance + /// + protected IEntryFactory entryFactory; + + /// + /// Number of bytes read for this entry so far + /// + protected long entryOffset; + + /// + /// Size of this entry as recorded in header + /// + protected long entrySize; + + /// + /// Flag set when last block has been read + /// + protected bool hasHitEOF; + + /// + /// Buffer used with calls to Read() + /// + protected byte[] readBuffer; + + #endregion + + #region Nested type: IEntryFactory + + /// + /// This interface is provided, along with the method , to allow + /// the programmer to have their own subclass instantiated for the + /// entries return from . + /// + public interface IEntryFactory + { + /// + /// Create an entry based on name alone + /// + /// + /// Name of the new EntryPointNotFoundException to create + /// + /// created TarEntry or descendant class + TarEntry CreateEntry(string name); + + /// + /// Create an instance based on an actual file + /// + /// + /// Name of file to represent in the entry + /// + /// + /// Created TarEntry or descendant class + /// + TarEntry CreateEntryFromFile(string fileName); + + /// + /// Create a tar entry based on the header information passed + /// + /// + /// Buffer containing header information to base entry on + /// + /// + /// Created TarEntry or descendant class + /// + TarEntry CreateEntry(byte[] headerBuf); + } + + #endregion + } +} + +/* The original Java file had this header: + ** Authored by Timothy Gerard Endres + ** + ** + ** This work has been placed into the public domain. + ** You may use this work in any way and for any purpose you wish. + ** + ** THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND, + ** NOT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY. THE AUTHOR + ** OF THIS SOFTWARE, ASSUMES _NO_ RESPONSIBILITY FOR ANY + ** CONSEQUENCE RESULTING FROM THE USE, MODIFICATION, OR + ** REDISTRIBUTION OF THIS SOFTWARE. + ** + */ \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Tar/TarOutputStream.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Tar/TarOutputStream.cs new file mode 100644 index 0000000..87c494b --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Tar/TarOutputStream.cs @@ -0,0 +1,500 @@ +// TarOutputStream.cs +// +// Copyright (C) 2001 Mike Krueger +// Copyright 2005 John Reilly +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using System.IO; + +namespace ICSharpCode.SharpZipLib.Silverlight.Tar +{ + /// + /// The TarOutputStream writes a UNIX tar archive as an OutputStream. + /// Methods are provided to put entries, and then write their contents + /// by writing to this stream using write(). + /// + /// public + public class TarOutputStream : Stream + { + #region Constructors + + /// + /// Construct TarOutputStream using default block factor + /// + /// stream to write to + public TarOutputStream(Stream outputStream) + : this(outputStream, TarBuffer.DefaultBlockFactor) + { + } + + /// + /// Construct TarOutputStream with user specified block factor + /// + /// stream to write to + /// blocking factor + public TarOutputStream(Stream outputStream, int blockFactor) + { + if (outputStream == null) + { + throw new ArgumentNullException("outputStream"); + } + + this.outputStream = outputStream; + _buffer = TarBuffer.CreateOutputTarBuffer(outputStream, blockFactor); + + assemblyBuffer = new byte[TarBuffer.BlockSize]; + blockBuffer = new byte[TarBuffer.BlockSize]; + } + + #endregion + + /// + /// true if the stream supports reading; otherwise, false. + /// + public override bool CanRead + { + get { return outputStream.CanRead; } + } + + /// + /// true if the stream supports seeking; otherwise, false. + /// + public override bool CanSeek + { + get { return outputStream.CanSeek; } + } + + /// + /// true if stream supports writing; otherwise, false. + /// + public override bool CanWrite + { + get { return outputStream.CanWrite; } + } + + /// + /// length of stream in bytes + /// + public override long Length + { + get { return outputStream.Length; } + } + + /// + /// gets or sets the position within the current stream. + /// + public override long Position + { + get { return outputStream.Position; } + set { outputStream.Position = value; } + } + + /// + /// Get the record size being used by this stream's TarBuffer. + /// + public int RecordSize + { + get { return _buffer.RecordSize; } + } + + /// + /// Get a value indicating wether an entry is open, requiring more data to be written. + /// + private bool IsEntryOpen + { + get { return (currBytes < currSize); } + } + + /// + /// set the position within the current stream + /// + /// The offset relative to the to seek to + /// The to seek from. + /// The new position in the stream. + public override long Seek(long offset, SeekOrigin origin) + { + return outputStream.Seek(offset, origin); + } + + /// + /// Set the length of the current stream + /// + /// The new stream length. + public override void SetLength(long value) + { + outputStream.SetLength(value); + } + + /// + /// Read a byte from the stream and advance the position within the stream + /// by one byte or returns -1 if at the end of the stream. + /// + /// The byte value or -1 if at end of stream + public override int ReadByte() + { + return outputStream.ReadByte(); + } + + /// + /// read bytes from the current stream and advance the position within the + /// stream by the number of bytes read. + /// + /// The buffer to store read bytes in. + /// The index into the buffer to being storing bytes at. + /// The desired number of bytes to read. + /// The total number of bytes read, or zero if at the end of the stream. + /// The number of bytes may be less than the count + /// requested if data is not avialable. + public override int Read(byte[] buffer, int offset, int count) + { + return outputStream.Read(buffer, offset, count); + } + + /// + /// All buffered data is written to destination + /// + public override void Flush() + { + outputStream.Flush(); + } + + /// + /// Ends the TAR archive without closing the underlying OutputStream. + /// The result is that the EOF block of nulls is written. + /// + public void Finish() + { + if (IsEntryOpen) + { + CloseEntry(); + } + WriteEofBlock(); + } + + /// + /// Ends the TAR archive and closes the underlying OutputStream. + /// + /// This means that Finish() is called followed by calling the + /// TarBuffer's Close(). + public override void Close() + { + if (!isClosed) + { + isClosed = true; + Finish(); + _buffer.Close(); + } + } + + /// + /// Get the record size being used by this stream's TarBuffer. + /// + /// + /// The TarBuffer record size. + /// + [Obsolete("Use RecordSize property instead")] + public int GetRecordSize() + { + return _buffer.RecordSize; + } + + /// + /// Put an entry on the output stream. This writes the entry's + /// header and positions the output stream for writing + /// the contents of the entry. Once this method is called, the + /// stream is ready for calls to write() to write the entry's + /// contents. Once the contents are written, closeEntry() + /// MUST be called to ensure that all buffered data + /// is completely written to the output stream. + /// + /// + /// The TarEntry to be written to the archive. + /// + public void PutNextEntry(TarEntry entry) + { + if (entry == null) + { + throw new ArgumentNullException("entry"); + } + + if (entry.TarHeader.Name.Length >= TarHeader.NAMELEN) + { + var longHeader = new TarHeader{TypeFlag = TarHeader.LF_GNU_LONGNAME}; + longHeader.Name = longHeader.Name + "././@LongLink"; + longHeader.UserId = 0; + longHeader.GroupId = 0; + longHeader.GroupName = String.Empty; + longHeader.UserName = String.Empty; + longHeader.LinkName = String.Empty; + + longHeader.Size = entry.TarHeader.Name.Length; + + longHeader.WriteHeader(blockBuffer); + _buffer.WriteBlock(blockBuffer); // Add special long filename header block + + var nameCharIndex = 0; + + while (nameCharIndex < entry.TarHeader.Name.Length) + { + Array.Clear(blockBuffer, 0, blockBuffer.Length); + TarHeader.GetAsciiBytes(entry.TarHeader.Name, nameCharIndex, blockBuffer, 0, TarBuffer.BlockSize); + nameCharIndex += TarBuffer.BlockSize; + _buffer.WriteBlock(blockBuffer); + } + } + + entry.WriteEntryHeader(blockBuffer); + _buffer.WriteBlock(blockBuffer); + + currBytes = 0; + + currSize = entry.IsDirectory ? 0 : entry.Size; + } + + /// + /// Close an entry. This method MUST be called for all file + /// entries that contain data. The reason is that we must + /// buffer data written to the stream in order to satisfy + /// the buffer's block based writes. Thus, there may be + /// data fragments still being assembled that must be written + /// to the output stream before this entry is closed and the + /// next entry written. + /// + public void CloseEntry() + { + if (assemblyBufferLength > 0) + { + Array.Clear(assemblyBuffer, assemblyBufferLength, assemblyBuffer.Length - assemblyBufferLength); + + _buffer.WriteBlock(assemblyBuffer); + + currBytes += assemblyBufferLength; + assemblyBufferLength = 0; + } + + if (currBytes < currSize) + { + var errorText = string.Format( + "Entry closed at '{0}' before the '{1}' bytes specified in the header were written", + currBytes, currSize); + throw new TarException(errorText); + } + } + + /// + /// Writes a byte to the current tar archive entry. + /// This method simply calls Write(byte[], int, int). + /// + /// + /// The byte to be written. + /// + public override void WriteByte(byte value) + { + Write(new[]{value}, 0, 1); + } + + /// + /// Writes bytes to the current tar archive entry. This method + /// is aware of the current entry and will throw an exception if + /// you attempt to write bytes past the length specified for the + /// current entry. The method is also (painfully) aware of the + /// record buffering required by TarBuffer, and manages buffers + /// that are not a multiple of recordsize in length, including + /// assembling records from small buffers. + /// + /// + /// The buffer to write to the archive. + /// + /// + /// The offset in the buffer from which to get bytes. + /// + /// + /// The number of bytes to write. + /// + public override void Write(byte[] buffer, int offset, int count) + { + if (buffer == null) + { + throw new ArgumentNullException("buffer"); + } + + if (offset < 0) + { + throw new ArgumentOutOfRangeException("offset", "Cannot be negative"); + } + + if (buffer.Length - offset < count) + { + throw new ArgumentException("offset and count combination is invalid"); + } + + if (count < 0) + { + throw new ArgumentOutOfRangeException("count", "Cannot be negative"); + } + + if ((currBytes + count) > currSize) + { + var errorText = string.Format("request to write '{0}' bytes exceeds size in header of '{1}' bytes", + count, currSize); + throw new ArgumentOutOfRangeException("count", errorText); + } + + // + // We have to deal with assembly!!! + // The programmer can be writing little 32 byte chunks for all + // we know, and we must assemble complete blocks for writing. + // TODO REVIEW Maybe this should be in TarBuffer? Could that help to + // eliminate some of the buffer copying. + // + if (assemblyBufferLength > 0) + { + if ((assemblyBufferLength + count) >= blockBuffer.Length) + { + var aLen = blockBuffer.Length - assemblyBufferLength; + + Array.Copy(assemblyBuffer, 0, blockBuffer, 0, assemblyBufferLength); + Array.Copy(buffer, offset, blockBuffer, assemblyBufferLength, aLen); + + _buffer.WriteBlock(blockBuffer); + + currBytes += blockBuffer.Length; + + offset += aLen; + count -= aLen; + + assemblyBufferLength = 0; + } + else + { + Array.Copy(buffer, offset, assemblyBuffer, assemblyBufferLength, count); + offset += count; + assemblyBufferLength += count; + count -= count; + } + } + + // + // When we get here we have EITHER: + // o An empty "assembly" buffer. + // o No bytes to write (count == 0) + // + while (count > 0) + { + if (count < blockBuffer.Length) + { + Array.Copy(buffer, offset, assemblyBuffer, assemblyBufferLength, count); + assemblyBufferLength += count; + break; + } + + _buffer.WriteBlock(buffer, offset); + + var bufferLength = blockBuffer.Length; + currBytes += bufferLength; + count -= bufferLength; + offset += bufferLength; + } + } + + /// + /// Write an EOF (end of archive) block to the tar archive. + /// An EOF block consists of all zeros. + /// + private void WriteEofBlock() + { + Array.Clear(blockBuffer, 0, blockBuffer.Length); + _buffer.WriteBlock(blockBuffer); + } + + #region Instance Fields + + /// + /// 'Assembly' buffer used to assemble data before writing + /// + protected byte[] assemblyBuffer; + + /// + /// current 'Assembly' buffer length + /// + private int assemblyBufferLength; + + /// + /// single block working buffer + /// + protected byte[] blockBuffer; + + /// + /// TarBuffer used to provide correct blocking factor + /// + protected TarBuffer _buffer; + + /// + /// bytes written for this entry so far + /// + private long currBytes; + + /// + /// Size for the current entry + /// + protected long currSize; + + /// + /// Flag indicating wether this instance has been closed or not. + /// + private bool isClosed; + + /// + /// the destination stream for the archive contents + /// + protected Stream outputStream; + + #endregion + } +} + +/* The original Java file had this header: + ** Authored by Timothy Gerard Endres + ** + ** + ** This work has been placed into the public domain. + ** You may use this work in any way and for any purpose you wish. + ** + ** THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND, + ** NOT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY. THE AUTHOR + ** OF THIS SOFTWARE, ASSUMES _NO_ RESPONSIBILITY FOR ANY + ** CONSEQUENCE RESULTING FROM THE USE, MODIFICATION, OR + ** REDISTRIBUTION OF THIS SOFTWARE. + ** + */ \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/Deflater.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/Deflater.cs new file mode 100644 index 0000000..2720178 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/Deflater.cs @@ -0,0 +1,555 @@ +// Deflater.cs +// +// Copyright (C) 2001 Mike Krueger +// Copyright (C) 2004 John Reilly +// +// This file was translated from java, it was part of the GNU Classpath +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; + +namespace ICSharpCode.SharpZipLib.Silverlight.Zip.Compression +{ + /// + /// This is the Deflater class. The deflater class compresses input + /// with the deflate algorithm described in RFC 1951. It has several + /// compression levels and three different strategies described below. + /// + /// This class is not thread safe. This is inherent in the API, due + /// to the split of deflate and setInput. + /// + /// author of the original java version : Jochen Hoenicke + /// + public class Deflater + { + #region Deflater Documentation + /* + * The Deflater can do the following state transitions: + * + * (1) -> INIT_STATE ----> INIT_FINISHING_STATE ---. + * / | (2) (5) | + * / v (5) | + * (3)| SETDICT_STATE ---> SETDICT_FINISHING_STATE |(3) + * \ | (3) | ,--------' + * | | | (3) / + * v v (5) v v + * (1) -> BUSY_STATE ----> FINISHING_STATE + * | (6) + * v + * FINISHED_STATE + * \_____________________________________/ + * | (7) + * v + * CLOSED_STATE + * + * (1) If we should produce a header we start in INIT_STATE, otherwise + * we start in BUSY_STATE. + * (2) A dictionary may be set only when we are in INIT_STATE, then + * we change the state as indicated. + * (3) Whether a dictionary is set or not, on the first call of deflate + * we change to BUSY_STATE. + * (4) -- intentionally left blank -- :) + * (5) FINISHING_STATE is entered, when flush() is called to indicate that + * there is no more INPUT. There are also states indicating, that + * the header wasn't written yet. + * (6) FINISHED_STATE is entered, when everything has been flushed to the + * internal pending output buffer. + * (7) At any time (7) + * + */ + #endregion + #region Public Constants + /// + /// The best and slowest compression level. This tries to find very + /// long and distant string repetitions. + /// + public const int BEST_COMPRESSION = 9; + + /// + /// The worst but fastest compression level. + /// + public const int BEST_SPEED = 1; + + /// + /// The default compression level. + /// + public const int DEFAULT_COMPRESSION = -1; + + /// + /// This level won't compress at all but output uncompressed blocks. + /// + public const int NO_COMPRESSION = 0; + + /// + /// The compression method. This is the only method supported so far. + /// There is no need to use this constant at all. + /// + public const int DEFLATED = 8; + #endregion + #region Local Constants + private const int IS_SETDICT = 0x01; + private const int IS_FLUSHING = 0x04; + private const int IS_FINISHING = 0x08; + + private const int INIT_STATE = 0x00; + private const int SETDICT_STATE = 0x01; + // private static int INIT_FINISHING_STATE = 0x08; + // private static int SETDICT_FINISHING_STATE = 0x09; + private const int BUSY_STATE = 0x10; + private const int FLUSHING_STATE = 0x14; + private const int FINISHING_STATE = 0x1c; + private const int FINISHED_STATE = 0x1e; + private const int CLOSED_STATE = 0x7f; + #endregion + #region Constructors + /// + /// Creates a new deflater with default compression level. + /// + public Deflater() : this(DEFAULT_COMPRESSION, false) + { + + } + + /// + /// Creates a new deflater with given compression level. + /// + /// + /// the compression level, a value between NO_COMPRESSION + /// and BEST_COMPRESSION, or DEFAULT_COMPRESSION. + /// + /// if lvl is out of range. + public Deflater(int level) : this(level, false) + { + + } + + /// + /// Creates a new deflater with given compression level. + /// + /// + /// the compression level, a value between NO_COMPRESSION + /// and BEST_COMPRESSION. + /// + /// + /// true, if we should suppress the Zlib/RFC1950 header at the + /// beginning and the adler checksum at the end of the output. This is + /// useful for the GZIP/PKZIP formats. + /// + /// if lvl is out of range. + public Deflater(int level, bool noZlibHeaderOrFooter) + { + if (level == DEFAULT_COMPRESSION) { + level = 6; + } else if (level < NO_COMPRESSION || level > BEST_COMPRESSION) { + throw new ArgumentOutOfRangeException("level"); + } + + pending = new DeflaterPending(); + engine = new DeflaterEngine(pending); + this.noZlibHeaderOrFooter = noZlibHeaderOrFooter; + SetStrategy(DeflateStrategy.Default); + SetLevel(level); + Reset(); + } + #endregion + + /// + /// Resets the deflater. The deflater acts afterwards as if it was + /// just created with the same compression level and strategy as it + /// had before. + /// + public void Reset() + { + state = (noZlibHeaderOrFooter ? BUSY_STATE : INIT_STATE); + totalOut = 0; + pending.Reset(); + engine.Reset(); + } + + /// + /// Gets the current adler checksum of the data that was processed so far. + /// + public int Adler { + get { + return engine.Adler; + } + } + + /// + /// Gets the number of input bytes processed so far. + /// + public int TotalIn { + get { + return engine.TotalIn; + } + } + + /// + /// Gets the number of output bytes so far. + /// + public long TotalOut { + get { + return totalOut; + } + } + + /// + /// Flushes the current input block. Further calls to deflate() will + /// produce enough output to inflate everything in the current input + /// block. This is not part of Sun's JDK so I have made it package + /// private. It is used by DeflaterOutputStream to implement + /// flush(). + /// + public void Flush() + { + state |= IS_FLUSHING; + } + + /// + /// Finishes the deflater with the current input block. It is an error + /// to give more input after this method was called. This method must + /// be called to force all bytes to be flushed. + /// + public void Finish() + { + state |= (IS_FLUSHING | IS_FINISHING); + } + + /// + /// Returns true if the stream was finished and no more output bytes + /// are available. + /// + public bool IsFinished { + get { + return (state == FINISHED_STATE) && pending.IsFlushed; + } + } + + /// + /// Returns true, if the input buffer is empty. + /// You should then call setInput(). + /// NOTE: This method can also return true when the stream + /// was finished. + /// + public bool IsNeedingInput { + get { + return engine.NeedsInput(); + } + } + + /// + /// Sets the data which should be compressed next. This should be only + /// called when needsInput indicates that more input is needed. + /// If you call setInput when needsInput() returns false, the + /// previous input that is still pending will be thrown away. + /// The given byte array should not be changed, before needsInput() returns + /// true again. + /// This call is equivalent to setInput(input, 0, input.length). + /// + /// + /// the buffer containing the input data. + /// + /// + /// if the buffer was finished() or ended(). + /// + public void SetInput(byte[] input) + { + SetInput(input, 0, input.Length); + } + + /// + /// Sets the data which should be compressed next. This should be + /// only called when needsInput indicates that more input is needed. + /// The given byte array should not be changed, before needsInput() returns + /// true again. + /// + /// + /// the buffer containing the input data. + /// + /// + /// the start of the data. + /// + /// + /// the number of data bytes of input. + /// + /// + /// if the buffer was Finish()ed or if previous input is still pending. + /// + public void SetInput(byte[] input, int offset, int count) + { + if ((state & IS_FINISHING) != 0) { + throw new InvalidOperationException("Finish() already called"); + } + engine.SetInput(input, offset, count); + } + + /// + /// Sets the compression level. There is no guarantee of the exact + /// position of the change, but if you call this when needsInput is + /// true the change of compression level will occur somewhere near + /// before the end of the so far given input. + /// + /// + /// the new compression level. + /// + public void SetLevel(int level) + { + if (level == DEFAULT_COMPRESSION) { + level = 6; + } else if (level < NO_COMPRESSION || level > BEST_COMPRESSION) { + throw new ArgumentOutOfRangeException("level"); + } + + if (this.level != level) { + this.level = level; + engine.SetLevel(level); + } + } + + /// + /// Get current compression level + /// + /// Returns the current compression level + public int GetLevel() { + return level; + } + + /// + /// Sets the compression strategy. Strategy is one of + /// DEFAULT_STRATEGY, HUFFMAN_ONLY and FILTERED. For the exact + /// position where the strategy is changed, the same as for + /// SetLevel() applies. + /// + /// + /// The new compression strategy. + /// + public void SetStrategy(DeflateStrategy strategy) + { + engine.Strategy = strategy; + } + + /// + /// Deflates the current input block with to the given array. + /// + /// + /// The buffer where compressed data is stored + /// + /// + /// The number of compressed bytes added to the output, or 0 if either + /// IsNeedingInput() or IsFinished returns true or length is zero. + /// + public int Deflate(byte[] output) + { + return Deflate(output, 0, output.Length); + } + + /// + /// Deflates the current input block to the given array. + /// + /// + /// Buffer to store the compressed data. + /// + /// + /// Offset into the output array. + /// + /// + /// The maximum number of bytes that may be stored. + /// + /// + /// The number of compressed bytes added to the output, or 0 if either + /// needsInput() or finished() returns true or length is zero. + /// + /// + /// If Finish() was previously called. + /// + /// + /// If offset or length don't match the array length. + /// + public int Deflate(byte[] output, int offset, int length) + { + int origLength = length; + + if (state == CLOSED_STATE) { + throw new InvalidOperationException("Deflater closed"); + } + + if (state < BUSY_STATE) { + // output header + int header = (DEFLATED + + ((DeflaterConstants.MAX_WBITS - 8) << 4)) << 8; + int level_flags = (level - 1) >> 1; + if (level_flags < 0 || level_flags > 3) { + level_flags = 3; + } + header |= level_flags << 6; + if ((state & IS_SETDICT) != 0) { + // Dictionary was set + header |= DeflaterConstants.PRESET_DICT; + } + header += 31 - (header % 31); + + pending.WriteShortMSB(header); + if ((state & IS_SETDICT) != 0) { + int chksum = engine.Adler; + engine.ResetAdler(); + pending.WriteShortMSB(chksum >> 16); + pending.WriteShortMSB(chksum & 0xffff); + } + + state = BUSY_STATE | (state & (IS_FLUSHING | IS_FINISHING)); + } + + for (;;) { + int count = pending.Flush(output, offset, length); + offset += count; + totalOut += count; + length -= count; + + if (length == 0 || state == FINISHED_STATE) { + break; + } + + if (!engine.Deflate((state & IS_FLUSHING) != 0, (state & IS_FINISHING) != 0)) { + if (state == BUSY_STATE) { + // We need more input now + return origLength - length; + } else if (state == FLUSHING_STATE) { + if (level != NO_COMPRESSION) { + /* We have to supply some lookahead. 8 bit lookahead + * is needed by the zlib inflater, and we must fill + * the next byte, so that all bits are flushed. + */ + int neededbits = 8 + ((-pending.BitCount) & 7); + while (neededbits > 0) { + /* write a static tree block consisting solely of + * an EOF: + */ + pending.WriteBits(2, 10); + neededbits -= 10; + } + } + state = BUSY_STATE; + } else if (state == FINISHING_STATE) { + pending.AlignToByte(); + + // Compressed data is complete. Write footer information if required. + if (!noZlibHeaderOrFooter) { + int adler = engine.Adler; + pending.WriteShortMSB(adler >> 16); + pending.WriteShortMSB(adler & 0xffff); + } + state = FINISHED_STATE; + } + } + } + return origLength - length; + } + + /// + /// Sets the dictionary which should be used in the deflate process. + /// This call is equivalent to setDictionary(dict, 0, dict.Length). + /// + /// + /// the dictionary. + /// + /// + /// if SetInput () or Deflate () were already called or another dictionary was already set. + /// + public void SetDictionary(byte[] dictionary) + { + SetDictionary(dictionary, 0, dictionary.Length); + } + + /// + /// Sets the dictionary which should be used in the deflate process. + /// The dictionary is a byte array containing strings that are + /// likely to occur in the data which should be compressed. The + /// dictionary is not stored in the compressed output, only a + /// checksum. To decompress the output you need to supply the same + /// dictionary again. + /// + /// + /// The dictionary data + /// + /// + /// The index where dictionary information commences. + /// + /// + /// The number of bytes in the dictionary. + /// + /// + /// If SetInput () or Deflate() were already called or another dictionary was already set. + /// + public void SetDictionary(byte[] dictionary, int index, int count) + { + if (state != INIT_STATE) { + throw new InvalidOperationException(); + } + + state = SETDICT_STATE; + engine.SetDictionary(dictionary, index, count); + } + #region Instance Fields + /// + /// Compression level. + /// + int level; + + /// + /// If true no Zlib/RFC1950 headers or footers are generated + /// + bool noZlibHeaderOrFooter; + + /// + /// The current state. + /// + int state; + + /// + /// The total bytes of output written. + /// + long totalOut; + + /// + /// The pending output. + /// + DeflaterPending pending; + + /// + /// The deflater engine. + /// + DeflaterEngine engine; + #endregion + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/DeflaterConstants.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/DeflaterConstants.cs new file mode 100644 index 0000000..c0d69fd --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/DeflaterConstants.cs @@ -0,0 +1,185 @@ +// DeflaterConstants.cs +// +// Copyright (C) 2001 Mike Krueger +// Copyright (C) 2004 John Reilly +// +// This file was translated from java, it was part of the GNU Classpath +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; + +namespace ICSharpCode.SharpZipLib.Silverlight.Zip.Compression +{ + /// + /// This class contains constants used for deflation. + /// + public class DeflaterConstants + { + /// + /// Set to true to enable debugging + /// + public const bool DEBUGGING = false; + + /// + /// Written to Zip file to identify a stored block + /// + public const int STORED_BLOCK = 0; + + /// + /// Identifies static tree in Zip file + /// + public const int STATIC_TREES = 1; + + /// + /// Identifies dynamic tree in Zip file + /// + public const int DYN_TREES = 2; + + /// + /// Header flag indicating a preset dictionary for deflation + /// + public const int PRESET_DICT = 0x20; + + /// + /// Sets internal buffer sizes for Huffman encoding + /// + public const int DEFAULT_MEM_LEVEL = 8; + + /// + /// Internal compression engine constant + /// + public const int MAX_MATCH = 258; + + /// + /// Internal compression engine constant + /// + public const int MIN_MATCH = 3; + + /// + /// Internal compression engine constant + /// + public const int MAX_WBITS = 15; + + /// + /// Internal compression engine constant + /// + public const int WSIZE = 1 << MAX_WBITS; + + /// + /// Internal compression engine constant + /// + public const int WMASK = WSIZE - 1; + + /// + /// Internal compression engine constant + /// + public const int HASH_BITS = DEFAULT_MEM_LEVEL + 7; + + /// + /// Internal compression engine constant + /// + public const int HASH_SIZE = 1 << HASH_BITS; + + /// + /// Internal compression engine constant + /// + public const int HASH_MASK = HASH_SIZE - 1; + + /// + /// Internal compression engine constant + /// + public const int HASH_SHIFT = (HASH_BITS + MIN_MATCH - 1) / MIN_MATCH; + + /// + /// Internal compression engine constant + /// + public const int MIN_LOOKAHEAD = MAX_MATCH + MIN_MATCH + 1; + + /// + /// Internal compression engine constant + /// + public const int MAX_DIST = WSIZE - MIN_LOOKAHEAD; + + /// + /// Internal compression engine constant + /// + public const int PENDING_BUF_SIZE = 1 << (DEFAULT_MEM_LEVEL + 8); + + /// + /// Internal compression engine constant + /// + public static int MAX_BLOCK_SIZE = Math.Min(65535, PENDING_BUF_SIZE - 5); + + /// + /// Internal compression engine constant + /// + public const int DEFLATE_STORED = 0; + + /// + /// Internal compression engine constant + /// + public const int DEFLATE_FAST = 1; + + /// + /// Internal compression engine constant + /// + public const int DEFLATE_SLOW = 2; + + /// + /// Internal compression engine constant + /// + public static int[] GOOD_LENGTH = { 0, 4, 4, 4, 4, 8, 8, 8, 32, 32 }; + + /// + /// Internal compression engine constant + /// + public static int[] MAX_LAZY = { 0, 4, 5, 6, 4, 16, 16, 32, 128, 258 }; + + /// + /// Internal compression engine constant + /// + public static int[] NICE_LENGTH = { 0, 8, 16, 32, 16, 32, 128, 128, 258, 258 }; + + /// + /// Internal compression engine constant + /// + public static int[] MAX_CHAIN = { 0, 4, 8, 32, 16, 32, 128, 256, 1024, 4096 }; + + /// + /// Internal compression engine constant + /// + public static int[] COMPR_FUNC = { 0, 1, 1, 1, 1, 2, 2, 2, 2, 2 }; + + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/DeflaterEngine.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/DeflaterEngine.cs new file mode 100644 index 0000000..c7e1694 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/DeflaterEngine.cs @@ -0,0 +1,769 @@ +// DeflaterEngine.cs +// +// Copyright (C) 2001 Mike Krueger +// Copyright (C) 2004 John Reilly +// +// This file was translated from java, it was part of the GNU Classpath +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using ICSharpCode.SharpZipLib.Silverlight.Checksums; +using ICSharpCode.SharpZipLib.Silverlight.Zip.Compression; + +namespace ICSharpCode.SharpZipLib.Silverlight.Zip.Compression +{ + /// + /// Strategies for deflater + /// + public enum DeflateStrategy + { + /// + /// The default strategy + /// + Default = 0, + + /// + /// This strategy will only allow longer string repetitions. It is + /// useful for random data with a small character set. + /// + Filtered = 1, + + + /// + /// This strategy will not look for string repetitions at all. It + /// only encodes with Huffman trees (which means, that more common + /// characters get a smaller encoding. + /// + HuffmanOnly = 2 + } + + /// + /// Low level compression engine for deflate algorithm which uses a 32K sliding window + /// with secondary compression from Huffman/Shannon-Fano codes. + /// + public class DeflaterEngine : DeflaterConstants + { + #region Constants + const int TooFar = 4096; + #endregion + + #region Constructors + /// + /// Construct instance with pending buffer + /// + /// + /// Pending buffer to use + /// > + public DeflaterEngine(DeflaterPending pending) + { + this.pending = pending; + huffman = new DeflaterHuffman(pending); + adler = new Adler32(); + + window = new byte[2 * WSIZE]; + head = new short[HASH_SIZE]; + prev = new short[WSIZE]; + + // We start at index 1, to avoid an implementation deficiency, that + // we cannot build a repeat pattern at index 0. + blockStart = strstart = 1; + } + + #endregion + + /// + /// Deflate drives actual compression of data + /// + /// True to flush input buffers + /// Finish deflation with the current input. + /// Returns true if progress has been made. + public bool Deflate(bool flush, bool finish) + { + bool progress; + do + { + FillWindow(); + var canFlush = flush && (inputOff == inputEnd); + switch (compressionFunction) + { + case DEFLATE_STORED: + progress = DeflateStored(canFlush, finish); + break; + case DEFLATE_FAST: + progress = DeflateFast(canFlush, finish); + break; + case DEFLATE_SLOW: + progress = DeflateSlow(canFlush, finish); + break; + default: + throw new InvalidOperationException("unknown compressionFunction"); + } + } while (pending.IsFlushed && progress); // repeat while we have no pending output and progress was made + return progress; + } + + /// + /// Sets input data to be deflated. Should only be called when NeedsInput() + /// returns true + /// + /// The buffer containing input data. + /// The offset of the first byte of data. + /// The number of bytes of data to use as input. + public void SetInput(byte[] buffer, int offset, int count) + { + if ( buffer == null ) + { + throw new ArgumentNullException("buffer"); + } + + if ( offset < 0 ) + { + throw new ArgumentOutOfRangeException("offset"); + } + + if ( count < 0 ) + { + throw new ArgumentOutOfRangeException("count"); + } + + if (inputOff < inputEnd) + { + throw new InvalidOperationException("Old input was not completely processed"); + } + + int end = offset + count; + + /* We want to throw an ArrayIndexOutOfBoundsException early. The + * check is very tricky: it also handles integer wrap around. + */ + if ((offset > end) || (end > buffer.Length) ) + { + throw new ArgumentOutOfRangeException("count"); + } + + inputBuf = buffer; + inputOff = offset; + inputEnd = end; + } + + /// + /// Determines if more input is needed. + /// + /// Return true if input is needed via SetInput + public bool NeedsInput() + { + return (inputEnd == inputOff); + } + + /// + /// Set compression dictionary + /// + /// The buffer containing the dictionary data + /// The offset in the buffer for the first byte of data + /// The length of the dictionary data. + public void SetDictionary(byte[] buffer, int offset, int length) + { + adler.Update(buffer, offset, length); + if (length < MIN_MATCH) + { + return; + } + + if (length > MAX_DIST) + { + offset += length - MAX_DIST; + length = MAX_DIST; + } + + Array.Copy(buffer, offset, window, strstart, length); + + UpdateHash(); + --length; + while (--length > 0) + { + InsertString(); + strstart++; + } + strstart += 2; + blockStart = strstart; + } + + /// + /// Reset internal state + /// + public void Reset() + { + huffman.Reset(); + adler.Reset(); + blockStart = strstart = 1; + lookahead = 0; + totalIn = 0; + prevAvailable = false; + matchLen = MIN_MATCH - 1; + + for (int i = 0; i < HASH_SIZE; i++) { + head[i] = 0; + } + + for (int i = 0; i < WSIZE; i++) { + prev[i] = 0; + } + } + + /// + /// Reset Adler checksum + /// + public void ResetAdler() + { + adler.Reset(); + } + + /// + /// Get current value of Adler checksum + /// + public int Adler { + get { + return unchecked((int)adler.Value); + } + } + + /// + /// Total data processed + /// + public int TotalIn { + get { + return totalIn; + } + } + + /// + /// Get/set the deflate strategy + /// + public DeflateStrategy Strategy { + get { + return strategy; + } + set { + strategy = value; + } + } + + /// + /// Set the deflate level (0-9) + /// + /// The value to set the level to. + public void SetLevel(int level) + { + if ( (level < 0) || (level > 9) ) + { + throw new ArgumentOutOfRangeException("level"); + } + + goodLength = GOOD_LENGTH[level]; + max_lazy = MAX_LAZY[level]; + niceLength = NICE_LENGTH[level]; + max_chain = MAX_CHAIN[level]; + + if (COMPR_FUNC[level] == compressionFunction) + { + return; + } + + switch (compressionFunction) { + case DEFLATE_STORED: + if (strstart > blockStart) { + huffman.FlushStoredBlock(window, blockStart, + strstart - blockStart, false); + blockStart = strstart; + } + UpdateHash(); + break; + + case DEFLATE_FAST: + if (strstart > blockStart) { + huffman.FlushBlock(window, blockStart, strstart - blockStart, + false); + blockStart = strstart; + } + break; + + case DEFLATE_SLOW: + if (prevAvailable) { + huffman.TallyLit(window[strstart-1] & 0xff); + } + if (strstart > blockStart) { + huffman.FlushBlock(window, blockStart, strstart - blockStart, false); + blockStart = strstart; + } + prevAvailable = false; + matchLen = MIN_MATCH - 1; + break; + } + compressionFunction = COMPR_FUNC[level]; + } + + /// + /// Fill the window + /// + public void FillWindow() + { + /* If the window is almost full and there is insufficient lookahead, + * move the upper half to the lower one to make room in the upper half. + */ + if (strstart >= WSIZE + MAX_DIST) + { + SlideWindow(); + } + + /* If there is not enough lookahead, but still some input left, + * read in the input + */ + while (lookahead < MIN_LOOKAHEAD && inputOff < inputEnd) + { + int more = 2 * WSIZE - lookahead - strstart; + + if (more > inputEnd - inputOff) + { + more = inputEnd - inputOff; + } + + Array.Copy(inputBuf, inputOff, window, strstart + lookahead, more); + adler.Update(inputBuf, inputOff, more); + + inputOff += more; + totalIn += more; + lookahead += more; + } + + if (lookahead >= MIN_MATCH) + { + UpdateHash(); + } + } + + void UpdateHash() + { +/* + if (DEBUGGING) { + Console.WriteLine("updateHash: "+strstart); + } +*/ + ins_h = (window[strstart] << HASH_SHIFT) ^ window[strstart + 1]; + } + + /// + /// Inserts the current string in the head hash and returns the previous + /// value for this hash. + /// + /// The previous hash value + int InsertString() + { + short match; + var hash = ((ins_h << HASH_SHIFT) ^ window[strstart + (MIN_MATCH -1)]) & HASH_MASK; + prev[strstart & WMASK] = match = head[hash]; + head[hash] = unchecked((short)strstart); + ins_h = hash; + return match & 0xffff; + } + + void SlideWindow() + { + Array.Copy(window, WSIZE, window, 0, WSIZE); + matchStart -= WSIZE; + strstart -= WSIZE; + blockStart -= WSIZE; + + // Slide the hash table (could be avoided with 32 bit values + // at the expense of memory usage). + for (int i = 0; i < HASH_SIZE; ++i) { + int m = head[i] & 0xffff; + head[i] = (short)(m >= WSIZE ? (m - WSIZE) : 0); + } + + // Slide the prev table. + for (int i = 0; i < WSIZE; i++) { + int m = prev[i] & 0xffff; + prev[i] = (short)(m >= WSIZE ? (m - WSIZE) : 0); + } + } + + /// + /// Find the best (longest) string in the window matching the + /// string starting at strstart. + /// + /// Preconditions: + /// + /// strstart + MAX_MATCH <= window.length. + /// + /// + /// True if a match greater than the minimum length is found + bool FindLongestMatch(int curMatch) + { + var chainLength = max_chain; + var niceLength = this.niceLength; + var prev = this.prev; + var scan = strstart; + var best_end = strstart + matchLen; + var best_len = Math.Max(matchLen, MIN_MATCH - 1); + + int limit = Math.Max(strstart - MAX_DIST, 0); + + int strend = strstart + MAX_MATCH - 1; + byte scan_end1 = window[best_end - 1]; + byte scan_end = window[best_end]; + + // Do not waste too much time if we already have a good match: + if (best_len >= goodLength) { + chainLength >>= 2; + } + + /* Do not look for matches beyond the end of the input. This is necessary + * to make deflate deterministic. + */ + if (niceLength > lookahead) { + niceLength = lookahead; + } + + do { + if (window[curMatch + best_len] != scan_end || + window[curMatch + best_len - 1] != scan_end1 || + window[curMatch] != window[scan] || + window[curMatch + 1] != window[scan + 1]) { + continue; + } + + int match = curMatch + 2; + scan += 2; + + /* We check for insufficient lookahead only every 8th comparison; + * the 256th check will be made at strstart + 258. + */ + while ( + window[++scan] == window[++match] && + window[++scan] == window[++match] && + window[++scan] == window[++match] && + window[++scan] == window[++match] && + window[++scan] == window[++match] && + window[++scan] == window[++match] && + window[++scan] == window[++match] && + window[++scan] == window[++match] && + (scan < strend)) + { + // Do nothing + } + + if (scan > best_end) { + matchStart = curMatch; + best_end = scan; + best_len = scan - strstart; + + if (best_len >= niceLength) { + break; + } + + scan_end1 = window[best_end - 1]; + scan_end = window[best_end]; + } + scan = strstart; + } while ((curMatch = (prev[curMatch & WMASK] & 0xffff)) > limit && --chainLength != 0); + + matchLen = Math.Min(best_len, lookahead); + return matchLen >= MIN_MATCH; + } + + bool DeflateStored(bool flush, bool finish) + { + if (!flush && (lookahead == 0)) { + return false; + } + + strstart += lookahead; + lookahead = 0; + + int storedLength = strstart - blockStart; + + if ((storedLength >= MAX_BLOCK_SIZE) || // Block is full + (blockStart < WSIZE && storedLength >= MAX_DIST) || // Block may move out of window + flush) { + bool lastBlock = finish; + if (storedLength > MAX_BLOCK_SIZE) { + storedLength = MAX_BLOCK_SIZE; + lastBlock = false; + } + + huffman.FlushStoredBlock(window, blockStart, storedLength, lastBlock); + blockStart += storedLength; + return !lastBlock; + } + return true; + } + + bool DeflateFast(bool flush, bool finish) + { + if (lookahead < MIN_LOOKAHEAD && !flush) { + return false; + } + + while (lookahead >= MIN_LOOKAHEAD || flush) { + if (lookahead == 0) { + // We are flushing everything + huffman.FlushBlock(window, blockStart, strstart - blockStart, finish); + blockStart = strstart; + return false; + } + + if (strstart > 2 * WSIZE - MIN_LOOKAHEAD) { + /* slide window, as FindLongestMatch needs this. + * This should only happen when flushing and the window + * is almost full. + */ + SlideWindow(); + } + + int hashHead; + if (lookahead >= MIN_MATCH && + (hashHead = InsertString()) != 0 && + strategy != DeflateStrategy.HuffmanOnly && + strstart - hashHead <= MAX_DIST && + FindLongestMatch(hashHead)) { + // longestMatch sets matchStart and matchLen + var full = huffman.TallyDist(strstart - matchStart, matchLen); + + lookahead -= matchLen; + if (matchLen <= max_lazy && lookahead >= MIN_MATCH) { + while (--matchLen > 0) { + ++strstart; + InsertString(); + } + ++strstart; + } else { + strstart += matchLen; + if (lookahead >= MIN_MATCH - 1) { + UpdateHash(); + } + } + matchLen = MIN_MATCH - 1; + if (!full) { + continue; + } + } else { + // No match found + huffman.TallyLit(window[strstart] & 0xff); + ++strstart; + --lookahead; + } + + if (huffman.IsFull()) { + bool lastBlock = finish && (lookahead == 0); + huffman.FlushBlock(window, blockStart, strstart - blockStart, lastBlock); + blockStart = strstart; + return !lastBlock; + } + } + return true; + } + + bool DeflateSlow(bool flush, bool finish) + { + if (lookahead < MIN_LOOKAHEAD && !flush) { + return false; + } + + while (lookahead >= MIN_LOOKAHEAD || flush) { + if (lookahead == 0) { + if (prevAvailable) { + huffman.TallyLit(window[strstart-1] & 0xff); + } + prevAvailable = false; + + // We are flushing everything + huffman.FlushBlock(window, blockStart, strstart - blockStart, + finish); + blockStart = strstart; + return false; + } + + if (strstart >= 2 * WSIZE - MIN_LOOKAHEAD) { + /* slide window, as FindLongestMatch needs this. + * This should only happen when flushing and the window + * is almost full. + */ + SlideWindow(); + } + + int prevMatch = matchStart; + int prevLen = matchLen; + if (lookahead >= MIN_MATCH) { + + int hashHead = InsertString(); + + if (strategy != DeflateStrategy.HuffmanOnly && + hashHead != 0 && + strstart - hashHead <= MAX_DIST && + FindLongestMatch(hashHead)) { + + // longestMatch sets matchStart and matchLen + + // Discard match if too small and too far away + if (matchLen <= 5 && (strategy == DeflateStrategy.Filtered || (matchLen == MIN_MATCH && strstart - matchStart > TooFar))) { + matchLen = MIN_MATCH - 1; + } + } + } + + // previous match was better + if ((prevLen >= MIN_MATCH) && (matchLen <= prevLen) ) { + huffman.TallyDist(strstart - 1 - prevMatch, prevLen); + prevLen -= 2; + do { + strstart++; + lookahead--; + if (lookahead >= MIN_MATCH) { + InsertString(); + } + } while (--prevLen > 0); + + strstart ++; + lookahead--; + prevAvailable = false; + matchLen = MIN_MATCH - 1; + } else { + if (prevAvailable) { + huffman.TallyLit(window[strstart-1] & 0xff); + } + prevAvailable = true; + strstart++; + lookahead--; + } + + if (huffman.IsFull()) { + int len = strstart - blockStart; + if (prevAvailable) { + len--; + } + bool lastBlock = (finish && (lookahead == 0) && !prevAvailable); + huffman.FlushBlock(window, blockStart, len, lastBlock); + blockStart += len; + return !lastBlock; + } + } + return true; + } + + #region Instance Fields + + // Hash index of string to be inserted + int ins_h; + + /// + /// Hashtable, hashing three characters to an index for window, so + /// that window[index]..window[index+2] have this hash code. + /// Note that the array should really be unsigned short, so you need + /// to and the values with 0xffff. + /// + readonly short[] head; + + /// + /// prev[index & WMASK] points to the previous index that has the + /// same hash code as the string starting at index. This way + /// entries with the same hash code are in a linked list. + /// Note that the array should really be unsigned short, so you need + /// to and the values with 0xffff. + /// + readonly short[] prev; + + int matchStart; + // Length of best match + int matchLen; + // Set if previous match exists + bool prevAvailable; + int blockStart; + + /// + /// Points to the current character in the window. + /// + int strstart; + + /// + /// lookahead is the number of characters starting at strstart in + /// window that are valid. + /// So window[strstart] until window[strstart+lookahead-1] are valid + /// characters. + /// + int lookahead; + + /// + /// This array contains the part of the uncompressed stream that + /// is of relevance. The current character is indexed by strstart. + /// + readonly byte[] window; + + DeflateStrategy strategy; + int max_chain, max_lazy, niceLength, goodLength; + + /// + /// The current compression function. + /// + int compressionFunction; + + /// + /// The input data for compression. + /// + byte[] inputBuf; + + /// + /// The total bytes of input read. + /// + int totalIn; + + /// + /// The offset into inputBuf, where input data starts. + /// + int inputOff; + + /// + /// The end offset of the input data. + /// + int inputEnd; + + readonly DeflaterPending pending; + readonly DeflaterHuffman huffman; + + /// + /// The adler checksum + /// + readonly Adler32 adler; + #endregion + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/DeflaterHuffman.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/DeflaterHuffman.cs new file mode 100644 index 0000000..8b1a6bf --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/DeflaterHuffman.cs @@ -0,0 +1,858 @@ +// DeflaterHuffman.cs +// +// Copyright (C) 2001 Mike Krueger +// Copyright (C) 2004 John Reilly +// +// This file was translated from java, it was part of the GNU Classpath +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using ICSharpCode.SharpZipLib.Silverlight.Zip.Compression; + +namespace ICSharpCode.SharpZipLib.Silverlight.Zip.Compression +{ + /// + /// This is the DeflaterHuffman class. + /// + /// This class is not thread safe. This is inherent in the API, due + /// to the split of Deflate and SetInput. + /// + /// author of the original java version : Jochen Hoenicke + /// + public class DeflaterHuffman + { + const int BUFSIZE = 1 << (DeflaterConstants.DEFAULT_MEM_LEVEL + 6); + const int LITERAL_NUM = 286; + + // Number of distance codes + const int DIST_NUM = 30; + // Number of codes used to transfer bit lengths + const int BITLEN_NUM = 19; + + // repeat previous bit length 3-6 times (2 bits of repeat count) + const int REP_3_6 = 16; + // repeat a zero length 3-10 times (3 bits of repeat count) + const int REP_3_10 = 17; + // repeat a zero length 11-138 times (7 bits of repeat count) + const int REP_11_138 = 18; + + const int EOF_SYMBOL = 256; + + // The lengths of the bit length codes are sent in order of decreasing + // probability, to avoid transmitting the lengths for unused bit length codes. + static readonly int[] BL_ORDER = { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 }; + + static readonly byte[] bit4Reverse = { + 0, + 8, + 4, + 12, + 2, + 10, + 6, + 14, + 1, + 9, + 5, + 13, + 3, + 11, + 7, + 15 + }; + + static readonly short[] staticLCodes; + static readonly byte[] staticLLength; + static readonly short[] staticDCodes; + static readonly byte[] staticDLength; + + class Tree + { + #region Instance Fields + public readonly short[] freqs; + + public byte[] length; + + public readonly int minNumCodes; + + public int numCodes; + + short[] codes; + readonly int[] bl_counts; + readonly int maxLength; + readonly DeflaterHuffman dh; + #endregion + + #region Constructors + public Tree(DeflaterHuffman dh, int elems, int minCodes, int maxLength) + { + this.dh = dh; + minNumCodes = minCodes; + this.maxLength = maxLength; + freqs = new short[elems]; + bl_counts = new int[maxLength]; + } + + #endregion + + /// + /// Resets the internal state of the tree + /// + public void Reset() + { + for (int i = 0; i < freqs.Length; i++) { + freqs[i] = 0; + } + codes = null; + length = null; + } + + public void WriteSymbol(int code) + { + // if (DeflaterConstants.DEBUGGING) { + // freqs[code]--; + // // Console.Write("writeSymbol("+freqs.length+","+code+"): "); + // } + dh.pending.WriteBits(codes[code] & 0xffff, length[code]); + } + + /// + /// Set static codes and length + /// + /// new codes + /// length for new codes + public void SetStaticCodes(short[] staticCodes, byte[] staticLengths) + { + codes = staticCodes; + length = staticLengths; + } + + /// + /// Build dynamic codes and lengths + /// + public void BuildCodes() + { + var nextCode = new int[maxLength]; + var code = 0; + + codes = new short[freqs.Length]; + + // if (DeflaterConstants.DEBUGGING) { + // //Console.WriteLine("buildCodes: "+freqs.Length); + // } + + for (int bits = 0; bits < maxLength; bits++) { + nextCode[bits] = code; + code += bl_counts[bits] << (15 - bits); + + // if (DeflaterConstants.DEBUGGING) { + // //Console.WriteLine("bits: " + ( bits + 1) + " count: " + bl_counts[bits] + // +" nextCode: "+code); + // } + } + for (int i=0; i < numCodes; i++) { + int bits = length[i]; + if (bits > 0) { + + // if (DeflaterConstants.DEBUGGING) { + // //Console.WriteLine("codes["+i+"] = rev(" + nextCode[bits-1]+"), + // +bits); + // } + + codes[i] = BitReverse(nextCode[bits-1]); + nextCode[bits-1] += 1 << (16 - bits); + } + } + } + + public void BuildTree() + { + int numSymbols = freqs.Length; + + /* heap is a priority queue, sorted by frequency, least frequent + * nodes first. The heap is a binary tree, with the property, that + * the parent node is smaller than both child nodes. This assures + * that the smallest node is the first parent. + * + * The binary tree is encoded in an array: 0 is root node and + * the nodes 2*n+1, 2*n+2 are the child nodes of node n. + */ + var heap = new int[numSymbols]; + var heapLen = 0; + var maxCode = 0; + for (var n = 0; n < numSymbols; n++) { + int freq = freqs[n]; + if (freq == 0) + { + continue; + } + + // Insert n into heap + var pos = heapLen++; + int ppos; + while (pos > 0 && freqs[heap[ppos = (pos - 1) / 2]] > freq) { + heap[pos] = heap[ppos]; + pos = ppos; + } + heap[pos] = n; + + maxCode = n; + } + + /* We could encode a single literal with 0 bits but then we + * don't see the literals. Therefore we force at least two + * literals to avoid this case. We don't care about order in + * this case, both literals get a 1 bit code. + */ + while (heapLen < 2) { + int node = maxCode < 2 ? ++maxCode : 0; + heap[heapLen++] = node; + } + + numCodes = Math.Max(maxCode + 1, minNumCodes); + + var numLeafs = heapLen; + var childs = new int[4 * heapLen - 2]; + var values = new int[2 * heapLen - 1]; + var numNodes = numLeafs; + for (var i = 0; i < heapLen; i++) { + var node = heap[i]; + childs[2 * i] = node; + childs[2 * i + 1] = -1; + values[i] = freqs[node] << 8; + heap[i] = i; + } + + /* Construct the Huffman tree by repeatedly combining the least two + * frequent nodes. + */ + do { + int first = heap[0]; + int last = heap[--heapLen]; + + // Propagate the hole to the leafs of the heap + int ppos = 0; + int path = 1; + + while (path < heapLen) { + if (path + 1 < heapLen && values[heap[path]] > values[heap[path+1]]) { + path++; + } + + heap[ppos] = heap[path]; + ppos = path; + path = path * 2 + 1; + } + + /* Now propagate the last element down along path. Normally + * it shouldn't go too deep. + */ + int lastVal = values[last]; + while ((path = ppos) > 0 && values[heap[ppos = (path - 1)/2]] > lastVal) { + heap[path] = heap[ppos]; + } + heap[path] = last; + + + int second = heap[0]; + + // Create a new node father of first and second + last = numNodes++; + childs[2 * last] = first; + childs[2 * last + 1] = second; + int mindepth = Math.Min(values[first] & 0xff, values[second] & 0xff); + values[last] = lastVal = values[first] + values[second] - mindepth + 1; + + // Again, propagate the hole to the leafs + ppos = 0; + path = 1; + + while (path < heapLen) { + if (path + 1 < heapLen && values[heap[path]] > values[heap[path+1]]) { + path++; + } + + heap[ppos] = heap[path]; + ppos = path; + path = ppos * 2 + 1; + } + + // Now propagate the new element down along path + while ((path = ppos) > 0 && values[heap[ppos = (path - 1)/2]] > lastVal) { + heap[path] = heap[ppos]; + } + heap[path] = last; + } while (heapLen > 1); + + if (heap[0] != childs.Length / 2 - 1) { + throw new SharpZipBaseException("Heap invariant violated"); + } + + BuildLength(childs); + } + + /// + /// Get encoded length + /// + /// Encoded length, the sum of frequencies * lengths + public int GetEncodedLength() + { + int len = 0; + for (int i = 0; i < freqs.Length; i++) { + len += freqs[i] * length[i]; + } + return len; + } + + /// + /// Scan a literal or distance tree to determine the frequencies of the codes + /// in the bit length tree. + /// + public void CalcBLFreq(Tree blTree) + { + var curlen = -1; /* length of current code */ + var i = 0; + + while (i < numCodes) { + var count = 1; /* repeat count of the current code */ + int nextlen = length[i]; + int max_count; /* max repeat count */ + int min_count; /* min repeat count */ + if (nextlen == 0) { + max_count = 138; + min_count = 3; + } else { + max_count = 6; + min_count = 3; + if (curlen != nextlen) { + blTree.freqs[nextlen]++; + count = 0; + } + } + curlen = nextlen; + i++; + + while (i < numCodes && curlen == length[i]) { + i++; + if (++count >= max_count) { + break; + } + } + + if (count < min_count) { + blTree.freqs[curlen] += (short)count; + } else if (curlen != 0) { + blTree.freqs[REP_3_6]++; + } else if (count <= 10) { + blTree.freqs[REP_3_10]++; + } else { + blTree.freqs[REP_11_138]++; + } + } + } + + /// + /// Write tree values + /// + /// Tree to write + public void WriteTree(Tree blTree) + { + var curlen = -1; // length of current code + + var i = 0; + while (i < numCodes) { + var count = 1; // repeat count of the current code + int nextlen = length[i]; + int max_count; // max repeat count + int min_count; // min repeat count + if (nextlen == 0) { + max_count = 138; + min_count = 3; + } else { + max_count = 6; + min_count = 3; + if (curlen != nextlen) { + blTree.WriteSymbol(nextlen); + count = 0; + } + } + curlen = nextlen; + i++; + + while (i < numCodes && curlen == length[i]) { + i++; + if (++count >= max_count) { + break; + } + } + + if (count < min_count) { + while (count-- > 0) { + blTree.WriteSymbol(curlen); + } + } else if (curlen != 0) { + blTree.WriteSymbol(REP_3_6); + dh.pending.WriteBits(count - 3, 2); + } else if (count <= 10) { + blTree.WriteSymbol(REP_3_10); + dh.pending.WriteBits(count - 3, 3); + } else { + blTree.WriteSymbol(REP_11_138); + dh.pending.WriteBits(count - 11, 7); + } + } + } + + void BuildLength(int[] childs) + { + length = new byte [freqs.Length]; + var numNodes = childs.Length / 2; + var numLeafs = (numNodes + 1) / 2; + var overflow = 0; + + for (var i = 0; i < maxLength; i++) { + bl_counts[i] = 0; + } + + // First calculate optimal bit lengths + var lengths = new int[numNodes]; + lengths[numNodes-1] = 0; + + for (int i = numNodes - 1; i >= 0; i--) { + if (childs[2 * i + 1] != -1) { + int bitLength = lengths[i] + 1; + if (bitLength > maxLength) { + bitLength = maxLength; + overflow++; + } + lengths[childs[2 * i]] = lengths[childs[2 * i + 1]] = bitLength; + } else { + // A leaf node + var bitLength = lengths[i]; + bl_counts[bitLength - 1]++; + length[childs[2*i]] = (byte) lengths[i]; + } + } + + // if (DeflaterConstants.DEBUGGING) { + // //Console.WriteLine("Tree "+freqs.Length+" lengths:"); + // for (int i=0; i < numLeafs; i++) { + // //Console.WriteLine("Node "+childs[2*i]+" freq: "+freqs[childs[2*i]] + // + " len: "+length[childs[2*i]]); + // } + // } + + if (overflow == 0) { + return; + } + + int incrBitLen = maxLength - 1; + do { + // Find the first bit length which could increase: + while (bl_counts[--incrBitLen] == 0) + { + + } + + // Move this node one down and remove a corresponding + // number of overflow nodes. + do { + bl_counts[incrBitLen]--; + bl_counts[++incrBitLen]++; + overflow -= 1 << (maxLength - 1 - incrBitLen); + } while (overflow > 0 && incrBitLen < maxLength - 1); + } while (overflow > 0); + + /* We may have overshot above. Move some nodes from maxLength to + * maxLength-1 in that case. + */ + bl_counts[maxLength-1] += overflow; + bl_counts[maxLength-2] -= overflow; + + /* Now recompute all bit lengths, scanning in increasing + * frequency. It is simpler to reconstruct all lengths instead of + * fixing only the wrong ones. This idea is taken from 'ar' + * written by Haruhiko Okumura. + * + * The nodes were inserted with decreasing frequency into the childs + * array. + */ + int nodePtr = 2 * numLeafs; + for (int bits = maxLength; bits != 0; bits--) { + int n = bl_counts[bits-1]; + while (n > 0) { + int childPtr = 2*childs[nodePtr++]; + if (childs[childPtr + 1] == -1) { + // We found another leaf + length[childs[childPtr]] = (byte) bits; + n--; + } + } + } + // if (DeflaterConstants.DEBUGGING) { + // //Console.WriteLine("*** After overflow elimination. ***"); + // for (int i=0; i < numLeafs; i++) { + // //Console.WriteLine("Node "+childs[2*i]+" freq: "+freqs[childs[2*i]] + // + " len: "+length[childs[2*i]]); + // } + // } + } + + } + + #region Instance Fields + /// + /// Pending buffer to use + /// + public DeflaterPending pending; + + readonly Tree literalTree; + readonly Tree distTree; + readonly Tree blTree; + + // Buffer for distances + readonly short[] d_buf; + readonly byte[] l_buf; + int last_lit; + int extra_bits; + #endregion + + static DeflaterHuffman() + { + // See RFC 1951 3.2.6 + // Literal codes + staticLCodes = new short[LITERAL_NUM]; + staticLLength = new byte[LITERAL_NUM]; + + int i = 0; + while (i < 144) { + staticLCodes[i] = BitReverse((0x030 + i) << 8); + staticLLength[i++] = 8; + } + + while (i < 256) { + staticLCodes[i] = BitReverse((0x190 - 144 + i) << 7); + staticLLength[i++] = 9; + } + + while (i < 280) { + staticLCodes[i] = BitReverse((0x000 - 256 + i) << 9); + staticLLength[i++] = 7; + } + + while (i < LITERAL_NUM) { + staticLCodes[i] = BitReverse((0x0c0 - 280 + i) << 8); + staticLLength[i++] = 8; + } + + // Distance codes + staticDCodes = new short[DIST_NUM]; + staticDLength = new byte[DIST_NUM]; + for (i = 0; i < DIST_NUM; i++) { + staticDCodes[i] = BitReverse(i << 11); + staticDLength[i] = 5; + } + } + + /// + /// Construct instance with pending buffer + /// + /// Pending buffer to use + public DeflaterHuffman(DeflaterPending pending) + { + this.pending = pending; + + literalTree = new Tree(this, LITERAL_NUM, 257, 15); + distTree = new Tree(this, DIST_NUM, 1, 15); + blTree = new Tree(this, BITLEN_NUM, 4, 7); + + d_buf = new short[BUFSIZE]; + l_buf = new byte [BUFSIZE]; + } + + /// + /// Reset internal state + /// + public void Reset() + { + last_lit = 0; + extra_bits = 0; + literalTree.Reset(); + distTree.Reset(); + blTree.Reset(); + } + + /// + /// Write all trees to pending buffer + /// + /// The number/rank of treecodes to send. + public void SendAllTrees(int blTreeCodes) + { + blTree.BuildCodes(); + literalTree.BuildCodes(); + distTree.BuildCodes(); + pending.WriteBits(literalTree.numCodes - 257, 5); + pending.WriteBits(distTree.numCodes - 1, 5); + pending.WriteBits(blTreeCodes - 4, 4); + for (int rank = 0; rank < blTreeCodes; rank++) { + pending.WriteBits(blTree.length[BL_ORDER[rank]], 3); + } + literalTree.WriteTree(blTree); + distTree.WriteTree(blTree); + } + + /// + /// Compress current buffer writing data to pending buffer + /// + public void CompressBlock() + { + for (int i = 0; i < last_lit; i++) { + int litlen = l_buf[i] & 0xff; + int dist = d_buf[i]; + if (dist-- != 0) { + // if (DeflaterConstants.DEBUGGING) { + // Console.Write("["+(dist+1)+","+(litlen+3)+"]: "); + // } + + int lc = Lcode(litlen); + literalTree.WriteSymbol(lc); + + int bits = (lc - 261) / 4; + if (bits > 0 && bits <= 5) { + pending.WriteBits(litlen & ((1 << bits) - 1), bits); + } + + int dc = Dcode(dist); + distTree.WriteSymbol(dc); + + bits = dc / 2 - 1; + if (bits > 0) { + pending.WriteBits(dist & ((1 << bits) - 1), bits); + } + } else { + // if (DeflaterConstants.DEBUGGING) { + // if (litlen > 32 && litlen < 127) { + // Console.Write("("+(char)litlen+"): "); + // } else { + // Console.Write("{"+litlen+"}: "); + // } + // } + literalTree.WriteSymbol(litlen); + } + } + literalTree.WriteSymbol(EOF_SYMBOL); + } + + /// + /// Flush block to output with no compression + /// + /// Data to write + /// Index of first byte to write + /// Count of bytes to write + /// True if this is the last block + public void FlushStoredBlock(byte[] stored, int storedOffset, int storedLength, bool lastBlock) + { + pending.WriteBits((DeflaterConstants.STORED_BLOCK << 1) + (lastBlock ? 1 : 0), 3); + pending.AlignToByte(); + pending.WriteShort(storedLength); + pending.WriteShort(~storedLength); + pending.WriteBlock(stored, storedOffset, storedLength); + Reset(); + } + + /// + /// Flush block to output with compression + /// + /// Data to flush + /// Index of first byte to flush + /// Count of bytes to flush + /// True if this is the last block + public void FlushBlock(byte[] stored, int storedOffset, int storedLength, bool lastBlock) + { + literalTree.freqs[EOF_SYMBOL]++; + + // Build trees + literalTree.BuildTree(); + distTree.BuildTree(); + + // Calculate bitlen frequency + literalTree.CalcBLFreq(blTree); + distTree.CalcBLFreq(blTree); + + // Build bitlen tree + blTree.BuildTree(); + + int blTreeCodes = 4; + for (int i = 18; i > blTreeCodes; i--) { + if (blTree.length[BL_ORDER[i]] > 0) { + blTreeCodes = i+1; + } + } + int opt_len = 14 + blTreeCodes * 3 + blTree.GetEncodedLength() + + literalTree.GetEncodedLength() + distTree.GetEncodedLength() + + extra_bits; + + int static_len = extra_bits; + for (int i = 0; i < LITERAL_NUM; i++) { + static_len += literalTree.freqs[i] * staticLLength[i]; + } + for (int i = 0; i < DIST_NUM; i++) { + static_len += distTree.freqs[i] * staticDLength[i]; + } + if (opt_len >= static_len) { + // Force static trees + opt_len = static_len; + } + + if (storedOffset >= 0 && storedLength + 4 < opt_len >> 3) { + // Store Block + + // if (DeflaterConstants.DEBUGGING) { + // //Console.WriteLine("Storing, since " + storedLength + " < " + opt_len + // + " <= " + static_len); + // } + FlushStoredBlock(stored, storedOffset, storedLength, lastBlock); + } else if (opt_len == static_len) { + // Encode with static tree + pending.WriteBits((DeflaterConstants.STATIC_TREES << 1) + (lastBlock ? 1 : 0), 3); + literalTree.SetStaticCodes(staticLCodes, staticLLength); + distTree.SetStaticCodes(staticDCodes, staticDLength); + CompressBlock(); + Reset(); + } else { + // Encode with dynamic tree + pending.WriteBits((DeflaterConstants.DYN_TREES << 1) + (lastBlock ? 1 : 0), 3); + SendAllTrees(blTreeCodes); + CompressBlock(); + Reset(); + } + } + + /// + /// Get value indicating if internal buffer is full + /// + /// true if buffer is full + public bool IsFull() + { + return last_lit >= BUFSIZE; + } + + /// + /// Add literal to buffer + /// + /// Literal value to add to buffer. + /// Value indicating internal buffer is full + public bool TallyLit(int literal) + { + // if (DeflaterConstants.DEBUGGING) { + // if (lit > 32 && lit < 127) { + // //Console.WriteLine("("+(char)lit+")"); + // } else { + // //Console.WriteLine("{"+lit+"}"); + // } + // } + d_buf[last_lit] = 0; + l_buf[last_lit++] = (byte)literal; + literalTree.freqs[literal]++; + return IsFull(); + } + + /// + /// Add distance code and length to literal and distance trees + /// + /// Distance code + /// Length + /// Value indicating if internal buffer is full + public bool TallyDist(int distance, int length) + { + // if (DeflaterConstants.DEBUGGING) { + // //Console.WriteLine("[" + distance + "," + length + "]"); + // } + + d_buf[last_lit] = (short)distance; + l_buf[last_lit++] = (byte)(length - 3); + + int lc = Lcode(length - 3); + literalTree.freqs[lc]++; + if (lc >= 265 && lc < 285) { + extra_bits += (lc - 261) / 4; + } + + int dc = Dcode(distance - 1); + distTree.freqs[dc]++; + if (dc >= 4) { + extra_bits += dc / 2 - 1; + } + return IsFull(); + } + + + /// + /// Reverse the bits of a 16 bit value. + /// + /// Value to reverse bits + /// Value with bits reversed + public static short BitReverse(int toReverse) + { + return (short) (bit4Reverse[toReverse & 0xF] << 12 | + bit4Reverse[(toReverse >> 4) & 0xF] << 8 | + bit4Reverse[(toReverse >> 8) & 0xF] << 4 | + bit4Reverse[toReverse >> 12]); + } + + static int Lcode(int length) + { + if (length == 255) { + return 285; + } + + int code = 257; + while (length >= 8) { + code += 4; + length >>= 1; + } + return code + length; + } + + static int Dcode(int distance) + { + int code = 0; + while (distance >= 4) { + code += 2; + distance >>= 1; + } + return code + distance; + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/DeflaterPending.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/DeflaterPending.cs new file mode 100644 index 0000000..2ba56f2 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/DeflaterPending.cs @@ -0,0 +1,58 @@ +// DeflaterPending.cs +// +// Copyright (C) 2001 Mike Krueger +// Copyright (C) 2004 John Reilly +// +// This file was translated from java, it was part of the GNU Classpath +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using ICSharpCode.SharpZipLib.Silverlight.Zip.Compression; + +namespace ICSharpCode.SharpZipLib.Silverlight.Zip.Compression +{ + /// + /// This class stores the pending output of the Deflater. + /// + /// author of the original java version : Jochen Hoenicke + /// + public class DeflaterPending : PendingBuffer + { + /// + /// Construct instance with default buffer size + /// + public DeflaterPending() : base(DeflaterConstants.PENDING_BUF_SIZE) + { + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/Inflater.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/Inflater.cs new file mode 100644 index 0000000..a671177 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/Inflater.cs @@ -0,0 +1,856 @@ +// Inflater.cs +// +// Copyright (C) 2001 Mike Krueger +// Copyright (C) 2004 John Reilly +// +// This file was translated from java, it was part of the GNU Classpath +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using ICSharpCode.SharpZipLib.Silverlight.Checksums; +using ICSharpCode.SharpZipLib.Silverlight.Zip.Compression; +using ICSharpCode.SharpZipLib.Silverlight.Zip.Compression.Streams; + +namespace ICSharpCode.SharpZipLib.Silverlight.Zip.Compression +{ + /// + /// Inflater is used to decompress data that has been compressed according + /// to the "deflate" standard described in rfc1951. + /// + /// By default Zlib (rfc1950) headers and footers are expected in the input. + /// You can use constructor public Inflater(bool noHeader) passing true + /// if there is no Zlib header information + /// + /// The usage is as following. First you have to set some input with + /// SetInput(), then Inflate() it. If inflate doesn't + /// inflate any bytes there may be three reasons: + ///
      + ///
    • IsNeedingInput() returns true because the input buffer is empty. + /// You have to provide more input with SetInput(). + /// NOTE: IsNeedingInput() also returns true when, the stream is finished. + ///
    • + ///
    • IsNeedingDictionary() returns true, you have to provide a preset + /// dictionary with SetDictionary().
    • + ///
    • IsFinished returns true, the inflater has finished.
    • + ///
    + /// Once the first output byte is produced, a dictionary will not be + /// needed at a later stage. + /// + /// author of the original java version : John Leuner, Jochen Hoenicke + ///
    + public class Inflater + { + #region Constants/Readonly + /// + /// Copy lengths for literal codes 257..285 + /// + static readonly int[] CPLENS = { + 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, + 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258 + }; + + /// + /// Extra bits for literal codes 257..285 + /// + static readonly int[] CPLEXT = { + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, + 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0 + }; + + /// + /// Copy offsets for distance codes 0..29 + /// + static readonly int[] CPDIST = { + 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, + 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, + 8193, 12289, 16385, 24577 + }; + + /// + /// Extra bits for distance codes + /// + static readonly int[] CPDEXT = { + 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, + 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, + 12, 12, 13, 13 + }; + + /// + /// These are the possible states for an inflater + /// + const int DECODE_HEADER = 0; + const int DECODE_DICT = 1; + const int DECODE_BLOCKS = 2; + const int DECODE_STORED_LEN1 = 3; + const int DECODE_STORED_LEN2 = 4; + const int DECODE_STORED = 5; + const int DECODE_DYN_HEADER = 6; + const int DECODE_HUFFMAN = 7; + const int DECODE_HUFFMAN_LENBITS = 8; + const int DECODE_HUFFMAN_DIST = 9; + const int DECODE_HUFFMAN_DISTBITS = 10; + const int DECODE_CHKSUM = 11; + const int FINISHED = 12; + #endregion + + #region Instance Fields + /// + /// This variable contains the current state. + /// + int mode; + + /// + /// The adler checksum of the dictionary or of the decompressed + /// stream, as it is written in the header resp. footer of the + /// compressed stream. + /// Only valid if mode is DECODE_DICT or DECODE_CHKSUM. + /// + int readAdler; + + /// + /// The number of bits needed to complete the current state. This + /// is valid, if mode is DECODE_DICT, DECODE_CHKSUM, + /// DECODE_HUFFMAN_LENBITS or DECODE_HUFFMAN_DISTBITS. + /// + int neededBits; + int repLength; + int repDist; + int uncomprLen; + + /// + /// True, if the last block flag was set in the last block of the + /// inflated stream. This means that the stream ends after the + /// current block. + /// + bool isLastBlock; + + /// + /// The total number of inflated bytes. + /// + long totalOut; + + /// + /// The total number of bytes set with setInput(). This is not the + /// value returned by the TotalIn property, since this also includes the + /// unprocessed input. + /// + long totalIn; + + /// + /// This variable stores the noHeader flag that was given to the constructor. + /// True means, that the inflated stream doesn't contain a Zlib header or + /// footer. + /// + bool noHeader; + + StreamManipulator input; + OutputWindow outputWindow; + InflaterDynHeader dynHeader; + InflaterHuffmanTree litlenTree, distTree; + Adler32 adler; + #endregion + + #region Constructors + /// + /// Creates a new inflater or RFC1951 decompressor + /// RFC1950/Zlib headers and footers will be expected in the input data + /// + public Inflater() : this(false) + { + } + + /// + /// Creates a new inflater. + /// + /// + /// True if no RFC1950/Zlib header and footer fields are expected in the input data + /// + /// This is used for GZIPed/Zipped input. + /// + /// For compatibility with + /// Sun JDK you should provide one byte of input more than needed in + /// this case. + /// + public Inflater(bool noHeader) + { + this.noHeader = noHeader; + this.adler = new Adler32(); + input = new StreamManipulator(); + outputWindow = new OutputWindow(); + mode = noHeader ? DECODE_BLOCKS : DECODE_HEADER; + } + #endregion + + /// + /// Resets the inflater so that a new stream can be decompressed. All + /// pending input and output will be discarded. + /// + public void Reset() + { + mode = noHeader ? DECODE_BLOCKS : DECODE_HEADER; + totalIn = 0; + totalOut = 0; + input.Reset(); + outputWindow.Reset(); + dynHeader = null; + litlenTree = null; + distTree = null; + isLastBlock = false; + adler.Reset(); + } + + /// + /// Decodes a zlib/RFC1950 header. + /// + /// + /// False if more input is needed. + /// + /// + /// The header is invalid. + /// + private bool DecodeHeader() + { + int header = input.PeekBits(16); + if (header < 0) { + return false; + } + input.DropBits(16); + + // The header is written in "wrong" byte order + header = ((header << 8) | (header >> 8)) & 0xffff; + if (header % 31 != 0) { + throw new SharpZipBaseException("Header checksum illegal"); + } + + if ((header & 0x0f00) != (Deflater.DEFLATED << 8)) { + throw new SharpZipBaseException("Compression Method unknown"); + } + + /* Maximum size of the backwards window in bits. + * We currently ignore this, but we could use it to make the + * inflater window more space efficient. On the other hand the + * full window (15 bits) is needed most times, anyway. + int max_wbits = ((header & 0x7000) >> 12) + 8; + */ + + if ((header & 0x0020) == 0) { // Dictionary flag? + mode = DECODE_BLOCKS; + } else { + mode = DECODE_DICT; + neededBits = 32; + } + return true; + } + + /// + /// Decodes the dictionary checksum after the deflate header. + /// + /// + /// False if more input is needed. + /// + private bool DecodeDict() + { + while (neededBits > 0) { + int dictByte = input.PeekBits(8); + if (dictByte < 0) { + return false; + } + input.DropBits(8); + readAdler = (readAdler << 8) | dictByte; + neededBits -= 8; + } + return false; + } + + /// + /// Decodes the huffman encoded symbols in the input stream. + /// + /// + /// false if more input is needed, true if output window is + /// full or the current block ends. + /// + /// + /// if deflated stream is invalid. + /// + private bool DecodeHuffman() + { + int free = outputWindow.GetFreeSpace(); + while (free >= 258) + { + int symbol; + switch (mode) + { + case DECODE_HUFFMAN: + // This is the inner loop so it is optimized a bit + while (((symbol = litlenTree.GetSymbol(input)) & ~0xff) == 0) + { + outputWindow.Write(symbol); + if (--free < 258) + { + return true; + } + } + + if (symbol < 257) + { + if (symbol < 0) + { + return false; + } + else + { + // symbol == 256: end of block + distTree = null; + litlenTree = null; + mode = DECODE_BLOCKS; + return true; + } + } + + try + { + repLength = CPLENS[symbol - 257]; + neededBits = CPLEXT[symbol - 257]; + } + catch (Exception) + { + throw new SharpZipBaseException("Illegal rep length code"); + } + goto case DECODE_HUFFMAN_LENBITS; // fall through + + case DECODE_HUFFMAN_LENBITS: + if (neededBits > 0) + { + mode = DECODE_HUFFMAN_LENBITS; + int i = input.PeekBits(neededBits); + if (i < 0) + { + return false; + } + input.DropBits(neededBits); + repLength += i; + } + mode = DECODE_HUFFMAN_DIST; + goto case DECODE_HUFFMAN_DIST; // fall through + + case DECODE_HUFFMAN_DIST: + symbol = distTree.GetSymbol(input); + if (symbol < 0) + { + return false; + } + + try + { + repDist = CPDIST[symbol]; + neededBits = CPDEXT[symbol]; + } + catch (Exception) + { + throw new SharpZipBaseException("Illegal rep dist code"); + } + + goto case DECODE_HUFFMAN_DISTBITS; // fall through + + case DECODE_HUFFMAN_DISTBITS: + if (neededBits > 0) + { + mode = DECODE_HUFFMAN_DISTBITS; + int i = input.PeekBits(neededBits); + if (i < 0) + { + return false; + } + input.DropBits(neededBits); + repDist += i; + } + + outputWindow.Repeat(repLength, repDist); + free -= repLength; + mode = DECODE_HUFFMAN; + break; + + default: + throw new SharpZipBaseException("Inflater unknown mode"); + } + } + return true; + } + + /// + /// Decodes the adler checksum after the deflate stream. + /// + /// + /// false if more input is needed. + /// + /// + /// If checksum doesn't match. + /// + private bool DecodeChksum() + { + while (neededBits > 0) { + int chkByte = input.PeekBits(8); + if (chkByte < 0) { + return false; + } + input.DropBits(8); + readAdler = (readAdler << 8) | chkByte; + neededBits -= 8; + } + + if ((int) adler.Value != readAdler) { + throw new SharpZipBaseException("Adler chksum doesn't match: " + (int)adler.Value + " vs. " + readAdler); + } + + mode = FINISHED; + return false; + } + + /// + /// Decodes the deflated stream. + /// + /// + /// false if more input is needed, or if finished. + /// + /// + /// if deflated stream is invalid. + /// + private bool Decode() + { + switch (mode) { + case DECODE_HEADER: + return DecodeHeader(); + + case DECODE_DICT: + return DecodeDict(); + + case DECODE_CHKSUM: + return DecodeChksum(); + + case DECODE_BLOCKS: + if (isLastBlock) { + if (noHeader) { + mode = FINISHED; + return false; + } else { + input.SkipToByteBoundary(); + neededBits = 32; + mode = DECODE_CHKSUM; + return true; + } + } + + int type = input.PeekBits(3); + if (type < 0) { + return false; + } + input.DropBits(3); + + if ((type & 1) != 0) { + isLastBlock = true; + } + switch (type >> 1){ + case DeflaterConstants.STORED_BLOCK: + input.SkipToByteBoundary(); + mode = DECODE_STORED_LEN1; + break; + case DeflaterConstants.STATIC_TREES: + litlenTree = InflaterHuffmanTree.defLitLenTree; + distTree = InflaterHuffmanTree.defDistTree; + mode = DECODE_HUFFMAN; + break; + case DeflaterConstants.DYN_TREES: + dynHeader = new InflaterDynHeader(); + mode = DECODE_DYN_HEADER; + break; + default: + throw new SharpZipBaseException("Unknown block type " + type); + } + return true; + + case DECODE_STORED_LEN1: + { + if ((uncomprLen = input.PeekBits(16)) < 0) { + return false; + } + input.DropBits(16); + mode = DECODE_STORED_LEN2; + } + goto case DECODE_STORED_LEN2; // fall through + + case DECODE_STORED_LEN2: + { + int nlen = input.PeekBits(16); + if (nlen < 0) { + return false; + } + input.DropBits(16); + if (nlen != (uncomprLen ^ 0xffff)) { + throw new SharpZipBaseException("broken uncompressed block"); + } + mode = DECODE_STORED; + } + goto case DECODE_STORED; // fall through + + case DECODE_STORED: + { + int more = outputWindow.CopyStored(input, uncomprLen); + uncomprLen -= more; + if (uncomprLen == 0) { + mode = DECODE_BLOCKS; + return true; + } + return !input.IsNeedingInput; + } + + case DECODE_DYN_HEADER: + if (!dynHeader.Decode(input)) { + return false; + } + + litlenTree = dynHeader.BuildLitLenTree(); + distTree = dynHeader.BuildDistTree(); + mode = DECODE_HUFFMAN; + goto case DECODE_HUFFMAN; // fall through + + case DECODE_HUFFMAN: + case DECODE_HUFFMAN_LENBITS: + case DECODE_HUFFMAN_DIST: + case DECODE_HUFFMAN_DISTBITS: + return DecodeHuffman(); + + case FINISHED: + return false; + + default: + throw new SharpZipBaseException("Inflater.Decode unknown mode"); + } + } + + /// + /// Sets the preset dictionary. This should only be called, if + /// needsDictionary() returns true and it should set the same + /// dictionary, that was used for deflating. The getAdler() + /// function returns the checksum of the dictionary needed. + /// + /// + /// The dictionary. + /// + public void SetDictionary(byte[] buffer) + { + SetDictionary(buffer, 0, buffer.Length); + } + + /// + /// Sets the preset dictionary. This should only be called, if + /// needsDictionary() returns true and it should set the same + /// dictionary, that was used for deflating. The getAdler() + /// function returns the checksum of the dictionary needed. + /// + /// + /// The dictionary. + /// + /// + /// The index into buffer where the dictionary starts. + /// + /// + /// The number of bytes in the dictionary. + /// + /// + /// No dictionary is needed. + /// + /// + /// The adler checksum for the buffer is invalid + /// + public void SetDictionary(byte[] buffer, int index, int count) + { + if ( buffer == null ) { + throw new ArgumentNullException("buffer"); + } + + if ( index < 0 ) { + throw new ArgumentOutOfRangeException("index"); + } + + if ( count < 0 ) { + throw new ArgumentOutOfRangeException("count"); + } + + if (!IsNeedingDictionary) { + throw new InvalidOperationException("Dictionary is not needed"); + } + + adler.Update(buffer, index, count); + + if ((int)adler.Value != readAdler) { + throw new SharpZipBaseException("Wrong adler checksum"); + } + adler.Reset(); + outputWindow.CopyDict(buffer, index, count); + mode = DECODE_BLOCKS; + } + + /// + /// Sets the input. This should only be called, if needsInput() + /// returns true. + /// + /// + /// the input. + /// + public void SetInput(byte[] buffer) + { + SetInput(buffer, 0, buffer.Length); + } + + /// + /// Sets the input. This should only be called, if needsInput() + /// returns true. + /// + /// + /// The source of input data + /// + /// + /// The index into buffer where the input starts. + /// + /// + /// The number of bytes of input to use. + /// + /// + /// No input is needed. + /// + /// + /// The index and/or count are wrong. + /// + public void SetInput(byte[] buffer, int index, int count) + { + input.SetInput(buffer, index, count); + totalIn += (long)count; + } + + /// + /// Inflates the compressed stream to the output buffer. If this + /// returns 0, you should check, whether IsNeedingDictionary(), + /// IsNeedingInput() or IsFinished() returns true, to determine why no + /// further output is produced. + /// + /// + /// the output buffer. + /// + /// + /// The number of bytes written to the buffer, 0 if no further + /// output can be produced. + /// + /// + /// if buffer has length 0. + /// + /// + /// if deflated stream is invalid. + /// + public int Inflate(byte[] buffer) + { + if ( buffer == null ) + { + throw new ArgumentNullException("buffer"); + } + + return Inflate(buffer, 0, buffer.Length); + } + + /// + /// Inflates the compressed stream to the output buffer. If this + /// returns 0, you should check, whether needsDictionary(), + /// needsInput() or finished() returns true, to determine why no + /// further output is produced. + /// + /// + /// the output buffer. + /// + /// + /// the offset in buffer where storing starts. + /// + /// + /// the maximum number of bytes to output. + /// + /// + /// the number of bytes written to the buffer, 0 if no further output can be produced. + /// + /// + /// if count is less than 0. + /// + /// + /// if the index and / or count are wrong. + /// + /// + /// if deflated stream is invalid. + /// + public int Inflate(byte[] buffer, int offset, int count) + { + if ( buffer == null ) + { + throw new ArgumentNullException("buffer"); + } + + if ( count < 0 ) { + throw new ArgumentOutOfRangeException("count", "count cannot be negative"); + } + + if ( offset < 0 ) { + throw new ArgumentOutOfRangeException("offset", "offset cannot be negative"); + } + + if ( offset + count > buffer.Length ) { + throw new ArgumentException("count exceeds buffer bounds"); + } + + // Special case: count may be zero + if (count == 0) + { + if (!IsFinished) { // -jr- 08-Nov-2003 INFLATE_BUG fix.. + Decode(); + } + return 0; + } + + int bytesCopied = 0; + + do { + if (mode != DECODE_CHKSUM) { + /* Don't give away any output, if we are waiting for the + * checksum in the input stream. + * + * With this trick we have always: + * IsNeedingInput() and not IsFinished() + * implies more output can be produced. + */ + int more = outputWindow.CopyOutput(buffer, offset, count); + if ( more > 0 ) { + adler.Update(buffer, offset, more); + offset += more; + bytesCopied += more; + totalOut += (long)more; + count -= more; + if (count == 0) { + return bytesCopied; + } + } + } + } while (Decode() || ((outputWindow.GetAvailable() > 0) && (mode != DECODE_CHKSUM))); + return bytesCopied; + } + + /// + /// Returns true, if the input buffer is empty. + /// You should then call setInput(). + /// NOTE: This method also returns true when the stream is finished. + /// + public bool IsNeedingInput { + get { + return input.IsNeedingInput; + } + } + + /// + /// Returns true, if a preset dictionary is needed to inflate the input. + /// + public bool IsNeedingDictionary { + get { + return mode == DECODE_DICT && neededBits == 0; + } + } + + /// + /// Returns true, if the inflater has finished. This means, that no + /// input is needed and no output can be produced. + /// + public bool IsFinished { + get { + return mode == FINISHED && outputWindow.GetAvailable() == 0; + } + } + + /// + /// Gets the adler checksum. This is either the checksum of all + /// uncompressed bytes returned by inflate(), or if needsDictionary() + /// returns true (and thus no output was yet produced) this is the + /// adler checksum of the expected dictionary. + /// + /// + /// the adler checksum. + /// + public int Adler { + get { + return IsNeedingDictionary ? readAdler : (int) adler.Value; + } + } + + /// + /// Gets the total number of output bytes returned by Inflate(). + /// + /// + /// the total number of output bytes. + /// + public long TotalOut { + get { + return totalOut; + } + } + + /// + /// Gets the total number of processed compressed input bytes. + /// + /// + /// The total number of bytes of processed input bytes. + /// + public long TotalIn { + get { + return totalIn - (long)RemainingInput; + } + } + + /// + /// Gets the number of unprocessed input bytes. Useful, if the end of the + /// stream is reached and you want to further process the bytes after + /// the deflate stream. + /// + /// + /// The number of bytes of the input which have not been processed. + /// + public int RemainingInput { + // TODO: This should be a long? + get { + return input.AvailableBytes; + } + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/InflaterDynHeader.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/InflaterDynHeader.cs new file mode 100644 index 0000000..fad21b7 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/InflaterDynHeader.cs @@ -0,0 +1,213 @@ +// InflaterDynHeader.cs +// Copyright (C) 2001 Mike Krueger +// +// This file was translated from java, it was part of the GNU Classpath +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using ICSharpCode.SharpZipLib.Silverlight.Zip.Compression.Streams; + +namespace ICSharpCode.SharpZipLib.Silverlight.Zip.Compression +{ + class InflaterDynHeader + { + #region Constants + const int LNUM = 0; + const int DNUM = 1; + const int BLNUM = 2; + const int BLLENS = 3; + const int LENS = 4; + const int REPS = 5; + + static readonly int[] repMin = { 3, 3, 11 }; + static readonly int[] repBits = { 2, 3, 7 }; + + static readonly int[] BL_ORDER = + { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 }; + + #endregion + + #region Constructors + public InflaterDynHeader() + { + } + #endregion + + public bool Decode(StreamManipulator input) + { + decode_loop: + for (;;) { + switch (mode) { + case LNUM: + lnum = input.PeekBits(5); + if (lnum < 0) { + return false; + } + lnum += 257; + input.DropBits(5); + // System.err.println("LNUM: "+lnum); + mode = DNUM; + goto case DNUM; // fall through + case DNUM: + dnum = input.PeekBits(5); + if (dnum < 0) { + return false; + } + dnum++; + input.DropBits(5); + // System.err.println("DNUM: "+dnum); + num = lnum+dnum; + litdistLens = new byte[num]; + mode = BLNUM; + goto case BLNUM; // fall through + case BLNUM: + blnum = input.PeekBits(4); + if (blnum < 0) { + return false; + } + blnum += 4; + input.DropBits(4); + blLens = new byte[19]; + ptr = 0; + // System.err.println("BLNUM: "+blnum); + mode = BLLENS; + goto case BLLENS; // fall through + case BLLENS: + while (ptr < blnum) { + int len = input.PeekBits(3); + if (len < 0) { + return false; + } + input.DropBits(3); + // System.err.println("blLens["+BL_ORDER[ptr]+"]: "+len); + blLens[BL_ORDER[ptr]] = (byte) len; + ptr++; + } + blTree = new InflaterHuffmanTree(blLens); + blLens = null; + ptr = 0; + mode = LENS; + goto case LENS; // fall through + case LENS: + { + int symbol; + while (((symbol = blTree.GetSymbol(input)) & ~15) == 0) { + /* Normal case: symbol in [0..15] */ + + // System.err.println("litdistLens["+ptr+"]: "+symbol); + litdistLens[ptr++] = lastLen = (byte)symbol; + + if (ptr == num) { + /* Finished */ + return true; + } + } + + /* need more input ? */ + if (symbol < 0) { + return false; + } + + /* otherwise repeat code */ + if (symbol >= 17) { + /* repeat zero */ + // System.err.println("repeating zero"); + lastLen = 0; + } else { + if (ptr == 0) { + throw new SharpZipBaseException(); + } + } + repSymbol = symbol-16; + } + mode = REPS; + goto case REPS; // fall through + case REPS: + { + int bits = repBits[repSymbol]; + int count = input.PeekBits(bits); + if (count < 0) { + return false; + } + input.DropBits(bits); + count += repMin[repSymbol]; + // System.err.println("litdistLens repeated: "+count); + + if (ptr + count > num) { + throw new SharpZipBaseException(); + } + while (count-- > 0) { + litdistLens[ptr++] = lastLen; + } + + if (ptr == num) { + /* Finished */ + return true; + } + } + mode = LENS; + goto decode_loop; + } + } + } + + public InflaterHuffmanTree BuildLitLenTree() + { + byte[] litlenLens = new byte[lnum]; + Array.Copy(litdistLens, 0, litlenLens, 0, lnum); + return new InflaterHuffmanTree(litlenLens); + } + + public InflaterHuffmanTree BuildDistTree() + { + byte[] distLens = new byte[dnum]; + Array.Copy(litdistLens, lnum, distLens, 0, dnum); + return new InflaterHuffmanTree(distLens); + } + + #region Instance Fields + byte[] blLens; + byte[] litdistLens; + + InflaterHuffmanTree blTree; + + int mode; + int lnum, dnum, blnum, num; + int repSymbol; + byte lastLen; + int ptr; + #endregion + + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/InflaterHuffmanTree.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/InflaterHuffmanTree.cs new file mode 100644 index 0000000..ee2e1e3 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/InflaterHuffmanTree.cs @@ -0,0 +1,230 @@ +// InflaterHuffmanTree.cs +// Copyright (C) 2001 Mike Krueger +// +// This file was translated from java, it was part of the GNU Classpath +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using ICSharpCode.SharpZipLib.Silverlight.Zip.Compression; +using ICSharpCode.SharpZipLib.Silverlight.Zip.Compression.Streams; + +namespace ICSharpCode.SharpZipLib.Silverlight.Zip.Compression +{ + /// + /// Huffman tree used for inflation + /// + public class InflaterHuffmanTree + { + #region Constants + const int MAX_BITLEN = 15; + #endregion + + #region Instance Fields + short[] tree; + #endregion + + /// + /// Literal length tree + /// + public static InflaterHuffmanTree defLitLenTree; + + /// + /// Distance tree + /// + public static InflaterHuffmanTree defDistTree; + + static InflaterHuffmanTree() + { + try { + byte[] codeLengths = new byte[288]; + int i = 0; + while (i < 144) { + codeLengths[i++] = 8; + } + while (i < 256) { + codeLengths[i++] = 9; + } + while (i < 280) { + codeLengths[i++] = 7; + } + while (i < 288) { + codeLengths[i++] = 8; + } + defLitLenTree = new InflaterHuffmanTree(codeLengths); + + codeLengths = new byte[32]; + i = 0; + while (i < 32) { + codeLengths[i++] = 5; + } + defDistTree = new InflaterHuffmanTree(codeLengths); + } catch (Exception) { + throw new SharpZipBaseException("InflaterHuffmanTree: static tree length illegal"); + } + } + + #region Constructors + /// + /// Constructs a Huffman tree from the array of code lengths. + /// + /// + /// the array of code lengths + /// + public InflaterHuffmanTree(byte[] codeLengths) + { + BuildTree(codeLengths); + } + #endregion + + void BuildTree(byte[] codeLengths) + { + int[] blCount = new int[MAX_BITLEN + 1]; + int[] nextCode = new int[MAX_BITLEN + 1]; + + for (int i = 0; i < codeLengths.Length; i++) { + int bits = codeLengths[i]; + if (bits > 0) { + blCount[bits]++; + } + } + + int code = 0; + int treeSize = 512; + for (int bits = 1; bits <= MAX_BITLEN; bits++) { + nextCode[bits] = code; + code += blCount[bits] << (16 - bits); + if (bits >= 10) { + /* We need an extra table for bit lengths >= 10. */ + int start = nextCode[bits] & 0x1ff80; + int end = code & 0x1ff80; + treeSize += (end - start) >> (16 - bits); + } + } + +/* -jr comment this out! doesnt work for dynamic trees and pkzip 2.04g + if (code != 65536) + { + throw new SharpZipBaseException("Code lengths don't add up properly."); + } +*/ + /* Now create and fill the extra tables from longest to shortest + * bit len. This way the sub trees will be aligned. + */ + tree = new short[treeSize]; + int treePtr = 512; + for (int bits = MAX_BITLEN; bits >= 10; bits--) { + int end = code & 0x1ff80; + code -= blCount[bits] << (16 - bits); + int start = code & 0x1ff80; + for (int i = start; i < end; i += 1 << 7) { + tree[DeflaterHuffman.BitReverse(i)] = (short) ((-treePtr << 4) | bits); + treePtr += 1 << (bits-9); + } + } + + for (int i = 0; i < codeLengths.Length; i++) { + int bits = codeLengths[i]; + if (bits == 0) { + continue; + } + code = nextCode[bits]; + int revcode = DeflaterHuffman.BitReverse(code); + if (bits <= 9) { + do { + tree[revcode] = (short) ((i << 4) | bits); + revcode += 1 << bits; + } while (revcode < 512); + } else { + int subTree = tree[revcode & 511]; + int treeLen = 1 << (subTree & 15); + subTree = -(subTree >> 4); + do { + tree[subTree | (revcode >> 9)] = (short) ((i << 4) | bits); + revcode += 1 << bits; + } while (revcode < treeLen); + } + nextCode[bits] = code + (1 << (16 - bits)); + } + + } + + /// + /// Reads the next symbol from input. The symbol is encoded using the + /// huffman tree. + /// + /// + /// input the input source. + /// + /// + /// the next symbol, or -1 if not enough input is available. + /// + public int GetSymbol(StreamManipulator input) + { + int lookahead, symbol; + if ((lookahead = input.PeekBits(9)) >= 0) { + if ((symbol = tree[lookahead]) >= 0) { + input.DropBits(symbol & 15); + return symbol >> 4; + } + int subtree = -(symbol >> 4); + int bitlen = symbol & 15; + if ((lookahead = input.PeekBits(bitlen)) >= 0) { + symbol = tree[subtree | (lookahead >> 9)]; + input.DropBits(symbol & 15); + return symbol >> 4; + } else { + int bits = input.AvailableBits; + lookahead = input.PeekBits(bits); + symbol = tree[subtree | (lookahead >> 9)]; + if ((symbol & 15) <= bits) { + input.DropBits(symbol & 15); + return symbol >> 4; + } else { + return -1; + } + } + } else { + int bits = input.AvailableBits; + lookahead = input.PeekBits(bits); + symbol = tree[lookahead]; + if (symbol >= 0 && (symbol & 15) <= bits) { + input.DropBits(symbol & 15); + return symbol >> 4; + } else { + return -1; + } + } + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/PendingBuffer.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/PendingBuffer.cs new file mode 100644 index 0000000..f063fdb --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/PendingBuffer.cs @@ -0,0 +1,248 @@ +// PendingBuffer.cs +// +// Copyright (C) 2001 Mike Krueger +// Copyright (C) 2004 John Reilly +// +// This file was translated from java, it was part of the GNU Classpath +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +namespace ICSharpCode.SharpZipLib.Silverlight.Zip.Compression +{ + /// + /// This class is general purpose class for writing data to a buffer. + /// + /// It allows you to write bits as well as bytes + /// Based on DeflaterPending.java + /// + /// author of the original java version : Jochen Hoenicke + /// + public class PendingBuffer + { + #region Instance Fields + /// + /// Internal work buffer + /// + readonly byte[] buffer_; + + int start; + int end; + + uint bits; + int bitCount; + #endregion + + #region Constructors + /// + /// construct instance using default buffer size of 4096 + /// + public PendingBuffer() : this( 4096 ) + { + } + + /// + /// construct instance using specified buffer size + /// + /// + /// size to use for internal buffer + /// + public PendingBuffer(int bufferSize) + { + buffer_ = new byte[bufferSize]; + } + + #endregion + + /// + /// Clear internal state/buffers + /// + public void Reset() + { + start = end = bitCount = 0; + } + + /// + /// Write a byte to buffer + /// + /// + /// The value to write + /// + public void WriteByte(int value) + { + buffer_[end++] = unchecked((byte) value); + } + + /// + /// Write a short value to buffer LSB first + /// + /// + /// The value to write. + /// + public void WriteShort(int value) + { + buffer_[end++] = unchecked((byte) value); + buffer_[end++] = unchecked((byte) (value >> 8)); + } + + /// + /// write an integer LSB first + /// + /// The value to write. + public void WriteInt(int value) + { + buffer_[end++] = unchecked((byte) value); + buffer_[end++] = unchecked((byte) (value >> 8)); + buffer_[end++] = unchecked((byte) (value >> 16)); + buffer_[end++] = unchecked((byte) (value >> 24)); + } + + /// + /// Write a block of data to buffer + /// + /// data to write + /// offset of first byte to write + /// number of bytes to write + public void WriteBlock(byte[] block, int offset, int length) + { + System.Array.Copy(block, offset, buffer_, end, length); + end += length; + } + + /// + /// The number of bits written to the buffer + /// + public int BitCount { + get { + return bitCount; + } + } + + /// + /// Align internal buffer on a byte boundary + /// + public void AlignToByte() + { + if (bitCount > 0) + { + buffer_[end++] = unchecked((byte) bits); + if (bitCount > 8) { + buffer_[end++] = unchecked((byte) (bits >> 8)); + } + } + bits = 0; + bitCount = 0; + } + + /// + /// Write bits to internal buffer + /// + /// source of bits + /// number of bits to write + public void WriteBits(int b, int count) + { + bits |= (uint)(b << bitCount); + bitCount += count; + if (bitCount < 16) + { + return; + } + buffer_[end++] = unchecked((byte) bits); + buffer_[end++] = unchecked((byte) (bits >> 8)); + bits >>= 16; + bitCount -= 16; + } + + /// + /// Write a short value to internal buffer most significant byte first + /// + /// value to write + public void WriteShortMSB(int s) + { + buffer_[end++] = unchecked((byte) (s >> 8)); + buffer_[end++] = unchecked((byte) s); + } + + /// + /// Indicates if buffer has been flushed + /// + public bool IsFlushed { + get { + return end == 0; + } + } + + /// + /// Flushes the pending buffer into the given output array. If the + /// output array is to small, only a partial flush is done. + /// + /// The output array. + /// The offset into output array. + /// The maximum number of bytes to store. + /// The number of bytes flushed. + public int Flush(byte[] output, int offset, int length) + { + if (bitCount >= 8) { + buffer_[end++] = unchecked((byte) bits); + bits >>= 8; + bitCount -= 8; + } + + if (length > end - start) { + length = end - start; + System.Array.Copy(buffer_, start, output, offset, length); + start = 0; + end = 0; + } else { + System.Array.Copy(buffer_, start, output, offset, length); + start += length; + } + return length; + } + + /// + /// Convert internal buffer to byte array. + /// Buffer is empty on completion + /// + /// + /// The internal buffer contents converted to a byte array. + /// + public byte[] ToByteArray() + { + var result = new byte[end - start]; + System.Array.Copy(buffer_, start, result, 0, result.Length); + start = 0; + end = 0; + return result; + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/Streams/DeflaterOutputStream.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/Streams/DeflaterOutputStream.cs new file mode 100644 index 0000000..19b0809 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/Streams/DeflaterOutputStream.cs @@ -0,0 +1,500 @@ +// DeflaterOutputStream.cs +// +// Copyright (C) 2001 Mike Krueger +// +// This file was translated from java, it was part of the GNU Classpath +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using System.IO; +using System.Security.Cryptography; +using ICSharpCode.SharpZipLib.Silverlight.Encryption; + +namespace ICSharpCode.SharpZipLib.Silverlight.Zip.Compression.Streams +{ + /// + /// A special stream deflating or compressing the bytes that are + /// written to it. It uses a Deflater to perform actual deflating.
    + /// Authors of the original java version : Tom Tromey, Jochen Hoenicke + ///
    + public class DeflaterOutputStream : Stream + { + #region Constructors + + /// + /// Creates a new DeflaterOutputStream with a default Deflater and default buffer size. + /// + /// + /// the output stream where deflated output should be written. + /// + public DeflaterOutputStream(Stream baseOutputStream) + : this(baseOutputStream, new Deflater(), 512) + { + } + + /// + /// Creates a new DeflaterOutputStream with the given Deflater and + /// default buffer size. + /// + /// + /// the output stream where deflated output should be written. + /// + /// + /// the underlying deflater. + /// + public DeflaterOutputStream(Stream baseOutputStream, Deflater deflater) + : this(baseOutputStream, deflater, 512) + { + } + + /// + /// Creates a new DeflaterOutputStream with the given Deflater and + /// buffer size. + /// + /// + /// The output stream where deflated output is written. + /// + /// + /// The underlying deflater to use + /// + /// + /// The buffer size to use when deflating + /// + /// + /// bufsize is less than or equal to zero. + /// + /// + /// baseOutputStream does not support writing + /// + /// + /// deflater instance is null + /// + public DeflaterOutputStream(Stream baseOutputStream, Deflater deflater, int bufferSize) + { + if (baseOutputStream == null) + { + throw new ArgumentNullException("baseOutputStream"); + } + + if (baseOutputStream.CanWrite == false) + { + throw new ArgumentException("Must support writing", "baseOutputStream"); + } + + if (deflater == null) + { + throw new ArgumentNullException("deflater"); + } + + if (bufferSize <= 0) + { + throw new ArgumentOutOfRangeException("bufferSize"); + } + + baseOutputStream_ = baseOutputStream; + buffer_ = new byte[bufferSize]; + deflater_ = deflater; + } + + #endregion + + #region Public API + + /// + /// Get/set flag indicating ownership of the underlying stream. + /// When the flag is true will close the underlying stream also. + /// + public bool IsStreamOwner + { + get { return isStreamOwner_; } + set { isStreamOwner_ = value; } + } + + /// + /// Allows client to determine if an entry can be patched after its added + /// + public bool CanPatchEntries + { + get { return baseOutputStream_.CanSeek; } + } + + /// + /// Finishes the stream by calling finish() on the deflater. + /// + /// + /// Not all input is deflated + /// + public virtual void Finish() + { + deflater_.Finish(); + while (!deflater_.IsFinished) + { + var len = deflater_.Deflate(buffer_, 0, buffer_.Length); + if (len <= 0) + { + break; + } + if (cryptoTransform_ != null) + { + EncryptBlock(buffer_, 0, len); + } + + baseOutputStream_.Write(buffer_, 0, len); + } + + if (!deflater_.IsFinished) + { + throw new SharpZipBaseException("Can't deflate all input?"); + } + + baseOutputStream_.Flush(); + + if (cryptoTransform_ == null) + { + return; + } + cryptoTransform_.Dispose(); + cryptoTransform_ = null; + } + + #endregion + + #region Encryption + + private ICryptoTransform cryptoTransform_; + private string _password; + + /// + /// Get/set the password used for encryption. + /// + /// When set to null or if the password is empty no encryption is performed + public string Password + { + get { return _password; } + set + { + if ((value != null) && (value.Length == 0)) + { + _password = null; + } + else + { + _password = value; + } + } + } + + /// + /// Encrypt a block of data + /// + /// + /// Data to encrypt. NOTE the original contents of the buffer are lost + /// + /// + /// Offset of first byte in buffer to encrypt + /// + /// + /// Number of bytes in buffer to encrypt + /// + protected void EncryptBlock(byte[] buffer, int offset, int length) + { + cryptoTransform_.TransformBlock(buffer, 0, length, buffer, 0); + } + + /// + /// Initializes encryption keys based on given password + /// + /// The password. + protected void InitializePassword(string password) + { + var pkManaged = new PkzipClassicManaged(); + var key = PkzipClassic.GenerateKeys(ZipConstants.ConvertToArray(password)); + cryptoTransform_ = pkManaged.CreateEncryptor(key, null); + } + + #endregion + + #region Deflation Support + + /// + /// Deflates everything in the input buffers. This will call + /// def.deflate() until all bytes from the input buffers + /// are processed. + /// + protected void Deflate() + { + while (!deflater_.IsNeedingInput) + { + var deflateCount = deflater_.Deflate(buffer_, 0, buffer_.Length); + + if (deflateCount <= 0) + { + break; + } + if (cryptoTransform_ != null) + { + EncryptBlock(buffer_, 0, deflateCount); + } + + baseOutputStream_.Write(buffer_, 0, deflateCount); + } + + if (!deflater_.IsNeedingInput) + { + throw new SharpZipBaseException("DeflaterOutputStream can't deflate all input?"); + } + } + + #endregion + + #region Stream Overrides + + /// + /// Gets value indicating stream can be read from + /// + public override bool CanRead + { + get { return false; } + } + + /// + /// Gets a value indicating if seeking is supported for this stream + /// This property always returns false + /// + public override bool CanSeek + { + get { return false; } + } + + /// + /// Get value indicating if this stream supports writing + /// + public override bool CanWrite + { + get { return baseOutputStream_.CanWrite; } + } + + /// + /// Get current length of stream + /// + public override long Length + { + get { return baseOutputStream_.Length; } + } + + /// + /// Gets the current position within the stream. + /// + /// Any attempt to set position + public override long Position + { + get { return baseOutputStream_.Position; } + set { throw new NotSupportedException("Position property not supported"); } + } + + /// + /// Sets the current position of this stream to the given value. Not supported by this class! + /// + /// The offset relative to the to seek. + /// The to seek from. + /// The new position in the stream. + /// Any access + public override long Seek(long offset, SeekOrigin origin) + { + throw new NotSupportedException("DeflaterOutputStream Seek not supported"); + } + + /// + /// Sets the length of this stream to the given value. Not supported by this class! + /// + /// The new stream length. + /// Any access + public override void SetLength(long value) + { + throw new NotSupportedException("DeflaterOutputStream SetLength not supported"); + } + + /// + /// Read a byte from stream advancing position by one + /// + /// The byte read cast to an int. THe value is -1 if at the end of the stream. + /// Any access + public override int ReadByte() + { + throw new NotSupportedException("DeflaterOutputStream ReadByte not supported"); + } + + /// + /// Read a block of bytes from stream + /// + /// The buffer to store read data in. + /// The offset to start storing at. + /// The maximum number of bytes to read. + /// The actual number of bytes read. Zero if end of stream is detected. + /// Any access + public override int Read(byte[] buffer, int offset, int count) + { + throw new NotSupportedException("DeflaterOutputStream Read not supported"); + } + + /// + /// Asynchronous reads are not supported a NotSupportedException is always thrown + /// + /// The buffer to read into. + /// The offset to start storing data at. + /// The number of bytes to read + /// The async callback to use. + /// The state to use. + /// Returns an + /// Any access + public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, + object state) + { + throw new NotSupportedException("DeflaterOutputStream BeginRead not currently supported"); + } + + /// + /// Asynchronous writes arent supported, a NotSupportedException is always thrown + /// + /// The buffer to write. + /// The offset to begin writing at. + /// The number of bytes to write. + /// The to use. + /// The state object. + /// Returns an IAsyncResult. + /// Any access + public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, + object state) + { + throw new NotSupportedException("BeginWrite is not supported"); + } + + /// + /// Flushes the stream by calling Flush on the deflater and then + /// on the underlying stream. This ensures that all bytes are flushed. + /// + public override void Flush() + { + deflater_.Flush(); + Deflate(); + baseOutputStream_.Flush(); + } + + /// + /// Calls and closes the underlying + /// stream when is true. + /// + public override void Close() + { + if (!isClosed_) + { + isClosed_ = true; + + try + { + Finish(); + if (cryptoTransform_ != null) + { + cryptoTransform_.Dispose(); + cryptoTransform_ = null; + } + } + finally + { + if (isStreamOwner_) + { + baseOutputStream_.Close(); + } + } + } + } + + /// + /// Writes a single byte to the compressed output stream. + /// + /// + /// The byte value. + /// + public override void WriteByte(byte value) + { + var b = new byte[1]; + b[0] = value; + Write(b, 0, 1); + } + + /// + /// Writes bytes from an array to the compressed stream. + /// + /// + /// The byte array + /// + /// + /// The offset into the byte array where to start. + /// + /// + /// The number of bytes to write. + /// + public override void Write(byte[] buffer, int offset, int count) + { + deflater_.SetInput(buffer, offset, count); + Deflate(); + } + + #endregion + + #region Instance Fields + + /// + /// This buffer is used temporarily to retrieve the bytes from the + /// deflater and write them to the underlying output stream. + /// + private readonly byte[] buffer_; + + /// + /// Base stream the deflater depends on. + /// + protected Stream baseOutputStream_; + + /// + /// The deflater which is used to deflate the stream. + /// + protected Deflater deflater_; + + private bool isClosed_; + + private bool isStreamOwner_ = true; + + #endregion + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/Streams/InflaterInputStream.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/Streams/InflaterInputStream.cs new file mode 100644 index 0000000..4da97ce --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/Streams/InflaterInputStream.cs @@ -0,0 +1,715 @@ +// InflaterInputStream.cs +// +// Copyright (C) 2001 Mike Krueger +// Copyright (C) 2004 John Reilly +// +// This file was translated from java, it was part of the GNU Classpath +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using System.IO; +using System.Security.Cryptography; +using ICSharpCode.SharpZipLib.Silverlight.GZip; + +namespace ICSharpCode.SharpZipLib.Silverlight.Zip.Compression.Streams +{ + /// + /// An input buffer customised for use by + /// + /// + /// The buffer supports decryption of incoming data. + /// + public class InflaterInputBuffer + { + #region Constructors + + /// + /// Initialise a new instance of with a default buffer size + /// + /// The stream to buffer. + public InflaterInputBuffer(Stream stream) : this(stream, 4096) + { + } + + /// + /// Initialise a new instance of + /// + /// The stream to buffer. + /// The size to use for the buffer + /// A minimum buffer size of 1KB is permitted. Lower sizes are treated as 1KB. + public InflaterInputBuffer(Stream stream, int bufferSize) + { + inputStream = stream; + if (bufferSize < 1024) + { + bufferSize = 1024; + } + rawData = new byte[bufferSize]; + clearText = rawData; + } + + #endregion + + /// + /// Get the length of bytes bytes in the + /// + public int RawLength + { + get { return rawLength; } + } + + /// + /// Get the contents of the raw data buffer. + /// + /// This may contain encrypted data. + public byte[] RawData + { + get { return rawData; } + } + + /// + /// Get the number of useable bytes in + /// + public int ClearTextLength + { + get { return clearTextLength; } + } + + /// + /// Get the contents of the clear text buffer. + /// + public byte[] ClearText + { + get { return clearText; } + } + + /// + /// Get/set the number of bytes available + /// + public int Available + { + get { return available; } + set { available = value; } + } + + /// + /// Get/set the to apply to any data. + /// + /// Set this value to null to have no transform applied. + public ICryptoTransform CryptoTransform + { + set + { + cryptoTransform = value; + if (cryptoTransform != null) + { + if (rawData == clearText) + { + if (internalClearText == null) + { + internalClearText = new byte[4096]; + } + clearText = internalClearText; + } + clearTextLength = rawLength; + if (available > 0) + { + cryptoTransform.TransformBlock(rawData, rawLength - available, available, clearText, + rawLength - available); + } + } + else + { + clearText = rawData; + clearTextLength = rawLength; + } + } + } + + #region Instance Fields + + private readonly Stream inputStream; + private readonly byte[] rawData; + private int available; + private byte[] clearText; + private int clearTextLength; + private ICryptoTransform cryptoTransform; + private byte[] internalClearText; + private int rawLength; + + #endregion + + /// + /// Call passing the current clear text buffer contents. + /// + /// The inflater to set input for. + public void SetInflaterInput(Inflater inflater) + { + if (available > 0) + { + inflater.SetInput(clearText, clearTextLength - available, available); + available = 0; + } + } + + /// + /// Fill the buffer from the underlying input stream. + /// + public void Fill() + { + rawLength = 0; + var toRead = rawData.Length; + + while (toRead > 0) + { + var count = inputStream.Read(rawData, rawLength, toRead); + if (count <= 0) + { + if (rawLength == 0) + { + throw new SharpZipBaseException("Unexpected EOF"); + } + break; + } + rawLength += count; + toRead -= count; + } + + clearTextLength = cryptoTransform != null ? cryptoTransform.TransformBlock(rawData, 0, rawLength, clearText, 0) : rawLength; + available = clearTextLength; + } + + /// + /// Read a buffer directly from the input stream + /// + /// The buffer to fill + /// Returns the number of bytes read. + public int ReadRawBuffer(byte[] buffer) + { + return ReadRawBuffer(buffer, 0, buffer.Length); + } + + /// + /// Read a buffer directly from the input stream + /// + /// The buffer to read into + /// The offset to start reading data into. + /// The number of bytes to read. + /// Returns the number of bytes read. + public int ReadRawBuffer(byte[] outBuffer, int offset, int length) + { + if (length < 0) + { + throw new ArgumentOutOfRangeException("length"); + } + + var currentOffset = offset; + var currentLength = length; + + while (currentLength > 0) + { + if (available <= 0) + { + Fill(); + if (available <= 0) + { + return 0; + } + } + var toCopy = Math.Min(currentLength, available); + Array.Copy(rawData, rawLength - available, outBuffer, currentOffset, toCopy); + currentOffset += toCopy; + currentLength -= toCopy; + available -= toCopy; + } + return length; + } + + /// + /// Read clear text data from the input stream. + /// + /// The buffer to add data to. + /// The offset to start adding data at. + /// The number of bytes to read. + /// Returns the number of bytes actually read. + public int ReadClearTextBuffer(byte[] outBuffer, int offset, int length) + { + if (length < 0) + { + throw new ArgumentOutOfRangeException("length"); + } + + var currentOffset = offset; + var currentLength = length; + + while (currentLength > 0) + { + if (available <= 0) + { + Fill(); + if (available <= 0) + { + return 0; + } + } + + var toCopy = Math.Min(currentLength, available); + Array.Copy(clearText, clearTextLength - available, outBuffer, currentOffset, toCopy); + currentOffset += toCopy; + currentLength -= toCopy; + available -= toCopy; + } + return length; + } + + /// + /// Read a from the input stream. + /// + /// Returns the byte read. + public int ReadLeByte() + { + if (available <= 0) + { + Fill(); + if (available <= 0) + { + throw new ZipException("EOF in header"); + } + } + var result = (byte) (rawData[rawLength - available] & 0xff); + available -= 1; + return result; + } + + /// + /// Read an in little endian byte order. + /// + /// The short value read case to an int. + public int ReadLeShort() + { + return ReadLeByte() | (ReadLeByte() << 8); + } + + /// + /// Read an in little endian byte order. + /// + /// The int value read. + public int ReadLeInt() + { + return ReadLeShort() | (ReadLeShort() << 16); + } + + /// + /// Read a in little endian byte order. + /// + /// The long value read. + public long ReadLeLong() + { + return (uint) ReadLeInt() | ((long) ReadLeInt() << 32); + } + } + + /// + /// This filter stream is used to decompress data compressed using the "deflate" + /// format. The "deflate" format is described in RFC 1951. + /// + /// This stream may form the basis for other decompression filters, such + /// as the GZipInputStream. + /// + /// Author of the original java version : John Leuner. + /// + public class InflaterInputStream : Stream + { + #region Constructors + + /// + /// Create an InflaterInputStream with the default decompressor + /// and a default buffer size of 4KB. + /// + /// + /// The InputStream to read bytes from + /// + public InflaterInputStream(Stream baseInputStream) + : this(baseInputStream, new Inflater(), 4096) + { + } + + /// + /// Create an InflaterInputStream with the specified decompressor + /// and a default buffer size of 4KB. + /// + /// + /// The source of input data + /// + /// + /// The decompressor used to decompress data read from baseInputStream + /// + public InflaterInputStream(Stream baseInputStream, Inflater inf) + : this(baseInputStream, inf, 4096) + { + } + + /// + /// Create an InflaterInputStream with the specified decompressor + /// and the specified buffer size. + /// + /// + /// The InputStream to read bytes from + /// + /// + /// The decompressor to use + /// + /// + /// Size of the buffer to use + /// + public InflaterInputStream(Stream baseInputStream, Inflater inflater, int bufferSize) + { + if (baseInputStream == null) + { + throw new ArgumentNullException("baseInputStream"); + } + + if (inflater == null) + { + throw new ArgumentNullException("inflater"); + } + + if (bufferSize <= 0) + { + throw new ArgumentOutOfRangeException("bufferSize"); + } + + this.baseInputStream = baseInputStream; + inf = inflater; + + inputBuffer = new InflaterInputBuffer(baseInputStream, bufferSize); + } + + #endregion + + /// + /// Get/set flag indicating ownership of underlying stream. + /// When the flag is true will close the underlying stream also. + /// + /// + /// The default value is true. + /// + public bool IsStreamOwner + { + get { return isStreamOwner; } + set { isStreamOwner = value; } + } + + /// + /// Returns 0 once the end of the stream (EOF) has been reached. + /// Otherwise returns 1. + /// + public virtual int Available + { + get { return inf.IsFinished ? 0 : 1; } + } + + /// + /// Skip specified number of bytes of uncompressed data + /// + /// + /// Number of bytes to skip + /// + /// + /// The number of bytes skipped, zero if the end of + /// stream has been reached + /// + /// + /// Number of bytes to skip is less than zero + /// + public long Skip(long count) + { + if (count < 0) + { + throw new ArgumentOutOfRangeException("count"); + } + + // v0.80 Skip by seeking if underlying stream supports it... + if (baseInputStream.CanSeek) + { + baseInputStream.Seek(count, SeekOrigin.Current); + return count; + } + var len = 2048; + if (count < len) + { + len = (int) count; + } + var tmp = new byte[len]; + return baseInputStream.Read(tmp, 0, tmp.Length); + } + + /// + /// Clear any cryptographic state. + /// + protected void StopDecrypting() + { + inputBuffer.CryptoTransform = null; + } + + /// + /// Fills the buffer with more data to decompress. + /// + /// + /// Stream ends early + /// + protected void Fill() + { + inputBuffer.Fill(); + inputBuffer.SetInflaterInput(inf); + } + + #region Stream Overrides + + /// + /// Gets a value indicating whether the current stream supports reading + /// + public override bool CanRead + { + get { return baseInputStream.CanRead; } + } + + /// + /// Gets a value of false indicating seeking is not supported for this stream. + /// + public override bool CanSeek + { + get { return false; } + } + + /// + /// Gets a value of false indicating that this stream is not writeable. + /// + public override bool CanWrite + { + get { return false; } + } + + /// + /// A value representing the length of the stream in bytes. + /// + public override long Length + { + get { return inputBuffer.RawLength; } + } + + /// + /// The current position within the stream. + /// Throws a NotSupportedException when attempting to set the position + /// + /// Attempting to set the position + public override long Position + { + get { return baseInputStream.Position; } + set { throw new NotSupportedException("InflaterInputStream Position not supported"); } + } + + /// + /// Flushes the baseInputStream + /// + public override void Flush() + { + baseInputStream.Flush(); + } + + /// + /// Sets the position within the current stream + /// Always throws a NotSupportedException + /// + /// The relative offset to seek to. + /// The defining where to seek from. + /// The new position in the stream. + /// Any access + public override long Seek(long offset, SeekOrigin origin) + { + throw new NotSupportedException("Seek not supported"); + } + + /// + /// Set the length of the current stream + /// Always throws a NotSupportedException + /// + /// The new length value for the stream. + /// Any access + public override void SetLength(long value) + { + throw new NotSupportedException("InflaterInputStream SetLength not supported"); + } + + /// + /// Writes a sequence of bytes to stream and advances the current position + /// This method always throws a NotSupportedException + /// + /// Thew buffer containing data to write. + /// The offset of the first byte to write. + /// The number of bytes to write. + /// Any access + public override void Write(byte[] buffer, int offset, int count) + { + throw new NotSupportedException("InflaterInputStream Write not supported"); + } + + /// + /// Writes one byte to the current stream and advances the current position + /// Always throws a NotSupportedException + /// + /// The byte to write. + /// Any access + public override void WriteByte(byte value) + { + throw new NotSupportedException("InflaterInputStream WriteByte not supported"); + } + + /// + /// Entry point to begin an asynchronous write. Always throws a NotSupportedException. + /// + /// The buffer to write data from + /// Offset of first byte to write + /// The maximum number of bytes to write + /// The method to be called when the asynchronous write operation is completed + /// A user-provided object that distinguishes this particular asynchronous write request from other requests + /// An IAsyncResult that references the asynchronous write + /// Any access + public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, + object state) + { + throw new NotSupportedException("InflaterInputStream BeginWrite not supported"); + } + + /// + /// Closes the input stream. When + /// is true the underlying stream is also closed. + /// + public override void Close() + { + if (!isClosed) + { + isClosed = true; + if (isStreamOwner) + { + baseInputStream.Close(); + } + } + } + + /// + /// Reads decompressed data into the provided buffer byte array + /// + /// + /// The array to read and decompress data into + /// + /// + /// The offset indicating where the data should be placed + /// + /// + /// The number of bytes to decompress + /// + /// The number of bytes read. Zero signals the end of stream + /// + /// Inflater needs a dictionary + /// + public override int Read(byte[] buffer, int offset, int count) + { + if (inf.IsNeedingDictionary) + { + throw new SharpZipBaseException("Need a dictionary"); + } + + var remainingBytes = count; + while (true) + { + var bytesRead = inf.Inflate(buffer, offset, remainingBytes); + offset += bytesRead; + remainingBytes -= bytesRead; + + if (remainingBytes == 0 || inf.IsFinished) + { + break; + } + + if (inf.IsNeedingInput) + { + Fill(); + } + else if (bytesRead == 0) + { + throw new ZipException("Dont know what to do"); + } + } + return count - remainingBytes; + } + + #endregion + + #region Instance Fields + + /// + /// Base stream the inflater reads from. + /// + protected Stream baseInputStream; + + /// + /// The compressed size + /// + protected long csize; + + /// + /// Decompressor for this stream + /// + protected Inflater inf; + + /// + /// Input buffer for this stream. + /// + protected InflaterInputBuffer inputBuffer; + + /// + /// Flag indicating wether this instance has been closed or not. + /// + private bool isClosed; + + /// + /// Flag indicating wether this instance is designated the stream owner. + /// When closing if this flag is true the underlying stream is closed. + /// + private bool isStreamOwner = true; + + #endregion + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/Streams/OutputWindow.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/Streams/OutputWindow.cs new file mode 100644 index 0000000..c80bd49 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/Streams/OutputWindow.cs @@ -0,0 +1,258 @@ +// OutputWindow.cs +// +// Copyright (C) 2001 Mike Krueger +// +// This file was translated from java, it was part of the GNU Classpath +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; + +namespace ICSharpCode.SharpZipLib.Silverlight.Zip.Compression.Streams +{ + /// + /// Contains the output from the Inflation process. + /// We need to have a window so that we can refer backwards into the output stream + /// to repeat stuff.
    + /// Author of the original java version : John Leuner + ///
    + public class OutputWindow + { + #region Constants + + private const int WindowMask = WindowSize - 1; + private const int WindowSize = 1 << 15; + + #endregion + + #region Instance Fields + + private readonly byte[] window = new byte[WindowSize]; //The window is 2^15 bytes + private int windowEnd; + private int windowFilled; + + #endregion + + /// + /// Write a byte to this output window + /// + /// value to write + /// + /// if window is full + /// + public void Write(int value) + { + if (windowFilled++ == WindowSize) + { + throw new InvalidOperationException("Window full"); + } + window[windowEnd++] = (byte) value; + windowEnd &= WindowMask; + } + + private void SlowRepeat(int repStart, int length) + { + while (length-- > 0) + { + window[windowEnd++] = window[repStart++]; + windowEnd &= WindowMask; + repStart &= WindowMask; + } + } + + /// + /// Append a byte pattern already in the window itself + /// + /// length of pattern to copy + /// distance from end of window pattern occurs + /// + /// If the repeated data overflows the window + /// + public void Repeat(int length, int distance) + { + if ((windowFilled += length) > WindowSize) + { + throw new InvalidOperationException("Window full"); + } + + var repStart = (windowEnd - distance) & WindowMask; + var border = WindowSize - length; + if ((repStart <= border) && (windowEnd < border)) + { + if (length <= distance) + { + Array.Copy(window, repStart, window, windowEnd, length); + windowEnd += length; + } + else + { + // We have to copy manually, since the repeat pattern overlaps. + while (length-- > 0) + { + window[windowEnd++] = window[repStart++]; + } + } + } + else + { + SlowRepeat(repStart, length); + } + } + + /// + /// Copy from input manipulator to internal window + /// + /// source of data + /// length of data to copy + /// the number of bytes copied + public int CopyStored(StreamManipulator input, int length) + { + length = Math.Min(Math.Min(length, WindowSize - windowFilled), input.AvailableBytes); + int copied; + + var tailLen = WindowSize - windowEnd; + if (length > tailLen) + { + copied = input.CopyBytes(window, windowEnd, tailLen); + if (copied == tailLen) + { + copied += input.CopyBytes(window, 0, length - tailLen); + } + } + else + { + copied = input.CopyBytes(window, windowEnd, length); + } + + windowEnd = (windowEnd + copied) & WindowMask; + windowFilled += copied; + return copied; + } + + /// + /// Copy dictionary to window + /// + /// source dictionary + /// offset of start in source dictionary + /// length of dictionary + /// + /// If window isnt empty + /// + public void CopyDict(byte[] dictionary, int offset, int length) + { + if (dictionary == null) + { + throw new ArgumentNullException("dictionary"); + } + + if (windowFilled > 0) + { + throw new InvalidOperationException(); + } + + if (length > WindowSize) + { + offset += length - WindowSize; + length = WindowSize; + } + Array.Copy(dictionary, offset, window, 0, length); + windowEnd = length & WindowMask; + } + + /// + /// Get remaining unfilled space in window + /// + /// Number of bytes left in window + public int GetFreeSpace() + { + return WindowSize - windowFilled; + } + + /// + /// Get bytes available for output in window + /// + /// Number of bytes filled + public int GetAvailable() + { + return windowFilled; + } + + /// + /// Copy contents of window to output + /// + /// buffer to copy to + /// offset to start at + /// number of bytes to count + /// The number of bytes copied + /// + /// If a window underflow occurs + /// + public int CopyOutput(byte[] output, int offset, int len) + { + var copyEnd = windowEnd; + if (len > windowFilled) + { + len = windowFilled; + } + else + { + copyEnd = (windowEnd - windowFilled + len) & WindowMask; + } + + var copied = len; + var tailLen = len - copyEnd; + + if (tailLen > 0) + { + Array.Copy(window, WindowSize - tailLen, output, offset, tailLen); + offset += tailLen; + len = copyEnd; + } + Array.Copy(window, copyEnd - len, output, offset, len); + windowFilled -= copied; + if (windowFilled < 0) + { + throw new InvalidOperationException(); + } + return copied; + } + + /// + /// Reset by clearing window so GetAvailable returns 0 + /// + public void Reset() + { + windowFilled = windowEnd = 0; + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/Streams/StreamManipulator.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/Streams/StreamManipulator.cs new file mode 100644 index 0000000..b08bc5e --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/Compression/Streams/StreamManipulator.cs @@ -0,0 +1,279 @@ +// StreamManipulator.cs +// +// Copyright (C) 2001 Mike Krueger +// +// This file was translated from java, it was part of the GNU Classpath +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; + +namespace ICSharpCode.SharpZipLib.Silverlight.Zip.Compression.Streams +{ + /// + /// This class allows us to retrieve a specified number of bits from + /// the input buffer, as well as copy big byte blocks. + /// + /// It uses an int buffer to store up to 31 bits for direct + /// manipulation. This guarantees that we can get at least 16 bits, + /// but we only need at most 15, so this is all safe. + /// + /// There are some optimizations in this class, for example, you must + /// never peek more than 8 bits more than needed, and you must first + /// peek bits before you may drop them. This is not a general purpose + /// class but optimized for the behaviour of the Inflater. + /// + /// authors of the original java version : John Leuner, Jochen Hoenicke + /// + public class StreamManipulator + { + #region Instance Fields + private byte[] window_; + private int windowStart_; + private int windowEnd_; + + private uint buffer_; + private int bitsInBuffer_; + #endregion + + /// + /// Get the next sequence of bits but don't increase input pointer. bitCount must be + /// less or equal 16 and if this call succeeds, you must drop + /// at least n - 8 bits in the next call. + /// + /// The number of bits to peek. + /// + /// the value of the bits, or -1 if not enough bits available. */ + /// + public int PeekBits(int bitCount) + { + if (bitsInBuffer_ < bitCount) { + if (windowStart_ == windowEnd_) { + return -1; // ok + } + buffer_ |= (uint)((window_[windowStart_++] & 0xff | + (window_[windowStart_++] & 0xff) << 8) << bitsInBuffer_); + bitsInBuffer_ += 16; + } + return (int)(buffer_ & ((1 << bitCount) - 1)); + } + + /// + /// Drops the next n bits from the input. You should have called PeekBits + /// with a bigger or equal n before, to make sure that enough bits are in + /// the bit buffer. + /// + /// The number of bits to drop. + public void DropBits(int bitCount) + { + buffer_ >>= bitCount; + bitsInBuffer_ -= bitCount; + } + + /// + /// Gets the next n bits and increases input pointer. This is equivalent + /// to followed by , except for correct error handling. + /// + /// The number of bits to retrieve. + /// + /// the value of the bits, or -1 if not enough bits available. + /// + public int GetBits(int bitCount) + { + int bits = PeekBits(bitCount); + if (bits >= 0) { + DropBits(bitCount); + } + return bits; + } + + /// + /// Gets the number of bits available in the bit buffer. This must be + /// only called when a previous PeekBits() returned -1. + /// + /// + /// the number of bits available. + /// + public int AvailableBits { + get { + return bitsInBuffer_; + } + } + + /// + /// Gets the number of bytes available. + /// + /// + /// The number of bytes available. + /// + public int AvailableBytes { + get { + return windowEnd_ - windowStart_ + (bitsInBuffer_ >> 3); + } + } + + /// + /// Skips to the next byte boundary. + /// + public void SkipToByteBoundary() + { + buffer_ >>= (bitsInBuffer_ & 7); + bitsInBuffer_ &= ~7; + } + + /// + /// Returns true when SetInput can be called + /// + public bool IsNeedingInput { + get { + return windowStart_ == windowEnd_; + } + } + + /// + /// Copies bytes from input buffer to output buffer starting + /// at output[offset]. You have to make sure, that the buffer is + /// byte aligned. If not enough bytes are available, copies fewer + /// bytes. + /// + /// + /// The buffer to copy bytes to. + /// + /// + /// The offset in the buffer at which copying starts + /// + /// + /// The length to copy, 0 is allowed. + /// + /// + /// The number of bytes copied, 0 if no bytes were available. + /// + /// + /// Length is less than zero + /// + /// + /// Bit buffer isnt byte aligned + /// + public int CopyBytes(byte[] output, int offset, int length) + { + if (length < 0) { + throw new ArgumentOutOfRangeException("length"); + } + + if ((bitsInBuffer_ & 7) != 0) { + // bits_in_buffer may only be 0 or a multiple of 8 + throw new InvalidOperationException("Bit buffer is not byte aligned!"); + } + + int count = 0; + while ((bitsInBuffer_ > 0) && (length > 0)) { + output[offset++] = (byte) buffer_; + buffer_ >>= 8; + bitsInBuffer_ -= 8; + length--; + count++; + } + + if (length == 0) { + return count; + } + + int avail = windowEnd_ - windowStart_; + if (length > avail) { + length = avail; + } + Array.Copy(window_, windowStart_, output, offset, length); + windowStart_ += length; + + if (((windowStart_ - windowEnd_) & 1) != 0) { + // We always want an even number of bytes in input, see peekBits + buffer_ = (uint)(window_[windowStart_++] & 0xff); + bitsInBuffer_ = 8; + } + return count + length; + } + + /// + /// Resets state and empties internal buffers + /// + public void Reset() + { + buffer_ = 0; + windowStart_ = windowEnd_ = bitsInBuffer_ = 0; + } + + /// + /// Add more input for consumption. + /// Only call when IsNeedingInput returns true + /// + /// data to be input + /// offset of first byte of input + /// number of bytes of input to add. + public void SetInput(byte[] buffer, int offset, int count) + { + if ( buffer == null ) { + throw new ArgumentNullException("buffer"); + } + + if ( offset < 0 ) { + throw new ArgumentOutOfRangeException("offset", "Cannot be negative"); + } + + if ( count < 0 ) { + throw new ArgumentOutOfRangeException("count", "Cannot be negative"); + } + + if (windowStart_ < windowEnd_) { + throw new InvalidOperationException("Old input was not completely processed"); + } + + int end = offset + count; + + // We want to throw an ArrayIndexOutOfBoundsException early. + // Note the check also handles integer wrap around. + if ((offset > end) || (end > buffer.Length) ) { + throw new ArgumentOutOfRangeException("count"); + } + + if ((count & 1) != 0) { + // We always want an even number of bytes in input, see PeekBits + buffer_ |= (uint)((buffer[offset++] & 0xff) << bitsInBuffer_); + bitsInBuffer_ += 8; + } + + window_ = buffer; + windowStart_ = offset; + windowEnd_ = end; + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/FastZip.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/FastZip.cs new file mode 100644 index 0000000..414c583 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/FastZip.cs @@ -0,0 +1,624 @@ +// FastZip.cs +// +// Copyright 2005 John Reilly +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using System.IO; +using ICSharpCode.SharpZipLib.Silverlight.Core; +using ICSharpCode.SharpZipLib.Silverlight.Zip; +using ICSharpCode.SharpZipLib.Zip; + +namespace ICSharpCode.SharpZipLib.Silverlight.Zip +{ + /// + /// FastZipEvents supports all events applicable to FastZip operations. + /// + public class FastZipEvents + { + /// + /// Delegate to invoke when processing directories. + /// + public ProcessDirectoryHandler ProcessDirectory; + + /// + /// Delegate to invoke when processing files. + /// + public ProcessFileHandler ProcessFile; + + /// + /// Delegate to invoke during processing of files. + /// + public ProgressHandler Progress; + + /// + /// Delegate to invoke when processing for a file has been completed. + /// + public CompletedFileHandler CompletedFile; + + /// + /// Delegate to invoke when processing directory failures. + /// + public DirectoryFailureHandler DirectoryFailure; + + /// + /// Delegate to invoke when processing file failures. + /// + public FileFailureHandler FileFailure; + + /// + /// Raise the directory failure event. + /// + /// The directory causing the failure. + /// The exception for this event. + /// A boolean indicating if execution should continue or not. + public bool OnDirectoryFailure(string directory, Exception e) + { + bool result = false; + if ( DirectoryFailure != null ) { + var args = new ScanFailureEventArgs(directory, e); + DirectoryFailure(this, args); + result = args.ContinueRunning; + } + return result; + } + + /// + /// Raises the file failure delegate. + /// + /// The file causing the failure. + /// The exception for this failure. + /// A boolean indicating if execution should continue or not. + public bool OnFileFailure(string file, Exception e) + { + bool result = false; + if ( FileFailure != null ) { + var args = new ScanFailureEventArgs(file, e); + FileFailure(this, args); + result = args.ContinueRunning; + } + return result; + } + + /// + /// Fires the Process File delegate. + /// + /// The file being processed. + /// A boolean indicating if execution should continue or not. + public bool OnProcessFile(string file) + { + bool result = true; + if ( ProcessFile != null ) { + var args = new ScanEventArgs(file); + ProcessFile(this, args); + result = args.ContinueRunning; + } + return result; + } + + /// + /// Fires the CompletedFile delegate + /// + /// The file whose processing has been completed. + /// A boolean indicating if execution should continue or not. + public bool OnCompletedFile(string file) + { + var result = true; + if ( CompletedFile != null ) { + var args = new ScanEventArgs(file); + CompletedFile(this, args); + result = args.ContinueRunning; + } + return result; + } + + /// + /// Fires the process directory delegate. + /// + /// The directory being processed. + /// Flag indicating if the directory has matching files as determined by the current filter. + /// A of true if the operation should continue; false otherwise. + public bool OnProcessDirectory(string directory, bool hasMatchingFiles) + { + bool result = true; + if ( ProcessDirectory != null ) { + var args = new DirectoryEventArgs(directory, hasMatchingFiles); + ProcessDirectory(this, args); + result = args.ContinueRunning; + } + return result; + } + + /// + /// The minimum timespan between events. + /// + /// The minimum period of time between events. + /// + public TimeSpan ProgressInterval + { + get { return progressInterval_; } + set { progressInterval_ = value; } + } + + #region Instance Fields + TimeSpan progressInterval_ = TimeSpan.FromSeconds(3); + #endregion + } + + /// + /// FastZip provides facilities for creating and extracting zip files. + /// + public class FastZip + { + #region Enumerations + /// + /// Defines the desired handling when overwriting files during extraction. + /// + public enum Overwrite + { + /// + /// Prompt the user to confirm overwriting + /// + Prompt, + /// + /// Never overwrite files. + /// + Never, + /// + /// Always overwrite files. + /// + Always + } + #endregion + + #region Constructors + /// + /// Initialise a default instance of . + /// + public FastZip() + { + } + + /// + /// Initialise a new instance of + /// + /// The events to use during operations. + public FastZip(FastZipEvents events) + { + events_ = events; + } + #endregion + + #region Properties + + /// + /// Get/set a value indicating wether empty directories should be created. + /// + public bool CreateEmptyDirectories { get; set; } + + /// + /// Get / set the password value. + /// + public string Password + { + get { return password_; } + set { password_ = value; } + } + + /// + /// Get or set the active when creating Zip files. + /// + /// + public INameTransform NameTransform + { + get { return entryFactory_.NameTransform; } + set { + entryFactory_.NameTransform = value; + } + } + + /// + /// Get or set the active when creating Zip files. + /// + public IEntryFactory EntryFactory + { + get { return entryFactory_; } + set { + entryFactory_ = value ?? new ZipEntryFactory(); + } + } + + /// + /// Get/set a value indicating wether file dates and times should + /// be restored when extracting files from an archive. + /// + /// The default value is false. + public bool RestoreDateTimeOnExtract + { + get { + return restoreDateTimeOnExtract_; + } + set { + restoreDateTimeOnExtract_ = value; + } + } + + /// + /// Get/set a value indicating wether file attributes should + /// be restored during extract operations + /// + public bool RestoreAttributesOnExtract { get; set; } + + #endregion + + #region Delegates + /// + /// Delegate called when confirming overwriting of files. + /// + public delegate bool ConfirmOverwriteDelegate(string fileName); + #endregion + + #region CreateZip + /// + /// Create a zip file. + /// + /// The name of the zip file to create. + /// The directory to source files from. + /// True to recurse directories, false for no recursion. + /// The file filter to apply. + /// The directory filter to apply. + public void CreateZip(string zipFileName, string sourceDirectory, + bool recurse, string fileFilter, string directoryFilter) + { + CreateZip(File.Create(zipFileName), sourceDirectory, recurse, fileFilter, directoryFilter); + } + + /// + /// Create a zip file/archive. + /// + /// The name of the zip file to create. + /// The directory to obtain files and directories from. + /// True to recurse directories, false for no recursion. + /// The file filter to apply. + public void CreateZip(string zipFileName, string sourceDirectory, bool recurse, string fileFilter) + { + CreateZip(File.Create(zipFileName), sourceDirectory, recurse, fileFilter, null); + } + + /// + /// Create a zip archive sending output to the passed. + /// + /// The stream to write archive data to. + /// The directory to source files from. + /// True to recurse directories, false for no recursion. + /// The file filter to apply. + /// The directory filter to apply. + public void CreateZip(Stream outputStream, string sourceDirectory, bool recurse, string fileFilter, string directoryFilter) + { + NameTransform = new ZipNameTransform(sourceDirectory); + sourceDirectory_ = sourceDirectory; + + using ( outputStream_ = new ZipOutputStream(outputStream) ) { + + if (password_ != null) + { + outputStream_.Password = password_; + } + + var scanner = new FileSystemScanner(fileFilter, directoryFilter); + scanner.ProcessFile += ProcessFile; + if ( CreateEmptyDirectories ) { + scanner.ProcessDirectory += ProcessDirectory; + } + + if (events_ != null) { + if ( events_.FileFailure != null ) { + scanner.FileFailure += events_.FileFailure; + } + + if ( events_.DirectoryFailure != null ) { + scanner.DirectoryFailure += events_.DirectoryFailure; + } + } + + scanner.Scan(sourceDirectory, recurse); + } + } + + #endregion + + #region ExtractZip + /// + /// Extract the contents of a zip file. + /// + /// The zip file to extract from. + /// The directory to save extracted information in. + /// A filter to apply to files. + public void ExtractZip(string zipFileName, string targetDirectory, string fileFilter) + { + ExtractZip(zipFileName, targetDirectory, Overwrite.Always, null, fileFilter, null, restoreDateTimeOnExtract_); + } + + /// + /// Extract the contents of a zip file. + /// + /// The zip file to extract from. + /// The directory to save extracted information in. + /// The style of overwriting to apply. + /// A delegate to invoke when confirming overwriting. + /// A filter to apply to files. + /// A filter to apply to directories. + /// Flag indicating wether to restore the date and time for extracted files. + public void ExtractZip(string zipFileName, string targetDirectory, + Overwrite overwrite, ConfirmOverwriteDelegate confirmDelegate, + string fileFilter, string directoryFilter, bool restoreDateTime) + { + if ( (overwrite == Overwrite.Prompt) && (confirmDelegate == null) ) { + throw new ArgumentNullException("confirmDelegate"); + } + + continueRunning_ = true; + overwrite_ = overwrite; + confirmDelegate_ = confirmDelegate; + targetDirectory_ = targetDirectory; + fileFilter_ = new NameFilter(fileFilter); + directoryFilter_ = new NameFilter(directoryFilter); + restoreDateTimeOnExtract_ = restoreDateTime; + + using ( zipFile_ = new ZipFile(zipFileName) ) { + +#if !NETCF_1_0 + if (password_ != null) { + zipFile_.Password = password_; + } +#endif + + System.Collections.IEnumerator enumerator = zipFile_.GetEnumerator(); + while ( continueRunning_ && enumerator.MoveNext()) { + var entry = (ZipEntry) enumerator.Current; + if ( entry.IsFile ) + { + if ( directoryFilter_.IsMatch(Path.GetDirectoryName(entry.Name)) && fileFilter_.IsMatch(entry.Name) ) { + ExtractEntry(entry); + } + } + else if ( entry.IsDirectory ) { + if ( directoryFilter_.IsMatch(entry.Name) && CreateEmptyDirectories ) { + ExtractEntry(entry); + } + } + } + } + } + #endregion + + #region Internal Processing + void ProcessDirectory(object sender, DirectoryEventArgs e) + { + if ( !e.HasMatchingFiles && CreateEmptyDirectories ) { + if ( events_ != null ) { + events_.OnProcessDirectory(e.Name, e.HasMatchingFiles); + } + + if ( e.ContinueRunning ) { + if (e.Name != sourceDirectory_) { + ZipEntry entry = entryFactory_.MakeDirectoryEntry(e.Name); + outputStream_.PutNextEntry(entry); + } + } + } + } + + void ProcessFile(object sender, ScanEventArgs e) + { + if ( (events_ != null) && (events_.ProcessFile != null) ) { + events_.ProcessFile(sender, e); + } + + if ( e.ContinueRunning ) { + ZipEntry entry = entryFactory_.MakeFileEntry(e.Name); + outputStream_.PutNextEntry(entry); + AddFileContents(e.Name); + } + } + + void AddFileContents(string name) + { + if ( buffer_ == null ) { + buffer_ = new byte[4096]; + } + + using (FileStream stream = File.OpenRead(name)) { + if ((events_ != null) && (events_.Progress != null)) { + StreamUtils.Copy(stream, outputStream_, buffer_, + events_.Progress, events_.ProgressInterval, this, name); + } + else { + StreamUtils.Copy(stream, outputStream_, buffer_); + } + } + + if (events_ != null) { + continueRunning_ = events_.OnCompletedFile(name); + } + } + + void ExtractFileEntry(ZipEntry entry, string targetName) + { + bool proceed = true; + if ( overwrite_ != Overwrite.Always ) { + if ( File.Exists(targetName) ) { + if ( (overwrite_ == Overwrite.Prompt) && (confirmDelegate_ != null) ) { + proceed = confirmDelegate_(targetName); + } + else { + proceed = false; + } + } + } + + if ( proceed ) { + if ( events_ != null ) { + continueRunning_ = events_.OnProcessFile(entry.Name); + } + + if ( continueRunning_ ) { + try { + using ( FileStream outputStream = File.Create(targetName) ) { + if ( buffer_ == null ) { + buffer_ = new byte[4096]; + } + if ((events_ != null) && (events_.Progress != null)) + { + StreamUtils.Copy(zipFile_.GetInputStream(entry), outputStream, buffer_, + events_.Progress, events_.ProgressInterval, this, entry.Name); + } + else + { + StreamUtils.Copy(zipFile_.GetInputStream(entry), outputStream, buffer_); + } + + if (events_ != null) { + continueRunning_ = events_.OnCompletedFile(entry.Name); + } + } + + //if ( restoreDateTimeOnExtract_ ) { + //File.SetLastWriteTime(targetName, entry.DateTime); + //} + + if ( RestoreAttributesOnExtract && entry.IsDOSEntry && (entry.ExternalFileAttributes != -1)) { + var fileAttributes = (FileAttributes) entry.ExternalFileAttributes; + // TODO: FastZip - Setting of other file attributes on extraction is a little trickier. + fileAttributes &= (FileAttributes.Archive | FileAttributes.Normal | FileAttributes.ReadOnly | FileAttributes.Hidden); + File.SetAttributes(targetName, fileAttributes); + } + } + catch(Exception ex) { + continueRunning_ = events_ != null && events_.OnFileFailure(targetName, ex); + } + } + } + } + + void ExtractEntry(ZipEntry entry) + { + bool doExtraction = false; + + string nameText = entry.Name; + + if ( entry.IsFile ) { + // TODO: Translate invalid names allowing extraction still. + doExtraction = NameIsValid(nameText) && entry.IsCompressionMethodSupported(); + } + else if ( entry.IsDirectory ) { + doExtraction = NameIsValid(nameText); + } + + // TODO: Fire delegate were compression method not supported, or name is invalid? + + string dirName = null; + string targetName = null; + + if ( doExtraction ) { + // Handle invalid entry names by chopping of path root. + if (Path.IsPathRooted(nameText)) { + string workName = Path.GetPathRoot(nameText); + nameText = nameText.Substring(workName.Length); + } + + if ( nameText.Length > 0 ) + { + targetName = Path.Combine(targetDirectory_, nameText); + dirName = entry.IsDirectory ? targetName : Path.GetDirectoryName(Path.GetFullPath(targetName)); + } + else { + doExtraction = false; + } + } + + if ( doExtraction && !Directory.Exists(dirName) ) { + if ( !entry.IsDirectory || CreateEmptyDirectories ) { + try { + Directory.CreateDirectory(dirName); + } + catch (Exception ex) { + doExtraction = false; + if ( events_ != null ) { + continueRunning_ = entry.IsDirectory ? events_.OnDirectoryFailure(targetName, ex) : events_.OnFileFailure(targetName, ex); + } + else { + continueRunning_ = false; + } + } + } + } + + if ( doExtraction && entry.IsFile ) { + ExtractFileEntry(entry, targetName); + } + } + + static int MakeExternalAttributes(FileSystemInfo info) + { + return (int)info.Attributes; + } + + static bool NameIsValid(string name) + { + return !string.IsNullOrEmpty(name) && + (name.IndexOfAny(Path.GetInvalidPathChars()) < 0); + } + #endregion + + #region Instance Fields + bool continueRunning_; + byte[] buffer_; + ZipOutputStream outputStream_; + ZipFile zipFile_; + string targetDirectory_; + string sourceDirectory_; + NameFilter fileFilter_; + NameFilter directoryFilter_; + Overwrite overwrite_; + ConfirmOverwriteDelegate confirmDelegate_; + + bool restoreDateTimeOnExtract_; + readonly FastZipEvents events_; + IEntryFactory entryFactory_ = new ZipEntryFactory(); + + string password_; + + #endregion + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/IEntryFactory.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/IEntryFactory.cs new file mode 100644 index 0000000..42e6496 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/IEntryFactory.cs @@ -0,0 +1,83 @@ +// IEntryFactory.cs +// +// Copyright 2006 John Reilly +// +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using ICSharpCode.SharpZipLib.Silverlight.Core; + +namespace ICSharpCode.SharpZipLib.Silverlight.Zip +{ + /// + /// Defines factory methods for creating new values. + /// + public interface IEntryFactory + { + /// + /// Create a for a file given its name + /// + /// The name of the file to create an entry for. + /// Returns a file entry based on the passed. + ZipEntry MakeFileEntry(string fileName); + + /// + /// Create a for a file given its name + /// + /// The name of the file to create an entry for. + /// If true get details from the file system if the file exists. + /// Returns a file entry based on the passed. + ZipEntry MakeFileEntry(string fileName, bool useFileSystem); + + /// + /// Create a for a directory given its name + /// + /// The name of the directory to create an entry for. + /// Returns a directory entry based on the passed. + ZipEntry MakeDirectoryEntry(string directoryName); + + /// + /// Create a for a directory given its name + /// + /// The name of the directory to create an entry for. + /// If true get details from the file system for this directory if it exists. + /// Returns a directory entry based on the passed. + ZipEntry MakeDirectoryEntry(string directoryName, bool useFileSystem); + + /// + /// Get/set the applicable. + /// + INameTransform NameTransform { get; set; } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipConstants.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipConstants.cs new file mode 100644 index 0000000..bf30e20 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipConstants.cs @@ -0,0 +1,577 @@ +// ZipConstants.cs +// +// Copyright (C) 2001 Mike Krueger +// Copyright (C) 2004 John Reilly +// +// This file was translated from java, it was part of the GNU Classpath +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using System.Text; +using ICSharpCode.SharpZipLib.Silverlight.Zip; + +namespace ICSharpCode.SharpZipLib.Silverlight.Zip +{ + /// + /// Determines how entries are tested to see if they should use Zip64 extensions or not. + /// + public enum UseZip64 + { + /// + /// Zip64 will not be forced on entries during processing. + /// + /// An entry can have this overridden if required + Off, + /// + /// Zip64 should always be used. + /// + On, + /// + /// #ZipLib will determine use based on entry values when added to archive. + /// + Dynamic, + } + + /// + /// The kind of compression used for an entry in an archive + /// + public enum CompressionMethod + { + /// + /// A direct copy of the file contents is held in the archive + /// + Stored = 0, + + /// + /// Common Zip compression method using a sliding dictionary + /// of up to 32KB and secondary compression from Huffman/Shannon-Fano trees + /// + Deflated = 8, + + /// + /// An extension to deflate with a 64KB window. Not supported by #Zip currently + /// + Deflate64 = 9, + + /// + /// Not supported by #Zip currently + /// + BZip2 = 11, + + /// + /// WinZip special for AES encryption, Not supported by #Zip + /// + WinZipAES = 99, + + } + + /// + /// Identifies the encryption algorithm used for an entry + /// + public enum EncryptionAlgorithm + { + /// + /// No encryption has been used. + /// + None = 0, + /// + /// Encrypted using PKZIP 2.0 or 'classic' encryption. + /// + PkzipClassic = 1, + /// + /// DES encryption has been used. + /// + Des = 0x6601, + /// + /// RCS encryption has been used for encryption. + /// + RC2 = 0x6602, + /// + /// Triple DES encryption with 168 bit keys has been used for this entry. + /// + TripleDes168 = 0x6603, + /// + /// Triple DES with 112 bit keys has been used for this entry. + /// + TripleDes112 = 0x6609, + /// + /// AES 128 has been used for encryption. + /// + Aes128 = 0x660e, + /// + /// AES 192 has been used for encryption. + /// + Aes192 = 0x660f, + /// + /// AES 256 has been used for encryption. + /// + Aes256 = 0x6610, + /// + /// RC2 corrected has been used for encryption. + /// + RC2Corrected = 0x6702, + /// + /// Blowfish has been used for encryption. + /// + Blowfish = 0x6720, + /// + /// Twofish has been used for encryption. + /// + Twofish = 0x6721, + /// + /// RCS has been used for encryption. + /// + RC4 = 0x6801, + /// + /// An unknown algorithm has been used for encryption. + /// + Unknown = 0xffff + } + + /// + /// Defines the contents of the general bit flags field for an archive entry. + /// + [Flags] + public enum GeneralBitFlags + { + /// + /// Bit 0 if set indicates that the file is encrypted + /// + Encrypted = 0x0001, + /// + /// Bits 1 and 2 - Two bits defining the compression method (only for Method 6 Imploding and 8,9 Deflating) + /// + Method = 0x0006, + /// + /// Bit 3 if set indicates a trailing data desciptor is appended to the entry data + /// + Descriptor = 0x0008, + /// + /// Bit 4 is reserved for use with method 8 for enhanced deflation + /// + ReservedPKware4 = 0x0010, + /// + /// Bit 5 if set indicates the file contains Pkzip compressed patched data. + /// Requires version 2.7 or greater. + /// + Patched = 0x0020, + /// + /// Bit 6 if set strong encryption has been used for this entry. + /// + StrongEncryption = 0x0040, + /// + /// Bit 7 is currently unused + /// + Unused7 = 0x0080, + /// + /// Bit 8 is currently unused + /// + Unused8 = 0x0100, + /// + /// Bit 9 is currently unused + /// + Unused9 = 0x0200, + /// + /// Bit 10 is currently unused + /// + Unused10 = 0x0400, + /// + /// Bit 11 if set indicates the filename and + /// comment fields for this file must be encoded using UTF-8. + /// + UnicodeText = 0x0800, + /// + /// Bit 12 is documented as being reserved by PKware for enhanced compression. + /// + EnhancedCompress = 0x1000, + /// + /// Bit 13 if set indicates that values in the local header are masked to hide + /// their actual values, and the central directory is encrypted. + /// + /// + /// Used when encrypting the central directory contents. + /// + HeaderMasked = 0x2000, + /// + /// Bit 14 is documented as being reserved for use by PKware + /// + ReservedPkware14 = 0x4000, + /// + /// Bit 15 is documented as being reserved for use by PKware + /// + ReservedPkware15 = 0x8000 + } + + /// + /// This class contains constants used for Zip format files + /// + public static class ZipConstants + { + #region Versions + /// + /// The version made by field for entries in the central header when created by this library + /// + /// + /// This is also the Zip version for the library when comparing against the version required to extract + /// for an entry. See . + /// + public const int VersionMadeBy = 45; + + /// + /// The version made by field for entries in the central header when created by this library + /// + /// + /// This is also the Zip version for the library when comparing against the version required to extract + /// for an entry. See ZipInputStream.CanDecompressEntry. + /// + [Obsolete("Use VersionMadeBy instead")] + public const int VERSION_MADE_BY = 45; + + /// + /// The minimum version required to support strong encryption + /// + public const int VersionStrongEncryption = 50; + + /// + /// The minimum version required to support strong encryption + /// + [Obsolete("Use VersionStrongEncryption instead")] + public const int VERSION_STRONG_ENCRYPTION = 50; + + /// + /// The version required for Zip64 extensions + /// + public const int VersionZip64 = 45; + #endregion + + #region Header Sizes + /// + /// Size of local entry header (excluding variable length fields at end) + /// + public const int LocalHeaderBaseSize = 30; + + /// + /// Size of local entry header (excluding variable length fields at end) + /// + [Obsolete("Use LocalHeaderBaseSize instead")] + public const int LOCHDR = 30; + + /// + /// Size of Zip64 data descriptor + /// + public const int Zip64DataDescriptorSize = 24; + + /// + /// Size of data descriptor + /// + public const int DataDescriptorSize = 16; + + /// + /// Size of data descriptor + /// + [Obsolete("Use DataDescriptorSize instead")] + public const int EXTHDR = 16; + + /// + /// Size of central header entry (excluding variable fields) + /// + public const int CentralHeaderBaseSize = 46; + + /// + /// Size of central header entry + /// + [Obsolete("Use CentralHeaderBaseSize instead")] + public const int CENHDR = 46; + + /// + /// Size of end of central record (excluding variable fields) + /// + public const int EndOfCentralRecordBaseSize = 22; + + /// + /// Size of end of central record (excluding variable fields) + /// + [Obsolete("Use EndOfCentralRecordBaseSize instead")] + public const int ENDHDR = 22; + + /// + /// Size of 'classic' cryptographic header stored before any entry data + /// + public const int CryptoHeaderSize = 12; + + /// + /// Size of cryptographic header stored before entry data + /// + [Obsolete("Use CryptoHeaderSize instead")] + public const int CRYPTO_HEADER_SIZE = 12; + #endregion + + #region Header Signatures + + /// + /// Signature for local entry header + /// + public const int LocalHeaderSignature = 'P' | ('K' << 8) | (3 << 16) | (4 << 24); + + /// + /// Signature for local entry header + /// + [Obsolete("Use LocalHeaderSignature instead")] + public const int LOCSIG = 'P' | ('K' << 8) | (3 << 16) | (4 << 24); + + /// + /// Signature for spanning entry + /// + public const int SpanningSignature = 'P' | ('K' << 8) | (7 << 16) | (8 << 24); + + /// + /// Signature for spanning entry + /// + [Obsolete("Use SpanningSignature instead")] + public const int SPANNINGSIG = 'P' | ('K' << 8) | (7 << 16) | (8 << 24); + + /// + /// Signature for temporary spanning entry + /// + public const int SpanningTempSignature = 'P' | ('K' << 8) | ('0' << 16) | ('0' << 24); + + /// + /// Signature for temporary spanning entry + /// + [Obsolete("Use SpanningTempSignature instead")] + public const int SPANTEMPSIG = 'P' | ('K' << 8) | ('0' << 16) | ('0' << 24); + + /// + /// Signature for data descriptor + /// + /// + /// This is only used where the length, Crc, or compressed size isnt known when the + /// entry is created and the output stream doesnt support seeking. + /// The local entry cannot be 'patched' with the correct values in this case + /// so the values are recorded after the data prefixed by this header, as well as in the central directory. + /// + public const int DataDescriptorSignature = 'P' | ('K' << 8) | (7 << 16) | (8 << 24); + + /// + /// Signature for data descriptor + /// + /// + /// This is only used where the length, Crc, or compressed size isnt known when the + /// entry is created and the output stream doesnt support seeking. + /// The local entry cannot be 'patched' with the correct values in this case + /// so the values are recorded after the data prefixed by this header, as well as in the central directory. + /// + [Obsolete("Use DataDescriptorSignature instead")] + public const int EXTSIG = 'P' | ('K' << 8) | (7 << 16) | (8 << 24); + + /// + /// Signature for central header + /// + [Obsolete("Use CentralHeaderSignature instead")] + public const int CENSIG = 'P' | ('K' << 8) | (1 << 16) | (2 << 24); + + /// + /// Signature for central header + /// + public const int CentralHeaderSignature = 'P' | ('K' << 8) | (1 << 16) | (2 << 24); + + /// + /// Signature for Zip64 central file header + /// + public const int Zip64CentralFileHeaderSignature = 'P' | ('K' << 8) | (6 << 16) | (6 << 24); + + /// + /// Signature for Zip64 central file header + /// + [Obsolete("Use Zip64CentralFileHeaderSignature instead")] + public const int CENSIG64 = 'P' | ('K' << 8) | (6 << 16) | (6 << 24); + + /// + /// Signature for Zip64 central directory locator + /// + public const int Zip64CentralDirLocatorSignature = 'P' | ('K' << 8) | (6 << 16) | (7 << 24); + + /// + /// Signature for archive extra data signature (were headers are encrypted). + /// + public const int ArchiveExtraDataSignature = 'P' | ('K' << 8) | (6 << 16) | (7 << 24); + + /// + /// Central header digitial signature + /// + public const int CentralHeaderDigitalSignature = 'P' | ('K' << 8) | (5 << 16) | (5 << 24); + + /// + /// Central header digitial signature + /// + [Obsolete("Use CentralHeaderDigitalSignaure instead")] + public const int CENDIGITALSIG = 'P' | ('K' << 8) | (5 << 16) | (5 << 24); + + /// + /// End of central directory record signature + /// + public const int EndOfCentralDirectorySignature = 'P' | ('K' << 8) | (5 << 16) | (6 << 24); + + /// + /// End of central directory record signature + /// + [Obsolete("Use EndOfCentralDirectorySignature instead")] + public const int ENDSIG = 'P' | ('K' << 8) | (5 << 16) | (6 << 24); + #endregion + + /// + /// Convert a portion of a byte array to a string. + /// + /// + /// Data to convert to string + /// + /// + /// Number of bytes to convert starting from index 0 + /// + /// + /// data[0]..data[length - 1] converted to a string + /// + public static string ConvertToString(byte[] data, int count) + { + if ( data == null ) { + return string.Empty; + } + + return Encoding.UTF8.GetString(data, 0, count); + } + + /// + /// Convert a byte array to string + /// + /// + /// Byte array to convert + /// + /// + /// dataconverted to a string + /// + public static string ConvertToString(byte[] data) + { + if ( data == null ) { + return string.Empty; + } + return ConvertToString(data, data.Length); + } + + /// + /// Convert a byte array to string + /// + /// The applicable general purpose bits flags + /// + /// Byte array to convert + /// + /// The number of bytes to convert. + /// + /// dataconverted to a string + /// + public static string ConvertToStringExt(int flags, byte[] data, int count) + { + if ( data == null ) { + return string.Empty; + } + + if ( (flags & (int)GeneralBitFlags.UnicodeText) != 0 ) { + return Encoding.UTF8.GetString(data, 0, count); + } + + return ConvertToString(data, count); + } + + /// + /// Convert a byte array to string + /// + /// + /// Byte array to convert + /// + /// The applicable general purpose bits flags + /// + /// dataconverted to a string + /// + public static string ConvertToStringExt(int flags, byte[] data) + { + if ( data == null ) { + return string.Empty; + } + + if ( (flags & (int)GeneralBitFlags.UnicodeText) != 0 ) { + return Encoding.UTF8.GetString(data, 0, data.Length); + } + else { + return ConvertToString(data, data.Length); + } + } + + /// + /// Convert a string to a byte array + /// + /// + /// String to convert to an array + /// + /// Converted array + public static byte[] ConvertToArray(string str) + { + if ( str == null ) { + return new byte[0]; + } + + return Encoding.UTF8.GetBytes(str); + } + + /// + /// Convert a string to a byte array + /// + /// The applicable general purpose bits flags + /// + /// String to convert to an array + /// + /// Converted array + public static byte[] ConvertToArray(int flags, string str) + { + if (str == null) { + return new byte[0]; + } + + if ((flags & (int)GeneralBitFlags.UnicodeText) != 0) { + return Encoding.UTF8.GetBytes(str); + } + else { + return ConvertToArray(str); + } + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipEntry.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipEntry.cs new file mode 100644 index 0000000..70d1e30 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipEntry.cs @@ -0,0 +1,1124 @@ +// ZipEntry.cs +// +// Copyright (C) 2001 Mike Krueger +// Copyright (C) 2004 John Reilly +// +// This file was translated from java, it was part of the GNU Classpath +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using System.IO; +using ICSharpCode.SharpZipLib.Silverlight.Zip; +using ICSharpCode.SharpZipLib.Zip; + +namespace ICSharpCode.SharpZipLib.Silverlight.Zip +{ + /// + /// Defines known values for the property. + /// + public enum HostSystemID + { + /// + /// Host system = MSDOS + /// + Msdos = 0, + /// + /// Host system = Amiga + /// + Amiga = 1, + /// + /// Host system = Open VMS + /// + OpenVms = 2, + /// + /// Host system = Unix + /// + Unix = 3, + /// + /// Host system = VMCms + /// + VMCms = 4, + /// + /// Host system = Atari ST + /// + AtariST = 5, + /// + /// Host system = OS2 + /// + OS2 = 6, + /// + /// Host system = Macintosh + /// + Macintosh = 7, + /// + /// Host system = ZSystem + /// + ZSystem = 8, + /// + /// Host system = Cpm + /// + Cpm = 9, + /// + /// Host system = Windows NT + /// + WindowsNT = 10, + /// + /// Host system = MVS + /// + MVS = 11, + /// + /// Host system = VSE + /// + Vse = 12, + /// + /// Host system = Acorn RISC + /// + AcornRisc = 13, + /// + /// Host system = VFAT + /// + Vfat = 14, + /// + /// Host system = Alternate MVS + /// + AlternateMvs = 15, + /// + /// Host system = BEOS + /// + BeOS = 16, + /// + /// Host system = Tandem + /// + Tandem = 17, + /// + /// Host system = OS400 + /// + OS400 = 18, + /// + /// Host system = OSX + /// + OSX = 19, + /// + /// Host system = WinZIP AES + /// + WinZipAES = 99, + } + + /// + /// This class represents an entry in a zip archive. This can be a file + /// or a directory + /// ZipFile and ZipInputStream will give you instances of this class as + /// information about the members in an archive. ZipOutputStream + /// uses an instance of this class when creating an entry in a Zip file. + ///
    + ///
    Author of the original java version : Jochen Hoenicke + ///
    + public class ZipEntry + { + [Flags] + enum Known : byte + { + None = 0, + Size = 0x01, + CompressedSize = 0x02, + Crc = 0x04, + Time = 0x08, + ExternalAttributes = 0x10, + } + + #region Constructors + /// + /// Creates a zip entry with the given name. + /// + /// + /// The name for this entry. Can include directory components. + /// The convention for names is 'unix' style paths with relative names only. + /// There are with no device names and path elements are separated by '/' characters. + /// + /// + /// The name passed is null + /// + public ZipEntry(string name) + : this(name, 0, ZipConstants.VersionMadeBy, CompressionMethod.Deflated) + { + } + + /// + /// Creates a zip entry with the given name and version required to extract + /// + /// + /// The name for this entry. Can include directory components. + /// The convention for names is 'unix' style paths with no device names and + /// path elements separated by '/' characters. This is not enforced see CleanName + /// on how to ensure names are valid if this is desired. + /// + /// + /// The minimum 'feature version' required this entry + /// + /// + /// The name passed is null + /// + internal ZipEntry(string name, int versionRequiredToExtract) + : this(name, versionRequiredToExtract, ZipConstants.VersionMadeBy, + CompressionMethod.Deflated) + { + } + + /// + /// Initializes an entry with the given name and made by information + /// + /// Name for this entry + /// Version and HostSystem Information + /// Minimum required zip feature version required to extract this entry + /// Compression method for this entry. + /// + /// The name passed is null + /// + /// + /// versionRequiredToExtract should be 0 (auto-calculate) or > 10 + /// + /// + /// This constructor is used by the ZipFile class when reading from the central header + /// It is not generally useful, use the constructor specifying the name only. + /// + internal ZipEntry(string name, int versionRequiredToExtract, int madeByInfo, + CompressionMethod method) + { + if (name == null) { + throw new System.ArgumentNullException("ZipEntry name"); + } + + if ( name.Length > 0xffff ) { + throw new ArgumentException("Name is too long", "name"); + } + + if ( (versionRequiredToExtract != 0) && (versionRequiredToExtract < 10) ) { + throw new ArgumentOutOfRangeException("versionRequiredToExtract"); + } + + this.DateTime = System.DateTime.Now; + this.name = name; + this.versionMadeBy = (ushort)madeByInfo; + this.versionToExtract = (ushort)versionRequiredToExtract; + this.method = method; + } + + /// + /// Creates a deep copy of the given zip entry. + /// + /// + /// The entry to copy. + /// + [Obsolete("Use Clone instead")] + public ZipEntry(ZipEntry entry) + { + if ( entry == null ) { + throw new ArgumentNullException("entry"); + } + + known = entry.known; + name = entry.name; + size = entry.size; + compressedSize = entry.compressedSize; + crc = entry.crc; + dosTime = entry.dosTime; + method = entry.method; + comment = entry.comment; + versionToExtract = entry.versionToExtract; + versionMadeBy = entry.versionMadeBy; + externalFileAttributes = entry.externalFileAttributes; + flags = entry.flags; + + zipFileIndex = entry.zipFileIndex; + offset = entry.offset; + + forceZip64_ = entry.forceZip64_; + + if ( entry.extra != null ) { + extra = new byte[entry.extra.Length]; + Array.Copy(entry.extra, 0, extra, 0, entry.extra.Length); + } + } + + #endregion + + /// + /// Get a value indicating wether the entry has a CRC value available. + /// + public bool HasCrc + { + get { + return (known & Known.Crc) != 0; + } + } + + /// + /// Get/Set flag indicating if entry is encrypted. + /// A simple helper routine to aid interpretation of flags + /// + /// This is an assistant that interprets the flags property. + public bool IsCrypted + { + get { + return (flags & 1) != 0; + } + set { + if (value) { + flags |= 1; + } + else { + flags &= ~1; + } + } + } + + /// + /// Get / set a flag indicating wether entry name and comment text are + /// encoded in unicode UTF8. + /// + /// This is an assistant that interprets the flags property. + public bool IsUnicodeText + { + get { + return ( flags & (int)GeneralBitFlags.UnicodeText ) != 0; + } + set { + if ( value ) { + flags |= (int)GeneralBitFlags.UnicodeText; + } + else { + flags &= ~(int)GeneralBitFlags.UnicodeText; + } + } + } + + /// + /// Value used during password checking for PKZIP 2.0 / 'classic' encryption. + /// + internal byte CryptoCheckValue + { + get { + return cryptoCheckValue_; + } + + set { + cryptoCheckValue_ = value; + } + } + + /// + /// Get/Set general purpose bit flag for entry + /// + /// + /// General purpose bit flag
    + ///
    + /// Bit 0: If set, indicates the file is encrypted
    + /// Bit 1-2 Only used for compression type 6 Imploding, and 8, 9 deflating
    + /// Imploding:
    + /// Bit 1 if set indicates an 8K sliding dictionary was used. If clear a 4k dictionary was used
    + /// Bit 2 if set indicates 3 Shannon-Fanno trees were used to encode the sliding dictionary, 2 otherwise
    + ///
    + /// Deflating:
    + /// Bit 2 Bit 1
    + /// 0 0 Normal compression was used
    + /// 0 1 Maximum compression was used
    + /// 1 0 Fast compression was used
    + /// 1 1 Super fast compression was used
    + ///
    + /// Bit 3: If set, the fields crc-32, compressed size + /// and uncompressed size are were not able to be written during zip file creation + /// The correct values are held in a data descriptor immediately following the compressed data.
    + /// Bit 4: Reserved for use by PKZIP for enhanced deflating
    + /// Bit 5: If set indicates the file contains compressed patch data
    + /// Bit 6: If set indicates strong encryption was used.
    + /// Bit 7-10: Unused or reserved
    + /// Bit 11: If set the name and comments for this entry are in unicode.
    + /// Bit 12-15: Unused or reserved
    + ///
    + /// + /// + public int Flags + { + get { + return flags; + } + set { + flags = value; + } + } + + /// + /// Get/Set index of this entry in Zip file + /// + /// This is only valid when the entry is part of a + public long ZipFileIndex + { + get { + return zipFileIndex; + } + set { + zipFileIndex = value; + } + } + + /// + /// Get/set offset for use in central header + /// + public long Offset + { + get { + return offset; + } + set { + offset = value; + } + } + + /// + /// Get/Set external file attributes as an integer. + /// The values of this are operating system dependant see + /// HostSystem for details + /// + public int ExternalFileAttributes + { + get { + if ((known & Known.ExternalAttributes) == 0) { + return -1; + } + else { + return externalFileAttributes; + } + } + + set { + externalFileAttributes = value; + known |= Known.ExternalAttributes; + } + } + + /// + /// Get the version made by for this entry or zero if unknown. + /// The value / 10 indicates the major version number, and + /// the value mod 10 is the minor version number + /// + public int VersionMadeBy + { + get { + return (versionMadeBy & 0xff); + } + } + + /// + /// Get a value indicating this entry is for a DOS/Windows system. + /// + public bool IsDOSEntry + { + get { + return ((HostSystem == ( int )HostSystemID.Msdos) || + (HostSystem == ( int )HostSystemID.WindowsNT)); + } + } + + /// + /// Test the external attributes for this to + /// see if the external attributes are Dos based (including WINNT and variants) + /// and match the values + /// + /// The attributes to test. + /// Returns true if the external attributes are known to be DOS/Windows + /// based and have the same attributes set as the value passed. + bool HasDosAttributes(int attributes) + { + bool result = false; + if ( (known & Known.ExternalAttributes) != 0 ) { + if ( ((HostSystem == (int)HostSystemID.Msdos) || + (HostSystem == (int)HostSystemID.WindowsNT)) && + (ExternalFileAttributes & attributes) == attributes) { + result = true; + } + } + return result; + } + + /// + /// Gets the compatability information for the external file attribute + /// If the external file attributes are compatible with MS-DOS and can be read + /// by PKZIP for DOS version 2.04g then this value will be zero. Otherwise the value + /// will be non-zero and identify the host system on which the attributes are compatible. + /// + /// + /// + /// The values for this as defined in the Zip File format and by others are shown below. The values are somewhat + /// misleading in some cases as they are not all used as shown. You should consult the relevant documentation + /// to obtain up to date and correct information. The modified appnote by the infozip group is + /// particularly helpful as it documents a lot of peculiarities. The document is however a little dated. + /// + /// 0 - MS-DOS and OS/2 (FAT / VFAT / FAT32 file systems) + /// 1 - Amiga + /// 2 - OpenVMS + /// 3 - Unix + /// 4 - VM/CMS + /// 5 - Atari ST + /// 6 - OS/2 HPFS + /// 7 - Macintosh + /// 8 - Z-System + /// 9 - CP/M + /// 10 - Windows NTFS + /// 11 - MVS (OS/390 - Z/OS) + /// 12 - VSE + /// 13 - Acorn Risc + /// 14 - VFAT + /// 15 - Alternate MVS + /// 16 - BeOS + /// 17 - Tandem + /// 18 - OS/400 + /// 19 - OS/X (Darwin) + /// 99 - WinZip AES + /// remainder - unused + /// + /// + public int HostSystem + { + get { + return (versionMadeBy >> 8) & 0xff; + } + + set { + versionMadeBy &= 0xff; + versionMadeBy |= (ushort)((value & 0xff) << 8); + } + } + + /// + /// Get minimum Zip feature version required to extract this entry + /// + /// + /// Minimum features are defined as:
    + /// 1.0 - Default value
    + /// 1.1 - File is a volume label
    + /// 2.0 - File is a folder/directory
    + /// 2.0 - File is compressed using Deflate compression
    + /// 2.0 - File is encrypted using traditional encryption
    + /// 2.1 - File is compressed using Deflate64
    + /// 2.5 - File is compressed using PKWARE DCL Implode
    + /// 2.7 - File is a patch data set
    + /// 4.5 - File uses Zip64 format extensions
    + /// 4.6 - File is compressed using BZIP2 compression
    + /// 5.0 - File is encrypted using DES
    + /// 5.0 - File is encrypted using 3DES
    + /// 5.0 - File is encrypted using original RC2 encryption
    + /// 5.0 - File is encrypted using RC4 encryption
    + /// 5.1 - File is encrypted using AES encryption
    + /// 5.1 - File is encrypted using corrected RC2 encryption
    + /// 5.1 - File is encrypted using corrected RC2-64 encryption
    + /// 6.1 - File is encrypted using non-OAEP key wrapping
    + /// 6.2 - Central directory encryption (not confirmed yet)
    + /// 6.3 - File is compressed using LZMA
    + /// 6.3 - File is compressed using PPMD+
    + /// 6.3 - File is encrypted using Blowfish
    + /// 6.3 - File is encrypted using Twofish
    + ///
    + /// + public int Version + { + get { + // Return recorded version if known. + if (versionToExtract != 0) { + return versionToExtract; + } + else { + int result = 10; + if ( CentralHeaderRequiresZip64 ) { + result = ZipConstants.VersionZip64; + } + else if (CompressionMethod.Deflated == method) { + result = 20; + } + else if (IsDirectory == true) { + result = 20; + } + else if (IsCrypted == true) { + result = 20; + } + else if (HasDosAttributes(0x08) ) { + result = 11; + } + return result; + } + } + } + + /// + /// Get a value indicating wether this entry can be decompressed by the library. + /// + /// This is based on the and + /// wether the compression method is supported. + public bool CanDecompress + { + get { + return (Version <= ZipConstants.VersionMadeBy) && + ((Version == 10) || + (Version == 11) || + (Version == 20) || + (Version == 45)) && + IsCompressionMethodSupported(); + } + } + + /// + /// Force this entry to be recorded using Zip64 extensions. + /// + public void ForceZip64() + { + forceZip64_ = true; + } + + /// + /// Get a value indicating wether Zip64 extensions were forced. + /// + /// A value of true if Zip64 extensions have been forced on; false if not. + public bool IsZip64Forced() + { + return forceZip64_; + } + + /// + /// Gets a value indicating if the entry requires Zip64 extensions + /// to store the full entry values. + /// + /// A value of true if a local header requires Zip64 extensions; false if not. + public bool LocalHeaderRequiresZip64 + { + get { + bool result = forceZip64_; + + if ( !result ) { + ulong trueCompressedSize = compressedSize; + + if ( (versionToExtract == 0) && IsCrypted ) { + trueCompressedSize += ZipConstants.CryptoHeaderSize; + } + + // TODO: A better estimation of the true limit based on compression overhead should be used + // to determine when an entry should use Zip64. + result = + ((this.size >= uint.MaxValue) || (trueCompressedSize >= uint.MaxValue)) && + ((versionToExtract == 0) || (versionToExtract >= ZipConstants.VersionZip64)); + } + + return result; + } + } + + /// + /// Get a value indicating wether the central directory entry requires Zip64 extensions to be stored. + /// + public bool CentralHeaderRequiresZip64 + { + get { + return LocalHeaderRequiresZip64 || (offset >= uint.MaxValue); + } + } + + /// + /// Get/Set DosTime value. + /// + /// + /// The MS-DOS date format can only represent dates between 1/1/1980 and 12/31/2107. + /// + public long DosTime + { + get { + if ((known & Known.Time) == 0) { + return 0; + } + else { + return dosTime; + } + } + + set { + unchecked { + dosTime = (uint)value; + } + + known |= Known.Time; + } + } + + /// + /// Gets/Sets the time of last modification of the entry. + /// + /// + /// The property is updated to match this as far as possible. + /// + public DateTime DateTime + { + get { + var sec = Math.Min(59, (int) (2 * (dosTime & 0x1f))); + var min = Math.Min(59, (int) ((dosTime >> 5) & 0x3f)); + var hrs = Math.Min(23, (int) ((dosTime >> 11) & 0x1f)); + var mon = Math.Max(1, Math.Min(12, (int) ((dosTime >> 21) & 0xf))); + var year = ((dosTime >> 25) & 0x7f) + 1980; + var day = Math.Max(1, Math.Min(DateTime.DaysInMonth((int)year, (int)mon), (int)((dosTime >> 16) & 0x1f))); + return new DateTime((int)year, (int)mon, day, (int)hrs, (int)min, (int)sec); + } + set { + var year = (uint) value.Year; + var month = (uint) value.Month; + var day = (uint) value.Day; + var hour = (uint) value.Hour; + var minute = (uint) value.Minute; + var second = (uint) value.Second; + + if ( year < 1980 ) { + year = 1980; + month = 1; + day = 1; + hour = 0; + minute = 0; + second = 0; + } + else if ( year > 2107 ) { + year = 2107; + month = 12; + day = 31; + hour = 23; + minute = 59; + second = 59; + } + + DosTime = ((year - 1980) & 0x7f) << 25 | + (month << 21) | + (day << 16) | + (hour << 11) | + (minute << 5) | + (second >> 1); + } + } + + /// + /// Returns the entry name. + /// + /// + /// The unix naming convention is followed. + /// Path components in the entry should always separated by forward slashes ('/'). + /// Dos device names like C: should also be removed. + /// See the class, or + /// + public string Name + { + get { + return name; + } + } + + /// + /// Gets/Sets the size of the uncompressed data. + /// + /// + /// The size or -1 if unknown. + /// + /// Setting the size before adding an entry to an archive can help + /// avoid compatability problems with some archivers which dont understand Zip64 extensions. + public long Size + { + get { + return (known & Known.Size) != 0 ? (long)size : -1L; + } + set { + this.size = (ulong)value; + this.known |= Known.Size; + } + } + + /// + /// Gets/Sets the size of the compressed data. + /// + /// + /// The compressed entry size or -1 if unknown. + /// + public long CompressedSize + { + get { + return (known & Known.CompressedSize) != 0 ? (long)compressedSize : -1L; + } + set { + this.compressedSize = (ulong)value; + this.known |= Known.CompressedSize; + } + } + + /// + /// Gets/Sets the crc of the uncompressed data. + /// + /// + /// Crc is not in the range 0..0xffffffffL + /// + /// + /// The crc value or -1 if unknown. + /// + public long Crc + { + get { + return (known & Known.Crc) != 0 ? crc & 0xffffffffL : -1L; + } + set { + if (((ulong)crc & 0xffffffff00000000L) != 0) { + throw new ArgumentOutOfRangeException("value"); + } + this.crc = (uint)value; + this.known |= Known.Crc; + } + } + + /// + /// Gets/Sets the compression method. Only Deflated and Stored are supported. + /// + /// + /// The compression method for this entry + /// + /// + /// + public CompressionMethod CompressionMethod { + get { + return method; + } + + set { + if ( !IsCompressionMethodSupported(value) ) { + throw new NotSupportedException("Compression method not supported"); + } + this.method = value; + } + } + + /// + /// Gets/Sets the extra data. + /// + /// + /// Extra data is longer than 64KB (0xffff) bytes. + /// + /// + /// Extra data or null if not set. + /// + public byte[] ExtraData { + + get { +// TODO: This is slightly safer but less efficient. Think about wether it should change. +// return (byte[]) extra.Clone(); + return extra; + } + + set { + if (value == null) { + extra = null; + } + else { + if (value.Length > 0xffff) { + throw new System.ArgumentOutOfRangeException("value"); + } + + extra = new byte[value.Length]; + Array.Copy(value, 0, extra, 0, value.Length); + } + } + } + + /// + /// Process extra data fields updating the entry based on the contents. + /// + /// True if the extra data fields should be handled + /// for a local header, rather than for a central header. + /// + internal void ProcessExtraData(bool localHeader) + { + ZipExtraData extraData = new ZipExtraData(this.extra); + + if ( extraData.Find(0x0001) ) { + if ( (versionToExtract & 0xff) < ZipConstants.VersionZip64 ) { + throw new ZipException("Zip64 Extended information found but version is not valid"); + } + + // The recorded size will change but remember that this is zip64. + forceZip64_ = true; + + if ( extraData.ValueLength < 4 ) { + throw new ZipException("Extra data extended Zip64 information length is invalid"); + } + + if ( localHeader || (size == uint.MaxValue) ) { + size = (ulong)extraData.ReadLong(); + } + + if ( localHeader || (compressedSize == uint.MaxValue) ) { + compressedSize = (ulong)extraData.ReadLong(); + } + + if ( !localHeader && (offset == uint.MaxValue) ) { + offset = extraData.ReadLong(); + } + } + else { + if ( + ((versionToExtract & 0xff) >= ZipConstants.VersionZip64) && + ((size == uint.MaxValue) || (compressedSize == uint.MaxValue)) + ) { + throw new ZipException("Zip64 Extended information required but is missing."); + } + } + + if ( extraData.Find(10) ) { + // No room for any tags. + if ( extraData.ValueLength < 8 ) { + throw new ZipException("NTFS Extra data invalid"); + } + + extraData.ReadInt(); // Reserved + + while ( extraData.UnreadCount >= 4 ) { + int ntfsTag = extraData.ReadShort(); + int ntfsLength = extraData.ReadShort(); + if ( ntfsTag == 1 ) { + if ( ntfsLength >= 24 ) { + long lastModification = extraData.ReadLong(); + long lastAccess = extraData.ReadLong(); + long createTime = extraData.ReadLong(); + + DateTime = System.DateTime.FromFileTime(lastModification); + } + break; + } + else { + // An unknown NTFS tag so simply skip it. + extraData.Skip(ntfsLength); + } + } + } + else if ( extraData.Find(0x5455) ) { + int length = extraData.ValueLength; + int flags = extraData.ReadByte(); + + // Can include other times but these are ignored. Length of data should + // actually be 1 + 4 * no of bits in flags. + if ( ((flags & 1) != 0) && (length >= 5) ) { + int iTime = extraData.ReadInt(); + + DateTime = (new System.DateTime ( 1970, 1, 1, 0, 0, 0 ).ToUniversalTime() + + new TimeSpan ( 0, 0, 0, iTime, 0 )).ToLocalTime(); + } + } + } + + /// + /// Gets/Sets the entry comment. + /// + /// + /// If comment is longer than 0xffff. + /// + /// + /// The comment or null if not set. + /// + /// + /// A comment is only available for entries when read via the class. + /// The class doesnt have the comment data available. + /// + public string Comment { + get { + return comment; + } + set { + // This test is strictly incorrect as the length is in characters + // while the storage limit is in bytes. + // While the test is partially correct in that a comment of this length or greater + // is definitely invalid, shorter comments may also have an invalid length + // where there are multi-byte characters + // The full test is not possible here however as the code page to apply conversions with + // isnt available. + if ( (value != null) && (value.Length > 0xffff) ) { + throw new ArgumentOutOfRangeException("value", "cannot exceed 65535"); + } + + comment = value; + } + } + + /// + /// Gets a value indicating if the entry is a directory. + /// however. + /// + /// + /// A directory is determined by an entry name with a trailing slash '/'. + /// The external file attributes can also indicate an entry is for a directory. + /// Currently only dos/windows attributes are tested in this manner. + /// The trailing slash convention should always be followed. + /// + public bool IsDirectory + { + get { + int nameLength = name.Length; + bool result = + ((nameLength > 0) && + ((name[nameLength - 1] == '/') || (name[nameLength - 1] == '\\'))) || + HasDosAttributes(16) + ; + return result; + } + } + + /// + /// Get a value of true if the entry appears to be a file; false otherwise + /// + /// + /// This only takes account of DOS/Windows attributes. Other operating systems are ignored. + /// For linux and others the result may be incorrect. + /// + public bool IsFile + { + get { + return !IsDirectory && !HasDosAttributes(8); + } + } + + /// + /// Test entry to see if data can be extracted. + /// + /// Returns true if data can be extracted for this entry; false otherwise. + public bool IsCompressionMethodSupported() + { + return IsCompressionMethodSupported(CompressionMethod); + } + + #region ICloneable Members + /// + /// Creates a copy of this zip entry. + /// + /// An that is a copy of the current instance. + public object Clone() + { + ZipEntry result = (ZipEntry)this.MemberwiseClone(); + + // Ensure extra data is unique if it exists. + if ( extra != null ) { + result.extra = new byte[extra.Length]; + Array.Copy(extra, 0, result.extra, 0, extra.Length); + } + + return result; + } + + #endregion + + /// + /// Gets a string representation of this ZipEntry. + /// + /// A readable textual representation of this + public override string ToString() + { + return name; + } + + /// + /// Test a compression method to see if this library + /// supports extracting data compressed with that method + /// + /// The compression method to test. + /// Returns true if the compression method is supported; false otherwise + public static bool IsCompressionMethodSupported(CompressionMethod method) + { + return + ( method == CompressionMethod.Deflated ) || + ( method == CompressionMethod.Stored ); + } + + /// + /// Cleans a name making it conform to Zip file conventions. + /// Devices names ('c:\') and UNC share names ('\\server\share') are removed + /// and forward slashes ('\') are converted to back slashes ('/'). + /// Names are made relative by trimming leading slashes which is compatible + /// with the ZIP naming convention. + /// + /// The name to clean + /// The 'cleaned' name. + /// + /// The Zip name transform class is more flexible. + /// + public static string CleanName(string name) + { + if (name == null) { + return string.Empty; + } + + if (Path.IsPathRooted(name) == true) { + // NOTE: + // for UNC names... \\machine\share\zoom\beet.txt gives \zoom\beet.txt + name = name.Substring(Path.GetPathRoot(name).Length); + } + + name = name.Replace(@"\", "/"); + + while ( (name.Length > 0) && (name[0] == '/')) { + name = name.Remove(0, 1); + } + return name; + } + + #region Instance Fields + Known known; + int externalFileAttributes = -1; // contains external attributes (O/S dependant) + + ushort versionMadeBy; // Contains host system and version information + // only relevant for central header entries + + string name; + ulong size; + ulong compressedSize; + ushort versionToExtract; // Version required to extract (library handles <= 2.0) + uint crc; + uint dosTime; + + CompressionMethod method = CompressionMethod.Deflated; + byte[] extra; + string comment; + + int flags; // general purpose bit flags + + long zipFileIndex = -1; // used by ZipFile + long offset; // used by ZipFile and ZipOutputStream + + bool forceZip64_; + byte cryptoCheckValue_; + #endregion + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipEntryFactory.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipEntryFactory.cs new file mode 100644 index 0000000..8f33f52 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipEntryFactory.cs @@ -0,0 +1,384 @@ +// ZipEntryFactory.cs +// +// Copyright 2006 John Reilly +// +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using System.IO; +using ICSharpCode.SharpZipLib.Silverlight.Core; +using IEntryFactory=ICSharpCode.SharpZipLib.Silverlight.Zip.IEntryFactory; +using ZipEntry=ICSharpCode.SharpZipLib.Silverlight.Zip.ZipEntry; +using ZipException=ICSharpCode.SharpZipLib.Silverlight.Zip.ZipException; +using ZipNameTransform=ICSharpCode.SharpZipLib.Zip.ZipNameTransform; + +namespace ICSharpCode.SharpZipLib.Silverlight.Zip +{ + /// + /// Basic implementation of + /// + public class ZipEntryFactory : IEntryFactory + { + #region Enumerations + /// + /// Defines the possible values to be used for the . + /// + public enum TimeSetting + { + /// + /// Use the recorded LastWriteTime value for the file. + /// + LastWriteTime, + /// + /// Use the recorded LastWriteTimeUtc value for the file + /// + LastWriteTimeUtc, + /// + /// Use the recorded CreateTime value for the file. + /// + CreateTime, + /// + /// Use the recorded CreateTimeUtc value for the file. + /// + CreateTimeUtc, + /// + /// Use the recorded LastAccessTime value for the file. + /// + LastAccessTime, + /// + /// Use the recorded LastAccessTimeUtc value for the file. + /// + LastAccessTimeUtc, + /// + /// Use a fixed value. + /// + /// The actual value used can be + /// specified via the constructor or + /// using the with the setting set + /// to which will use the when this class was constructed. + /// The property can also be used to set this value. + Fixed, + } + #endregion + + #region Constructors + /// + /// Initialise a new instance of the class. + /// + /// A default , and the LastWriteTime for files is used. + public ZipEntryFactory() + { + nameTransform_ = new ZipNameTransform(); + } + + /// + /// Initialise a new instance of using the specified + /// + /// The time setting to use when creating Zip entries. + public ZipEntryFactory(TimeSetting timeSetting) + { + timeSetting_ = timeSetting; + nameTransform_ = new ZipNameTransform(); + } + + /// + /// Initialise a new instance of using the specified + /// + /// The time to set all values to. + public ZipEntryFactory(DateTime time) + { + timeSetting_ = TimeSetting.Fixed; + FixedDateTime = time; + nameTransform_ = new ZipNameTransform(); + } + + #endregion + + #region Properties + /// + /// Get / set the to be used when creating new values. + /// + /// + /// Setting this property to null will cause a default name transform to be used. + /// + public INameTransform NameTransform + { + get { return nameTransform_; } + set + { + nameTransform_ = value ?? new ZipNameTransform(); + } + } + + /// + /// Get / set the in use. + /// + public TimeSetting Setting + { + get { return timeSetting_; } + set { timeSetting_ = value; } + } + + /// + /// Get / set the value to use when is set to + /// + public DateTime FixedDateTime + { + get { return fixedDateTime_; } + set + { + if (value.Year < 1970) { + throw new ArgumentException("Value is too old to be valid", "value"); + } + fixedDateTime_ = value; + } + } + + /// + /// A bitmask defining the attributes to be retrieved from the actual file. + /// + /// The default is to get all possible attributes from the actual file. + public int GetAttributes + { + get { return getAttributes_; } + set { getAttributes_ = value; } + } + + /// + /// A bitmask defining which attributes are to be set on. + /// + /// By default no attributes are set on. + public int SetAttributes + { + get { return setAttributes_; } + set { setAttributes_ = value; } + } + + /// + /// Get set a value indicating wether unidoce text should be set on. + /// + public bool IsUnicodeText + { + get { return isUnicodeText_; } + set { isUnicodeText_ = value; } + } + + #endregion + + #region IEntryFactory Members + + /// + /// Make a new for a file. + /// + /// The name of the file to create a new entry for. + /// Returns a new based on the . + public ZipEntry MakeFileEntry(string fileName) + { + return MakeFileEntry(fileName, true); + } + + /// + /// Make a new from a name. + /// + /// The name of the file to create a new entry for. + /// If true entry detail is retrieved from the file system if the file exists. + /// Returns a new based on the . + public ZipEntry MakeFileEntry(string fileName, bool useFileSystem) + { + var result = new ZipEntry(nameTransform_.TransformFile(fileName)){IsUnicodeText = isUnicodeText_}; + + var externalAttributes = 0; + var useAttributes = (setAttributes_ != 0); + + FileInfo fi = null; + if (useFileSystem) + { + fi = new FileInfo(fileName); + } + + if ((fi != null) && fi.Exists) + { + switch (timeSetting_) + { + case TimeSetting.CreateTime: + result.DateTime = fi.CreationTime; + break; + + //case TimeSetting.CreateTimeUtc: + //result.DateTime = fi.CreationTimeUtc; + //break; + + case TimeSetting.LastAccessTime: + result.DateTime = fi.LastAccessTime; + break; + + //case TimeSetting.LastAccessTimeUtc: + //result.DateTime = fi.LastAccessTimeUtc; + //break; + + case TimeSetting.LastWriteTime: + result.DateTime = fi.LastWriteTime; + break; + + //case TimeSetting.LastWriteTimeUtc: + //result.DateTime = fi.LastWriteTimeUtc; + //break; + + case TimeSetting.Fixed: + result.DateTime = fixedDateTime_; + break; + + default: + throw new ZipException("Unhandled time setting in MakeFileEntry"); + } + + result.Size = fi.Length; + + useAttributes = true; + externalAttributes = ((int)fi.Attributes & getAttributes_); + } + else + { + if (timeSetting_ == TimeSetting.Fixed) + { + result.DateTime = fixedDateTime_; + } + } + + if (useAttributes) + { + externalAttributes |= setAttributes_; + result.ExternalFileAttributes = externalAttributes; + } + + return result; + } + + /// + /// Make a new for a directory. + /// + /// The raw untransformed name for the new directory + /// Returns a new representing a directory. + public ZipEntry MakeDirectoryEntry(string directoryName) + { + return MakeDirectoryEntry(directoryName, true); + } + + /// + /// Make a new for a directory. + /// + /// The raw untransformed name for the new directory + /// If true entry detail is retrieved from the file system if the file exists. + /// Returns a new representing a directory. + public ZipEntry MakeDirectoryEntry(string directoryName, bool useFileSystem) + { + + var result = new ZipEntry(nameTransform_.TransformDirectory(directoryName)){Size = 0}; + + var externalAttributes = 0; + + DirectoryInfo di = null; + + if (useFileSystem) + { + di = new DirectoryInfo(directoryName); + } + + + if ((di != null) && di.Exists) + { + switch (timeSetting_) + { + case TimeSetting.CreateTime: + result.DateTime = di.CreationTime; + break; + + //case TimeSetting.CreateTimeUtc: + //result.DateTime = di.CreationTimeUtc; + //break; + + case TimeSetting.LastAccessTime: + result.DateTime = di.LastAccessTime; + break; + + //case TimeSetting.LastAccessTimeUtc: + //result.DateTime = di.LastAccessTimeUtc; + //break; + + case TimeSetting.LastWriteTime: + result.DateTime = di.LastWriteTime; + break; + + //case TimeSetting.LastWriteTimeUtc: + //result.DateTime = di.LastWriteTimeUtc; + //break; + + case TimeSetting.Fixed: + result.DateTime = fixedDateTime_; + break; + + default: + throw new ZipException("Unhandled time setting in MakeDirectoryEntry"); + } + + externalAttributes = ((int)di.Attributes & getAttributes_); + } + else + { + if (timeSetting_ == TimeSetting.Fixed) + { + result.DateTime = fixedDateTime_; + } + } + + // Always set directory attribute on. + externalAttributes |= (setAttributes_ | 16); + result.ExternalFileAttributes = externalAttributes; + + return result; + } + + #endregion + + #region Instance Fields + INameTransform nameTransform_; + DateTime fixedDateTime_ = DateTime.Now; + TimeSetting timeSetting_; + bool isUnicodeText_; + + int getAttributes_ = -1; + int setAttributes_; + #endregion + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipException.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipException.cs new file mode 100644 index 0000000..0ebb604 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipException.cs @@ -0,0 +1,85 @@ +// ZipException.cs +// +// Copyright (C) 2001 Mike Krueger +// +// This file was translated from java, it was part of the GNU Classpath +// Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using ICSharpCode.SharpZipLib.Silverlight; +using ICSharpCode.SharpZipLib.Silverlight.Serialization; + +namespace ICSharpCode.SharpZipLib.Silverlight.Zip +{ + /// + /// Represents exception conditions specific to Zip archive handling + /// + [Serializable] + public class ZipException : SharpZipBaseException + { + /// + /// Deserialization constructor + /// + /// for this constructor + protected ZipException(SerializationInfo info) + { + } + + /// + /// Initializes a new instance of the ZipException class. + /// + public ZipException() + { + } + + /// + /// Initializes a new instance of the ZipException class with a specified error message. + /// + /// The error message that explains the reason for the exception. + public ZipException(string message) + : base(message) + { + } + + /// + /// Initialise a new instance of ZipException. + /// + /// A message describing the error. + /// The exception that is the cause of the current exception. + public ZipException(string message, Exception exception) + : base(message, exception) + { + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipExtraData.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipExtraData.cs new file mode 100644 index 0000000..2557d7a --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipExtraData.cs @@ -0,0 +1,978 @@ +// +// ZipExtraData.cs +// +// Copyright 2004-2007 John Reilly +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using System.Collections; +using System.IO; +using ICSharpCode.SharpZipLib.Zip; + +namespace ICSharpCode.SharpZipLib.Silverlight.Zip +{ + /// + /// ExtraData tagged value interface. + /// + public interface ITaggedData + { + /// + /// Get the ID for this tagged data value. + /// + short TagID { get; } + + /// + /// Set the contents of this instance from the data passed. + /// + /// The data to extract contents from. + /// The offset to begin extracting data from. + /// The number of bytes to extract. + void SetData(byte[] data, int offset, int count); + + /// + /// Get the data representing this instance. + /// + /// Returns the data for this instance. + byte[] GetData(); + } + + /// + /// A raw binary tagged value + /// + public class RawTaggedData : ITaggedData + { + /// + /// Initialise a new instance. + /// + /// The tag ID. + public RawTaggedData(short tag) + { + tag_ = tag; + } + + #region ITaggedData Members + + /// + /// Get the ID for this tagged data value. + /// + public short TagID + { + get { return tag_; } + set { tag_ = value; } + } + + /// + /// Set the data from the raw values provided. + /// + /// The raw data to extract values from. + /// The index to start extracting values from. + /// The number of bytes available. + public void SetData(byte[] data, int offset, int count) + { + if( data==null ) + { + throw new ArgumentNullException("data"); + } + + data_=new byte[count]; + Array.Copy(data, offset, data_, 0, count); + } + + /// + /// Get the binary data representing this instance. + /// + /// The raw binary data representing this instance. + public byte[] GetData() + { + return data_; + } + + #endregion + + /// + /// Get /set the binary data representing this instance. + /// + /// The raw binary data representing this instance. + public byte[] Data + { + get { return data_; } + set { data_=value; } + } + + #region Instance Fields + /// + /// The tag ID for this instance. + /// + protected short tag_; + + byte[] data_; + #endregion + } + + /// + /// Class representing extended unix date time values. + /// + public class ExtendedUnixData : ITaggedData + { + /// + /// Flags indicate which values are included in this instance. + /// + [Flags] + public enum Flags : byte + { + /// + /// The modification time is included + /// + ModificationTime = 0x01, + + /// + /// The access time is included + /// + AccessTime = 0x02, + + /// + /// The create time is included. + /// + CreateTime = 0x04, + } + + #region ITaggedData Members + + /// + /// Get the ID + /// + public short TagID + { + get { return 0x5455; } + } + + /// + /// Set the data from the raw values provided. + /// + /// The raw data to extract values from. + /// The index to start extracting values from. + /// The number of bytes available. + public void SetData(byte[] data, int index, int count) + { + using (MemoryStream ms = new MemoryStream(data, index, count, false)) + using (ZipHelperStream helperStream = new ZipHelperStream(ms)) + { + // bit 0 if set, modification time is present + // bit 1 if set, access time is present + // bit 2 if set, creation time is present + + flags_ = (Flags)helperStream.ReadByte(); + if (((flags_ & Flags.ModificationTime) != 0) && (count >= 5)) + { + int iTime = helperStream.ReadLEInt(); + + modificationTime_ = (new System.DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime() + + new TimeSpan(0, 0, 0, iTime, 0)).ToLocalTime(); + } + + if ((flags_ & Flags.AccessTime) != 0) + { + int iTime = helperStream.ReadLEInt(); + + lastAccessTime_ = (new System.DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime() + + new TimeSpan(0, 0, 0, iTime, 0)).ToLocalTime(); + } + + if ((flags_ & Flags.CreateTime) != 0) + { + int iTime = helperStream.ReadLEInt(); + + createTime_ = (new System.DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime() + + new TimeSpan(0, 0, 0, iTime, 0)).ToLocalTime(); + } + } + } + + /// + /// Get the binary data representing this instance. + /// + /// The raw binary data representing this instance. + public byte[] GetData() + { + using (MemoryStream ms = new MemoryStream()) + using (ZipHelperStream helperStream = new ZipHelperStream(ms)) + { + helperStream.IsStreamOwner = false; + helperStream.WriteByte((byte)flags_); // Flags + if ( (flags_ & Flags.ModificationTime) != 0) { + TimeSpan span = modificationTime_.ToUniversalTime() - new System.DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime(); + int seconds = (int)span.TotalSeconds; + helperStream.WriteLEInt(seconds); + } + if ( (flags_ & Flags.AccessTime) != 0) { + TimeSpan span = lastAccessTime_.ToUniversalTime() - new System.DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime(); + int seconds = (int)span.TotalSeconds; + helperStream.WriteLEInt(seconds); + } + if ( (flags_ & Flags.CreateTime) != 0) { + TimeSpan span = createTime_.ToUniversalTime() - new System.DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime(); + int seconds = (int)span.TotalSeconds; + helperStream.WriteLEInt(seconds); + } + return ms.ToArray(); + } + } + + #endregion + + /// + /// Test a value to see if is valid and can be represented here. + /// + /// The value to test. + /// Returns true if the value is valid and can be represented; false if not. + /// The standard Unix time is a signed integer data type, directly encoding the Unix time number, + /// which is the number of seconds since 1970-01-01. + /// Being 32 bits means the values here cover a range of about 136 years. + /// The minimum representable time is 1901-12-13 20:45:52, + /// and the maximum representable time is 2038-01-19 03:14:07. + /// + public static bool IsValidValue(DateTime value) + { + return (( value >= new DateTime(1901, 12, 13, 20, 45, 52)) || + ( value <= new DateTime(2038, 1, 19, 03, 14, 07) )); + } + + /// + /// Get /set the Modification Time + /// + /// + /// + public DateTime ModificationTime + { + get { return modificationTime_; } + set + { + if ( !IsValidValue(value) ) { + throw new ArgumentOutOfRangeException("value"); + } + + flags_ |= Flags.ModificationTime; + modificationTime_=value; + } + } + + /// + /// Get / set the Access Time + /// + /// + /// + public DateTime AccessTime + { + get { return lastAccessTime_; } + set { + if ( !IsValidValue(value) ) { + throw new ArgumentOutOfRangeException("value"); + } + + flags_ |= Flags.AccessTime; + lastAccessTime_=value; + } + } + + /// + /// Get / Set the Create Time + /// + /// + /// + public DateTime CreateTime + { + get { return createTime_; } + set { + if ( !IsValidValue(value) ) { + throw new ArgumentOutOfRangeException("value"); + } + + flags_ |= Flags.CreateTime; + createTime_=value; + } + } + + /// + /// Get/set the values to include. + /// + Flags Include + { + get { return flags_; } + set { flags_ = value; } + } + + #region Instance Fields + Flags flags_; + DateTime modificationTime_ = new DateTime(1970,1,1); + DateTime lastAccessTime_ = new DateTime(1970, 1, 1); + DateTime createTime_ = new DateTime(1970, 1, 1); + #endregion + } + + /// + /// Class handling NT date time values. + /// + public class NTTaggedData : ITaggedData + { + /// + /// Get the ID for this tagged data value. + /// + public short TagID + { + get { return 10; } + } + + /// + /// Set the data from the raw values provided. + /// + /// The raw data to extract values from. + /// The index to start extracting values from. + /// The number of bytes available. + public void SetData(byte[] data, int index, int count) + { + using (MemoryStream ms = new MemoryStream(data, index, count, false)) + using (ZipHelperStream helperStream = new ZipHelperStream(ms)) + { + helperStream.ReadLEInt(); // Reserved + while (helperStream.Position < helperStream.Length) + { + int ntfsTag = helperStream.ReadLEShort(); + int ntfsLength = helperStream.ReadLEShort(); + if (ntfsTag == 1) + { + if (ntfsLength >= 24) + { + long lastModificationTicks = helperStream.ReadLELong(); + lastModificationTime_ = DateTime.FromFileTime(lastModificationTicks); + + long lastAccessTicks = helperStream.ReadLELong(); + lastAccessTime_ = DateTime.FromFileTime(lastAccessTicks); + + long createTimeTicks = helperStream.ReadLELong(); + createTime_ = DateTime.FromFileTime(createTimeTicks); + } + break; + } + else + { + // An unknown NTFS tag so simply skip it. + helperStream.Seek(ntfsLength, SeekOrigin.Current); + } + } + } + } + + /// + /// Get the binary data representing this instance. + /// + /// The raw binary data representing this instance. + public byte[] GetData() + { + using (MemoryStream ms = new MemoryStream()) + using (ZipHelperStream helperStream = new ZipHelperStream(ms)) + { + helperStream.IsStreamOwner = false; + helperStream.WriteLEInt(0); // Reserved + helperStream.WriteLEShort(1); // Tag + helperStream.WriteLEShort(24); // Length = 3 x 8. + helperStream.WriteLELong(lastModificationTime_.ToFileTime()); + helperStream.WriteLELong(lastAccessTime_.ToFileTime()); + helperStream.WriteLELong(createTime_.ToFileTime()); + return ms.ToArray(); + } + } + + /// + /// Test a valuie to see if is valid and can be represented here. + /// + /// The value to test. + /// Returns true if the value is valid and can be represented; false if not. + /// + /// NTFS filetimes are 64-bit unsigned integers, stored in Intel + /// (least significant byte first) byte order. They determine the + /// number of 1.0E-07 seconds (1/10th microseconds!) past WinNT "epoch", + /// which is "01-Jan-1601 00:00:00 UTC". 28 May 60056 is the upper limit + /// + public static bool IsValidValue(DateTime value) + { + bool result = true; + try + { + value.ToFileTimeUtc(); + } + catch + { + result = false; + } + return result; + } + + /// + /// Get/set the last modification time. + /// + public DateTime LastModificationTime + { + get { return lastModificationTime_; } + set { + if (! IsValidValue(value)) + { + throw new ArgumentOutOfRangeException("value"); + } + lastModificationTime_ = value; + } + } + + /// + /// Get /set the create time + /// + public DateTime CreateTime + { + get { return createTime_; } + set { + if ( !IsValidValue(value)) { + throw new ArgumentOutOfRangeException("value"); + } + createTime_ = value; + } + } + + /// + /// Get /set the last access time. + /// + public DateTime LastAccessTime + { + get { return lastAccessTime_; } + set { + if (!IsValidValue(value)) { + throw new ArgumentOutOfRangeException("value"); + } + lastAccessTime_ = value; + } + } + + #region Instance Fields + DateTime lastAccessTime_ = DateTime.FromFileTime(0); + DateTime lastModificationTime_ = DateTime.FromFileTime(0); + DateTime createTime_ = DateTime.FromFileTime(0); + #endregion + } + + /// + /// A factory that creates tagged data instances. + /// + interface ITaggedDataFactory + { + /// + /// Get data for a specific tag value. + /// + /// The tag ID to find. + /// The data to search. + /// The offset to begin extracting data from. + /// The number of bytes to extract. + /// The located value found, or null if not found. + ITaggedData Create(short tag, byte[] data, int offset, int count); + } + + /// + /// + /// A class to handle the extra data field for Zip entries + /// + /// + /// Extra data contains 0 or more values each prefixed by a header tag and length. + /// They contain zero or more bytes of actual data. + /// The data is held internally using a copy on write strategy. This is more efficient but + /// means that for extra data created by passing in data can have the values modified by the caller + /// in some circumstances. + /// + sealed public class ZipExtraData : IDisposable + { + #region Constructors + /// + /// Initialise a default instance. + /// + public ZipExtraData() + { + Clear(); + } + + /// + /// Initialise with known extra data. + /// + /// The extra data. + public ZipExtraData(byte[] data) + { + if ( data == null ) + { + data_ = new byte[0]; + } + else + { + data_ = data; + } + } + #endregion + + /// + /// Get the raw extra data value + /// + /// Returns the raw byte[] extra data this instance represents. + public byte[] GetEntryData() + { + if ( Length > ushort.MaxValue ) { + throw new ZipException("Data exceeds maximum length"); + } + + return (byte[])data_.Clone(); + } + + /// + /// Clear the stored data. + /// + public void Clear() + { + if ( (data_ == null) || (data_.Length != 0) ) { + data_ = new byte[0]; + } + } + + /// + /// Gets the current extra data length. + /// + public int Length + { + get { return data_.Length; } + } + + /// + /// Get a read-only for the associated tag. + /// + /// The tag to locate data for. + /// Returns a containing tag data or null if no tag was found. + public Stream GetStreamForTag(int tag) + { + Stream result = null; + if ( Find(tag) ) { + result = new MemoryStream(data_, index_, readValueLength_, false); + } + return result; + } + + /// + /// Get the tagged data for a tag. + /// + /// The tag to search for. + /// Returns a tagged value or null if none found. + private ITaggedData GetData(short tag) + { + ITaggedData result = null; + if (Find(tag)) + { + result = Create(tag, data_, readValueStart_, readValueLength_); + } + return result; + } + + ITaggedData Create(short tag, byte[] data, int offset, int count) + { + ITaggedData result = null; + switch ( tag ) + { + case 0x000A: + result = new NTTaggedData(); + break; + case 0x5455: + result = new ExtendedUnixData(); + break; + default: + result = new RawTaggedData(tag); + break; + } + result.SetData(data_, readValueStart_, readValueLength_); + return result; + } + + /// + /// Get the length of the last value found by + /// + /// This is only value if has previsouly returned true. + public int ValueLength + { + get { return readValueLength_; } + } + + /// + /// Get the index for the current read value. + /// + /// This is only valid if has previously returned true. + /// Initially it will be the index of the first byte of actual data. The value is updated after calls to + /// , and . + public int CurrentReadIndex + { + get { return index_; } + } + + /// + /// Get the number of bytes remaining to be read for the current value; + /// + public int UnreadCount + { + get + { + if ((readValueStart_ > data_.Length) || + (readValueStart_ < 4) ) { + throw new ZipException("Find must be called before calling a Read method"); + } + + return readValueStart_ + readValueLength_ - index_; + } + } + + /// + /// Find an extra data value + /// + /// The identifier for the value to find. + /// Returns true if the value was found; false otherwise. + public bool Find(int headerID) + { + readValueStart_ = data_.Length; + readValueLength_ = 0; + index_ = 0; + + int localLength = readValueStart_; + int localTag = headerID - 1; + + // Trailing bytes that cant make up an entry (as there arent enough + // bytes for a tag and length) are ignored! + while ( (localTag != headerID) && (index_ < data_.Length - 3) ) { + localTag = ReadShortInternal(); + localLength = ReadShortInternal(); + if ( localTag != headerID ) { + index_ += localLength; + } + } + + bool result = (localTag == headerID) && ((index_ + localLength) <= data_.Length); + + if ( result ) { + readValueStart_ = index_; + readValueLength_ = localLength; + } + + return result; + } + + /// + /// Add a new entry to extra data. + /// + /// The value to add. + public void AddEntry(ITaggedData taggedData) + { + if (taggedData == null) + { + throw new ArgumentNullException("taggedData"); + } + AddEntry(taggedData.TagID, taggedData.GetData()); + } + + /// + /// Add a new entry to extra data + /// + /// The ID for this entry. + /// The data to add. + /// If the ID already exists its contents are replaced. + public void AddEntry(int headerID, byte[] fieldData) + { + if ( (headerID > ushort.MaxValue) || (headerID < 0)) { + throw new ArgumentOutOfRangeException("headerID"); + } + + int addLength = (fieldData == null) ? 0 : fieldData.Length; + + if ( addLength > ushort.MaxValue ) { + throw new ArgumentOutOfRangeException("fieldData", "exceeds maximum length"); + } + + // Test for new length before adjusting data. + int newLength = data_.Length + addLength + 4; + + if ( Find(headerID) ) + { + newLength -= (ValueLength + 4); + } + + if ( newLength > ushort.MaxValue ) { + throw new ZipException("Data exceeds maximum length"); + } + + Delete(headerID); + + byte[] newData = new byte[newLength]; + data_.CopyTo(newData, 0); + int index = data_.Length; + data_ = newData; + SetShort(ref index, headerID); + SetShort(ref index, addLength); + if ( fieldData != null ) { + fieldData.CopyTo(newData, index); + } + } + + /// + /// Start adding a new entry. + /// + /// Add data using , , , or . + /// The new entry is completed and actually added by calling + /// + public void StartNewEntry() + { + newEntry_ = new MemoryStream(); + } + + /// + /// Add entry data added since using the ID passed. + /// + /// The identifier to use for this entry. + public void AddNewEntry(int headerID) + { + byte[] newData = newEntry_.ToArray(); + newEntry_ = null; + AddEntry(headerID, newData); + } + + /// + /// Add a byte of data to the pending new entry. + /// + /// The byte to add. + /// + public void AddData(byte data) + { + newEntry_.WriteByte(data); + } + + /// + /// Add data to a pending new entry. + /// + /// The data to add. + /// + public void AddData(byte[] data) + { + if ( data == null ) { + throw new ArgumentNullException("data"); + } + + newEntry_.Write(data, 0, data.Length); + } + + /// + /// Add a short value in little endian order to the pending new entry. + /// + /// The data to add. + /// + public void AddLeShort(int toAdd) + { + unchecked { + newEntry_.WriteByte(( byte )toAdd); + newEntry_.WriteByte(( byte )(toAdd >> 8)); + } + } + + /// + /// Add an integer value in little endian order to the pending new entry. + /// + /// The data to add. + /// + public void AddLeInt(int toAdd) + { + unchecked { + AddLeShort(( short )toAdd); + AddLeShort(( short )(toAdd >> 16)); + } + } + + /// + /// Add a long value in little endian order to the pending new entry. + /// + /// The data to add. + /// + public void AddLeLong(long toAdd) + { + unchecked { + AddLeInt(( int )(toAdd & 0xffffffff)); + AddLeInt(( int )(toAdd >> 32)); + } + } + + /// + /// Delete an extra data field. + /// + /// The identifier of the field to delete. + /// Returns true if the field was found and deleted. + public bool Delete(int headerID) + { + bool result = false; + + if ( Find(headerID) ) { + result = true; + int trueStart = readValueStart_ - 4; + + byte[] newData = new byte[data_.Length - (ValueLength + 4)]; + Array.Copy(data_, 0, newData, 0, trueStart); + + int trueEnd = trueStart + ValueLength + 4; + Array.Copy(data_, trueEnd, newData, trueStart, data_.Length - trueEnd); + data_ = newData; + } + return result; + } + + #region Reading Support + /// + /// Read a long in little endian form from the last found data value + /// + /// Returns the long value read. + public long ReadLong() + { + ReadCheck(8); + return (ReadInt() & 0xffffffff) | ((( long )ReadInt()) << 32); + } + + /// + /// Read an integer in little endian form from the last found data value. + /// + /// Returns the integer read. + public int ReadInt() + { + ReadCheck(4); + + int result = data_[index_] + (data_[index_ + 1] << 8) + + (data_[index_ + 2] << 16) + (data_[index_ + 3] << 24); + index_ += 4; + return result; + } + + /// + /// Read a short value in little endian form from the last found data value. + /// + /// Returns the short value read. + public int ReadShort() + { + ReadCheck(2); + int result = data_[index_] + (data_[index_ + 1] << 8); + index_ += 2; + return result; + } + + /// + /// Read a byte from an extra data + /// + /// The byte value read or -1 if the end of data has been reached. + public int ReadByte() + { + int result = -1; + if ( (index_ < data_.Length) && (readValueStart_ + readValueLength_ > index_) ) { + result = data_[index_]; + index_ += 1; + } + return result; + } + + /// + /// Skip data during reading. + /// + /// The number of bytes to skip. + public void Skip(int amount) + { + ReadCheck(amount); + index_ += amount; + } + + void ReadCheck(int length) + { + if ((readValueStart_ > data_.Length) || + (readValueStart_ < 4) ) { + throw new ZipException("Find must be called before calling a Read method"); + } + + if (index_ > readValueStart_ + readValueLength_ - length ) { + throw new ZipException("End of extra data"); + } + } + + /// + /// Internal form of that reads data at any location. + /// + /// Returns the short value read. + int ReadShortInternal() + { + if ( index_ > data_.Length - 2) { + throw new ZipException("End of extra data"); + } + + int result = data_[index_] + (data_[index_ + 1] << 8); + index_ += 2; + return result; + } + + void SetShort(ref int index, int source) + { + data_[index] = (byte)source; + data_[index + 1] = (byte)(source >> 8); + index += 2; + } + + #endregion + + #region IDisposable Members + + /// + /// Dispose of this instance. + /// + public void Dispose() + { + if ( newEntry_ != null ) { + newEntry_.Close(); + } + } + + #endregion + + #region Instance Fields + int index_; + int readValueStart_; + int readValueLength_; + + MemoryStream newEntry_; + byte[] data_; + #endregion + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipFile.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipFile.cs new file mode 100644 index 0000000..09862e7 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipFile.cs @@ -0,0 +1,4108 @@ +// ZipFile.cs +// +// Copyright (C) 2001 Mike Krueger +// Copyright (C) 2004 John Reilly +// +// This file was translated from java, it was part of the GNU Classpath +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Globalization; + +using System.Security.Cryptography; +using ICSharpCode.SharpZipLib.Silverlight.Checksums; +using ICSharpCode.SharpZipLib.Silverlight.Core; +using ICSharpCode.SharpZipLib.Silverlight.Compat; +using ICSharpCode.SharpZipLib.Silverlight.Encryption; +using ICSharpCode.SharpZipLib.Silverlight.Zip; +using ICSharpCode.SharpZipLib.Silverlight.Zip.Compression; +using ICSharpCode.SharpZipLib.Silverlight.Zip.Compression.Streams; +using ICSharpCode.SharpZipLib.Zip; + +namespace ICSharpCode.SharpZipLib.Silverlight.Zip +{ + /// + /// Arguments used with KeysRequiredEvent + /// + public class KeysRequiredEventArgs : EventArgs + { + #region Constructors + /// + /// Initialise a new instance of + /// + /// The name of the file for which keys are required. + public KeysRequiredEventArgs(string name) + { + fileName = name; + } + + /// + /// Initialise a new instance of + /// + /// The name of the file for which keys are required. + /// The current key value. + public KeysRequiredEventArgs(string name, byte[] keyValue) + { + fileName = name; + key = keyValue; + } + + #endregion + #region Properties + /// + /// Get the name of the file for which keys are required. + /// + public string FileName + { + get { return fileName; } + } + + /// + /// Get/set the key value + /// + public byte[] Key + { + get { return key; } + set { key = value; } + } + #endregion + #region Instance Fields + string fileName; + byte[] key; + #endregion + } + + /// + /// The strategy to apply to testing. + /// + public enum TestStrategy + { + /// + /// Find the first error only. + /// + FindFirstError, + /// + /// Find all possible errors. + /// + FindAllErrors, + } + + /// + /// The operation in progress reported by a during testing. + /// + /// TestArchive + public enum TestOperation + { + /// + /// Setting up testing. + /// + Initialising, + + /// + /// Testing an individual entries header + /// + EntryHeader, + + /// + /// Testing an individual entries data + /// + EntryData, + + /// + /// Testing an individual entry has completed. + /// + EntryComplete, + + /// + /// Running miscellaneous tests + /// + MiscellaneousTests, + + /// + /// Testing is complete + /// + Complete, + } + + /// + /// Status returned returned by during testing. + /// + /// TestArchive + public class TestStatus + { + #region Constructors + /// + /// Initialise a new instance of + /// + /// The this status applies to. + public TestStatus(ZipFile file) + { + file_ = file; + } + #endregion + + #region Properties + + /// + /// Get the current in progress. + /// + public TestOperation Operation + { + get { return operation_; } + } + + /// + /// Get the this status is applicable to. + /// + public ZipFile File + { + get { return file_; } + } + + /// + /// Get the current/last entry tested. + /// + public ZipEntry Entry + { + get { return entry_; } + } + + /// + /// Get the number of errors detected so far. + /// + public int ErrorCount + { + get { return errorCount_; } + } + + /// + /// Get the number of bytes tested so far for the current entry. + /// + public long BytesTested + { + get { return bytesTested_; } + } + + /// + /// Get a value indicating wether the last entry test was valid. + /// + public bool EntryValid + { + get { return entryValid_; } + } + #endregion + + #region Internal API + internal void AddError() + { + errorCount_++; + entryValid_ = false; + } + + internal void SetOperation(TestOperation operation) + { + operation_ = operation; + } + + internal void SetEntry(ZipEntry entry) + { + entry_ = entry; + entryValid_ = true; + bytesTested_ = 0; + } + + internal void SetBytesTested(long value) + { + bytesTested_ = value; + } + #endregion + + #region Instance Fields + ZipFile file_; + ZipEntry entry_; + bool entryValid_; + int errorCount_; + long bytesTested_; + TestOperation operation_; + #endregion + } + + /// + /// Delegate invoked during testing if supplied indicating current progress and status. + /// + /// If the message is non-null an error has occured. If the message is null + /// the operation as found in status has started. + public delegate void ZipTestResultHandler(TestStatus status, string message); + + /// + /// The possible ways of applying updates to an archive. + /// + public enum FileUpdateMode + { + /// + /// Perform all updates on temporary files ensuring that the original file is saved. + /// + Safe, + /// + /// Update the archive directly, which is faster but less safe. + /// + Direct, + } + + /// + /// This class represents a Zip archive. You can ask for the contained + /// entries, or get an input stream for a file entry. The entry is + /// automatically decompressed. + /// + /// You can also update the archive adding or deleting entries. + /// + /// This class is thread safe for input: You can open input streams for arbitrary + /// entries in different threads. + ///
    + ///
    Author of the original java version : Jochen Hoenicke + ///
    + /// + /// + /// using System; + /// using System.Text; + /// using System.Collections; + /// using System.IO; + /// + /// using ICSharpCode.SharpZipLib.Zip; + /// + /// class MainClass + /// { + /// static public void Main(string[] args) + /// { + /// using (ZipFile zFile = new ZipFile(args[0])) { + /// Console.WriteLine("Listing of : " + zFile.Name); + /// Console.WriteLine(""); + /// Console.WriteLine("Raw Size Size Date Time Name"); + /// Console.WriteLine("-------- -------- -------- ------ ---------"); + /// foreach (ZipEntry e in zFile) { + /// if ( e.IsFile ) { + /// DateTime d = e.DateTime; + /// Console.WriteLine("{0, -10}{1, -10}{2} {3} {4}", e.Size, e.CompressedSize, + /// d.ToString("dd-MM-yy"), d.ToString("HH:mm"), + /// e.Name); + /// } + /// } + /// } + /// } + /// } + /// + /// + public class ZipFile : IEnumerable, IDisposable + { + #region KeyHandling + + /// + /// Delegate for handling keys/password setting during compresion/decompression. + /// + public delegate void KeysRequiredEventHandler( + object sender, + KeysRequiredEventArgs e + ); + + /// + /// Event handler for handling encryption keys. + /// + public KeysRequiredEventHandler KeysRequired; + + /// + /// Handles getting of encryption keys when required. + /// + /// The file for which encryption keys are required. + void OnKeysRequired(string fileName) + { + if (KeysRequired != null) { + KeysRequiredEventArgs krea = new KeysRequiredEventArgs(fileName, key); + KeysRequired(this, krea); + key = krea.Key; + } + } + + + /// + /// Get/set the encryption key value. + /// + byte[] Key + { + get { return key; } + set { key = value; } + } + + /// + /// Password to be used for encrypting/decrypting files. + /// + /// Set to null if no password is required. + public string Password + { + set + { + if ( (value == null) || (value.Length == 0) ) { + key = null; + } + else { + key = PkzipClassic.GenerateKeys(ZipConstants.ConvertToArray(value)); + } + } + } + + /// + /// Get a value indicating wether encryption keys are currently available. + /// + bool HaveKeys + { + get { return key != null; } + } + #endregion + + #region Constructors + /// + /// Opens a Zip file with the given name for reading. + /// + /// The name of the file to open. + /// + /// An i/o error occurs + /// + /// + /// The file doesn't contain a valid zip archive. + /// + public ZipFile(string name) + { + name_ = name; + + baseStream_ = File.OpenRead(name); + isStreamOwner = true; + + try { + ReadEntries(); + } + catch { + DisposeInternal(true); + throw; + } + } + + /// + /// Opens a Zip file reading the given . + /// + /// The to read archive data from. + /// + /// An i/o error occurs. + /// + /// + /// The file doesn't contain a valid zip archive. + /// + public ZipFile(FileStream file) + { + if ( file == null ) { + throw new ArgumentNullException("file"); + } + + if ( !file.CanSeek ) { + throw new ArgumentException("Stream is not seekable", "file"); + } + + baseStream_ = file; + name_ = file.Name; + isStreamOwner = true; + + try { + ReadEntries(); + } + catch { + DisposeInternal(true); + throw; + } + } + + /// + /// Opens a Zip file reading the given . + /// + /// The to read archive data from. + /// + /// An i/o error occurs + /// + /// + /// The file doesn't contain a valid zip archive.
    + /// The stream provided cannot seek + ///
    + public ZipFile(Stream stream) + { + if ( stream == null ) { + throw new ArgumentNullException("stream"); + } + + if ( !stream.CanSeek ) { + throw new ArgumentException("Stream is not seekable", "stream"); + } + + baseStream_ = stream; + isStreamOwner = true; + + if ( baseStream_.Length > 0 ) { + try { + ReadEntries(); + } + catch { + DisposeInternal(true); + throw; + } + } else { + entries_ = new ZipEntry[0]; + isNewArchive_ = true; + } + } + + /// + /// Initialises a default instance with no entries and no file storage. + /// + internal ZipFile() + { + entries_ = new ZipEntry[0]; + isNewArchive_ = true; + } + + #endregion + + #region Destructors and Closing + /// + /// Finalize this instance. + /// + ~ZipFile() + { + Dispose(false); + } + + /// + /// Closes the ZipFile. If the stream is owned then this also closes the underlying input stream. + /// Once closed, no further instance methods should be called. + /// + /// + /// An i/o error occurs. + /// + public void Close() + { + DisposeInternal(true); + GC.SuppressFinalize(this); + } + + #endregion + + #region Creators + /// + /// Create a new whose data will be stored in a file. + /// + /// The name of the archive to create. + /// Returns the newly created + public static ZipFile Create(string fileName) + { + if ( fileName == null ) { + throw new ArgumentNullException("fileName"); + } + + FileStream fs = File.Create(fileName); + + ZipFile result = new ZipFile(); + result.name_ = fileName; + result.baseStream_ = fs; + result.isStreamOwner = true; + return result; + } + + /// + /// Create a new whose data will be stored on a stream. + /// + /// The stream providing data storage. + /// Returns the newly created + public static ZipFile Create(Stream outStream) + { + if ( outStream == null ) { + throw new ArgumentNullException("outStream"); + } + + if ( !outStream.CanWrite ) { + throw new ArgumentException("Stream is not writeable", "outStream"); + } + + if ( !outStream.CanSeek ) { + throw new ArgumentException("Stream is not seekable", "outStream"); + } + + ZipFile result = new ZipFile(); + result.baseStream_ = outStream; + return result; + } + + #endregion + + #region Properties + /// + /// Get/set a flag indicating if the underlying stream is owned by the ZipFile instance. + /// If the flag is true then the stream will be closed when Close is called. + /// + /// + /// The default value is true in all cases. + /// + public bool IsStreamOwner + { + get { return isStreamOwner; } + set { isStreamOwner = value; } + } + + /// + /// Get a value indicating wether + /// this archive is embedded in another file or not. + /// + public bool IsEmbeddedArchive + { + // Not strictly correct in all circumstances currently + get { return offsetOfFirstEntry > 0; } + } + + /// + /// Get a value indicating that this archive is a new one. + /// + public bool IsNewArchive + { + get { return isNewArchive_; } + } + + /// + /// Gets the comment for the zip file. + /// + public string ZipFileComment + { + get { return comment_; } + } + + /// + /// Gets the name of this zip file. + /// + public string Name + { + get { return name_; } + } + + /// + /// Gets the number of entries in this zip file. + /// + /// + /// The Zip file has been closed. + /// + [Obsolete("Use the Count property instead")] + public int Size + { + get + { + if (entries_ != null) { + return entries_.Length; + } else { + throw new InvalidOperationException("ZipFile is closed"); + } + } + } + + /// + /// Get the number of entries contained in this . + /// + public long Count + { + get + { + if (entries_ != null) { + return entries_.Length; + } else { + throw new InvalidOperationException("ZipFile is closed"); + } + } + } + + /// + /// Indexer property for ZipEntries + /// + [System.Runtime.CompilerServices.IndexerNameAttribute("EntryByIndex")] + public ZipEntry this[int index] + { + get { + return (ZipEntry) entries_[index].Clone(); + } + } + + #endregion + + #region Input Handling + /// + /// Gets an enumerator for the Zip entries in this Zip file. + /// + /// Returns an for this archive. + /// + /// The Zip file has been closed. + /// + public IEnumerator GetEnumerator() + { + if (entries_ == null) { + throw new InvalidOperationException("ZipFile has closed"); + } + + return new ZipEntryEnumerator(entries_); + } + + /// + /// Return the index of the entry with a matching name + /// + /// Entry name to find + /// If true the comparison is case insensitive + /// The index position of the matching entry or -1 if not found + /// + /// The Zip file has been closed. + /// + public int FindEntry(string name, bool ignoreCase) + { + if (entries_ == null) { + throw new InvalidOperationException("ZipFile has been closed"); + } + + // TODO: This will be slow as the next ice age for huge archives! + for (int i = 0; i < entries_.Length; i++) { + // BUG: Throws MissingMethodException! + // CompareOptions options = (ignoreCase ? CompareOptions.IgnoreCase : CompareOptions.None); + // int comparison = string.Compare(name, entries_[i].Name, CultureInfo.InvariantCulture, options); + if (name.Compare(entries_[i].Name, ignoreCase, CultureInfo.InvariantCulture) == 0) + { + return i; + } + } + return -1; + } + + /// + /// Searches for a zip entry in this archive with the given name. + /// String comparisons are case insensitive + /// + /// + /// The name to find. May contain directory components separated by slashes ('/'). + /// + /// + /// A clone of the zip entry, or null if no entry with that name exists. + /// + /// + /// The Zip file has been closed. + /// + public ZipEntry GetEntry(string name) + { + if (entries_ == null) { + throw new InvalidOperationException("ZipFile has been closed"); + } + + int index = FindEntry(name, true); + return (index >= 0) ? (ZipEntry) entries_[index].Clone() : null; + } + + /// + /// Gets an input stream for reading the given zip entry data in an uncompressed form. + /// Normally the should be an entry returned by GetEntry(). + /// + /// The to obtain a data for + /// An input containing data for this + /// + /// The ZipFile has already been closed + /// + /// + /// The compression method for the entry is unknown + /// + /// + /// The entry is not found in the ZipFile + /// + public Stream GetInputStream(ZipEntry entry) + { + if ( entry == null ) { + throw new ArgumentNullException("entry"); + } + + if ( entries_ == null ) { + throw new InvalidOperationException("ZipFile has closed"); + } + + long index = entry.ZipFileIndex; + if ( (index < 0) || (index >= entries_.Length) || (entries_[index].Name != entry.Name) ) { + index = FindEntry(entry.Name, true); + if (index < 0) { + throw new ZipException("Entry cannot be found"); + } + } + return GetInputStream(index); + } + + /// + /// Creates an input stream reading a zip entry + /// + /// The index of the entry to obtain an input stream for. + /// + /// An input containing data for this + /// + /// + /// The ZipFile has already been closed + /// + /// + /// The compression method for the entry is unknown + /// + /// + /// The entry is not found in the ZipFile + /// + public Stream GetInputStream(long entryIndex) + { + if ( entries_ == null ) { + throw new InvalidOperationException("ZipFile is not open"); + } + + long start = LocateEntry(entries_[entryIndex]); + CompressionMethod method = entries_[entryIndex].CompressionMethod; + Stream result = new PartialInputStream(baseStream_, start, entries_[entryIndex].CompressedSize); + + if (entries_[entryIndex].IsCrypted == true) { +#if NETCF_1_0 + throw new ZipException("decryption not supported for Compact Framework 1.0"); +#else + result = CreateAndInitDecryptionStream(result, entries_[entryIndex]); + if (result == null) { + throw new ZipException("Unable to decrypt this entry"); + } +#endif + } + + switch (method) { + case CompressionMethod.Stored: + // read as is. + break; + + case CompressionMethod.Deflated: + // No need to worry about ownership and closing as underlying stream close does nothing. + result = new InflaterInputStream(result, new Inflater(true)); + break; + + default: + throw new ZipException("Unsupported compression method " + method); + } + + return result; + } + + #endregion + + #region Archive Testing + /// + /// Test an archive for integrity/validity + /// + /// Perform low level data Crc check + /// true if all tests pass, false otherwise + /// Testing will terminate on the first error found. + public bool TestArchive(bool testData) + { + return TestArchive(testData, TestStrategy.FindFirstError, null); + } + + /// + /// Test an archive for integrity/validity + /// + /// Perform low level data Crc check + /// The to apply. + /// The handler to call during testing. + /// true if all tests pass, false otherwise + public bool TestArchive(bool testData, TestStrategy strategy, ZipTestResultHandler resultHandler) + { + TestStatus status = new TestStatus(this); + + if ( resultHandler != null ) { + resultHandler(status, null); + } + + HeaderTest test = testData ? (HeaderTest.Header | HeaderTest.Extract) : HeaderTest.Header; + + bool testing = true; + + try { + int entryIndex = 0; + + while ( testing && (entryIndex < Count) ) { + if ( resultHandler != null ) { + status.SetEntry(this[entryIndex]); + status.SetOperation(TestOperation.EntryHeader); + resultHandler(status, null); + } + + try { + TestLocalHeader(this[entryIndex], test); + } + catch(ZipException ex) { + status.AddError(); + + if ( resultHandler != null ) { + resultHandler(status, + string.Format("Exception during test - '{0}'", ex.Message)); + } + + if ( strategy == TestStrategy.FindFirstError ) { + testing = false; + } + } + + if ( testing && testData && this[entryIndex].IsFile ) { + if ( resultHandler != null ) { + status.SetOperation(TestOperation.EntryData); + resultHandler(status, null); + } + + Stream entryStream = this.GetInputStream(this[entryIndex]); + + Crc32 crc = new Crc32(); + byte[] buffer = new byte[4096]; + long totalBytes = 0; + int bytesRead; + while ((bytesRead = entryStream.Read(buffer, 0, buffer.Length)) > 0) { + crc.Update(buffer, 0, bytesRead); + + if ( resultHandler != null ) { + totalBytes += bytesRead; + status.SetBytesTested(totalBytes); + resultHandler(status, null); + } + } + + if (this[entryIndex].Crc != crc.Value) { + status.AddError(); + + if ( resultHandler != null ) { + resultHandler(status, "CRC mismatch"); + } + + if ( strategy == TestStrategy.FindFirstError ) { + testing = false; + } + } + + if (( this[entryIndex].Flags & (int)GeneralBitFlags.Descriptor) != 0 ) { + ZipHelperStream helper = new ZipHelperStream(baseStream_); + DescriptorData data = new DescriptorData(); + helper.ReadDataDescriptor(this[entryIndex].LocalHeaderRequiresZip64, data); + if (this[entryIndex].Crc != data.Crc) { + status.AddError(); + } + + if (this[entryIndex].CompressedSize != data.CompressedSize) { + status.AddError(); + } + + if (this[entryIndex].Size != data.Size) { + status.AddError(); + } + } + } + + if ( resultHandler != null ) { + status.SetOperation(TestOperation.EntryComplete); + resultHandler(status, null); + } + + entryIndex += 1; + } + + if ( resultHandler != null ) { + status.SetOperation(TestOperation.MiscellaneousTests); + resultHandler(status, null); + } + + // TODO: the 'Corrina Johns' test where local headers are missing from + // the central directory. They are therefore invisible to many archivers. + } + catch (Exception ex) { + status.AddError(); + + if ( resultHandler != null ) { + resultHandler(status, string.Format("Exception during test - '{0}'", ex.Message)); + } + } + + if ( resultHandler != null ) { + status.SetOperation(TestOperation.Complete); + status.SetEntry(null); + resultHandler(status, null); + } + + return (status.ErrorCount == 0); + } + + [Flags] + enum HeaderTest + { + Extract = 0x01, // Check that this header represents an entry whose data can be extracted + Header = 0x02, // Check that this header contents are valid + } + + /// + /// Test a local header against that provided from the central directory + /// + /// + /// The entry to test against + /// + /// The type of tests to carry out. + /// The offset of the entries data in the file + long TestLocalHeader(ZipEntry entry, HeaderTest tests) + { + lock(baseStream_) + { + bool testHeader = (tests & HeaderTest.Header) != 0; + bool testData = (tests & HeaderTest.Extract) != 0; + + baseStream_.Seek(offsetOfFirstEntry + entry.Offset, SeekOrigin.Begin); + if ((int)ReadLEUint() != ZipConstants.LocalHeaderSignature) { + throw new ZipException(string.Format("Wrong local header signature @{0:X}", offsetOfFirstEntry + entry.Offset)); + } + + short extractVersion = ( short )ReadLEUshort(); + short localFlags = ( short )ReadLEUshort(); + short compressionMethod = ( short )ReadLEUshort(); + short fileTime = ( short )ReadLEUshort(); + short fileDate = ( short )ReadLEUshort(); + uint crcValue = ReadLEUint(); + long compressedSize = ReadLEUint(); + long size = ReadLEUint(); + int storedNameLength = ReadLEUshort(); + int extraDataLength = ReadLEUshort(); + + byte[] nameData = new byte[storedNameLength]; + StreamUtils.ReadFully(baseStream_, nameData); + + byte[] extraData = new byte[extraDataLength]; + StreamUtils.ReadFully(baseStream_, extraData); + + ZipExtraData ed = new ZipExtraData(extraData); + + // Extra data / zip64 checks + if (ed.Find(1)) + { + // TODO Check for tag values being distinct.. Multiple zip64 tags means what? + + // Zip64 extra data but 'extract version' is too low + if (extractVersion < ZipConstants.VersionZip64) + { + throw new ZipException( + string.Format("Extra data contains Zip64 information but version {0}.{1} is not high enough", + extractVersion / 10, extractVersion % 10)); + } + + // Zip64 extra data but size fields dont indicate its required. + if (((uint)size != uint.MaxValue) && ((uint)compressedSize != uint.MaxValue)) + { + throw new ZipException("Entry sizes not correct for Zip64"); + } + + size = ed.ReadLong(); + compressedSize = ed.ReadLong(); + } + else + { + // No zip64 extra data but entry requires it. + if ((extractVersion >= ZipConstants.VersionZip64) && + (((uint)size == uint.MaxValue) || ((uint)compressedSize == uint.MaxValue))) + { + throw new ZipException("Required Zip64 extended information missing"); + } + } + + if ( testData ) { + if ( entry.IsFile ) { + if ( !entry.IsCompressionMethodSupported() ) { + throw new ZipException("Compression method not supported"); + } + + if ( (extractVersion > ZipConstants.VersionMadeBy) + || ((extractVersion > 20) && (extractVersion < ZipConstants.VersionZip64)) ) { + throw new ZipException(string.Format("Version required to extract this entry not supported ({0})", extractVersion)); + } + + if ( (localFlags & ( int )(GeneralBitFlags.Patched | GeneralBitFlags.StrongEncryption | GeneralBitFlags.EnhancedCompress | GeneralBitFlags.HeaderMasked)) != 0 ) { + throw new ZipException("The library does not support the zip version required to extract this entry"); + } + } + } + + if ( testHeader ) { + if ((extractVersion <= 63) && // Ignore later versions as we dont know about them.. + (extractVersion != 10) && + (extractVersion != 11) && + (extractVersion != 20) && + (extractVersion != 21) && + (extractVersion != 25) && + (extractVersion != 27) && + (extractVersion != 45) && + (extractVersion != 46) && + (extractVersion != 50) && + (extractVersion != 51) && + (extractVersion != 52) && + (extractVersion != 61) && + (extractVersion != 62) && + (extractVersion != 63) + ) { + throw new ZipException(string.Format("Version required to extract this entry is invalid ({0})", extractVersion)); + } + + // Local entry flags dont have reserved bit set on. + if ( (localFlags & ( int )(GeneralBitFlags.ReservedPKware4 | GeneralBitFlags.ReservedPkware14 | GeneralBitFlags.ReservedPkware15)) != 0 ) { + throw new ZipException("Reserved bit flags cannot be set."); + } + + // Encryption requires extract version >= 20 + if ( ((localFlags & ( int )GeneralBitFlags.Encrypted) != 0) && (extractVersion < 20) ) { + throw new ZipException(string.Format("Version required to extract this entry is too low for encryption ({0})", extractVersion)); + } + + // Strong encryption requires encryption flag to be set and extract version >= 50. + if ( (localFlags & (int)GeneralBitFlags.StrongEncryption) != 0 ) { + if ( (localFlags & (int)GeneralBitFlags.Encrypted) == 0 ) { + throw new ZipException("Strong encryption flag set but encryption flag is not set"); + } + + if ( extractVersion < 50 ) { + throw new ZipException(string.Format("Version required to extract this entry is too low for encryption ({0})", extractVersion)); + } + } + + // Patched entries require extract version >= 27 + if ( ((localFlags & ( int )GeneralBitFlags.Patched) != 0) && (extractVersion < 27) ) { + throw new ZipException(string.Format("Patched data requires higher version than ({0})", extractVersion)); + } + + // Central header flags match local entry flags. + if ( localFlags != entry.Flags ) { + throw new ZipException("Central header/local header flags mismatch"); + } + + // Central header compression method matches local entry + if ( entry.CompressionMethod != ( CompressionMethod )compressionMethod ) { + throw new ZipException("Central header/local header compression method mismatch"); + } + + // Strong encryption and extract version match + if ( (localFlags & ( int )GeneralBitFlags.StrongEncryption) != 0 ) { + if ( extractVersion < 62 ) { + throw new ZipException("Strong encryption flag set but version not high enough"); + } + } + + if ( (localFlags & ( int )GeneralBitFlags.HeaderMasked) != 0 ) { + if ( (fileTime != 0) || (fileDate != 0) ) { + throw new ZipException("Header masked set but date/time values non-zero"); + } + } + + if ( (localFlags & ( int )GeneralBitFlags.Descriptor) == 0 ) { + if ( crcValue != (uint)entry.Crc ) { + throw new ZipException("Central header/local header crc mismatch"); + } + } + + // Crc valid for empty entry. + // This will also apply to streamed entries where size isnt known and the header cant be patched + if ( (size == 0) && (compressedSize == 0) ) { + if ( crcValue != 0 ) { + throw new ZipException("Invalid CRC for empty entry"); + } + } + + // TODO: make test more correct... can't compare lengths as was done originally as this can fail for MBCS strings + // Assuming a code page at this point is not valid? Best is to store the name length in the ZipEntry probably + if ( entry.Name.Length > storedNameLength ) { + throw new ZipException("File name length mismatch"); + } + + // Name data has already been read convert it and compare. + string localName = ZipConstants.ConvertToStringExt(localFlags, nameData); + + // Central directory and local entry name match + if ( localName != entry.Name ) { + throw new ZipException("Central header and local header file name mismatch"); + } + + // Directories have zero size. + if ( entry.IsDirectory ) { + if ( (compressedSize != 0) || (size != 0) ) { + throw new ZipException("Directory cannot have size"); + } + } + + if ( !ZipNameTransform.IsValidName(localName, true) ) { + throw new ZipException("Name is invalid"); + } + + } + + // Tests that apply to both data and header. + + // Size can be verified only if it is known in the local header. + // it will always be known in the central header. + if ((localFlags & (int)GeneralBitFlags.Descriptor) == 0 || + (size != 0 || compressedSize != 0)) { + + if (size != entry.Size) { + throw new ZipException( + string.Format("Size mismatch between central header({0}) and local header({1})", + entry.Size, size)); + } + + if (compressedSize != entry.CompressedSize) { + throw new ZipException( + string.Format("Compressed size mismatch between central header({0}) and local header({1})", + entry.CompressedSize, compressedSize)); + } + } + + int extraLength = storedNameLength + extraDataLength; + return offsetOfFirstEntry + entry.Offset + ZipConstants.LocalHeaderBaseSize + extraLength; + } + } + + #endregion + + #region Updating + + const int DefaultBufferSize = 4096; + + /// + /// The kind of update to apply. + /// + enum UpdateCommand + { + Copy, // Copy original file contents. + Modify, // Change encryption, compression, attributes, name, time etc, of an existing file. + Add, // Add a new file to the archive. + } + + #region Properties + /// + /// Get / set the to apply to names when updating. + /// + public INameTransform NameTransform + { + get { + return updateEntryFactory_.NameTransform; + } + + set { + updateEntryFactory_.NameTransform = value; + } + } + + /// + /// Get/set the used to generate values + /// during updates. + /// + public IEntryFactory EntryFactory + { + get { + return updateEntryFactory_; + } + + set { + if (value == null) { + updateEntryFactory_ = new ZipEntryFactory(); + } + else { + updateEntryFactory_ = value; + } + } + } + + /// + /// Get /set the buffer size to be used when updating this zip file. + /// + public int BufferSize + { + get { return bufferSize_; } + set { + if ( value < 1024 ) { +#if NETCF_1_0 + throw new ArgumentOutOfRangeException("value"); +#else + throw new ArgumentOutOfRangeException("value", "cannot be below 1024"); +#endif + } + + if ( bufferSize_ != value ) { + bufferSize_ = value; + copyBuffer_ = null; + } + } + } + + /// + /// Get a value indicating an update has been started. + /// + public bool IsUpdating + { + get { return updates_ != null; } + } + + /// + /// Get / set a value indicating how Zip64 Extension usage is determined when adding entries. + /// + public UseZip64 UseZip64 + { + get { return useZip64_; } + set { useZip64_ = value; } + } + + #endregion + + #region Immediate updating +// TBD: Direct form of updating +// +// public void Update(IEntryMatcher deleteMatcher) +// { +// } +// +// public void Update(IScanner addScanner) +// { +// } + #endregion + + #region Deferred Updating + /// + /// Begin updating this archive. + /// + /// The archive storage for use during the update. + /// The data source to utilise during updating. + public void BeginUpdate(IArchiveStorage archiveStorage, IDynamicDataSource dataSource) + { + if ( IsEmbeddedArchive ) { + throw new ZipException ("Cannot update embedded/SFX archives"); + } + + if ( archiveStorage == null ) { + throw new ArgumentNullException("archiveStorage"); + } + + if ( dataSource == null ) { + throw new ArgumentNullException("dataSource"); + } + + archiveStorage_ = archiveStorage; + updateDataSource_ = dataSource; + + // NOTE: the baseStream_ may not currently support writing or seeking. + + updateIndex_ = new Dictionary(); + + if ( entries_ != null ) { + updates_ = new List(entries_.Length); + foreach(ZipEntry entry in entries_) { + ZipUpdate update = new ZipUpdate(entry); + updates_.Add(update); + int index = updates_.IndexOf(update); + updateIndex_.Add(entry.Name, index); + } + } + else { + updates_ = new List(); + } + + updateCount_ = updates_.Count; + + contentsEdited_ = false; + commentEdited_ = false; + newComment_ = null; + } + + /// + /// Begin updating to this archive. + /// + /// The storage to use during the update. + public void BeginUpdate(IArchiveStorage archiveStorage) + { + BeginUpdate(archiveStorage, new DynamicDiskDataSource()); + } + + /// + /// Begin updating this archive. + /// + /// + /// + /// + public void BeginUpdate() + { + if ( Name == null ) { + BeginUpdate(new MemoryArchiveStorage(), new DynamicDiskDataSource()); + } + else { + BeginUpdate(new DiskArchiveStorage(this), new DynamicDiskDataSource()); + } + } + + /// + /// Commit current updates, updating this archive. + /// + /// + /// + public void CommitUpdate() + { + CheckUpdating(); + + try + { + updateIndex_.Clear(); + updateIndex_=null; + + if( contentsEdited_ ) { + RunUpdates(); + } + else if( commentEdited_ ) { + UpdateCommentOnly(); + } + else { + // Create an empty archive if none existed originally. + if( (entries_!=null)&&(entries_.Length==0) ) { + byte[] theComment=(newComment_!=null)?newComment_.RawComment:ZipConstants.ConvertToArray(comment_); + using( ZipHelperStream zhs=new ZipHelperStream(baseStream_) ) { + zhs.WriteEndOfCentralDirectory(0, 0, 0, theComment); + } + } + } + + } + finally { + PostUpdateCleanup(); + } + } + + /// + /// Abort updating leaving the archive unchanged. + /// + /// + /// + public void AbortUpdate() + { + PostUpdateCleanup(); + } + + /// + /// Set the file comment to be recorded when the current update is commited. + /// + /// The comment to record. + public void SetComment(string comment) + { + CheckUpdating(); + + newComment_ = new ZipString(comment); + + if ( newComment_.RawLength > 0xffff ) { + newComment_ = null; + throw new ZipException("Comment length exceeds maximum - 65535"); + } + + // We dont take account of the original and current comment appearing to be the same + // as encoding may be different. + commentEdited_ = true; + } + + #endregion + + #region Adding Entries + + void AddUpdate(ZipUpdate update) + { + contentsEdited_ = true; + + int index = FindExistingUpdate(update.Entry.Name); + + if (index >= 0) { + if ( updates_[index] == null ) { + updateCount_ += 1; + } + + // Direct replacement is faster than delete and add. + updates_[index] = update; + } + else { + updates_.Add(update); + index = updates_.IndexOf(update); + updateCount_ += 1; + updateIndex_.Add(update.Entry.Name, index); + } + } + + /// + /// Add a new entry to the archive. + /// + /// The name of the file to add. + /// The compression method to use. + /// Ensure Unicode text is used for name and comment for this entry. + public void Add(string fileName, CompressionMethod compressionMethod, bool useUnicodeText ) + { + if (fileName == null) { + throw new ArgumentNullException("fileName"); + } + + if (!ZipEntry.IsCompressionMethodSupported(compressionMethod)) { + throw new ZipException("Compression method not supported"); + } + + CheckUpdating(); + contentsEdited_ = true; + + ZipEntry entry = EntryFactory.MakeFileEntry(fileName); + entry.IsUnicodeText = useUnicodeText; + entry.CompressionMethod = compressionMethod; + + AddUpdate(new ZipUpdate(fileName, entry)); + } + + /// + /// Add a new entry to the archive. + /// + /// The name of the file to add. + /// The compression method to use. + public void Add(string fileName, CompressionMethod compressionMethod) + { + if ( fileName == null ) { + throw new ArgumentNullException("fileName"); + } + + if ( !ZipEntry.IsCompressionMethodSupported(compressionMethod) ) { + throw new ZipException("Compression method not supported"); + } + + CheckUpdating(); + contentsEdited_ = true; + + ZipEntry entry = EntryFactory.MakeFileEntry(fileName); + entry.CompressionMethod = compressionMethod; + AddUpdate(new ZipUpdate(fileName, entry)); + } + + /// + /// Add a file to the archive. + /// + /// The name of the file to add. + public void Add(string fileName) + { + if ( fileName == null ) { + throw new ArgumentNullException("fileName"); + } + + CheckUpdating(); + AddUpdate(new ZipUpdate(fileName, EntryFactory.MakeFileEntry(fileName))); + } + + /// + /// Add a file entry with data. + /// + /// The source of the data for this entry. + /// The name to give to the entry. + public void Add(IStaticDataSource dataSource, string entryName) + { + if ( dataSource == null ) { + throw new ArgumentNullException("dataSource"); + } + + CheckUpdating(); + AddUpdate(new ZipUpdate(dataSource, EntryFactory.MakeFileEntry(entryName))); + } + + /// + /// Add a file entry with data. + /// + /// The source of the data for this entry. + /// The name to give to the entry. + /// The compression method to use. + public void Add(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod) + { + if ( dataSource == null ) { + throw new ArgumentNullException("dataSource"); + } + + CheckUpdating(); + + ZipEntry entry = EntryFactory.MakeFileEntry(entryName, false); + entry.CompressionMethod = compressionMethod; + + AddUpdate(new ZipUpdate(dataSource, entry)); + } + + /// + /// Add a file entry with data. + /// + /// The source of the data for this entry. + /// The name to give to the entry. + /// The compression method to use. + /// Ensure Unicode text is used for name and comments for this entry. + public void Add(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod, bool useUnicodeText) + { + if (dataSource == null) { + throw new ArgumentNullException("dataSource"); + } + + CheckUpdating(); + + ZipEntry entry = EntryFactory.MakeFileEntry(entryName, false); + entry.IsUnicodeText = useUnicodeText; + entry.CompressionMethod = compressionMethod; + + AddUpdate(new ZipUpdate(dataSource, entry)); + } + + /// + /// Add a that contains no data. + /// + /// The entry to add. + /// This can be used to add directories, volume labels, or empty file entries. + public void Add(ZipEntry entry) + { + if ( entry == null ) { + throw new ArgumentNullException("entry"); + } + + CheckUpdating(); + + if ( (entry.Size != 0) || (entry.CompressedSize != 0) ) { + throw new ZipException("Entry cannot have any data"); + } + + AddUpdate(new ZipUpdate(UpdateCommand.Add, entry)); + } + + /// + /// Add a directory entry to the archive. + /// + /// The directory to add. + public void AddDirectory(string directoryName) + { + if ( directoryName == null ) { + throw new ArgumentNullException("directoryName"); + } + + CheckUpdating(); + + ZipEntry dirEntry = EntryFactory.MakeDirectoryEntry(directoryName); + AddUpdate(new ZipUpdate(UpdateCommand.Add, dirEntry)); + } + + #endregion + + #region Modifying Entries +/* Modify not yet ready for public consumption. + Direct modification of an entry should not overwrite original data before its read. + Safe mode is trivial in this sense. + public void Modify(ZipEntry original, ZipEntry updated) + { + if ( original == null ) { + throw new ArgumentNullException("original"); + } + + if ( updated == null ) { + throw new ArgumentNullException("updated"); + } + + CheckUpdating(); + contentsEdited_ = true; + updates_.Add(new ZipUpdate(original, updated)); + } +*/ + #endregion + + #region Deleting Entries + /// + /// Delete an entry by name + /// + /// The filename to delete + /// True if the entry was found and deleted; false otherwise. + public bool Delete(string fileName) + { + CheckUpdating(); + + bool result = false; + int index = FindExistingUpdate(fileName); + if ( (index >= 0) && (updates_[index] != null) ) { + result = true; + contentsEdited_ = true; + updates_[index] = null; + updateCount_ -= 1; + } + else { + throw new ZipException("Cannot find entry to delete"); + } + return result; + } + + /// + /// Delete a from the archive. + /// + /// The entry to delete. + public void Delete(ZipEntry entry) + { + CheckUpdating(); + + int index = FindExistingUpdate(entry); + if ( index >= 0 ) { + contentsEdited_ = true; + updates_[index] = null; + updateCount_ -= 1; + } + else { + throw new ZipException("Cannot find entry to delete"); + } + } + + #endregion + + #region Update Support + #region Writing Values/Headers + void WriteLEShort(int value) + { + baseStream_.WriteByte(( byte )(value & 0xff)); + baseStream_.WriteByte(( byte )((value >> 8) & 0xff)); + } + + /// + /// Write an unsigned short in little endian byte order. + /// + void WriteLEUshort(ushort value) + { + baseStream_.WriteByte(( byte )(value & 0xff)); + baseStream_.WriteByte(( byte )(value >> 8)); + } + + /// + /// Write an int in little endian byte order. + /// + void WriteLEInt(int value) + { + WriteLEShort(value & 0xffff); + WriteLEShort(value >> 16); + } + + /// + /// Write an unsigned int in little endian byte order. + /// + void WriteLEUint(uint value) + { + WriteLEUshort((ushort)(value & 0xffff)); + WriteLEUshort((ushort)(value >> 16)); + } + + /// + /// Write a long in little endian byte order. + /// + void WriteLeLong(long value) + { + WriteLEInt(( int )(value & 0xffffffff)); + WriteLEInt(( int )(value >> 32)); + } + + void WriteLEUlong(ulong value) + { + WriteLEUint(( uint )(value & 0xffffffff)); + WriteLEUint(( uint )(value >> 32)); + } + + void WriteLocalEntryHeader(ZipUpdate update) + { + ZipEntry entry = update.OutEntry; + + // TODO: Local offset will require adjusting for multi-disk zip files. + entry.Offset = baseStream_.Position; + + // TODO: Need to clear any entry flags that dont make sense or throw an exception here. + if (update.Command != UpdateCommand.Copy) { + if (entry.CompressionMethod == CompressionMethod.Deflated) { + if (entry.Size == 0) { + // No need to compress - no data. + entry.CompressedSize = entry.Size; + entry.Crc = 0; + entry.CompressionMethod = CompressionMethod.Stored; + } + } + else if (entry.CompressionMethod == CompressionMethod.Stored) { + entry.Flags &= ~(int)GeneralBitFlags.Descriptor; + } + + if (HaveKeys) { + entry.IsCrypted = true; + if (entry.Crc < 0) { + entry.Flags |= (int)GeneralBitFlags.Descriptor; + } + } + else { + entry.IsCrypted = false; + } + + switch (useZip64_) { + case UseZip64.Dynamic: + if (entry.Size < 0) { + entry.ForceZip64(); + } + break; + + case UseZip64.On: + entry.ForceZip64(); + break; + + case UseZip64.Off: + // Do nothing. The entry itself may be using Zip64 independantly. + break; + } + } + + // Write the local file header + WriteLEInt(ZipConstants.LocalHeaderSignature); + + WriteLEShort(entry.Version); + WriteLEShort(entry.Flags); + + WriteLEShort((byte)entry.CompressionMethod); + WriteLEInt(( int )entry.DosTime); + + if ( !entry.HasCrc ) { + // Note patch address for updating CRC later. + update.CrcPatchOffset = baseStream_.Position; + WriteLEInt(( int )0); + } + else { + WriteLEInt(unchecked(( int )entry.Crc)); + } + + if (entry.LocalHeaderRequiresZip64) { + WriteLEInt(-1); + WriteLEInt(-1); + } + else { + if ( (entry.CompressedSize < 0) || (entry.Size < 0) ) { + update.SizePatchOffset = baseStream_.Position; + } + + WriteLEInt(( int )entry.CompressedSize); + WriteLEInt(( int )entry.Size); + } + + byte[] name = ZipConstants.ConvertToArray(entry.Flags, entry.Name); + + if ( name.Length > 0xFFFF ) { + throw new ZipException("Entry name too long."); + } + + ZipExtraData ed = new ZipExtraData(entry.ExtraData); + + if ( entry.LocalHeaderRequiresZip64 ) { + ed.StartNewEntry(); + + // Local entry header always includes size and compressed size. + // NOTE the order of these fields is reversed when compared to the normal headers! + ed.AddLeLong(entry.Size); + ed.AddLeLong(entry.CompressedSize); + ed.AddNewEntry(1); + } + else { + ed.Delete(1); + } + + entry.ExtraData = ed.GetEntryData(); + + WriteLEShort(name.Length); + WriteLEShort(entry.ExtraData.Length); + + if ( name.Length > 0 ) { + baseStream_.Write(name, 0, name.Length); + } + + if ( entry.LocalHeaderRequiresZip64 ) { + if ( !ed.Find(1) ) { + throw new ZipException("Internal error cannot find extra data"); + } + + update.SizePatchOffset = baseStream_.Position + ed.CurrentReadIndex; + } + + if ( entry.ExtraData.Length > 0 ) { + baseStream_.Write(entry.ExtraData, 0, entry.ExtraData.Length); + } + } + + int WriteCentralDirectoryHeader(ZipEntry entry) + { + if ( entry.CompressedSize < 0 ) { + throw new ZipException("Attempt to write central directory entry with unknown csize"); + } + + if ( entry.Size < 0 ) { + throw new ZipException("Attempt to write central directory entry with unknown size"); + } + + if ( entry.Crc < 0 ) { + throw new ZipException("Attempt to write central directory entry with unknown crc"); + } + + // Write the central file header + WriteLEInt(ZipConstants.CentralHeaderSignature); + + // Version made by + WriteLEShort(ZipConstants.VersionMadeBy); + + // Version required to extract + WriteLEShort(entry.Version); + + WriteLEShort(entry.Flags); + + unchecked { + WriteLEShort((byte)entry.CompressionMethod); + WriteLEInt((int)entry.DosTime); + WriteLEInt((int)entry.Crc); + } + + if ( (entry.IsZip64Forced()) || (entry.CompressedSize >= 0xffffffff) ) { + WriteLEInt(-1); + } + else { + WriteLEInt((int)(entry.CompressedSize & 0xffffffff)); + } + + if ( (entry.IsZip64Forced()) || (entry.Size >= 0xffffffff) ) { + WriteLEInt(-1); + } + else { + WriteLEInt((int)entry.Size); + } + + byte[] name = ZipConstants.ConvertToArray(entry.Flags, entry.Name); + + if ( name.Length > 0xFFFF ) { + throw new ZipException("Entry name is too long."); + } + + WriteLEShort(name.Length); + + // Central header extra data is different to local header version so regenerate. + ZipExtraData ed = new ZipExtraData(entry.ExtraData); + + if ( entry.CentralHeaderRequiresZip64 ) { + ed.StartNewEntry(); + + if ( (entry.Size >= 0xffffffff) || (useZip64_ == UseZip64.On) ) + { + ed.AddLeLong(entry.Size); + } + + if ( (entry.CompressedSize >= 0xffffffff) || (useZip64_ == UseZip64.On) ) + { + ed.AddLeLong(entry.CompressedSize); + } + + if ( entry.Offset >= 0xffffffff ) { + ed.AddLeLong(entry.Offset); + } + + // Number of disk on which this file starts isnt supported and is never written here. + ed.AddNewEntry(1); + } + else { + // Should have already be done when local header was added. + ed.Delete(1); + } + + byte[] centralExtraData = ed.GetEntryData(); + + WriteLEShort(centralExtraData.Length); + WriteLEShort(entry.Comment != null ? entry.Comment.Length : 0); + + WriteLEShort(0); // disk number + WriteLEShort(0); // internal file attributes + + // External file attributes... + if ( entry.ExternalFileAttributes != -1 ) { + WriteLEInt(entry.ExternalFileAttributes); + } + else { + if ( entry.IsDirectory ) { + WriteLEUint(16); + } + else { + WriteLEUint(0); + } + } + + if ( entry.Offset >= 0xffffffff ) { + WriteLEUint(0xffffffff); + } + else { + WriteLEUint((uint)(int)entry.Offset); + } + + if ( name.Length > 0 ) { + baseStream_.Write(name, 0, name.Length); + } + + if ( centralExtraData.Length > 0 ) { + baseStream_.Write(centralExtraData, 0, centralExtraData.Length); + } + + byte[] rawComment = (entry.Comment != null) ? Encoding.UTF8.GetBytes(entry.Comment) : new byte[0]; + + if ( rawComment.Length > 0 ) { + baseStream_.Write(rawComment, 0, rawComment.Length); + } + + return ZipConstants.CentralHeaderBaseSize + name.Length + centralExtraData.Length + rawComment.Length; + } + #endregion + void PostUpdateCleanup() + { + if( archiveStorage_!=null ) { + archiveStorage_.Dispose(); + archiveStorage_=null; + } + + updateDataSource_=null; + updates_ = null; + updateIndex_ = null; + } + + string GetTransformedFileName(string name) + { + return (NameTransform != null) ? + NameTransform.TransformFile(name) : + name; + } + + string GetTransformedDirectoryName(string name) + { + return (NameTransform != null) ? + NameTransform.TransformDirectory(name) : + name; + } + + /// + /// Get a raw memory buffer. + /// + /// Returns a raw memory buffer. + byte[] GetBuffer() + { + if ( copyBuffer_ == null ) { + copyBuffer_ = new byte[bufferSize_]; + } + return copyBuffer_; + } + + void CopyDescriptorBytes(ZipUpdate update, Stream dest, Stream source) + { + int bytesToCopy = GetDescriptorSize(update); + + if ( bytesToCopy > 0 ) { + byte[] buffer = GetBuffer(); + + while ( bytesToCopy > 0 ) { + int readSize = Math.Min(buffer.Length, bytesToCopy); + + int bytesRead = source.Read(buffer, 0, readSize); + if ( bytesRead > 0 ) { + dest.Write(buffer, 0, bytesRead); + bytesToCopy -= bytesRead; + } + else { + throw new ZipException("Unxpected end of stream"); + } + } + } + } + + void CopyBytes(ZipUpdate update, Stream destination, Stream source, + long bytesToCopy, bool updateCrc) + { + if ( destination == source ) { + throw new InvalidOperationException("Destination and source are the same"); + } + + // NOTE: Compressed size is updated elsewhere. + Crc32 crc = new Crc32(); + byte[] buffer = GetBuffer(); + + long targetBytes = bytesToCopy; + long totalBytesRead = 0; + + int bytesRead; + do { + int readSize = buffer.Length; + + if ( bytesToCopy < readSize ) { + readSize = (int)bytesToCopy; + } + + bytesRead = source.Read(buffer, 0, readSize); + if ( bytesRead > 0 ) { + if ( updateCrc ) { + crc.Update(buffer, 0, bytesRead); + } + destination.Write(buffer, 0, bytesRead); + bytesToCopy -= bytesRead; + totalBytesRead += bytesRead; + } + } + while ( (bytesRead > 0) && (bytesToCopy > 0) ); + + if ( totalBytesRead != targetBytes ) { + throw new ZipException(string.Format("Failed to copy bytes expected {0} read {1}", targetBytes, totalBytesRead)); + } + + if ( updateCrc ) { + update.OutEntry.Crc = crc.Value; + } + } + + /// + /// Get the size of the source descriptor for a . + /// + /// The update to get the size for. + /// The descriptor size, zero if there isnt one. + int GetDescriptorSize(ZipUpdate update) + { + int result = 0; + if ( (update.Entry.Flags & (int)GeneralBitFlags.Descriptor) != 0) { + result = ZipConstants.DataDescriptorSize - 4; + if ( update.Entry.LocalHeaderRequiresZip64 ) { + result = ZipConstants.Zip64DataDescriptorSize - 4; + } + } + return result; + } + + void CopyDescriptorBytesDirect(ZipUpdate update, Stream stream, ref long destinationPosition, long sourcePosition) + { + int bytesToCopy = GetDescriptorSize(update); + + while ( bytesToCopy > 0 ) { + int readSize = (int)bytesToCopy; + byte[] buffer = GetBuffer(); + + stream.Position = sourcePosition; + int bytesRead = stream.Read(buffer, 0, readSize); + if ( bytesRead > 0 ) { + stream.Position = destinationPosition; + stream.Write(buffer, 0, bytesRead); + bytesToCopy -= bytesRead; + destinationPosition += bytesRead; + sourcePosition += bytesRead; + } + else { + throw new ZipException("Unxpected end of stream"); + } + } + } + + void CopyEntryDataDirect(ZipUpdate update, Stream stream, bool updateCrc, ref long destinationPosition, ref long sourcePosition) + { + long bytesToCopy = update.Entry.CompressedSize; + + // NOTE: Compressed size is updated elsewhere. + Crc32 crc = new Crc32(); + byte[] buffer = GetBuffer(); + + long targetBytes = bytesToCopy; + long totalBytesRead = 0; + + int bytesRead; + do + { + int readSize = buffer.Length; + + if ( bytesToCopy < readSize ) { + readSize = (int)bytesToCopy; + } + + stream.Position = sourcePosition; + bytesRead = stream.Read(buffer, 0, readSize); + if ( bytesRead > 0 ) { + if ( updateCrc ) { + crc.Update(buffer, 0, bytesRead); + } + stream.Position = destinationPosition; + stream.Write(buffer, 0, bytesRead); + + destinationPosition += bytesRead; + sourcePosition += bytesRead; + bytesToCopy -= bytesRead; + totalBytesRead += bytesRead; + } + } + while ( (bytesRead > 0) && (bytesToCopy > 0) ); + + if ( totalBytesRead != targetBytes ) { + throw new ZipException(string.Format("Failed to copy bytes expected {0} read {1}", targetBytes, totalBytesRead)); + } + + if ( updateCrc ) { + update.OutEntry.Crc = crc.Value; + } + } + + int FindExistingUpdate(ZipEntry entry) + { + int result = -1; + string convertedName = GetTransformedFileName(entry.Name); + + if (updateIndex_.ContainsKey(convertedName)) { + result = (int)updateIndex_[convertedName]; + } +/* + // This is slow like the coming of the next ice age but takes less storage and may be useful + // for CF? + for (int index = 0; index < updates_.Count; ++index) + { + ZipUpdate zu = ( ZipUpdate )updates_[index]; + if ( (zu.Entry.ZipFileIndex == entry.ZipFileIndex) && + (string.Compare(convertedName, zu.Entry.Name, true, CultureInfo.InvariantCulture) == 0) ) { + result = index; + break; + } + } + */ + return result; + } + + int FindExistingUpdate(string fileName) + { + int result = -1; + + string convertedName = GetTransformedFileName(fileName); + + if (updateIndex_.ContainsKey(convertedName)) { + result = (int)updateIndex_[convertedName]; + } + +/* + // This is slow like the coming of the next ice age but takes less storage and may be useful + // for CF? + for ( int index = 0; index < updates_.Count; ++index ) { + if ( string.Compare(convertedName, (( ZipUpdate )updates_[index]).Entry.Name, + true, CultureInfo.InvariantCulture) == 0 ) { + result = index; + break; + } + } + */ + + return result; + } + + /// + /// Get an output stream for the specified + /// + /// The entry to get an output stream for. + /// The output stream obtained for the entry. + Stream GetOutputStream(ZipEntry entry) + { + Stream result = baseStream_; + + if ( entry.IsCrypted == true ) { +#if NETCF_1_0 + throw new ZipException("Encryption not supported for Compact Framework 1.0"); +#else + result = CreateAndInitEncryptionStream(result, entry); +#endif + } + + switch ( entry.CompressionMethod ) { + case CompressionMethod.Stored: + result = new UncompressedStream(result); + break; + + case CompressionMethod.Deflated: + DeflaterOutputStream dos = new DeflaterOutputStream(result, new Deflater(9, true)); + dos.IsStreamOwner = false; + result = dos; + break; + + default: + throw new ZipException("Unknown compression method " + entry.CompressionMethod); + } + return result; + } + + void AddEntry(ZipFile workFile, ZipUpdate update) + { + Stream source = null; + + if ( update.Entry.IsFile ) { + source = update.GetSource(); + + if ( source == null ) { + source = updateDataSource_.GetSource(update.Entry, update.Filename); + } + } + + if ( source != null ) { + using ( source ) { + long sourceStreamLength = source.Length; + if ( update.OutEntry.Size < 0 ) { + update.OutEntry.Size = sourceStreamLength; + } + else { + // Check for errant entries. + if ( update.OutEntry.Size != sourceStreamLength ) { + throw new ZipException("Entry size/stream size mismatch"); + } + } + + workFile.WriteLocalEntryHeader(update); + + long dataStart = workFile.baseStream_.Position; + + using ( Stream output = workFile.GetOutputStream(update.OutEntry) ) { + CopyBytes(update, output, source, sourceStreamLength, true); + } + + long dataEnd = workFile.baseStream_.Position; + update.OutEntry.CompressedSize = dataEnd - dataStart; + + if ((update.OutEntry.Flags & (int)GeneralBitFlags.Descriptor) == (int)GeneralBitFlags.Descriptor) + { + ZipHelperStream helper = new ZipHelperStream(workFile.baseStream_); + helper.WriteDataDescriptor(update.OutEntry); + } + } + } + else { + workFile.WriteLocalEntryHeader(update); + update.OutEntry.CompressedSize = 0; + } + + } + + void ModifyEntry(ZipFile workFile, ZipUpdate update) + { + workFile.WriteLocalEntryHeader(update); + long dataStart = workFile.baseStream_.Position; + + // TODO: This is slow if the changes don't effect the data!! + if ( update.Entry.IsFile && (update.Filename != null) ) { + using ( Stream output = workFile.GetOutputStream(update.OutEntry) ) { + using ( Stream source = this.GetInputStream(update.Entry) ) { + CopyBytes(update, output, source, source.Length, true); + } + } + } + + long dataEnd = workFile.baseStream_.Position; + update.Entry.CompressedSize = dataEnd - dataStart; + } + + void CopyEntryDirect(ZipFile workFile, ZipUpdate update, ref long destinationPosition) + { + bool skipOver = false; + if ( update.Entry.Offset == destinationPosition ) { + skipOver = true; + } + + if ( !skipOver ) { + baseStream_.Position = destinationPosition; + workFile.WriteLocalEntryHeader(update); + destinationPosition = baseStream_.Position; + } + + long sourcePosition = 0; + + const int NameLengthOffset = 26; + + // TODO: Add base for SFX friendly handling + long entryDataOffset = update.Entry.Offset + NameLengthOffset; + + baseStream_.Seek(entryDataOffset, SeekOrigin.Begin); + + // Clumsy way of handling retrieving the original name and extra data length for now. + // TODO: Stop re-reading name and data length in CopyEntryDirect. + uint nameLength = ReadLEUshort(); + uint extraLength = ReadLEUshort(); + + sourcePosition = baseStream_.Position + nameLength + extraLength; + + if ( skipOver ) { + destinationPosition += + (sourcePosition - entryDataOffset) + NameLengthOffset + // Header size + update.Entry.CompressedSize + GetDescriptorSize(update); + } + else { + if ( update.Entry.CompressedSize > 0 ) { + CopyEntryDataDirect(update, baseStream_, false, ref destinationPosition, ref sourcePosition ); + } + CopyDescriptorBytesDirect(update, baseStream_, ref destinationPosition, sourcePosition); + } + } + + void CopyEntry(ZipFile workFile, ZipUpdate update) + { + workFile.WriteLocalEntryHeader(update); + + if ( update.Entry.CompressedSize > 0 ) { + const int NameLengthOffset = 26; + + long entryDataOffset = update.Entry.Offset + NameLengthOffset; + + // TODO: This wont work for SFX files! + baseStream_.Seek(entryDataOffset, SeekOrigin.Begin); + + uint nameLength = ReadLEUshort(); + uint extraLength = ReadLEUshort(); + + baseStream_.Seek(nameLength + extraLength, SeekOrigin.Current); + + CopyBytes(update, workFile.baseStream_, baseStream_, update.Entry.CompressedSize, false); + } + CopyDescriptorBytes(update, workFile.baseStream_, baseStream_); + } + + void Reopen(Stream source) + { + if ( source == null ) { + throw new ZipException("Failed to reopen archive - no source"); + } + + isNewArchive_ = false; + baseStream_ = source; + ReadEntries(); + } + + void Reopen() + { + if (Name == null) { + throw new InvalidOperationException("Name is not known cannot Reopen"); + } + + Reopen(File.OpenRead(Name)); + } + + void UpdateCommentOnly() + { + long baseLength = baseStream_.Length; + + ZipHelperStream updateFile = null; + + if ( archiveStorage_.UpdateMode == FileUpdateMode.Safe ) { + Stream copyStream = archiveStorage_.MakeTemporaryCopy(baseStream_); + updateFile = new ZipHelperStream(copyStream); + updateFile.IsStreamOwner = true; + + baseStream_.Close(); + baseStream_ = null; + } + else { + if (archiveStorage_.UpdateMode == FileUpdateMode.Direct) { + // TODO: archiveStorage wasnt originally intended for this use. + // Need to revisit this to tidy up handling as archive storage currently doesnt + // handle the original stream well. + // The problem is when using an existing zip archive with an in memory archive storage. + // The open stream wont support writing but the memory storage should open the same file not an in memory one. + + // Need to tidy up the archive storage interface and contract basically. + baseStream_ = archiveStorage_.OpenForDirectUpdate(baseStream_); + updateFile = new ZipHelperStream(baseStream_); + } + else { + baseStream_.Close(); + baseStream_ = null; + updateFile = new ZipHelperStream(Name); + } + } + + using ( updateFile ) { + long locatedCentralDirOffset = + updateFile.LocateBlockWithSignature(ZipConstants.EndOfCentralDirectorySignature, + baseLength, ZipConstants.EndOfCentralRecordBaseSize, 0xffff); + if ( locatedCentralDirOffset < 0 ) { + throw new ZipException("Cannot find central directory"); + } + + const int CentralHeaderCommentSizeOffset = 16; + updateFile.Position += CentralHeaderCommentSizeOffset; + + byte[] rawComment = newComment_.RawComment; + + updateFile.WriteLEShort(rawComment.Length); + updateFile.Write(rawComment, 0, rawComment.Length); + updateFile.SetLength(updateFile.Position); + } + + if ( archiveStorage_.UpdateMode == FileUpdateMode.Safe ) { + Reopen(archiveStorage_.ConvertTemporaryToFinal()); + } + else { + ReadEntries(); + } + } + + /// + /// Class used to sort updates. + /// + class UpdateComparer : IComparer + { + /// + /// Compares two objects and returns a value indicating whether one is + /// less than, equal to or greater than the other. + /// + /// First object to compare + /// Second object to compare. + /// Compare result. + public int Compare( + ZipUpdate x, + ZipUpdate y) + { + ZipUpdate zx = x as ZipUpdate; + ZipUpdate zy = y as ZipUpdate; + + int result; + + if (zx == null) { + if (zy == null) { + result = 0; + } + else { + result = -1; + } + } + else if (zy == null) { + result = 1; + } + else { + int xCmdValue = ((zx.Command == UpdateCommand.Copy) || (zx.Command == UpdateCommand.Modify)) ? 0 : 1; + int yCmdValue = ((zy.Command == UpdateCommand.Copy) || (zy.Command == UpdateCommand.Modify)) ? 0 : 1; + + result = xCmdValue - yCmdValue; + if (result == 0) { + long offsetDiff = zx.Entry.Offset - zy.Entry.Offset; + if (offsetDiff < 0) { + result = -1; + } + else if (offsetDiff == 0) { + result = 0; + } + else { + result = 1; + } + } + } + return result; + } + } + + void RunUpdates() + { + long sizeEntries = 0; + long endOfStream = 0; + bool allOk = true; + bool directUpdate = false; + long destinationPosition = 0; // NOT SFX friendly + + ZipFile workFile; + + if ( IsNewArchive ) { + workFile = this; + workFile.baseStream_.Position = 0; + directUpdate = true; + } + else if ( archiveStorage_.UpdateMode == FileUpdateMode.Direct ) { + workFile = this; + workFile.baseStream_.Position = 0; + directUpdate = true; + + // Sort the updates by offset within copies/modifies, then adds. + // This ensures that data required by copies will not be overwritten. + updates_.Sort(new UpdateComparer()); + } + else { + workFile = ZipFile.Create(archiveStorage_.GetTemporaryOutput()); + workFile.UseZip64 = UseZip64; + + if (key != null) { + workFile.key = (byte[])key.Clone(); + } + } + + try { + foreach ( ZipUpdate update in updates_ ) { + if (update != null) { + switch (update.Command) { + case UpdateCommand.Copy: + if (directUpdate) { + CopyEntryDirect(workFile, update, ref destinationPosition); + } + else { + CopyEntry(workFile, update); + } + break; + + case UpdateCommand.Modify: + // TODO: Direct modifying of an entry will take some legwork. + ModifyEntry(workFile, update); + break; + + case UpdateCommand.Add: + if (!IsNewArchive && directUpdate) { + workFile.baseStream_.Position = destinationPosition; + } + + AddEntry(workFile, update); + + if (directUpdate) { + destinationPosition = workFile.baseStream_.Position; + } + break; + } + } + } + + if ( !IsNewArchive && directUpdate ) { + workFile.baseStream_.Position = destinationPosition; + } + + long centralDirOffset = workFile.baseStream_.Position; + + foreach ( ZipUpdate update in updates_ ) { + if (update != null) { + sizeEntries += workFile.WriteCentralDirectoryHeader(update.OutEntry); + } + } + + byte[] theComment = (newComment_ != null) ? newComment_.RawComment : ZipConstants.ConvertToArray(comment_); + using ( ZipHelperStream zhs = new ZipHelperStream(workFile.baseStream_) ) { + zhs.WriteEndOfCentralDirectory(updateCount_, sizeEntries, centralDirOffset, theComment); + } + + endOfStream = workFile.baseStream_.Position; + + // And now patch entries... + foreach ( ZipUpdate update in updates_ ) { + if (update != null) + { + + // If the size of the entry is zero leave the crc as 0 as well. + // The calculated crc will be all bits on... + if ((update.CrcPatchOffset > 0) && (update.OutEntry.CompressedSize > 0)) { + workFile.baseStream_.Position = update.CrcPatchOffset; + workFile.WriteLEInt((int)update.OutEntry.Crc); + } + + if (update.SizePatchOffset > 0) { + workFile.baseStream_.Position = update.SizePatchOffset; + if (update.OutEntry.LocalHeaderRequiresZip64) { + workFile.WriteLeLong(update.OutEntry.Size); + workFile.WriteLeLong(update.OutEntry.CompressedSize); + } + else { + workFile.WriteLEInt((int)update.OutEntry.CompressedSize); + workFile.WriteLEInt((int)update.OutEntry.Size); + } + } + } + } + } + catch(Exception) { + allOk = false; + } + finally { + if ( directUpdate ) { + if ( allOk ) { + workFile.baseStream_.Flush(); + workFile.baseStream_.SetLength(endOfStream); + } + } + else { + workFile.Close(); + } + } + + if ( allOk ) { + if ( directUpdate ) { + isNewArchive_ = false; + workFile.baseStream_.Flush(); + ReadEntries(); + } + else { + baseStream_.Close(); + Reopen(archiveStorage_.ConvertTemporaryToFinal()); + } + } + else { + workFile.Close(); + if ( !directUpdate && (workFile.Name != null) ) { + File.Delete(workFile.Name); + } + } + } + + void CheckUpdating() + { + if ( updates_ == null ) { + throw new ZipException("Cannot update until BeginUpdate has been called"); + } + } + + #endregion + + #region ZipUpdate class + /// + /// Represents a pending update to a Zip file. + /// + class ZipUpdate + { + #region Constructors + public ZipUpdate(string fileName, ZipEntry entry) + { + command_ = UpdateCommand.Add; + entry_ = entry; + filename_ = fileName; + } + + [Obsolete] + public ZipUpdate(string fileName, string entryName, CompressionMethod compressionMethod) + { + command_ = UpdateCommand.Add; + entry_ = new ZipEntry(entryName); + entry_.CompressionMethod = compressionMethod; + filename_ = fileName; + } + + [Obsolete] + public ZipUpdate(string fileName, string entryName) + : this(fileName, entryName, CompressionMethod.Deflated) + { + // Do nothing. + } + + [Obsolete] + public ZipUpdate(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod) + { + command_ = UpdateCommand.Add; + entry_ = new ZipEntry(entryName); + entry_.CompressionMethod = compressionMethod; + dataSource_ = dataSource; + } + + public ZipUpdate(IStaticDataSource dataSource, ZipEntry entry) + { + command_ = UpdateCommand.Add; + entry_ = entry; + dataSource_ = dataSource; + } + + public ZipUpdate(ZipEntry original, ZipEntry updated) + { + throw new ZipException("Modify not currently supported"); + /* + command_ = UpdateCommand.Modify; + entry_ = ( ZipEntry )original.Clone(); + outEntry_ = ( ZipEntry )updated.Clone(); + */ + } + + public ZipUpdate(UpdateCommand command, ZipEntry entry) + { + command_ = command; + entry_ = ( ZipEntry )entry.Clone(); + } + + + /// + /// Copy an existing entry. + /// + /// The existing entry to copy. + public ZipUpdate(ZipEntry entry) + : this(UpdateCommand.Copy, entry) + { + // Do nothing. + } + #endregion + + /// + /// Get the for this update. + /// + /// This is the source or original entry. + public ZipEntry Entry + { + get { return entry_; } + } + + /// + /// Get the that will be written to the updated/new file. + /// + public ZipEntry OutEntry + { + get { + if ( outEntry_ == null ) { + outEntry_ = (ZipEntry)entry_.Clone(); + } + + return outEntry_; + } + } + + /// + /// Get the command for this update. + /// + public UpdateCommand Command + { + get { return command_; } + } + + /// + /// Get the filename if any for this update. Null if none exists. + /// + public string Filename + { + get { return filename_; } + } + + /// + /// Get/set the location of the size patch for this update. + /// + public long SizePatchOffset + { + get { return sizePatchOffset_; } + set { sizePatchOffset_ = value; } + } + + /// + /// Get /set the location of the crc patch for this update. + /// + public long CrcPatchOffset + { + get { return crcPatchOffset_; } + set { crcPatchOffset_ = value; } + } + + public Stream GetSource() + { + Stream result = null; + if ( dataSource_ != null ) { + result = dataSource_.GetSource(); + } + + return result; + } + + #region Instance Fields + ZipEntry entry_; + ZipEntry outEntry_; + UpdateCommand command_; + IStaticDataSource dataSource_; + string filename_; + long sizePatchOffset_ = -1; + long crcPatchOffset_ = -1; + #endregion + } + + #endregion + #endregion + + #region Disposing + + #region IDisposable Members + void IDisposable.Dispose() + { + Close(); + } + #endregion + + void DisposeInternal(bool disposing) + { + if ( !isDisposed_ ) { + isDisposed_ = true; + entries_ = null; + if ( IsStreamOwner && (baseStream_ != null) ) { + lock(baseStream_) { + baseStream_.Close(); + } + } + } + } + + /// + /// Releases the unmanaged resources used by the this instance and optionally releases the managed resources. + /// + /// true to release both managed and unmanaged resources; + /// false to release only unmanaged resources. + protected virtual void Dispose(bool disposing) + { + DisposeInternal(disposing); + } + + #endregion + + #region Internal routines + #region Reading + /// + /// Read an unsigned short in little endian byte order. + /// + /// Returns the value read. + /// + /// The stream ends prematurely + /// + ushort ReadLEUshort() + { + int data1 = baseStream_.ReadByte(); + + if ( data1 < 0 ) { + throw new EndOfStreamException("End of stream"); + } + + int data2 = baseStream_.ReadByte(); + + if ( data2 < 0 ) { + throw new EndOfStreamException("End of stream"); + } + + + return unchecked((ushort)((ushort)data1 | (ushort)(data2 << 8))); + } + + /// + /// Read a uint in little endian byte order. + /// + /// Returns the value read. + /// + /// An i/o error occurs. + /// + /// + /// The file ends prematurely + /// + uint ReadLEUint() + { + return (uint)(ReadLEUshort() | (ReadLEUshort() << 16)); + } + + ulong ReadLEUlong() + { + return ReadLEUint() | ((ulong)ReadLEUint() << 32); + } + + #endregion + // NOTE this returns the offset of the first byte after the signature. + long LocateBlockWithSignature(int signature, long endLocation, int minimumBlockSize, int maximumVariableData) + { + using ( ZipHelperStream les = new ZipHelperStream(baseStream_) ) { + return les.LocateBlockWithSignature(signature, endLocation, minimumBlockSize, maximumVariableData); + } + } + + /// + /// Search for and read the central directory of a zip file filling the entries array. + /// + /// + /// An i/o error occurs. + /// + /// + /// The central directory is malformed or cannot be found + /// + void ReadEntries() + { + // Search for the End Of Central Directory. When a zip comment is + // present the directory will start earlier + // + // The search is limited to 64K which is the maximum size of a trailing comment field to aid speed. + // This should be compatible with both SFX and ZIP files but has only been tested for Zip files + // If a SFX file has the Zip data attached as a resource and there are other resources occuring later then + // this could be invalid. + // Could also speed this up by reading memory in larger blocks. + + if (baseStream_.CanSeek == false) { + throw new ZipException("ZipFile stream must be seekable"); + } + + long locatedEndOfCentralDir = LocateBlockWithSignature(ZipConstants.EndOfCentralDirectorySignature, + baseStream_.Length, ZipConstants.EndOfCentralRecordBaseSize, 0xffff); + + if (locatedEndOfCentralDir < 0) { + throw new ZipException("Cannot find central directory"); + } + + // Read end of central directory record + ushort thisDiskNumber = ReadLEUshort(); + ushort startCentralDirDisk = ReadLEUshort(); + ulong entriesForThisDisk = ReadLEUshort(); + ulong entriesForWholeCentralDir = ReadLEUshort(); + ulong centralDirSize = ReadLEUint(); + long offsetOfCentralDir = ReadLEUint(); + uint commentSize = ReadLEUshort(); + + if ( commentSize > 0 ) { + byte[] comment = new byte[commentSize]; + + StreamUtils.ReadFully(baseStream_, comment); + comment_ = ZipConstants.ConvertToString(comment); + } + else { + comment_ = string.Empty; + } + + bool isZip64 = false; + + // Check if zip64 header information is required. + if ( (thisDiskNumber == 0xffff) || + (startCentralDirDisk == 0xffff) || + (entriesForThisDisk == 0xffff) || + (entriesForWholeCentralDir == 0xffff) || + (centralDirSize == 0xffffffff) || + (offsetOfCentralDir == 0xffffffff) ) { + isZip64 = true; + + long offset = LocateBlockWithSignature(ZipConstants.Zip64CentralDirLocatorSignature, locatedEndOfCentralDir, 0, 0x1000); + if ( offset < 0 ) { + throw new ZipException("Cannot find Zip64 locator"); + } + + // number of the disk with the start of the zip64 end of central directory 4 bytes + // relative offset of the zip64 end of central directory record 8 bytes + // total number of disks 4 bytes + ReadLEUint(); // startDisk64 is not currently used + ulong offset64 = ReadLEUlong(); + uint totalDisks = ReadLEUint(); + + baseStream_.Position = (long)offset64; + long sig64 = ReadLEUint(); + + if ( sig64 != ZipConstants.Zip64CentralFileHeaderSignature ) { + throw new ZipException(string.Format("Invalid Zip64 Central directory signature at {0:X}", offset64)); + } + + // NOTE: Record size = SizeOfFixedFields + SizeOfVariableData - 12. + ulong recordSize = ( ulong )ReadLEUlong(); + int versionMadeBy = ReadLEUshort(); + int versionToExtract = ReadLEUshort(); + uint thisDisk = ReadLEUint(); + uint centralDirDisk = ReadLEUint(); + entriesForThisDisk = ReadLEUlong(); + entriesForWholeCentralDir = ReadLEUlong(); + centralDirSize = ReadLEUlong(); + offsetOfCentralDir = (long)ReadLEUlong(); + + // NOTE: zip64 extensible data sector (variable size) is ignored. + } + + entries_ = new ZipEntry[entriesForThisDisk]; + + // SFX/embedded support, find the offset of the first entry vis the start of the stream + // This applies to Zip files that are appended to the end of an SFX stub. + // Or are appended as a resource to an executable. + // Zip files created by some archivers have the offsets altered to reflect the true offsets + // and so dont require any adjustment here... + // TODO: Difficulty with Zip64 and SFX offset handling needs resolution - maths? + if ( !isZip64 && (offsetOfCentralDir < locatedEndOfCentralDir - (4 + (long)centralDirSize)) ) { + offsetOfFirstEntry = locatedEndOfCentralDir - (4 + (long)centralDirSize + offsetOfCentralDir); + if (offsetOfFirstEntry <= 0) { + throw new ZipException("Invalid embedded zip archive"); + } + } + + baseStream_.Seek(offsetOfFirstEntry + offsetOfCentralDir, SeekOrigin.Begin); + + for (ulong i = 0; i < entriesForThisDisk; i++) { + if (ReadLEUint() != ZipConstants.CentralHeaderSignature) { + throw new ZipException("Wrong Central Directory signature"); + } + + int versionMadeBy = ReadLEUshort(); + int versionToExtract = ReadLEUshort(); + int bitFlags = ReadLEUshort(); + int method = ReadLEUshort(); + uint dostime = ReadLEUint(); + uint crc = ReadLEUint(); + long csize = (long)ReadLEUint(); + long size = (long)ReadLEUint(); + int nameLen = ReadLEUshort(); + int extraLen = ReadLEUshort(); + int commentLen = ReadLEUshort(); + + int diskStartNo = ReadLEUshort(); // Not currently used + int internalAttributes = ReadLEUshort(); // Not currently used + + uint externalAttributes = ReadLEUint(); + long offset = ReadLEUint(); + + byte[] buffer = new byte[Math.Max(nameLen, commentLen)]; + + StreamUtils.ReadFully(baseStream_, buffer, 0, nameLen); + string name = ZipConstants.ConvertToStringExt(bitFlags, buffer, nameLen); + + ZipEntry entry = new ZipEntry(name, versionToExtract, versionMadeBy, (CompressionMethod)method); + entry.Crc = crc & 0xffffffffL; + entry.Size = size & 0xffffffffL; + entry.CompressedSize = csize & 0xffffffffL; + entry.Flags = bitFlags; + entry.DosTime = (uint)dostime; + entry.ZipFileIndex = (long)i; + entry.Offset = offset; + entry.ExternalFileAttributes = (int)externalAttributes; + + if ((bitFlags & 8) == 0) { + entry.CryptoCheckValue = (byte)(crc >> 24); + } + else { + entry.CryptoCheckValue = (byte)((dostime >> 8) & 0xff); + } + + if (extraLen > 0) { + byte[] extra = new byte[extraLen]; + StreamUtils.ReadFully(baseStream_, extra); + entry.ExtraData = extra; + } + + entry.ProcessExtraData(false); + + if (commentLen > 0) { + StreamUtils.ReadFully(baseStream_, buffer, 0, commentLen); + entry.Comment = ZipConstants.ConvertToStringExt(bitFlags, buffer, commentLen); + } + + entries_[i] = entry; + } + } + + /// + /// Locate the data for a given entry. + /// + /// + /// The start offset of the data. + /// + /// + /// The stream ends prematurely + /// + /// + /// The local header signature is invalid, the entry and central header file name lengths are different + /// or the local and entry compression methods dont match + /// + long LocateEntry(ZipEntry entry) + { + return TestLocalHeader(entry, HeaderTest.Extract); + } + +#if !NETCF_1_0 + Stream CreateAndInitDecryptionStream(Stream baseStream, ZipEntry entry) + { + CryptoStream result = null; + + if ( (entry.Version < ZipConstants.VersionStrongEncryption) + || (entry.Flags & (int)GeneralBitFlags.StrongEncryption) == 0) { + PkzipClassicManaged classicManaged = new PkzipClassicManaged(); + + OnKeysRequired(entry.Name); + if (HaveKeys == false) { + throw new ZipException("No password available for encrypted stream"); + } + + result = new CryptoStream(baseStream, classicManaged.CreateDecryptor(key, null), CryptoStreamMode.Read); + CheckClassicPassword(result, entry); + } + else { + throw new ZipException("Decryption method not supported"); + } + + return result; + } + + Stream CreateAndInitEncryptionStream(Stream baseStream, ZipEntry entry) + { + CryptoStream result = null; + if ( (entry.Version < ZipConstants.VersionStrongEncryption) + || (entry.Flags & (int)GeneralBitFlags.StrongEncryption) == 0) { + PkzipClassicManaged classicManaged = new PkzipClassicManaged(); + + OnKeysRequired(entry.Name); + if (HaveKeys == false) { + throw new ZipException("No password available for encrypted stream"); + } + + // Closing a CryptoStream will close the base stream as well so wrap it in an UncompressedStream + // which doesnt do this. + result = new CryptoStream(new UncompressedStream(baseStream), + classicManaged.CreateEncryptor(key, null), CryptoStreamMode.Write); + + if ( (entry.Crc < 0) || (entry.Flags & 8) != 0) { + WriteEncryptionHeader(result, entry.DosTime << 16); + } + else { + WriteEncryptionHeader(result, entry.Crc); + } + } + return result; + } + + static void CheckClassicPassword(CryptoStream classicCryptoStream, ZipEntry entry) + { + byte[] cryptbuffer = new byte[ZipConstants.CryptoHeaderSize]; + StreamUtils.ReadFully(classicCryptoStream, cryptbuffer); + if (cryptbuffer[ZipConstants.CryptoHeaderSize - 1] != entry.CryptoCheckValue) { + throw new ZipException("Invalid password"); + } + } +#endif + + static void WriteEncryptionHeader(Stream stream, long crcValue) + { + byte[] cryptBuffer = new byte[ZipConstants.CryptoHeaderSize]; + Random rnd = new Random(); + rnd.NextBytes(cryptBuffer); + cryptBuffer[11] = (byte)(crcValue >> 24); + stream.Write(cryptBuffer, 0, cryptBuffer.Length); + } + + #endregion + + #region Instance Fields + bool isDisposed_; + string name_; + string comment_; + Stream baseStream_; + bool isStreamOwner; + long offsetOfFirstEntry; + ZipEntry[] entries_; + byte[] key; + bool isNewArchive_; + + // Default is dynamic which is not backwards compatible and can cause problems + // with XP's built in compression which cant read Zip64 archives. + // However it does avoid the situation were a large file is added and cannot be completed correctly. + UseZip64 useZip64_ = UseZip64.Dynamic ; + + #region Zip Update Instance Fields + List updates_; + long updateCount_; // Count is managed manually as updates_ can contain nulls! + Dictionary updateIndex_; + IArchiveStorage archiveStorage_; + IDynamicDataSource updateDataSource_; + bool contentsEdited_; + int bufferSize_ = DefaultBufferSize; + byte[] copyBuffer_; + ZipString newComment_; + bool commentEdited_; + IEntryFactory updateEntryFactory_ = new ZipEntryFactory(); + string tempDirectory_ = string.Empty; + #endregion + #endregion + + #region Support Classes + /// + /// Represents a string from a which is stored as an array of bytes. + /// + class ZipString + { + #region Constructors + /// + /// Initialise a with a string. + /// + /// The textual string form. + public ZipString(string comment) + { + comment_ = comment; + isSourceString_ = true; + } + + /// + /// Initialise a using a string in its binary 'raw' form. + /// + /// + public ZipString(byte[] rawString) + { + rawComment_ = rawString; + } + #endregion + + /// + /// Get a value indicating the original source of data for this instance. + /// True if the source was a string; false if the source was binary data. + /// + public bool IsSourceString + { + get { return isSourceString_; } + } + + /// + /// Get the length of the comment when represented as raw bytes. + /// + public int RawLength + { + get { + MakeBytesAvailable(); + return rawComment_.Length; + } + } + + /// + /// Get the comment in its 'raw' form as plain bytes. + /// + public byte[] RawComment + { + get { + MakeBytesAvailable(); + return (byte[])rawComment_.Clone(); + } + } + + /// + /// Reset the comment to its initial state. + /// + public void Reset() + { + if ( isSourceString_ ) { + rawComment_ = null; + } + else { + comment_ = null; + } + } + + void MakeTextAvailable() + { + if ( comment_ == null ) { + comment_ = ZipConstants.ConvertToString(rawComment_); + } + } + + void MakeBytesAvailable() + { + if ( rawComment_ == null ) { + rawComment_ = ZipConstants.ConvertToArray(comment_); + } + } + + /// + /// Implicit conversion of comment to a string. + /// + /// The to convert to a string. + /// The textual equivalent for the input value. + static public implicit operator string(ZipString zipString) + { + zipString.MakeTextAvailable(); + return zipString.comment_; + } + + #region Instance Fields + string comment_; + byte[] rawComment_; + bool isSourceString_; + #endregion + } + + /// + /// An enumerator for Zip entries + /// + class ZipEntryEnumerator : IEnumerator + { + #region Constructors + public ZipEntryEnumerator(ZipEntry[] entries) + { + array = entries; + } + + #endregion + #region IEnumerator Members + public object Current + { + get { + return array[index]; + } + } + + public void Reset() + { + index = -1; + } + + public bool MoveNext() + { + return (++index < array.Length); + } + #endregion + #region Instance Fields + ZipEntry[] array; + int index = -1; + #endregion + } + + /// + /// An is a stream that you can write uncompressed data + /// to and flush, but cannot read, seek or do anything else to. + /// + class UncompressedStream : Stream + { + #region Constructors + public UncompressedStream(Stream baseStream) + { + baseStream_ = baseStream; + } + + #endregion + + /// + /// Close this stream instance. + /// + public override void Close() + { + // Do nothing + } + + /// + /// Gets a value indicating whether the current stream supports reading. + /// + public override bool CanRead + { + get { + return false; + } + } + + /// + /// Write any buffered data to underlying storage. + /// + public override void Flush() + { + baseStream_.Flush(); + } + + /// + /// Gets a value indicating whether the current stream supports writing. + /// + public override bool CanWrite + { + get { + return baseStream_.CanWrite; + } + } + + /// + /// Gets a value indicating whether the current stream supports seeking. + /// + public override bool CanSeek + { + get { + return false; + } + } + + /// + /// Get the length in bytes of the stream. + /// + public override long Length + { + get { + return 0; + } + } + + /// + /// Gets or sets the position within the current stream. + /// + public override long Position + { + get { + return baseStream_.Position; + } + + set + { + } + } + + public override int Read(byte[] buffer, int offset, int count) + { + return 0; + } + + public override long Seek(long offset, SeekOrigin origin) + { + return 0; + } + + public override void SetLength(long value) + { + } + + public override void Write(byte[] buffer, int offset, int count) + { + baseStream_.Write(buffer, offset, count); + } + + #region Instance Fields + Stream baseStream_; + #endregion + } + + /// + /// A is an + /// whose data is only a part or subsection of a file. + /// + class PartialInputStream : InflaterInputStream + { + #region Constructors + /// + /// Initialise a new instance of the class. + /// + /// The underlying stream to use for IO. + /// The start of the partial data. + /// The length of the partial data. + public PartialInputStream(Stream baseStream, long start, long length) + : base(baseStream) + { + baseStream_ = baseStream; + filepos_ = start; + end_ = start + length; + } + + #endregion + + /// + /// Skip the specified number of input bytes. + /// + /// The maximum number of input bytes to skip. + /// The actuial number of input bytes skipped. + public long SkipBytes(long count) + { + if (count < 0) { +#if NETCF_1_0 + throw new ArgumentOutOfRangeException("count"); +#else + throw new ArgumentOutOfRangeException("count", "is less than zero"); +#endif + } + + if (count > end_ - filepos_) { + count = end_ - filepos_; + } + + filepos_ += count; + return count; + } + + public override int Available + { + get { + long amount = end_ - filepos_; + if (amount > int.MaxValue) { + return int.MaxValue; + } + + return (int) amount; + } + } + + /// + /// Read a byte from this stream. + /// + /// Returns the byte read or -1 on end of stream. + public override int ReadByte() + { + if (filepos_ == end_) { + // -1 is the correct value at end of stream. + return -1; + } + + lock( baseStream_ ) { + baseStream_.Seek(filepos_++, SeekOrigin.Begin); + return baseStream_.ReadByte(); + } + } + + /// + /// Close this partial input stream. + /// + /// + /// The underlying stream is not closed. Close the parent ZipFile class to do that. + /// + public override void Close() + { + // Do nothing at all! + } + + public override int Read(byte[] buffer, int offset, int count) + { + if (count > end_ - filepos_) { + count = (int) (end_ - filepos_); + if (count == 0) { + return 0; + } + } + + lock(baseStream_) { + baseStream_.Seek(filepos_, SeekOrigin.Begin); + int readCount = baseStream_.Read(buffer, offset, count); + if (readCount > 0) { + filepos_ += readCount; + } + return readCount; + } + } + + #region Instance Fields + Stream baseStream_; + long filepos_; + long end_; + #endregion + } + #endregion + } + + /// + /// Provides a static way to obtain a source of data for an entry. + /// + public interface IStaticDataSource + { + /// + /// Get a source of data by creating a new stream. + /// + /// Returns a to use for compression input. + /// Ideally a new stream is created and opened to achieve this, to avoid locking problems. + Stream GetSource(); + } + + /// + /// Represents a source of data that can dynamically provide + /// multiple data sources based on the parameters passed. + /// + public interface IDynamicDataSource + { + /// + /// Get a data source. + /// + /// The to get a source for. + /// The name for data if known. + /// Returns a to use for compression input. + /// Ideally a new stream is created and opened to achieve this, to avoid locking problems. + Stream GetSource(ZipEntry entry, string name); + } + + /// + /// Default implementation of a for use with files stored on disk. + /// + class StaticDiskDataSource : IStaticDataSource + { + /// + /// Initialise a new instnace of + /// + /// The name of the file to obtain data from. + public StaticDiskDataSource(string fileName) + { + fileName_ = fileName; + } + + #region IDataSource Members + + /// + /// Get a providing data. + /// + /// Returns a provising data. + public Stream GetSource() + { + return File.OpenRead(fileName_); + } + + #endregion + #region Instance Fields + string fileName_; + #endregion + } + + /// + /// Default implementation of for files stored on disk. + /// + class DynamicDiskDataSource : IDynamicDataSource + { + /// + /// Initialise a default instance of . + /// + public DynamicDiskDataSource() + { + } + + #region IDataSource Members + /// + /// Get a providing data for an entry. + /// + /// The entry to provide data for. + /// The file name for data if known. + /// Returns a stream providing data; or null if not available + public Stream GetSource(ZipEntry entry, string name) + { + Stream result = null; + + if ( name != null ) { + result = File.OpenRead(name); + } + + return result; + } + + #endregion + } + + /// + /// Defines facilities for data storage when updating Zip Archives. + /// + public interface IArchiveStorage + { + /// + /// Get the to apply during updates. + /// + FileUpdateMode UpdateMode { get; } + + /// + /// Get an empty that can be used for temporary output. + /// + /// Returns a temporary output + /// + Stream GetTemporaryOutput(); + + /// + /// Convert a temporary output stream to a final stream. + /// + /// The resulting final + /// + Stream ConvertTemporaryToFinal(); + + /// + /// Make a temporary copy of the original stream. + /// + /// The to copy. + /// Returns a temporary output that is a copy of the input. + Stream MakeTemporaryCopy(Stream stream); + + /// + /// Return a stream suitable for performing direct updates on the original source. + /// + /// The current stream. + /// Returns a stream suitable for direct updating. + /// This may be the current stream passed. + Stream OpenForDirectUpdate(Stream stream); + + /// + /// Dispose of this instance. + /// + void Dispose(); + } + + /// + /// An abstract suitable for extension by inheritance. + /// + abstract public class BaseArchiveStorage : IArchiveStorage + { + #region Constructors + /// + /// Initializes a new instance of the class. + /// + /// The update mode. + public BaseArchiveStorage(FileUpdateMode updateMode) + { + updateMode_ = updateMode; + } + #endregion + + #region IArchiveStorage Members + + /// + /// Gets a temporary output + /// + /// Returns the temporary output stream. + /// + public abstract Stream GetTemporaryOutput(); + + /// + /// Converts the temporary to its final form. + /// + /// Returns a that can be used to read + /// the final storage for the archive. + /// + public abstract Stream ConvertTemporaryToFinal(); + + /// + /// Make a temporary copy of a . + /// + /// The to make a copy of. + /// Returns a temporary output that is a copy of the input. + public abstract Stream MakeTemporaryCopy(Stream stream); + + /// + /// Return a stream suitable for performing direct updates on the original source. + /// + /// The to open for direct update. + /// Returns a stream suitable for direct updating. + public abstract Stream OpenForDirectUpdate(Stream stream); + + /// + /// Disposes this instance. + /// + public abstract void Dispose(); + + /// + /// Gets the update mode applicable. + /// + /// The update mode. + public FileUpdateMode UpdateMode + { + get { + return updateMode_; + } + } + + #endregion + + #region Instance Fields + FileUpdateMode updateMode_; + #endregion + } + + /// + /// An implementation suitable for hard disks. + /// + public class DiskArchiveStorage : BaseArchiveStorage + { + #region Constructors + /// + /// Initializes a new instance of the class. + /// + /// The file. + /// The update mode. + public DiskArchiveStorage(ZipFile file, FileUpdateMode updateMode) + : base(updateMode) + { + if ( file.Name == null ) { + throw new ZipException("Cant handle non file archives"); + } + + fileName_ = file.Name; + } + + /// + /// Initializes a new instance of the class. + /// + /// The file. + public DiskArchiveStorage(ZipFile file) + : this(file, FileUpdateMode.Safe) + { + } + #endregion + + #region IArchiveStorage Members + + /// + /// Gets a temporary output for performing updates on. + /// + /// Returns the temporary output stream. + public override Stream GetTemporaryOutput() + { + if ( temporaryName_ != null ) { + temporaryName_ = GetTempFileName(temporaryName_, true); + temporaryStream_ = File.OpenWrite(temporaryName_); + } + else { + // Determine where to place files based on internal strategy. + // Currently this is always done in system temp directory. + temporaryName_ = Path.GetTempFileName(); + temporaryStream_ = File.OpenWrite(temporaryName_); + } + + return temporaryStream_; + } + + /// + /// Converts a temporary to its final form. + /// + /// Returns a that can be used to read + /// the final storage for the archive. + public override Stream ConvertTemporaryToFinal() + { + if ( temporaryStream_ == null ) { + throw new ZipException("No temporary stream has been created"); + } + + Stream result = null; + + string moveTempName = GetTempFileName(fileName_, false); + bool newFileCreated = false; + + try { + temporaryStream_.Close(); + File.Move(fileName_, moveTempName); + File.Move(temporaryName_, fileName_); + newFileCreated = true; + File.Delete(moveTempName); + + result = File.OpenRead(fileName_); + } + catch(Exception) { + result = null; + + // Try to roll back changes... + if ( !newFileCreated ) { + File.Move(moveTempName, fileName_); + File.Delete(temporaryName_); + } + + throw; + } + + return result; + } + + /// + /// Make a temporary copy of a stream. + /// + /// The to copy. + /// Returns a temporary output that is a copy of the input. + public override Stream MakeTemporaryCopy(Stream stream) + { + stream.Close(); + + temporaryName_ = GetTempFileName(fileName_, true); + File.Copy(fileName_, temporaryName_, true); + + temporaryStream_ = new FileStream(temporaryName_, + FileMode.Open, + FileAccess.ReadWrite); + return temporaryStream_; + } + + /// + /// Return a stream suitable for performing direct updates on the original source. + /// + /// The current stream. + /// Returns a stream suitable for direct updating. + /// If the stream is not null this is used as is. + public override Stream OpenForDirectUpdate(Stream current) + { + Stream result; + if ((current == null) || !current.CanWrite) + { + if (current != null) { + current.Close(); + } + + result = new FileStream(fileName_, + FileMode.Open, + FileAccess.ReadWrite); + } + else + { + result = current; + } + + return result; + } + + /// + /// Disposes this instance. + /// + public override void Dispose() + { + if ( temporaryStream_ != null ) { + temporaryStream_.Close(); + } + } + + #endregion + + #region Internal routines + string GetTempFileName(string original, bool makeTempFile) + { + string result = null; + + if ( original == null ) { + result = Path.GetTempFileName(); + } + else { + int counter = 0; + int suffixSeed = DateTime.Now.Second; + + while ( result == null ) { + counter += 1; + string newName = string.Format("{0}.{1}{2}.tmp", original, suffixSeed, counter); + if ( !File.Exists(newName) ) { + if ( makeTempFile) { + try { + // Try and create the file. + using ( FileStream stream = File.Create(newName) ) { + } + result = newName; + } + catch { + suffixSeed = DateTime.Now.Second; + } + } + else { + result = newName; + } + } + } + } + return result; + } + #endregion + + #region Instance Fields + Stream temporaryStream_; + string fileName_; + string temporaryName_; + #endregion + } + + /// + /// An implementation suitable for in memory streams. + /// + public class MemoryArchiveStorage : BaseArchiveStorage + { + #region Constructors + /// + /// Initializes a new instance of the class. + /// + public MemoryArchiveStorage() + : base(FileUpdateMode.Direct) + { + } + + /// + /// Initializes a new instance of the class. + /// + /// The to use + /// This constructor is for testing as memory streams dont really require safe mode. + public MemoryArchiveStorage(FileUpdateMode updateMode) + : base(updateMode) + { + } + + #endregion + + #region Properties + /// + /// Get the stream returned by if this was in fact called. + /// + public MemoryStream FinalStream + { + get { return finalStream_; } + } + + #endregion + + #region IArchiveStorage Members + + /// + /// Gets the temporary output + /// + /// Returns the temporary output stream. + public override Stream GetTemporaryOutput() + { + temporaryStream_ = new MemoryStream(); + return temporaryStream_; + } + + /// + /// Converts the temporary to its final form. + /// + /// Returns a that can be used to read + /// the final storage for the archive. + public override Stream ConvertTemporaryToFinal() + { + if ( temporaryStream_ == null ) { + throw new ZipException("No temporary stream has been created"); + } + + finalStream_ = new MemoryStream(temporaryStream_.ToArray()); + return finalStream_; + } + + /// + /// Make a temporary copy of the original stream. + /// + /// The to copy. + /// Returns a temporary output that is a copy of the input. + public override Stream MakeTemporaryCopy(Stream stream) + { + temporaryStream_ = new MemoryStream(); + stream.Position = 0; + StreamUtils.Copy(stream, temporaryStream_, new byte[4096]); + return temporaryStream_; + } + + /// + /// Return a stream suitable for performing direct updates on the original source. + /// + /// The original source stream + /// Returns a stream suitable for direct updating. + /// If the passed is not null this is used; + /// otherwise a new is returned. + public override Stream OpenForDirectUpdate(Stream stream) + { + Stream result; + if ((stream == null) || !stream.CanWrite) { + + result = new MemoryStream(); + + if (stream != null) { + stream.Position = 0; + StreamUtils.Copy(stream, result, new byte[4096]); + + stream.Close(); + } + } + else { + result = stream; + } + + return result; + } + + /// + /// Disposes this instance. + /// + public override void Dispose() + { + if ( temporaryStream_ != null ) { + temporaryStream_.Close(); + } + } + + #endregion + + #region Instance Fields + MemoryStream temporaryStream_; + MemoryStream finalStream_; + #endregion + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipHelperStream.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipHelperStream.cs new file mode 100644 index 0000000..4833ebf --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipHelperStream.cs @@ -0,0 +1,622 @@ +// ZipHelperStream.cs +// +// Copyright 2006, 2007 John Reilly +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using System.IO; +using System.Text; +using ICSharpCode.SharpZipLib.Silverlight.Zip; + +namespace ICSharpCode.SharpZipLib.Zip +{ + + /// + /// Holds data pertinent to a data descriptor. + /// + public class DescriptorData + { + /// + /// Get /set the compressed size of data. + /// + public long CompressedSize + { + get { return compressedSize; } + set { compressedSize = value; } + } + + /// + /// Get / set the uncompressed size of data + /// + public long Size + { + get { return size; } + set { size = value; } + } + + /// + /// Get /set the crc value. + /// + public long Crc + { + get { return crc; } + set { crc = (value & 0xffffffff); } + } + + #region Instance Fields + long size; + long compressedSize; + long crc; + #endregion + } + + class EntryPatchData + { + public long SizePatchOffset + { + get { return sizePatchOffset_; } + set { sizePatchOffset_ = value; } + } + + public long CrcPatchOffset + { + get { return crcPatchOffset_; } + set { crcPatchOffset_ = value; } + } + + #region Instance Fields + long sizePatchOffset_; + long crcPatchOffset_; + #endregion + } + + /// + /// This class assists with writing/reading from Zip files. + /// + internal class ZipHelperStream : Stream + { + #region Constructors + /// + /// Initialise an instance of this class. + /// + /// The name of the file to open. + public ZipHelperStream(string name) + { + stream_ = new FileStream(name, FileMode.Open, FileAccess.ReadWrite); + isOwner_ = true; + } + + /// + /// Initialise a new instance of . + /// + /// The stream to use. + public ZipHelperStream(Stream stream) + { + stream_ = stream; + } + #endregion + + /// + /// Get / set a value indicating wether the the underlying stream is owned or not. + /// + /// If the stream is owned it is closed when this instance is closed. + public bool IsStreamOwner + { + get { return isOwner_; } + set { isOwner_ = value; } + } + + #region Base Stream Methods + public override bool CanRead + { + get { return stream_.CanRead; } + } + + public override bool CanSeek + { + get { return stream_.CanSeek; } + } + + public override bool CanTimeout + { + get { return stream_.CanTimeout; } + } + + public override long Length + { + get { return stream_.Length; } + } + + public override long Position + { + get { return stream_.Position; } + set { stream_.Position = value; } + } + + public override bool CanWrite + { + get { return stream_.CanWrite; } + } + + public override void Flush() + { + stream_.Flush(); + } + + public override long Seek(long offset, SeekOrigin origin) + { + return stream_.Seek(offset, origin); + } + + public override void SetLength(long value) + { + stream_.SetLength(value); + } + + public override int Read(byte[] buffer, int offset, int count) + { + return stream_.Read(buffer, offset, count); + } + + public override void Write(byte[] buffer, int offset, int count) + { + stream_.Write(buffer, offset, count); + } + + /// + /// Close the stream. + /// + /// + /// The underlying stream is closed only if is true. + /// + override public void Close() + { + Stream toClose = stream_; + stream_ = null; + if (isOwner_ && (toClose != null)) + { + isOwner_ = false; + toClose.Close(); + } + } + #endregion + + // Write the local file header + // TODO: ZipHelperStream.WriteLocalHeader is not yet used and needs checking for ZipFile and ZipOuptutStream usage + void WriteLocalHeader(ZipEntry entry, EntryPatchData patchData) + { + CompressionMethod method = entry.CompressionMethod; + bool headerInfoAvailable = true; // How to get this? + bool patchEntryHeader = false; + + WriteLEInt(ZipConstants.LocalHeaderSignature); + + WriteLEShort(entry.Version); + WriteLEShort(entry.Flags); + WriteLEShort((byte)method); + WriteLEInt((int)entry.DosTime); + + if (headerInfoAvailable == true) { + WriteLEInt((int)entry.Crc); + if ( entry.LocalHeaderRequiresZip64 ) { + WriteLEInt(-1); + WriteLEInt(-1); + } + else { + WriteLEInt(entry.IsCrypted ? (int)entry.CompressedSize + ZipConstants.CryptoHeaderSize : (int)entry.CompressedSize); + WriteLEInt((int)entry.Size); + } + } else { + if (patchData != null) { + patchData.CrcPatchOffset = stream_.Position; + } + WriteLEInt(0); // Crc + + if ( patchData != null ) { + patchData.SizePatchOffset = stream_.Position; + } + + // For local header both sizes appear in Zip64 Extended Information + if ( entry.LocalHeaderRequiresZip64 && patchEntryHeader ) { + WriteLEInt(-1); + WriteLEInt(-1); + } + else { + WriteLEInt(0); // Compressed size + WriteLEInt(0); // Uncompressed size + } + } + + byte[] name = ZipConstants.ConvertToArray(entry.Flags, entry.Name); + + if (name.Length > 0xFFFF) { + throw new ZipException("Entry name too long."); + } + + ZipExtraData ed = new ZipExtraData(entry.ExtraData); + + if (entry.LocalHeaderRequiresZip64 && (headerInfoAvailable || patchEntryHeader)) { + ed.StartNewEntry(); + if (headerInfoAvailable) { + ed.AddLeLong(entry.Size); + ed.AddLeLong(entry.CompressedSize); + } + else { + ed.AddLeLong(-1); + ed.AddLeLong(-1); + } + ed.AddNewEntry(1); + + if ( !ed.Find(1) ) { + throw new ZipException("Internal error cant find extra data"); + } + + if ( patchData != null ) { + patchData.SizePatchOffset = ed.CurrentReadIndex; + } + } + else { + ed.Delete(1); + } + + byte[] extra = ed.GetEntryData(); + + WriteLEShort(name.Length); + WriteLEShort(extra.Length); + + if ( name.Length > 0 ) { + stream_.Write(name, 0, name.Length); + } + + if ( entry.LocalHeaderRequiresZip64 && patchEntryHeader ) { + patchData.SizePatchOffset += stream_.Position; + } + + if ( extra.Length > 0 ) { + stream_.Write(extra, 0, extra.Length); + } + } + + /// + /// Locates a block with the desired . + /// + /// The signature to find. + /// Location, marking the end of block. + /// Minimum size of the block. + /// The maximum variable data. + /// Eeturns the offset of the first byte after the signature; -1 if not found + public long LocateBlockWithSignature(int signature, long endLocation, int minimumBlockSize, int maximumVariableData) + { + long pos = endLocation - minimumBlockSize; + if ( pos < 0 ) { + return -1; + } + + long giveUpMarker = Math.Max(pos - maximumVariableData, 0); + + // TODO: This loop could be optimised for speed. + do { + if ( pos < giveUpMarker ) { + return -1; + } + Seek(pos--, SeekOrigin.Begin); + } while ( ReadLEInt() != signature ); + + return Position; + } + + /// + /// Write Zip64 end of central directory records (File header and locator). + /// + /// The number of entries in the central directory. + /// The size of entries in the central directory. + /// The offset of the dentral directory. + public void WriteZip64EndOfCentralDirectory(long noOfEntries, long sizeEntries, long centralDirOffset) + { + long centralSignatureOffset = stream_.Position; + WriteLEInt(ZipConstants.Zip64CentralFileHeaderSignature); + WriteLELong(44); // Size of this record (total size of remaining fields in header or full size - 12) + WriteLEShort(ZipConstants.VersionMadeBy); // Version made by + WriteLEShort(ZipConstants.VersionZip64); // Version to extract + WriteLEInt(0); // Number of this disk + WriteLEInt(0); // number of the disk with the start of the central directory + WriteLELong(noOfEntries); // No of entries on this disk + WriteLELong(noOfEntries); // Total No of entries in central directory + WriteLELong(sizeEntries); // Size of the central directory + WriteLELong(centralDirOffset); // offset of start of central directory + // zip64 extensible data sector not catered for here (variable size) + + // Write the Zip64 end of central directory locator + WriteLEInt(ZipConstants.Zip64CentralDirLocatorSignature); + + // no of the disk with the start of the zip64 end of central directory + WriteLEInt(0); + + // relative offset of the zip64 end of central directory record + WriteLELong(centralSignatureOffset); + + // total number of disks + WriteLEInt(1); + } + + /// + /// Write the required records to end the central directory. + /// + /// The number of entries in the directory. + /// The size of the entries in the directory. + /// The start of the central directory. + /// The archive comment. (This can be null). + public void WriteEndOfCentralDirectory(long noOfEntries, long sizeEntries, + long startOfCentralDirectory, byte[] comment) + { + + if ( (noOfEntries >= 0xffff) || + (startOfCentralDirectory >= 0xffffffff) || + (sizeEntries >= 0xffffffff) ) { + WriteZip64EndOfCentralDirectory(noOfEntries, sizeEntries, startOfCentralDirectory); + } + + WriteLEInt(ZipConstants.EndOfCentralDirectorySignature); + + // TODO: ZipFile Multi disk handling not done + WriteLEShort(0); // number of this disk + WriteLEShort(0); // no of disk with start of central dir + + + // Number of entries + if ( noOfEntries >= 0xffff ) { + WriteLEUshort(0xffff); // Zip64 marker + WriteLEUshort(0xffff); + } + else { + WriteLEShort(( short )noOfEntries); // entries in central dir for this disk + WriteLEShort(( short )noOfEntries); // total entries in central directory + } + + // Size of the central directory + if ( sizeEntries >= 0xffffffff ) { + WriteLEUint(0xffffffff); // Zip64 marker + } + else { + WriteLEInt(( int )sizeEntries); + } + + + // offset of start of central directory + if ( startOfCentralDirectory >= 0xffffffff ) { + WriteLEUint(0xffffffff); // Zip64 marker + } + else { + WriteLEInt(( int )startOfCentralDirectory); + } + + int commentLength = (comment != null) ? comment.Length : 0; + + if ( commentLength > 0xffff ) { + throw new ZipException(string.Format("Comment length({0}) is too long can only be 64K", commentLength)); + } + + WriteLEShort(commentLength); + + if ( commentLength > 0 ) { + Write(comment, 0, comment.Length); + } + } + + #region LE value reading/writing + /// + /// Read an unsigned short in little endian byte order. + /// + /// Returns the value read. + /// + /// An i/o error occurs. + /// + /// + /// The file ends prematurely + /// + public int ReadLEShort() + { + int byteValue1 = stream_.ReadByte(); + + if (byteValue1 < 0) { + throw new EndOfStreamException(); + } + + int byteValue2 = stream_.ReadByte(); + if (byteValue2 < 0) { + throw new EndOfStreamException(); + } + + return byteValue1 | (byteValue2 << 8); + } + + /// + /// Read an int in little endian byte order. + /// + /// Returns the value read. + /// + /// An i/o error occurs. + /// + /// + /// The file ends prematurely + /// + public int ReadLEInt() + { + return ReadLEShort() | (ReadLEShort() << 16); + } + + /// + /// Read a long in little endian byte order. + /// + /// The value read. + public long ReadLELong() + { + return (uint)ReadLEInt() | ((long)ReadLEInt() << 32); + } + + /// + /// Write an unsigned short in little endian byte order. + /// + /// The value to write. + public void WriteLEShort(int value) + { + stream_.WriteByte(( byte )(value & 0xff)); + stream_.WriteByte(( byte )((value >> 8) & 0xff)); + } + + /// + /// Write a ushort in little endian byte order. + /// + /// The value to write. + public void WriteLEUshort(ushort value) + { + stream_.WriteByte(( byte )(value & 0xff)); + stream_.WriteByte(( byte )(value >> 8)); + } + + /// + /// Write an int in little endian byte order. + /// + /// The value to write. + public void WriteLEInt(int value) + { + WriteLEShort(value); + WriteLEShort(value >> 16); + } + + /// + /// Write a uint in little endian byte order. + /// + /// The value to write. + public void WriteLEUint(uint value) + { + WriteLEUshort(( ushort )(value & 0xffff)); + WriteLEUshort(( ushort )(value >> 16)); + } + + /// + /// Write a long in little endian byte order. + /// + /// The value to write. + public void WriteLELong(long value) + { + WriteLEInt(( int )value); + WriteLEInt(( int )(value >> 32)); + } + + /// + /// Write a ulong in little endian byte order. + /// + /// The value to write. + public void WriteLEUlong(ulong value) + { + WriteLEUint(( uint )(value & 0xffffffff)); + WriteLEUint(( uint )(value >> 32)); + } + + #endregion + + /// + /// Write a data descriptor. + /// + /// The entry to write a descriptor for. + /// Returns the number of descriptor bytes written. + public int WriteDataDescriptor(ZipEntry entry) + { + if (entry == null) { + throw new ArgumentNullException("entry"); + } + + int result=0; + + // Add data descriptor if flagged as required + if ((entry.Flags & (int)GeneralBitFlags.Descriptor) != 0) + { + // The signature is not PKZIP originally but is now described as optional + // in the PKZIP Appnote documenting trhe format. + WriteLEInt(ZipConstants.DataDescriptorSignature); + WriteLEInt(unchecked((int)(entry.Crc))); + + result+=8; + + if (entry.LocalHeaderRequiresZip64) + { + WriteLELong(entry.CompressedSize); + WriteLELong(entry.Size); + result+=16; + } + else + { + WriteLEInt((int)entry.CompressedSize); + WriteLEInt((int)entry.Size); + result+=8; + } + } + + return result; + } + + /// + /// Read data descriptor at the end of compressed data. + /// + /// if set to true [zip64]. + /// The data to fill in. + /// Returns the number of bytes read in the descriptor. + public void ReadDataDescriptor(bool zip64, DescriptorData data) + { + int intValue = ReadLEInt(); + + // In theory this may not be a descriptor according to PKZIP appnote. + // In practise its always there. + if (intValue != ZipConstants.DataDescriptorSignature) { + throw new ZipException("Data descriptor signature not found"); + } + + data.Crc = ReadLEInt(); + + if (zip64) { + data.CompressedSize = ReadLELong(); + data.Size = ReadLELong(); + } + else { + data.CompressedSize = ReadLEInt(); + data.Size = ReadLEInt(); + } + } + + #region Instance Fields + bool isOwner_; + Stream stream_; + #endregion + } +} diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipInputStream.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipInputStream.cs new file mode 100644 index 0000000..bc8114c --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipInputStream.cs @@ -0,0 +1,701 @@ +// ZipInputStream.cs +// +// Copyright (C) 2001 Mike Krueger +// Copyright (C) 2004 John Reilly +// +// This file was translated from java, it was part of the GNU Classpath +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using System.IO; +using ICSharpCode.SharpZipLib.Silverlight.Checksums; +using ICSharpCode.SharpZipLib.Silverlight.Encryption; +using ICSharpCode.SharpZipLib.Silverlight.Zip.Compression; +using ICSharpCode.SharpZipLib.Silverlight.Zip.Compression.Streams; + +namespace ICSharpCode.SharpZipLib.Silverlight.Zip +{ + /// + /// This is an InflaterInputStream that reads the files baseInputStream an zip archive + /// one after another. It has a special method to get the zip entry of + /// the next file. The zip entry contains information about the file name + /// size, compressed size, Crc, etc. + /// It includes support for Stored and Deflated entries. + ///
    + ///
    Author of the original java version : Jochen Hoenicke + ///
    + /// + /// This sample shows how to read a zip file + /// + /// using System; + /// using System.Text; + /// using System.IO; + /// + /// using ICSharpCode.SharpZipLib.Zip; + /// + /// class MainClass + /// { + /// public static void Main(string[] args) + /// { + /// using ( ZipInputStream s = new ZipInputStream(File.OpenRead(args[0]))) { + /// + /// ZipEntry theEntry; + /// while ((theEntry = s.GetNextEntry()) != null) { + /// int size = 2048; + /// byte[] data = new byte[2048]; + /// + /// Console.Write("Show contents (y/n) ?"); + /// if (Console.ReadLine() == "y") { + /// while (true) { + /// size = s.Read(data, 0, data.Length); + /// if (size > 0) { + /// Console.Write(new ASCIIEncoding().GetString(data, 0, size)); + /// } else { + /// break; + /// } + /// } + /// } + /// } + /// } + /// } + /// } + /// + /// + public class ZipInputStream : InflaterInputStream + { + #region Instance Fields + + // Delegate for reading bytes from a stream. + + private Crc32 crc = new Crc32(); + private ZipEntry entry; + + private int flags; + + /// + /// The current reader this instance. + /// + private ReaderDelegate internalReader; + + private int method; + + private string password; + private long size; + + private delegate int ReaderDelegate(byte[] b, int offset, int length); + + #endregion + + #region Constructors + + /// + /// Creates a new Zip input stream, for reading a zip archive. + /// + /// The underlying providing data. + public ZipInputStream(Stream baseInputStream) + : base(baseInputStream, new Inflater(true)) + { + internalReader = ReadingNotAvailable; + } + + #endregion + + /// + /// Optional password used for encryption when non-null + /// + /// A password for all encrypted entries in this + public string Password + { + get { return password; } + set { password = value; } + } + + + /// + /// Gets a value indicating if there is a current entry and it can be decompressed + /// + /// + /// The entry can only be decompressed if the library supports the zip features required to extract it. + /// See the ZipEntry Version property for more details. + /// + public bool CanDecompressEntry + { + get { return (entry != null) && entry.CanDecompress; } + } + + /// + /// Returns 1 if there is an entry available + /// Otherwise returns 0. + /// + public override int Available + { + get { return entry != null ? 1 : 0; } + } + + /// + /// Returns the current size that can be read from the current entry if available + /// + /// Thrown if the entry size is not known. + /// Thrown if no entry is currently available. + public override long Length + { + get + { + if (entry != null) + { + if (entry.Size >= 0) + { + return entry.Size; + } + else + { + throw new ZipException("Length not available for the current entry"); + } + } + else + { + throw new InvalidOperationException("No current entry"); + } + } + } + + /// + /// Advances to the next entry in the archive + /// + /// + /// The next entry in the archive or null if there are no more entries. + /// + /// + /// If the previous entry is still open CloseEntry is called. + /// + /// + /// Input stream is closed + /// + /// + /// Password is not set, password is invalid, compression method is invalid, + /// version required to extract is not supported + /// + public ZipEntry GetNextEntry() + { + if (crc == null) + { + throw new InvalidOperationException("Closed."); + } + + if (entry != null) + { + CloseEntry(); + } + + var header = inputBuffer.ReadLeInt(); + + if (header == ZipConstants.CentralHeaderSignature || + header == ZipConstants.EndOfCentralDirectorySignature || + header == ZipConstants.CentralHeaderDigitalSignature || + header == ZipConstants.ArchiveExtraDataSignature || + header == ZipConstants.Zip64CentralFileHeaderSignature) + { + // No more individual entries exist + Close(); + return null; + } + + // -jr- 07-Dec-2003 Ignore spanning temporary signatures if found + // Spanning signature is same as descriptor signature and is untested as yet. + if ((header == ZipConstants.SpanningTempSignature) || (header == ZipConstants.SpanningSignature)) + { + header = inputBuffer.ReadLeInt(); + } + + if (header != ZipConstants.LocalHeaderSignature) + { + throw new ZipException("Wrong Local header signature: 0x" + String.Format("{0:X}", header)); + } + + var versionRequiredToExtract = (short) inputBuffer.ReadLeShort(); + + flags = inputBuffer.ReadLeShort(); + method = inputBuffer.ReadLeShort(); + var dostime = (uint) inputBuffer.ReadLeInt(); + var crc2 = inputBuffer.ReadLeInt(); + csize = inputBuffer.ReadLeInt(); + size = inputBuffer.ReadLeInt(); + var nameLen = inputBuffer.ReadLeShort(); + var extraLen = inputBuffer.ReadLeShort(); + + var isCrypted = (flags & 1) == 1; + + var buffer = new byte[nameLen]; + inputBuffer.ReadRawBuffer(buffer); + + var name = ZipConstants.ConvertToStringExt(flags, buffer); + + entry = new ZipEntry(name, versionRequiredToExtract); + entry.Flags = flags; + + entry.CompressionMethod = (CompressionMethod) method; + + if ((flags & 8) == 0) + { + entry.Crc = crc2 & 0xFFFFFFFFL; + entry.Size = size & 0xFFFFFFFFL; + entry.CompressedSize = csize & 0xFFFFFFFFL; + + entry.CryptoCheckValue = (byte) ((crc2 >> 24) & 0xff); + } + else + { + // This allows for GNU, WinZip and possibly other archives, the PKZIP spec + // says these values are zero under these circumstances. + if (crc2 != 0) + { + entry.Crc = crc2 & 0xFFFFFFFFL; + } + + if (size != 0) + { + entry.Size = size & 0xFFFFFFFFL; + } + + if (csize != 0) + { + entry.CompressedSize = csize & 0xFFFFFFFFL; + } + + entry.CryptoCheckValue = (byte) ((dostime >> 8) & 0xff); + } + + entry.DosTime = dostime; + + // If local header requires Zip64 is true then the extended header should contain + // both values. + + // Handle extra data if present. This can set/alter some fields of the entry. + if (extraLen > 0) + { + var extra = new byte[extraLen]; + inputBuffer.ReadRawBuffer(extra); + entry.ExtraData = extra; + } + + entry.ProcessExtraData(true); + if (entry.CompressedSize >= 0) + { + csize = entry.CompressedSize; + } + + if (entry.Size >= 0) + { + size = entry.Size; + } + + if (method == (int) CompressionMethod.Stored && + (!isCrypted && csize != size || (isCrypted && csize - ZipConstants.CryptoHeaderSize != size))) + { + throw new ZipException("Stored, but compressed != uncompressed"); + } + + // Determine how to handle reading of data if this is attempted. + if (entry.IsCompressionMethodSupported()) + { + internalReader = InitialRead; + } + else + { + internalReader = ReadingNotSupported; + } + + return entry; + } + + /// + /// Read data descriptor at the end of compressed data. + /// + private void ReadDataDescriptor() + { + if (inputBuffer.ReadLeInt() != ZipConstants.DataDescriptorSignature) + { + throw new ZipException("Data descriptor signature not found"); + } + + entry.Crc = inputBuffer.ReadLeInt() & 0xFFFFFFFFL; + + if (entry.LocalHeaderRequiresZip64) + { + csize = inputBuffer.ReadLeLong(); + size = inputBuffer.ReadLeLong(); + } + else + { + csize = inputBuffer.ReadLeInt(); + size = inputBuffer.ReadLeInt(); + } + entry.CompressedSize = csize; + entry.Size = size; + } + + /// + /// Complete cleanup as the final part of closing. + /// + /// True if the crc value should be tested + private void CompleteCloseEntry(bool testCrc) + { + StopDecrypting(); + + if ((flags & 8) != 0) + { + ReadDataDescriptor(); + } + + size = 0; + + if (testCrc && + ((crc.Value & 0xFFFFFFFFL) != entry.Crc) && (entry.Crc != -1)) + { + throw new ZipException("CRC mismatch"); + } + + crc.Reset(); + + if (method == (int) CompressionMethod.Deflated) + { + inf.Reset(); + } + entry = null; + } + + /// + /// Closes the current zip entry and moves to the next one. + /// + /// + /// The stream is closed + /// + /// + /// The Zip stream ends early + /// + public void CloseEntry() + { + if (crc == null) + { + throw new InvalidOperationException("Closed"); + } + + if (entry == null) + { + return; + } + + if (method == (int) CompressionMethod.Deflated) + { + if ((flags & 8) != 0) + { + // We don't know how much we must skip, read until end. + var tmp = new byte[2048]; + + // Read will close this entry + while (Read(tmp, 0, tmp.Length) > 0) + { + } + return; + } + + csize -= inf.TotalIn; + inputBuffer.Available += inf.RemainingInput; + } + + if ((inputBuffer.Available > csize) && (csize >= 0)) + { + inputBuffer.Available = (int) (inputBuffer.Available - csize); + } + else + { + csize -= inputBuffer.Available; + inputBuffer.Available = 0; + while (csize != 0) + { + var skipped = (int) base.Skip(csize & 0xFFFFFFFFL); + + if (skipped <= 0) + { + throw new ZipException("Zip archive ends early."); + } + + csize -= skipped; + } + } + + CompleteCloseEntry(false); + } + + /// + /// Reads a byte from the current zip entry. + /// + /// + /// The byte or -1 if end of stream is reached. + /// + public override int ReadByte() + { + var b = new byte[1]; + if (Read(b, 0, 1) <= 0) + { + return -1; + } + return b[0] & 0xff; + } + + /// + /// Handle attempts to read by throwing an . + /// + /// The destination array to store data in. + /// The offset at which data read should be stored. + /// The maximum number of bytes to read. + /// Returns the number of bytes actually read. + private int ReadingNotAvailable(byte[] destination, int offset, int count) + { + throw new InvalidOperationException("Unable to read from this stream"); + } + + /// + /// Handle attempts to read from this entry by throwing an exception + /// + private int ReadingNotSupported(byte[] destination, int offset, int count) + { + throw new ZipException("The compression method for this entry is not supported"); + } + + /// + /// Perform the initial read on an entry which may include + /// reading encryption headers and setting up inflation. + /// + /// The destination to fill with data read. + /// The offset to start reading at. + /// The maximum number of bytes to read. + /// The actual number of bytes read. + private int InitialRead(byte[] destination, int offset, int count) + { + if (!CanDecompressEntry) + { + throw new ZipException("Library cannot extract this entry. Version required is (" + entry.Version + ")"); + } + + // Handle encryption if required. + if (entry.IsCrypted) + { + if (password == null) + { + throw new ZipException("No password set."); + } + + // Generate and set crypto transform... + var managed = new PkzipClassicManaged(); + var key = PkzipClassic.GenerateKeys(ZipConstants.ConvertToArray(password)); + + inputBuffer.CryptoTransform = managed.CreateDecryptor(key, null); + + var cryptbuffer = new byte[ZipConstants.CryptoHeaderSize]; + inputBuffer.ReadClearTextBuffer(cryptbuffer, 0, ZipConstants.CryptoHeaderSize); + + if (cryptbuffer[ZipConstants.CryptoHeaderSize - 1] != entry.CryptoCheckValue) + { + throw new ZipException("Invalid password"); + } + + if (csize >= ZipConstants.CryptoHeaderSize) + { + csize -= ZipConstants.CryptoHeaderSize; + } + else if ((entry.Flags & (int) GeneralBitFlags.Descriptor) == 0) + { + throw new ZipException(string.Format("Entry compressed size {0} too small for encryption", csize)); + } + } + else + { + inputBuffer.CryptoTransform = null; + } + + if ((method == (int) CompressionMethod.Deflated) && (inputBuffer.Available > 0)) + { + inputBuffer.SetInflaterInput(inf); + } + + internalReader = BodyRead; + return BodyRead(destination, offset, count); + } + + /// + /// Read a block of bytes from the stream. + /// + /// The destination for the bytes. + /// The index to start storing data. + /// The number of bytes to attempt to read. + /// Returns the number of bytes read. + /// Zero bytes read means end of stream. + public override int Read(byte[] buffer, int offset, int count) + { + if (buffer == null) + { + throw new ArgumentNullException("buffer"); + } + + if (offset < 0) + { + throw new ArgumentOutOfRangeException("offset", "Cannot be negative"); + } + + if (count < 0) + { + throw new ArgumentOutOfRangeException("count", "Cannot be negative"); + } + + if ((buffer.Length - offset) < count) + { + throw new ArgumentException("Invalid offset/count combination"); + } + + return internalReader(buffer, offset, count); + } + + /// + /// Reads a block of bytes from the current zip entry. + /// + /// + /// The number of bytes read (this may be less than the length requested, even before the end of stream), or 0 on end of stream. + /// + /// + /// An i/o error occured. + /// + /// + /// The deflated stream is corrupted. + /// + /// + /// The stream is not open. + /// + private int BodyRead(byte[] buffer, int offset, int count) + { + if (crc == null) + { + throw new InvalidOperationException("Closed"); + } + + if ((entry == null) || (count <= 0)) + { + return 0; + } + + if (offset + count > buffer.Length) + { + throw new ArgumentException("Offset + count exceeds buffer size"); + } + + var finished = false; + + switch (method) + { + case (int) CompressionMethod.Deflated: + count = base.Read(buffer, offset, count); + if (count <= 0) + { + if (!inf.IsFinished) + { + throw new ZipException("Inflater not finished!"); + } + inputBuffer.Available = inf.RemainingInput; + + if ((flags & 8) == 0 && (inf.TotalIn != csize || inf.TotalOut != size)) + { + throw new ZipException("Size mismatch: " + csize + ";" + size + " <-> " + inf.TotalIn + ";" + + inf.TotalOut); + } + inf.Reset(); + finished = true; + } + break; + + case (int) CompressionMethod.Stored: + if ((count > csize) && (csize >= 0)) + { + count = (int) csize; + } + + if (count > 0) + { + count = inputBuffer.ReadClearTextBuffer(buffer, offset, count); + if (count > 0) + { + csize -= count; + size -= count; + } + } + + if (csize == 0) + { + finished = true; + } + else + { + if (count < 0) + { + throw new ZipException("EOF in stored block"); + } + } + break; + } + + if (count > 0) + { + crc.Update(buffer, offset, count); + } + + if (finished) + { + CompleteCloseEntry(true); + } + + return count; + } + + /// + /// Closes the zip input stream + /// + public override void Close() + { + internalReader = ReadingNotAvailable; + crc = null; + entry = null; + + base.Close(); + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipNameTransform.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipNameTransform.cs new file mode 100644 index 0000000..25aed19 --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipNameTransform.cs @@ -0,0 +1,250 @@ +// ZipNameTransform.cs +// +// Copyright 2005 John Reilly +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + + +using System; +using System.IO; +using System.Text; +using ICSharpCode.SharpZipLib.Silverlight.Core; +using ICSharpCode.SharpZipLib.Silverlight.Zip; + +namespace ICSharpCode.SharpZipLib.Zip +{ + /// + /// ZipNameTransform transforms names as per the Zip file naming convention. + /// + /// The use of absolute names is supported although its use is not valid + /// according to Zip naming conventions, and should not be used if maximum compatability is desired. + public class ZipNameTransform : INameTransform + { + #region Constructors + /// + /// Initialize a new instance of + /// + public ZipNameTransform() + { + } + + /// + /// Initialize a new instance of + /// + /// The string to trim from front of paths if found. + public ZipNameTransform(string trimPrefix) + { + TrimPrefix = trimPrefix; + } + #endregion + + /// + /// Static constructor. + /// + static ZipNameTransform() + { + var invalidPathChars = Path.GetInvalidPathChars(); + var howMany = invalidPathChars.Length + 2; + + InvalidEntryCharsRelaxed = new char[howMany]; + Array.Copy(invalidPathChars, 0, InvalidEntryCharsRelaxed, 0, invalidPathChars.Length); + InvalidEntryCharsRelaxed[howMany - 1] = '*'; + InvalidEntryCharsRelaxed[howMany - 2] = '?'; + + howMany = invalidPathChars.Length + 4; + InvalidEntryChars = new char[howMany]; + Array.Copy(invalidPathChars, 0, InvalidEntryChars, 0, invalidPathChars.Length); + InvalidEntryChars[howMany - 1] = ':'; + InvalidEntryChars[howMany - 2] = '\\'; + InvalidEntryChars[howMany - 3] = '*'; + InvalidEntryChars[howMany - 4] = '?'; + + } + + /// + /// Transform a directory name according to the Zip file naming conventions. + /// + /// The directory name to transform. + /// The transformed name. + public string TransformDirectory(string name) + { + name = TransformFile(name); + if (name.Length > 0) { + if ( !name.EndsWith("/") ) { + name += "/"; + } + } + else { + throw new ZipException("Cannot have an empty directory name"); + } + return name; + } + + /// + /// Transform a windows file name according to the Zip file naming conventions. + /// + /// The file name to transform. + /// The transformed name. + public string TransformFile(string name) + { + if (name != null) { + string lowerName = name.ToLower(); + if ( (trimPrefix_ != null) && (lowerName.IndexOf(trimPrefix_) == 0) ) { + name = name.Substring(trimPrefix_.Length); + } + + // The following can throw exceptions when the name contains invalid characters + if (Path.IsPathRooted(name) == true) { + // NOTE: + // for UNC names... \\machine\share\zoom\beet.txt gives \zoom\beet.txt + name = name.Substring(Path.GetPathRoot(name).Length); + } + + name = name.Replace(@"\", "/"); + + while ( (name.Length > 0) && (name[0] == '/')) { + name = name.Remove(0, 1); + } + + name = MakeValidName(name, '_'); + } + else { + name = string.Empty; + } + return name; + } + + /// + /// Get/set the path prefix to be trimmed from paths if present. + /// + /// The prefix is trimmed before any conversion from + /// a windows path is done. + public string TrimPrefix + { + get { return trimPrefix_; } + set { + trimPrefix_ = value; + if (trimPrefix_ != null) { + trimPrefix_ = trimPrefix_.ToLower(); + } + } + } + + /// + /// Force a name to be valid by replacing invalid characters with a fixed value + /// + /// The name to force valid + /// The replacement character to use. + /// Returns a valid name + static string MakeValidName(string name, char replacement) + { + int index = name.IndexOfAny(InvalidEntryChars); + if (index > 0) { + StringBuilder builder = new StringBuilder(name); + + while (index >= 0 ) { + builder[index] = replacement; + + if (index >= name.Length) { + index = -1; + } + else { + index = name.IndexOfAny(InvalidEntryChars, index + 1); + } + } + name = builder.ToString(); + } + return name; + } + + /// + /// Test a name to see if it is a valid name for a zip entry. + /// + /// The name to test. + /// If true checking is relaxed about windows file names and absolute paths. + /// Returns true if the name is a valid zip name; false otherwise. + /// Zip path names are actually in Unix format, and should only contain relative paths. + /// This means that any path stored should not contain a drive or + /// device letter, or a leading slash. All slashes should forward slashes '/'. + /// An empty name is valid for a file where the input comes from standard input. + /// A null name is not considered valid. + /// + public static bool IsValidName(string name, bool relaxed) + { + bool result = (name != null); + + if ( result ) { + if ( relaxed ) { + result = name.IndexOfAny(InvalidEntryCharsRelaxed) < 0; + } + else { + result = + (name.IndexOfAny(InvalidEntryChars) < 0) && + (name.IndexOf('/') != 0); + } + } + + return result; + } + + /// + /// Test a name to see if it is a valid name for a zip entry. + /// + /// The name to test. + /// Returns true if the name is a valid zip name; false otherwise. + /// Zip path names are actually in unix format, + /// and should only contain relative paths if a path is present. + /// This means that the path stored should not contain a drive or + /// device letter, or a leading slash. All slashes should forward slashes '/'. + /// An empty name is valid where the input comes from standard input. + /// A null name is not considered valid. + /// + public static bool IsValidName(string name) + { + bool result = + (name != null) && + (name.IndexOfAny(InvalidEntryChars) < 0) && + (name.IndexOf('/') != 0) + ; + return result; + } + + #region Instance Fields + string trimPrefix_; + #endregion + + #region Class Fields + static readonly char[] InvalidEntryChars; + static readonly char[] InvalidEntryCharsRelaxed; + #endregion + } +} diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipOutputStream.cs b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipOutputStream.cs new file mode 100644 index 0000000..936010f --- /dev/null +++ b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/Zip/ZipOutputStream.cs @@ -0,0 +1,917 @@ +// ZipOutputStream.cs +// +// Copyright (C) 2001 Mike Krueger +// Copyright (C) 2004 John Reilly +// +// This file was translated from java, it was part of the GNU Classpath +// Copyright (C) 2001 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// Linking this library statically or dynamically with other modules is +// making a combined work based on this library. Thus, the terms and +// conditions of the GNU General Public License cover the whole +// combination. +// +// As a special exception, the copyright holders of this library give you +// permission to link this library with independent modules to produce an +// executable, regardless of the license terms of these independent +// modules, and to copy and distribute the resulting executable under +// terms of your choice, provided that you also meet, for each linked +// independent module, the terms and conditions of the license of that +// module. An independent module is a module which is not derived from +// or based on this library. If you modify this library, you may extend +// this exception to your version of the library, but you are not +// obligated to do so. If you do not wish to do so, delete this +// exception statement from your version. + +using System; +using System.Collections.Generic; +using System.IO; +using ICSharpCode.SharpZipLib.Silverlight.Checksums; +using ICSharpCode.SharpZipLib.Silverlight.Zip.Compression; +using ICSharpCode.SharpZipLib.Silverlight.Zip.Compression.Streams; +using ICSharpCode.SharpZipLib.Zip; + +namespace ICSharpCode.SharpZipLib.Silverlight.Zip +{ + /// + /// This is a DeflaterOutputStream that writes the files into a zip + /// archive one after another. It has a special method to start a new + /// zip entry. The zip entries contains information about the file name + /// size, compressed size, CRC, etc. + /// + /// It includes support for Stored and Deflated entries. + /// This class is not thread safe. + ///
    + ///
    Author of the original java version : Jochen Hoenicke + ///
    + /// This sample shows how to create a zip file + /// + /// using System; + /// using System.IO; + /// + /// using ICSharpCode.SharpZipLib.Core; + /// using ICSharpCode.SharpZipLib.Zip; + /// + /// class MainClass + /// { + /// public static void Main(string[] args) + /// { + /// string[] filenames = Directory.GetFiles(args[0]); + /// byte[] buffer = new byte[4096]; + /// + /// using ( ZipOutputStream s = new ZipOutputStream(File.Create(args[1])) ) { + /// + /// s.SetLevel(9); // 0 - store only to 9 - means best compression + /// + /// foreach (string file in filenames) { + /// ZipEntry entry = new ZipEntry(file); + /// s.PutNextEntry(entry); + /// + /// using (FileStream fs = File.OpenRead(file)) { + /// StreamUtils.Copy(fs, s, buffer); + /// } + /// } + /// } + /// } + /// } + /// + /// + public class ZipOutputStream : DeflaterOutputStream + { + #region Constructors + + /// + /// Creates a new Zip output stream, writing a zip archive. + /// + /// + /// The output stream to which the archive contents are written. + /// + public ZipOutputStream(Stream baseOutputStream) + : base(baseOutputStream, new Deflater(Deflater.DEFAULT_COMPRESSION, true)) + { + } + + #endregion + + /// + /// Gets a flag value of true if the central header has been added for this archive; false if it has not been added. + /// + /// No further entries can be added once this has been done. + public bool IsFinished + { + get { return entries == null; } + } + + /// + /// Get / set a value indicating how Zip64 Extension usage is determined when adding entries. + /// + /// Older archivers may not understand Zip64 extensions. + /// If backwards compatability is an issue be careful when adding entries to an archive. + /// Setting this property to off is workable but less desirable as in those circumstances adding a file + /// larger then 4GB will fail. + public UseZip64 UseZip64 + { + get { return useZip64_; } + set { useZip64_ = value; } + } + + /// + /// Set the zip file comment. + /// + /// + /// The comment text for the entire archive. + /// + /// + /// The converted comment is longer than 0xffff bytes. + /// + public void SetComment(string comment) + { + // TODO: Its not yet clear how to handle unicode comments here. + var commentBytes = ZipConstants.ConvertToArray(comment); + if (commentBytes.Length > 0xffff) + { + throw new ArgumentOutOfRangeException("comment"); + } + zipComment = commentBytes; + } + + /// + /// Sets the compression level. The new level will be activated + /// immediately. + /// + /// The new compression level (1 to 9). + /// + /// Level specified is not supported. + /// + /// + public void SetLevel(int level) + { + deflater_.SetLevel(level); + defaultCompressionLevel = level; + } + + /// + /// Get the current deflater compression level + /// + /// The current compression level + public int GetLevel() + { + return deflater_.GetLevel(); + } + + /// + /// Write an unsigned short in little endian byte order. + /// + private void WriteLeShort(int value) + { + unchecked + { + baseOutputStream_.WriteByte((byte) (value & 0xff)); + baseOutputStream_.WriteByte((byte) ((value >> 8) & 0xff)); + } + } + + /// + /// Write an int in little endian byte order. + /// + private void WriteLeInt(int value) + { + unchecked + { + WriteLeShort(value); + WriteLeShort(value >> 16); + } + } + + /// + /// Write an int in little endian byte order. + /// + private void WriteLeLong(long value) + { + unchecked + { + WriteLeInt((int) value); + WriteLeInt((int) (value >> 32)); + } + } + + /// + /// Starts a new Zip entry. It automatically closes the previous + /// entry if present. + /// All entry elements bar name are optional, but must be correct if present. + /// If the compression method is stored and the output is not patchable + /// the compression for that entry is automatically changed to deflate level 0 + /// + /// + /// the entry. + /// + /// + /// if entry passed is null. + /// + /// + /// if an I/O error occured. + /// + /// + /// if stream was finished + /// + /// + /// Too many entries in the Zip file
    + /// Entry name is too long
    + /// Finish has already been called
    + ///
    + public void PutNextEntry(ZipEntry entry) + { + if (entry == null) + { + throw new ArgumentNullException("entry"); + } + + if (entries == null) + { + throw new InvalidOperationException("ZipOutputStream was finished"); + } + + if (curEntry != null) + { + CloseEntry(); + } + + if (entries.Count == int.MaxValue) + { + throw new ZipException("Too many entries for Zip file"); + } + + var method = entry.CompressionMethod; + var compressionLevel = defaultCompressionLevel; + + // Clear flags that the library manages internally + entry.Flags &= (int) GeneralBitFlags.UnicodeText; + patchEntryHeader = false; + var headerInfoAvailable = true; + + if (method == CompressionMethod.Stored) + { + // Cant store values in a data descriptor as you cant extract stored files + // if the length isnt known. + entry.Flags &= ~8; + if (entry.CompressedSize >= 0) + { + if (entry.Size < 0) + { + entry.Size = entry.CompressedSize; + } + else if (entry.Size != entry.CompressedSize) + { + throw new ZipException("Method STORED, but compressed size != size"); + } + } + else + { + if (entry.Size >= 0) + { + entry.CompressedSize = entry.Size; + } + } + + if (entry.Size < 0 || entry.Crc < 0) + { + if (CanPatchEntries) + { + headerInfoAvailable = false; + } + else + { + // Can't patch entries so storing is not possible. + method = CompressionMethod.Deflated; + compressionLevel = 0; + } + } + } + + if (method == CompressionMethod.Deflated) + { + if (entry.Size == 0) + { + // No need to compress - no data. + entry.CompressedSize = entry.Size; + entry.Crc = 0; + method = CompressionMethod.Stored; + } + else if ((entry.CompressedSize < 0) || (entry.Size < 0) || (entry.Crc < 0)) + { + headerInfoAvailable = false; + } + } + + if (headerInfoAvailable == false) + { + if (CanPatchEntries == false) + { + // Only way to record size and compressed size is to append a data descriptor + // after compressed data. + entry.Flags |= 8; + } + else + { + patchEntryHeader = true; + } + } + + if (Password != null) + { + entry.IsCrypted = true; + if (entry.Crc < 0) + { + // Need to append a data descriptor as the crc isnt available for use + // with encryption, the date is used instead. Setting the flag + // indicates this to the decompressor. + entry.Flags |= 8; + } + } + + entry.Offset = _offset; + entry.CompressionMethod = method; + + curMethod = method; + sizePatchPos = -1; + + if ((useZip64_ == UseZip64.On) || ((entry.Size < 0) && (useZip64_ == UseZip64.Dynamic))) + { + entry.ForceZip64(); + } + + // Write the local file header + WriteLeInt(ZipConstants.LocalHeaderSignature); + + WriteLeShort(entry.Version); + WriteLeShort(entry.Flags); + WriteLeShort((byte) method); + WriteLeInt((int) entry.DosTime); + + // TODO: Refactor header writing. Its done in several places. + if (headerInfoAvailable) + { + WriteLeInt((int) entry.Crc); + if (entry.LocalHeaderRequiresZip64) + { + WriteLeInt(-1); + WriteLeInt(-1); + } + else + { + WriteLeInt(entry.IsCrypted + ? (int) entry.CompressedSize + ZipConstants.CryptoHeaderSize + : (int) entry.CompressedSize); + WriteLeInt((int) entry.Size); + } + } + else + { + if (patchEntryHeader) + { + crcPatchPos = baseOutputStream_.Position; + } + WriteLeInt(0); // Crc + + if (patchEntryHeader) + { + sizePatchPos = baseOutputStream_.Position; + } + + // For local header both sizes appear in Zip64 Extended Information + if (entry.LocalHeaderRequiresZip64 && patchEntryHeader) + { + WriteLeInt(-1); + WriteLeInt(-1); + } + else + { + WriteLeInt(0); // Compressed size + WriteLeInt(0); // Uncompressed size + } + } + + var name = ZipConstants.ConvertToArray(entry.Flags, entry.Name); + + if (name.Length > 0xFFFF) + { + throw new ZipException("Entry name too long."); + } + + var ed = new ZipExtraData(entry.ExtraData); + + if (entry.LocalHeaderRequiresZip64 && (headerInfoAvailable || patchEntryHeader)) + { + ed.StartNewEntry(); + if (headerInfoAvailable) + { + ed.AddLeLong(entry.Size); + ed.AddLeLong(entry.CompressedSize); + } + else + { + ed.AddLeLong(-1); + ed.AddLeLong(-1); + } + ed.AddNewEntry(1); + + if (!ed.Find(1)) + { + throw new ZipException("Internal error cant find extra data"); + } + + if (patchEntryHeader) + { + sizePatchPos = ed.CurrentReadIndex; + } + } + else + { + ed.Delete(1); + } + + var extra = ed.GetEntryData(); + + WriteLeShort(name.Length); + WriteLeShort(extra.Length); + + if (name.Length > 0) + { + baseOutputStream_.Write(name, 0, name.Length); + } + + if (entry.LocalHeaderRequiresZip64 && patchEntryHeader) + { + sizePatchPos += baseOutputStream_.Position; + } + + if (extra.Length > 0) + { + baseOutputStream_.Write(extra, 0, extra.Length); + } + + _offset += ZipConstants.LocalHeaderBaseSize + name.Length + extra.Length; + + // Activate the entry. + curEntry = entry; + crc.Reset(); + if (method == CompressionMethod.Deflated) + { + deflater_.Reset(); + deflater_.SetLevel(compressionLevel); + } + size = 0; + + if (entry.IsCrypted) + { + if (entry.Crc < 0) + { + // so testing Zip will says its ok + WriteEncryptionHeader(entry.DosTime << 16); + } + else + { + WriteEncryptionHeader(entry.Crc); + } + } + } + + /// + /// Closes the current entry, updating header and footer information as required + /// + /// + /// An I/O error occurs. + /// + /// + /// No entry is active. + /// + public void CloseEntry() + { + if (curEntry == null) + { + throw new InvalidOperationException("No open entry"); + } + + // First finish the deflater, if appropriate + if (curMethod == CompressionMethod.Deflated) + { + base.Finish(); + } + + var csize = (curMethod == CompressionMethod.Deflated) ? deflater_.TotalOut : size; + + if (curEntry.Size < 0) + { + curEntry.Size = size; + } + else if (curEntry.Size != size) + { + throw new ZipException("size was " + size + ", but I expected " + curEntry.Size); + } + + if (curEntry.CompressedSize < 0) + { + curEntry.CompressedSize = csize; + } + else if (curEntry.CompressedSize != csize) + { + throw new ZipException("compressed size was " + csize + ", but I expected " + curEntry.CompressedSize); + } + + if (curEntry.Crc < 0) + { + curEntry.Crc = crc.Value; + } + else if (curEntry.Crc != crc.Value) + { + throw new ZipException("crc was " + crc.Value + ", but I expected " + curEntry.Crc); + } + + _offset += csize; + + if (curEntry.IsCrypted) + { + curEntry.CompressedSize += ZipConstants.CryptoHeaderSize; + } + + // Patch the header if possible + if (patchEntryHeader) + { + patchEntryHeader = false; + + var curPos = baseOutputStream_.Position; + baseOutputStream_.Seek(crcPatchPos, SeekOrigin.Begin); + WriteLeInt((int) curEntry.Crc); + + if (curEntry.LocalHeaderRequiresZip64) + { + if (sizePatchPos == -1) + { + throw new ZipException("Entry requires zip64 but this has been turned off"); + } + + baseOutputStream_.Seek(sizePatchPos, SeekOrigin.Begin); + WriteLeLong(curEntry.Size); + WriteLeLong(curEntry.CompressedSize); + } + else + { + WriteLeInt((int) curEntry.CompressedSize); + WriteLeInt((int) curEntry.Size); + } + baseOutputStream_.Seek(curPos, SeekOrigin.Begin); + } + + // Add data descriptor if flagged as required + if ((curEntry.Flags & 8) != 0) + { + WriteLeInt(ZipConstants.DataDescriptorSignature); + WriteLeInt(unchecked((int) curEntry.Crc)); + + if (curEntry.LocalHeaderRequiresZip64) + { + WriteLeLong(curEntry.CompressedSize); + WriteLeLong(curEntry.Size); + _offset += ZipConstants.Zip64DataDescriptorSize; + } + else + { + WriteLeInt((int) curEntry.CompressedSize); + WriteLeInt((int) curEntry.Size); + _offset += ZipConstants.DataDescriptorSize; + } + } + + entries.Add(curEntry); + curEntry = null; + } + + private void WriteEncryptionHeader(long crcValue) + { + _offset += ZipConstants.CryptoHeaderSize; + + InitializePassword(Password); + + var cryptBuffer = new byte[ZipConstants.CryptoHeaderSize]; + var rnd = new Random(); + rnd.NextBytes(cryptBuffer); + cryptBuffer[11] = (byte) (crcValue >> 24); + + EncryptBlock(cryptBuffer, 0, cryptBuffer.Length); + baseOutputStream_.Write(cryptBuffer, 0, cryptBuffer.Length); + } + + /// + /// Writes the given buffer to the current entry. + /// + /// The buffer containing data to write. + /// The offset of the first byte to write. + /// The number of bytes to write. + /// Archive size is invalid + /// No entry is active. + public override void Write(byte[] buffer, int offset, int count) + { + if (curEntry == null) + { + throw new InvalidOperationException("No open entry."); + } + + if (buffer == null) + { + throw new ArgumentNullException("buffer"); + } + + if (offset < 0) + { + throw new ArgumentOutOfRangeException("offset", "Cannot be negative"); + } + + if (count < 0) + { + throw new ArgumentOutOfRangeException("count", "Cannot be negative"); + } + + if ((buffer.Length - offset) < count) + { + throw new ArgumentException("Invalid offset/count combination"); + } + + crc.Update(buffer, offset, count); + size += count; + + switch (curMethod) + { + case CompressionMethod.Deflated: + base.Write(buffer, offset, count); + break; + + case CompressionMethod.Stored: + if (Password != null) + { + CopyAndEncrypt(buffer, offset, count); + } + else + { + baseOutputStream_.Write(buffer, offset, count); + } + break; + } + } + + private void CopyAndEncrypt(byte[] buffer, int offset, int count) + { + const int CopyBufferSize = 4096; + var localBuffer = new byte[CopyBufferSize]; + while (count > 0) + { + var bufferCount = (count < CopyBufferSize) ? count : CopyBufferSize; + + Array.Copy(buffer, offset, localBuffer, 0, bufferCount); + EncryptBlock(localBuffer, 0, bufferCount); + baseOutputStream_.Write(localBuffer, 0, bufferCount); + count -= bufferCount; + offset += bufferCount; + } + } + + /// + /// Finishes the stream. This will write the central directory at the + /// end of the zip file and flush the stream. + /// + /// + /// This is automatically called when the stream is closed. + /// + /// + /// An I/O error occurs. + /// + /// + /// Comment exceeds the maximum length
    + /// Entry name exceeds the maximum length + ///
    + public override void Finish() + { + if (entries == null) + { + return; + } + + if (curEntry != null) + { + CloseEntry(); + } + + long numEntries = entries.Count; + long sizeEntries = 0; + + foreach (var entry in entries) + { + WriteLeInt(ZipConstants.CentralHeaderSignature); + WriteLeShort(ZipConstants.VersionMadeBy); + WriteLeShort(entry.Version); + WriteLeShort(entry.Flags); + WriteLeShort((short) entry.CompressionMethod); + WriteLeInt((int) entry.DosTime); + WriteLeInt((int) entry.Crc); + + if (entry.IsZip64Forced() || + (entry.CompressedSize >= uint.MaxValue)) + { + WriteLeInt(-1); + } + else + { + WriteLeInt((int) entry.CompressedSize); + } + + if (entry.IsZip64Forced() || + (entry.Size >= uint.MaxValue)) + { + WriteLeInt(-1); + } + else + { + WriteLeInt((int) entry.Size); + } + + var name = ZipConstants.ConvertToArray(entry.Flags, entry.Name); + + if (name.Length > 0xffff) + { + throw new ZipException("Name too long."); + } + + var ed = new ZipExtraData(entry.ExtraData); + + if (entry.CentralHeaderRequiresZip64) + { + ed.StartNewEntry(); + if (entry.IsZip64Forced() || + (entry.Size >= 0xffffffff)) + { + ed.AddLeLong(entry.Size); + } + + if (entry.IsZip64Forced() || + (entry.CompressedSize >= 0xffffffff)) + { + ed.AddLeLong(entry.CompressedSize); + } + + if (entry.Offset >= 0xffffffff) + { + ed.AddLeLong(entry.Offset); + } + + ed.AddNewEntry(1); + } + else + { + ed.Delete(1); + } + + var extra = ed.GetEntryData(); + + var entryComment = + (entry.Comment != null) + ? + ZipConstants.ConvertToArray(entry.Flags, entry.Comment) + : + new byte[0]; + + if (entryComment.Length > 0xffff) + { + throw new ZipException("Comment too long."); + } + + WriteLeShort(name.Length); + WriteLeShort(extra.Length); + WriteLeShort(entryComment.Length); + WriteLeShort(0); // disk number + WriteLeShort(0); // internal file attributes + // external file attributes + + if (entry.ExternalFileAttributes != -1) + { + WriteLeInt(entry.ExternalFileAttributes); + } + else + { + if (entry.IsDirectory) + { + // mark entry as directory (from nikolam.AT.perfectinfo.com) + WriteLeInt(16); + } + else + { + WriteLeInt(0); + } + } + + if (entry.Offset >= uint.MaxValue) + { + WriteLeInt(-1); + } + else + { + WriteLeInt((int) entry.Offset); + } + + if (name.Length > 0) + { + baseOutputStream_.Write(name, 0, name.Length); + } + + if (extra.Length > 0) + { + baseOutputStream_.Write(extra, 0, extra.Length); + } + + if (entryComment.Length > 0) + { + baseOutputStream_.Write(entryComment, 0, entryComment.Length); + } + + sizeEntries += ZipConstants.CentralHeaderBaseSize + name.Length + extra.Length + entryComment.Length; + } + + using (var zhs = new ZipHelperStream(baseOutputStream_)) + { + zhs.WriteEndOfCentralDirectory(numEntries, sizeEntries, _offset, zipComment); + } + + entries = null; + } + + #region Instance Fields + + /// + /// Used to track the crc of data added to entries. + /// + private readonly Crc32 crc = new Crc32(); + + /// + /// Position to patch crc + /// + private long crcPatchPos = -1; + + /// + /// The current entry being added. + /// + private ZipEntry curEntry; + + private CompressionMethod curMethod = CompressionMethod.Deflated; + private int defaultCompressionLevel = Deflater.DEFAULT_COMPRESSION; + + /// + /// The entries for the archive. + /// + private List entries = new List(); + + /// + /// Offset to be recorded for each entry in the central header. + /// + private long _offset; + + /// + /// Flag indicating that header patching is required for the current entry. + /// + private bool patchEntryHeader; + + /// + /// Used to track the size of data for an entry during writing. + /// + private long size; + + /// + /// Position to patch size. + /// + private long sizePatchPos = -1; + + // Default is dynamic which is not backwards compatible and can cause problems + // with XP's built in compression which cant read Zip64 archives. + // However it does avoid the situation were a large file is added and cannot be completed correctly. + // NOTE: Setting the size for entries before they are added is the best solution! + private UseZip64 useZip64_ = UseZip64.Dynamic; + + /// + /// Comment for the entire archive recorded in central header. + /// + private byte[] zipComment = new byte[0]; + + #endregion + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/key.snk b/trunk/hammock/src/net35/ICSharpCode.SharpZipLib.Silverlight/key.snk new file mode 100644 index 0000000000000000000000000000000000000000..ed404cd2b98794be9654705e03f356546393f826 GIT binary patch literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50097rX2mggb`z#srv=C&u+tgpp^FW^M**Pm zRQO}lqnc-@hC)KUY6}|R0cKtk;e9lD=(rwB+as(MXDb+_+G52=`KS_Isyvj`Lv>t; zyv1GdtazzRJ@~Ikqx~TP`bG%Rj^JO-mWk-SOVW*S-BQylz(lnRD^aU;42ZrfNBOmJ z+wu|=RKI)(tf=kVs&r1#mU7ia^YtqD_N!R!)Mb<04J(7v0b9Z5@VQ zC~!{_9Az!Ik)85nzpjNic*BZ(iJSs=#CEi_EvxKd8YjX}1j8+N2zqaVEoTb{xxA?( zVt8G+Ou_+Iw{;ElEmyRR47jL`4u7RS+VW6jwp=Ns#vPw_+s*hGzc&Int6mW=r8E?B z)qgXtnZUe(Tz`ffc*>2e+Br!=fqNzeZTr56NZVVsD%VFGDVkAw@hwc5(-@Qd=aTqV z(nhX4LsE@8Bh?ITr5k1jJOPeVdipW-lxZ`6M6%|*SG?o?o}O<)9!yjl130Go;PJF4 iINMdx^S=SKvcAYJIsZ6c08B+-O^Q|BqJw=PJm;e#=pQ8j literal 0 HcmV?d00001 diff --git a/trunk/hammock/src/net40/Hammock.ClientProfile/Hammock.ClientProfile.csproj b/trunk/hammock/src/net40/Hammock.ClientProfile/Hammock.ClientProfile.csproj new file mode 100644 index 0000000..8fbf991 --- /dev/null +++ b/trunk/hammock/src/net40/Hammock.ClientProfile/Hammock.ClientProfile.csproj @@ -0,0 +1,420 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {487B7E3C-9689-47BC-8785-73CCD92A3749} + Library + Properties + Hammock.ClientProfile + Hammock.ClientProfile + v4.0 + 512 + Client + + + true + full + false + ..\..\..\bin\lib\4.0\ + TRACE;DEBUG;NET40,ClientProfiles + prompt + 4 + + + pdbonly + true + ..\..\..\bin\lib\net40-client\ + TRACE;NET40,ClientProfiles + prompt + 4 + + + true + + + key.snk + + + + + + + + + + + + + Attributes\INamedAttribute.cs + + + Attributes\IValidatingAttribute.cs + + + Attributes\Specialized\EntityAttribute.cs + + + Attributes\Specialized\HeaderAttribute.cs + + + Attributes\Specialized\ParameterAttribute.cs + + + Attributes\Specialized\UserAgentAttribute.cs + + + Attributes\Validation\BooleanToIntegerAttribute.cs + + + Attributes\Validation\DateTimeFormatAttribute.cs + + + Attributes\Validation\RequiredAttribute.cs + + + Attributes\Validation\SpecificationAttribute.cs + + + Attributes\Validation\ValidationAttribute.cs + + + Authentication\Basic\BasicAuthCredentials.cs + + + Authentication\IWebCredentials.cs + + + Authentication\OAuth\OAuthCredentials.cs + + + Authentication\OAuth\OAuthParameterHandling.cs + + + Authentication\OAuth\OAuthSignatureMethod.cs + + + Authentication\OAuth\OAuthToken.cs + + + Authentication\OAuth\OAuthTools.cs + + + Authentication\OAuth\OAuthType.cs + + + Authentication\OAuth\OAuthWebQuery.cs + + + Authentication\OAuth\OAuthWebQueryInfo.cs + + + Authentication\OAuth\OAuthWorkflow.cs + + + Caching\AspNetCache.cs + + + Caching\CacheFactory.cs + + + Caching\CacheMode.cs + + + Caching\CacheOptions.cs + + + Caching\ICache.cs + + + Caching\IDependencyCache.cs + + + Caching\SimpleCache.cs + + + Extensions\CollectionExtensions.cs + + + Extensions\FormatExtensions.cs + + + Extensions\OAuthExtensions.cs + + + Extensions\ObjectExtensions.cs + + + Extensions\ReflectionExtensions.cs + + + Extensions\SpecificationExtensions.cs + + + Extensions\StringExtensions.cs + + + Extensions\TimeExtensions.cs + + + Extensions\WebExtensions.cs + + + IRestClient.cs + + + Model\PropertyChangedBase.cs + + + RestBase.cs + + + RestCallback.cs + + + RestClient.cs + + + RestRequest.cs + + + RestResponse.cs + + + Retries\ConnectionClosed.cs + + + Retries\IRetryCondition.cs + + + Retries\IRetryCustomCondition.cs + + + Retries\NetworkError.cs + + + Retries\RetryCondition.cs + + + Retries\RetryCustomCondition.cs + + + Retries\RetryErrorCondition.cs + + + Retries\RetryPolicy.cs + + + Retries\RetryResultCondition.cs + + + Retries\Timeout.cs + + + Serialization\DefaultJsonSerializer.cs + + + Serialization\HammockXmlSerializer.cs + + + Serialization\IDeserializer.cs + + + Serialization\ISerializer.cs + + + Serialization\JsonParser.cs + + + Serialization\Utf8Serializer.cs + + + Specifications\AndSpecification.cs + + + Specifications\CompositeSpecificationBase.cs + + + Specifications\HammockSpecification.cs + + + Specifications\ISpecification.cs + + + Specifications\NotSpecification.cs + + + Specifications\OrSpecification.cs + + + Streaming\StreamOptions.cs + + + Tasks\IRateLimitingRule.cs + + + Tasks\IRateLimitStatus.cs + + + Tasks\ITaskOptions.cs + + + Tasks\ITaskState.cs + + + Tasks\ITimedTask.cs + + + Tasks\RateLimitingRule.cs + + + Tasks\RateLimitType.cs + + + Tasks\TaskOptions.cs + + + Tasks\TaskState.cs + + + Tasks\TimedTask.cs + + + Validation\ValidationException.cs + + + Validation\ValidEmailSpecification.cs + + + Web\BasicAuthWebQuery.cs + + + Web\GetOrDelete.cs + + + Web\HttpCookieParameter.cs + + + Web\HttpPostParameter.cs + + + Web\HttpPostParameterType.cs + + + Web\IWebQueryInfo.cs + + + Web\Mocks\IMockable.cs + + + Web\Mocks\IWebResponse.cs + + + Web\Mocks\MockHttpWebRequest.cs + + + Web\Mocks\MockHttpWebResponse.cs + + + Web\Mocks\MockWebRequestFactory.cs + + + Web\Pair.cs + + + Web\PostOrPut.cs + + + Web\Triplet.cs + + + Web\WebCallback.cs + + + Web\WebEntity.cs + + + Web\WebHeader.cs + + + Web\WebHeaderCollection.cs + + + Web\WebMethod.cs + + + Web\WebPair.cs + + + Web\WebPairCollection.cs + + + Web\WebParameter.cs + + + Web\WebParameterCollection.cs + + + Web\WebQuery.Async.cs + + + Web\WebQuery.cs + + + Web\WebQueryAsyncResult.cs + + + Web\WebQueryRequestEventArgs.cs + + + Web\WebQueryResponseEventArgs.cs + + + Web\WebQueryResult.cs + + + + + + + + Attributes\Specialized\_Specialized.cd + + + Attributes\Validation\_Validation.cd + + + Authentication\OAuth\_OAuth.cd + + + Authentication\_Authentication.cd + + + Caching\_Caching.cd + + + Tasks\_Tasks.cd + + + Web\Mocks\_Mocks.cd + + + Web\_Web.cd + + + _Hammock.cd + + + + + + + \ No newline at end of file diff --git a/trunk/hammock/src/net40/Hammock.ClientProfile/Mono/HttpUtility.cs b/trunk/hammock/src/net40/Hammock.ClientProfile/Mono/HttpUtility.cs new file mode 100644 index 0000000..bd6f030 --- /dev/null +++ b/trunk/hammock/src/net40/Hammock.ClientProfile/Mono/HttpUtility.cs @@ -0,0 +1,1300 @@ +// +// System.Web.HttpUtility +// +// Authors: +// Patrik Torstensson (Patrik.Torstensson@labs2.com) +// Wictor Wilén (decode/encode functions) (wictor@ibizkit.se) +// Tim Coleman (tim@timcoleman.com) +// Gonzalo Paniagua Javier (gonzalo@ximian.com) +// +// Copyright (C) 2005 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + + +using System.Collections; +using System.Collections.Specialized; +using System.Globalization; +using System.IO; +using System.Text; + +namespace System.Compat.Web +{ + public sealed class HttpUtility + { + #region Fields + + private static Hashtable entities; + private static readonly object lock_ = new object(); + + #endregion // Fields + + private static Hashtable Entities + { + get + { + lock (lock_) + { + if (entities == null) + { + InitEntities(); + } + + return entities; + } + } + } + + #region Constructors + + private static void InitEntities() + { + // Build the hash table of HTML entity references. This list comes + // from the HTML 4.01 W3C recommendation. + entities = new Hashtable + { + {"nbsp", '\u00A0'}, + {"iexcl", '\u00A1'}, + {"cent", '\u00A2'}, + {"pound", '\u00A3'}, + {"curren", '\u00A4'}, + {"yen", '\u00A5'}, + {"brvbar", '\u00A6'}, + {"sect", '\u00A7'}, + {"uml", '\u00A8'}, + {"copy", '\u00A9'}, + {"ordf", '\u00AA'}, + {"laquo", '\u00AB'}, + {"not", '\u00AC'}, + {"shy", '\u00AD'}, + {"reg", '\u00AE'}, + {"macr", '\u00AF'}, + {"deg", '\u00B0'}, + {"plusmn", '\u00B1'}, + {"sup2", '\u00B2'}, + {"sup3", '\u00B3'}, + {"acute", '\u00B4'}, + {"micro", '\u00B5'}, + {"para", '\u00B6'}, + {"middot", '\u00B7'}, + {"cedil", '\u00B8'}, + {"sup1", '\u00B9'}, + {"ordm", '\u00BA'}, + {"raquo", '\u00BB'}, + {"frac14", '\u00BC'}, + {"frac12", '\u00BD'}, + {"frac34", '\u00BE'}, + {"iquest", '\u00BF'}, + {"Agrave", '\u00C0'}, + {"Aacute", '\u00C1'}, + {"Acirc", '\u00C2'}, + {"Atilde", '\u00C3'}, + {"Auml", '\u00C4'}, + {"Aring", '\u00C5'}, + {"AElig", '\u00C6'}, + {"Ccedil", '\u00C7'}, + {"Egrave", '\u00C8'}, + {"Eacute", '\u00C9'}, + {"Ecirc", '\u00CA'}, + {"Euml", '\u00CB'}, + {"Igrave", '\u00CC'}, + {"Iacute", '\u00CD'}, + {"Icirc", '\u00CE'}, + {"Iuml", '\u00CF'}, + {"ETH", '\u00D0'}, + {"Ntilde", '\u00D1'}, + {"Ograve", '\u00D2'}, + {"Oacute", '\u00D3'}, + {"Ocirc", '\u00D4'}, + {"Otilde", '\u00D5'}, + {"Ouml", '\u00D6'}, + {"times", '\u00D7'}, + {"Oslash", '\u00D8'}, + {"Ugrave", '\u00D9'}, + {"Uacute", '\u00DA'}, + {"Ucirc", '\u00DB'}, + {"Uuml", '\u00DC'}, + {"Yacute", '\u00DD'}, + {"THORN", '\u00DE'}, + {"szlig", '\u00DF'}, + {"agrave", '\u00E0'}, + {"aacute", '\u00E1'}, + {"acirc", '\u00E2'}, + {"atilde", '\u00E3'}, + {"auml", '\u00E4'}, + {"aring", '\u00E5'}, + {"aelig", '\u00E6'}, + {"ccedil", '\u00E7'}, + {"egrave", '\u00E8'}, + {"eacute", '\u00E9'}, + {"ecirc", '\u00EA'}, + {"euml", '\u00EB'}, + {"igrave", '\u00EC'}, + {"iacute", '\u00ED'}, + {"icirc", '\u00EE'}, + {"iuml", '\u00EF'}, + {"eth", '\u00F0'}, + {"ntilde", '\u00F1'}, + {"ograve", '\u00F2'}, + {"oacute", '\u00F3'}, + {"ocirc", '\u00F4'}, + {"otilde", '\u00F5'}, + {"ouml", '\u00F6'}, + {"divide", '\u00F7'}, + {"oslash", '\u00F8'}, + {"ugrave", '\u00F9'}, + {"uacute", '\u00FA'}, + {"ucirc", '\u00FB'}, + {"uuml", '\u00FC'}, + {"yacute", '\u00FD'}, + {"thorn", '\u00FE'}, + {"yuml", '\u00FF'}, + {"fnof", '\u0192'}, + {"Alpha", '\u0391'}, + {"Beta", '\u0392'}, + {"Gamma", '\u0393'}, + {"Delta", '\u0394'}, + {"Epsilon", '\u0395'}, + {"Zeta", '\u0396'}, + {"Eta", '\u0397'}, + {"Theta", '\u0398'}, + {"Iota", '\u0399'}, + {"Kappa", '\u039A'}, + {"Lambda", '\u039B'}, + {"Mu", '\u039C'}, + {"Nu", '\u039D'}, + {"Xi", '\u039E'}, + {"Omicron", '\u039F'}, + {"Pi", '\u03A0'}, + {"Rho", '\u03A1'}, + {"Sigma", '\u03A3'}, + {"Tau", '\u03A4'}, + {"Upsilon", '\u03A5'}, + {"Phi", '\u03A6'}, + {"Chi", '\u03A7'}, + {"Psi", '\u03A8'}, + {"Omega", '\u03A9'}, + {"alpha", '\u03B1'}, + {"beta", '\u03B2'}, + {"gamma", '\u03B3'}, + {"delta", '\u03B4'}, + {"epsilon", '\u03B5'}, + {"zeta", '\u03B6'}, + {"eta", '\u03B7'}, + {"theta", '\u03B8'}, + {"iota", '\u03B9'}, + {"kappa", '\u03BA'}, + {"lambda", '\u03BB'}, + {"mu", '\u03BC'}, + {"nu", '\u03BD'}, + {"xi", '\u03BE'}, + {"omicron", '\u03BF'}, + {"pi", '\u03C0'}, + {"rho", '\u03C1'}, + {"sigmaf", '\u03C2'}, + {"sigma", '\u03C3'}, + {"tau", '\u03C4'}, + {"upsilon", '\u03C5'}, + {"phi", '\u03C6'}, + {"chi", '\u03C7'}, + {"psi", '\u03C8'}, + {"omega", '\u03C9'}, + {"thetasym", '\u03D1'}, + {"upsih", '\u03D2'}, + {"piv", '\u03D6'}, + {"bull", '\u2022'}, + {"hellip", '\u2026'}, + {"prime", '\u2032'}, + {"Prime", '\u2033'}, + {"oline", '\u203E'}, + {"frasl", '\u2044'}, + {"weierp", '\u2118'}, + {"image", '\u2111'}, + {"real", '\u211C'}, + {"trade", '\u2122'}, + {"alefsym", '\u2135'}, + {"larr", '\u2190'}, + {"uarr", '\u2191'}, + {"rarr", '\u2192'}, + {"darr", '\u2193'}, + {"harr", '\u2194'}, + {"crarr", '\u21B5'}, + {"lArr", '\u21D0'}, + {"uArr", '\u21D1'}, + {"rArr", '\u21D2'}, + {"dArr", '\u21D3'}, + {"hArr", '\u21D4'}, + {"forall", '\u2200'}, + {"part", '\u2202'}, + {"exist", '\u2203'}, + {"empty", '\u2205'}, + {"nabla", '\u2207'}, + {"isin", '\u2208'}, + {"notin", '\u2209'}, + {"ni", '\u220B'}, + {"prod", '\u220F'}, + {"sum", '\u2211'}, + {"minus", '\u2212'}, + {"lowast", '\u2217'}, + {"radic", '\u221A'}, + {"prop", '\u221D'}, + {"infin", '\u221E'}, + {"ang", '\u2220'}, + {"and", '\u2227'}, + {"or", '\u2228'}, + {"cap", '\u2229'}, + {"cup", '\u222A'}, + {"int", '\u222B'}, + {"there4", '\u2234'}, + {"sim", '\u223C'}, + {"cong", '\u2245'}, + {"asymp", '\u2248'}, + {"ne", '\u2260'}, + {"equiv", '\u2261'}, + {"le", '\u2264'}, + {"ge", '\u2265'}, + {"sub", '\u2282'}, + {"sup", '\u2283'}, + {"nsub", '\u2284'}, + {"sube", '\u2286'}, + {"supe", '\u2287'}, + {"oplus", '\u2295'}, + {"otimes", '\u2297'}, + {"perp", '\u22A5'}, + {"sdot", '\u22C5'}, + {"lceil", '\u2308'}, + {"rceil", '\u2309'}, + {"lfloor", '\u230A'}, + {"rfloor", '\u230B'}, + {"lang", '\u2329'}, + {"rang", '\u232A'}, + {"loz", '\u25CA'}, + {"spades", '\u2660'}, + {"clubs", '\u2663'}, + {"hearts", '\u2665'}, + {"diams", '\u2666'}, + {"quot", '\u0022'}, + {"amp", '\u0026'}, + {"lt", '\u003C'}, + {"gt", '\u003E'}, + {"OElig", '\u0152'}, + {"oelig", '\u0153'}, + {"Scaron", '\u0160'}, + {"scaron", '\u0161'}, + {"Yuml", '\u0178'}, + {"circ", '\u02C6'}, + {"tilde", '\u02DC'}, + {"ensp", '\u2002'}, + {"emsp", '\u2003'}, + {"thinsp", '\u2009'}, + {"zwnj", '\u200C'}, + {"zwj", '\u200D'}, + {"lrm", '\u200E'}, + {"rlm", '\u200F'}, + {"ndash", '\u2013'}, + {"mdash", '\u2014'}, + {"lsquo", '\u2018'}, + {"rsquo", '\u2019'}, + {"sbquo", '\u201A'}, + {"ldquo", '\u201C'}, + {"rdquo", '\u201D'}, + {"bdquo", '\u201E'}, + {"dagger", '\u2020'}, + {"Dagger", '\u2021'}, + {"permil", '\u2030'}, + {"lsaquo", '\u2039'}, + {"rsaquo", '\u203A'}, + {"euro", '\u20AC'} + }; + } + + #endregion // Constructors + + #region Methods + + private static readonly char[] hexChars = "0123456789abcdef".ToCharArray(); + + public static void HtmlAttributeEncode(string s, TextWriter output) + { + output.Write(HtmlAttributeEncode(s)); + } + + public static string HtmlAttributeEncode(string s) + { + if (null == s) + { + return null; + } + + var needEncode = false; + for (var i = 0; i < s.Length; i++) + { + if (s[i] == '&' || s[i] == '"' || s[i] == '<') + { + needEncode = true; + break; + } + } + + if (!needEncode) + { + return s; + } + + var output = new StringBuilder(); + var len = s.Length; + for (var i = 0; i < len; i++) + { + switch (s[i]) + { + case '&': + output.Append("&"); + break; + case '"': + output.Append("""); + break; + case '<': + output.Append("<"); + break; + default: + output.Append(s[i]); + break; + } + } + + return output.ToString(); + } + + public static string UrlDecode(string str) + { + return UrlDecode(str, Encoding.UTF8); + } + + private static char[] GetChars(MemoryStream b, Encoding e) + { + return e.GetChars(b.GetBuffer(), 0, (int) b.Length); + } + + public static string UrlDecode(string s, Encoding e) + { + if (null == s) + { + return null; + } + + if (s.IndexOf('%') == -1 && s.IndexOf('+') == -1) + { + return s; + } + + if (e == null) + { + e = Encoding.UTF8; + } + + var output = new StringBuilder(); + long len = s.Length; + var bytes = new MemoryStream(); + + for (var i = 0; i < len; i++) + { + if (s[i] == '%' && i + 2 < len && s[i + 1] != '%') + { + int xchar; + if (s[i + 1] == 'u' && i + 5 < len) + { + if (bytes.Length > 0) + { + output.Append(GetChars(bytes, e)); + bytes.SetLength(0); + } + + xchar = GetChar(s, i + 2, 4); + if (xchar != -1) + { + output.Append((char) xchar); + i += 5; + } + else + { + output.Append('%'); + } + } + else if ((xchar = GetChar(s, i + 1, 2)) != -1) + { + bytes.WriteByte((byte) xchar); + i += 2; + } + else + { + output.Append('%'); + } + continue; + } + + if (bytes.Length > 0) + { + output.Append(GetChars(bytes, e)); + bytes.SetLength(0); + } + + if (s[i] == '+') + { + output.Append(' '); + } + else + { + output.Append(s[i]); + } + } + + if (bytes.Length > 0) + { + output.Append(GetChars(bytes, e)); + } + + return output.ToString(); + } + + public static string UrlDecode(byte[] bytes, Encoding e) + { + return bytes == null ? null : UrlDecode(bytes, 0, bytes.Length, e); + } + + private static int GetInt(byte b) + { + var c = (char) b; + if (c >= '0' && c <= '9') + { + return c - '0'; + } + + if (c >= 'a' && c <= 'f') + { + return c - 'a' + 10; + } + + if (c >= 'A' && c <= 'F') + { + return c - 'A' + 10; + } + + return -1; + } + + private static int GetChar(byte[] bytes, int offset, int length) + { + var value = 0; + var end = length + offset; + for (var i = offset; i < end; i++) + { + var current = GetInt(bytes[i]); + if (current == -1) + { + return -1; + } + value = (value << 4) + current; + } + + return value; + } + + private static int GetChar(string str, int offset, int length) + { + var val = 0; + var end = length + offset; + for (var i = offset; i < end; i++) + { + var c = str[i]; + if (c > 127) + { + return -1; + } + + var current = GetInt((byte) c); + if (current == -1) + { + return -1; + } + val = (val << 4) + current; + } + + return val; + } + + public static string UrlDecode(byte[] bytes, int offset, int count, Encoding e) + { + if (bytes == null) + { + return null; + } + if (count == 0) + { + return String.Empty; + } + + if (bytes == null) + { + throw new ArgumentNullException("bytes"); + } + + if (offset < 0 || offset > bytes.Length) + { + throw new ArgumentOutOfRangeException("offset"); + } + + if (count < 0 || offset + count > bytes.Length) + { + throw new ArgumentOutOfRangeException("count"); + } + + var output = new StringBuilder(); + var acc = new MemoryStream(); + + var end = count + offset; + for (var i = offset; i < end; i++) + { + if (bytes[i] == '%' && i + 2 < count && bytes[i + 1] != '%') + { + int xchar; + if (bytes[i + 1] == (byte) 'u' && i + 5 < end) + { + if (acc.Length > 0) + { + output.Append(GetChars(acc, e)); + acc.SetLength(0); + } + xchar = GetChar(bytes, i + 2, 4); + if (xchar != -1) + { + output.Append((char) xchar); + i += 5; + continue; + } + } + else if ((xchar = GetChar(bytes, i + 1, 2)) != -1) + { + acc.WriteByte((byte) xchar); + i += 2; + continue; + } + } + + if (acc.Length > 0) + { + output.Append(GetChars(acc, e)); + acc.SetLength(0); + } + + if (bytes[i] == '+') + { + output.Append(' '); + } + else + { + output.Append((char) bytes[i]); + } + } + + if (acc.Length > 0) + { + output.Append(GetChars(acc, e)); + } + + return output.ToString(); + } + + public static byte[] UrlDecodeToBytes(byte[] bytes) + { + return bytes == null ? null : UrlDecodeToBytes(bytes, 0, bytes.Length); + } + + public static byte[] UrlDecodeToBytes(string str) + { + return UrlDecodeToBytes(str, Encoding.UTF8); + } + + public static byte[] UrlDecodeToBytes(string str, Encoding e) + { + if (str == null) + { + return null; + } + + if (e == null) + { + throw new ArgumentNullException("e"); + } + + return UrlDecodeToBytes(e.GetBytes(str)); + } + + public static byte[] UrlDecodeToBytes(byte[] bytes, int offset, int count) + { + if (bytes == null) + { + return null; + } + if (count == 0) + { + return new byte[0]; + } + + var len = bytes.Length; + if (offset < 0 || offset >= len) + { + throw new ArgumentOutOfRangeException("offset"); + } + + if (count < 0 || offset > len - count) + { + throw new ArgumentOutOfRangeException("count"); + } + + var result = new MemoryStream(); + var end = offset + count; + for (var i = offset; i < end; i++) + { + var c = (char) bytes[i]; + if (c == '+') + { + c = ' '; + } + else if (c == '%' && i < end - 2) + { + var xchar = GetChar(bytes, i + 1, 2); + if (xchar != -1) + { + c = (char) xchar; + i += 2; + } + } + result.WriteByte((byte) c); + } + + return result.ToArray(); + } + + public static string UrlEncode(string str) + { + return UrlEncode(str, Encoding.UTF8); + } + + public static string UrlEncode(string s, Encoding Enc) + { + if (s == null) + { + return null; + } + + if (s == "") + { + return ""; + } + + var needEncode = false; + var len = s.Length; + for (var i = 0; i < len; i++) + { + var c = s[i]; + if ((c < '0') || (c < 'A' && c > '9') || (c > 'Z' && c < 'a') || (c > 'z')) + { + if (NotEncoded(c)) + { + continue; + } + + needEncode = true; + break; + } + } + + if (!needEncode) + { + return s; + } + + // avoided GetByteCount call + var bytes = new byte[Enc.GetMaxByteCount(s.Length)]; + var realLen = Enc.GetBytes(s, 0, s.Length, bytes, 0); + return Encoding.ASCII.GetString(UrlEncodeToBytes(bytes, 0, realLen), 0, realLen); + } + + public static string UrlEncode(byte[] bytes) + { + if (bytes == null) + { + return null; + } + + if (bytes.Length == 0) + { + return ""; + } + + return Encoding.ASCII.GetString(UrlEncodeToBytes(bytes, 0, bytes.Length), 0, bytes.Length); + } + + public static string UrlEncode(byte[] bytes, int offset, int count) + { + if (bytes == null) + { + return null; + } + + if (bytes.Length == 0) + { + return ""; + } + + return Encoding.ASCII.GetString(UrlEncodeToBytes(bytes, offset, count), offset, count); + } + + public static byte[] UrlEncodeToBytes(string str) + { + return UrlEncodeToBytes(str, Encoding.UTF8); + } + + public static byte[] UrlEncodeToBytes(string str, Encoding e) + { + if (str == null) + { + return null; + } + + if (str == "") + { + return new byte[0]; + } + + var bytes = e.GetBytes(str); + return UrlEncodeToBytes(bytes, 0, bytes.Length); + } + + public static byte[] UrlEncodeToBytes(byte[] bytes) + { + if (bytes == null) + { + return null; + } + + if (bytes.Length == 0) + { + return new byte[0]; + } + + return UrlEncodeToBytes(bytes, 0, bytes.Length); + } + + private static bool NotEncoded(char c) + { + return (c == '!' || c == '\'' || c == '(' || c == ')' || c == '*' || c == '-' || c == '.' || c == '_'); + } + + private static void UrlEncodeChar(char c, Stream result, bool isUnicode) + { + if (c > 255) + { + //FIXME: what happens when there is an internal error? + //if (!isUnicode) + // throw new ArgumentOutOfRangeException ("c", c, "c must be less than 256"); + int i = c; + + result.WriteByte((byte) '%'); + result.WriteByte((byte) 'u'); + var idx = i >> 12; + result.WriteByte((byte) hexChars[idx]); + idx = (i >> 8) & 0x0F; + result.WriteByte((byte) hexChars[idx]); + idx = (i >> 4) & 0x0F; + result.WriteByte((byte) hexChars[idx]); + idx = i & 0x0F; + result.WriteByte((byte) hexChars[idx]); + return; + } + + if (c > ' ' && NotEncoded(c)) + { + result.WriteByte((byte) c); + return; + } + if (c == ' ') + { + result.WriteByte((byte) '+'); + return; + } + if ((c < '0') || + (c < 'A' && c > '9') || + (c > 'Z' && c < 'a') || + (c > 'z')) + { + if (isUnicode && c > 127) + { + result.WriteByte((byte) '%'); + result.WriteByte((byte) 'u'); + result.WriteByte((byte) '0'); + result.WriteByte((byte) '0'); + } + else + { + result.WriteByte((byte) '%'); + } + + var idx = (c) >> 4; + result.WriteByte((byte) hexChars[idx]); + idx = (c) & 0x0F; + result.WriteByte((byte) hexChars[idx]); + } + else + { + result.WriteByte((byte) c); + } + } + + public static byte[] UrlEncodeToBytes(byte[] bytes, int offset, int count) + { + if (bytes == null) + { + return null; + } + + var len = bytes.Length; + if (len == 0) + { + return new byte[0]; + } + + if (offset < 0 || offset >= len) + { + throw new ArgumentOutOfRangeException("offset"); + } + + if (count < 0 || count > len - offset) + { + throw new ArgumentOutOfRangeException("count"); + } + + var result = new MemoryStream(count); + var end = offset + count; + for (var i = offset; i < end; i++) + { + UrlEncodeChar((char) bytes[i], result, false); + } + + return result.ToArray(); + } + + public static string UrlEncodeUnicode(string str) + { + if (str == null) + { + return null; + } + + var bytes = UrlEncodeUnicodeToBytes(str); + return Encoding.ASCII.GetString(bytes, 0, bytes.Length); + } + + public static byte[] UrlEncodeUnicodeToBytes(string str) + { + if (str == null) + { + return null; + } + + if (str == "") + { + return new byte[0]; + } + + var result = new MemoryStream(str.Length); + foreach (var c in str) + { + UrlEncodeChar(c, result, true); + } + return result.ToArray(); + } + + /// + /// Decodes an HTML-encoded string and returns the decoded string. + /// + /// The HTML string to decode. + /// The decoded text. + public static string HtmlDecode(string s) + { + if (s == null) + { + throw new ArgumentNullException("s"); + } + + if (s.IndexOf('&') == -1) + { + return s; + } + + var entity = new StringBuilder(); + var output = new StringBuilder(); + var len = s.Length; + // 0 -> nothing, + // 1 -> right after '&' + // 2 -> between '&' and ';' but no '#' + // 3 -> '#' found after '&' and getting numbers + var state = 0; + var number = 0; + var have_trailing_digits = false; + + for (var i = 0; i < len; i++) + { + var c = s[i]; + if (state == 0) + { + if (c == '&') + { + entity.Append(c); + state = 1; + } + else + { + output.Append(c); + } + continue; + } + + if (c == '&') + { + state = 1; + if (have_trailing_digits) + { + entity.Append(number.ToString(CultureInfo.InvariantCulture)); + have_trailing_digits = false; + } + + output.Append(entity.ToString()); + entity.Length = 0; + entity.Append('&'); + continue; + } + + if (state == 1) + { + if (c == ';') + { + state = 0; + output.Append(entity.ToString()); + output.Append(c); + entity.Length = 0; + } + else + { + number = 0; + state = c != '#' ? 2 : 3; + entity.Append(c); + } + } + else if (state == 2) + { + entity.Append(c); + if (c == ';') + { + var key = entity.ToString(); + if (key.Length > 1 && Entities.ContainsKey(key.Substring(1, key.Length - 2))) + { + key = Entities[key.Substring(1, key.Length - 2)].ToString(); + } + + output.Append(key); + state = 0; + entity.Length = 0; + } + } + else if (state == 3) + { + if (c == ';') + { + if (number > 65535) + { + output.Append("&#"); + output.Append(number.ToString(CultureInfo.InvariantCulture)); + output.Append(";"); + } + else + { + output.Append((char) number); + } + state = 0; + entity.Length = 0; + have_trailing_digits = false; + } + else if (Char.IsDigit(c)) + { + number = number*10 + (c - '0'); + have_trailing_digits = true; + } + else + { + state = 2; + if (have_trailing_digits) + { + entity.Append(number.ToString(CultureInfo.InvariantCulture)); + have_trailing_digits = false; + } + entity.Append(c); + } + } + } + + if (entity.Length > 0) + { + output.Append(entity.ToString()); + } + else if (have_trailing_digits) + { + output.Append(number.ToString(CultureInfo.InvariantCulture)); + } + return output.ToString(); + } + + /// + /// Decodes an HTML-encoded string and sends the resulting output to a TextWriter output stream. + /// + /// The HTML string to decode + /// The TextWriter output stream containing the decoded string. + public static void HtmlDecode(string s, TextWriter output) + { + if (s != null) + { + output.Write(HtmlDecode(s)); + } + } + + /// + /// HTML-encodes a string and returns the encoded string. + /// + /// The text string to encode. + /// The HTML-encoded text. + public static string HtmlEncode(string s) + { + if (s == null) + { + return null; + } + + var needEncode = false; + for (var i = 0; i < s.Length; i++) + { + var c = s[i]; + if (c == '&' || c == '"' || c == '<' || c == '>' || c > 159) + { + needEncode = true; + break; + } + } + + if (!needEncode) + { + return s; + } + + var output = new StringBuilder(); + + var len = s.Length; + for (var i = 0; i < len; i++) + { + switch (s[i]) + { + case '&': + output.Append("&"); + break; + case '>': + output.Append(">"); + break; + case '<': + output.Append("<"); + break; + case '"': + output.Append("""); + break; + default: + // MS starts encoding with &# from 160 and stops at 255. + // We don't do that. One reason is the 65308/65310 unicode + // characters that look like '<' and '>'. +#if TARGET_JVM + if (s [i] > 159 && s [i] < 256) { +#else + if (s[i] > 159) + { +#endif + output.Append("&#"); + output.Append(((int) s[i]).ToString(CultureInfo.InvariantCulture)); + output.Append(";"); + } + else + { + output.Append(s[i]); + } + break; + } + } + return output.ToString(); + } + + /// + /// HTML-encodes a string and sends the resulting output to a TextWriter output stream. + /// + /// The string to encode. + /// The TextWriter output stream containing the encoded string. + public static void HtmlEncode(string s, TextWriter output) + { + if (s != null) + { + output.Write(HtmlEncode(s)); + } + } + + public static string UrlPathEncode(string s) + { + if (string.IsNullOrEmpty(s)) + return s; + + var result = new MemoryStream(); + var length = s.Length; + for (var i = 0; i < length; i++) + { + UrlPathEncodeChar(s[i], result); + } + + var bytes = result.ToArray(); + return Encoding.ASCII.GetString(bytes, 0, bytes.Length); + } + + private static void UrlPathEncodeChar(char c, Stream result) + { + if (c < 33 || c > 126) + { + var bIn = Encoding.UTF8.GetBytes(c.ToString()); + for (var i = 0; i < bIn.Length; i++) + { + result.WriteByte((byte) '%'); + var idx = bIn[i] >> 4; + result.WriteByte((byte) hexChars[idx]); + idx = bIn[i] & 0x0F; + result.WriteByte((byte) hexChars[idx]); + } + } + else if (c == ' ') + { + result.WriteByte((byte) '%'); + result.WriteByte((byte) '2'); + result.WriteByte((byte) '0'); + } + else + result.WriteByte((byte) c); + } + + public static NameValueCollection ParseQueryString(string query) + { + return ParseQueryString(query, Encoding.UTF8); + } + + public static NameValueCollection ParseQueryString(string query, Encoding encoding) + { + if (query == null) + throw new ArgumentNullException("query"); + if (encoding == null) + throw new ArgumentNullException("encoding"); + if (query.Length == 0 || (query.Length == 1 && query[0] == '?')) + return new NameValueCollection(); + if (query[0] == '?') + query = query.Substring(1); + + var result = new NameValueCollection(); + ParseQueryString(query, encoding, result); + return result; + } + + internal static void ParseQueryString(string query, Encoding encoding, NameValueCollection result) + { + if (query.Length == 0) + { + return; + } + + var decoded = HtmlDecode(query); + var decodedLength = decoded.Length; + var namePos = 0; + var first = true; + while (namePos <= decodedLength) + { + int valuePos = -1, valueEnd = -1; + for (var q = namePos; q < decodedLength; q++) + { + if (valuePos == -1 && decoded[q] == '=') + { + valuePos = q + 1; + } + else if (decoded[q] == '&') + { + valueEnd = q; + break; + } + } + + if (first) + { + first = false; + if (decoded[namePos] == '?') + { + namePos++; + } + } + + string name; + if (valuePos == -1) + { + name = null; + valuePos = namePos; + } + else + { + name = UrlDecode(decoded.Substring(namePos, valuePos - namePos - 1), encoding); + } + if (valueEnd < 0) + { + namePos = -1; + valueEnd = decoded.Length; + } + else + { + namePos = valueEnd + 1; + } + var value = UrlDecode(decoded.Substring(valuePos, valueEnd - valuePos), encoding); + + result.Add(name, value); + if (namePos == -1) + { + break; + } + } + } + + #endregion // Methods + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net40/Hammock.ClientProfile/Mono/WebHeaderCollection.cs b/trunk/hammock/src/net40/Hammock.ClientProfile/Mono/WebHeaderCollection.cs new file mode 100644 index 0000000..258fb18 --- /dev/null +++ b/trunk/hammock/src/net40/Hammock.ClientProfile/Mono/WebHeaderCollection.cs @@ -0,0 +1,625 @@ +// +// System.Net.WebHeaderCollection +// +// Authors: +// Lawrence Pit (loz@cable.a2000.nl) +// Gonzalo Paniagua Javier (gonzalo@ximian.com) +// Miguel de Icaza (miguel@novell.com) +// +// Copyright 2003 Ximian, Inc. (http://www.ximian.com) +// Copyright 2007 Novell, Inc. (http://www.novell.com) +// +// +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + + +using System; +using System.Collections; +using System.Collections.Specialized; +using System.Net; +using System.Runtime.InteropServices; +using System.Text; + +// See RFC 2068 par 4.2 Message Headers + +namespace Mono.Net +{ + [Serializable] + [ComVisible(true)] + public class WebHeaderCollection : NameValueCollection + { + private static readonly Hashtable _restricted; + private static readonly Hashtable _multiValue; + + private static readonly char[] tspecials = + new[] + { + '(', ')', '<', '>', '@', + ',', ';', ':', '\\', '"', + '/', '[', ']', '?', '=', + '{', '}', ' ', '\t' + }; + + private readonly bool internallyCreated; + + // Static Initializer + + static WebHeaderCollection() + { + // the list of restricted header names as defined + // by the ms.net spec + _restricted = new Hashtable(StringComparer.InvariantCultureIgnoreCase) + { + {"accept", true}, + {"connection", true}, + {"content-length", true}, + {"content-type", true}, + {"date", true}, + {"expect", true}, + {"host", true}, + {"if-modified-since", true}, + {"range", true}, + {"referer", true}, + {"transfer-encoding", true}, + {"user-agent", true} + }; + + // see par 14 of RFC 2068 to see which header names + // accept multiple values each separated by a comma + _multiValue = new Hashtable(StringComparer.InvariantCultureIgnoreCase) + { + {"accept", true}, + {"accept-charset", true}, + {"accept-encoding", true}, + {"accept-language", true}, + {"accept-ranges", true}, + {"allow", true}, + {"authorization", true}, + {"cache-control", true}, + {"connection", true}, + {"content-encoding", true}, + {"content-language", true}, + {"expect", true}, + {"if-match", true}, + {"if-none-match", true}, + {"proxy-authenticate", true}, + {"public", true}, + {"range", true}, + {"transfer-encoding", true}, + {"upgrade", true}, + {"vary", true}, + {"via", true}, + {"warning", true}, + {"www-authenticate", true}, + {"set-cookie", true}, + {"set-cookie2", true} + }; + + // Extra + } + + // Constructors + + public WebHeaderCollection() + { + } + + internal WebHeaderCollection(bool internallyCreated) + { + this.internallyCreated = internallyCreated; + } + + public override string[] AllKeys + { + get { return (base.AllKeys); } + } + + public override int Count + { + get { return (base.Count); } + } + + public override KeysCollection Keys + { + get { return (base.Keys); } + } + + public string this[HttpRequestHeader hrh] + { + get { return Get(RequestHeaderToString(hrh)); } + + set { Add(RequestHeaderToString(hrh), value); } + } + + public string this[HttpResponseHeader hrh] + { + get { return Get(ResponseHeaderToString(hrh)); } + + set { Add(ResponseHeaderToString(hrh), value); } + } + + // Methods + + public void Add(string header) + { + if (header == null) + throw new ArgumentNullException("header"); + var pos = header.IndexOf(':'); + if (pos == -1) + throw new ArgumentException("no colon found", "header"); + Add(header.Substring(0, pos), + header.Substring(pos + 1)); + } + + public override void Add(string name, string value) + { + if (name == null) + throw new ArgumentNullException("name"); + if (internallyCreated && IsRestricted(name)) + throw new ArgumentException("This header must be modified with the appropiate property."); + AddWithoutValidate(name, value); + } + + protected void AddWithoutValidate(string headerName, string headerValue) + { + if (!IsHeaderName(headerName)) + throw new ArgumentException("invalid header name: " + headerName, "headerName"); + headerValue = headerValue == null ? String.Empty : headerValue.Trim(); + if (!IsHeaderValue(headerValue)) + throw new ArgumentException("invalid header value: " + headerValue, "headerValue"); + base.Add(headerName, headerValue); + } + + public override string[] GetValues(string header) + { + if (header == null) + throw new ArgumentNullException("header"); + + var values = base.GetValues(header); + if (values == null || values.Length == 0) + return null; + + /* + if (IsMultiValue (header)) { + values = GetMultipleValues (values); + } + */ + + return values; + } + + public override string[] GetValues(int index) + { + var values = base.GetValues(index); + if (values == null || values.Length == 0) + { + return (null); + } + + return (values); + } + + /* Now i wonder why this is here... + static string [] GetMultipleValues (string [] values) + { + ArrayList mvalues = new ArrayList (values.Length); + StringBuilder sb = null; + for (int i = 0; i < values.Length; ++i) { + string val = values [i]; + if (val.IndexOf (',') == -1) { + mvalues.Add (val); + continue; + } + + if (sb == null) + sb = new StringBuilder (); + + bool quote = false; + for (int k = 0; k < val.Length; k++) { + char c = val [k]; + if (c == '"') { + quote = !quote; + } else if (!quote && c == ',') { + mvalues.Add (sb.ToString ().Trim ()); + sb.Length = 0; + continue; + } + sb.Append (c); + } + + if (sb.Length > 0) { + mvalues.Add (sb.ToString ().Trim ()); + sb.Length = 0; + } + } + + return (string []) mvalues.ToArray (typeof (string)); + } + */ + + public static bool IsRestricted(string headerName) + { + if (headerName == null) + throw new ArgumentNullException("headerName"); + + if (headerName == "") // MS throw nullexception here! + throw new ArgumentException("empty string", "headerName"); + + return _restricted.ContainsKey(headerName); + } + + public static bool IsRestricted(string headerName, bool response) + { + throw new NotImplementedException(); + } + + public override void Remove(string name) + { + if (name == null) + throw new ArgumentNullException("name"); + if (internallyCreated && IsRestricted(name)) + throw new ArgumentException("restricted header"); + base.Remove(name); + } + + public override void Set(string name, string value) + { + if (name == null) + throw new ArgumentNullException("name"); + if (internallyCreated && IsRestricted(name)) + throw new ArgumentException("restricted header"); + if (!IsHeaderName(name)) + throw new ArgumentException("invalid header name"); + value = value == null ? String.Empty : value.Trim(); + if (!IsHeaderValue(value)) + throw new ArgumentException("invalid header value"); + base.Set(name, value); + } + + public byte[] ToByteArray() + { + return Encoding.UTF8.GetBytes(ToString()); + } + + public override string ToString() + { + var sb = new StringBuilder(); + + var count = base.Count; + for (var i = 0; i < count; i++) + sb.Append(GetKey(i)) + .Append(": ") + .Append(Get(i)) + .Append("\r\n"); + + return sb.Append("\r\n").ToString(); + } + + public override string Get(int index) + { + return (base.Get(index)); + } + + public override string Get(string name) + { + return (base.Get(name)); + } + + public override string GetKey(int index) + { + return (base.GetKey(index)); + } + + public void Add(HttpRequestHeader header, string value) + { + Add(RequestHeaderToString(header), value); + } + + public void Remove(HttpRequestHeader header) + { + Remove(RequestHeaderToString(header)); + } + + public void Set(HttpRequestHeader header, string value) + { + Set(RequestHeaderToString(header), value); + } + + public void Add(HttpResponseHeader header, string value) + { + Add(ResponseHeaderToString(header), value); + } + + public void Remove(HttpResponseHeader header) + { + Remove(ResponseHeaderToString(header)); + } + + public void Set(HttpResponseHeader header, string value) + { + Set(ResponseHeaderToString(header), value); + } + + private static string RequestHeaderToString(HttpRequestHeader value) + { + switch (value) + { + case HttpRequestHeader.CacheControl: + return "cache-control"; + case HttpRequestHeader.Connection: + return "connection"; + case HttpRequestHeader.Date: + return "date"; + case HttpRequestHeader.KeepAlive: + return "keep-alive"; + case HttpRequestHeader.Pragma: + return "pragma"; + case HttpRequestHeader.Trailer: + return "trailer"; + case HttpRequestHeader.TransferEncoding: + return "transfer-encoding"; + case HttpRequestHeader.Upgrade: + return "upgrade"; + case HttpRequestHeader.Via: + return "via"; + case HttpRequestHeader.Warning: + return "warning"; + case HttpRequestHeader.Allow: + return "allow"; + case HttpRequestHeader.ContentLength: + return "content-length"; + case HttpRequestHeader.ContentType: + return "content-type"; + case HttpRequestHeader.ContentEncoding: + return "content-encoding"; + case HttpRequestHeader.ContentLanguage: + return "content-language"; + case HttpRequestHeader.ContentLocation: + return "content-location"; + case HttpRequestHeader.ContentMd5: + return "content-md5"; + case HttpRequestHeader.ContentRange: + return "content-range"; + case HttpRequestHeader.Expires: + return "expires"; + case HttpRequestHeader.LastModified: + return "last-modified"; + case HttpRequestHeader.Accept: + return "accept"; + case HttpRequestHeader.AcceptCharset: + return "accept-charset"; + case HttpRequestHeader.AcceptEncoding: + return "accept-encoding"; + case HttpRequestHeader.AcceptLanguage: + return "accept-language"; + case HttpRequestHeader.Authorization: + return "authorization"; + case HttpRequestHeader.Cookie: + return "cookie"; + case HttpRequestHeader.Expect: + return "expect"; + case HttpRequestHeader.From: + return "from"; + case HttpRequestHeader.Host: + return "host"; + case HttpRequestHeader.IfMatch: + return "if-match"; + case HttpRequestHeader.IfModifiedSince: + return "if-modified-since"; + case HttpRequestHeader.IfNoneMatch: + return "if-none-match"; + case HttpRequestHeader.IfRange: + return "if-range"; + case HttpRequestHeader.IfUnmodifiedSince: + return "if-unmodified-since"; + case HttpRequestHeader.MaxForwards: + return "max-forwards"; + case HttpRequestHeader.ProxyAuthorization: + return "proxy-authorization"; + case HttpRequestHeader.Referer: + return "referer"; + case HttpRequestHeader.Range: + return "range"; + case HttpRequestHeader.Te: + return "te"; + case HttpRequestHeader.Translate: + return "translate"; + case HttpRequestHeader.UserAgent: + return "user-agent"; + default: + throw new InvalidOperationException(); + } + } + + + private static string ResponseHeaderToString(HttpResponseHeader value) + { + switch (value) + { + case HttpResponseHeader.CacheControl: + return "cache-control"; + case HttpResponseHeader.Connection: + return "connection"; + case HttpResponseHeader.Date: + return "date"; + case HttpResponseHeader.KeepAlive: + return "keep-alive"; + case HttpResponseHeader.Pragma: + return "pragma"; + case HttpResponseHeader.Trailer: + return "trailer"; + case HttpResponseHeader.TransferEncoding: + return "transfer-encoding"; + case HttpResponseHeader.Upgrade: + return "upgrade"; + case HttpResponseHeader.Via: + return "via"; + case HttpResponseHeader.Warning: + return "warning"; + case HttpResponseHeader.Allow: + return "allow"; + case HttpResponseHeader.ContentLength: + return "content-length"; + case HttpResponseHeader.ContentType: + return "content-type"; + case HttpResponseHeader.ContentEncoding: + return "content-encoding"; + case HttpResponseHeader.ContentLanguage: + return "content-language"; + case HttpResponseHeader.ContentLocation: + return "content-location"; + case HttpResponseHeader.ContentMd5: + return "content-md5"; + case HttpResponseHeader.ContentRange: + return "content-range"; + case HttpResponseHeader.Expires: + return "expires"; + case HttpResponseHeader.LastModified: + return "last-modified"; + case HttpResponseHeader.AcceptRanges: + return "accept-ranges"; + case HttpResponseHeader.Age: + return "age"; + case HttpResponseHeader.ETag: + return "etag"; + case HttpResponseHeader.Location: + return "location"; + case HttpResponseHeader.ProxyAuthenticate: + return "proxy-authenticate"; + case HttpResponseHeader.RetryAfter: + return "RetryAfter"; + case HttpResponseHeader.Server: + return "server"; + case HttpResponseHeader.SetCookie: + return "set-cookie"; + case HttpResponseHeader.Vary: + return "vary"; + case HttpResponseHeader.WwwAuthenticate: + return "www-authenticate"; + default: + throw new InvalidOperationException(); + } + } + + public override IEnumerator GetEnumerator() + { + return (base.GetEnumerator()); + } + + // Internal Methods + + // With this we don't check for invalid characters in header. See bug #55994. + internal void SetInternal(string header) + { + var pos = header.IndexOf(':'); + if (pos == -1) + throw new ArgumentException("no colon found", "header"); + + SetInternal(header.Substring(0, pos), header.Substring(pos + 1)); + } + + internal void SetInternal(string name, string value) + { + value = value == null ? String.Empty : value.Trim(); + if (!IsHeaderValue(value)) + throw new ArgumentException("invalid header value"); + + if (IsMultiValue(name)) + { + base.Add(name, value); + } + else + { + base.Remove(name); + base.Set(name, value); + } + } + + internal void RemoveAndAdd(string name, string value) + { + value = value == null ? String.Empty : value.Trim(); + + base.Remove(name); + base.Set(name, value); + } + + internal void RemoveInternal(string name) + { + if (name == null) + throw new ArgumentNullException("name"); + base.Remove(name); + } + + internal static bool IsMultiValue(string headerName) + { + return !string.IsNullOrEmpty(headerName) && _multiValue.ContainsKey(headerName); + } + + internal static bool IsHeaderValue(string value) + { + // TEXT any 8 bit value except CTL's (0-31 and 127) + // but including \r\n space and \t + // after a newline at least one space or \t must follow + // certain header fields allow comments () + + var len = value.Length; + for (var i = 0; i < len; i++) + { + var c = value[i]; + if (c == 127) + return false; + if (c < 0x20 && (c != '\r' && c != '\n' && c != '\t')) + return false; + if (c == '\n' && ++i < len) + { + c = value[i]; + if (c != ' ' && c != '\t') + return false; + } + } + + return true; + } + + internal static bool IsHeaderName(string name) + { + // token = 1* + // tspecials = "(" | ")" | "<" | ">" | "@" + // | "," | ";" | ":" | "\" | <"> + // | "/" | "[" | "]" | "?" | "=" + // | "{" | "}" | SP | HT + + if (string.IsNullOrEmpty(name)) + return false; + + var len = name.Length; + for (var i = 0; i < len; i++) + { + var c = name[i]; + if (c < 0x20 || c >= 0x7f) + return false; + } + + return name.IndexOfAny(tspecials) == -1; + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net40/Hammock.ClientProfile/Properties/AssemblyInfo.cs b/trunk/hammock/src/net40/Hammock.ClientProfile/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..320ac5b --- /dev/null +++ b/trunk/hammock/src/net40/Hammock.ClientProfile/Properties/AssemblyInfo.cs @@ -0,0 +1,37 @@ +using System.Reflection; +using System.Runtime.InteropServices; +using System.Security; + +// 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("Hammock")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Apitize")] +[assembly: AssemblyProduct("Hammock")] +[assembly: AssemblyCopyright("Copyright © Daniel Crenna and Jason Diller")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: AllowPartiallyTrustedCallers] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("31b4614f-f68c-481b-b56e-99fdeaec5c4e")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/trunk/hammock/src/net40/Hammock.ClientProfile/key.snk b/trunk/hammock/src/net40/Hammock.ClientProfile/key.snk new file mode 100644 index 0000000000000000000000000000000000000000..ed404cd2b98794be9654705e03f356546393f826 GIT binary patch literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50097rX2mggb`z#srv=C&u+tgpp^FW^M**Pm zRQO}lqnc-@hC)KUY6}|R0cKtk;e9lD=(rwB+as(MXDb+_+G52=`KS_Isyvj`Lv>t; zyv1GdtazzRJ@~Ikqx~TP`bG%Rj^JO-mWk-SOVW*S-BQylz(lnRD^aU;42ZrfNBOmJ z+wu|=RKI)(tf=kVs&r1#mU7ia^YtqD_N!R!)Mb<04J(7v0b9Z5@VQ zC~!{_9Az!Ik)85nzpjNic*BZ(iJSs=#CEi_EvxKd8YjX}1j8+N2zqaVEoTb{xxA?( zVt8G+Ou_+Iw{;ElEmyRR47jL`4u7RS+VW6jwp=Ns#vPw_+s*hGzc&Int6mW=r8E?B z)qgXtnZUe(Tz`ffc*>2e+Br!=fqNzeZTr56NZVVsD%VFGDVkAw@hwc5(-@Qd=aTqV z(nhX4LsE@8Bh?ITr5k1jJOPeVdipW-lxZ`6M6%|*SG?o?o}O<)9!yjl130Go;PJF4 iINMdx^S=SKvcAYJIsZ6c08B+-O^Q|BqJw=PJm;e#=pQ8j literal 0 HcmV?d00001 diff --git a/trunk/hammock/src/net40/Hammock.Silverlight/Hammock.Silverlight.csproj b/trunk/hammock/src/net40/Hammock.Silverlight/Hammock.Silverlight.csproj new file mode 100644 index 0000000..86db49f --- /dev/null +++ b/trunk/hammock/src/net40/Hammock.Silverlight/Hammock.Silverlight.csproj @@ -0,0 +1,474 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {46AFFE9E-B0DF-4DE9-A1A3-1773E08DCB51} + {A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + Hammock.Silverlight + Hammock.Silverlight + Silverlight + v4.0 + $(TargetFrameworkVersion) + false + true + true + + + + v3.5 + + + true + full + false + ..\..\..\bin\lib\SL4\ + TRACE;DEBUG;SILVERLIGHT,Silverlight,SL,SL4,NET40 + true + true + prompt + 4 + + + pdbonly + true + ..\..\..\bin\lib\sl4\ + TRACE;SILVERLIGHT,Silverlight,SL,SL4,NET40 + true + true + prompt + 4 + + + true + + + key.snk + + + bin\ClientProfiles\ + TRACE;SILVERLIGHT,Silverlight,SL,SL4 + true + true + pdbonly + AnyCPU + ..\..\..\bin\net40\Hammock.Silverlight.dll.CodeAnalysisLog.xml + true + GlobalSuppressions.cs + prompt + MinimumRecommendedRules.ruleset + ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets + false + ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules + false + true + + + + + + + + + + + + + + + + + + + Compat\DecompressionMethods.cs + + + Compat\GzipHttpWebResponse.cs + + + Compat\NameValueCollection.cs + + + Compat\Trace.cs + + + Attributes\INamedAttribute.cs + + + Attributes\IValidatingAttribute.cs + + + Attributes\Specialized\EntityAttribute.cs + + + Attributes\Specialized\HeaderAttribute.cs + + + Attributes\Specialized\ParameterAttribute.cs + + + Attributes\Specialized\UserAgentAttribute.cs + + + Attributes\Validation\BooleanToIntegerAttribute.cs + + + Attributes\Validation\DateTimeFormatAttribute.cs + + + Attributes\Validation\RequiredAttribute.cs + + + Attributes\Validation\SpecificationAttribute.cs + + + Attributes\Validation\ValidationAttribute.cs + + + Authentication\Basic\BasicAuthCredentials.cs + + + Authentication\IWebCredentials.cs + + + Authentication\OAuth\OAuthCredentials.cs + + + Authentication\OAuth\OAuthParameterHandling.cs + + + Authentication\OAuth\OAuthSignatureMethod.cs + + + Authentication\OAuth\OAuthToken.cs + + + Authentication\OAuth\OAuthTools.cs + + + Authentication\OAuth\OAuthType.cs + + + Authentication\OAuth\OAuthWebQuery.cs + + + Authentication\OAuth\OAuthWebQueryInfo.cs + + + Authentication\OAuth\OAuthWorkflow.cs + + + Caching\CacheFactory.cs + + + Caching\CacheMode.cs + + + Caching\CacheOptions.cs + + + Caching\ICache.cs + + + Caching\SimpleCache.cs + + + Extensions\CollectionExtensions.cs + + + Extensions\FormatExtensions.cs + + + Extensions\OAuthExtensions.cs + + + Extensions\ObjectExtensions.cs + + + Extensions\ReflectionExtensions.cs + + + Extensions\SpecificationExtensions.cs + + + Extensions\StringExtensions.cs + + + Extensions\TimeExtensions.cs + + + Extensions\WebExtensions.cs + + + IRestClient.cs + + + Model\PropertyChangedBase.cs + + + RestBase.cs + + + RestCallback.cs + + + RestClient.cs + + + RestRequest.cs + + + RestResponse.cs + + + Retries\IRetryCondition.cs + + + Retries\IRetryCustomCondition.cs + + + Retries\NetworkError.cs + + + Retries\RetryCustomCondition.cs + + + Retries\RetryErrorCondition.cs + + + Retries\RetryPolicy.cs + + + Retries\RetryResultCondition.cs + + + Serialization\DefaultJsonSerializer.cs + + + Serialization\HammockDataContractJsonSerializer.cs + + + Serialization\HammockDataContractSerializer.cs + + + Serialization\IDeserializer.cs + + + Serialization\ISerializer.cs + + + Serialization\JsonParser.cs + + + Serialization\Utf8Serializer.cs + + + Specifications\AndSpecification.cs + + + Specifications\CompositeSpecificationBase.cs + + + Specifications\HammockSpecification.cs + + + Specifications\ISpecification.cs + + + Specifications\NotSpecification.cs + + + Specifications\OrSpecification.cs + + + Streaming\StreamOptions.cs + + + Tasks\IRateLimitingRule.cs + + + Tasks\IRateLimitStatus.cs + + + Tasks\ITaskOptions.cs + + + Tasks\ITaskState.cs + + + Tasks\ITimedTask.cs + + + Tasks\RateLimitingRule.cs + + + Tasks\RateLimitType.cs + + + Tasks\TaskOptions.cs + + + Tasks\TaskState.cs + + + Tasks\TimedTask.cs + + + Validation\ValidationException.cs + + + Validation\ValidEmailSpecification.cs + + + Web\BasicAuthWebQuery.cs + + + Web\GetOrDelete.cs + + + Web\HttpCookieParameter.cs + + + Web\HttpPostParameter.cs + + + Web\HttpPostParameterType.cs + + + Web\IWebQueryInfo.cs + + + Web\Mocks\IMockable.cs + + + Web\Mocks\IWebResponse.cs + + + Web\Mocks\MockHttpWebRequest.cs + + + Web\Mocks\MockHttpWebResponse.cs + + + Web\Mocks\MockWebRequestFactory.cs + + + Web\Pair.cs + + + Web\PostOrPut.cs + + + Web\Triplet.cs + + + Web\WebCallback.cs + + + Web\WebEntity.cs + + + Web\WebHeader.cs + + + Web\WebHeaderCollection.cs + + + Web\WebMethod.cs + + + Web\WebPair.cs + + + Web\WebPairCollection.cs + + + Web\WebParameter.cs + + + Web\WebParameterCollection.cs + + + Web\WebQuery.Async.cs + + + Web\WebQuery.cs + + + Web\WebQueryAsyncResult.cs + + + Web\WebQueryRequestEventArgs.cs + + + Web\WebQueryResponseEventArgs.cs + + + Web\WebQueryResult.cs + + + + + + Attributes\Specialized\_Specialized.cd + + + Attributes\Validation\_Validation.cd + + + Authentication\OAuth\_OAuth.cd + + + Authentication\_Authentication.cd + + + Caching\_Caching.cd + + + Model\_Model.cd + + + Retries\_Retries.cd + + + Tasks\_Tasks.cd + + + Web\Mocks\_Mocks.cd + + + Web\_Web.cd + + + _Hammock.cd + + + + + + {5953279F-F478-4D5F-9906-03D56CE2DA2D} + ICSharpCode.SharpZipLib.Silverlight %28.NET 4.0\SharpZipLib\ICSharpCode.SharpZipLib.Silverlight%29 + + + + + + + + + + + + \ No newline at end of file diff --git a/trunk/hammock/src/net40/Hammock.Silverlight/Properties/AssemblyInfo.cs b/trunk/hammock/src/net40/Hammock.Silverlight/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..4d10ae2 --- /dev/null +++ b/trunk/hammock/src/net40/Hammock.Silverlight/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Hammock.Silverlight")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Hammock.Silverlight")] +[assembly: AssemblyCopyright("Copyright © Daniel Crenna and Jason Diller")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("f1d5d65e-7ee4-4bd7-af97-7ee4668d51bc")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/trunk/hammock/src/net40/Hammock.Silverlight/key.snk b/trunk/hammock/src/net40/Hammock.Silverlight/key.snk new file mode 100644 index 0000000000000000000000000000000000000000..ed404cd2b98794be9654705e03f356546393f826 GIT binary patch literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50097rX2mggb`z#srv=C&u+tgpp^FW^M**Pm zRQO}lqnc-@hC)KUY6}|R0cKtk;e9lD=(rwB+as(MXDb+_+G52=`KS_Isyvj`Lv>t; zyv1GdtazzRJ@~Ikqx~TP`bG%Rj^JO-mWk-SOVW*S-BQylz(lnRD^aU;42ZrfNBOmJ z+wu|=RKI)(tf=kVs&r1#mU7ia^YtqD_N!R!)Mb<04J(7v0b9Z5@VQ zC~!{_9Az!Ik)85nzpjNic*BZ(iJSs=#CEi_EvxKd8YjX}1j8+N2zqaVEoTb{xxA?( zVt8G+Ou_+Iw{;ElEmyRR47jL`4u7RS+VW6jwp=Ns#vPw_+s*hGzc&Int6mW=r8E?B z)qgXtnZUe(Tz`ffc*>2e+Br!=fqNzeZTr56NZVVsD%VFGDVkAw@hwc5(-@Qd=aTqV z(nhX4LsE@8Bh?ITr5k1jJOPeVdipW-lxZ`6M6%|*SG?o?o}O<)9!yjl130Go;PJF4 iINMdx^S=SKvcAYJIsZ6c08B+-O^Q|BqJw=PJm;e#=pQ8j literal 0 HcmV?d00001 diff --git a/trunk/hammock/src/net40/Hammock.WindowsPhone/Hammock.WindowsPhone.csproj b/trunk/hammock/src/net40/Hammock.WindowsPhone/Hammock.WindowsPhone.csproj new file mode 100644 index 0000000..fd23ef4 --- /dev/null +++ b/trunk/hammock/src/net40/Hammock.WindowsPhone/Hammock.WindowsPhone.csproj @@ -0,0 +1,437 @@ + + + + Debug + AnyCPU + 10.0.20506 + 2.0 + {3059FD1C-4B4B-4460-A0D4-53C84CCE6CAC} + {C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + Hammock.WindowsPhone + Hammock.WindowsPhone + v4.0 + $(TargetFrameworkVersion) + WindowsPhone + Silverlight + false + true + true + + + true + full + false + ..\..\..\bin\lib\WP7\ + TRACE;DEBUG;SILVERLIGHT,Silverlight,WindowsPhone + true + true + prompt + 4 + + + pdbonly + true + ..\..\..\bin\lib\sl4-wp\ + TRACE;SILVERLIGHT,Silverlight,SL,WindowsPhone,WINDOWS_PHONE + true + true + prompt + 4 + + + bin\ClientProfiles\ + TRACE;SILVERLIGHT,Silverlight,SL,WindowsPhone + true + true + pdbonly + AnyCPU + ..\..\..\bin\net40\Hammock.WindowsPhone.dll.CodeAnalysisLog.xml + true + GlobalSuppressions.cs + prompt + MinimumRecommendedRules.ruleset + ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets + false + ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules + false + + + + + + + + + + + + + + + Compat\GzipHttpWebResponse.cs + + + Attributes\INamedAttribute.cs + + + Attributes\IValidatingAttribute.cs + + + Compat\DecompressionMethods.cs + + + Compat\NameValueCollection.cs + + + Compat\Trace.cs + + + Attributes\Specialized\EntityAttribute.cs + + + Attributes\Specialized\HeaderAttribute.cs + + + Attributes\Specialized\ParameterAttribute.cs + + + Attributes\Specialized\UserAgentAttribute.cs + + + Attributes\Validation\BooleanToIntegerAttribute.cs + + + Attributes\Validation\DateTimeFormatAttribute.cs + + + Attributes\Validation\RequiredAttribute.cs + + + Attributes\Validation\SpecificationAttribute.cs + + + Attributes\Validation\ValidationAttribute.cs + + + Authentication\Basic\BasicAuthCredentials.cs + + + Authentication\IWebCredentials.cs + + + Authentication\OAuth\OAuthCredentials.cs + + + Authentication\OAuth\OAuthParameterHandling.cs + + + Authentication\OAuth\OAuthSignatureMethod.cs + + + Authentication\OAuth\OAuthToken.cs + + + Authentication\OAuth\OAuthTools.cs + + + Authentication\OAuth\OAuthType.cs + + + Authentication\OAuth\OAuthWebQuery.cs + + + Authentication\OAuth\OAuthWebQueryInfo.cs + + + Authentication\OAuth\OAuthWorkflow.cs + + + Caching\CacheFactory.cs + + + Caching\CacheMode.cs + + + Caching\CacheOptions.cs + + + Caching\ICache.cs + + + Caching\SimpleCache.cs + + + Extensions\CollectionExtensions.cs + + + Extensions\FormatExtensions.cs + + + Extensions\OAuthExtensions.cs + + + Extensions\ObjectExtensions.cs + + + Extensions\ReflectionExtensions.cs + + + Extensions\SpecificationExtensions.cs + + + Extensions\StringExtensions.cs + + + Extensions\TimeExtensions.cs + + + Extensions\WebExtensions.cs + + + Model\PropertyChangedBase.cs + + + Retries\ConnectionClosed.cs + + + Retries\IRetryCondition.cs + + + Retries\IRetryCustomCondition.cs + + + Retries\NetworkError.cs + + + Retries\RetryCondition.cs + + + Retries\RetryCustomCondition.cs + + + Retries\RetryErrorCondition.cs + + + Retries\RetryPolicy.cs + + + Retries\RetryResultCondition.cs + + + Retries\Timeout.cs + + + Serialization\DefaultJsonSerializer.cs + + + Serialization\HammockDataContractJsonSerializer.cs + + + Serialization\HammockDataContractSerializer.cs + + + Serialization\IDeserializer.cs + + + Serialization\ISerializer.cs + + + Serialization\JsonParser.cs + + + Serialization\Utf8Serializer.cs + + + Specifications\AndSpecification.cs + + + Specifications\CompositeSpecificationBase.cs + + + Specifications\HammockSpecification.cs + + + Specifications\ISpecification.cs + + + Specifications\NotSpecification.cs + + + Specifications\OrSpecification.cs + + + Streaming\StreamOptions.cs + + + Tasks\IRateLimitingRule.cs + + + Tasks\IRateLimitStatus.cs + + + Tasks\ITaskOptions.cs + + + Tasks\ITaskState.cs + + + Tasks\ITimedTask.cs + + + Tasks\RateLimitingRule.cs + + + Tasks\RateLimitType.cs + + + Tasks\TaskOptions.cs + + + Tasks\TaskState.cs + + + Tasks\TimedTask.cs + + + Validation\ValidationException.cs + + + Validation\ValidEmailSpecification.cs + + + Web\BasicAuthWebQuery.cs + + + Web\GetOrDelete.cs + + + Web\HttpCookieParameter.cs + + + Web\HttpPostParameter.cs + + + Web\HttpPostParameterType.cs + + + Web\IWebQueryInfo.cs + + + Web\Mock\IMockable.cs + + + Web\Mock\IWebResponse.cs + + + Web\Mock\MockHttpWebRequest.cs + + + Web\Mock\MockHttpWebResponse.cs + + + Web\Mock\MockWebRequestFactory.cs + + + Web\Pair.cs + + + Web\PostOrPut.cs + + + Web\Triplet.cs + + + Web\WebCallback.cs + + + Web\WebEntity.cs + + + Web\WebHeader.cs + + + Web\WebHeaderCollection.cs + + + Web\WebMethod.cs + + + Web\WebPair.cs + + + Web\WebPairCollection.cs + + + Web\WebParameter.cs + + + Web\WebParameterCollection.cs + + + Web\WebQuery.Async.cs + + + Web\WebQuery.cs + + + Web\WebQueryAsyncResult.cs + + + Web\WebQueryRequestEventArgs.cs + + + Web\WebQueryResponseEventArgs.cs + + + Web\WebQueryResult.cs + + + IRestClient.cs + + + RestBase.cs + + + RestCallback.cs + + + RestClient.cs + + + RestRequest.cs + + + RestResponse.cs + + + + + + + Hammock.csproj + + + + + Retries\_Retries.cd + + + + + {BF04A546-D681-4F5A-AC41-CFC67CAEC66E} + ICSharpCode.SharpZipLib.WindowsPhone + + + + + + + \ No newline at end of file diff --git a/trunk/hammock/src/net40/Hammock.WindowsPhone/Mono/HttpUtility.cs b/trunk/hammock/src/net40/Hammock.WindowsPhone/Mono/HttpUtility.cs new file mode 100644 index 0000000..da96334 --- /dev/null +++ b/trunk/hammock/src/net40/Hammock.WindowsPhone/Mono/HttpUtility.cs @@ -0,0 +1,1271 @@ +using System.Globalization; +using System.IO; +using System.Text; +using System.Collections.Generic; + +#if SILVERLIGHT +using Hammock.Silverlight.Compat; +#endif + +namespace System.Web +{ + public sealed class HttpUtility + { + #region Fields + + private static Dictionary entities; + private static readonly object lock_ = new object(); + + #endregion // Fields + + private static Dictionary Entities + { + get + { + lock (lock_) + { + if (entities == null) + { + InitEntities(); + } + + return entities; + } + } + } + + #region Constructors + + private static void InitEntities() + { + // Build the hash table of HTML entity references. This list comes + // from the HTML 4.01 W3C recommendation. + entities = new Dictionary + { + {"nbsp", "\u00A0"}, + {"iexcl", "\u00A1"}, + {"cent", "\u00A2"}, + {"pound", "\u00A3"}, + {"curren", "\u00A4"}, + {"yen", "\u00A5"}, + {"brvbar", "\u00A6"}, + {"sect", "\u00A7"}, + {"uml", "\u00A8"}, + {"copy", "\u00A9"}, + {"ordf", "\u00AA"}, + {"laquo", "\u00AB"}, + {"not", "\u00AC"}, + {"shy", "\u00AD"}, + {"reg", "\u00AE"}, + {"macr", "\u00AF"}, + {"deg", "\u00B0"}, + {"plusmn", "\u00B1"}, + {"sup2", "\u00B2"}, + {"sup3", "\u00B3"}, + {"acute", "\u00B4"}, + {"micro", "\u00B5"}, + {"para", "\u00B6"}, + {"middot", "\u00B7"}, + {"cedil", "\u00B8"}, + {"sup1", "\u00B9"}, + {"ordm", "\u00BA"}, + {"raquo", "\u00BB"}, + {"frac14", "\u00BC"}, + {"frac12", "\u00BD"}, + {"frac34", "\u00BE"}, + {"iquest", "\u00BF"}, + {"Agrave", "\u00C0"}, + {"Aacute", "\u00C1"}, + {"Acirc", "\u00C2"}, + {"Atilde", "\u00C3"}, + {"Auml", "\u00C4"}, + {"Aring", "\u00C5"}, + {"AElig", "\u00C6"}, + {"Ccedil", "\u00C7"}, + {"Egrave", "\u00C8"}, + {"Eacute", "\u00C9"}, + {"Ecirc", "\u00CA"}, + {"Euml", "\u00CB"}, + {"Igrave", "\u00CC"}, + {"Iacute", "\u00CD"}, + {"Icirc", "\u00CE"}, + {"Iuml", "\u00CF"}, + {"ETH", "\u00D0"}, + {"Ntilde", "\u00D1"}, + {"Ograve", "\u00D2"}, + {"Oacute", "\u00D3"}, + {"Ocirc", "\u00D4"}, + {"Otilde", "\u00D5"}, + {"Ouml", "\u00D6"}, + {"times", "\u00D7"}, + {"Oslash", "\u00D8"}, + {"Ugrave", "\u00D9"}, + {"Uacute", "\u00DA"}, + {"Ucirc", "\u00DB"}, + {"Uuml", "\u00DC"}, + {"Yacute", "\u00DD"}, + {"THORN", "\u00DE"}, + {"szlig", "\u00DF"}, + {"agrave", "\u00E0"}, + {"aacute", "\u00E1"}, + {"acirc", "\u00E2"}, + {"atilde", "\u00E3"}, + {"auml", "\u00E4"}, + {"aring", "\u00E5"}, + {"aelig", "\u00E6"}, + {"ccedil", "\u00E7"}, + {"egrave", "\u00E8"}, + {"eacute", "\u00E9"}, + {"ecirc", "\u00EA"}, + {"euml", "\u00EB"}, + {"igrave", "\u00EC"}, + {"iacute", "\u00ED"}, + {"icirc", "\u00EE"}, + {"iuml", "\u00EF"}, + {"eth", "\u00F0"}, + {"ntilde", "\u00F1"}, + {"ograve", "\u00F2"}, + {"oacute", "\u00F3"}, + {"ocirc", "\u00F4"}, + {"otilde", "\u00F5"}, + {"ouml", "\u00F6"}, + {"divide", "\u00F7"}, + {"oslash", "\u00F8"}, + {"ugrave", "\u00F9"}, + {"uacute", "\u00FA"}, + {"ucirc", "\u00FB"}, + {"uuml", "\u00FC"}, + {"yacute", "\u00FD"}, + {"thorn", "\u00FE"}, + {"yuml", "\u00FF"}, + {"fnof", "\u0192"}, + {"Alpha", "\u0391"}, + {"Beta", "\u0392"}, + {"Gamma", "\u0393"}, + {"Delta", "\u0394"}, + {"Epsilon", "\u0395"}, + {"Zeta", "\u0396"}, + {"Eta", "\u0397"}, + {"Theta", "\u0398"}, + {"Iota", "\u0399"}, + {"Kappa", "\u039A"}, + {"Lambda", "\u039B"}, + {"Mu", "\u039C"}, + {"Nu", "\u039D"}, + {"Xi", "\u039E"}, + {"Omicron", "\u039F"}, + {"Pi", "\u03A0"}, + {"Rho", "\u03A1"}, + {"Sigma", "\u03A3"}, + {"Tau", "\u03A4"}, + {"Upsilon", "\u03A5"}, + {"Phi", "\u03A6"}, + {"Chi", "\u03A7"}, + {"Psi", "\u03A8"}, + {"Omega", "\u03A9"}, + {"alpha", "\u03B1"}, + {"beta", "\u03B2"}, + {"gamma", "\u03B3"}, + {"delta", "\u03B4"}, + {"epsilon", "\u03B5"}, + {"zeta", "\u03B6"}, + {"eta", "\u03B7"}, + {"theta", "\u03B8"}, + {"iota", "\u03B9"}, + {"kappa", "\u03BA"}, + {"lambda", "\u03BB"}, + {"mu", "\u03BC"}, + {"nu", "\u03BD"}, + {"xi", "\u03BE"}, + {"omicron", "\u03BF"}, + {"pi", "\u03C0"}, + {"rho", "\u03C1"}, + {"sigmaf", "\u03C2"}, + {"sigma", "\u03C3"}, + {"tau", "\u03C4"}, + {"upsilon", "\u03C5"}, + {"phi", "\u03C6"}, + {"chi", "\u03C7"}, + {"psi", "\u03C8"}, + {"omega", "\u03C9"}, + {"thetasym", "\u03D1"}, + {"upsih", "\u03D2"}, + {"piv", "\u03D6"}, + {"bull", "\u2022"}, + {"hellip", "\u2026"}, + {"prime", "\u2032"}, + {"Prime", "\u2033"}, + {"oline", "\u203E"}, + {"frasl", "\u2044"}, + {"weierp", "\u2118"}, + {"image", "\u2111"}, + {"real", "\u211C"}, + {"trade", "\u2122"}, + {"alefsym", "\u2135"}, + {"larr", "\u2190"}, + {"uarr", "\u2191"}, + {"rarr", "\u2192"}, + {"darr", "\u2193"}, + {"harr", "\u2194"}, + {"crarr", "\u21B5"}, + {"lArr", "\u21D0"}, + {"uArr", "\u21D1"}, + {"rArr", "\u21D2"}, + {"dArr", "\u21D3"}, + {"hArr", "\u21D4"}, + {"forall", "\u2200"}, + {"part", "\u2202"}, + {"exist", "\u2203"}, + {"empty", "\u2205"}, + {"nabla", "\u2207"}, + {"isin", "\u2208"}, + {"notin", "\u2209"}, + {"ni", "\u220B"}, + {"prod", "\u220F"}, + {"sum", "\u2211"}, + {"minus", "\u2212"}, + {"lowast", "\u2217"}, + {"radic", "\u221A"}, + {"prop", "\u221D"}, + {"infin", "\u221E"}, + {"ang", "\u2220"}, + {"and", "\u2227"}, + {"or", "\u2228"}, + {"cap", "\u2229"}, + {"cup", "\u222A"}, + {"int", "\u222B"}, + {"there4", "\u2234"}, + {"sim", "\u223C"}, + {"cong", "\u2245"}, + {"asymp", "\u2248"}, + {"ne", "\u2260"}, + {"equiv", "\u2261"}, + {"le", "\u2264"}, + {"ge", "\u2265"}, + {"sub", "\u2282"}, + {"sup", "\u2283"}, + {"nsub", "\u2284"}, + {"sube", "\u2286"}, + {"supe", "\u2287"}, + {"oplus", "\u2295"}, + {"otimes", "\u2297"}, + {"perp", "\u22A5"}, + {"sdot", "\u22C5"}, + {"lceil", "\u2308"}, + {"rceil", "\u2309"}, + {"lfloor", "\u230A"}, + {"rfloor", "\u230B"}, + {"lang", "\u2329"}, + {"rang", "\u232A"}, + {"loz", "\u25CA"}, + {"spades", "\u2660"}, + {"clubs", "\u2663"}, + {"hearts", "\u2665"}, + {"diams", "\u2666"}, + {"quot", "\u0022"}, + {"amp", "\u0026"}, + {"lt", "\u003C"}, + {"gt", "\u003E"}, + {"OElig", "\u0152"}, + {"oelig", "\u0153"}, + {"Scaron", "\u0160"}, + {"scaron", "\u0161"}, + {"Yuml", "\u0178"}, + {"circ", "\u02C6"}, + {"tilde", "\u02DC"}, + {"ensp", "\u2002"}, + {"emsp", "\u2003"}, + {"thinsp", "\u2009"}, + {"zwnj", "\u200C"}, + {"zwj", "\u200D"}, + {"lrm", "\u200E"}, + {"rlm", "\u200F"}, + {"ndash", "\u2013"}, + {"mdash", "\u2014"}, + {"lsquo", "\u2018"}, + {"rsquo", "\u2019"}, + {"sbquo", "\u201A"}, + {"ldquo", "\u201C"}, + {"rdquo", "\u201D"}, + {"bdquo", "\u201E"}, + {"dagger", "\u2020"}, + {"Dagger", "\u2021"}, + {"permil", "\u2030"}, + {"lsaquo", "\u2039"}, + {"rsaquo", "\u203A"}, + {"euro", "\u20AC"} + }; + } + + #endregion // Constructors + + #region Methods + + private static readonly char[] hexChars = "0123456789abcdef".ToCharArray(); + + public static void HtmlAttributeEncode(string s, TextWriter output) + { + output.Write(HtmlAttributeEncode(s)); + } + + public static string HtmlAttributeEncode(string s) + { + if (null == s) + { + return null; + } + + var needEncode = false; + for (var i = 0; i < s.Length; i++) + { + if (s[i] == '&' || s[i] == '"' || s[i] == '<') + { + needEncode = true; + break; + } + } + + if (!needEncode) + { + return s; + } + + var output = new StringBuilder(); + var len = s.Length; + for (var i = 0; i < len; i++) + { + switch (s[i]) + { + case '&': + output.Append("&"); + break; + case '"': + output.Append("""); + break; + case '<': + output.Append("<"); + break; + default: + output.Append(s[i]); + break; + } + } + + return output.ToString(); + } + + public static string UrlDecode(string str) + { + return UrlDecode(str, Encoding.UTF8); + } + + private static char[] GetChars(MemoryStream b, Encoding e) + { + return e.GetChars(b.GetBuffer(), 0, (int) b.Length); + } + + public static string UrlDecode(string s, Encoding e) + { + if (null == s) + { + return null; + } + + if (s.IndexOf('%') == -1 && s.IndexOf('+') == -1) + { + return s; + } + + if (e == null) + { + e = Encoding.UTF8; + } + + var output = new StringBuilder(); + long len = s.Length; + var bytes = new MemoryStream(); + + for (var i = 0; i < len; i++) + { + if (s[i] == '%' && i + 2 < len && s[i + 1] != '%') + { + int xchar; + if (s[i + 1] == 'u' && i + 5 < len) + { + if (bytes.Length > 0) + { + output.Append(GetChars(bytes, e)); + bytes.SetLength(0); + } + + xchar = GetChar(s, i + 2, 4); + if (xchar != -1) + { + output.Append((char) xchar); + i += 5; + } + else + { + output.Append('%'); + } + } + else if ((xchar = GetChar(s, i + 1, 2)) != -1) + { + bytes.WriteByte((byte) xchar); + i += 2; + } + else + { + output.Append('%'); + } + continue; + } + + if (bytes.Length > 0) + { + output.Append(GetChars(bytes, e)); + bytes.SetLength(0); + } + + if (s[i] == '+') + { + output.Append(' '); + } + else + { + output.Append(s[i]); + } + } + + if (bytes.Length > 0) + { + output.Append(GetChars(bytes, e)); + } + + return output.ToString(); + } + + public static string UrlDecode(byte[] bytes, Encoding e) + { + return bytes == null ? null : UrlDecode(bytes, 0, bytes.Length, e); + } + + private static int GetInt(byte b) + { + var c = (char) b; + if (c >= '0' && c <= '9') + { + return c - '0'; + } + + if (c >= 'a' && c <= 'f') + { + return c - 'a' + 10; + } + + if (c >= 'A' && c <= 'F') + { + return c - 'A' + 10; + } + + return -1; + } + + private static int GetChar(byte[] bytes, int offset, int length) + { + var value = 0; + var end = length + offset; + for (var i = offset; i < end; i++) + { + var current = GetInt(bytes[i]); + if (current == -1) + { + return -1; + } + value = (value << 4) + current; + } + + return value; + } + + private static int GetChar(string str, int offset, int length) + { + var val = 0; + var end = length + offset; + for (var i = offset; i < end; i++) + { + var c = str[i]; + if (c > 127) + { + return -1; + } + + var current = GetInt((byte) c); + if (current == -1) + { + return -1; + } + val = (val << 4) + current; + } + + return val; + } + + public static string UrlDecode(byte[] bytes, int offset, int count, Encoding e) + { + if (bytes == null) + { + return null; + } + if (count == 0) + { + return String.Empty; + } + + if (bytes == null) + { + throw new ArgumentNullException("bytes"); + } + + if (offset < 0 || offset > bytes.Length) + { + throw new ArgumentOutOfRangeException("offset"); + } + + if (count < 0 || offset + count > bytes.Length) + { + throw new ArgumentOutOfRangeException("count"); + } + + var output = new StringBuilder(); + var acc = new MemoryStream(); + + var end = count + offset; + for (var i = offset; i < end; i++) + { + if (bytes[i] == '%' && i + 2 < count && bytes[i + 1] != '%') + { + int xchar; + if (bytes[i + 1] == (byte) 'u' && i + 5 < end) + { + if (acc.Length > 0) + { + output.Append(GetChars(acc, e)); + acc.SetLength(0); + } + xchar = GetChar(bytes, i + 2, 4); + if (xchar != -1) + { + output.Append((char) xchar); + i += 5; + continue; + } + } + else if ((xchar = GetChar(bytes, i + 1, 2)) != -1) + { + acc.WriteByte((byte) xchar); + i += 2; + continue; + } + } + + if (acc.Length > 0) + { + output.Append(GetChars(acc, e)); + acc.SetLength(0); + } + + if (bytes[i] == '+') + { + output.Append(' '); + } + else + { + output.Append((char) bytes[i]); + } + } + + if (acc.Length > 0) + { + output.Append(GetChars(acc, e)); + } + + return output.ToString(); + } + + public static byte[] UrlDecodeToBytes(byte[] bytes) + { + return bytes == null ? null : UrlDecodeToBytes(bytes, 0, bytes.Length); + } + + public static byte[] UrlDecodeToBytes(string str) + { + return UrlDecodeToBytes(str, Encoding.UTF8); + } + + public static byte[] UrlDecodeToBytes(string str, Encoding e) + { + if (str == null) + { + return null; + } + + if (e == null) + { + throw new ArgumentNullException("e"); + } + + return UrlDecodeToBytes(e.GetBytes(str)); + } + + public static byte[] UrlDecodeToBytes(byte[] bytes, int offset, int count) + { + if (bytes == null) + { + return null; + } + if (count == 0) + { + return new byte[0]; + } + + var len = bytes.Length; + if (offset < 0 || offset >= len) + { + throw new ArgumentOutOfRangeException("offset"); + } + + if (count < 0 || offset > len - count) + { + throw new ArgumentOutOfRangeException("count"); + } + + var result = new MemoryStream(); + var end = offset + count; + for (var i = offset; i < end; i++) + { + var c = (char) bytes[i]; + if (c == '+') + { + c = ' '; + } + else if (c == '%' && i < end - 2) + { + var xchar = GetChar(bytes, i + 1, 2); + if (xchar != -1) + { + c = (char) xchar; + i += 2; + } + } + result.WriteByte((byte) c); + } + + return result.ToArray(); + } + + public static string UrlEncode(string str) + { + return UrlEncode(str, Encoding.UTF8); + } + + public static string UrlEncode(string s, Encoding Enc) + { + if (s == null) + { + return null; + } + + if (s == "") + { + return ""; + } + + var needEncode = false; + var len = s.Length; + for (var i = 0; i < len; i++) + { + var c = s[i]; + if ((c < '0') || (c < 'A' && c > '9') || (c > 'Z' && c < 'a') || (c > 'z')) + { + if (NotEncoded(c)) + { + continue; + } + + needEncode = true; + break; + } + } + + if (!needEncode) + { + return s; + } + + // avoided GetByteCount call + var bytes = new byte[Enc.GetMaxByteCount(s.Length)]; + var realLen = Enc.GetBytes(s, 0, s.Length, bytes, 0); + return Encoding.UTF8.GetString(UrlEncodeToBytes(bytes, 0, realLen), 0, realLen); + } + + public static string UrlEncode(byte[] bytes) + { + if (bytes == null) + { + return null; + } + + if (bytes.Length == 0) + { + return ""; + } + + return Encoding.UTF8.GetString(UrlEncodeToBytes(bytes, 0, bytes.Length), 0, bytes.Length); + } + + public static string UrlEncode(byte[] bytes, int offset, int count) + { + if (bytes == null) + { + return null; + } + + if (bytes.Length == 0) + { + return ""; + } + + return Encoding.UTF8.GetString(UrlEncodeToBytes(bytes, offset, count), offset, count); + } + + public static byte[] UrlEncodeToBytes(string str) + { + return UrlEncodeToBytes(str, Encoding.UTF8); + } + + public static byte[] UrlEncodeToBytes(string str, Encoding e) + { + if (str == null) + { + return null; + } + + if (str == "") + { + return new byte[0]; + } + + var bytes = e.GetBytes(str); + return UrlEncodeToBytes(bytes, 0, bytes.Length); + } + + public static byte[] UrlEncodeToBytes(byte[] bytes) + { + if (bytes == null) + { + return null; + } + + if (bytes.Length == 0) + { + return new byte[0]; + } + + return UrlEncodeToBytes(bytes, 0, bytes.Length); + } + + private static bool NotEncoded(char c) + { + return (c == '!' || c == '\'' || c == '(' || c == ')' || c == '*' || c == '-' || c == '.' || c == '_'); + } + + private static void UrlEncodeChar(char c, Stream result, bool isUnicode) + { + if (c > 255) + { + //FIXME: what happens when there is an internal error? + //if (!isUnicode) + // throw new ArgumentOutOfRangeException ("c", c, "c must be less than 256"); + int i = c; + + result.WriteByte((byte) '%'); + result.WriteByte((byte) 'u'); + var idx = i >> 12; + result.WriteByte((byte) hexChars[idx]); + idx = (i >> 8) & 0x0F; + result.WriteByte((byte) hexChars[idx]); + idx = (i >> 4) & 0x0F; + result.WriteByte((byte) hexChars[idx]); + idx = i & 0x0F; + result.WriteByte((byte) hexChars[idx]); + return; + } + + if (c > ' ' && NotEncoded(c)) + { + result.WriteByte((byte) c); + return; + } + if (c == ' ') + { + result.WriteByte((byte) '+'); + return; + } + if ((c < '0') || + (c < 'A' && c > '9') || + (c > 'Z' && c < 'a') || + (c > 'z')) + { + if (isUnicode && c > 127) + { + result.WriteByte((byte) '%'); + result.WriteByte((byte) 'u'); + result.WriteByte((byte) '0'); + result.WriteByte((byte) '0'); + } + else + { + result.WriteByte((byte) '%'); + } + + var idx = (c) >> 4; + result.WriteByte((byte) hexChars[idx]); + idx = (c) & 0x0F; + result.WriteByte((byte) hexChars[idx]); + } + else + { + result.WriteByte((byte) c); + } + } + + public static byte[] UrlEncodeToBytes(byte[] bytes, int offset, int count) + { + if (bytes == null) + { + return null; + } + + var len = bytes.Length; + if (len == 0) + { + return new byte[0]; + } + + if (offset < 0 || offset >= len) + { + throw new ArgumentOutOfRangeException("offset"); + } + + if (count < 0 || count > len - offset) + { + throw new ArgumentOutOfRangeException("count"); + } + + var result = new MemoryStream(count); + var end = offset + count; + for (var i = offset; i < end; i++) + { + UrlEncodeChar((char) bytes[i], result, false); + } + + return result.ToArray(); + } + + public static string UrlEncodeUnicode(string str) + { + if (str == null) + { + return null; + } + + var bytes = UrlEncodeUnicodeToBytes(str); + return Encoding.UTF8.GetString(bytes, 0, bytes.Length); + } + + public static byte[] UrlEncodeUnicodeToBytes(string str) + { + if (str == null) + { + return null; + } + + if (str == "") + { + return new byte[0]; + } + + var result = new MemoryStream(str.Length); + foreach (var c in str) + { + UrlEncodeChar(c, result, true); + } + return result.ToArray(); + } + + /// + /// Decodes an HTML-encoded string and returns the decoded string. + /// + /// The HTML string to decode. + /// The decoded text. + public static string HtmlDecode(string s) + { + if (s == null) + { + throw new ArgumentNullException("s"); + } + + if (s.IndexOf('&') == -1) + { + return s; + } + + var entity = new StringBuilder(); + var output = new StringBuilder(); + var len = s.Length; + // 0 -> nothing, + // 1 -> right after '&' + // 2 -> between '&' and ';' but no '#' + // 3 -> '#' found after '&' and getting numbers + var state = 0; + var number = 0; + var have_trailing_digits = false; + + for (var i = 0; i < len; i++) + { + var c = s[i]; + if (state == 0) + { + if (c == '&') + { + entity.Append(c); + state = 1; + } + else + { + output.Append(c); + } + continue; + } + + if (c == '&') + { + state = 1; + if (have_trailing_digits) + { + entity.Append(number.ToString(CultureInfo.InvariantCulture)); + have_trailing_digits = false; + } + + output.Append(entity.ToString()); + entity.Length = 0; + entity.Append('&'); + continue; + } + + if (state == 1) + { + if (c == ';') + { + state = 0; + output.Append(entity.ToString()); + output.Append(c); + entity.Length = 0; + } + else + { + number = 0; + state = c != '#' ? 2 : 3; + entity.Append(c); + } + } + else if (state == 2) + { + entity.Append(c); + if (c == ';') + { + var key = entity.ToString(); + if (key.Length > 1 && Entities.ContainsKey(key.Substring(1, key.Length - 2))) + { + key = Entities[key.Substring(1, key.Length - 2)].ToString(); + } + + output.Append(key); + state = 0; + entity.Length = 0; + } + } + else if (state == 3) + { + if (c == ';') + { + if (number > 65535) + { + output.Append("&#"); + output.Append(number.ToString(CultureInfo.InvariantCulture)); + output.Append(";"); + } + else + { + output.Append((char) number); + } + state = 0; + entity.Length = 0; + have_trailing_digits = false; + } + else if (Char.IsDigit(c)) + { + number = number*10 + (c - '0'); + have_trailing_digits = true; + } + else + { + state = 2; + if (have_trailing_digits) + { + entity.Append(number.ToString(CultureInfo.InvariantCulture)); + have_trailing_digits = false; + } + entity.Append(c); + } + } + } + + if (entity.Length > 0) + { + output.Append(entity.ToString()); + } + else if (have_trailing_digits) + { + output.Append(number.ToString(CultureInfo.InvariantCulture)); + } + return output.ToString(); + } + + /// + /// Decodes an HTML-encoded string and sends the resulting output to a TextWriter output stream. + /// + /// The HTML string to decode + /// The TextWriter output stream containing the decoded string. + public static void HtmlDecode(string s, TextWriter output) + { + if (s != null) + { + output.Write(HtmlDecode(s)); + } + } + + /// + /// HTML-encodes a string and returns the encoded string. + /// + /// The text string to encode. + /// The HTML-encoded text. + public static string HtmlEncode(string s) + { + if (s == null) + { + return null; + } + + var needEncode = false; + for (var i = 0; i < s.Length; i++) + { + var c = s[i]; + if (c == '&' || c == '"' || c == '<' || c == '>' || c > 159) + { + needEncode = true; + break; + } + } + + if (!needEncode) + { + return s; + } + + var output = new StringBuilder(); + + var len = s.Length; + for (var i = 0; i < len; i++) + { + switch (s[i]) + { + case '&': + output.Append("&"); + break; + case '>': + output.Append(">"); + break; + case '<': + output.Append("<"); + break; + case '"': + output.Append("""); + break; + default: + // MS starts encoding with &# from 160 and stops at 255. + // We don't do that. One reason is the 65308/65310 unicode + // characters that look like '<' and '>'. +#if TARGET_JVM + if (s [i] > 159 && s [i] < 256) { +#else + if (s[i] > 159) + { +#endif + output.Append("&#"); + output.Append(((int) s[i]).ToString(CultureInfo.InvariantCulture)); + output.Append(";"); + } + else + { + output.Append(s[i]); + } + break; + } + } + return output.ToString(); + } + + /// + /// HTML-encodes a string and sends the resulting output to a TextWriter output stream. + /// + /// The string to encode. + /// The TextWriter output stream containing the encoded string. + public static void HtmlEncode(string s, TextWriter output) + { + if (s != null) + { + output.Write(HtmlEncode(s)); + } + } + + public static string UrlPathEncode(string s) + { + if (string.IsNullOrEmpty(s)) + return s; + + var result = new MemoryStream(); + var length = s.Length; + for (var i = 0; i < length; i++) + { + UrlPathEncodeChar(s[i], result); + } + + var bytes = result.ToArray(); + return Encoding.UTF8.GetString(bytes, 0, bytes.Length); + } + + private static void UrlPathEncodeChar(char c, Stream result) + { + if (c < 33 || c > 126) + { + var bIn = Encoding.UTF8.GetBytes(c.ToString()); + for (var i = 0; i < bIn.Length; i++) + { + result.WriteByte((byte) '%'); + var idx = bIn[i] >> 4; + result.WriteByte((byte) hexChars[idx]); + idx = bIn[i] & 0x0F; + result.WriteByte((byte) hexChars[idx]); + } + } + else if (c == ' ') + { + result.WriteByte((byte) '%'); + result.WriteByte((byte) '2'); + result.WriteByte((byte) '0'); + } + else + result.WriteByte((byte) c); + } + + public static NameValueCollection ParseQueryString(string query) + { + return ParseQueryString(query, Encoding.UTF8); + } + + public static NameValueCollection ParseQueryString(string query, Encoding encoding) + { + if (query == null) + throw new ArgumentNullException("query"); + if (encoding == null) + throw new ArgumentNullException("encoding"); + if (query.Length == 0 || (query.Length == 1 && query[0] == '?')) + return new NameValueCollection(); + if (query[0] == '?') + query = query.Substring(1); + + var result = new NameValueCollection(); + ParseQueryString(query, encoding, result); + return result; + } + + internal static void ParseQueryString(string query, Encoding encoding, NameValueCollection result) + { + if (query.Length == 0) + { + return; + } + + var decoded = HtmlDecode(query); + var decodedLength = decoded.Length; + var namePos = 0; + var first = true; + while (namePos <= decodedLength) + { + int valuePos = -1, valueEnd = -1; + for (var q = namePos; q < decodedLength; q++) + { + if (valuePos == -1 && decoded[q] == '=') + { + valuePos = q + 1; + } + else if (decoded[q] == '&') + { + valueEnd = q; + break; + } + } + + if (first) + { + first = false; + if (decoded[namePos] == '?') + { + namePos++; + } + } + + string name; + if (valuePos == -1) + { + name = null; + valuePos = namePos; + } + else + { + name = UrlDecode(decoded.Substring(namePos, valuePos - namePos - 1), encoding); + } + if (valueEnd < 0) + { + namePos = -1; + valueEnd = decoded.Length; + } + else + { + namePos = valueEnd + 1; + } + var value = UrlDecode(decoded.Substring(valuePos, valueEnd - valuePos), encoding); + + result.Add(name, value); + if (namePos == -1) + { + break; + } + } + } + + #endregion // Methods + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net40/Hammock.WindowsPhone/Properties/AssemblyInfo.cs b/trunk/hammock/src/net40/Hammock.WindowsPhone/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..e805e4d --- /dev/null +++ b/trunk/hammock/src/net40/Hammock.WindowsPhone/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Hammock.WindowsPhone")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Hammock.WindowsPhone")] +[assembly: AssemblyCopyright("Copyright © Daniel Crenna and Jason Diller")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("4b494cbd-3b70-4aab-b4cf-f827066a1a6a")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/trunk/hammock/src/net40/Hammock/GlobalSuppressions.cs b/trunk/hammock/src/net40/Hammock/GlobalSuppressions.cs new file mode 100644 index 0000000..54164b8 --- /dev/null +++ b/trunk/hammock/src/net40/Hammock/GlobalSuppressions.cs @@ -0,0 +1,20 @@ +// This file is used by Code Analysis to maintain SuppressMessage +// attributes that are applied to this project. +// Project-level suppressions either have no target or are given +// a specific target and scoped to a namespace, type, member, etc. +// +// To add a suppression to this file, right-click the message in the +// Error List, point to "Suppress Message(s)", and click +// "In Project Suppression File". +// You do not need to add suppressions to this file manually. + +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors", Scope = "member", Target = "Hammock.RestResponseBase.#.ctor()")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2229:ImplementSerializationConstructors", Scope = "type", Target = "Mono.Net.WebHeaderCollection")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2229:ImplementSerializationConstructors", Scope = "type", Target = "Hammock.Web.Mocks.MockHttpWebResponse")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2229:ImplementSerializationConstructors", Scope = "type", Target = "Hammock.Web.Mocks.MockHttpWebRequest")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors", Scope = "member", Target = "Hammock.Web.WebQueryAsyncResult.#.ctor()")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors", Scope = "member", Target = "Hammock.Web.WebQuery.#.ctor(Hammock.Web.IWebQueryInfo)")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Scope = "member", Target = "Hammock.Web.WebQuery.#EndStreaming(System.Net.WebRequest)")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2240:ImplementISerializableCorrectly", Scope = "type", Target = "Mono.Net.WebHeaderCollection")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2240:ImplementISerializableCorrectly", Scope = "type", Target = "Hammock.Web.Mocks.MockHttpWebRequest")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2240:ImplementISerializableCorrectly", Scope = "type", Target = "Hammock.Web.Mocks.MockHttpWebResponse")] diff --git a/trunk/hammock/src/net40/Hammock/Hammock.csproj b/trunk/hammock/src/net40/Hammock/Hammock.csproj new file mode 100644 index 0000000..dcf16dc --- /dev/null +++ b/trunk/hammock/src/net40/Hammock/Hammock.csproj @@ -0,0 +1,424 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {CD569558-9092-466B-8670-EA1B151150E0} + Library + Properties + Hammock + Hammock + v4.0 + 512 + + + + + true + full + false + ..\..\..\bin\lib\4.0\ + TRACE;DEBUG;NET40 + prompt + 4 + + + pdbonly + true + ..\..\..\bin\lib\net40\ + TRACE;NET40 + prompt + 4 + true + false + + + true + + + key.snk + + + bin\ClientProfiles\ + TRACE;NET40,ClientProfiles + true + pdbonly + AnyCPU + ..\..\..\bin\net40\Hammock.dll.CodeAnalysisLog.xml + true + GlobalSuppressions.cs + prompt + MinimumRecommendedRules.ruleset + ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets + false + ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules + false + + + + + + + + + + + + + + + + + + + Attributes\INamedAttribute.cs + + + Attributes\IValidatingAttribute.cs + + + Attributes\Specialized\EntityAttribute.cs + + + Attributes\Specialized\HeaderAttribute.cs + + + Attributes\Specialized\ParameterAttribute.cs + + + Attributes\Specialized\UserAgentAttribute.cs + + + Attributes\Validation\BooleanToIntegerAttribute.cs + + + Attributes\Validation\DateTimeFormatAttribute.cs + + + Attributes\Validation\RequiredAttribute.cs + + + Attributes\Validation\SpecificationAttribute.cs + + + Attributes\Validation\ValidationAttribute.cs + + + Authentication\Basic\BasicAuthCredentials.cs + + + Authentication\IWebCredentials.cs + + + Authentication\OAuth\OAuthCredentials.cs + + + Authentication\OAuth\OAuthParameterHandling.cs + + + Authentication\OAuth\OAuthSignatureMethod.cs + + + Authentication\OAuth\OAuthToken.cs + + + Authentication\OAuth\OAuthTools.cs + + + Authentication\OAuth\OAuthType.cs + + + Authentication\OAuth\OAuthWebQuery.cs + + + Authentication\OAuth\OAuthWebQueryInfo.cs + + + Authentication\OAuth\OAuthWorkflow.cs + + + Caching\AspNetCache.cs + + + Caching\CacheFactory.cs + + + Caching\CacheMode.cs + + + Caching\CacheOptions.cs + + + Caching\ICache.cs + + + Caching\IDependencyCache.cs + + + Caching\SimpleCache.cs + + + Extensions\CollectionExtensions.cs + + + Extensions\FormatExtensions.cs + + + Extensions\OAuthExtensions.cs + + + Extensions\ObjectExtensions.cs + + + Extensions\ReflectionExtensions.cs + + + Extensions\SpecificationExtensions.cs + + + Extensions\StringExtensions.cs + + + Extensions\TimeExtensions.cs + + + Extensions\WebExtensions.cs + + + Model\PropertyChangedBase.cs + + + Retries\ConnectionClosed.cs + + + Retries\IRetryCondition.cs + + + Retries\IRetryCustomCondition.cs + + + Retries\NetworkError.cs + + + Retries\RetryCondition.cs + + + Retries\RetryCustomCondition.cs + + + Retries\RetryErrorCondition.cs + + + Retries\RetryPolicy.cs + + + Retries\RetryResultCondition.cs + + + Retries\Timeout.cs + + + Serialization\DefaultJsonSerializer.cs + + + Serialization\HammockDataContractJsonSerializer.cs + + + Serialization\HammockDataContractSerializer.cs + + + Serialization\HammockXmlSerializer.cs + + + Serialization\IDeserializer.cs + + + Serialization\ISerializer.cs + + + Serialization\JsonParser.cs + + + Serialization\Utf8Serializer.cs + + + Specifications\AndSpecification.cs + + + Specifications\CompositeSpecificationBase.cs + + + Specifications\HammockSpecification.cs + + + Specifications\ISpecification.cs + + + Specifications\NotSpecification.cs + + + Specifications\OrSpecification.cs + + + Streaming\StreamOptions.cs + + + Tasks\IRateLimitingRule.cs + + + Tasks\IRateLimitStatus.cs + + + Tasks\ITaskOptions.cs + + + Tasks\ITaskState.cs + + + Tasks\ITimedTask.cs + + + Tasks\RateLimitingRule.cs + + + Tasks\RateLimitType.cs + + + Tasks\TaskOptions.cs + + + Tasks\TaskState.cs + + + Tasks\TimedTask.cs + + + Validation\ValidationException.cs + + + Validation\ValidEmailSpecification.cs + + + Web\BasicAuthWebQuery.cs + + + Web\GetOrDelete.cs + + + Web\HttpCookieParameter.cs + + + Web\HttpPostParameter.cs + + + Web\HttpPostParameterType.cs + + + Web\IWebQueryInfo.cs + + + Web\Mocks\IMockable.cs + + + Web\Mocks\IWebResponse.cs + + + Web\Mocks\MockHttpWebRequest.cs + + + Web\Mocks\MockHttpWebResponse.cs + + + Web\Mocks\MockWebRequestFactory.cs + + + Web\Pair.cs + + + Web\PostOrPut.cs + + + Web\Triplet.cs + + + Web\WebCallback.cs + + + Web\WebEntity.cs + + + Web\WebHeader.cs + + + Web\WebHeaderCollection.cs + + + Web\WebMethod.cs + + + Web\WebPair.cs + + + Web\WebPairCollection.cs + + + Web\WebParameter.cs + + + Web\WebParameterCollection.cs + + + Web\WebQuery.Async.cs + + + Web\WebQuery.cs + + + Web\WebQueryAsyncResult.cs + + + Web\WebQueryRequestEventArgs.cs + + + Web\WebQueryResponseEventArgs.cs + + + Web\WebQueryResult.cs + + + IRestClient.cs + + + RestBase.cs + + + RestCallback.cs + + + RestClient.cs + + + RestRequest.cs + + + RestResponse.cs + + + + + + + + + + + + \ No newline at end of file diff --git a/trunk/hammock/src/net40/Hammock/Mono/HttpUtility.cs b/trunk/hammock/src/net40/Hammock/Mono/HttpUtility.cs new file mode 100644 index 0000000..bd6f030 --- /dev/null +++ b/trunk/hammock/src/net40/Hammock/Mono/HttpUtility.cs @@ -0,0 +1,1300 @@ +// +// System.Web.HttpUtility +// +// Authors: +// Patrik Torstensson (Patrik.Torstensson@labs2.com) +// Wictor Wilén (decode/encode functions) (wictor@ibizkit.se) +// Tim Coleman (tim@timcoleman.com) +// Gonzalo Paniagua Javier (gonzalo@ximian.com) +// +// Copyright (C) 2005 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + + +using System.Collections; +using System.Collections.Specialized; +using System.Globalization; +using System.IO; +using System.Text; + +namespace System.Compat.Web +{ + public sealed class HttpUtility + { + #region Fields + + private static Hashtable entities; + private static readonly object lock_ = new object(); + + #endregion // Fields + + private static Hashtable Entities + { + get + { + lock (lock_) + { + if (entities == null) + { + InitEntities(); + } + + return entities; + } + } + } + + #region Constructors + + private static void InitEntities() + { + // Build the hash table of HTML entity references. This list comes + // from the HTML 4.01 W3C recommendation. + entities = new Hashtable + { + {"nbsp", '\u00A0'}, + {"iexcl", '\u00A1'}, + {"cent", '\u00A2'}, + {"pound", '\u00A3'}, + {"curren", '\u00A4'}, + {"yen", '\u00A5'}, + {"brvbar", '\u00A6'}, + {"sect", '\u00A7'}, + {"uml", '\u00A8'}, + {"copy", '\u00A9'}, + {"ordf", '\u00AA'}, + {"laquo", '\u00AB'}, + {"not", '\u00AC'}, + {"shy", '\u00AD'}, + {"reg", '\u00AE'}, + {"macr", '\u00AF'}, + {"deg", '\u00B0'}, + {"plusmn", '\u00B1'}, + {"sup2", '\u00B2'}, + {"sup3", '\u00B3'}, + {"acute", '\u00B4'}, + {"micro", '\u00B5'}, + {"para", '\u00B6'}, + {"middot", '\u00B7'}, + {"cedil", '\u00B8'}, + {"sup1", '\u00B9'}, + {"ordm", '\u00BA'}, + {"raquo", '\u00BB'}, + {"frac14", '\u00BC'}, + {"frac12", '\u00BD'}, + {"frac34", '\u00BE'}, + {"iquest", '\u00BF'}, + {"Agrave", '\u00C0'}, + {"Aacute", '\u00C1'}, + {"Acirc", '\u00C2'}, + {"Atilde", '\u00C3'}, + {"Auml", '\u00C4'}, + {"Aring", '\u00C5'}, + {"AElig", '\u00C6'}, + {"Ccedil", '\u00C7'}, + {"Egrave", '\u00C8'}, + {"Eacute", '\u00C9'}, + {"Ecirc", '\u00CA'}, + {"Euml", '\u00CB'}, + {"Igrave", '\u00CC'}, + {"Iacute", '\u00CD'}, + {"Icirc", '\u00CE'}, + {"Iuml", '\u00CF'}, + {"ETH", '\u00D0'}, + {"Ntilde", '\u00D1'}, + {"Ograve", '\u00D2'}, + {"Oacute", '\u00D3'}, + {"Ocirc", '\u00D4'}, + {"Otilde", '\u00D5'}, + {"Ouml", '\u00D6'}, + {"times", '\u00D7'}, + {"Oslash", '\u00D8'}, + {"Ugrave", '\u00D9'}, + {"Uacute", '\u00DA'}, + {"Ucirc", '\u00DB'}, + {"Uuml", '\u00DC'}, + {"Yacute", '\u00DD'}, + {"THORN", '\u00DE'}, + {"szlig", '\u00DF'}, + {"agrave", '\u00E0'}, + {"aacute", '\u00E1'}, + {"acirc", '\u00E2'}, + {"atilde", '\u00E3'}, + {"auml", '\u00E4'}, + {"aring", '\u00E5'}, + {"aelig", '\u00E6'}, + {"ccedil", '\u00E7'}, + {"egrave", '\u00E8'}, + {"eacute", '\u00E9'}, + {"ecirc", '\u00EA'}, + {"euml", '\u00EB'}, + {"igrave", '\u00EC'}, + {"iacute", '\u00ED'}, + {"icirc", '\u00EE'}, + {"iuml", '\u00EF'}, + {"eth", '\u00F0'}, + {"ntilde", '\u00F1'}, + {"ograve", '\u00F2'}, + {"oacute", '\u00F3'}, + {"ocirc", '\u00F4'}, + {"otilde", '\u00F5'}, + {"ouml", '\u00F6'}, + {"divide", '\u00F7'}, + {"oslash", '\u00F8'}, + {"ugrave", '\u00F9'}, + {"uacute", '\u00FA'}, + {"ucirc", '\u00FB'}, + {"uuml", '\u00FC'}, + {"yacute", '\u00FD'}, + {"thorn", '\u00FE'}, + {"yuml", '\u00FF'}, + {"fnof", '\u0192'}, + {"Alpha", '\u0391'}, + {"Beta", '\u0392'}, + {"Gamma", '\u0393'}, + {"Delta", '\u0394'}, + {"Epsilon", '\u0395'}, + {"Zeta", '\u0396'}, + {"Eta", '\u0397'}, + {"Theta", '\u0398'}, + {"Iota", '\u0399'}, + {"Kappa", '\u039A'}, + {"Lambda", '\u039B'}, + {"Mu", '\u039C'}, + {"Nu", '\u039D'}, + {"Xi", '\u039E'}, + {"Omicron", '\u039F'}, + {"Pi", '\u03A0'}, + {"Rho", '\u03A1'}, + {"Sigma", '\u03A3'}, + {"Tau", '\u03A4'}, + {"Upsilon", '\u03A5'}, + {"Phi", '\u03A6'}, + {"Chi", '\u03A7'}, + {"Psi", '\u03A8'}, + {"Omega", '\u03A9'}, + {"alpha", '\u03B1'}, + {"beta", '\u03B2'}, + {"gamma", '\u03B3'}, + {"delta", '\u03B4'}, + {"epsilon", '\u03B5'}, + {"zeta", '\u03B6'}, + {"eta", '\u03B7'}, + {"theta", '\u03B8'}, + {"iota", '\u03B9'}, + {"kappa", '\u03BA'}, + {"lambda", '\u03BB'}, + {"mu", '\u03BC'}, + {"nu", '\u03BD'}, + {"xi", '\u03BE'}, + {"omicron", '\u03BF'}, + {"pi", '\u03C0'}, + {"rho", '\u03C1'}, + {"sigmaf", '\u03C2'}, + {"sigma", '\u03C3'}, + {"tau", '\u03C4'}, + {"upsilon", '\u03C5'}, + {"phi", '\u03C6'}, + {"chi", '\u03C7'}, + {"psi", '\u03C8'}, + {"omega", '\u03C9'}, + {"thetasym", '\u03D1'}, + {"upsih", '\u03D2'}, + {"piv", '\u03D6'}, + {"bull", '\u2022'}, + {"hellip", '\u2026'}, + {"prime", '\u2032'}, + {"Prime", '\u2033'}, + {"oline", '\u203E'}, + {"frasl", '\u2044'}, + {"weierp", '\u2118'}, + {"image", '\u2111'}, + {"real", '\u211C'}, + {"trade", '\u2122'}, + {"alefsym", '\u2135'}, + {"larr", '\u2190'}, + {"uarr", '\u2191'}, + {"rarr", '\u2192'}, + {"darr", '\u2193'}, + {"harr", '\u2194'}, + {"crarr", '\u21B5'}, + {"lArr", '\u21D0'}, + {"uArr", '\u21D1'}, + {"rArr", '\u21D2'}, + {"dArr", '\u21D3'}, + {"hArr", '\u21D4'}, + {"forall", '\u2200'}, + {"part", '\u2202'}, + {"exist", '\u2203'}, + {"empty", '\u2205'}, + {"nabla", '\u2207'}, + {"isin", '\u2208'}, + {"notin", '\u2209'}, + {"ni", '\u220B'}, + {"prod", '\u220F'}, + {"sum", '\u2211'}, + {"minus", '\u2212'}, + {"lowast", '\u2217'}, + {"radic", '\u221A'}, + {"prop", '\u221D'}, + {"infin", '\u221E'}, + {"ang", '\u2220'}, + {"and", '\u2227'}, + {"or", '\u2228'}, + {"cap", '\u2229'}, + {"cup", '\u222A'}, + {"int", '\u222B'}, + {"there4", '\u2234'}, + {"sim", '\u223C'}, + {"cong", '\u2245'}, + {"asymp", '\u2248'}, + {"ne", '\u2260'}, + {"equiv", '\u2261'}, + {"le", '\u2264'}, + {"ge", '\u2265'}, + {"sub", '\u2282'}, + {"sup", '\u2283'}, + {"nsub", '\u2284'}, + {"sube", '\u2286'}, + {"supe", '\u2287'}, + {"oplus", '\u2295'}, + {"otimes", '\u2297'}, + {"perp", '\u22A5'}, + {"sdot", '\u22C5'}, + {"lceil", '\u2308'}, + {"rceil", '\u2309'}, + {"lfloor", '\u230A'}, + {"rfloor", '\u230B'}, + {"lang", '\u2329'}, + {"rang", '\u232A'}, + {"loz", '\u25CA'}, + {"spades", '\u2660'}, + {"clubs", '\u2663'}, + {"hearts", '\u2665'}, + {"diams", '\u2666'}, + {"quot", '\u0022'}, + {"amp", '\u0026'}, + {"lt", '\u003C'}, + {"gt", '\u003E'}, + {"OElig", '\u0152'}, + {"oelig", '\u0153'}, + {"Scaron", '\u0160'}, + {"scaron", '\u0161'}, + {"Yuml", '\u0178'}, + {"circ", '\u02C6'}, + {"tilde", '\u02DC'}, + {"ensp", '\u2002'}, + {"emsp", '\u2003'}, + {"thinsp", '\u2009'}, + {"zwnj", '\u200C'}, + {"zwj", '\u200D'}, + {"lrm", '\u200E'}, + {"rlm", '\u200F'}, + {"ndash", '\u2013'}, + {"mdash", '\u2014'}, + {"lsquo", '\u2018'}, + {"rsquo", '\u2019'}, + {"sbquo", '\u201A'}, + {"ldquo", '\u201C'}, + {"rdquo", '\u201D'}, + {"bdquo", '\u201E'}, + {"dagger", '\u2020'}, + {"Dagger", '\u2021'}, + {"permil", '\u2030'}, + {"lsaquo", '\u2039'}, + {"rsaquo", '\u203A'}, + {"euro", '\u20AC'} + }; + } + + #endregion // Constructors + + #region Methods + + private static readonly char[] hexChars = "0123456789abcdef".ToCharArray(); + + public static void HtmlAttributeEncode(string s, TextWriter output) + { + output.Write(HtmlAttributeEncode(s)); + } + + public static string HtmlAttributeEncode(string s) + { + if (null == s) + { + return null; + } + + var needEncode = false; + for (var i = 0; i < s.Length; i++) + { + if (s[i] == '&' || s[i] == '"' || s[i] == '<') + { + needEncode = true; + break; + } + } + + if (!needEncode) + { + return s; + } + + var output = new StringBuilder(); + var len = s.Length; + for (var i = 0; i < len; i++) + { + switch (s[i]) + { + case '&': + output.Append("&"); + break; + case '"': + output.Append("""); + break; + case '<': + output.Append("<"); + break; + default: + output.Append(s[i]); + break; + } + } + + return output.ToString(); + } + + public static string UrlDecode(string str) + { + return UrlDecode(str, Encoding.UTF8); + } + + private static char[] GetChars(MemoryStream b, Encoding e) + { + return e.GetChars(b.GetBuffer(), 0, (int) b.Length); + } + + public static string UrlDecode(string s, Encoding e) + { + if (null == s) + { + return null; + } + + if (s.IndexOf('%') == -1 && s.IndexOf('+') == -1) + { + return s; + } + + if (e == null) + { + e = Encoding.UTF8; + } + + var output = new StringBuilder(); + long len = s.Length; + var bytes = new MemoryStream(); + + for (var i = 0; i < len; i++) + { + if (s[i] == '%' && i + 2 < len && s[i + 1] != '%') + { + int xchar; + if (s[i + 1] == 'u' && i + 5 < len) + { + if (bytes.Length > 0) + { + output.Append(GetChars(bytes, e)); + bytes.SetLength(0); + } + + xchar = GetChar(s, i + 2, 4); + if (xchar != -1) + { + output.Append((char) xchar); + i += 5; + } + else + { + output.Append('%'); + } + } + else if ((xchar = GetChar(s, i + 1, 2)) != -1) + { + bytes.WriteByte((byte) xchar); + i += 2; + } + else + { + output.Append('%'); + } + continue; + } + + if (bytes.Length > 0) + { + output.Append(GetChars(bytes, e)); + bytes.SetLength(0); + } + + if (s[i] == '+') + { + output.Append(' '); + } + else + { + output.Append(s[i]); + } + } + + if (bytes.Length > 0) + { + output.Append(GetChars(bytes, e)); + } + + return output.ToString(); + } + + public static string UrlDecode(byte[] bytes, Encoding e) + { + return bytes == null ? null : UrlDecode(bytes, 0, bytes.Length, e); + } + + private static int GetInt(byte b) + { + var c = (char) b; + if (c >= '0' && c <= '9') + { + return c - '0'; + } + + if (c >= 'a' && c <= 'f') + { + return c - 'a' + 10; + } + + if (c >= 'A' && c <= 'F') + { + return c - 'A' + 10; + } + + return -1; + } + + private static int GetChar(byte[] bytes, int offset, int length) + { + var value = 0; + var end = length + offset; + for (var i = offset; i < end; i++) + { + var current = GetInt(bytes[i]); + if (current == -1) + { + return -1; + } + value = (value << 4) + current; + } + + return value; + } + + private static int GetChar(string str, int offset, int length) + { + var val = 0; + var end = length + offset; + for (var i = offset; i < end; i++) + { + var c = str[i]; + if (c > 127) + { + return -1; + } + + var current = GetInt((byte) c); + if (current == -1) + { + return -1; + } + val = (val << 4) + current; + } + + return val; + } + + public static string UrlDecode(byte[] bytes, int offset, int count, Encoding e) + { + if (bytes == null) + { + return null; + } + if (count == 0) + { + return String.Empty; + } + + if (bytes == null) + { + throw new ArgumentNullException("bytes"); + } + + if (offset < 0 || offset > bytes.Length) + { + throw new ArgumentOutOfRangeException("offset"); + } + + if (count < 0 || offset + count > bytes.Length) + { + throw new ArgumentOutOfRangeException("count"); + } + + var output = new StringBuilder(); + var acc = new MemoryStream(); + + var end = count + offset; + for (var i = offset; i < end; i++) + { + if (bytes[i] == '%' && i + 2 < count && bytes[i + 1] != '%') + { + int xchar; + if (bytes[i + 1] == (byte) 'u' && i + 5 < end) + { + if (acc.Length > 0) + { + output.Append(GetChars(acc, e)); + acc.SetLength(0); + } + xchar = GetChar(bytes, i + 2, 4); + if (xchar != -1) + { + output.Append((char) xchar); + i += 5; + continue; + } + } + else if ((xchar = GetChar(bytes, i + 1, 2)) != -1) + { + acc.WriteByte((byte) xchar); + i += 2; + continue; + } + } + + if (acc.Length > 0) + { + output.Append(GetChars(acc, e)); + acc.SetLength(0); + } + + if (bytes[i] == '+') + { + output.Append(' '); + } + else + { + output.Append((char) bytes[i]); + } + } + + if (acc.Length > 0) + { + output.Append(GetChars(acc, e)); + } + + return output.ToString(); + } + + public static byte[] UrlDecodeToBytes(byte[] bytes) + { + return bytes == null ? null : UrlDecodeToBytes(bytes, 0, bytes.Length); + } + + public static byte[] UrlDecodeToBytes(string str) + { + return UrlDecodeToBytes(str, Encoding.UTF8); + } + + public static byte[] UrlDecodeToBytes(string str, Encoding e) + { + if (str == null) + { + return null; + } + + if (e == null) + { + throw new ArgumentNullException("e"); + } + + return UrlDecodeToBytes(e.GetBytes(str)); + } + + public static byte[] UrlDecodeToBytes(byte[] bytes, int offset, int count) + { + if (bytes == null) + { + return null; + } + if (count == 0) + { + return new byte[0]; + } + + var len = bytes.Length; + if (offset < 0 || offset >= len) + { + throw new ArgumentOutOfRangeException("offset"); + } + + if (count < 0 || offset > len - count) + { + throw new ArgumentOutOfRangeException("count"); + } + + var result = new MemoryStream(); + var end = offset + count; + for (var i = offset; i < end; i++) + { + var c = (char) bytes[i]; + if (c == '+') + { + c = ' '; + } + else if (c == '%' && i < end - 2) + { + var xchar = GetChar(bytes, i + 1, 2); + if (xchar != -1) + { + c = (char) xchar; + i += 2; + } + } + result.WriteByte((byte) c); + } + + return result.ToArray(); + } + + public static string UrlEncode(string str) + { + return UrlEncode(str, Encoding.UTF8); + } + + public static string UrlEncode(string s, Encoding Enc) + { + if (s == null) + { + return null; + } + + if (s == "") + { + return ""; + } + + var needEncode = false; + var len = s.Length; + for (var i = 0; i < len; i++) + { + var c = s[i]; + if ((c < '0') || (c < 'A' && c > '9') || (c > 'Z' && c < 'a') || (c > 'z')) + { + if (NotEncoded(c)) + { + continue; + } + + needEncode = true; + break; + } + } + + if (!needEncode) + { + return s; + } + + // avoided GetByteCount call + var bytes = new byte[Enc.GetMaxByteCount(s.Length)]; + var realLen = Enc.GetBytes(s, 0, s.Length, bytes, 0); + return Encoding.ASCII.GetString(UrlEncodeToBytes(bytes, 0, realLen), 0, realLen); + } + + public static string UrlEncode(byte[] bytes) + { + if (bytes == null) + { + return null; + } + + if (bytes.Length == 0) + { + return ""; + } + + return Encoding.ASCII.GetString(UrlEncodeToBytes(bytes, 0, bytes.Length), 0, bytes.Length); + } + + public static string UrlEncode(byte[] bytes, int offset, int count) + { + if (bytes == null) + { + return null; + } + + if (bytes.Length == 0) + { + return ""; + } + + return Encoding.ASCII.GetString(UrlEncodeToBytes(bytes, offset, count), offset, count); + } + + public static byte[] UrlEncodeToBytes(string str) + { + return UrlEncodeToBytes(str, Encoding.UTF8); + } + + public static byte[] UrlEncodeToBytes(string str, Encoding e) + { + if (str == null) + { + return null; + } + + if (str == "") + { + return new byte[0]; + } + + var bytes = e.GetBytes(str); + return UrlEncodeToBytes(bytes, 0, bytes.Length); + } + + public static byte[] UrlEncodeToBytes(byte[] bytes) + { + if (bytes == null) + { + return null; + } + + if (bytes.Length == 0) + { + return new byte[0]; + } + + return UrlEncodeToBytes(bytes, 0, bytes.Length); + } + + private static bool NotEncoded(char c) + { + return (c == '!' || c == '\'' || c == '(' || c == ')' || c == '*' || c == '-' || c == '.' || c == '_'); + } + + private static void UrlEncodeChar(char c, Stream result, bool isUnicode) + { + if (c > 255) + { + //FIXME: what happens when there is an internal error? + //if (!isUnicode) + // throw new ArgumentOutOfRangeException ("c", c, "c must be less than 256"); + int i = c; + + result.WriteByte((byte) '%'); + result.WriteByte((byte) 'u'); + var idx = i >> 12; + result.WriteByte((byte) hexChars[idx]); + idx = (i >> 8) & 0x0F; + result.WriteByte((byte) hexChars[idx]); + idx = (i >> 4) & 0x0F; + result.WriteByte((byte) hexChars[idx]); + idx = i & 0x0F; + result.WriteByte((byte) hexChars[idx]); + return; + } + + if (c > ' ' && NotEncoded(c)) + { + result.WriteByte((byte) c); + return; + } + if (c == ' ') + { + result.WriteByte((byte) '+'); + return; + } + if ((c < '0') || + (c < 'A' && c > '9') || + (c > 'Z' && c < 'a') || + (c > 'z')) + { + if (isUnicode && c > 127) + { + result.WriteByte((byte) '%'); + result.WriteByte((byte) 'u'); + result.WriteByte((byte) '0'); + result.WriteByte((byte) '0'); + } + else + { + result.WriteByte((byte) '%'); + } + + var idx = (c) >> 4; + result.WriteByte((byte) hexChars[idx]); + idx = (c) & 0x0F; + result.WriteByte((byte) hexChars[idx]); + } + else + { + result.WriteByte((byte) c); + } + } + + public static byte[] UrlEncodeToBytes(byte[] bytes, int offset, int count) + { + if (bytes == null) + { + return null; + } + + var len = bytes.Length; + if (len == 0) + { + return new byte[0]; + } + + if (offset < 0 || offset >= len) + { + throw new ArgumentOutOfRangeException("offset"); + } + + if (count < 0 || count > len - offset) + { + throw new ArgumentOutOfRangeException("count"); + } + + var result = new MemoryStream(count); + var end = offset + count; + for (var i = offset; i < end; i++) + { + UrlEncodeChar((char) bytes[i], result, false); + } + + return result.ToArray(); + } + + public static string UrlEncodeUnicode(string str) + { + if (str == null) + { + return null; + } + + var bytes = UrlEncodeUnicodeToBytes(str); + return Encoding.ASCII.GetString(bytes, 0, bytes.Length); + } + + public static byte[] UrlEncodeUnicodeToBytes(string str) + { + if (str == null) + { + return null; + } + + if (str == "") + { + return new byte[0]; + } + + var result = new MemoryStream(str.Length); + foreach (var c in str) + { + UrlEncodeChar(c, result, true); + } + return result.ToArray(); + } + + /// + /// Decodes an HTML-encoded string and returns the decoded string. + /// + /// The HTML string to decode. + /// The decoded text. + public static string HtmlDecode(string s) + { + if (s == null) + { + throw new ArgumentNullException("s"); + } + + if (s.IndexOf('&') == -1) + { + return s; + } + + var entity = new StringBuilder(); + var output = new StringBuilder(); + var len = s.Length; + // 0 -> nothing, + // 1 -> right after '&' + // 2 -> between '&' and ';' but no '#' + // 3 -> '#' found after '&' and getting numbers + var state = 0; + var number = 0; + var have_trailing_digits = false; + + for (var i = 0; i < len; i++) + { + var c = s[i]; + if (state == 0) + { + if (c == '&') + { + entity.Append(c); + state = 1; + } + else + { + output.Append(c); + } + continue; + } + + if (c == '&') + { + state = 1; + if (have_trailing_digits) + { + entity.Append(number.ToString(CultureInfo.InvariantCulture)); + have_trailing_digits = false; + } + + output.Append(entity.ToString()); + entity.Length = 0; + entity.Append('&'); + continue; + } + + if (state == 1) + { + if (c == ';') + { + state = 0; + output.Append(entity.ToString()); + output.Append(c); + entity.Length = 0; + } + else + { + number = 0; + state = c != '#' ? 2 : 3; + entity.Append(c); + } + } + else if (state == 2) + { + entity.Append(c); + if (c == ';') + { + var key = entity.ToString(); + if (key.Length > 1 && Entities.ContainsKey(key.Substring(1, key.Length - 2))) + { + key = Entities[key.Substring(1, key.Length - 2)].ToString(); + } + + output.Append(key); + state = 0; + entity.Length = 0; + } + } + else if (state == 3) + { + if (c == ';') + { + if (number > 65535) + { + output.Append("&#"); + output.Append(number.ToString(CultureInfo.InvariantCulture)); + output.Append(";"); + } + else + { + output.Append((char) number); + } + state = 0; + entity.Length = 0; + have_trailing_digits = false; + } + else if (Char.IsDigit(c)) + { + number = number*10 + (c - '0'); + have_trailing_digits = true; + } + else + { + state = 2; + if (have_trailing_digits) + { + entity.Append(number.ToString(CultureInfo.InvariantCulture)); + have_trailing_digits = false; + } + entity.Append(c); + } + } + } + + if (entity.Length > 0) + { + output.Append(entity.ToString()); + } + else if (have_trailing_digits) + { + output.Append(number.ToString(CultureInfo.InvariantCulture)); + } + return output.ToString(); + } + + /// + /// Decodes an HTML-encoded string and sends the resulting output to a TextWriter output stream. + /// + /// The HTML string to decode + /// The TextWriter output stream containing the decoded string. + public static void HtmlDecode(string s, TextWriter output) + { + if (s != null) + { + output.Write(HtmlDecode(s)); + } + } + + /// + /// HTML-encodes a string and returns the encoded string. + /// + /// The text string to encode. + /// The HTML-encoded text. + public static string HtmlEncode(string s) + { + if (s == null) + { + return null; + } + + var needEncode = false; + for (var i = 0; i < s.Length; i++) + { + var c = s[i]; + if (c == '&' || c == '"' || c == '<' || c == '>' || c > 159) + { + needEncode = true; + break; + } + } + + if (!needEncode) + { + return s; + } + + var output = new StringBuilder(); + + var len = s.Length; + for (var i = 0; i < len; i++) + { + switch (s[i]) + { + case '&': + output.Append("&"); + break; + case '>': + output.Append(">"); + break; + case '<': + output.Append("<"); + break; + case '"': + output.Append("""); + break; + default: + // MS starts encoding with &# from 160 and stops at 255. + // We don't do that. One reason is the 65308/65310 unicode + // characters that look like '<' and '>'. +#if TARGET_JVM + if (s [i] > 159 && s [i] < 256) { +#else + if (s[i] > 159) + { +#endif + output.Append("&#"); + output.Append(((int) s[i]).ToString(CultureInfo.InvariantCulture)); + output.Append(";"); + } + else + { + output.Append(s[i]); + } + break; + } + } + return output.ToString(); + } + + /// + /// HTML-encodes a string and sends the resulting output to a TextWriter output stream. + /// + /// The string to encode. + /// The TextWriter output stream containing the encoded string. + public static void HtmlEncode(string s, TextWriter output) + { + if (s != null) + { + output.Write(HtmlEncode(s)); + } + } + + public static string UrlPathEncode(string s) + { + if (string.IsNullOrEmpty(s)) + return s; + + var result = new MemoryStream(); + var length = s.Length; + for (var i = 0; i < length; i++) + { + UrlPathEncodeChar(s[i], result); + } + + var bytes = result.ToArray(); + return Encoding.ASCII.GetString(bytes, 0, bytes.Length); + } + + private static void UrlPathEncodeChar(char c, Stream result) + { + if (c < 33 || c > 126) + { + var bIn = Encoding.UTF8.GetBytes(c.ToString()); + for (var i = 0; i < bIn.Length; i++) + { + result.WriteByte((byte) '%'); + var idx = bIn[i] >> 4; + result.WriteByte((byte) hexChars[idx]); + idx = bIn[i] & 0x0F; + result.WriteByte((byte) hexChars[idx]); + } + } + else if (c == ' ') + { + result.WriteByte((byte) '%'); + result.WriteByte((byte) '2'); + result.WriteByte((byte) '0'); + } + else + result.WriteByte((byte) c); + } + + public static NameValueCollection ParseQueryString(string query) + { + return ParseQueryString(query, Encoding.UTF8); + } + + public static NameValueCollection ParseQueryString(string query, Encoding encoding) + { + if (query == null) + throw new ArgumentNullException("query"); + if (encoding == null) + throw new ArgumentNullException("encoding"); + if (query.Length == 0 || (query.Length == 1 && query[0] == '?')) + return new NameValueCollection(); + if (query[0] == '?') + query = query.Substring(1); + + var result = new NameValueCollection(); + ParseQueryString(query, encoding, result); + return result; + } + + internal static void ParseQueryString(string query, Encoding encoding, NameValueCollection result) + { + if (query.Length == 0) + { + return; + } + + var decoded = HtmlDecode(query); + var decodedLength = decoded.Length; + var namePos = 0; + var first = true; + while (namePos <= decodedLength) + { + int valuePos = -1, valueEnd = -1; + for (var q = namePos; q < decodedLength; q++) + { + if (valuePos == -1 && decoded[q] == '=') + { + valuePos = q + 1; + } + else if (decoded[q] == '&') + { + valueEnd = q; + break; + } + } + + if (first) + { + first = false; + if (decoded[namePos] == '?') + { + namePos++; + } + } + + string name; + if (valuePos == -1) + { + name = null; + valuePos = namePos; + } + else + { + name = UrlDecode(decoded.Substring(namePos, valuePos - namePos - 1), encoding); + } + if (valueEnd < 0) + { + namePos = -1; + valueEnd = decoded.Length; + } + else + { + namePos = valueEnd + 1; + } + var value = UrlDecode(decoded.Substring(valuePos, valueEnd - valuePos), encoding); + + result.Add(name, value); + if (namePos == -1) + { + break; + } + } + } + + #endregion // Methods + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net40/Hammock/Mono/WebHeaderCollection.cs b/trunk/hammock/src/net40/Hammock/Mono/WebHeaderCollection.cs new file mode 100644 index 0000000..258fb18 --- /dev/null +++ b/trunk/hammock/src/net40/Hammock/Mono/WebHeaderCollection.cs @@ -0,0 +1,625 @@ +// +// System.Net.WebHeaderCollection +// +// Authors: +// Lawrence Pit (loz@cable.a2000.nl) +// Gonzalo Paniagua Javier (gonzalo@ximian.com) +// Miguel de Icaza (miguel@novell.com) +// +// Copyright 2003 Ximian, Inc. (http://www.ximian.com) +// Copyright 2007 Novell, Inc. (http://www.novell.com) +// +// +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + + +using System; +using System.Collections; +using System.Collections.Specialized; +using System.Net; +using System.Runtime.InteropServices; +using System.Text; + +// See RFC 2068 par 4.2 Message Headers + +namespace Mono.Net +{ + [Serializable] + [ComVisible(true)] + public class WebHeaderCollection : NameValueCollection + { + private static readonly Hashtable _restricted; + private static readonly Hashtable _multiValue; + + private static readonly char[] tspecials = + new[] + { + '(', ')', '<', '>', '@', + ',', ';', ':', '\\', '"', + '/', '[', ']', '?', '=', + '{', '}', ' ', '\t' + }; + + private readonly bool internallyCreated; + + // Static Initializer + + static WebHeaderCollection() + { + // the list of restricted header names as defined + // by the ms.net spec + _restricted = new Hashtable(StringComparer.InvariantCultureIgnoreCase) + { + {"accept", true}, + {"connection", true}, + {"content-length", true}, + {"content-type", true}, + {"date", true}, + {"expect", true}, + {"host", true}, + {"if-modified-since", true}, + {"range", true}, + {"referer", true}, + {"transfer-encoding", true}, + {"user-agent", true} + }; + + // see par 14 of RFC 2068 to see which header names + // accept multiple values each separated by a comma + _multiValue = new Hashtable(StringComparer.InvariantCultureIgnoreCase) + { + {"accept", true}, + {"accept-charset", true}, + {"accept-encoding", true}, + {"accept-language", true}, + {"accept-ranges", true}, + {"allow", true}, + {"authorization", true}, + {"cache-control", true}, + {"connection", true}, + {"content-encoding", true}, + {"content-language", true}, + {"expect", true}, + {"if-match", true}, + {"if-none-match", true}, + {"proxy-authenticate", true}, + {"public", true}, + {"range", true}, + {"transfer-encoding", true}, + {"upgrade", true}, + {"vary", true}, + {"via", true}, + {"warning", true}, + {"www-authenticate", true}, + {"set-cookie", true}, + {"set-cookie2", true} + }; + + // Extra + } + + // Constructors + + public WebHeaderCollection() + { + } + + internal WebHeaderCollection(bool internallyCreated) + { + this.internallyCreated = internallyCreated; + } + + public override string[] AllKeys + { + get { return (base.AllKeys); } + } + + public override int Count + { + get { return (base.Count); } + } + + public override KeysCollection Keys + { + get { return (base.Keys); } + } + + public string this[HttpRequestHeader hrh] + { + get { return Get(RequestHeaderToString(hrh)); } + + set { Add(RequestHeaderToString(hrh), value); } + } + + public string this[HttpResponseHeader hrh] + { + get { return Get(ResponseHeaderToString(hrh)); } + + set { Add(ResponseHeaderToString(hrh), value); } + } + + // Methods + + public void Add(string header) + { + if (header == null) + throw new ArgumentNullException("header"); + var pos = header.IndexOf(':'); + if (pos == -1) + throw new ArgumentException("no colon found", "header"); + Add(header.Substring(0, pos), + header.Substring(pos + 1)); + } + + public override void Add(string name, string value) + { + if (name == null) + throw new ArgumentNullException("name"); + if (internallyCreated && IsRestricted(name)) + throw new ArgumentException("This header must be modified with the appropiate property."); + AddWithoutValidate(name, value); + } + + protected void AddWithoutValidate(string headerName, string headerValue) + { + if (!IsHeaderName(headerName)) + throw new ArgumentException("invalid header name: " + headerName, "headerName"); + headerValue = headerValue == null ? String.Empty : headerValue.Trim(); + if (!IsHeaderValue(headerValue)) + throw new ArgumentException("invalid header value: " + headerValue, "headerValue"); + base.Add(headerName, headerValue); + } + + public override string[] GetValues(string header) + { + if (header == null) + throw new ArgumentNullException("header"); + + var values = base.GetValues(header); + if (values == null || values.Length == 0) + return null; + + /* + if (IsMultiValue (header)) { + values = GetMultipleValues (values); + } + */ + + return values; + } + + public override string[] GetValues(int index) + { + var values = base.GetValues(index); + if (values == null || values.Length == 0) + { + return (null); + } + + return (values); + } + + /* Now i wonder why this is here... + static string [] GetMultipleValues (string [] values) + { + ArrayList mvalues = new ArrayList (values.Length); + StringBuilder sb = null; + for (int i = 0; i < values.Length; ++i) { + string val = values [i]; + if (val.IndexOf (',') == -1) { + mvalues.Add (val); + continue; + } + + if (sb == null) + sb = new StringBuilder (); + + bool quote = false; + for (int k = 0; k < val.Length; k++) { + char c = val [k]; + if (c == '"') { + quote = !quote; + } else if (!quote && c == ',') { + mvalues.Add (sb.ToString ().Trim ()); + sb.Length = 0; + continue; + } + sb.Append (c); + } + + if (sb.Length > 0) { + mvalues.Add (sb.ToString ().Trim ()); + sb.Length = 0; + } + } + + return (string []) mvalues.ToArray (typeof (string)); + } + */ + + public static bool IsRestricted(string headerName) + { + if (headerName == null) + throw new ArgumentNullException("headerName"); + + if (headerName == "") // MS throw nullexception here! + throw new ArgumentException("empty string", "headerName"); + + return _restricted.ContainsKey(headerName); + } + + public static bool IsRestricted(string headerName, bool response) + { + throw new NotImplementedException(); + } + + public override void Remove(string name) + { + if (name == null) + throw new ArgumentNullException("name"); + if (internallyCreated && IsRestricted(name)) + throw new ArgumentException("restricted header"); + base.Remove(name); + } + + public override void Set(string name, string value) + { + if (name == null) + throw new ArgumentNullException("name"); + if (internallyCreated && IsRestricted(name)) + throw new ArgumentException("restricted header"); + if (!IsHeaderName(name)) + throw new ArgumentException("invalid header name"); + value = value == null ? String.Empty : value.Trim(); + if (!IsHeaderValue(value)) + throw new ArgumentException("invalid header value"); + base.Set(name, value); + } + + public byte[] ToByteArray() + { + return Encoding.UTF8.GetBytes(ToString()); + } + + public override string ToString() + { + var sb = new StringBuilder(); + + var count = base.Count; + for (var i = 0; i < count; i++) + sb.Append(GetKey(i)) + .Append(": ") + .Append(Get(i)) + .Append("\r\n"); + + return sb.Append("\r\n").ToString(); + } + + public override string Get(int index) + { + return (base.Get(index)); + } + + public override string Get(string name) + { + return (base.Get(name)); + } + + public override string GetKey(int index) + { + return (base.GetKey(index)); + } + + public void Add(HttpRequestHeader header, string value) + { + Add(RequestHeaderToString(header), value); + } + + public void Remove(HttpRequestHeader header) + { + Remove(RequestHeaderToString(header)); + } + + public void Set(HttpRequestHeader header, string value) + { + Set(RequestHeaderToString(header), value); + } + + public void Add(HttpResponseHeader header, string value) + { + Add(ResponseHeaderToString(header), value); + } + + public void Remove(HttpResponseHeader header) + { + Remove(ResponseHeaderToString(header)); + } + + public void Set(HttpResponseHeader header, string value) + { + Set(ResponseHeaderToString(header), value); + } + + private static string RequestHeaderToString(HttpRequestHeader value) + { + switch (value) + { + case HttpRequestHeader.CacheControl: + return "cache-control"; + case HttpRequestHeader.Connection: + return "connection"; + case HttpRequestHeader.Date: + return "date"; + case HttpRequestHeader.KeepAlive: + return "keep-alive"; + case HttpRequestHeader.Pragma: + return "pragma"; + case HttpRequestHeader.Trailer: + return "trailer"; + case HttpRequestHeader.TransferEncoding: + return "transfer-encoding"; + case HttpRequestHeader.Upgrade: + return "upgrade"; + case HttpRequestHeader.Via: + return "via"; + case HttpRequestHeader.Warning: + return "warning"; + case HttpRequestHeader.Allow: + return "allow"; + case HttpRequestHeader.ContentLength: + return "content-length"; + case HttpRequestHeader.ContentType: + return "content-type"; + case HttpRequestHeader.ContentEncoding: + return "content-encoding"; + case HttpRequestHeader.ContentLanguage: + return "content-language"; + case HttpRequestHeader.ContentLocation: + return "content-location"; + case HttpRequestHeader.ContentMd5: + return "content-md5"; + case HttpRequestHeader.ContentRange: + return "content-range"; + case HttpRequestHeader.Expires: + return "expires"; + case HttpRequestHeader.LastModified: + return "last-modified"; + case HttpRequestHeader.Accept: + return "accept"; + case HttpRequestHeader.AcceptCharset: + return "accept-charset"; + case HttpRequestHeader.AcceptEncoding: + return "accept-encoding"; + case HttpRequestHeader.AcceptLanguage: + return "accept-language"; + case HttpRequestHeader.Authorization: + return "authorization"; + case HttpRequestHeader.Cookie: + return "cookie"; + case HttpRequestHeader.Expect: + return "expect"; + case HttpRequestHeader.From: + return "from"; + case HttpRequestHeader.Host: + return "host"; + case HttpRequestHeader.IfMatch: + return "if-match"; + case HttpRequestHeader.IfModifiedSince: + return "if-modified-since"; + case HttpRequestHeader.IfNoneMatch: + return "if-none-match"; + case HttpRequestHeader.IfRange: + return "if-range"; + case HttpRequestHeader.IfUnmodifiedSince: + return "if-unmodified-since"; + case HttpRequestHeader.MaxForwards: + return "max-forwards"; + case HttpRequestHeader.ProxyAuthorization: + return "proxy-authorization"; + case HttpRequestHeader.Referer: + return "referer"; + case HttpRequestHeader.Range: + return "range"; + case HttpRequestHeader.Te: + return "te"; + case HttpRequestHeader.Translate: + return "translate"; + case HttpRequestHeader.UserAgent: + return "user-agent"; + default: + throw new InvalidOperationException(); + } + } + + + private static string ResponseHeaderToString(HttpResponseHeader value) + { + switch (value) + { + case HttpResponseHeader.CacheControl: + return "cache-control"; + case HttpResponseHeader.Connection: + return "connection"; + case HttpResponseHeader.Date: + return "date"; + case HttpResponseHeader.KeepAlive: + return "keep-alive"; + case HttpResponseHeader.Pragma: + return "pragma"; + case HttpResponseHeader.Trailer: + return "trailer"; + case HttpResponseHeader.TransferEncoding: + return "transfer-encoding"; + case HttpResponseHeader.Upgrade: + return "upgrade"; + case HttpResponseHeader.Via: + return "via"; + case HttpResponseHeader.Warning: + return "warning"; + case HttpResponseHeader.Allow: + return "allow"; + case HttpResponseHeader.ContentLength: + return "content-length"; + case HttpResponseHeader.ContentType: + return "content-type"; + case HttpResponseHeader.ContentEncoding: + return "content-encoding"; + case HttpResponseHeader.ContentLanguage: + return "content-language"; + case HttpResponseHeader.ContentLocation: + return "content-location"; + case HttpResponseHeader.ContentMd5: + return "content-md5"; + case HttpResponseHeader.ContentRange: + return "content-range"; + case HttpResponseHeader.Expires: + return "expires"; + case HttpResponseHeader.LastModified: + return "last-modified"; + case HttpResponseHeader.AcceptRanges: + return "accept-ranges"; + case HttpResponseHeader.Age: + return "age"; + case HttpResponseHeader.ETag: + return "etag"; + case HttpResponseHeader.Location: + return "location"; + case HttpResponseHeader.ProxyAuthenticate: + return "proxy-authenticate"; + case HttpResponseHeader.RetryAfter: + return "RetryAfter"; + case HttpResponseHeader.Server: + return "server"; + case HttpResponseHeader.SetCookie: + return "set-cookie"; + case HttpResponseHeader.Vary: + return "vary"; + case HttpResponseHeader.WwwAuthenticate: + return "www-authenticate"; + default: + throw new InvalidOperationException(); + } + } + + public override IEnumerator GetEnumerator() + { + return (base.GetEnumerator()); + } + + // Internal Methods + + // With this we don't check for invalid characters in header. See bug #55994. + internal void SetInternal(string header) + { + var pos = header.IndexOf(':'); + if (pos == -1) + throw new ArgumentException("no colon found", "header"); + + SetInternal(header.Substring(0, pos), header.Substring(pos + 1)); + } + + internal void SetInternal(string name, string value) + { + value = value == null ? String.Empty : value.Trim(); + if (!IsHeaderValue(value)) + throw new ArgumentException("invalid header value"); + + if (IsMultiValue(name)) + { + base.Add(name, value); + } + else + { + base.Remove(name); + base.Set(name, value); + } + } + + internal void RemoveAndAdd(string name, string value) + { + value = value == null ? String.Empty : value.Trim(); + + base.Remove(name); + base.Set(name, value); + } + + internal void RemoveInternal(string name) + { + if (name == null) + throw new ArgumentNullException("name"); + base.Remove(name); + } + + internal static bool IsMultiValue(string headerName) + { + return !string.IsNullOrEmpty(headerName) && _multiValue.ContainsKey(headerName); + } + + internal static bool IsHeaderValue(string value) + { + // TEXT any 8 bit value except CTL's (0-31 and 127) + // but including \r\n space and \t + // after a newline at least one space or \t must follow + // certain header fields allow comments () + + var len = value.Length; + for (var i = 0; i < len; i++) + { + var c = value[i]; + if (c == 127) + return false; + if (c < 0x20 && (c != '\r' && c != '\n' && c != '\t')) + return false; + if (c == '\n' && ++i < len) + { + c = value[i]; + if (c != ' ' && c != '\t') + return false; + } + } + + return true; + } + + internal static bool IsHeaderName(string name) + { + // token = 1* + // tspecials = "(" | ")" | "<" | ">" | "@" + // | "," | ";" | ":" | "\" | <"> + // | "/" | "[" | "]" | "?" | "=" + // | "{" | "}" | SP | HT + + if (string.IsNullOrEmpty(name)) + return false; + + var len = name.Length; + for (var i = 0; i < len; i++) + { + var c = name[i]; + if (c < 0x20 || c >= 0x7f) + return false; + } + + return name.IndexOfAny(tspecials) == -1; + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/net40/Hammock/Properties/AssemblyInfo.cs b/trunk/hammock/src/net40/Hammock/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..2978412 --- /dev/null +++ b/trunk/hammock/src/net40/Hammock/Properties/AssemblyInfo.cs @@ -0,0 +1,38 @@ +using System.Reflection; +using System.Runtime.InteropServices; +using System.Security; + +// 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("Hammock")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Apitize")] +[assembly: AssemblyProduct("Hammock")] +[assembly: AssemblyCopyright("Copyright © Daniel Crenna and Jason Diller")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: AllowPartiallyTrustedCallers] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("f7ca855b-bb0d-4b54-a093-55dce9e57012")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: SecurityRules(SecurityRuleSet.Level1)] diff --git a/trunk/hammock/src/net40/Hammock/key.snk b/trunk/hammock/src/net40/Hammock/key.snk new file mode 100644 index 0000000000000000000000000000000000000000..ed404cd2b98794be9654705e03f356546393f826 GIT binary patch literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50097rX2mggb`z#srv=C&u+tgpp^FW^M**Pm zRQO}lqnc-@hC)KUY6}|R0cKtk;e9lD=(rwB+as(MXDb+_+G52=`KS_Isyvj`Lv>t; zyv1GdtazzRJ@~Ikqx~TP`bG%Rj^JO-mWk-SOVW*S-BQylz(lnRD^aU;42ZrfNBOmJ z+wu|=RKI)(tf=kVs&r1#mU7ia^YtqD_N!R!)Mb<04J(7v0b9Z5@VQ zC~!{_9Az!Ik)85nzpjNic*BZ(iJSs=#CEi_EvxKd8YjX}1j8+N2zqaVEoTb{xxA?( zVt8G+Ou_+Iw{;ElEmyRR47jL`4u7RS+VW6jwp=Ns#vPw_+s*hGzc&Int6mW=r8E?B z)qgXtnZUe(Tz`ffc*>2e+Br!=fqNzeZTr56NZVVsD%VFGDVkAw@hwc5(-@Qd=aTqV z(nhX4LsE@8Bh?ITr5k1jJOPeVdipW-lxZ`6M6%|*SG?o?o}O<)9!yjl130Go;PJF4 iINMdx^S=SKvcAYJIsZ6c08B+-O^Q|BqJw=PJm;e#=pQ8j literal 0 HcmV?d00001 diff --git a/trunk/hammock/src/net40/ICSharpCode.SharpZipLib.Silverlight/ICSharpCode.SharpZipLib.Silverlight.csproj b/trunk/hammock/src/net40/ICSharpCode.SharpZipLib.Silverlight/ICSharpCode.SharpZipLib.Silverlight.csproj new file mode 100644 index 0000000..9815faf --- /dev/null +++ b/trunk/hammock/src/net40/ICSharpCode.SharpZipLib.Silverlight/ICSharpCode.SharpZipLib.Silverlight.csproj @@ -0,0 +1,279 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {5953279F-F478-4D5F-9906-03D56CE2DA2D} + {A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + ICSharpCode.SharpZipLib.Silverlight + ICSharpCode.SharpZipLib.Silverlight + Silverlight + v4.0 + $(TargetFrameworkVersion) + false + true + true + false + + + + + v3.5 + + + true + full + false + Bin\Debug + TRACE;DEBUG;SILVERLIGHT,SL4 + true + true + prompt + 4 + + + pdbonly + true + Bin\Release + TRACE;SILVERLIGHT,SL4 + true + true + prompt + 4 + + + true + + + key.snk + + + + + + + + + + + + + + BZip2\BZip2.cs + + + BZip2\BZip2Constants.cs + + + BZip2\BZip2Exception.cs + + + BZip2\BZip2InputStream.cs + + + BZip2\BZip2OutputStream.cs + + + Checksums\Adler32.cs + + + Checksums\CRC32.cs + + + Checksums\IChecksum.cs + + + Checksums\StrangeCRC.cs + + + Compat\Extensions.cs + + + Core\FileSystemScanner.cs + + + Core\INameTransform.cs + + + Core\IScanFilter.cs + + + Core\NameFilter.cs + + + Core\PathFilter.cs + + + Core\StreamUtils.cs + + + Encryption\PkzipClassic.cs + + + GZip\GZIPConstants.cs + + + GZip\GZipException.cs + + + GZip\GzipInputStream.cs + + + GZip\GzipOutputStream.cs + + + Serialization\ISerializable.cs + + + Serialization\NonSerializedAttribute.cs + + + Serialization\SerializableAttribute.cs + + + Serialization\SerializableBase.cs + + + Serialization\SerializableDateTime.cs + + + Serialization\SerializableString.cs + + + Serialization\SerializationInfo.cs + + + Serialization\XmlFormatter.Deserialize.cs + + + Serialization\XmlFormatter.Serialize.cs + + + SharpZipBaseException.cs + + + Tar\InvalidHeaderException.cs + + + Tar\TarArchive.cs + + + Tar\TarBuffer.cs + + + Tar\TarEntry.cs + + + Tar\TarException.cs + + + Tar\TarHeader.cs + + + Tar\TarInputStream.cs + + + Tar\TarOutputStream.cs + + + Zip\Compression\Deflater.cs + + + Zip\Compression\DeflaterConstants.cs + + + Zip\Compression\DeflaterEngine.cs + + + Zip\Compression\DeflaterHuffman.cs + + + Zip\Compression\DeflaterPending.cs + + + Zip\Compression\Inflater.cs + + + Zip\Compression\InflaterDynHeader.cs + + + Zip\Compression\InflaterHuffmanTree.cs + + + Zip\Compression\PendingBuffer.cs + + + Zip\Compression\Streams\DeflaterOutputStream.cs + + + Zip\Compression\Streams\InflaterInputStream.cs + + + Zip\Compression\Streams\OutputWindow.cs + + + Zip\Compression\Streams\StreamManipulator.cs + + + Zip\FastZip.cs + + + Zip\IEntryFactory.cs + + + Zip\ZipConstants.cs + + + Zip\ZipEntry.cs + + + Zip\ZipEntryFactory.cs + + + Zip\ZipException.cs + + + Zip\ZipExtraData.cs + + + Zip\ZipFile.cs + + + Zip\ZipHelperStream.cs + + + Zip\ZipInputStream.cs + + + Zip\ZipNameTransform.cs + + + Zip\ZipOutputStream.cs + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/trunk/hammock/src/net40/ICSharpCode.SharpZipLib.Silverlight/Properties/AssemblyInfo.cs b/trunk/hammock/src/net40/ICSharpCode.SharpZipLib.Silverlight/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..970fa82 --- /dev/null +++ b/trunk/hammock/src/net40/ICSharpCode.SharpZipLib.Silverlight/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ICSharpCode.SharpZipLib.Silverlight")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ICSharpCode.SharpZipLib.Silverlight")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("72802a97-fc94-4f09-b6d3-6796a938b0d0")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/trunk/hammock/src/net40/ICSharpCode.SharpZipLib.Silverlight/key.snk b/trunk/hammock/src/net40/ICSharpCode.SharpZipLib.Silverlight/key.snk new file mode 100644 index 0000000000000000000000000000000000000000..ed404cd2b98794be9654705e03f356546393f826 GIT binary patch literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50097rX2mggb`z#srv=C&u+tgpp^FW^M**Pm zRQO}lqnc-@hC)KUY6}|R0cKtk;e9lD=(rwB+as(MXDb+_+G52=`KS_Isyvj`Lv>t; zyv1GdtazzRJ@~Ikqx~TP`bG%Rj^JO-mWk-SOVW*S-BQylz(lnRD^aU;42ZrfNBOmJ z+wu|=RKI)(tf=kVs&r1#mU7ia^YtqD_N!R!)Mb<04J(7v0b9Z5@VQ zC~!{_9Az!Ik)85nzpjNic*BZ(iJSs=#CEi_EvxKd8YjX}1j8+N2zqaVEoTb{xxA?( zVt8G+Ou_+Iw{;ElEmyRR47jL`4u7RS+VW6jwp=Ns#vPw_+s*hGzc&Int6mW=r8E?B z)qgXtnZUe(Tz`ffc*>2e+Br!=fqNzeZTr56NZVVsD%VFGDVkAw@hwc5(-@Qd=aTqV z(nhX4LsE@8Bh?ITr5k1jJOPeVdipW-lxZ`6M6%|*SG?o?o}O<)9!yjl130Go;PJF4 iINMdx^S=SKvcAYJIsZ6c08B+-O^Q|BqJw=PJm;e#=pQ8j literal 0 HcmV?d00001 diff --git a/trunk/hammock/src/net40/ICSharpCode.SharpZipLib.WindowsPhone/ICSharpCode.SharpZipLib.WindowsPhone.csproj b/trunk/hammock/src/net40/ICSharpCode.SharpZipLib.WindowsPhone/ICSharpCode.SharpZipLib.WindowsPhone.csproj new file mode 100644 index 0000000..3a744fb --- /dev/null +++ b/trunk/hammock/src/net40/ICSharpCode.SharpZipLib.WindowsPhone/ICSharpCode.SharpZipLib.WindowsPhone.csproj @@ -0,0 +1,257 @@ + + + + Debug + AnyCPU + 10.0.20506 + 2.0 + {BF04A546-D681-4F5A-AC41-CFC67CAEC66E} + {C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + ICSharpCode.SharpZipLib.WindowsPhone + ICSharpCode.SharpZipLib.WindowsPhone + v4.0 + $(TargetFrameworkVersion) + WindowsPhone + Silverlight + false + true + true + + + true + full + false + Bin\Debug + DEBUG;TRACE;SILVERLIGHT + true + true + prompt + 4 + + + pdbonly + true + Bin\Release + TRACE;SILVERLIGHT + true + true + prompt + 4 + + + + + + + + + + + + + BZip2\BZip2.cs + + + BZip2\BZip2Constants.cs + + + BZip2\BZip2Exception.cs + + + BZip2\BZip2InputStream.cs + + + BZip2\BZip2OutputStream.cs + + + Checksums\Adler32.cs + + + Checksums\CRC32.cs + + + Checksums\IChecksum.cs + + + Checksums\StrangeCRC.cs + + + Compat\Extensions.cs + + + Core\FileSystemScanner.cs + + + Core\INameTransform.cs + + + Core\IScanFilter.cs + + + Core\NameFilter.cs + + + Core\PathFilter.cs + + + Core\StreamUtils.cs + + + Encryption\PkzipClassic.cs + + + GZip\GZIPConstants.cs + + + GZip\GZipException.cs + + + GZip\GzipInputStream.cs + + + GZip\GzipOutputStream.cs + + + Serialization\ISerializable.cs + + + Serialization\NonSerializedAttribute.cs + + + Serialization\SerializableAttribute.cs + + + Serialization\SerializableBase.cs + + + Serialization\SerializableDateTime.cs + + + Serialization\SerializableString.cs + + + Serialization\SerializationInfo.cs + + + Serialization\XmlFormatter.Deserialize.cs + + + Serialization\XmlFormatter.Serialize.cs + + + SharpZipBaseException.cs + + + Tar\InvalidHeaderException.cs + + + Tar\TarArchive.cs + + + Tar\TarBuffer.cs + + + Tar\TarEntry.cs + + + Tar\TarException.cs + + + Tar\TarHeader.cs + + + Tar\TarInputStream.cs + + + Tar\TarOutputStream.cs + + + Zip\Compression\Deflater.cs + + + Zip\Compression\DeflaterConstants.cs + + + Zip\Compression\DeflaterEngine.cs + + + Zip\Compression\DeflaterHuffman.cs + + + Zip\Compression\DeflaterPending.cs + + + Zip\Compression\Inflater.cs + + + Zip\Compression\InflaterDynHeader.cs + + + Zip\Compression\InflaterHuffmanTree.cs + + + Zip\Compression\PendingBuffer.cs + + + Zip\Compression\Streams\DeflaterOutputStream.cs + + + Zip\Compression\Streams\InflaterInputStream.cs + + + Zip\Compression\Streams\OutputWindow.cs + + + Zip\Compression\Streams\StreamManipulator.cs + + + Zip\FastZip.cs + + + Zip\IEntryFactory.cs + + + Zip\ZipConstants.cs + + + Zip\ZipEntry.cs + + + Zip\ZipEntryFactory.cs + + + Zip\ZipException.cs + + + Zip\ZipExtraData.cs + + + Zip\ZipFile.cs + + + Zip\ZipHelperStream.cs + + + Zip\ZipInputStream.cs + + + Zip\ZipNameTransform.cs + + + Zip\ZipOutputStream.cs + + + + + + + + \ No newline at end of file diff --git a/trunk/hammock/src/net40/ICSharpCode.SharpZipLib.WindowsPhone/Properties/AssemblyInfo.cs b/trunk/hammock/src/net40/ICSharpCode.SharpZipLib.WindowsPhone/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..9ed2ff1 --- /dev/null +++ b/trunk/hammock/src/net40/ICSharpCode.SharpZipLib.WindowsPhone/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ICSharpCode.SharpZipLib.WindowsPhone")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ICSharpCode.SharpZipLib.WindowsPhone")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("4b494cbd-3b70-4aab-b4cf-f827066a1a6a")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/trunk/hammock/src/netCF/Hammock.Compact/Hammock.Compact.csproj b/trunk/hammock/src/netCF/Hammock.Compact/Hammock.Compact.csproj new file mode 100644 index 0000000..66cf1dc --- /dev/null +++ b/trunk/hammock/src/netCF/Hammock.Compact/Hammock.Compact.csproj @@ -0,0 +1,403 @@ + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {392866D3-D060-4F54-B761-2BAF509989CF} + Library + Properties + Hammock.Compact + Hammock.Compact + {4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + WindowsCE + E2BECB1F-8C8C-41ba-B736-9BE7D946A398 + 5.0 + Hammock + v3.5 + Windows CE + + + + + true + full + false + ..\..\..\bin\lib\Compact\ + TRACE;DEBUG;WindowsCE NETCF + true + true + prompt + 512 + 4 + Off + + + pdbonly + true + ..\..\..\bin\lib\Compact\ + TRACE;WindowsCE NETCF + true + true + prompt + 512 + 4 + Off + + + + + + + + + + + + + Attributes\INamedAttribute.cs + + + Attributes\IValidatingAttribute.cs + + + Attributes\Specialized\EntityAttribute.cs + + + Attributes\Specialized\HeaderAttribute.cs + + + Attributes\Specialized\ParameterAttribute.cs + + + Attributes\Specialized\UserAgentAttribute.cs + + + Attributes\Validation\BooleanToIntegerAttribute.cs + + + Attributes\Validation\DateTimeFormatAttribute.cs + + + Attributes\Validation\RequiredAttribute.cs + + + Attributes\Validation\SpecificationAttribute.cs + + + Attributes\Validation\ValidationAttribute.cs + + + Authentication\Basic\BasicAuthCredentials.cs + + + Authentication\IWebCredentials.cs + + + Authentication\OAuth\OAuthCredentials.cs + + + Authentication\OAuth\OAuthParameterHandling.cs + + + Authentication\OAuth\OAuthSignatureMethod.cs + + + Authentication\OAuth\OAuthToken.cs + + + Authentication\OAuth\OAuthTools.cs + + + Authentication\OAuth\OAuthType.cs + + + Authentication\OAuth\OAuthWebQuery.cs + + + Authentication\OAuth\OAuthWebQueryInfo.cs + + + Authentication\OAuth\OAuthWorkflow.cs + + + Caching\CacheFactory.cs + + + Caching\CacheMode.cs + + + Caching\CacheOptions.cs + + + Caching\ICache.cs + + + Caching\SimpleCache.cs + + + Extensions\CollectionExtensions.cs + + + Extensions\FormatExtensions.cs + + + Extensions\OAuthExtensions.cs + + + Extensions\ObjectExtensions.cs + + + Extensions\ReflectionExtensions.cs + + + Extensions\SpecificationExtensions.cs + + + Extensions\StringExtensions.cs + + + Extensions\TimeExtensions.cs + + + Extensions\WebExtensions.cs + + + IRestClient.cs + + + Model\PropertyChangedBase.cs + + + Mono\HttpUtility.cs + + + RestBase.cs + + + RestCallback.cs + + + RestClient.cs + + + RestRequest.cs + + + RestResponse.cs + + + Retries\ConnectionClosed.cs + + + Retries\IRetryCondition.cs + + + Retries\IRetryCustomCondition.cs + + + Retries\NetworkError.cs + + + Retries\RetryCondition.cs + + + Retries\RetryCustomCondition.cs + + + Retries\RetryErrorCondition.cs + + + Retries\RetryPolicy.cs + + + Retries\RetryResultCondition.cs + + + Retries\Timeout.cs + + + Serialization\DefaultJsonSerializer.cs + + + Serialization\HammockXmlSerializer.cs + + + Serialization\IDeserializer.cs + + + Serialization\ISerializer.cs + + + Serialization\JsonParser.cs + + + Serialization\Utf8Serializer.cs + + + Specifications\AndSpecification.cs + + + Specifications\CompositeSpecificationBase.cs + + + Specifications\HammockSpecification.cs + + + Specifications\ISpecification.cs + + + Specifications\NotSpecification.cs + + + Specifications\OrSpecification.cs + + + Streaming\StreamOptions.cs + + + Tasks\IRateLimitingRule.cs + + + Tasks\IRateLimitStatus.cs + + + Tasks\ITaskOptions.cs + + + Tasks\ITaskState.cs + + + Tasks\ITimedTask.cs + + + Tasks\RateLimitingRule.cs + + + Tasks\RateLimitType.cs + + + Tasks\TaskOptions.cs + + + Tasks\TaskState.cs + + + Tasks\TimedTask.cs + + + Validation\ValidationException.cs + + + Validation\ValidEmailSpecification.cs + + + Web\BasicAuthWebQuery.cs + + + Web\GetOrDelete.cs + + + Web\HttpCookieParameter.cs + + + Web\HttpPostParameter.cs + + + Web\HttpPostParameterType.cs + + + Web\IWebQueryInfo.cs + + + Web\Mocks\IMockable.cs + + + Web\Mocks\IWebResponse.cs + + + Web\Mocks\MockHttpWebRequest.cs + + + Web\Mocks\MockHttpWebResponse.cs + + + Web\Mocks\MockWebRequestFactory.cs + + + Web\Pair.cs + + + Web\PostOrPut.cs + + + Web\Triplet.cs + + + Web\WebCallback.cs + + + Web\WebEntity.cs + + + Web\WebHeader.cs + + + Web\WebHeaderCollection.cs + + + Web\WebMethod.cs + + + Web\WebPair.cs + + + Web\WebPairCollection.cs + + + Web\WebParameter.cs + + + Web\WebParameterCollection.cs + + + Web\WebQuery.Async.cs + + + Web\WebQuery.cs + + + Web\WebQueryAsyncResult.cs + + + Web\WebQueryRequestEventArgs.cs + + + Web\WebQueryResponseEventArgs.cs + + + Web\WebQueryResult.cs + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/trunk/hammock/src/netCF/Hammock.Compact/Mono/Security/Cryptography/BlockProcessor.cs b/trunk/hammock/src/netCF/Hammock.Compact/Mono/Security/Cryptography/BlockProcessor.cs new file mode 100644 index 0000000..2bcaddc --- /dev/null +++ b/trunk/hammock/src/netCF/Hammock.Compact/Mono/Security/Cryptography/BlockProcessor.cs @@ -0,0 +1,66 @@ +using System; +using System.Security.Cryptography; + +namespace Hammock.Mono.Security.Cryptography +{ + public class BlockProcessor + { + private ICryptoTransform transform; + private byte[] block; + private int blockSize; + private int blockCount; + + public BlockProcessor(ICryptoTransform transform) + : this(transform, transform.InputBlockSize) + { + } + + public BlockProcessor(ICryptoTransform transform, int blockSize) + { + this.transform = transform; + this.blockSize = blockSize; + this.block = new byte[blockSize]; + } + + ~BlockProcessor() + { + Array.Clear((Array)this.block, 0, this.blockSize); + } + + public void Initialize() + { + Array.Clear((Array)this.block, 0, this.blockSize); + this.blockCount = 0; + } + + public void Core(byte[] rgb) + { + this.Core(rgb, 0, rgb.Length); + } + + public void Core(byte[] rgb, int ib, int cb) + { + int count = Math.Min(this.blockSize - this.blockCount, cb); + Buffer.BlockCopy((Array)rgb, ib, (Array)this.block, this.blockCount, count); + this.blockCount += count; + if (this.blockCount == this.blockSize) + { + this.transform.TransformBlock(this.block, 0, this.blockSize, this.block, 0); + int num = (cb - count) / this.blockSize; + for (int index = 0; index < num; ++index) + { + this.transform.TransformBlock(rgb, count + ib, this.blockSize, this.block, 0); + count += this.blockSize; + } + this.blockCount = cb - count; + if (this.blockCount > 0) + Buffer.BlockCopy((Array)rgb, count + ib, (Array)this.block, 0, this.blockCount); + } + } + + public byte[] Final() + { + return this.transform.TransformFinalBlock(this.block, 0, this.blockCount); + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/netCF/Hammock.Compact/Mono/Security/Cryptography/HMACAlgorithm.cs b/trunk/hammock/src/netCF/Hammock.Compact/Mono/Security/Cryptography/HMACAlgorithm.cs new file mode 100644 index 0000000..c5bfde6 --- /dev/null +++ b/trunk/hammock/src/netCF/Hammock.Compact/Mono/Security/Cryptography/HMACAlgorithm.cs @@ -0,0 +1,111 @@ +using System; +using System.Security.Cryptography; + +namespace Hammock.Mono.Security.Cryptography +{ + internal class HMACAlgorithm + { + private HashAlgorithm algo; + private BlockProcessor block; + private byte[] hash; + private string hashName; + private byte[] key; + + public HashAlgorithm Algo + { + get + { + return this.algo; + } + } + + public string HashName + { + get + { + return this.hashName; + } + set + { + this.CreateHash(value); + } + } + + public byte[] Key + { + get + { + return this.key; + } + set + { + if (value != null && value.Length > 64) + this.key = this.algo.ComputeHash(value); + else if (value != null) + this.key = (byte[])value.Clone(); + } + } + + public HMACAlgorithm(string algoName) + { + this.CreateHash(algoName); + } + + ~HMACAlgorithm() + { + this.Dispose(); + } + + private void CreateHash(string algoName) + { + this.algo = HashAlgorithm.Create(algoName); + this.hashName = algoName; + this.block = new BlockProcessor((ICryptoTransform)this.algo, 8); + } + + public void Dispose() + { + if (this.key != null) + Array.Clear((Array)this.key, 0, this.key.Length); + } + + public void Initialize() + { + this.hash = (byte[])null; + this.block.Initialize(); + byte[] rgb = HMACAlgorithm.KeySetup(this.key, (byte)54); + this.algo.Initialize(); + this.block.Core(rgb); + Array.Clear((Array)rgb, 0, rgb.Length); + } + + private static byte[] KeySetup(byte[] key, byte padding) + { + byte[] numArray = new byte[64]; + for (int index = 0; index < key.Length; ++index) + numArray[index] = (byte)((uint)key[index] ^ (uint)padding); + for (int length = key.Length; length < 64; ++length) + numArray[length] = padding; + return numArray; + } + + public void Core(byte[] rgb, int ib, int cb) + { + this.block.Core(rgb, ib, cb); + } + + public byte[] Final() + { + this.block.Final(); + byte[] hash = this.algo.Hash; + byte[] numArray = HMACAlgorithm.KeySetup(this.key, (byte)92); + this.algo.Initialize(); + this.algo.TransformBlock(numArray, 0, numArray.Length, numArray, 0); + this.algo.TransformFinalBlock(hash, 0, hash.Length); + this.hash = this.algo.Hash; + Array.Clear((Array)numArray, 0, numArray.Length); + Array.Clear((Array)hash, 0, hash.Length); + return this.hash; + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/netCF/Hammock.Compact/Mono/Security/Cryptography/KeyBuilder.cs b/trunk/hammock/src/netCF/Hammock.Compact/Mono/Security/Cryptography/KeyBuilder.cs new file mode 100644 index 0000000..08fb0cb --- /dev/null +++ b/trunk/hammock/src/netCF/Hammock.Compact/Mono/Security/Cryptography/KeyBuilder.cs @@ -0,0 +1,28 @@ +using System.Security.Cryptography; + +namespace Hammock.Mono.Security.Cryptography +{ + public static class KeyBuilder + { + private static RandomNumberGenerator rng; + + private static RandomNumberGenerator Rng + { + get { return rng ?? (rng = RandomNumberGenerator.Create()); } + } + + public static byte[] Key(int size) + { + var data = new byte[size]; + Rng.GetBytes(data); + return data; + } + + public static byte[] IV(int size) + { + var data = new byte[size]; + Rng.GetBytes(data); + return data; + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/netCF/Hammock.Compact/Properties/AssemblyInfo.cs b/trunk/hammock/src/netCF/Hammock.Compact/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..2b98cc3 --- /dev/null +++ b/trunk/hammock/src/netCF/Hammock.Compact/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Hammock.Compact")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Hammock.Compact")] +[assembly: AssemblyCopyright("Copyright © Daniel Crenna and Jason Diller")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("3742e2d3-7b88-4663-816d-1c81cb853fb0")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.*")] + diff --git a/trunk/hammock/src/netCF/Hammock.Compact/Security/Cryptography/HMACSHA1.cs b/trunk/hammock/src/netCF/Hammock.Compact/Security/Cryptography/HMACSHA1.cs new file mode 100644 index 0000000..f9b0762 --- /dev/null +++ b/trunk/hammock/src/netCF/Hammock.Compact/Security/Cryptography/HMACSHA1.cs @@ -0,0 +1,112 @@ +using System; +using System.Security.Cryptography; +using Hammock.Mono.Security.Cryptography; + +namespace Hammock.Security.Cryptography +{ + public class HMACSHA1 : KeyedHashAlgorithm + { + private readonly HMACAlgorithm hmac; + private bool m_disposed; + + public override sealed byte[] Key + { + get + { + return base.Key; + } + set + { + this.hmac.Key = value; + base.Key = value; + } + } + + public string HashName + { + get + { + return this.hmac.HashName; + } + set + { + if (this.State == 0) + this.hmac.HashName = value; + } + } + + public HMACSHA1() + : this(KeyBuilder.Key(8)) + { + } + + public HMACSHA1(byte[] rgbKey) + { + this.hmac = new HMACAlgorithm("SHA1"); + this.HashSizeValue = 160; + this.Key = rgbKey; + this.m_disposed = false; + } + + ~HMACSHA1() + { + this.Dispose(false); + } + + protected override void Dispose(bool disposing) + { + if (!this.m_disposed) + { + if (this.hmac != null) + this.hmac.Dispose(); + base.Dispose(disposing); + this.m_disposed = true; + } + } + + public override void Initialize() + { + if (this.m_disposed) + throw new ObjectDisposedException("HMACSHA1"); + else if (!(this.hmac.Algo is SHA1)) + { + throw new InvalidCastException(string.Format("Invalid hash algorithm '{0}', expected '{1}'.", this.hmac.Algo == null ? (object)"none" : (object)this.hmac.Algo.GetType().ToString(), (object)"SHA1")); + } + else + { + this.State = 0; + this.hmac.Initialize(); + } + } + + protected override void HashCore(byte[] rgb, int ib, int cb) + { + if (this.m_disposed) + { + throw new ObjectDisposedException("HMACSHA1"); + } + else + { + if (this.State == 0) + { + this.Initialize(); + this.State = 1; + } + this.hmac.Core(rgb, ib, cb); + } + } + + protected override byte[] HashFinal() + { + if (this.m_disposed) + { + throw new ObjectDisposedException("HMACSHA1"); + } + else + { + this.State = 0; + return this.hmac.Final(); + } + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/netCF/Hammock.Compact/Security/Cryptography/KeyedHashAlgorithm.cs b/trunk/hammock/src/netCF/Hammock.Compact/Security/Cryptography/KeyedHashAlgorithm.cs new file mode 100644 index 0000000..0b9b9c0 --- /dev/null +++ b/trunk/hammock/src/netCF/Hammock.Compact/Security/Cryptography/KeyedHashAlgorithm.cs @@ -0,0 +1,55 @@ +using System; +using System.Security.Cryptography; + +namespace Hammock.Security.Cryptography +{ + public abstract class KeyedHashAlgorithm : HashAlgorithm + { + protected byte[] KeyValue; + + public virtual byte[] Key + { + get + { + return (byte[])this.KeyValue.Clone(); + } + set + { + if (this.State != 0) + { + throw new CryptographicException("Key can't be changed at this state."); + } + + this.ZeroizeKey(); + this.KeyValue = (byte[])value.Clone(); + } + } + + ~KeyedHashAlgorithm() + { + this.Dispose(false); + } + + protected override void Dispose(bool disposing) + { + this.ZeroizeKey(); + base.Dispose(disposing); + } + + private void ZeroizeKey() + { + if (this.KeyValue != null) + Array.Clear(this.KeyValue, 0, this.KeyValue.Length); + } + + public static new KeyedHashAlgorithm Create() + { + return Create("System.Security.Cryptography.KeyedHashAlgorithm"); + } + + public static new KeyedHashAlgorithm Create(string algName) + { + return (KeyedHashAlgorithm)CryptoConfig.CreateFromName(algName); + } + } +} \ No newline at end of file diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/Logo.ico b/trunk/hammock/src/packages/NUnit.2.5.10.11092/Logo.ico new file mode 100644 index 0000000000000000000000000000000000000000..13c4ff9d5b03bd16bf4ebb2a909b5be799125457 GIT binary patch literal 1078 zcmcJNy^(`35QP`t#U4r^^05(PUpuq&kJ**jfczny{h|T28&q986dB8F<0uc|!I|e7t4J=dHVQG+;5uQ=t0e9PU_K2N&g@xa|%o|87K zEwdlm8y?v(yDacX`<|Br@AA)_6F%}}X|G!A$*WrT@XSl_4fW-*cr33u*BlSXHs>S$ uhEL7;twDPw+#(|wa^m+bdD&TCd90TIH-#xAtk%$|)SGWtJo4>4@7jM=Ne>tR literal 0 HcmV?d00001 diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/NUnit.2.5.10.11092.nupkg b/trunk/hammock/src/packages/NUnit.2.5.10.11092/NUnit.2.5.10.11092.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..7e9a7773f57137ed34e6999503a26b5a520526e3 GIT binary patch literal 824211 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�>1e5yE=dmoC^F@ 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

    -G&=3 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%0D)`SWdFL{umA3Dj!*F(E- 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 z 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%0DCasN$K&LyTk2>dN)WP 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 Zy}N}!eh^lc6g3n6ZGhm~x>j0U{V$cQIH>>t literal 0 HcmV?d00001 diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/NUnitFitTests.html b/trunk/hammock/src/packages/NUnit.2.5.10.11092/NUnitFitTests.html new file mode 100644 index 0000000..ca5cd4f --- /dev/null +++ b/trunk/hammock/src/packages/NUnit.2.5.10.11092/NUnitFitTests.html @@ -0,0 +1,277 @@ + + + +

    NUnit Acceptance Tests

    +

    + Developers love self-referential programs! Hence, NUnit has always run all it's + own tests, even those that are not really unit tests. +

    Now, beginning with NUnit 2.4, NUnit has top-level tests using Ward Cunningham's + FIT framework. At this time, the tests are pretty rudimentary, but it's a start + and it's a framework for doing more. +

    Running the Tests

    +

    Open a console or shell window and navigate to the NUnit bin directory, which + contains this file. To run the test under Microsoft .Net, enter the command +

        runFile NUnitFitTests.html TestResults.html .
    + To run it under Mono, enter +
        mono runFile.exe NUnitFitTests.html TestResults.html .
    + Note the space and dot at the end of each command. The results of your test + will be in TestResults.html in the same directory. +

    Platform and CLR Version

    + + + + +
    NUnit.Fixtures.PlatformInfo
    +

    Verify Unit Tests

    +

    + Load and run the NUnit unit tests, verifying that the results are as expected. + When these tests are run on different platforms, different numbers of tests may + be skipped, so the values for Skipped and Run tests are informational only. +

    + The number of tests in each assembly should be constant across all platforms - + any discrepancy usually means that one of the test source files was not + compiled on the platform. There should be no failures and no tests ignored. +

    Note: + At the moment, the nunit.extensions.tests assembly is failing because the + fixture doesn't initialize addins in the test domain. +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NUnit.Fixtures.AssemblyRunner
    AssemblyTests()Run()Skipped()Ignored()Failures()
    nunit.framework.tests.dll397  00
    nunit.core.tests.dll355  00
    nunit.util.tests.dll238  00
    nunit.mocks.tests.dll43  00
    nunit.extensions.tests.dll5  00
    nunit-console.tests.dll40  00
    nunit.uikit.tests.dll34  00
    nunit-gui.tests.dll15  00
    nunit.fixtures.tests.dll6  00
    +

    Code Snippet Tests

    +

    + These tests create a test assembly from a snippet of code and then load and run + the tests that it contains, verifying that the structure of the loaded tests is + as expected and that the number of tests run, skipped, ignored or failed is + correct. +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NUnit.Fixtures.SnippetRunner
    CodeTree()Run()Skipped()Ignored()Failures()
    public class TestClass
    +{
    +}
    +
    EMPTY0000
    using NUnit.Framework;
    +
    +[TestFixture]
    +public class TestClass
    +{
    +}
    +
    TestClass0000
    using NUnit.Framework;
    +
    +[TestFixture]
    +public class TestClass
    +{
    +    [Test]
    +    public void T1() { }
    +    [Test]
    +    public void T2() { }
    +    [Test]
    +    public void T3() { }
    +}
    +
    TestClass
    +>T1
    +>T2
    +>T3
    +
    3000
    using NUnit.Framework;
    +
    +[TestFixture]
    +public class TestClass1
    +{
    +    [Test]
    +    public void T1() { }
    +}
    +
    +[TestFixture]
    +public class TestClass2
    +{
    +    [Test]
    +    public void T2() { }
    +    [Test]
    +    public void T3() { }
    +}
    +
    TestClass1
    +>T1
    +TestClass2
    +>T2
    +>T3
    +
    3000
    using NUnit.Framework;
    +
    +[TestFixture]
    +public class TestClass
    +{
    +    [Test]
    +    public void T1() { }
    +    [Test, Ignore]
    +    public void T2() { }
    +    [Test]
    +    public void T3() { }
    +}
    +
    TestClass
    +>T1
    +>T2
    +>T3
    +
    2010
    using NUnit.Framework;
    +
    +[TestFixture]
    +public class TestClass
    +{
    +    [Test]
    +    public void T1() { }
    +    [Test, Explicit]
    +    public void T2() { }
    +    [Test]
    +    public void T3() { }
    +}
    +
    TestClass
    +>T1
    +>T2
    +>T3
    +
    2100
    +

    Summary Information

    + + + + +
    fit.Summary
    + + diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/fit-license.txt b/trunk/hammock/src/packages/NUnit.2.5.10.11092/fit-license.txt new file mode 100644 index 0000000..af37532 --- /dev/null +++ b/trunk/hammock/src/packages/NUnit.2.5.10.11092/fit-license.txt @@ -0,0 +1,342 @@ + + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. \ No newline at end of file diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/lib/nunit.framework.dll b/trunk/hammock/src/packages/NUnit.2.5.10.11092/lib/nunit.framework.dll new file mode 100644 index 0000000000000000000000000000000000000000..6856e51ef08a8e681896c3a84ccbeea8975d5947 GIT binary patch literal 139264 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
    jGx_)XGKVSL!mZ7A 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 s;idf~4WfA}|OOnpsbG<<@nYpjdJ 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 K#)0=F2mTF_u(`ni literal 0 HcmV?d00001 diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/lib/nunit.framework.xml b/trunk/hammock/src/packages/NUnit.2.5.10.11092/lib/nunit.framework.xml new file mode 100644 index 0000000..a56c62f --- /dev/null +++ b/trunk/hammock/src/packages/NUnit.2.5.10.11092/lib/nunit.framework.xml @@ -0,0 +1,10407 @@ + + + + nunit.framework + + + + + Attribute used to apply a category to a test + + + + + The name of the category + + + + + Construct attribute for a given category based on + a name. The name may not contain the characters ',', + '+', '-' or '!'. However, this is not checked in the + constructor since it would cause an error to arise at + as the test was loaded without giving a clear indication + of where the problem is located. The error is handled + in NUnitFramework.cs by marking the test as not + runnable. + + The name of the category + + + + Protected constructor uses the Type name as the name + of the category. + + + + + The name of the category + + + + + Used to mark a field for use as a datapoint when executing a theory + within the same fixture that requires an argument of the field's Type. + + + + + Used to mark an array as containing a set of datapoints to be used + executing a theory within the same fixture that requires an argument + of the Type of the array elements. + + + + + Attribute used to provide descriptive text about a + test case or fixture. + + + + + Construct the attribute + + Text describing the test + + + + Gets the test description + + + + + Enumeration indicating how the expected message parameter is to be used + + + + Expect an exact match + + + Expect a message containing the parameter string + + + Match the regular expression provided as a parameter + + + Expect a message that starts with the parameter string + + + + ExpectedExceptionAttribute + + + + + + Constructor for a non-specific exception + + + + + Constructor for a given type of exception + + The type of the expected exception + + + + Constructor for a given exception name + + The full name of the expected exception + + + + Gets or sets the expected exception type + + + + + Gets or sets the full Type name of the expected exception + + + + + Gets or sets the expected message text + + + + + Gets or sets the user message displayed in case of failure + + + + + Gets or sets the type of match to be performed on the expected message + + + + + Gets the name of a method to be used as an exception handler + + + + + ExplicitAttribute marks a test or test fixture so that it will + only be run if explicitly executed from the gui or command line + or if it is included by use of a filter. The test will not be + run simply because an enclosing suite is run. + + + + + Default constructor + + + + + Constructor with a reason + + The reason test is marked explicit + + + + The reason test is marked explicit + + + + + Attribute used to mark a test that is to be ignored. + Ignored tests result in a warning message when the + tests are run. + + + + + Constructs the attribute without giving a reason + for ignoring the test. + + + + + Constructs the attribute giving a reason for ignoring the test + + The reason for ignoring the test + + + + The reason for ignoring a test + + + + + Abstract base for Attributes that are used to include tests + in the test run based on environmental settings. + + + + + Constructor with no included items specified, for use + with named property syntax. + + + + + Constructor taking one or more included items + + Comma-delimited list of included items + + + + Name of the item that is needed in order for + a test to run. Multiple itemss may be given, + separated by a comma. + + + + + Name of the item to be excluded. Multiple items + may be given, separated by a comma. + + + + + The reason for including or excluding the test + + + + + PlatformAttribute is used to mark a test fixture or an + individual method as applying to a particular platform only. + + + + + Constructor with no platforms specified, for use + with named property syntax. + + + + + Constructor taking one or more platforms + + Comma-deliminted list of platforms + + + + CultureAttribute is used to mark a test fixture or an + individual method as applying to a particular Culture only. + + + + + Constructor with no cultures specified, for use + with named property syntax. + + + + + Constructor taking one or more cultures + + Comma-deliminted list of cultures + + + + Marks a test to use a combinatorial join of any argument data + provided. NUnit will create a test case for every combination of + the arguments provided. This can result in a large number of test + cases and so should be used judiciously. This is the default join + type, so the attribute need not be used except as documentation. + + + + + PropertyAttribute is used to attach information to a test as a name/value pair.. + + + + + Construct a PropertyAttribute with a name and string value + + The name of the property + The property value + + + + Construct a PropertyAttribute with a name and int value + + The name of the property + The property value + + + + Construct a PropertyAttribute with a name and double value + + The name of the property + The property value + + + + Constructor for derived classes that set the + property dictionary directly. + + + + + Constructor for use by derived classes that use the + name of the type as the property name. Derived classes + must ensure that the Type of the property value is + a standard type supported by the BCL. Any custom + types will cause a serialization Exception when + in the client. + + + + + Gets the property dictionary for this attribute + + + + + Default constructor + + + + + Marks a test to use pairwise join of any argument data provided. + NUnit will attempt too excercise every pair of argument values at + least once, using as small a number of test cases as it can. With + only two arguments, this is the same as a combinatorial join. + + + + + Default constructor + + + + + Marks a test to use a sequential join of any argument data + provided. NUnit will use arguements for each parameter in + sequence, generating test cases up to the largest number + of argument values provided and using null for any arguments + for which it runs out of values. Normally, this should be + used with the same number of arguments for each parameter. + + + + + Default constructor + + + + + Summary description for MaxTimeAttribute. + + + + + Construct a MaxTimeAttribute, given a time in milliseconds. + + The maximum elapsed time in milliseconds + + + + RandomAttribute is used to supply a set of random values + to a single parameter of a parameterized test. + + + + + ValuesAttribute is used to provide literal arguments for + an individual parameter of a test. + + + + + Abstract base class for attributes that apply to parameters + and supply data for the parameter. + + + + + Gets the data to be provided to the specified parameter + + + + + The collection of data to be returned. Must + be set by any derived attribute classes. + We use an object[] so that the individual + elements may have their type changed in GetData + if necessary. + + + + + Construct with one argument + + + + + + Construct with two arguments + + + + + + + Construct with three arguments + + + + + + + + Construct with an array of arguments + + + + + + Get the collection of values to be used as arguments + + + + + Construct a set of doubles from 0.0 to 1.0, + specifying only the count. + + + + + + Construct a set of doubles from min to max + + + + + + + + Construct a set of ints from min to max + + + + + + + + Get the collection of values to be used as arguments + + + + + RangeAttribute is used to supply a range of values to an + individual parameter of a parameterized test. + + + + + Construct a range of ints using default step of 1 + + + + + + + Construct a range of ints specifying the step size + + + + + + + + Construct a range of longs + + + + + + + + Construct a range of doubles + + + + + + + + Construct a range of floats + + + + + + + + RepeatAttribute may be applied to test case in order + to run it multiple times. + + + + + Construct a RepeatAttribute + + The number of times to run the test + + + + RequiredAddinAttribute may be used to indicate the names of any addins + that must be present in order to run some or all of the tests in an + assembly. If the addin is not loaded, the entire assembly is marked + as NotRunnable. + + + + + Initializes a new instance of the class. + + The required addin. + + + + Gets the name of required addin. + + The required addin name. + + + + Summary description for SetCultureAttribute. + + + + + Construct given the name of a culture + + + + + + Summary description for SetUICultureAttribute. + + + + + Construct given the name of a culture + + + + + + Attribute used to mark a class that contains one-time SetUp + and/or TearDown methods that apply to all the tests in a + namespace or an assembly. + + + + + SetUpFixtureAttribute is used to identify a SetUpFixture + + + + + Attribute used to mark a static (shared in VB) property + that returns a list of tests. + + + + + Attribute used to identify a method that is called + immediately after each test is run. The method is + guaranteed to be called, even if an exception is thrown. + + + + + Adding this attribute to a method within a + class makes the method callable from the NUnit test runner. There is a property + called Description which is optional which you can provide a more detailed test + description. This class cannot be inherited. + + + + [TestFixture] + public class Fixture + { + [Test] + public void MethodToTest() + {} + + [Test(Description = "more detailed description")] + publc void TestDescriptionMethod() + {} + } + + + + + + Descriptive text for this test + + + + + TestCaseAttribute is used to mark parameterized test cases + and provide them with their arguments. + + + + + The ITestCaseData interface is implemented by a class + that is able to return complete testcases for use by + a parameterized test method. + + NOTE: This interface is used in both the framework + and the core, even though that results in two different + types. However, sharing the source code guarantees that + the various implementations will be compatible and that + the core is able to reflect successfully over the + framework implementations of ITestCaseData. + + + + + Gets the argument list to be provided to the test + + + + + Gets the expected result + + + + + Gets the expected exception Type + + + + + Gets the FullName of the expected exception + + + + + Gets the name to be used for the test + + + + + Gets the description of the test + + + + + Gets a value indicating whether this is ignored. + + true if ignored; otherwise, false. + + + + Gets the ignore reason. + + The ignore reason. + + + + Construct a TestCaseAttribute with a list of arguments. + This constructor is not CLS-Compliant + + + + + + Construct a TestCaseAttribute with a single argument + + + + + + Construct a TestCaseAttribute with a two arguments + + + + + + + Construct a TestCaseAttribute with a three arguments + + + + + + + + Gets the list of arguments to a test case + + + + + Gets or sets the expected result. + + The result. + + + + Gets a list of categories associated with this test; + + + + + Gets or sets the category associated with this test. + May be a single category or a comma-separated list. + + + + + Gets or sets the expected exception. + + The expected exception. + + + + Gets or sets the name the expected exception. + + The expected name of the exception. + + + + Gets or sets the expected message of the expected exception + + The expected message of the exception. + + + + Gets or sets the type of match to be performed on the expected message + + + + + Gets or sets the description. + + The description. + + + + Gets or sets the name of the test. + + The name of the test. + + + + Gets or sets the ignored status of the test + + + + + Gets or sets the ignored status of the test + + + + + Gets the ignore reason. + + The ignore reason. + + + + FactoryAttribute indicates the source to be used to + provide test cases for a test method. + + + + + Construct with the name of the factory - for use with languages + that don't support params arrays. + + An array of the names of the factories that will provide data + + + + Construct with a Type and name - for use with languages + that don't support params arrays. + + The Type that will provide data + The name of the method, property or field that will provide data + + + + The name of a the method, property or fiend to be used as a source + + + + + A Type to be used as a source + + + + + [TestFixture] + public class ExampleClass + {} + + + + + Default constructor + + + + + Construct with a object[] representing a set of arguments. + In .NET 2.0, the arguments may later be separated into + type arguments and constructor arguments. + + + + + + Descriptive text for this fixture + + + + + Gets and sets the category for this fixture. + May be a comma-separated list of categories. + + + + + Gets a list of categories for this fixture + + + + + The arguments originally provided to the attribute + + + + + Gets or sets a value indicating whether this should be ignored. + + true if ignore; otherwise, false. + + + + Gets or sets the ignore reason. May set Ignored as a side effect. + + The ignore reason. + + + + Get or set the type arguments. If not set + explicitly, any leading arguments that are + Types are taken as type arguments. + + + + + Attribute used to identify a method that is + called before any tests in a fixture are run. + + + + + Attribute used to identify a method that is called after + all the tests in a fixture have run. The method is + guaranteed to be called, even if an exception is thrown. + + + + + Adding this attribute to a method within a + class makes the method callable from the NUnit test runner. There is a property + called Description which is optional which you can provide a more detailed test + description. This class cannot be inherited. + + + + [TestFixture] + public class Fixture + { + [Test] + public void MethodToTest() + {} + + [Test(Description = "more detailed description")] + publc void TestDescriptionMethod() + {} + } + + + + + + WUsed on a method, marks the test with a timeout value in milliseconds. + The test will be run in a separate thread and is cancelled if the timeout + is exceeded. Used on a method or assembly, sets the default timeout + for all contained test methods. + + + + + Construct a TimeoutAttribute given a time in milliseconds + + The timeout value in milliseconds + + + + Marks a test that must run in the STA, causing it + to run in a separate thread if necessary. + + On methods, you may also use STAThreadAttribute + to serve the same purpose. + + + + + Construct a RequiresSTAAttribute + + + + + Marks a test that must run in the MTA, causing it + to run in a separate thread if necessary. + + On methods, you may also use MTAThreadAttribute + to serve the same purpose. + + + + + Construct a RequiresMTAAttribute + + + + + Marks a test that must run on a separate thread. + + + + + Construct a RequiresThreadAttribute + + + + + Construct a RequiresThreadAttribute, specifying the apartment + + + + + ValueSourceAttribute indicates the source to be used to + provide data for one parameter of a test method. + + + + + Construct with the name of the factory - for use with languages + that don't support params arrays. + + The name of the data source to be used + + + + Construct with a Type and name - for use with languages + that don't support params arrays. + + The Type that will provide data + The name of the method, property or field that will provide data + + + + The name of a the method, property or fiend to be used as a source + + + + + A Type to be used as a source + + + + + AttributeExistsConstraint tests for the presence of a + specified attribute on a Type. + + + + + The Constraint class is the base of all built-in constraints + within NUnit. It provides the operator overloads used to combine + constraints. + + + + + The IConstraintExpression interface is implemented by all + complete and resolvable constraints and expressions. + + + + + Return the top-level constraint for this expression + + + + + + Static UnsetObject used to detect derived constraints + failing to set the actual value. + + + + + The actual value being tested against a constraint + + + + + The display name of this Constraint for use by ToString() + + + + + Argument fields used by ToString(); + + + + + The builder holding this constraint + + + + + Construct a constraint with no arguments + + + + + Construct a constraint with one argument + + + + + Construct a constraint with two arguments + + + + + Sets the ConstraintBuilder holding this constraint + + + + + Write the failure message to the MessageWriter provided + as an argument. The default implementation simply passes + the constraint and the actual value to the writer, which + then displays the constraint description and the value. + + Constraints that need to provide additional details, + such as where the error occured can override this. + + The MessageWriter on which to display the message + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Test whether the constraint is satisfied by an + ActualValueDelegate that returns the value to be tested. + The default implementation simply evaluates the delegate + but derived classes may override it to provide for delayed + processing. + + An ActualValueDelegate + True for success, false for failure + + + + Test whether the constraint is satisfied by a given reference. + The default implementation simply dereferences the value but + derived classes may override it to provide for delayed processing. + + A reference to the value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Default override of ToString returns the constraint DisplayName + followed by any arguments within angle brackets. + + + + + + Returns the string representation of this constraint + + + + + This operator creates a constraint that is satisfied only if both + argument constraints are satisfied. + + + + + This operator creates a constraint that is satisfied if either + of the argument constraints is satisfied. + + + + + This operator creates a constraint that is satisfied if the + argument constraint is not satisfied. + + + + + Returns a DelayedConstraint with the specified delay time. + + The delay in milliseconds. + + + + + Returns a DelayedConstraint with the specified delay time + and polling interval. + + The delay in milliseconds. + The interval at which to test the constraint. + + + + + The display name of this Constraint for use by ToString(). + The default value is the name of the constraint with + trailing "Constraint" removed. Derived classes may set + this to another name in their constructors. + + + + + Returns a ConstraintExpression by appending And + to the current constraint. + + + + + Returns a ConstraintExpression by appending And + to the current constraint. + + + + + Returns a ConstraintExpression by appending Or + to the current constraint. + + + + + Class used to detect any derived constraints + that fail to set the actual value in their + Matches override. + + + + + Constructs an AttributeExistsConstraint for a specific attribute Type + + + + + + Tests whether the object provides the expected attribute. + + A Type, MethodInfo, or other ICustomAttributeProvider + True if the expected attribute is present, otherwise false + + + + Writes the description of the constraint to the specified writer + + + + + AttributeConstraint tests that a specified attribute is present + on a Type or other provider and that the value of the attribute + satisfies some other constraint. + + + + + Abstract base class used for prefixes + + + + + The base constraint + + + + + Construct given a base constraint + + + + + + Constructs an AttributeConstraint for a specified attriute + Type and base constraint. + + + + + + + Determines whether the Type or other provider has the + expected attribute and if its value matches the + additional constraint specified. + + + + + Writes a description of the attribute to the specified writer. + + + + + Writes the actual value supplied to the specified writer. + + + + + Returns a string representation of the constraint. + + + + + BasicConstraint is the abstract base for constraints that + perform a simple comparison to a constant value. + + + + + Initializes a new instance of the class. + + The expected. + The description. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + NullConstraint tests that the actual value is null + + + + + Initializes a new instance of the class. + + + + + TrueConstraint tests that the actual value is true + + + + + Initializes a new instance of the class. + + + + + FalseConstraint tests that the actual value is false + + + + + Initializes a new instance of the class. + + + + + NaNConstraint tests that the actual value is a double or float NaN + + + + + Test that the actual value is an NaN + + + + + + + Write the constraint description to a specified writer + + + + + + BinaryConstraint is the abstract base of all constraints + that combine two other constraints in some fashion. + + + + + The first constraint being combined + + + + + The second constraint being combined + + + + + Construct a BinaryConstraint from two other constraints + + The first constraint + The second constraint + + + + AndConstraint succeeds only if both members succeed. + + + + + Create an AndConstraint from two other constraints + + The first constraint + The second constraint + + + + Apply both member constraints to an actual value, succeeding + succeeding only if both of them succeed. + + The actual value + True if the constraints both succeeded + + + + Write a description for this contraint to a MessageWriter + + The MessageWriter to receive the description + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + OrConstraint succeeds if either member succeeds + + + + + Create an OrConstraint from two other constraints + + The first constraint + The second constraint + + + + Apply the member constraints to an actual value, succeeding + succeeding as soon as one of them succeeds. + + The actual value + True if either constraint succeeded + + + + Write a description for this contraint to a MessageWriter + + The MessageWriter to receive the description + + + + CollectionConstraint is the abstract base class for + constraints that operate on collections. + + + + + Construct an empty CollectionConstraint + + + + + Construct a CollectionConstraint + + + + + + Determines whether the specified enumerable is empty. + + The enumerable. + + true if the specified enumerable is empty; otherwise, false. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Protected method to be implemented by derived classes + + + + + + + CollectionItemsEqualConstraint is the abstract base class for all + collection constraints that apply some notion of item equality + as a part of their operation. + + + + + Construct an empty CollectionConstraint + + + + + Construct a CollectionConstraint + + + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied Comparison object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Compares two collection members for equality + + + + + Return a new CollectionTally for use in making tests + + The collection to be included in the tally + + + + Flag the constraint to ignore case and return self. + + + + + EmptyCollectionConstraint tests whether a collection is empty. + + + + + Check that the collection is empty + + + + + + + Write the constraint description to a MessageWriter + + + + + + UniqueItemsConstraint tests whether all the items in a + collection are unique. + + + + + Check that all items are unique. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + CollectionContainsConstraint is used to test whether a collection + contains an expected object as a member. + + + + + Construct a CollectionContainsConstraint + + + + + + Test whether the expected item is contained in the collection + + + + + + + Write a descripton of the constraint to a MessageWriter + + + + + + CollectionEquivalentCOnstraint is used to determine whether two + collections are equivalent. + + + + + Construct a CollectionEquivalentConstraint + + + + + + Test whether two collections are equivalent + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + CollectionSubsetConstraint is used to determine whether + one collection is a subset of another + + + + + Construct a CollectionSubsetConstraint + + The collection that the actual value is expected to be a subset of + + + + Test whether the actual collection is a subset of + the expected collection provided. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + CollectionOrderedConstraint is used to test whether a collection is ordered. + + + + + Construct a CollectionOrderedConstraint + + + + + Modifies the constraint to use an IComparer and returns self. + + + + + Modifies the constraint to use an IComparer<T> and returns self. + + + + + Modifies the constraint to use a Comparison<T> and returns self. + + + + + Modifies the constraint to test ordering by the value of + a specified property and returns self. + + + + + Test whether the collection is ordered + + + + + + + Write a description of the constraint to a MessageWriter + + + + + + Returns the string representation of the constraint. + + + + + + If used performs a reverse comparison + + + + + CollectionTally counts (tallies) the number of + occurences of each object in one or more enumerations. + + + + + Construct a CollectionTally object from a comparer and a collection + + + + + Try to remove an object from the tally + + The object to remove + True if successful, false if the object was not found + + + + Try to remove a set of objects from the tally + + The objects to remove + True if successful, false if any object was not found + + + + The number of objects remaining in the tally + + + + + ComparisonAdapter class centralizes all comparisons of + values in NUnit, adapting to the use of any provided + IComparer, IComparer<T> or Comparison<T> + + + + + Returns a ComparisonAdapter that wraps an IComparer + + + + + Returns a ComparisonAdapter that wraps an IComparer<T> + + + + + Returns a ComparisonAdapter that wraps a Comparison<T> + + + + + Compares two objects + + + + + Gets the default ComparisonAdapter, which wraps an + NUnitComparer object. + + + + + Construct a ComparisonAdapter for an IComparer + + + + + Compares two objects + + + + + + + + Construct a default ComparisonAdapter + + + + + ComparisonAdapter<T> extends ComparisonAdapter and + allows use of an IComparer<T> or Comparison<T> + to actually perform the comparison. + + + + + Construct a ComparisonAdapter for an IComparer<T> + + + + + Compare a Type T to an object + + + + + Construct a ComparisonAdapter for a Comparison<T> + + + + + Compare a Type T to an object + + + + + Abstract base class for constraints that compare values to + determine if one is greater than, equal to or less than + the other. + + + + + The value against which a comparison is to be made + + + + + If true, less than returns success + + + + + if true, equal returns success + + + + + if true, greater than returns success + + + + + The predicate used as a part of the description + + + + + ComparisonAdapter to be used in making the comparison + + + + + Initializes a new instance of the class. + + The value against which to make a comparison. + if set to true less succeeds. + if set to true equal succeeds. + if set to true greater succeeds. + String used in describing the constraint. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Modifies the constraint to use an IComparer and returns self + + + + + Modifies the constraint to use an IComparer<T> and returns self + + + + + Modifies the constraint to use a Comparison<T> and returns self + + + + + Tests whether a value is greater than the value supplied to its constructor + + + + + Initializes a new instance of the class. + + The expected value. + + + + Tests whether a value is greater than or equal to the value supplied to its constructor + + + + + Initializes a new instance of the class. + + The expected value. + + + + Tests whether a value is less than the value supplied to its constructor + + + + + Initializes a new instance of the class. + + The expected value. + + + + Tests whether a value is less than or equal to the value supplied to its constructor + + + + + Initializes a new instance of the class. + + The expected value. + + + + Delegate used to delay evaluation of the actual value + to be used in evaluating a constraint + + + + + ConstraintBuilder maintains the stacks that are used in + processing a ConstraintExpression. An OperatorStack + is used to hold operators that are waiting for their + operands to be reognized. a ConstraintStack holds + input constraints as well as the results of each + operator applied. + + + + + Initializes a new instance of the class. + + + + + Appends the specified operator to the expression by first + reducing the operator stack and then pushing the new + operator on the stack. + + The operator to push. + + + + Appends the specified constraint to the expresson by pushing + it on the constraint stack. + + The constraint to push. + + + + Sets the top operator right context. + + The right context. + + + + Reduces the operator stack until the topmost item + precedence is greater than or equal to the target precedence. + + The target precedence. + + + + Resolves this instance, returning a Constraint. If the builder + is not currently in a resolvable state, an exception is thrown. + + The resolved constraint + + + + Gets a value indicating whether this instance is resolvable. + + + true if this instance is resolvable; otherwise, false. + + + + + OperatorStack is a type-safe stack for holding ConstraintOperators + + + + + Initializes a new instance of the class. + + The builder. + + + + Pushes the specified operator onto the stack. + + The op. + + + + Pops the topmost operator from the stack. + + + + + + Gets a value indicating whether this is empty. + + true if empty; otherwise, false. + + + + Gets the topmost operator without modifying the stack. + + The top. + + + + ConstraintStack is a type-safe stack for holding Constraints + + + + + Initializes a new instance of the class. + + The builder. + + + + Pushes the specified constraint. As a side effect, + the constraint's builder field is set to the + ConstraintBuilder owning this stack. + + The constraint. + + + + Pops this topmost constrait from the stack. + As a side effect, the constraint's builder + field is set to null. + + + + + + Gets a value indicating whether this is empty. + + true if empty; otherwise, false. + + + + Gets the topmost constraint without modifying the stack. + + The topmost constraint + + + + ConstraintExpression represents a compound constraint in the + process of being constructed from a series of syntactic elements. + + Individual elements are appended to the expression as they are + reognized. Once an actual Constraint is appended, the expression + returns a resolvable Constraint. + + + + + ConstraintExpressionBase is the abstract base class for the + generated ConstraintExpression class, which represents a + compound constraint in the process of being constructed + from a series of syntactic elements. + + NOTE: ConstraintExpressionBase is aware of some of its + derived classes, which is an apparent violation of + encapsulation. Ideally, these classes would be a + single class, but they must be separated in order to + allow parts to be generated under .NET 1.x and to + provide proper user feedback in syntactically + aware IDEs. + + + + + The ConstraintBuilder holding the elements recognized so far + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class passing in a ConstraintBuilder, which may be pre-populated. + + The builder. + + + + Returns a string representation of the expression as it + currently stands. This should only be used for testing, + since it has the side-effect of resolving the expression. + + + + + + Appends an operator to the expression and returns the + resulting expression itself. + + + + + Appends a self-resolving operator to the expression and + returns a new ResolvableConstraintExpression. + + + + + Appends a constraint to the expression and returns that + constraint, which is associated with the current state + of the expression being built. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class passing in a ConstraintBuilder, which may be pre-populated. + + The builder. + + + + Returns a new PropertyConstraintExpression, which will either + test for the existence of the named property on the object + being tested or apply any following constraint to that property. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns the constraint provided as an argument - used to allow custom + custom constraints to easily participate in the syntax. + + + + + Returns the constraint provided as an argument - used to allow custom + custom constraints to easily participate in the syntax. + + + + + Returns a constraint that tests two items for equality + + + + + Returns a constraint that tests that two references are the same object + + + + + Returns a constraint that tests whether the + actual value is greater than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a collection containing the same elements as the + collection supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a subset of the collection supplied as an argument. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a new ContainsConstraint. This constraint + will, in turn, make use of the appropriate second-level + constraint, depending on the type of the actual argument. + This overload is only used if the item sought is a string, + since any other type implies that we are looking for a + collection member. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the Regex pattern supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the Regex pattern supplied as an argument. + + + + + Returns a constraint that tests whether the path provided + is the same as an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the actual value falls + within a specified range. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if at least one of them succeeds. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them fail. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Length property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Count property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Message property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the InnerException property of the object being tested. + + + + + With is currently a NOP - reserved for future use. + + + + + Returns a constraint that tests for null + + + + + Returns a constraint that tests for True + + + + + Returns a constraint that tests for False + + + + + Returns a constraint that tests for NaN + + + + + Returns a constraint that tests for empty + + + + + Returns a constraint that tests whether a collection + contains all unique items. + + + + + Returns a constraint that tests whether an object graph is serializable in binary format. + + + + + Returns a constraint that tests whether an object graph is serializable in xml format. + + + + + Returns a constraint that tests whether a collection is ordered + + + + + Helper class with properties and methods that supply + a number of constraints used in Asserts. + + + + + Returns a new PropertyConstraintExpression, which will either + test for the existence of the named property on the object + being tested or apply any following constraint to that property. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a constraint that tests two items for equality + + + + + Returns a constraint that tests that two references are the same object + + + + + Returns a constraint that tests whether the + actual value is greater than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a collection containing the same elements as the + collection supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a subset of the collection supplied as an argument. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a new ContainsConstraint. This constraint + will, in turn, make use of the appropriate second-level + constraint, depending on the type of the actual argument. + This overload is only used if the item sought is a string, + since any other type implies that we are looking for a + collection member. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the Regex pattern supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the Regex pattern supplied as an argument. + + + + + Returns a constraint that fails if the actual + value matches the pattern supplied as an argument. + + + + + Returns a constraint that tests whether the path provided + is the same as an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the actual value falls + within a specified range. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if at least one of them succeeds. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them fail. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Length property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Count property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Message property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the InnerException property of the object being tested. + + + + + Returns a constraint that tests for null + + + + + Returns a constraint that tests for True + + + + + Returns a constraint that tests for False + + + + + Returns a constraint that tests for NaN + + + + + Returns a constraint that tests for empty + + + + + Returns a constraint that tests whether a collection + contains all unique items. + + + + + Returns a constraint that tests whether an object graph is serializable in binary format. + + + + + Returns a constraint that tests whether an object graph is serializable in xml format. + + + + + Returns a constraint that tests whether a collection is ordered + + + + + The ConstraintOperator class is used internally by a + ConstraintBuilder to represent an operator that + modifies or combines constraints. + + Constraint operators use left and right precedence + values to determine whether the top operator on the + stack should be reduced before pushing a new operator. + + + + + The precedence value used when the operator + is about to be pushed to the stack. + + + + + The precedence value used when the operator + is on the top of the stack. + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + + The syntax element preceding this operator + + + + + The syntax element folowing this operator + + + + + The precedence value used when the operator + is about to be pushed to the stack. + + + + + The precedence value used when the operator + is on the top of the stack. + + + + + PrefixOperator takes a single constraint and modifies + it's action in some way. + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + + Returns the constraint created by applying this + prefix to another constraint. + + + + + + + Negates the test of the constraint it wraps. + + + + + Constructs a new NotOperator + + + + + Returns a NotConstraint applied to its argument. + + + + + Abstract base for operators that indicate how to + apply a constraint to items in a collection. + + + + + Constructs a CollectionOperator + + + + + Represents a constraint that succeeds if all the + members of a collection match a base constraint. + + + + + Returns a constraint that will apply the argument + to the members of a collection, succeeding if + they all succeed. + + + + + Represents a constraint that succeeds if any of the + members of a collection match a base constraint. + + + + + Returns a constraint that will apply the argument + to the members of a collection, succeeding if + any of them succeed. + + + + + Represents a constraint that succeeds if none of the + members of a collection match a base constraint. + + + + + Returns a constraint that will apply the argument + to the members of a collection, succeeding if + none of them succeed. + + + + + Represents a constraint that simply wraps the + constraint provided as an argument, without any + further functionality, but which modifes the + order of evaluation because of its precedence. + + + + + Constructor for the WithOperator + + + + + Returns a constraint that wraps its argument + + + + + Abstract base class for operators that are able to reduce to a + constraint whether or not another syntactic element follows. + + + + + Operator used to test for the presence of a named Property + on an object and optionally apply further tests to the + value of that property. + + + + + Constructs a PropOperator for a particular named property + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + + Gets the name of the property to which the operator applies + + + + + Operator that tests for the presence of a particular attribute + on a type and optionally applies further tests to the attribute. + + + + + Construct an AttributeOperator for a particular Type + + The Type of attribute tested + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + Operator that tests that an exception is thrown and + optionally applies further tests to the exception. + + + + + Construct a ThrowsOperator + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + Abstract base class for all binary operators + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + + Abstract method that produces a constraint by applying + the operator to its left and right constraint arguments. + + + + + Gets the left precedence of the operator + + + + + Gets the right precedence of the operator + + + + + Operator that requires both it's arguments to succeed + + + + + Construct an AndOperator + + + + + Apply the operator to produce an AndConstraint + + + + + Operator that requires at least one of it's arguments to succeed + + + + + Construct an OrOperator + + + + + Apply the operator to produce an OrConstraint + + + + + ContainsConstraint tests a whether a string contains a substring + or a collection contains an object. It postpones the decision of + which test to use until the type of the actual argument is known. + This allows testing whether a string is contained in a collection + or as a substring of another string using the same syntax. + + + + + Initializes a new instance of the class. + + The expected. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied Comparison object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to ignore case and return self. + + + + + Applies a delay to the match so that a match can be evaluated in the future. + + + + + Creates a new DelayedConstraint + + The inner constraint two decorate + The time interval after which the match is performed + If the value of is less than 0 + + + + Creates a new DelayedConstraint + + The inner constraint two decorate + The time interval after which the match is performed + The time interval used for polling + If the value of is less than 0 + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for if the base constraint fails, false if it succeeds + + + + Test whether the constraint is satisfied by a delegate + + The delegate whose value is to be tested + True for if the base constraint fails, false if it succeeds + + + + Test whether the constraint is satisfied by a given reference. + Overridden to wait for the specified delay period before + calling the base constraint with the dereferenced value. + + A reference to the value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a MessageWriter. + + The writer on which the actual value is displayed + + + + Returns the string representation of the constraint. + + + + + EmptyDirectoryConstraint is used to test that a directory is empty + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + EmptyConstraint tests a whether a string or collection is empty, + postponing the decision about which test is applied until the + type of the actual argument is known. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + EqualConstraint is able to compare an actual value with the + expected value provided in its constructor. Two objects are + considered equal if both are null, or if both have the same + value. NUnit has special semantics for some object types. + + + + + If true, strings in error messages will be clipped + + + + + NUnitEqualityComparer used to test equality. + + + + + Initializes a new instance of the class. + + The expected value. + + + + Flag the constraint to use a tolerance when determining equality. + + Tolerance value to be used + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied Comparison object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write a failure message. Overridden to provide custom + failure messages for EqualConstraint. + + The MessageWriter to write to + + + + Write description of this constraint + + The MessageWriter to write to + + + + Display the failure information for two collections that did not match. + + The MessageWriter on which to display + The expected collection. + The actual collection + The depth of this failure in a set of nested collections + + + + Displays a single line showing the types and sizes of the expected + and actual collections or arrays. If both are identical, the value is + only shown once. + + The MessageWriter on which to display + The expected collection or array + The actual collection or array + The indentation level for the message line + + + + Displays a single line showing the point in the expected and actual + arrays at which the comparison failed. If the arrays have different + structures or dimensions, both values are shown. + + The MessageWriter on which to display + The expected array + The actual array + Index of the failure point in the underlying collections + The indentation level for the message line + + + + Flag the constraint to ignore case and return self. + + + + + Flag the constraint to suppress string clipping + and return self. + + + + + Flag the constraint to compare arrays as collections + and return self. + + + + + Switches the .Within() modifier to interpret its tolerance as + a distance in representable values (see remarks). + + Self. + + Ulp stands for "unit in the last place" and describes the minimum + amount a given value can change. For any integers, an ulp is 1 whole + digit. For floating point values, the accuracy of which is better + for smaller numbers and worse for larger numbers, an ulp depends + on the size of the number. Using ulps for comparison of floating + point results instead of fixed tolerances is safer because it will + automatically compensate for the added inaccuracy of larger numbers. + + + + + Switches the .Within() modifier to interpret its tolerance as + a percentage that the actual values is allowed to deviate from + the expected value. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in days. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in hours. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in minutes. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in seconds. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in milliseconds. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in clock ticks. + + Self + + + + EqualityAdapter class handles all equality comparisons + that use an IEqualityComparer, IEqualityComparer<T> + or a ComparisonAdapter. + + + + + Compares two objects, returning true if they are equal + + + + + Returns an EqualityAdapter that wraps an IComparer. + + + + + Returns an EqualityAdapter that wraps an IEqualityComparer. + + + + + Returns an EqualityAdapter that wraps an IEqualityComparer<T>. + + + + + Returns an EqualityAdapter that wraps an IComparer<T>. + + + + + Returns an EqualityAdapter that wraps a Comparison<T>. + + + + Helper routines for working with floating point numbers + + + The floating point comparison code is based on this excellent article: + http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm + + + "ULP" means Unit in the Last Place and in the context of this library refers to + the distance between two adjacent floating point numbers. IEEE floating point + numbers can only represent a finite subset of natural numbers, with greater + accuracy for smaller numbers and lower accuracy for very large numbers. + + + If a comparison is allowed "2 ulps" of deviation, that means the values are + allowed to deviate by up to 2 adjacent floating point values, which might be + as low as 0.0000001 for small numbers or as high as 10.0 for large numbers. + + + + + Compares two floating point values for equality + First floating point value to be compared + Second floating point value t be compared + + Maximum number of representable floating point values that are allowed to + be between the left and the right floating point values + + True if both numbers are equal or close to being equal + + + Floating point values can only represent a finite subset of natural numbers. + For example, the values 2.00000000 and 2.00000024 can be stored in a float, + but nothing inbetween them. + + + This comparison will count how many possible floating point values are between + the left and the right number. If the number of possible values between both + numbers is less than or equal to maxUlps, then the numbers are considered as + being equal. + + + Implementation partially follows the code outlined here: + http://www.anttirt.net/2007/08/19/proper-floating-point-comparisons/ + + + + + Compares two double precision floating point values for equality + First double precision floating point value to be compared + Second double precision floating point value t be compared + + Maximum number of representable double precision floating point values that are + allowed to be between the left and the right double precision floating point values + + True if both numbers are equal or close to being equal + + + Double precision floating point values can only represent a limited series of + natural numbers. For example, the values 2.0000000000000000 and 2.0000000000000004 + can be stored in a double, but nothing inbetween them. + + + This comparison will count how many possible double precision floating point + values are between the left and the right number. If the number of possible + values between both numbers is less than or equal to maxUlps, then the numbers + are considered as being equal. + + + Implementation partially follows the code outlined here: + http://www.anttirt.net/2007/08/19/proper-floating-point-comparisons/ + + + + + + Reinterprets the memory contents of a floating point value as an integer value + + + Floating point value whose memory contents to reinterpret + + + The memory contents of the floating point value interpreted as an integer + + + + + Reinterprets the memory contents of a double precision floating point + value as an integer value + + + Double precision floating point value whose memory contents to reinterpret + + + The memory contents of the double precision floating point value + interpreted as an integer + + + + + Reinterprets the memory contents of an integer as a floating point value + + Integer value whose memory contents to reinterpret + + The memory contents of the integer value interpreted as a floating point value + + + + + Reinterprets the memory contents of an integer value as a double precision + floating point value + + Integer whose memory contents to reinterpret + + The memory contents of the integer interpreted as a double precision + floating point value + + + + Union of a floating point variable and an integer + + + The union's value as a floating point variable + + + The union's value as an integer + + + The union's value as an unsigned integer + + + Union of a double precision floating point variable and a long + + + The union's value as a double precision floating point variable + + + The union's value as a long + + + The union's value as an unsigned long + + + + MessageWriter is the abstract base for classes that write + constraint descriptions and messages in some form. The + class has separate methods for writing various components + of a message, allowing implementations to tailor the + presentation as needed. + + + + + Construct a MessageWriter given a culture + + + + + Method to write single line message with optional args, usually + written to precede the general failure message. + + The message to be written + Any arguments used in formatting the message + + + + Method to write single line message with optional args, usually + written to precede the general failure message, at a givel + indentation level. + + The indentation level of the message + The message to be written + Any arguments used in formatting the message + + + + Display Expected and Actual lines for a constraint. This + is called by MessageWriter's default implementation of + WriteMessageTo and provides the generic two-line display. + + The constraint that failed + + + + Display Expected and Actual lines for given values. This + method may be called by constraints that need more control over + the display of actual and expected values than is provided + by the default implementation. + + The expected value + The actual value causing the failure + + + + Display Expected and Actual lines for given values, including + a tolerance value on the Expected line. + + The expected value + The actual value causing the failure + The tolerance within which the test was made + + + + Display the expected and actual string values on separate lines. + If the mismatch parameter is >=0, an additional line is displayed + line containing a caret that points to the mismatch point. + + The expected string value + The actual string value + The point at which the strings don't match or -1 + If true, case is ignored in locating the point where the strings differ + If true, the strings should be clipped to fit the line + + + + Writes the text for a connector. + + The connector. + + + + Writes the text for a predicate. + + The predicate. + + + + Writes the text for an expected value. + + The expected value. + + + + Writes the text for a modifier + + The modifier. + + + + Writes the text for an actual value. + + The actual value. + + + + Writes the text for a generalized value. + + The value. + + + + Writes the text for a collection value, + starting at a particular point, to a max length + + The collection containing elements to write. + The starting point of the elements to write + The maximum number of elements to write + + + + Abstract method to get the max line length + + + + + Static methods used in creating messages + + + + + Static string used when strings are clipped + + + + + Returns the representation of a type as used in NUnitLite. + This is the same as Type.ToString() except for arrays, + which are displayed with their declared sizes. + + + + + + + Converts any control characters in a string + to their escaped representation. + + The string to be converted + The converted string + + + + Return the a string representation for a set of indices into an array + + Array of indices for which a string is needed + + + + Get an array of indices representing the point in a collection or + array corresponding to a single int index into the collection. + + The collection to which the indices apply + Index in the collection + Array of indices + + + + Clip a string to a given length, starting at a particular offset, returning the clipped + string with ellipses representing the removed parts + + The string to be clipped + The maximum permitted length of the result string + The point at which to start clipping + The clipped string + + + + Clip the expected and actual strings in a coordinated fashion, + so that they may be displayed together. + + + + + + + + + Shows the position two strings start to differ. Comparison + starts at the start index. + + The expected string + The actual string + The index in the strings at which comparison should start + Boolean indicating whether case should be ignored + -1 if no mismatch found, or the index where mismatch found + + + + The Numerics class contains common operations on numeric values. + + + + + Checks the type of the object, returning true if + the object is a numeric type. + + The object to check + true if the object is a numeric type + + + + Checks the type of the object, returning true if + the object is a floating point numeric type. + + The object to check + true if the object is a floating point numeric type + + + + Checks the type of the object, returning true if + the object is a fixed point numeric type. + + The object to check + true if the object is a fixed point numeric type + + + + Test two numeric values for equality, performing the usual numeric + conversions and using a provided or default tolerance. If the tolerance + provided is Empty, this method may set it to a default tolerance. + + The expected value + The actual value + A reference to the tolerance in effect + True if the values are equal + + + + Compare two numeric values, performing the usual numeric conversions. + + The expected value + The actual value + The relationship of the values to each other + + + + NUnitComparer encapsulates NUnit's default behavior + in comparing two objects. + + + + + Compares two objects + + + + + + + + Returns the default NUnitComparer. + + + + + NUnitEqualityComparer encapsulates NUnit's handling of + equality tests between objects. + + + + + If true, all string comparisons will ignore case + + + + + If true, arrays will be treated as collections, allowing + those of different dimensions to be compared + + + + + If non-zero, equality comparisons within the specified + tolerance will succeed. + + + + + Comparison object used in comparisons for some constraints. + + + + + Compares two objects for equality. + + + + + Helper method to compare two arrays + + + + + Method to compare two DirectoryInfo objects + + first directory to compare + second directory to compare + true if equivalent, false if not + + + + Returns the default NUnitEqualityComparer + + + + + Gets and sets a flag indicating whether case should + be ignored in determining equality. + + + + + Gets and sets a flag indicating that arrays should be + compared as collections, without regard to their shape. + + + + + Gets and sets an external comparer to be used to + test for equality. It is applied to members of + collections, in place of NUnit's own logic. + + + + + Gets and sets a tolerance used to compare objects of + certin types. + + + + + Gets the list of failure points for the last Match performed. + + + + + PathConstraint serves as the abstract base of constraints + that operate on paths and provides several helper methods. + + + + + The expected path used in the constraint + + + + + The actual path being tested + + + + + Flag indicating whether a caseInsensitive comparison should be made + + + + + Construct a PathConstraint for a give expected path + + The expected path + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Returns true if the expected path and actual path match + + + + + Returns the string representation of this constraint + + + + + Canonicalize the provided path + + + The path in standardized form + + + + Test whether two paths are the same + + The first path + The second path + Indicates whether case should be ignored + + + + + Test whether one path is under another path + + The first path - supposed to be the parent path + The second path - supposed to be the child path + Indicates whether case should be ignored + + + + + Test whether one path is the same as or under another path + + The first path - supposed to be the parent path + The second path - supposed to be the child path + + + + + Modifies the current instance to be case-insensitve + and returns it. + + + + + Modifies the current instance to be case-sensitve + and returns it. + + + + + Summary description for SamePathConstraint. + + + + + Initializes a new instance of the class. + + The expected path + + + + Test whether the constraint is satisfied by a given value + + The expected path + The actual path + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + SubPathConstraint tests that the actual path is under the expected path + + + + + Initializes a new instance of the class. + + The expected path + + + + Test whether the constraint is satisfied by a given value + + The expected path + The actual path + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + SamePathOrUnderConstraint tests that one path is under another + + + + + Initializes a new instance of the class. + + The expected path + + + + Test whether the constraint is satisfied by a given value + + The expected path + The actual path + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Predicate constraint wraps a Predicate in a constraint, + returning success if the predicate is true. + + + + + Construct a PredicateConstraint from a predicate + + + + + Determines whether the predicate succeeds when applied + to the actual value. + + + + + Writes the description to a MessageWriter + + + + + NotConstraint negates the effect of some other constraint + + + + + Initializes a new instance of the class. + + The base constraint to be negated. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for if the base constraint fails, false if it succeeds + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a MessageWriter. + + The writer on which the actual value is displayed + + + + AllItemsConstraint applies another constraint to each + item in a collection, succeeding if they all succeed. + + + + + Construct an AllItemsConstraint on top of an existing constraint + + + + + + Apply the item constraint to each item in the collection, + failing if any item fails. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + SomeItemsConstraint applies another constraint to each + item in a collection, succeeding if any of them succeeds. + + + + + Construct a SomeItemsConstraint on top of an existing constraint + + + + + + Apply the item constraint to each item in the collection, + succeeding if any item succeeds. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + NoItemConstraint applies another constraint to each + item in a collection, failing if any of them succeeds. + + + + + Construct a SomeItemsConstraint on top of an existing constraint + + + + + + Apply the item constraint to each item in the collection, + failing if any item fails. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + PropertyExistsConstraint tests that a named property + exists on the object provided through Match. + + Originally, PropertyConstraint provided this feature + in addition to making optional tests on the vaue + of the property. The two constraints are now separate. + + + + + Initializes a new instance of the class. + + The name of the property. + + + + Test whether the property exists for a given object + + The object to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. + + The writer on which the actual value is displayed + + + + Returns the string representation of the constraint. + + + + + + PropertyConstraint extracts a named property and uses + its value as the actual value for a chained constraint. + + + + + Initializes a new instance of the class. + + The name. + The constraint to apply to the property. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Returns the string representation of the constraint. + + + + + + RangeConstraint tests whethe two values are within a + specified range. + + + + + Initializes a new instance of the class. + + From. + To. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Modifies the constraint to use an IComparer and returns self. + + + + + Modifies the constraint to use an IComparer<T> and returns self. + + + + + Modifies the constraint to use a Comparison<T> and returns self. + + + + + ResolvableConstraintExpression is used to represent a compound + constraint being constructed at a point where the last operator + may either terminate the expression or may have additional + qualifying constraints added to it. + + It is used, for example, for a Property element or for + an Exception element, either of which may be optionally + followed by constraints that apply to the property or + exception. + + + + + Create a new instance of ResolvableConstraintExpression + + + + + Create a new instance of ResolvableConstraintExpression, + passing in a pre-populated ConstraintBuilder. + + + + + Resolve the current expression to a Constraint + + + + + Appends an And Operator to the expression + + + + + Appends an Or operator to the expression. + + + + + ReusableConstraint wraps a resolved constraint so that it + may be saved and reused as needed. + + + + + Construct a ReusableConstraint + + The constraint or expression to be reused + + + + Conversion operator from a normal constraint to a ReusableConstraint. + + The original constraint to be wrapped as a ReusableConstraint + + + + + Returns the string representation of the constraint. + + A string representing the constraint + + + + Resolves the ReusableConstraint by returning the constraint + that it originally wrapped. + + A resolved constraint + + + + SameAsConstraint tests whether an object is identical to + the object passed to its constructor + + + + + Initializes a new instance of the class. + + The expected object. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + BinarySerializableConstraint tests whether + an object is serializable in binary format. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Returns the string representation + + + + + BinarySerializableConstraint tests whether + an object is serializable in binary format. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Returns the string representation of this constraint + + + + + StringConstraint is the abstract base for constraints + that operate on strings. It supports the IgnoreCase + modifier for string operations. + + + + + The expected value + + + + + Indicates whether tests should be case-insensitive + + + + + Constructs a StringConstraint given an expected value + + The expected value + + + + Modify the constraint to ignore case in matching. + + + + + EmptyStringConstraint tests whether a string is empty. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + NullEmptyStringConstraint tests whether a string is either null or empty. + + + + + Constructs a new NullOrEmptyStringConstraint + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + SubstringConstraint can test whether a string contains + the expected substring. + + + + + Initializes a new instance of the class. + + The expected. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + StartsWithConstraint can test whether a string starts + with an expected substring. + + + + + Initializes a new instance of the class. + + The expected string + + + + Test whether the constraint is matched by the actual value. + This is a template method, which calls the IsMatch method + of the derived class. + + + + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + EndsWithConstraint can test whether a string ends + with an expected substring. + + + + + Initializes a new instance of the class. + + The expected string + + + + Test whether the constraint is matched by the actual value. + This is a template method, which calls the IsMatch method + of the derived class. + + + + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + RegexConstraint can test whether a string matches + the pattern provided. + + + + + Initializes a new instance of the class. + + The pattern. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + ThrowsConstraint is used to test the exception thrown by + a delegate by applying a constraint to it. + + + + + Initializes a new instance of the class, + using a constraint to be applied to the exception. + + A constraint to apply to the caught exception. + + + + Executes the code of the delegate and captures any exception. + If a non-null base constraint was provided, it applies that + constraint to the exception. + + A delegate representing the code to be tested + True if an exception is thrown and the constraint succeeds, otherwise false + + + + Converts an ActualValueDelegate to a TestDelegate + before calling the primary overload. + + + + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Returns the string representation of this constraint + + + + + Get the actual exception thrown - used by Assert.Throws. + + + + + ThrowsNothingConstraint tests that a delegate does not + throw an exception. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True if no exception is thrown, otherwise false + + + + Converts an ActualValueDelegate to a TestDelegate + before calling the primary overload. + + + + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Modes in which the tolerance value for a comparison can + be interpreted. + + + + + The tolerance was created with a value, without specifying + how the value would be used. This is used to prevent setting + the mode more than once and is generally changed to Linear + upon execution of the test. + + + + + The tolerance is used as a numeric range within which + two compared values are considered to be equal. + + + + + Interprets the tolerance as the percentage by which + the two compared values my deviate from each other. + + + + + Compares two values based in their distance in + representable numbers. + + + + + The Tolerance class generalizes the notion of a tolerance + within which an equality test succeeds. Normally, it is + used with numeric types, but it can be used with any + type that supports taking a difference between two + objects and comparing that difference to a value. + + + + + Constructs a linear tolerance of a specdified amount + + + + + Constructs a tolerance given an amount and ToleranceMode + + + + + Tests that the current Tolerance is linear with a + numeric value, throwing an exception if it is not. + + + + + Returns an empty Tolerance object, equivalent to + specifying an exact match. + + + + + Gets the ToleranceMode for the current Tolerance + + + + + Gets the value of the current Tolerance instance. + + + + + Returns a new tolerance, using the current amount as a percentage. + + + + + Returns a new tolerance, using the current amount in Ulps. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of days. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of hours. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of minutes. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of seconds. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of milliseconds. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of clock ticks. + + + + + Returns true if the current tolerance is empty. + + + + + TypeConstraint is the abstract base for constraints + that take a Type as their expected value. + + + + + The expected Type used by the constraint + + + + + Construct a TypeConstraint for a given Type + + + + + + Write the actual value for a failing constraint test to a + MessageWriter. TypeConstraints override this method to write + the name of the type. + + The writer on which the actual value is displayed + + + + ExactTypeConstraint is used to test that an object + is of the exact type provided in the constructor + + + + + Construct an ExactTypeConstraint for a given Type + + The expected Type. + + + + Test that an object is of the exact type specified + + The actual value. + True if the tested object is of the exact type provided, otherwise false. + + + + Write the description of this constraint to a MessageWriter + + The MessageWriter to use + + + + InstanceOfTypeConstraint is used to test that an object + is of the same type provided or derived from it. + + + + + Construct an InstanceOfTypeConstraint for the type provided + + The expected Type + + + + Test whether an object is of the specified type or a derived type + + The object to be tested + True if the object is of the provided type or derives from it, otherwise false. + + + + Write a description of this constraint to a MessageWriter + + The MessageWriter to use + + + + AssignableFromConstraint is used to test that an object + can be assigned from a given Type. + + + + + Construct an AssignableFromConstraint for the type provided + + + + + + Test whether an object can be assigned from the specified type + + The object to be tested + True if the object can be assigned a value of the expected Type, otherwise false. + + + + Write a description of this constraint to a MessageWriter + + The MessageWriter to use + + + + AssignableToConstraint is used to test that an object + can be assigned to a given Type. + + + + + Construct an AssignableToConstraint for the type provided + + + + + + Test whether an object can be assigned to the specified type + + The object to be tested + True if the object can be assigned a value of the expected Type, otherwise false. + + + + Write a description of this constraint to a MessageWriter + + The MessageWriter to use + + + + Thrown when an assertion failed. + + + + + The error message that explains + the reason for the exception + + + The error message that explains + the reason for the exception + The exception that caused the + current exception + + + + Serialization Constructor + + + + + Thrown when an assertion failed. + + + + + + + The error message that explains + the reason for the exception + The exception that caused the + current exception + + + + Serialization Constructor + + + + + Thrown when a test executes inconclusively. + + + + + The error message that explains + the reason for the exception + + + The error message that explains + the reason for the exception + The exception that caused the + current exception + + + + Serialization Constructor + + + + + Thrown when an assertion failed. + + + + + + + The error message that explains + the reason for the exception + The exception that caused the + current exception + + + + Serialization Constructor + + + + + Delegate used by tests that execute code and + capture any thrown exception. + + + + + The Assert class contains a collection of static methods that + implement the most common assertions used in NUnit. + + + + + We don't actually want any instances of this object, but some people + like to inherit from it to add other static methods. Hence, the + protected constructor disallows any instances of this object. + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + Helper for Assert.AreEqual(double expected, double actual, ...) + allowing code generation to work consistently. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Throws a with the message and arguments + that are passed in. This allows a test to be cut short, with a result + of success returned to NUnit. + + The message to initialize the with. + Arguments to be used in formatting the message + + + + Throws a with the message and arguments + that are passed in. This allows a test to be cut short, with a result + of success returned to NUnit. + + The message to initialize the with. + + + + Throws a with the message and arguments + that are passed in. This allows a test to be cut short, with a result + of success returned to NUnit. + + + + + Throws an with the message and arguments + that are passed in. This is used by the other Assert functions. + + The message to initialize the with. + Arguments to be used in formatting the message + + + + Throws an with the message that is + passed in. This is used by the other Assert functions. + + The message to initialize the with. + + + + Throws an . + This is used by the other Assert functions. + + + + + Throws an with the message and arguments + that are passed in. This causes the test to be reported as ignored. + + The message to initialize the with. + Arguments to be used in formatting the message + + + + Throws an with the message that is + passed in. This causes the test to be reported as ignored. + + The message to initialize the with. + + + + Throws an . + This causes the test to be reported as ignored. + + + + + Throws an with the message and arguments + that are passed in. This causes the test to be reported as inconclusive. + + The message to initialize the with. + Arguments to be used in formatting the message + + + + Throws an with the message that is + passed in. This causes the test to be reported as inconclusive. + + The message to initialize the with. + + + + Throws an . + This causes the test to be reported as Inconclusive. + + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint expression to be applied + The actual value to test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint expression to be applied + An ActualValueDelegate returning the value to be tested + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint expression to be applied + An ActualValueDelegate returning the value to be tested + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + An ActualValueDelegate returning the value to be tested + A Constraint expression to be applied + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display if the condition is false + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display if the condition is false + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + + + + Asserts that the code represented by a delegate throws an exception + that satisfies the constraint provided. + + A TestDelegate to be executed + A ThrowsConstraint used in the test + + + + Verifies that a delegate throws a particular exception when called. + + A constraint to be satisfied by the exception + A TestSnippet delegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws a particular exception when called. + + A constraint to be satisfied by the exception + A TestSnippet delegate + The message that will be displayed on failure + + + + Verifies that a delegate throws a particular exception when called. + + A constraint to be satisfied by the exception + A TestSnippet delegate + + + + Verifies that a delegate throws a particular exception when called. + + The exception Type expected + A TestSnippet delegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws a particular exception when called. + + The exception Type expected + A TestSnippet delegate + The message that will be displayed on failure + + + + Verifies that a delegate throws a particular exception when called. + + The exception Type expected + A TestSnippet delegate + + + + Verifies that a delegate throws a particular exception when called. + + Type of the expected exception + A TestSnippet delegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws a particular exception when called. + + Type of the expected exception + A TestSnippet delegate + The message that will be displayed on failure + + + + Verifies that a delegate throws a particular exception when called. + + Type of the expected exception + A TestSnippet delegate + + + + Verifies that a delegate throws an exception when called + and returns it. + + A TestDelegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws an exception when called + and returns it. + + A TestDelegate + The message that will be displayed on failure + + + + Verifies that a delegate throws an exception when called + and returns it. + + A TestDelegate + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + The message that will be displayed on failure + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + The message that will be displayed on failure + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + + + + Verifies that a delegate does not throw an exception + + A TestSnippet delegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate does not throw an exception. + + A TestSnippet delegate + The message that will be displayed on failure + + + + Verifies that a delegate does not throw an exception. + + A TestSnippet delegate + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display in case of failure + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display in case of failure + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + The message to display in case of failure + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + The message to display in case of failure + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + The message to display in case of failure + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + The message to display in case of failure + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + + + + Assert that a string is empty - that is equal to string.Empty + + The string to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that a string is empty - that is equal to string.Empty + + The string to be tested + The message to display in case of failure + + + + Assert that a string is empty - that is equal to string.Empty + + The string to be tested + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing ICollection + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing ICollection + The message to display in case of failure + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing ICollection + + + + Assert that a string is not empty - that is not equal to string.Empty + + The string to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that a string is not empty - that is not equal to string.Empty + + The string to be tested + The message to display in case of failure + + + + Assert that a string is not empty - that is not equal to string.Empty + + The string to be tested + + + + Assert that an array, list or other collection is not empty + + An array, list or other collection implementing ICollection + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that an array, list or other collection is not empty + + An array, list or other collection implementing ICollection + The message to display in case of failure + + + + Assert that an array, list or other collection is not empty + + An array, list or other collection implementing ICollection + + + + Assert that a string is either null or equal to string.Empty + + The string to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that a string is either null or equal to string.Empty + + The string to be tested + The message to display in case of failure + + + + Assert that a string is either null or equal to string.Empty + + The string to be tested + + + + Assert that a string is not null or empty + + The string to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that a string is not null or empty + + The string to be tested + The message to display in case of failure + + + + Assert that a string is not null or empty + + The string to be tested + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message to display in case of failure + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message to display in case of failure + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + + + + Verifies that two objects are equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are not equal an is thrown. + + The value that is expected + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two objects are equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are not equal an is thrown. + + The value that is expected + The actual value + The message to display in case of failure + + + + Verifies that two objects are equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are not equal an is thrown. + + The value that is expected + The actual value + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two objects are not equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are equal an is thrown. + + The value that is expected + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two objects are not equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are equal an is thrown. + + The value that is expected + The actual value + The message to display in case of failure + + + + Verifies that two objects are not equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are equal an is thrown. + + The value that is expected + The actual value + + + + Asserts that two objects refer to the same object. If they + are not the same an is thrown. + + The expected object + The actual object + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that two objects refer to the same object. If they + are not the same an is thrown. + + The expected object + The actual object + The message to display in case of failure + + + + Asserts that two objects refer to the same object. If they + are not the same an is thrown. + + The expected object + The actual object + + + + Asserts that two objects do not refer to the same object. If they + are the same an is thrown. + + The expected object + The actual object + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that two objects do not refer to the same object. If they + are the same an is thrown. + + The expected object + The actual object + The message to display in case of failure + + + + Asserts that two objects do not refer to the same object. If they + are the same an is thrown. + + The expected object + The actual object + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Asserts that an object is contained in a list. + + The expected object + The list to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is contained in a list. + + The expected object + The list to be examined + The message to display in case of failure + + + + Asserts that an object is contained in a list. + + The expected object + The list to be examined + + + + Gets the number of assertions executed so far and + resets the counter to zero. + + + + + AssertionHelper is an optional base class for user tests, + allowing the use of shorter names for constraints and + asserts and avoiding conflict with the definition of + , from which it inherits much of its + behavior, in certain mock object frameworks. + + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. Works + identically to + + A Constraint to be applied + The actual value to test + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. Works + identically to + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. Works + identically to + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint expression to be applied + An ActualValueDelegate returning the value to be tested + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint expression to be applied + An ActualValueDelegate returning the value to be tested + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + An ActualValueDelegate returning the value to be tested + A Constraint expression to be applied + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . Works Identically to + . + + The evaluated condition + The message to display if the condition is false + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . Works Identically to + . + + The evaluated condition + The message to display if the condition is false + + + + Asserts that a condition is true. If the condition is false the method throws + an . Works Identically to . + + The evaluated condition + + + + Asserts that the code represented by a delegate throws an exception + that satisfies the constraint provided. + + A TestDelegate to be executed + A ThrowsConstraint used in the test + + + + Returns a ListMapper based on a collection. + + The original collection + + + + + Provides static methods to express the assumptions + that must be met for a test to give a meaningful + result. If an assumption is not met, the test + should produce an inconclusive result. + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + An ActualValueDelegate returning the value to be tested + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + An ActualValueDelegate returning the value to be tested + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + An ActualValueDelegate returning the value to be tested + A Constraint expression to be applied + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + The message that will be displayed on failure + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display if the condition is false + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display if the condition is false + + + + Asserts that a condition is true. If the condition is false the + method throws an . + + The evaluated condition + + + + Asserts that the code represented by a delegate throws an exception + that satisfies the constraint provided. + + A TestDelegate to be executed + A ThrowsConstraint used in the test + + + + A set of Assert methods operationg on one or more collections + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + Asserts that all items contained in collection are of the type specified by expectedType. + + IEnumerable containing objects to be considered + System.Type that all objects in collection must be instances of + + + + Asserts that all items contained in collection are of the type specified by expectedType. + + IEnumerable containing objects to be considered + System.Type that all objects in collection must be instances of + The message that will be displayed on failure + + + + Asserts that all items contained in collection are of the type specified by expectedType. + + IEnumerable containing objects to be considered + System.Type that all objects in collection must be instances of + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that all items contained in collection are not equal to null. + + IEnumerable containing objects to be considered + + + + Asserts that all items contained in collection are not equal to null. + + IEnumerable containing objects to be considered + The message that will be displayed on failure + + + + Asserts that all items contained in collection are not equal to null. + + IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Ensures that every object contained in collection exists within the collection + once and only once. + + IEnumerable of objects to be considered + + + + Ensures that every object contained in collection exists within the collection + once and only once. + + IEnumerable of objects to be considered + The message that will be displayed on failure + + + + Ensures that every object contained in collection exists within the collection + once and only once. + + IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + The message that will be displayed on failure + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + + + + Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + + + + Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are not exactly equal. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + + + + Asserts that expected and actual are not exactly equal. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + + + + Asserts that expected and actual are not exactly equal. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + + + + Asserts that expected and actual are not exactly equal. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + The message that will be displayed on failure + + + + Asserts that expected and actual are not exactly equal. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are not exactly equal. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are not equivalent. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + + + + Asserts that expected and actual are not equivalent. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + + + + Asserts that expected and actual are not equivalent. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that collection contains actual as an item. + + IEnumerable of objects to be considered + Object to be found within collection + + + + Asserts that collection contains actual as an item. + + IEnumerable of objects to be considered + Object to be found within collection + The message that will be displayed on failure + + + + Asserts that collection contains actual as an item. + + IEnumerable of objects to be considered + Object to be found within collection + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that collection does not contain actual as an item. + + IEnumerable of objects to be considered + Object that cannot exist within collection + + + + Asserts that collection does not contain actual as an item. + + IEnumerable of objects to be considered + Object that cannot exist within collection + The message that will be displayed on failure + + + + Asserts that collection does not contain actual as an item. + + IEnumerable of objects to be considered + Object that cannot exist within collection + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that superset is not a subject of subset. + + The IEnumerable superset to be considered + The IEnumerable subset to be considered + + + + Asserts that superset is not a subject of subset. + + The IEnumerable superset to be considered + The IEnumerable subset to be considered + The message that will be displayed on failure + + + + Asserts that superset is not a subject of subset. + + The IEnumerable superset to be considered + The IEnumerable subset to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that superset is a subset of subset. + + The IEnumerable superset to be considered + The IEnumerable subset to be considered + + + + Asserts that superset is a subset of subset. + + The IEnumerable superset to be considered + The IEnumerable subset to be considered + The message that will be displayed on failure + + + + Asserts that superset is a subset of subset. + + The IEnumerable superset to be considered + The IEnumerable subset to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + + + + Assert that an array,list or other collection is empty + + An array, list or other collection implementing IEnumerable + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + + + + Assert that an array,list or other collection is empty + + An array, list or other collection implementing IEnumerable + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + A custom comparer to perform the comparisons + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + A custom comparer to perform the comparisons + The message to be displayed on failure + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + A custom comparer to perform the comparisons + + + + Static helper class used in the constraint-based syntax + + + + + Creates a new SubstringConstraint + + The value of the substring + A SubstringConstraint + + + + Creates a new CollectionContainsConstraint. + + The item that should be found. + A new CollectionContainsConstraint + + + + Summary description for DirectoryAssert + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + We don't actually want any instances of this object, but some people + like to inherit from it to add other static methods. Hence, the + protected constructor disallows any instances of this object. + + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + The message to display if directories are not equal + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + The message to display if directories are not equal + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + The message to display if directories are not equal + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + The message to display if directories are equal + Arguments to be used in formatting the message + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + The message to display if directories are equal + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + The message to display if directories are not equal + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + The message to display if directories are not equal + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + The message to display if directories are not equal + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + The message to display if directories are not equal + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + Arguments to be used in formatting the message + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + Arguments to be used in formatting the message + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + Arguments to be used in formatting the message + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + Arguments to be used in formatting the message + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + + + + Summary description for FileAssert. + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + We don't actually want any instances of this object, but some people + like to inherit from it to add other static methods. Hence, the + protected constructor disallows any instances of this object. + + + + + Verifies that two Streams are equal. Two Streams are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The expected Stream + The actual Stream + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Verifies that two Streams are equal. Two Streams are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The expected Stream + The actual Stream + The message to display if objects are not equal + + + + Verifies that two Streams are equal. Two Streams are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The expected Stream + The actual Stream + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A file containing the value that is expected + A file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A file containing the value that is expected + A file containing the actual value + The message to display if objects are not equal + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A file containing the value that is expected + A file containing the actual value + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + The message to display if objects are not equal + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + + + + Asserts that two Streams are not equal. If they are equal + an is thrown. + + The expected Stream + The actual Stream + The message to be displayed when the two Stream are the same. + Arguments to be used in formatting the message + + + + Asserts that two Streams are not equal. If they are equal + an is thrown. + + The expected Stream + The actual Stream + The message to be displayed when the Streams are the same. + + + + Asserts that two Streams are not equal. If they are equal + an is thrown. + + The expected Stream + The actual Stream + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + A file containing the value that is expected + A file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + A file containing the value that is expected + A file containing the actual value + The message to display if objects are not equal + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + A file containing the value that is expected + A file containing the actual value + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + The message to display if objects are not equal + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + + + + GlobalSettings is a place for setting default values used + by the framework in performing asserts. + + + + + Default tolerance for floating point equality + + + + + Helper class with properties and methods that supply + a number of constraints used in Asserts. + + + + + Returns a new PropertyConstraintExpression, which will either + test for the existence of the named property on the object + being tested or apply any following constraint to that property. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if at least one of them succeeds. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them fail. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Length property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Count property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Message property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the InnerException property of the object being tested. + + + + + Interface implemented by a user fixture in order to + validate any expected exceptions. It is only called + for test methods marked with the ExpectedException + attribute. + + + + + Method to handle an expected exception + + The exception to be handled + + + + Helper class with properties and methods that supply + a number of constraints used in Asserts. + + + + + Returns a constraint that tests two items for equality + + + + + Returns a constraint that tests that two references are the same object + + + + + Returns a constraint that tests whether the + actual value is greater than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a collection containing the same elements as the + collection supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a subset of the collection supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the Regex pattern supplied as an argument. + + + + + Returns a constraint that tests whether the path provided + is the same as an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the actual value falls + within a specified range. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + Returns a constraint that tests for null + + + + + Returns a constraint that tests for True + + + + + Returns a constraint that tests for False + + + + + Returns a constraint that tests for NaN + + + + + Returns a constraint that tests for empty + + + + + Returns a constraint that tests whether a collection + contains all unique items. + + + + + Returns a constraint that tests whether an object graph is serializable in binary format. + + + + + Returns a constraint that tests whether an object graph is serializable in xml format. + + + + + Returns a constraint that tests whether a collection is ordered + + + + + The Iz class is a synonym for Is intended for use in VB, + which regards Is as a keyword. + + + + + The List class is a helper class with properties and methods + that supply a number of constraints used with lists and collections. + + + + + List.Map returns a ListMapper, which can be used to map + the original collection to another collection. + + + + + + + ListMapper is used to transform a collection used as an actual argument + producing another collection to be used in the assertion. + + + + + Construct a ListMapper based on a collection + + The collection to be transformed + + + + Produces a collection containing all the values of a property + + The collection of property values + + + + + Randomizer returns a set of random values in a repeatable + way, to allow re-running of tests if necessary. + + + + + Get a randomizer for a particular member, returning + one that has already been created if it exists. + This ensures that the same values are generated + each time the tests are reloaded. + + + + + Get a randomizer for a particular parameter, returning + one that has already been created if it exists. + This ensures that the same values are generated + each time the tests are reloaded. + + + + + Construct a randomizer using a random seed + + + + + Construct a randomizer using a specified seed + + + + + Return an array of random doubles between 0.0 and 1.0. + + + + + + + Return an array of random doubles with values in a specified range. + + + + + Return an array of random ints with values in a specified range. + + + + + Get a random seed for use in creating a randomizer. + + + + + The SpecialValue enum is used to represent TestCase arguments + that cannot be used as arguments to an Attribute. + + + + + Null represents a null value, which cannot be used as an + argument to an attriute under .NET 1.x + + + + + Basic Asserts on strings. + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + + + + Asserts that a string is not found within another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + + + + Asserts that a string starts with another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string starts with another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string starts with another string. + + The expected string + The string to be examined + + + + Asserts that a string does not start with another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string does not start with another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string does not start with another string. + + The expected string + The string to be examined + + + + Asserts that a string ends with another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string ends with another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string ends with another string. + + The expected string + The string to be examined + + + + Asserts that a string does not end with another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string does not end with another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string does not end with another string. + + The expected string + The string to be examined + + + + Asserts that two strings are equal, without regard to case. + + The expected string + The actual string + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that two strings are equal, without regard to case. + + The expected string + The actual string + The message to display in case of failure + + + + Asserts that two strings are equal, without regard to case. + + The expected string + The actual string + + + + Asserts that two strings are not equal, without regard to case. + + The expected string + The actual string + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that two strings are Notequal, without regard to case. + + The expected string + The actual string + The message to display in case of failure + + + + Asserts that two strings are not equal, without regard to case. + + The expected string + The actual string + + + + Asserts that a string matches an expected regular expression pattern. + + The regex pattern to be matched + The actual string + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string matches an expected regular expression pattern. + + The regex pattern to be matched + The actual string + The message to display in case of failure + + + + Asserts that a string matches an expected regular expression pattern. + + The regex pattern to be matched + The actual string + + + + Asserts that a string does not match an expected regular expression pattern. + + The regex pattern to be used + The actual string + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string does not match an expected regular expression pattern. + + The regex pattern to be used + The actual string + The message to display in case of failure + + + + Asserts that a string does not match an expected regular expression pattern. + + The regex pattern to be used + The actual string + + + + The TestCaseData class represents a set of arguments + and other parameter info to be used for a parameterized + test case. It provides a number of instance modifiers + for use in initializing the test case. + + Note: Instance modifiers are getters that return + the same instance after modifying it's state. + + + + + The argument list to be provided to the test + + + + + The expected result to be returned + + + + + The expected exception Type + + + + + The FullName of the expected exception + + + + + The name to be used for the test + + + + + The description of the test + + + + + A dictionary of properties, used to add information + to tests without requiring the class to change. + + + + + If true, indicates that the test case is to be ignored + + + + + The reason for ignoring a test case + + + + + Initializes a new instance of the class. + + The arguments. + + + + Initializes a new instance of the class. + + The argument. + + + + Initializes a new instance of the class. + + The first argument. + The second argument. + + + + Initializes a new instance of the class. + + The first argument. + The second argument. + The third argument. + + + + Sets the expected result for the test + + The expected result + A modified TestCaseData + + + + Sets the expected exception type for the test + + Type of the expected exception. + The modified TestCaseData instance + + + + Sets the expected exception type for the test + + FullName of the expected exception. + The modified TestCaseData instance + + + + Sets the name of the test case + + The modified TestCaseData instance + + + + Sets the description for the test case + being constructed. + + The description. + The modified TestCaseData instance. + + + + Applies a category to the test + + + + + + + Applies a named property to the test + + + + + + + + Applies a named property to the test + + + + + + + + Applies a named property to the test + + + + + + + + Ignores this TestCase. + + + + + + Ignores this TestCase, specifying the reason. + + The reason. + + + + + Gets the argument list to be provided to the test + + + + + Gets the expected result + + + + + Gets the expected exception Type + + + + + Gets the FullName of the expected exception + + + + + Gets the name to be used for the test + + + + + Gets the description of the test + + + + + Gets a value indicating whether this is ignored. + + true if ignored; otherwise, false. + + + + Gets the ignore reason. + + The ignore reason. + + + + Gets a list of categories associated with this test. + + + + + Gets the property dictionary for this test + + + + + Provide the context information of the current test + + + + + Constructs a TestContext using the provided context dictionary + + A context dictionary + + + + Get the current test context. This is created + as needed. The user may save the context for + use within a test, but it should not be used + outside the test for which it is created. + + + + + Gets a TestAdapter representing the currently executing test in this context. + + + + + Gets a ResultAdapter representing the current result for the test + executing in this context. + + + + + Gets the current directory for this TestContext + + + + + TestAdapter adapts a Test for consumption by + the user test code. + + + + + Constructs a TestAdapter for this context + + The context dictionary + + + + The name of the test. + + + + + The FullName of the test + + + + + The properties of the test. + + + + + ResultAdapter adapts a TestResult for consumption by + the user test code. + + + + + Construct a ResultAdapter for a context + + The context holding the result + + + + The TestState of current test. This maps to the ResultState + used in nunit.core and is subject to change in the future. + + + + + The TestStatus of current test. This enum will be used + in future versions of NUnit and so is to be preferred + to the TestState value. + + + + + The ResultState enum indicates the result of running a test + + + + + The result is inconclusive + + + + + The test was not runnable. + + + + + The test has been skipped. + + + + + The test has been ignored. + + + + + The test succeeded + + + + + The test failed + + + + + The test encountered an unexpected exception + + + + + The test was cancelled by the user + + + + + The TestStatus enum indicates the result of running a test + + + + + The test was inconclusive + + + + + The test has skipped + + + + + The test succeeded + + + + + The test failed + + + + + Helper class with static methods used to supply constraints + that operate on strings. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the Regex pattern supplied as an argument. + + + + + Returns a constraint that fails if the actual + value matches the pattern supplied as an argument. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + TextMessageWriter writes constraint descriptions and messages + in displayable form as a text stream. It tailors the display + of individual message components to form the standard message + format of NUnit assertion failure messages. + + + + + Prefix used for the expected value line of a message + + + + + Prefix used for the actual value line of a message + + + + + Length of a message prefix + + + + + Construct a TextMessageWriter + + + + + Construct a TextMessageWriter, specifying a user message + and optional formatting arguments. + + + + + + + Method to write single line message with optional args, usually + written to precede the general failure message, at a givel + indentation level. + + The indentation level of the message + The message to be written + Any arguments used in formatting the message + + + + Display Expected and Actual lines for a constraint. This + is called by MessageWriter's default implementation of + WriteMessageTo and provides the generic two-line display. + + The constraint that failed + + + + Display Expected and Actual lines for given values. This + method may be called by constraints that need more control over + the display of actual and expected values than is provided + by the default implementation. + + The expected value + The actual value causing the failure + + + + Display Expected and Actual lines for given values, including + a tolerance value on the expected line. + + The expected value + The actual value causing the failure + The tolerance within which the test was made + + + + Display the expected and actual string values on separate lines. + If the mismatch parameter is >=0, an additional line is displayed + line containing a caret that points to the mismatch point. + + The expected string value + The actual string value + The point at which the strings don't match or -1 + If true, case is ignored in string comparisons + If true, clip the strings to fit the max line length + + + + Writes the text for a connector. + + The connector. + + + + Writes the text for a predicate. + + The predicate. + + + + Write the text for a modifier. + + The modifier. + + + + Writes the text for an expected value. + + The expected value. + + + + Writes the text for an actual value. + + The actual value. + + + + Writes the text for a generalized value. + + The value. + + + + Writes the text for a collection value, + starting at a particular point, to a max length + + The collection containing elements to write. + The starting point of the elements to write + The maximum number of elements to write + + + + Write the generic 'Expected' line for a constraint + + The constraint that failed + + + + Write the generic 'Expected' line for a given value + + The expected value + + + + Write the generic 'Expected' line for a given value + and tolerance. + + The expected value + The tolerance within which the test was made + + + + Write the generic 'Actual' line for a constraint + + The constraint for which the actual value is to be written + + + + Write the generic 'Actual' line for a given value + + The actual value causing a failure + + + + Gets or sets the maximum line length for this writer + + + + + Helper class with properties and methods that supply + constraints that operate on exceptions. + + + + + Creates a constraint specifying the exact type of exception expected + + + + + Creates a constraint specifying the exact type of exception expected + + + + + Creates a constraint specifying the type of exception expected + + + + + Creates a constraint specifying the type of exception expected + + + + + Creates a constraint specifying an expected exception + + + + + Creates a constraint specifying an exception with a given InnerException + + + + + Creates a constraint specifying an expected TargetInvocationException + + + + + Creates a constraint specifying an expected TargetInvocationException + + + + + Creates a constraint specifying an expected TargetInvocationException + + + + + Creates a constraint specifying that no exception is thrown + + + + diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/lib/nunit.mocks.dll b/trunk/hammock/src/packages/NUnit.2.5.10.11092/lib/nunit.mocks.dll new file mode 100644 index 0000000000000000000000000000000000000000..6ee2c1cc20dba59e4fbe2948a130b2593145d790 GIT binary patch literal 20480 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 literal 0 HcmV?d00001 diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/lib/pnunit.framework.dll b/trunk/hammock/src/packages/NUnit.2.5.10.11092/lib/pnunit.framework.dll new file mode 100644 index 0000000000000000000000000000000000000000..6c105d70f908dc7047aad6fbeba58162189c6070 GIT binary patch literal 6656 zcmeHLZ)_aZ5udlacX2N95sYIJu#-(4sx*PC^AA)tC3ftD7!t?$9FsJa!uq^+Ho3cX zclVMw(IF#9X{4$RQX3K!74e}}KeQE6X+agBh)VuKiQq#~3sp%4MXf+;K}ZFJpud^7 zdp_rYkk8Gt_qQ`|=FOX#H}CE4?fmvBGKt8-_35WXPvg$5Tkwlv8shBo-)HH``7f?` zTJ3mo#qa?yv?l|9B5+D}!6}#h$R2g=pi;KIvfZ~UZnuak-W8)|lf9_|*`+O${KYlo0o-4Z`; zO#GnLuNtjYgk<4{Xsp_dW(8R@w8*NMOpAOPak87ldHX8+h`iB#+^dteVBReYDd>eO zVLPTdCZfz5O2=b5FottY#&Mpvmgxn-L~YFK(+C~8NykdZd8xGiab8m&OPQwCkAAV1 z>0_m#_S4I#Sw74|5Bs*uqWy8MW(RTH!C5$0=YhEjab$c1KgUPYN0o4ojCt+z$E-&F zlx!2E7P*)cEr%!>OLWk2sSX!$tYZ)oo#d1!Mov+>&Dsl7J1KSk#d`1rS-1{4SoT@= zu8HkgDIfkob6Kkt1M;>df9Dnz?_53y4zJ5~TGr((ef!3Rb1(q&f@f4~0H0__#U;-``MA0{^9+M!CMHo}ob- zF4Fgwyh20h*KH>CR~o6~-lBcHp3-JgZ;>Ob#q3P#9r7@bZZoM5F%COb+Ds~~CiVJ* zXYMd^kjPrp2%_F&GtaZ1ARM~VW>R@|3Xiex+sv};7qpm`tVp2r8y@m$;1GGtROV4t}JLlaR ztxyBp^Fggg(_pbt)SUiR&@^cy(4x)26zYU^ZV*jv^Cv=ck3o;rSz!Cd9Gjo-=L&iS zaeqy4E$~(PhR{8N{epK3?iF+dJ;Cn^P6^%*e4S1LhfpPq4+~yP%dIz2oi|%A12+oY zD|ol`IMzSWe^BVdf+wtZu$oL`O$FJ*v-C^rBh;8h&A=u+3A5OB-=Z96^>QMio_erUgvZgu9M9qtyKY<(C1)WXJ02Td6Xnu#v z(C`{&9;09JAl)|Y^v5bi_jZ~rSISv+V%oQR(pnC!@a(8%TS5q|LN8b2UJaIoF ziq+x#ECVyqtWEY*rs@epw=`Ou5{7$+{h>-(q8xOPmr$IM$kERVwDqW4s6_6VB$4{V zd?n6QxXtm3mB6JwH!K9+WaRm<$EZq8#b z$Dt6CUYuU^iaT+9TaOl8ZMh`NP>Pp}z=n}ihUq)phb?-5K?tisBqS7JWyPXyiu>{MRg8ex`%OCj8?|UE04KHsUS5J z=zTXDZo z#1jo08V=}CG;la}mhk>m1|OlnEZVlnZEzK_MQewl%^IvZ4m&K<^Ln5>vF-x*oD;o?anon6vTgET<9WAA(5i3>WSwmfac!*E0}kLi2B z4O8n@X!qeGo!KGeft5^~lw~WGO#wR0dA12`YD(LN%C@wp_?AthGn;KP(;Zne-LfcS zr@&@AvMq~vP)np|Sd8D%R)0@cd z)@oPrOJsn*f#heS>AA|hZuoX2YUpRZ?YQ=IZ;eT;wpAn6g{wz9Oh+F?{z$wCIc{4mxwVC@cdx#T_?aZEl zJd2I18{a&$x+BmHpsi0y)>(^p)h=8cKy~3QJ4fq5uak@AJMdkkBszVbl@SYG7l9?% z!Y><$uo9myIh>jtGfR%( literal 0 HcmV?d00001 diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/license.txt b/trunk/hammock/src/packages/NUnit.2.5.10.11092/license.txt new file mode 100644 index 0000000..66a5ebf --- /dev/null +++ b/trunk/hammock/src/packages/NUnit.2.5.10.11092/license.txt @@ -0,0 +1,15 @@ +Copyright © 2002-2008 Charlie Poole +Copyright © 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov +Copyright © 2000-2002 Philip A. Craig + +This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment (see the following) in the product documentation is required. + +Portions Copyright © 2002-2008 Charlie Poole or Copyright © 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov or Copyright © 2000-2002 Philip A. Craig + +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source distribution. diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/NUnitTests.VisualState.xml b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/NUnitTests.VisualState.xml new file mode 100644 index 0000000..d975dcd --- /dev/null +++ b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/NUnitTests.VisualState.xml @@ -0,0 +1,124 @@ + + + [0-1000]D:\Dev\NUnit\nunit-2.5\work\build\net\2.0\release\NUnitTests.nunit + [0-1000]D:\Dev\NUnit\nunit-2.5\work\build\net\2.0\release\NUnitTests.nunit + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/NUnitTests.config b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/NUnitTests.config new file mode 100644 index 0000000..fb15771 --- /dev/null +++ b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/NUnitTests.config @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/NUnitTests.nunit b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/NUnitTests.nunit new file mode 100644 index 0000000..e7bb7f4 --- /dev/null +++ b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/NUnitTests.nunit @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/agent.conf b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/agent.conf new file mode 100644 index 0000000..ddbcd8e --- /dev/null +++ b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/agent.conf @@ -0,0 +1,4 @@ + + 8080 + . + \ No newline at end of file diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/agent.log.conf b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/agent.log.conf new file mode 100644 index 0000000..4bd90ca --- /dev/null +++ b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/agent.log.conf @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/launcher.log.conf b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/launcher.log.conf new file mode 100644 index 0000000..4bd90ca --- /dev/null +++ b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/launcher.log.conf @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/Failure.png b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/Failure.png new file mode 100644 index 0000000000000000000000000000000000000000..2e400b276fcd227a2f056b4a2c704a3a17776bf2 GIT binary patch literal 1445 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fHRz`)E9 z;1l8sRKUo{$jk&pOzh0e>?|xCtgIXy9AX@7f`WolBEl*>9IAX==Hfz@lA;O<3Z|x} z=H}*(GUDEnLVmJhVG{fi(t<7u(jH2(0Sb~Ks&cUk;@+wXk-8eO#(GKWa-pH2$ss|h zp~2Ke@2e>~Y_E0LUi+wv!C_DH6K+N)-Azt;nV<2oIOl71F3|2`ko~DZ zhsz<3S3;eyg}dH}_PiDAeIw52M!etQ;dFk&lg!9x zxiPQH(%x6+%xtKg)mS&HsqSDyX-iAX#EBDU&z?PJ&YbPrx9{1r=fZ^x*REXy2Gl4R zej%{GtG*hT1sF<#{DS|FY`_rwom~|e!<+>kk;T9Q2$?i7*PM82?WL(g zN`WPzD}+VwdMv!tclO`E`;B||X1=U6{T!X0cGlpZ__Dns(^Q{q33<@@B{==%nWLWe zk1k$d-u?gaXS02Y?em%@UT;|X`Le6Q9%a@~-wSg4Dw&gQuTA7S^0aqm1jFsXn`gLK zuT`(x(RJ!s_RG_k0(5hn3;4_C?KACI9eX3|FH6Gy)$UIicifXYyG!~|)yo?vi~jBW z6jT{=a3z2Dp~83PY7E{_76^TyV3HAkJ?rKNS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fHRz`)E9 z;1l8sR3IV3CMCuuBf%yw#V#+yE-S?^FDoh|Eg>f-CoeCrq`;x7$f=^tsj9-Mp$sFr8r9QJqWp9JN1n((vk4)9WYVZyYLZYHDh3Zk{%6 z+U(i0=ggV2ZQHi(+qd7_JNN$nxepFbyLRo`{rmS{9XSXL&rvXhLg0aY?KWVZVkimn z3;sW{0YmV2c2!{1aTa()76S{QYaq-xA-{4CP*9@8HKHUqKdq!Zu_%=xATcwqM94ZLo|YufAq6S9Qc#sYAG36YapyLLGk>-bH|RITgV`K;&Dp4 zNJ!Ykgrw`OD?F|zU))eouw`|VL?6U#FuR-@+LO+}L)C2jq= zW9lKJMyAYvZGncJoU;!7nZ(AJnZTH=KEFa&Q!q6Ac)=+(gsSzopr024hF%>V!Z literal 0 HcmV?d00001 diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/Inconclusive.png b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/Inconclusive.png new file mode 100644 index 0000000000000000000000000000000000000000..4807b7cedbc70436d121f9052bdf719cf2e692ed GIT binary patch literal 1436 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fHRz`)E9 z;1l8s(!-;v$fu>mr>!iYtt6tUDypL{qOT^Vt0bYJBB8A!rKK*Rt0Qk@EN!c;ps%fD zpr>e}r)s39Zm6$mXsBy!qvh-)o9Lz!=xO8cZ4?%09~ER96Q+?FW|$Ufk(q2+7U~t1 z=2@KXSDY14R#9G2TT@$KU!QH+Sm7{nsr{u{5j$FQC(J5Yy}V@qDzB>xV-BnhxV}E< z#)i-v%af09O1ru(@y_;?I~y}E@65QjJNy2g{QDbfj%}(txux>_&a!K}Dy|)>dfd>^ z(9+z}+uPgU-#@iw?zFaf)22*=ZP=V$w$ot^OV-0Y|Km*2m- z@a@fIuWzh)|6=3yms@T*mXFhFlJ$A(H^yZVhQkhwqa=!#$zBDQ}POMF^Q*x%A)1RPa-{KM&m0#}=i4RPCS&+>>!C^t~!qAdQeH&7owuBmZcyF7% zZ)WnIu7;vLi+5U|2w1SyZCYPoRaxJ(g$ddJ|CjR_noWKjV8CD6W_kCvu1AyiFkkj&ff-?id-yQAc$CUKbKq=bO)z4*}Q$iB}HW4*& literal 0 HcmV?d00001 diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/Skipped.png b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/Skipped.png new file mode 100644 index 0000000000000000000000000000000000000000..7c9fc64e3874e15f3f22a234083c1da3ce8d62b8 GIT binary patch literal 1405 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fHRz`)E9 z;1l8sRN(9D>+kO$5D*X;7#I{36d4&A6B82~8=H`jker;HmX?;8nVFT9m6MZ`o12@T zpI=Z=P*_-4R8&-4TwGF8Qe9nLQ&Ur0TU%FGS6^S>(9qD>*x1z6)ZEoQeotUc4CddXRJaa_yUX@}NK6`G*Q rap=JLd&hddy85ua{(ro-{sHGx)snNf1MdKfN(Kf`S3j3^P6NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fHRz`)E9 z;1l8sRKUo{$iT$F$i&FP&cejS#KytK&dtus&&t8a!79qiDb2|%%gbWKB5xwEsi|pi zZ!hR5DCQ_8m>_8BYiS!{tB|drnWkx$Z|30O;F9a&R^cQtT|ji2DC;^_{!RSCn}wye zOUdq#Rq0dFZPT@#YOA+736d-j|;b5^fjy?y)kzB9co_gm(kXq|kyZOXm=d3UF- zxj1e8wK-eQ%-ni$?$wK1u3ftZ42n@O(n8?#y__;&7GNj|@(cbyvH?TzcXm}^{Bss~ zL>2=JAYg{zy~a2pzj6*xP@=>&q9iy!t)x7$D3u`~F*C13&(AePq0Cs%*lgwVM<9)7 zJY5_^G=h_V^s`AE_`@OZ??1oe|Np)J|Fd&fNJ?d7NlEPTHmYb~z2o!biRe_3R0~Oo zAC63MYDEjzm0f!k!^6X*pexu`^zUIJBcBZq&!IL!2S)kYxVsM~C}^^=74jO(FKAdU zz&yERfxa~J{Kb8}>K+cQQyU%qTN*E3I(bV>4OIj9Z-1nd_^+fC85L>3(lN5 zaNymeob{wrblmH;2j<40nnP d7?&t8Fes)~X?EOwb{gm}22WQ%mvv4FO#qjX@@4=4 literal 0 HcmV?d00001 diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/fit.dll b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/fit.dll new file mode 100644 index 0000000000000000000000000000000000000000..40bbef0e292de5f8c0d5f291bdcb6d48dd00cac4 GIT binary patch literal 49152 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 literal 0 HcmV?d00001 diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/log4net.dll b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/log4net.dll new file mode 100644 index 0000000000000000000000000000000000000000..20a2e1c47dea6ee52dc38cfd4eee0cfde7894faa GIT binary patch literal 258048 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%0D;`JV-CiezL={Iboek_WYW8}# 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 MEl{<<|Cbi{PnGciH~;_u literal 0 HcmV?d00001 diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/nunit-gui-runner.dll b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/nunit-gui-runner.dll new file mode 100644 index 0000000000000000000000000000000000000000..35efa737c3957ac14e4480d2a559ff4127298597 GIT binary patch literal 188416 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 literal 0 HcmV?d00001 diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/nunit.core.dll b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/nunit.core.dll new file mode 100644 index 0000000000000000000000000000000000000000..a1dd69866dfe9f4a0ea9975d961b02230aa66969 GIT binary patch literal 139264 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˜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Ê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 QFk*ob3yfIc^DOZH0B8(6)c^nh literal 0 HcmV?d00001 diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/nunit.fixtures.dll b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/nunit.fixtures.dll new file mode 100644 index 0000000000000000000000000000000000000000..8fd1932d757ee0bdc41cc8a4af94c6ed2230a146 GIT binary patch literal 9728 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 UG&KHr_lvrH_9GSlM?Bd71>;s!w*UYD literal 0 HcmV?d00001 diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/nunit.uiexception.dll b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/nunit.uiexception.dll new file mode 100644 index 0000000000000000000000000000000000000000..610c1700ed22be35144f6522175332e291d288c0 GIT binary patch literal 90112 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 Pfe8&vXkbDEjt2fWQQ5Ds literal 0 HcmV?d00001 diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/nunit.uikit.dll b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/lib/nunit.uikit.dll new file mode 100644 index 0000000000000000000000000000000000000000..9087db2d16660e0fa83bc9d3c64bd01e21807d61 GIT binary patch literal 258048 zcmeEvd7NBDwf~*lJ-2&$W|B;1(mmOxJ0S^|>B&L@B!n$NHrbIa39|2Nh1)@prei=+ zgn)=F5EC=o>5p4)p*pFZ`Czwh^)s=M?|0`L9a@2?;8N%~fu zI(5#eQ>RX?x9%ZpuJ>}D=jHMLpa1l{2k_+I3i;jk&jutlA&ii_V%K=(+-NVhWvrviDeCl!0e!J6lx1o2-H@dM(R=Pg)w`X%cS|G{T$xmZ?_ zGeJU@lNLmc=v0Cz8)YQU6L_ZnRzM*OqSMbaKvY>(2ZEo)+dCC~HTbFqUe&;>8hBL$ zuWH~`4ZNy>S2gge242;`s~UJ!1OFds;1irznmS=Y@d%`{>G*Yxb=A&+dM6tLKELj@j@p!#{rJ zu5bKozt!h#_~__8-zon2iZ8uo@eBQX|K{)~9zN)icYNlEzy0RPtDkOMw%?x?Onmg| z#|K}(b8yP6(t3ZORl;(BANG140)B|{1)iU4b#RejxPOuFEkpqj>+^Eu(T-9uf2QX* znP)&^6Ku>(5CX^=PGo4<%Pq=#x4Nmf-@r_~)C$O}(Z?Vr-7bj9I)al4g(4B`XRwe2 zu`~b?2LJ^((x~>DDXG|`>R_XcxTz$-2r{oVg9)HEih@+jjj2SOmcYwqdJ>72FxLzP zP{cvUh>_~z>LnRQ1V%fj7zx(F)k=m7ffdI^vh3f+#UBk&+@LX&vJEMBY9;2bk!q4s zyN#vEN<*Xw>q2p{HJ2@(q@I~#OkF36l-MLwQx+Pl9-b*Jfzd@N`UKQy9MFGSt%Of? z1!g@~Ckkq+=R^*^yWz(yd{ec`+a%+GYtpsJCl=ujVOO4n?yQk^ukU zmTAR{;0ZeV^L=zs02TZ41}(JY{RE}$fEV(;UA*Jp<-r4Z9?SAtN+)Ge-(q$Fc8h9I zWvpL{c#3z~i_S+$qkF0RGkq_Zx2y{!Ql->-dSlUS`PPCLsDl-1IeL;T#Vyp~2Wj4>A5KCunL+xC z_6GB)AHIg=_WZ^^c(x!3907lyK;3D{D zU$|}Zr?fCK%)^&pD46mkaQNa&FoN8MFJYdx;XqTQI+>X85uwe}3F z2L+91FoJvX7-$hsCgnPUW84v)3ZRq~A91}xiyHpNQH*13$CaC|&b z6m$gfR7Ybb9Q3ifqQcP0(#K=80p~6L&a4Jcvj#uqQI37ltClszFVF23-)~3!!^qFR z2N^t!06?cn=dW{&<3OMyy&XEOsu%qTf|Y`3LIEXNhyHh_OY`g1bVk3)-o?CL3a)Yu z-@t))Oxj``Pce7IPl%~{zyUAk5$MT0j8B{_4ODsnhbA4S^oM~tfusX-A|A1T1*-yY z%Ov*E5V;Vz!S=9@qkFyi%k{Lw1y)`w$VsGU^AGPg&On^HrvKM*i`DXS@>5Bf!qj^-_+>)jT4o$qcA}pRVPIbo=ho>*f zdFMf9jQ*T1bB#~EGG)$7*Jn;9LxK4W^761ptSWCCx}M-2yhe3RIerN_FsPv%(w4+P zPa~-^`>NP5WQNsSKcXv{*LGv_MH}fUrj>`u0Oy39p3d(nM$2fErxPp1plHqjWL{8N zRr0!IS|;f4+cKjoJueeru`iyP1=?r?ya2+{n1j*0#Jl{Uvf9=;3u5hOKKOWEyhg=wvr-oc`Z!+Wp7KU8$7*gykwNA)P$(W0=v12Z-6Y{8z z{MmsO+LaqO!9TcQO@cBAo0UMfOM;Lp8Ca2qc3#j@-Jx~n1p zUT!YbkXf{&v~jo3NbO4~SM6E+WO`60Md|*XfH6V{u*(S{dD6W(^&#}Dr3`Vxqx3+G zfHA}goatywmh`BL02FXudjYBVWL(PFj5h9sMF+#M-Qp_&TN#B)ekTJXU|nC=iWMa{Bl)0Bj1ZG+cVcT9?IOz|aP z3||5EIKGnSQz^a#fG_%vi~;#g)^a?QkO)vAQEg5K3@MMFZ44zyH9G`g`LYn2ZWcl= zSqN)C3t{D0Nc1Sm(LSsGZBjNA3tY$T{oDHf5NOb~&>pw%XNvUwbV8}VpFSf(y~rPW zXrUnens}>bjrp1kYj@;&A*pQ(_Z?8GLV=5CXs&jdDyv8HNe`9u_n4rvZ=e@!U=I8W z`+F(&Hu|8XzrVr~*Chmz(Tz`p$ne$UAWX*?NA@vVeH~t2`qPJ?D0EhoHBt6y;{8>6 zVPIEhx3jCWyKv&2$`CY3Pdlf0#r6B!Tyah1mT_HoK|3j|%Z@-6snyXuVqJa#9h6p{ zRJxWm)j=`Mj)&%WJ07j;x3s4#1ZR}X1bQ4=Tut4G0eh3wpJ%d23OnZgi+z)VF> zjI3129Bcj$`K*#My+S_sqnm}p&7;%BA`T3{1^2+dcQGH~nOa{V7Ha};>uaV&PWoKN zQhn}Oq{04L*Y-P9Z)6j%AHf^wcroWUnIPkEtOw;(nh?#5>_sP!&&F=R@*aFVMS12~L@kwLRIiL6KO zn>QCGfZ7vS!!l6jodR>ye_D3j7I|GcG;~hlB!}QFF z2=BKmG^C?~i!$)tWB3~~@TG)bOrn=$;Cm7NM#3-6!1s*lG&AsJgkMJdRtAoSob6Fr zH?dwBDUa>t2(F%H)+;5(qFPEn1c*wiU758U!sEqYM#|<*2?;1?C572QAum@rtz){Y zWJb!hx5ET8)kAQ!EXAGxt&v-Zo30Ti4VWtu;_-3_jjv+ftSK6KOFD985}Cc})?4>9 zZ&d&-HDhdK;WtUayiHLQLPQ6lO`EHbTDca33(RFPm8EfS4h)J%YhkQxu1+G+>sZ2T z5&+b-TU>V=1#b5l$uHYMQ`cDtP1AMRuLot@Wvkk1ux1@dOcT2CQaIXmr}rpQF;76d z4zERWZ`bmV1A^Ffh^dciil-V4cBX*u0N7kFgajVF0sQ=?$n;L8-GHA`U?J~9WN`&c z;x{7DpP!r$Z$d!kjrEQSdIN0lF>7FM2Anf+@`}CzniYfkE`?A%2M#Qu-xNopDAT&U zwOUi}2HM>IPIV8MBw05hgmwW|Wh3gQ!`uqA4=~hSs4S>hMmHl}4PXzJ-ewm)US zn6c3S3MOSWMQ1TgLFFxpEAKWCg1{CIr)(SK?FtwAhnBpxWhozKh|t1--%J_W9mK3p zb}%tDfmz6C0DH1j-$Ps;#dt3R!yg0Zn1iC5JCUODjCO3ij;gpzaM{=8JotFG7ebNE zW~5aX6e4P--WgF7$W5B4Q^9y2FgC&r(sc6PaS0s}fSR`%NK)%S7^k3P8Hw7IT~aTq z>)}VO9q8hbjA_&`2F&|eA}z0;>ky|f44G)-@WEbLY}{&RtbM6vCETMn`|36yAdAA> zZnduhO*#=XS@(hY5FpN(skw_| zk)p8=?)1>KJS@L({3A40BS+qRnECEW$b}#m%pb~|djSi~NAQ~x)qE83`ogWGT12+i zp2>drF+9!3@zb53+!1~PfwRpg@#``ADT#iXQ7D@7eIN3{Klj0m?gJPDaxO_M|1!V; zeTJAB$%&MbJa6s?pmJhmL9Pt%!1b~4vw+k)!w2x_$(zsN5q=&&y}p!kWV^|^@C%5i z@r_svR(Ip4e5AEx$C+m zR`t+^;V>r-{vsXL{{ zf)3Ml`3ReS&uy7z7mxH{1or`xgAq34SIL*vX7}%p_O`#wjkA4)r^-NE)o~_zHqjv= zVp-wCq$Ks9_fA94Fc)0Otn3v>QDBCsa0>c#y4 zd_w_Z^_&xm9dSjEWm?a^ibRxpV^7Q?S}diOwO|gBX@wNLXbwsugJ$0(QZcVdM-EFO z=u-BGo%}Z;2?{Mre2igK-3cCM3&PM&A;J}6g?oE$PGJE+=9~sv;X)t#c|o+|=gqf3 zFmJw%U-KRO=zQdr)d*VXMYb|hy0_FOd*S1tCyfw@T~@3*1Z;elj6%^Ce`_^NF3b}E zf|`IwgWcoOKbgSI_ZSw#rB6liZF`hlYNFFD4FhlF=$Ri#zTxYTHV+Kj2Q3?K1|i!m z{@%+$`L7}Sr;y7$&8!6N6N7%}K>Nm^X9yaGJe2ELJZDnZdGjN{;a8r;1LKa>`xcM{ z7wK)6`tKv`{?}&(=Ep#uYB%tMa6jLuTWz=b?u9o|re2eVC+ZH4WXVNY@T>V2Wv zm^hhaDXDE70C<(OqJN-S=FLw)$vnrOE%>qVpCTAOj~@VDz$38mpCR0M5kK92A>5zB z%30Dr(3Jiz*Z4UzL4HjHJcn_|Yw?sn+ZNkBVY?T|nU_GuTAMv@W^umCgyCbtU*I_# zG*>o$iO`0*sA!%4!tR}&V4Rj8!Jv~*^DCfXt;f!Xb)H<4HqzV)=>ng}=`drc+_t&& z&KVrWQaH1e&Mp}o#>V0-&EPPW!hyeIU$V^Mu9|ZLJ7_>_*jmsoN{!#*r)2Y9g>YbghhMZzU2C{4E?)>U!8w!V8v%jG zZR`OL*<#&k4T9(@N7Q^1Bv1-T4G#p^d0K@WOo(;23OSUJ{nh6xn})oO5bKwT zV;&AwPBjw1TzZcvvVsoM{K zkFXnNEyiH%4;oMUqn;u-V)lR$$T48=4KGK1z{E1 zVf=U7-0P92z0J`E)DqCcwmF5IPKa%D3OSPy+vXH&%=Czvp-5?Uw57y~UO)&P<;!caqOgQv!Au!#(;M6{x#{&!m>++X1Q*@fUY zN87vz;fH^PoY$T0hyRJ^no>@NU%{vkGkA>~9<30K>o4uxjgJH}8i1x<0fQ7-unZ-fc)nPv7SaURwYr2j^vfb6;mAj~@)&%s)Y_KPdMX>Sy%@eT7Zj ztp`Qy)?d_(48300NOza%00efxQGT(nIKR6KM>BlD=G7+@Ob!8@bi~{Pebknz{n(NE z5(Eu90l<0cFyPbM0!jJ`l~w(PzCvGc-PxG^lGN3@*Y4pY%;IyssYUP{^1}kM3{$Ub zM62lB23q@wmU^Y|ez<{UL`@b++;8rU#Jt_g%$Y6#Tdx5q7nTq-ICli3@G<7~L%gQM z2i_TAWvUIZ{=^3Cp8Z15Btz9IJ1xfS{(&D(KwiH|4oaJnOeA%X!}zV>%>gm_v+wXw zzWBu*Mk;2ah#`{4tG-MLCm~_>k|o=%9GqHiV5h0%*6f(twp>q8^aE(y?J*NjTLJFX zFtZpedEF)~Bh{LjEE0tMWHBJ&bWZy|N83?kW_7EpDczRssj4x@rhY|B7!<|3gHmPt zW`S? zB=dvC;J!Wek(nb6E|{Qm7tDX8Idah1>nl$9RyGNaa>5~SGgY!=dFUtL1Ju4{;X11I zq*hpQx~ykx9^ZqL@28>KRkdJ}ZLHfWLmB2&z2j6#6iy9c0*VW{e zx4ejz;w5TJ^Li}d_3YMpQOz+g^iP>`E$Ytsp)!Tz2j6aJNNPq(Gr2b|%?t!xY1G~@ zy5RalpI25LDWTOeFPi2zS?T9$3LfNf?&{-8_2O(~!=w{0UE$eQ2h0=8dJNLxESYRYHe0etdjLxDTL!KJp3k2PI$|Fm$6~jw)DNwIbtW_JHc4? zhJsaC0k_tHmWpPIX$ZyQO#cQvJswlcg~PNr-_*tI1cK>D0{Izn<_p9&hEPn^&zS{) zhPRWFhW&6MAcG+`w5<=p97c8IH`##H^h4MwV`fL8+B`T3XWAJW0sThYj$#@p4fKrm z>u~I2Zix4k&~G!PxMo$jD`H-Kf20&Zj%lllgR8^k2!wcRkltBz6`0)_ za|DVur$1LHRaS|cg7BoW9T*a1brf-D4_!i3lnFF<&as^7Z@j%E7D8 zM|N9swfi-GlTH7)I3MfQ=7a9k9iAjB5BlJii?7!J^`M3i~2I z+!Il=m%yT{(OBHx=_gP*_GQ;_nsi%-`r%cqL^$KqxZj4*@TH_A<_(q9>4FJn4wXx_%=SbTR9eNds~nQrhUX((5AQAVx$iotPaRQSUwqd|LaTq^@qiUsc)|hLdqAeM4`0Z_xS6vZemMZ_v_lf zV>CI=`sAQHkX_%_66J&pTj}vratx!N&3kVHefi@6<1Uo0ZTzx12E~Jw_r;)iNONZl zipMYSk3mnf)=B;YF-XQQ1l=8jo)OzvAMOo>Y+%)guVILK3-@7&${F5-F8@db(7PYS zhn)k#VIRS0zJ-M*>rXQ0b(kmd%Zv>t{RS))KBq~72@Yc^oDsz#7u&b^T=!!gGcVzC zb|Gi>gRo|Q{0y1{@GICn|CaYK==A0*KE*VzMKbCh|1fXXZNi{z4g}O&hE*#N=V&#k zC`cp1#2iGN3YuM02px>5IRrob`DJKYd^dFw)Vc0H_;vKfO_q10yI>9l3b@+ZXJdR=uuLt#c1+%5XT&ep8|*H z=q!063}Z)FMlZ#JTu=hMNv?G?q4^dD1biHehxR+;-`7AI$rz9^I|gJ&YiDq5Kl9kg z`DfpwT|@HvuG^|4xSBzC9RpGD4*sOfc^v{X7cdY|!=$zSby>pW*U%)_lH}ddCIP6N z&&8E<6m)}%rYzNEZ7+Bcn0W_Qunuawnt;Ig0%*~~S(2*BA=)KSYnW+x)x-42&UON_M}bJg zO-(T#Lr2e2WFb_fg~XQ!d@AYI+!Qr_NA?#;v&#xl$7h{7#(9?~b4LKJG4VN!iO)&d zq~9b|O|b?ANDT|j9mp0@k7hl~Sj?CEMp1V7B}Lcw^TqI+Yz6YtkJ5Fo++(CRIrYZ< zd04xjR|kRYi|XF+)7F+O;bXwHyyIYsjo)O;3QvYw)5m|Mf4&_;4L~k9?-PK8mU=E9 z@iEN@rKL75K;G6#Owk}{x!@^D@YE!D8iP&dD4S!|-WjQwRY^oV)3oGZ8HsKVaDIs- zHwP#J32qLi`c0Bc&YY1_G-*O|%uGqIR?;LBpGadQ8cv~#ZNEJR6ve#{q7gh>(ss7J6>Z zgw6t%!TW1iQ;9!hEaeZ+V(ZfJ#HJiF^UrUrfr?tB?>CNP@N@}cAQiOENT6uTK)^60 zXn~BY=yMnp;S4N>4WGGPn0aj2IaTthnAdBqFkX)`-)#bVg8g zBb7Or&?%ea6JE7nb$FiKa*|m}W5)PoCnKnVuf;WRg65ZUsjSqB^*K`95ch+)F|`1u zP18Q(q$F!}Pf9S-sy$CxMo|M9S(sEdC#Nz#$c!_zMC2T+fRQ#85ET79#fgBeaFXn9 z0a5g`zTp{An>iCd;iCjdCNz+* zAd)&Ao1oz=62&f-k60Lzw^e+1v7YFBMI^Va zBC^tqMU=XDLdz%~L`B3j69->0UoKfUq&=$Cm+wJdEpy&n0DjRfz%~Y<`MX=lX@JND zJ@bbxPqyG^RWD8_Y0dGZ(wb0CCoso1Ve3{ zCn_)QhiwV~FCWL}sey>9lOj>kLF!l&Nz1(XP(0<2v)FHdY1_Q{n=vS!BtI5|;;Ho4 zW01_7dB`FBB4E1H+8*LM+bl3m>%4t|9u=h7fY-k$@P30Q=7R1lX{z|rwHNbd9ZFuu zp-?_6jf?Qxjd~8>KyYVxF&?sX*CYN~g1vgo6L~*J3)~$juvmt9G<|M(2>?@9g>NLB zaj2&>b#-_t~Rq33skCIAQd)uo7nu5#YybS zF8?UG3}FAZAVuge)))2JSKwF(RFmCA1FL-^OxLB(f_&_ZQ?BOjl z`|KrTU41N}K#P5GA?0Q=Rx~LTyBfWam20;})0316iym(SPaK0~T^KrDfW(hVX&k%d zv$+;AvoFwB!^h`1+<}pi@15bT{2-4YGQ5-b($o$KbHDs9=ob{(uIOV+(f8mfx&t}y z9v7JV)+c&a#i=^)@2XEh>12(D3hV8%B>_;xWX3I!(Vjpq_3@;bY=am3O0Md?W!Sm% zf`YhqY6rQN_W(rLRS-(npQxwm0`qpnSuggLccMPea`olQsI04*8uaDSELUl+LfS_A zyOyD!^|B&M4fh3Yh3zZ!clULV9NpI){Tno*oy;V}M&sD@`qD0GDuKBMeC2L79f;P4 zy2SibsULt5`{oa94wyNl^t1c|t;TJuNZOv(D{_P>ymxYa+D2gwtYGV z!F5bCY&~M|kU9xzFy1NEC$^oBv==t9eX~y(r+rTy+rD#VBTAk$@aMMKz+L;^erIjp zr(ou6#QpR_BIqZ48g(vvC-C{HwS&~X0>n?|Z;YkpZxcyI=Wl_JLh#QnVqHK!jcXxo zYpn#~6HBcN8FW)GqQuv3YNSenev^?JIyY z+yhuQ9u8@rX(G746O_p~2uj^P#6;8$i z-;cv@J(v;xm{uuc8Vzwg{w|o-vLugLh?>B83@l9OI|$tczbT~vLkyZFcsGJ}GfUp0 z;VU)oK)(1zI3#k6u^NXgnPIN^17cmP%=Jk%&o%Ev1h5;@Fu_}`c*EDBS)uqaY}c%| zumFDJS9rA6Aq8z@Ywe2}llH~f`0eX4RHgjc_7#z#t`|2Lbd8GeYRTC)V`a04iq1&9 zw8}`$1JT-tXe4P1WKw2zm4NC2ZOgj?ob2Z7k_QtIXB$llmB_)EUQ98D8jP22E#r>rDDxv>_QI=j1LZjFZvt$z1$K zB;g9f@I@5{M>#MNn(IaHhZ>^OCwptBg%@GCRSIUf-NyoU<fPc4Ta$>6uA?rwju<@hb+ z&$&?%ix8xXuj087<45q%LoDWa*bGS4~MtqXK_4Qx!O#B;TDgSmB8$@zG30)R# zk9;$Ig@scP3-@tIA-2^^lm*RI5B6~Fso>J}^%AhbKin}ET@HhE%VOVvwTq8X_W=91 zHm>`J+7|4pkgipsK@7kOt^;O^e0}prRU_;9aPZuVWoY~vKs5ESH{5y$GU8hdH54y?uUPoC)>@|`WfOU^}v`;2UyeLbIh*e zxW`dw`STmMp~72D@@d@8;AO&cfTH_Nde0h6!mDA%@G|`e{b~*S^W)%(C*PT#9Ib$K z$#2XiCxOvzsJJv%En9o;qIn@O#q|`FxjLzKR=bRZM;}g6BtR$*Wd>Q2KVE`mtZeRp zGO$hf8y4su5}pdtvwaJN$o4JF>c&%FOiU1+)?cA~9YgIPDzHN`YNl-7BfKn#I&TB1 zL>Vmdc3A1Y#^-*x^HsFGviSvmF<265x!4|93FUpDK!*Hk$(9NZO?O-z5$_;<><;J4!L;NWpAl){MdtY(JesHw^&8Dn%jQ`QfU81dL1mU zz5=V=TECigbT4RYWz}oeXrs@?Fi7wtdg}rU#YV)n@gIX8XyX0b?}%WZfMU!i@gvfe z($G&iD8{>wkkHrg(^JF?gm)vLFSA?c^J$>E7uxORkh85ofo(<75Y+_l12#?z9^(}Y zV`+^;aUmAdMNUdo?d4Wk$Z!q~o}K zs3*Q0^UB9@FR@|#cgJzph^~IZtmwP2SdJ%Dv(<4N@sn{JW8;tGE<^*7KYO0yYT=U} zyj=~9S2}oGJTC5-!5f(*3u_WvP@Sv;D%l(Hn*uCluQMksdXa6^4gv{?4@xkiV?FE- zWf$9+t`x3%~9P4JF6 zP3MF3cUbIE|0(mBXzqY}S0|o7`QEj_*-zTQ=fSm<{vd&T^n}-%V7uT8Y&AjD015LT z!(79&OA?cia4i$Q$ONxG0r9niaUADUzofaBaQy#e3H#+#mWESn&Z#*>WTODyK-P_bk`3*g?@ntnLQu2NxW_8QioA ziUsp^CS!h-)JH$|tL9HAMxP~`R7f3}9+~N4MOzz1?T(~2@C^!E8{>JBo+86S7miXu=R) z0g8I7P$VX%*oflGpYuLZtjc)rM^I|2j>oiO24h>F7sVb z@SfWU{(bglazQu+AIq=;JOK>zB!9j~Zl!t!yJp{K5WB=IVPC<1#HVC_Krog16YRH@ zbWadFSTGZT7W=y0e%qEA-j>1sqKB|yANBB|QTk`M) zr9VBb1g)RW;tUkSYy*khcF%*17iAG=4YV@|0vAMi8eNKWf z*fpPdj#s7*sW+%teV!ja1v0o-A$%Io%84iz49?D*e0hKHprjnOrTq}7;WNyKyIrL1 z3FJqFOi4qAP*X|~t7LeWQgG2T;WZ$fu&5>Vct7MhIN{UyF>s)->D#$lDnxrREKN1d z;U_@sDe?_SGD3|M3q`BJ=#$Lx9JxWmTkP|veAf50x|EE_H5h#n$g1D)d7xNtH^nv= zO))P>=80ZXJIH(Au#Qi#ip8@D&JVjX)aQ&>hC=u=&@wObN4!g68{#JHP)7Cx=xW#x zn4eP~u$Q(l3(rHzUp;?`z8}bT#rh?p26mfO@Lvb~!-!ug>B=>02OYpK@Bkk%x`keJ z2;?uAUjitK=_yVX|KirK1r3#1Wo3FnZ{6#HKx_l|fj-s%+x78qN*{k_Sn9M89WobT zRYhQaMRvc&kGkzbbS_iJt;>vZz(9~cM`lc32sV)w@FYa+@3)1NP?Rag!f7Cc9!`4 z3Bo-|@B>NkZV3wA4<^tLG1#Ow-05Z#YCGLbZC1P7ZXjb7^IO`7-(;lr0D9x>Se)SK z-)VbxEG{Glssov2Q2|bHi>!=cD2+*ieY0nX^{XrZUlPNAr>t4AdItp5@i73L*E3DzZTU$7M50w}O7Q3ot%q{v$rA2$Ctco?7RJFw7Z;46ltQypj-5?=6TAi{n0`z8#oifc# z2rPGk&`J_k5{p?$?5x@%*lA`jpYX_}SP?KDDl1O!}e5*Di1d*bTri37%%(Gr>=8Wj)A{S+J zNqBYG3B|^O0{*qVY6y?Mo}x`aOj~lbmsWuFG~wu}RB74%lF~|SZQCa=35;G!F(p9D zko`ulC)$GGt*xGvse1yWl_?1b7_Yh|_Yx-r9TilSrA1)0 zIz>yc4sZK*u>fOdAbHMAl?FP>!$_a;+8Q3=(d8-Pg1D$UF=Lbhj5`rJNT_`bEyANa zQnUo|@HSckT;xhDdG1XKN;fP1VJv+nMGvRw6M!$DW@Q!NLPuZn{4hnI{<`)c)G(Gl zlQQ3lCZKv$8+`%B-M8fVX^K7_e_}R_#bzT(Yui3fOtj-&}iU18FwIQqj@^i>^gmO^+`CE}nqDnVS)rX2ys+Lt`@ z+lWtdV;c@GlVw=OVpTB`w=lt5TieiXyM#x3r6eLiRkvfte1$-)I*vaRwv5?#={T%) zopTDzA?`R}4tK`^bLcw`m?De==IA&LhT^eXlIT1qE#tcgk1kH}6U0w|Ra^f_cy$kFNRsUxDf-mg7!xHhx;I5! zu-Z*jfV(@&k|%9NRQ;G9g}~?wDar)YsG&BoC3iepk!;^jiOmX38ZcwARWcG=rQo%< zW&$&(VhI?}Bqet|j-eUAqi%q(nW`W>`u9|s1hKs%6JR`!kvzE_;s#yAdXQJU)VG$B zJpe+Zu=ZyUZ*Ulyg>cT0g>Z_Jg>Y(RAv3mi16m(svKt!iC}Ji2ql|{4-4b~*6B}_e zF}v9z!`b)^K(*>&aYFHK2G3IUL47DI&t{1{{|ef&V8*iqgyhV>ksY#Poh9#`jOP)G ze=X(zcO;rmF;g&j?bD!zn^V{S3Gq9MmGys?r}+;&_{}1IqNo($8b7@R!;g+b3H;_p z(pe7igYbDa%NdlC{J4jB9-i{&KQWX0E&C!dx)S*se*x9jJCHY>a$B5&`5)%cEP>x- z*!&gvAg}<8P&8rsp8!F1^QpSOA#DCm9JxbnM=)*I3)YdaiHe(f^X4BwTsK647LuN< z0In3dp*N+jDJ;iytc4t%_xSB==vh}+a0$~c$l0P25njgdbqt4f613CF)zrsnqzj1X z`@bmWD1Q1o>s7p^u?UIswuGC3GE1QM)+2c*#N<_|A7CZBQ&+O_!VFik`GQmti{3kv z{7*oi7Me4=fxVkn(~2$MxSn0wU4qSOa}aj6Y3xr@RH;l0{U^o7TPC<32Q7=AM$zqM zyq+UNj?csfU3Z{l6jH|_0Kxitf(4;D7PRC+Eat}?rRLY zB}sKZ`0~{qmlg7tKu$adBMtVrfkgw zr7Kv%!I-t1F+I&asG%s`W6FRgorSH)+V}FGu@3wuL2~P$v-`8tKzT2!=Kam{^u{kX zjA6e?S_Jv=T|uQ>|CM0j zB{sciCxgYpS~7Uw&04$o%9RIeW5NWB?{<1k{D;GoKQ^}6_&EU2bMQ>VAA&jWiT|T1 zIQLZ60ryDyE8YzY>x1jg=X&a=luI~Ly_c6O@TDxgZGjibx>oPo3G5>N!%xXE)=4&u z)Y<~SUaS}4^-H+G3b&P2R&^J0qI2mG?h8h`a)I;+^$u|GisFCw28E-9e~7mfOEsKg z@|IL`;Uq+OWoI9r)#)Od?g#h47q6rQ*zYOf-0Nf@r1rd*gC0m^`Z@LI_&|{M66{N~ zm*5A2+ItS3F}??9+dsi7$nn)k?f1f2@M_R~uJtjd@Xj;z2gAQlQ1QNdDd{I;d_%Zq z%C$b8&gt$7Ps(v7Qe+Msb*5aBw|yh8j=>w+~NLG0RVSW=f(S**|#= z(t8tHTIty5!X+qzPv5=q$Izj)@=_ge@{|kDHe%-N;Jkg&$!7IUjfreHqMcLy`Aq`x zMsXQp;Em!69^oK<;&BEB=-w=m$H!MSpwqdf5T6sou1`44;qm^gvw(N3;0>q}{q>&& zY24o?*agLgZQ%R>K17SGJ@tNjP=oz9`pUgnWAT}b7hlPli@G=KU_Eoey&;@4@m96# z4h^PTMCn=fXX-vt7aPsKY%Odx)A66JWghu(-UTc?Ogq`CY>=v`@55CQ6;Qc7*Fd3oPp4RtjA+KbV;FshDb4SQ=h7b_7r zJ~kHzqa7taHCidpY0(k#q<^017lOj3@Gw#oe=ApJqn>^V-D7Js-s zSsD~xw9j&ME~)k9E73(7faUaemivSHemIp8Y{Ki|`J$fiMAw3E+sW2Dhbep?dphj> zOHhQ_4r#fra1I`3E`GfF6r9k&Mcy!-zD~KwoA@7rTzL}Z$6Q`u2Kei3Fw7?#7+6*wBKclHp@mn4|T zWdtoiEL`Y7tr&!M1ZweIj&^&USS<}V*ZLw#%#FLVnBght!%QP5g3gXXGaLw~&n(t- z2Rb(f&2*siV$f$D==>P;G~B{*1A)IBaDJ4r60*!X2Rj!Qt7e z%Tes(#dZXa+l|qAMP6=x(GM2`aei)~9{7#Ruq)2d!4lD4^XniC4+d29_>B0CoseR7 zW-@&nQbwT9N{g)2m_%aep!BieA(Blqlzi1=gNlYKWTe6f$ z$7gIe#K#$4!AA-3?%Z`}BNhMjg2&l@xC$uhwWn0B#V||GM&PDp!qMPMaNu?fHVu4E zCLf;ok;{j%z{z8<58#oKmt{L;+_G_6n=YG)d)4#p*iCPH&0MM;q}N0 z*Seexj(~V2Yp6xouzitx?Le;+oFwYBkA)!nLc%pHg|zJ)&)s_GP@bH@ckN0w&#QUTKEVsuYis3V ze(^2%PW^UCxEJssp%{~B0&OH*K}m&Xr}y@p=bbBM)K5lTMR$J?U9{h%=5W+DjGYd= zpa8{c*k9vdBM#FZ02+SyI!J0^%W>EjAgMUB65Jea!Kybp8x@T1>BN+y_+W zdC?upd2NO>4{ND6w%3OxVx9MzTR z8?!`ltk-XHkUpl?aaMU7)fDZos>-%_&_*T*D;63B7?3e&qtM>r@m<0 z%@V!<@BE81LKBz1qs=|-?}tFMf;6Ehhj|O;XmB_QM{bLS zkS_$lRrc0*#Zi2j1P;k05OYFFlZ^Rt@0O|UlRHc$=l=j1aSmVKQ@aLI8L^YRIR+fU zCJGPUF!?v2O%kL9X93|nSU^_@;Pk0~M>))~K=A6;;Rj|Fqt^ScMtB4t9G9+O4I<_^ z{D6xNKk(69Ns*d^;yJ$B9&)LjW#xjwmav)mdQz_!u`?_o=E-xu;jPv7!|qi_dw!EM znvt6AdInSOeLi09*j;3 zV*bL2X6JqL7&qm@<0Y)Fp-xN$8qn5m_c5`7qzH--8~WHyB;u%Z}FWRl8Q%o;!hL5)t&L#GV#pGb%o)3 zM4SR&E)RN&up_Jxp))9|UoV=IM1Afn{;q|*iuLjG}V@PA?5aDq2y zvDzWNgw?nYdI@F9%MW8U?oXoHCO1P4_4B##OeDG?HT+a9IuXN#oJ{4kDo%&^vR>9W z1EEXPN$g$hKu5M&84pj!h*AAwcl1us(rj1_-4&dm)T8j=)i`H@TI|`dHyxO>$mwkS z0IQc;rvsqgj&*vo{k^N2>A>x-52TwgdZoL_CvL+(+j<+eR_wmjFvXj_RCS2G2-GVl zR&f^xU#8!(Z;0P?b1Nz6a%?ETdgS(2tkE>)A!93riYufi{!+bn*#2Hfn}D+50caEDKRIecZ&l`AJRT|3IN9WAQ* z7GyE!Q`g+BXCDjT%`p&S3!R(syh!BMETupe(%qIrmmeOFJU#VB&h`B8JNT$#YUnA2 z>duun6{KWivMvKQiI@u@4Xg_U@}M|t@Yq*NNZV6i)>w-?c>TOTU&cNQCYXJlo4WBflQiNBsRrJi$%$cKp34cy z`(s^QV|&bdSAfUGru{1Al8hEJmXuG(M7f~|`^TchbGcb!? z1Y26iC7^CJ`|SWPbZVc7w4IO!hCh0lFRVCuv>)EdtDorhY4YCNA>Sn`-_GO9hr7Sh z^1Wd^`F708Cw<_5Lq4-7RpP|7cVH!Q(k|gkbnjBn)Fl2E&Vc<;U~t7E<%DA%T#rFC zj+@QL9nRv84HlkYuRD91us0Ig$tWI{&FL0|V9vaexzLX3SF!GA`=gxHf*ljJJJj1) zkXPhTg-N><2FKCpIiOCgfBD`7Z}uYfvmC#|9Xg-G`3%;-QC@hEf*TCwLgAk?O(DZP z=+re&niV^ryl!txKePmPWEUzq=6w`--YD&&ZJ3eHWBV>l9_rCaZ3=Ct|2*h7?tyA9 zRo$j#VV|kR#%tb7sXoQAyqIijLYoR0=CS>?J=V|I8nnT5hVMmA-fqSh2yyg4=GAWf zn(gr0zUN)aGL=D&M|8UD$MJ;2WeAF+>G6wF+B`2J3gjK&U9G*mAH~x|HM>uNZ^~Xe zi`tYisJfl)-Dum=tV_#!Ad5X-BrUtwgT$0+F*Y!IGC~zc z=B7DQv0ZHy2Nvi^gv&&~*wv{+zGa)y>+r5-><#vJF58HRm%}1eTwdvpl!fd; z$QhUx1oSw96j(7=R7egV>ow~$X(cc!D$MT-oJ4)Nx*4z3J9nui#>FaFtXY0C?(~f> zdnVvT%IkHi#=7eV;B9Pigj{Ur?&B+zd=kDW+@J3RzDSSjr@QsI5?}nj7w4zC^|)M5 zUr$^xEMj6J#^Z8niFo}q9e97<$NTE)!V7S5Qt~e6#6>mRdq5H6>=JLT#_24fh%~WI zYbUF^X$$n^qKTjXSNaUq_;LlfcpGn{53fWnn3DGyR5ixR9!~3I&i%X@u$0Aqjs~a8XDZhu zZ`lFK{Tlm1t`_Ce^^*tC{L34+gRaf3sHP7v zsmZ&`dgmtQa$JYA3vg(l@K`t}nFBl2kZcKdgsZ2ZITI=$o-*2dfmga}Y?z>>vm+P;gttR2ci4z0f8v z7h1U{!g*aH_HxaA5HVLm8NKy`aJ|%9Sreeq+?PnFqqe1*WVLM=BZ>Wx9yGDmgVQValnQp5(IpUSOIMei)dD| z-U~TbwBr*n4*vUTpupcdg}>6qD{@+#RZy;u+=1TbYKYjl20uNy=4+6FPLa!pg<@kP zq3A+S5PH6@>$v&mbno>SdlOMi@0cfM!=zFlXW&q8cmd`h*Ma~La3@QytXkobAE?`Y zD_HM_K(%mRE_NyNNAzI!$Q*sz{iFU=Os~DgHiXXC`n_C5>DwlPHN&wS-TAmv)tdU03#bo=%2_a`;yJjMy2O@m8=sMF z@|jTV!Z$B_CwDY)z$L#q&GG9m$FYb(4Lp$jZbYBAWFPe>K1R@c+@JWC>wX$AQ*8ZOZ&&e$d`(VpHZIg_43O{)_c~iyRB-Zz z68XeaCH#ssD_zsxE3v8TQB_bkCK0^bjybgs^Np_}!$ww%UY=Z@jRC z70-)wjcH1DjVT{KMAq?~=!LB>GO-VH;=-D6NFJ7vOoLZA2Y>7S_|Vh5ALC z;T)_1?>&HW_>CKpxAhFtG0Xc4AMtk+e<&>UV~JFP{ca*@+2HSzAlA(s6iZ<)_{Svp zuSxLVlHk85!9OLzKQq`Q&-lxWjKp7FWJJEaSS=-=UZh;|=|xHP(xe#DXz+vfT&&F@my3~%{H$SIfO55J zoiW*?ccO?Ljs{P+6J--cWxqf;23EM#5kD{y3;zY-uO<9sh5rZe@ufg=vF-10wB`=+ zBl3+qILO^G?6?jX(ZMKH+1!F)_?Tpu%ZS47Ff170{2N5lpMt{pU&6xXGvp=Ur8tWh^#L}qcWfqAz!BnWMJ6W1jW{<<0Tr|z>V68O~T$oWlpC4Pw^mD6FW2$?68ZX6@aC0qd72|E# z^ts*0$Ul2uDUM;Gk2wyKwSFu?tW1_#&n3a1O7IX+XbD-puKsy}!ct2u_K)@pDeN~b zF^nY<6k=PF;4c!~UnRj`O7M0v{<#DXC0&}hy{wAHXD`S9S%N^*_M0q#yP1h4aA6j~ zg;@p{rsOV6AzheKx-i9bVM^q}WNyRmJ1}HF=)P+!vdn?-ep5u5iy-PW1s0AeaQvlH z;DGkClYr>eTGV zYYB_ql43|e4L_cIO*iw_K9k~)*Gk5lnQ?|nDx8$5RD@-k0!y8wz_C_{)20=IqRlC} z2-u2TlHHYEc&ixFm@GenV}6XZ@gpd@KgEv#<@Zp#t|hzUMh*%9Xra^f8g)lO&xLeW~sa}-56^*dy_bIZ1bW*jFp{ZnS znI+5Qg^9Tl03|#hD`7}W!Xn1Z8L9SWnG+U`kdkd;g4E8O!1zNIlI6e@a{|Epr|rz8 z-K(m_(OBanxV_;K7M+k1gMh6VIFsVXa-W!lKa> z9|B@qlhpE}#Lx)DnN)@YOUqXV@U<%CMH4PrB9ngVJB&}FtM?>Uon+5@* zSh?FT(>j^tE(>om65rq=RQ5@gfC42q*+?wDX^pWV++V#U34j1U zk8ACB827-@vdtyBkQO)xj?0eV=c*4Qc&MBai=fPfdjx3JOky=orPrR8WREpLytrzF z$}=f3Ik-y1kyuK?b5j5n(UN_JL>`H8M6F7sAg zlI%S`mXu2*8e6V=wOn!PD=(Lw5Q|2zFN-_>&%p1z|8co^%md|`0qwDsmvxfuBBxLr zT(%ff&bYeYo~_@jZT)gSx*M`yrS(gbfs(Q4Jc9KE+27+yhn(?I-MrnG-wt`DCwIapyj|)13s5R{+0AcqHN(6Y6m$(USvb%;Z&C)~0HU`6DU~i#$hKiGKN7qM zP%+38+k9YN+!6bGvYtc;3V@hGgrGGK?f3rSYqqf+wXkl!=FF1qCwk!Xo)HZ+o= zTSti-NYOPA<)ihSD&?IoS4wRkj>%?7hI^uCps{*uyaiXumFftWI!?QQP;KwCQIA(k zJ&vuqSTeH)0>c;tAT?FrE#0((WJw)rV!;bia2PSpu*YNq^FGRiBZ#Z#!k=(A5E%Dc z43RhG9bV2nc1o!mT*(Dr)d7Q;GI+;EW7}lxYQDN{SECtKBvotN-ahH={qO2mur3y- zaZlh_DwTiMj6cBArets>iWTAjTWjTR$z7JTbvPndHX{efC5p80m@1QoTnLWfvGG#G;yiRSv)^1hNr~1h&J#oFJ|WAFHwpTHJO~ zF`$3$lkDi^*6*>);;cKWf`zg{U9;81^r9^~$#5sJK5S$DCwO6h>2G+@kGlOO=!WMV zm|EhODII*4!ijF-o!*j>eBxTv=nU?JGkfQAJFgtd6WI101k)0l9jJIr( zmkm<{SZpD{GRig)3nZDzFPj-!`!6S%sY-pyho?WppoEU5+G(fxiido&$rw(rj4s z$_6H2B})!+2i{UZvF`+1%;`1jPrw58#6b8F@Gt4U#I!D)cO3{n3P{d;48P_sn%D5- zuwk(!^Kk&hGsv3 zSgIGNmFoE+HaEZNgC}>u>A`rT0%;uz&qFK;JE zxn>_}&OkQU?*w4vnv)6n1DgW-6}=1M`hHuZW!u}i4+=X3ay#<#~3=ZPg4H7rPOy7B90clC8P%8-cXQkdykm#MsQ3Dlwo z0~u;j0gCfmhod(nwEB^P?54s}N`oaJk93KsLG&X%dZp!Qv$iAX_3_~TnYdGA5!`d!Q`w-Tc6 zB%gfYtUp-x5$YTr&{|1AmR0O!%%QtKwrrj%KZEEdoMn&*L?UHcg9HD+Kplp zQlZk;7DV5JIc#7vif_Q$gcpNorntp|%1q7*wb-~Z5Mr|yPiDV~F6YJAPIKNYSO;1Y z{2*^#3v$vbaMbiBG|WJc3hA+Xycnjr^X79bhWI>R`m&puA7_?Eyl50{B-jXm-js+V zU}2&c>=5S*J@qb35LT7&g7FhY?UyRC?OXZqj%aBeZB>e#;{18x%=zib$a4$%TCrqx zBKd~9WDdlT<0GeJ|G)ALcedAl@b3`4%KsF*{cjl4R8X_kohAW z>M#m6u_JsCIOdB|F#2hx=Qx4}Lbk85NZNmOga5n9Kl~E13g2U-U)dhDnCfbVQBxm7 z-#r^-{l)+iTXPwl(hB*=g};#w+7E}3BtG6x<_@Vnd*;`10r%_~)Aq;Gg;*h=-{-#Z z{V1>e*^dTIAs79AP+5XlcPO={CBf-Qa7GfGnFMPRoQ&q$8j|4cq)?F{s=w5#CeT3% zqHap9sS*@!vm`i)(Crc^UR89Gp|e8pFd}Tvpxd;i@a=2MghlWh@e(%y)dSkrb_Lk& zwlE}5&tl}!zO_kJ3{}s{tc((txs{)Q>RD}s1vtqOmOP{EA1q-Jze)8*cq?|TIUHp| zeGyO%WptF`DTsFxaZnMH{1x-MBySBzG1A8gjXj!A%)U;q-51a0EApNzL2!X z=&eMzY9s(^yc2vfY81rZj**bySVGBrNt+G@*zd#>GCeyb;t>Gxa5{cG9kPu?^N4Q6 zBS3XHMnb{8iny7ICODRmk!rhy0vvD>3Yqt(BqRV5E+1b)Hr?p+DG3RH0-tYJpdc>a zxm`ShWAPZNJ%F5TIux2yoPd`jTWLhp|EPWqM)1sU}KLbQLLC z^-7LaZCg!(wev3Rk`o+D&PeT7V;f&PK z$+x!`!egToLb+v$$_aqVcaBwV-8MVUMCEE9ghfX)vlUm6R#jJIszIFe!`MHUSWJw^-PtFf>2|X4l?s%!EZ>O9@LrZ58#Cl~)jV+_ha^ zf@66ZsUF_uhy+-5!U~ytQe86v5Ef?#vyO;^kD)dh2+Mr-ih$~hw$>xSnqw$=j-cG? z`RpU^;`5@&zy+86Gz;!P2CW^$b58L6zxzColIP_sF=P zcfMj3rzr)hbANKTd}lmOPga&ouA zoK)Q`hki>~zm&qVK4qy#_PwxDxgFjD)JawfBS_acZue6i`%O;9)IP@2lXX$98}U+H zy=-lXwHWU4<>bCh%!Ig>Nl_X_Ovm5`!-ruu=0IBJLHNPu3x2WQY90YxuNZ@vc)K}m z$thW-G?mpV*7&y_Ia}!Ujyx&3Tj`CcW7u&lPwf@RgDau7(VieDE}oMSQh9EVXtikN z8t)P&@K+n{_12uJa@`N*NZ-~JcZ2zLNl&T!)fIjMTYMRXv}^&zf|B^WEEMn9h;Ph7 z@m7ua&=iykhz->?Z5pr`q~DY-0Dhz-i$%jPgDqVMiR&UH^uhhngYo1a)}cmVhgg-G zua5Jc^&vWY52hS_;38m<@gd!4QK0l&Hztl^3xGCVOR<4nj6P2r)DO zUib)MU&9af@5v(kCW!P*##IxKAWhzfzf;4?l)BBG)qp}1k7BDjzn zDlV02Pk7){;L&>z_XX2T%StUR%FI$*w9?A0-O@^p%B;-F$}ih&Q_ITAFaEzXb0547 z#icLme;?er_spC*bLPx)=gyonBTM)kiJ?1mVpnBF7rzXVucU30iQ$>lJE)5hl=lp* zd|{cxe>R#KgezUbvFwL0@P*Hx`e9WPeY@J5Fq8ckENn2B+Ca7KY zI$(^%q54yeLy!|r3yDK~RO1lji9=mnH4Z^eIB0&v4^_fy9Dz!IpL`J zqJFd*haiDdkIpS)_X;{n{CiY06brb8k`EnmMyK&aM8qE?e|`M>xcOQR3Bb8|#D4%U z-AtN zLRG`&s?w+UGNx`OVK_=(_a2F zJnA!lhXgF2R1?743H!dN{um!P_5>eMFK=N*0HHS=)V+t^4167O-4h~#T6(vO1`32(4)rTbSm~p7zqiV(h!W~P( zrKJ(|^iOqqh9X2-RttHnUR1T*yr^cnc~RPKUNR?=mP5^4elubW!!Z2EXQM8jn!Gxr z5U0*4pu*|s+#bO_zPs@C_#Lol`&g&F9}b*tN zc#P4%^cqiI^p23X=$(O228T{#8l-8t8N8KF1-|1%4cd`$98qka;KaU@ zu`oW;!klv!e=T9l_mU#^44NeR8mHI_?Or3dibd>T8KRfQx!B#w3A2hAeV4BVziWt= zPxC~vA(DT10937fgtBlX+KhUtY5+F26lWBMpsp!mCqnF{(p}x-#2$p);T+1(AQ~Ts zDx@Ugn}8kSgfXTTW4{wpaelUXzZ0mcptBVbYurDn3(K10&_7Vd zkNtI2Yh-*RI?S$Vn2lL3>?2A==|B+X%I#yTB4Dx;y@n%{qDuiu9aVZS-|r$Hk`4%C zr9O-)Gz>oq0v3D-`L}ML?2uAGmEc0KSFLaS1e8r6y+{x(NR@|=tf_Lp8Z;mF0Hvb} zw|@Ips%|lf7FF9*wAgs`lip6c*>9agH=C^8h}Qt@_9xhdo&&7r9kvR7tV>U+pH1@z zcJPC`LFc=iA&GvDh!~hrGt^t4ET|8V3V>9>^%h77-z^CN_;g8wsKxGpP^<2OCL?+q z%tZKGz7T@0_VATm4o(%aP;{N|Y>L~S zf_LVNzLcu=dZ9dGD5HiekMjl%AmJv8H81pfv8tXd}(!LDkHb>Ca&Qw z<=dorj5BSQFr0f@9hPXlHWYeRRFA9ltf~c~I+)OPr7?Od(0oYHw0%eQ1Mk@x$YFq-+5{CG zEP{b0*+|iGW9qxnfVl`cw@Ke&vG9MGXzcG2i)!CEmCaf&=0G6=e>-$ zk07oi08?C}NcFTAGLL7>I?F9poi^#jfYE<;ZyAm$Q}5yF6mC0CsF@O#MiTN}BKByF zpN(vyQ@#eNiCv%ZcI~0U{(2{K9r#BueYLR;HfNlj0g|+J`lFD{>^=lghUmR(Mt(L3 zc`EU9kOGQAy!6FheTwaRcv((>D|#P@R~lAfu#a@O(=L@XiV)1nGe!{|o2eUw8e)Av zlsr6q{Tzi-T_%YvHrp{?;o?EQKgGTz9Sn+PDN>@(PSH0}*|!F-8;MuNb`oLes`c?0 zDB;V=`^2^!7a3S!xTEY9kq)GQIw^LDw8?VEL7hKRCfhj`_-9T`-Ri1{;j^!x(DShvMh!&#?>)ETz_5ldbA$xXGAjvL?h7*>Ww`Li2=#m{BIH&1@-7>y(&8e+e-erG@rVt0}G6 zRBE>x3ln0pOD7bXa|fEH=U672iqj@^>t^hd+ofyAl;qB)r0yv#JrgS}wwsGgj?_n( z>=??4H$J{y*(4P|!;)vpv=k){HWf`US<~%yt9e4H-DFFMkqDQ7wR|6!F@`^g{5k_UZzgT7+%jsMAAdgl*+-gEbZd4_eZzy9ONkP(GjGPXXvZCLvrJ04y; z;Mq?nAK2YA_}Ooszb)=m^aCS&Muk7@*L2vEK~KE1J^1IjD@g2(!;eH#HD}D(GdlvVO zxQ4@TKf>q0@4vX9v&+6lJQ{bdhyQr^4aajK{2~F1SHkbGPwEcy|7)G^lxR-jL1{Sj;iGG+i>5gY*{ z5Ih4^?sG>Ng!siceXtbw0w837uUO|K27!xQ1QrSkMm7OYCiWCqZ{&$K89{k$D+0rv z1BW1f5rVcOAjUah1kyI*e4ZR6;$ZbHccdI-&WP<82Y`YZOiqMs-Ud=@XG#tv%8ym# zBnxa?K>r|6dr%IF;b8*zeUMo@{wVO=GCxEq)f`=lN9McKfby&v)w4XOBElfaB^5H2 z0%g^XXJRe`ZV?1-0m~Nb@_%k-!~Jj~_4yEVX8#F9?s-0uJu~zaNDQx;grgqhpd6+l zo3+hWHeMiS;jAXI&YAljBr?yRGtVp@2cg75l+pxInL5^@RF+^evx#dIXV%&VqE)yC zdnVf+NKVOisztJU5XC83isGEC2~#Uh$x^UqvIRiuWWkQ(=htX_@EO(2Gn#Yq_X8!) z6UCE-wLt96&@C|-hg8y?eu3yiS=J?cjn*T&&DED&O|Naj@ttBUEH#ZE&kV!>O}7W= zc)EA?hPl3*FTrbAu-U+sta#-UGxesL^XwD#6HVrViI{RQ2oBN1FuDTzc<|^$`B6tA zi8a31QQetet{gCBWd;_FH`{20HMF>JdO)tFsKjVB(fi+EH%+tCgKu$Z5#0mxjCNBF z#z-PG*H~yO&NEu|MdOQ&MJE5E@d!3%VFVXiG``ek8fi0GhfXnBt>!!vhUxSJcLrVq zd)4VitHN;QKSyPzmDkWAr8FGtXR#I;1MV)47|bPi8kCWh>8r|Kl^jwq7$_mS{D`y<;d^JzAqIS1 zu;8Ncg=U+5gb5{Pv|Fq$B^jDqYO`C4)bZR9lu!T)3KFQHi0T)Omkb(<3$pO7M>UBX zxIs@T@dWNKvP&%bkPvED3@v~eg4%2I}^me5ev7M5FTwVH}^r&oK0mY6W$FSb|v z1eREAX1jTcX@t3;II!4MfZ?eGA|<^{Q?9wlSXh<$aOY$k5{Yz8%HiF};q6W&$PqAN zdeH<+VVJSlX3kK#m0o_u#$x#t>EIBp!CY*%PglJiyt;ZfRCDN_VuVZ19Sqi2eI>~t zK!eSNg(e9G77JNqnhVT!n^UuE;360q9O1~2ny&P1=yjA}Q zN!iUeQf1POh{M|rJ6y$fVI(wugANd@eX>tdl^sEi>VTf+KK(j4KtCeoM}+iP>SDZ=9-qQY z`K)ZSA69L|kGd7Q96xG~jvx7p=E*n@CYA{>P@fS@yjMY?M2zyF$5J2TN%|&q>!@!^ zw@!NK7&D%%$MO~9o%PM=)*@5P|qWzyU+)$KeV{yLCqIUl|ss24FGet=S{d6L_CiqC=%jPsfgzYYX?5G!Tf8EaYDASz@*K*x~Oz%vp5&74yVaZlbxp)MBV;Kcm``#b$b9SWf ziXFGaJRZ&a!EQ+W-i1qgv1~1 z^Wje#Gq6-=b8!s>&hxk$!=L5{OE5q4H_QvVsIWS;Ni)EoiwZ6&oH{Ge&cGyQEfi?K z!K_M+3bfxL&?R+;hT{(iaG4AAra-GeSHK0y+k{~~Ak}ih&>yHhj8LAXS)(bKnL0mR zz(7i==IG9IQ;z^Op=MOixv7na(Afx;y^y$?B0DqG0-7W3YC`m6swL1jX)Kw zc}MkR?J-2qW{susjQC!FcAbDMJ)N=)cxG z1I4bIu)HcOBc}KTV=%zFVgvwM98OFOIwJgFO)CuOLP8`QkC$-}aN`jcgR3_#SdhWR zkN8l3ge_x`N16C%Wo7h)3x9anxpOD(0l2xbR0_9umoCwxC+U(LJYnH^0nT4sEvm>< zJ*RpcgUeCR%kb>@U8;JX@Ah*S38aWBcwgo3D8An+e{;HTP~lDTj`AzNul&B>aVHv7 zRixzIDZ0Xr{9NcgAOqqNO}5HjL^F2Kj2%?770uWI<{z4|gTt)B#m1n@sKL!np~~OQ zP(fR4(-zwti){^DEFJphnbFKNO9yoe1#QhpTQmBntr^wr`3rpQx({;ekWqArm2hv%L^M0Wr*UkZFYUB3k%DyEbj`#+Ig$~ySd&$0j0arj|tK$d_`99#0U z1-MoqjuC!j>q2%e_W_62wtqnw4hj&qF71I+4>-FKHVMy%VM_5gtZScj`I^?ZW1Tlv za;%{J&-Q;JQHDWSmIgd5sO+fGISlP_P3g=X4Go0Tt;vm?rv^zTqXNi%iOVZiVJ(m-| zCHojhq>)%HK0g*0k$p_f(Vf{NbC-mgQ9W5}g9sO~KD-;zYq>sbB=v~%Ss%_tgr0V^ zhzVF-m;1Y&uL=Ndh}-V$B%GypFVK_Dj_xVJ`w*#akB+#u!;`kdlV)M0?eL`S@PwV8 zv_%hX(ZjLm5k~7As)>3V?eFblQcZ2@3azQaUM>=7-XDaDn!M?Ppeneu%tvrht-yX=RR!ZV_F~d7SVY@WCpDddPDMD2AKuaI{k*#4!Y0|y1*G8+D2>I zMr+zeYuYjhMl9Mv7wSP5O$S+u3x<~#7vt-5C=M@C54*6H6dI>%HXxV42IQYQzx7Y$ z`+6v&*ZJ>SY^|Yv*Iv5sTG}hVrf*y4J>nhbsyd&kO8dh*pQYLqbEY+Y^U}WXJrVBs z_FWH{zJKq*lpTHlevUiM+tL2=^ey}o_JPvAgWdOqC%x8l>dDf_axK4uKLF}Q>&ud?J`iTAujumZ4y06YV7P%h3>ezJ4eKU6F&-*PPaY>F9-3CGzum}AJ z=*6C65Bd{8sns6zKLSykfA|Zw?9uj~(Dt6t_MRxII(<{ydqUfL!s)C{?VwEzbuaRu z&Bnt`bgr_?4iuU;rlyUlX=7T=6H4tS8$Khwp50!zN4$&`;~3sLKMxb9&BK@{T)KIf zUN?O`kLF>TeS6EY!5@6J%%KOCv8lnj1wDUwUJ4`*{rh zKj2Q=dUnKh9Pw|!o#uhA!aW3VCcc%m`5^cCpk1|@4|=8c^FjN7+K*;OO4xLk3GE0n z>ojAl=D~O_W~D3(KC~o9YNTU}-`vSn7j`mRN7mNdKf-S?5#lX#F7s+9P`e z+!-i<{{XF-CpG7c-2n6FI8PMM4Bbd}(w>OkcA1ZZ-E!w*6p0;kx232MwatBNM2zzu z(KY|OYC?3Ez$-wE@kY^E24*P1wf2VODTT>EjrWG?O%4VaFL!lCCKGK_E$V?kqQ-iU z>dg5=Kyzcqk%A}hj}SZ306PPPQ;g!Fc2igjcKTr(dK@B2b=WhiYtbC78P&aTz5r^h zcdE{rT#UVIhZj%k{mLR)za9a35}!DQ`cv1${W+QgaTdu`gcuAJGob`(xXV^O1 z&(@@4OzTvnU;OU0Ho3#FPDJO?I-f&J_4Qp`wB|(T%-VtT7@n8lqBCe|eTmMNrSod( zeA($(WBMD`k6d(D7CtJR!mg5@9m(90WmjQ3%zw#LWiq8|HUxXXN?JH^hv)Jb~S!A0W>%{F_Ls(xV6 zc(ZM|w#KKe@o8&(#ktdceSMwQ_vleGUSJo!#uqliWVd7E1a<%DK1Q4ApRv}b&DP?T z@$cMIbs97w>%87QG(WZd4=$bFeNB5GIP1;RT;xfJ-Jt`IN3VPNkuLiNjJf`Xc}ABV z0BQQIm=!=nSDycq0lxm;^Swv~{hZT@uhm{pos`S93A4Xo!b~$;*R(seFF)>kw&)*hzipJzEkN>Kty~y@ldphWeceV#BKk$&yk5e1azGMRu8n>dc z`hETP_aNPYelO+>eeuMJt8!M38Ao~qA3oe^R&SJDO=Ef5qbwKt0#D$|1s>U|F2SA7 z_U!>b+OsUnhq2G#NBRYEc&0J`VTAd?kIwm}{mWj&Guf^#!E+`?s@nH}yWJ`s<$KQW zfwyY^JwRKYU4(jp*g3p*>IHP5?|G>glp;ds0%4F>D$cOAuxZd*IkypO7z|D0yhn63 z%%kIcy&}4sDYt>TPMB#mPQ`q4;t2B$6Z&OVZ>l-ZK2bl>WG7=K5e;rcV&;#`=?!jER!u0{Yr6d!1Wg0A&c{#KXkD= za%^dT9_PM3jD(Zy*g}dnk;=iIVbocBDq45?V)L6b zx}y=)wC?m0!szTAT7SyK{c6Cp_C)JWwB|%>O|;JR1N>=yX#p-;U$Oyr0N$79{eE!K z7W+4z7yJKgedz+$RcLkT9P27#U8y$fDzvWD-P=BnwOL^qf(0J0n?TCQu4^sdo(RI* zDVVUYsnKq+YKQD-dr>;ss%ds==xZ+WkezVsLOH>dr>)6YCYy@WCUooe|71<3?he?r z`TBqRd_9%04&V1%Fi5KN^Y!3S{Ah9;|HSinOzzcrz9C;m*IaeRaF;APIxdOtcc>&)K`u6mbFX3vREZ+?Txsn+(^Venb^_8S4W=?;ue!M+z#N+r_p2mms)qEjesjOPhfHfc2 zUOta+;fMH0zL_89M!t>b^NxHJ@4zE@Yd(di@Lc%k@$I~VFNP~(-AC!{<#YIxh&h~Z z;-Bz|{Aqra&)_ff&w#U=zsT+UA^sMh4(ifh;s`3rs&eqHa{3;>f^SgMmYB!*QvL?g z&gPSN5|0J{Ha>(GaOp2`Bu_Fo2Ujv>JAakWLLS~ntjGALd@_HQf5~rz9KPrG^Y=ip zh~I#mwc&|;C{Km#zu@=qH&q;ozXupkDceEq9{vtDLw+)MpK=R-4w$!rtK@OCJnwmeYCAxP8!!jst2ZO4On3*a?D&7Q`m@@eatvXWng zx-^n^Mo1#!ha;wRF38WWuLNEKUZ0+ z>q zNO1?QSqPn_tZGD&jo*UMC48x}DuOAw;At$}NlGEE zd}Y3p8_1NI=s!mDYf+PvcqV@ZQtOZM?~anI;62dqys18SgG~4Ft5J3qV(35uo=Uqg5u*g`D;C#Rh z_#VJD46+yoY3#y9t=gij67ejM+P#P|102WkThWuWKq=e|>TS>_{E(A4_$)-O;`x32 z5fw+~W|be+v?AoDM7dsBuH38Kk83%et?=1LwGMr14$lQIVZ0%7H3TJk2(8Y{KSw(% zLQ5QtUf~n8!NxoVSR;^Qlc=Ky)!Nelt+;_mH4g6z9qru0eR%+`sVL*Aycqptv6?$s zMzUT}JwK?{t5|MDe<;gG=At#q<$mOj^5~DNE!xx)9S0e##8r<6^LnTUKFFaDu+z}Tq@g$d6qhVXSsz6kQsYlXZ+JKQ#;JI( zwZiji^d=k8*CyZ{_%!#|wTHYC(Qk(9M!R#+#=N12Lz?Lid`|IcCJu1DlaMT z|r$12fcVdwERzy_AO|2 zw{ksNwH{^K9Go|IDaCB`D%mdil%<%5mi7{A?el26<00+$c^BP#;KhhksXS%P4Fsq3 zPMiS=jo{1qYC&l&dhcs=^Y|j&a(<6)CBMt5U6!E7l(ls-YRl882fdJA*;A&XzOK@t z-szc6LG9~-T-?X|qJD&BKw5x*%S;0R>EzE?3 zGEv@bQE%F!d|t#wQ+Bj>A}de>Zp$=+x-T3tEfC!=hchjMHEWe z5B+c}*`p~3(esw!T{u|x2;Z$+%5Z7HTnXPYgzi_mDAZRrz?-xQTH+K?9*7qF zh^UQ`Xq6lo`+@0rcgUQTL*`q--Cn!{ve6btsx7iB%C;+Vjvfkedx>{PCf@%>aMuLf zwE*p0@OL9hMD{DP?Zt_AV0}ouJ5p|hoHPb*OJybAg!DGgRt76Wm0`HD0nyuh0qS2p zlyWd{q$8TU(3|8z#_dI2Z3Q|{L8?vp7{UTC3##7Z@*ODi5sdyX7@Td#CEtqjIfUPd zx?{k*lj62T{y$ZkAy?7JgC4SKgg&YjdQPfeeNjg;(B=bB8c7I^1TBH748mAMjFa>w zXl)oJVKfkd~Gm@$aq7$M32zbD_J z!-cVighhQ*Zc^~2q}&R*Y*UiJT~kOAafj5P{^vaUB*UFbYQ1Hp^S2kfQHpDGh={P(3*^+&CPu&u`_B}tt`lWYm ze)#j1w>0OVKjs4t>4{ymFyMHU4B~9l@@4Vs1m#=@U)2_FClzm+XudZ1C`+qBD zoKAZ4)E~#+O!~=wfPdfqkbUsrLs5S`et6DjBab@l^6!u9|8>WluoM3YY<^+g+4juXM74y`1rSI-Yjs*d+GHZHv3ntZW!`f{wpENZoWOVf6pnA*FJePl5F>{ zpZ$2FQ&|V1Li-(Sk@RwA>|1lz#J>CN-EDGu*)AiUs(VK5?fgy0W1WAxA+URL~2fkQo zH4a@lo%Rg){NR+?e_$eu^tVXwssh(BSe)OCdOZ<~Y;DjSgJGWQ*dJ^e^gT{P`Q#CV z&BWUIbFj%R3_)c4p2L!QGN!)h%Sxjm~K;1icU7zX)lsK-^DpeTJ~H;9)G{ z-wnRM03N9fT#oxH;2uSs$BT55#>MR}g6ZgnKe@ zx+6RYbnb$Fqo&{HzJJ0?klZ=5Sq+Fg6H~4J@8}2L(C?JpOD1oS9n- zR8-so8H8j;=g-so`fxSA+C zXPJ%&Z&wqdXLjkJ@PwMsz3IKtap41U-Re`H3zQcfA&&FpT`OnJ#9ZaK>wF@+%ae{8 z?_ArIo#ji%kBePNoZC}PEPKkEUJa?WP1l?J>6mhl^r?;(ppKrqhSE{x?cCFMj_xXB zIYZ95=SKQ|%gTv}kE(X}?Id*=2!MD3X?ST*8BmyRd*V}&x2 zjeKON6d`smioih)M2)B1)w8-)Z2tDgD7Gtq-w$&+99L~c2u=OZY`7pedrrT;E&gZVr<`qTSg^IOoI{JM|@<9o@6I z{1B<14eU{s%taNaR-1vkT;0!_;YYd$=V}TMf>hVql5*__GjMWrEu*>@a$iL4RJ&B2 zg>?+ky4Nn6r_jDd;f+MSAJ2UPV%~(`*kSC)7KxkHt;7!aA1EmvH zWBO949#x#H8gD=}n5TM1bIn`-W?s?U^OyxR@aay?Ij`RX1vV<~D4uyf4#d`;h~DzP zq&a$FXH>^4|6IAh6%k#SsgCHH|MoF8Ai7JS0}x}pvEnR)w}Ir6HAk|ZQg{cbFczv7 zmjl(C97&~qqwI>X%7 z-*!}>wg;W5DACn=C`UEEYNe_bx`qxBHZY``X%t6^wegAtHA8W(ST&ya!>=;bBgYJ! zOpv%ArYbdir+pBDFv;@4j4Z2NF`&O>A%63*x@R+3nQUV2!yvbRe zX0J{&SI0N5soS#qM~oorcnR0_J^QpWPVQ_<>YgI(eJ=P@OKZp4-kYOLRvSitX`K?2 z=r18ALv9I?R%|M@TaASYG1;XP3eC9#P1AEOsiASUFs1w_eC=y}^+k0v+BopvdMaz( zet&57?!xPxHop4zkFT`$p|y{{ckrjZKQK#wfnRTRTXx#}C!P=C5i#F|p3K57^En{R8Y}GcZ~s4Ghg*_TpxY|CfilVBfoj z544!~MZnQ{$%DSVf$VdqhsP{lA3kjHs$Z{LoRay&t;=#AyPfQE$A0nbor_+5<4!v3 z`sn7g`yMJWt}pyK_i?hx4H;3m#eVRsEo77X+vM+sU2c2xH7_pT_g#f`cl}R4J~^?< z?smq1Hhk4I_}Op9-eEd^)y+*$Zh!2=sVO1%|K>Mt*KYw=uKQ#3k&rWFi#sa(VZR@S zzv%C_GkA;ot9@OKLsLBrlZi#0)z2ord2s;A5j1hK(6m2V7|ge-ZSWAZ{Mg zCi_^jX`Kxkbgsf6#Iqs}*}%RCoQt^vzZ!VIAgy6AYtigi-R)QDXzz2{uf7eWTH3GD0p7h$ zu)TB`iIN?I!%C)4Ev;k@fe5T*&Q8Qxf0mB+hLz0OBY5i4PDQi}vXTi$J@;z-;%+5F z2Qqj?bXOC83W(>llA&Y1YiT8OB~WW^B|}Ghd&r?vEsRabw%#LqGNP-xG#&Wu713P| zcLLEv4n)zpxGzWZ_K*W1c@}XRP(9>8sNU42KLm0rRn|hBvy}}UYqA+K3sWy^tqv(a z3<3#fBOr4@c0FbgFJ{wWS()zNmmy1+8qTu+%OQ?zt_% z9sm)T8=akqGi$xb#_(JbJef^Lv{XklqE~R9jD7+F@n<98%;ZcMCMKQ@*^|N9hytrR zDG1uBm-Yn6gKLF*ell$Wqr)l@ot>03)7udZ_HDJ{z?1!_5xJ@|_~*9vD*moj*zCB8OT%-cEqr-+755t1R)&iNF$`P6LQYR zWY`;atxY6P#)}ZOr^A|xtV+oi(Yb8S-KY3Vi$rPe<(-5xvkw6sIXoM>C!3ETlCTt< zhNdcIS({_4`oVrt*!Hs&^MTx4f>0`C?LS z2syLa9F~P$YZJ+n@fL`xEfHO`dS4%gk46_`G;D&7_qJCfCslJU3nx}#7|i_C!+=qO8Ip)!+3%uKKF4X6R)aX){@ePBB@n<~);T=tXUiVTw@n{Mh%I z2V?R{0N5`dD;1a`s)j-_9A(tm>oJ65JV}p{)kPm{6-gGiLrd)?rFO^RR@pf7M8^%# znFedUMf#Qa(YuI#fyA$7_GPlB+wE5Kgi^c7MxybBePXF;{CH*{`CtO4j-P9-<8G(=U%Y z&0HOS@oKU|_5N2X)7I?)pH}a*diQtOj%xKzt9M$xbNjs2#wZuwC^Xq=vimza6s_KA z^-imI9y7J56wo7v_FtVpubk%pX=y;S3%EGD0QJ0e($ROElSR7sj&ra`XP$KB=}aop zjXw#IJI-~&W7WA$q)$$IX&cdO&r8c{zNYyhMVk|NR6pb&&-pa--yQwJDW7pRD zMdPQMi<3JIG8PwPWnwKGJtEFX)f7$~8`VnX4^81@ib>sX*s+DMwzF`e9)<=?_wqV_ zJ*}H5LySZ8Q0Qj{htiQATJ_AYg9G$~r3dqa^#;>JO`GvndMH3M<+HNQbe46oZI{?h6nF#c`{W?}26jlVB)C&#(!Lb9w1 zwnTdM+7h#hpnEjPY_pHBTTOW7SQ8xDuP%5OvIRu9ZpJRTUAlHmksE3JkL`kQKlwwM z<6Gm|MMZa$-LLca#;21H>|U|(viJMU`EQkN@AJ3CoucoMmdAh9JM4C!cxQXC@&gYE z{W!G&eVaV{>ByJ?35{E=JN>FSA2;d!NhxH*JLTk`L;Ag#Gn8z0b5@QS_wKYdxu4|b zTF5q+cJ_CC&lI69lie--$i}uKuKnm6mczdk-!i%AE1tmBMzx*I#+|-*dcbcz@ahBa zLHN=4&l=!=jpt0<>08JT_rt(@1NXh~=XjovJK61aM!Y3}$wX26UUL6l+FzURr31D9 zUV0y>;snTIVZ?L32i$!?Dbb05-lIEP5ln%`qBzaaJF2Jcz_bgsf{m!jxYgYX_Q{$M z-K{^j0MWzxlZ-%|GdKnlFdo*QgyfmEtAOfZ{Yj|atUrGRa#u5Kd5o}Rt3KVfHZ~}~ zA!>s6s99A6$!v@)qm1xbiHWY(-XqAYR-1@!#`q%MJE~`f2a)xb1;;<0pSj90L~G_5 z%~|RTF|3L6MDb){5fBqgL{+V=eQGOc(>8OD;%Y$rvL}jr<=G9CCazSRGcXalx-qW7 zp3F}IQmiYIx2oa`Q>Ci&rAEP)*93db+Ef%jM2wNuz{H#*I&=CUkg86Daz^sx_hF#+ z79+{Jsvpe%2|BLYG>kS4LqlE@EVYbwi`B(~OPhv)L?Rt08M&I(G;(;Wrwvs}Fvt-g z=Ul>!#Wu4x4O6Tg@WglrJ2Rk$Mw=L2&w-(%@O)0;`66b% z2q!w_6b=^{Itnir;pHN{g3=M;6(WTSqM#%C6(YP+_*M$Km4fqR)xSy_NKZbOt9QyD zNs97~96?rqbjX2lfrV$_z$FYv&X5a&bdnl!BE!@)ksATa{3Ayal4m)96DSW}FdY4$pu?h=39brjX%e)bm<04FYCQP~uTp`nZ zWG+dzM2RlKq6^PzT}c*nh?e6bJW;Pi?nEjgROX6cq9E!Uxgssf0r5_-q$6`k{=i0# zz!6;FCB3YDo+4pFxSF8NAanN#u?+>7$0x=*|iRq`cF z5vtzhGqs%xkyA=v;z*egOgMCxGNU#~DH6qUQIiRxH0Unr$(k(M8GK~P(p^v%B}neRt@t?tOb^LC?`vMpghn||!lTPwN^c47kqQD}`O?2NnsDYd3d=~PzTDURN(1hX z^|re3FvgLxbfa+a{-!?*I| zx*$*&H3nrKtBc^VD8s6|D9;n3{w!B~k+<-AB+nngiL7x#wpdyG5n(}~6C!D$rc(WE z3n|!;o9~c%10P3Cg_M*q{*C@S{-avMK~rBTC{V2u^;y*Q(>jWu#J@*gjsruq2A?AS z6UK5f{UZHxB5m;PsOW}(doT(CW|HXrcspAV?xWE+1uLRbjC z_&{)ed2)Gqaz%M^rC+bH0|G#fkwxSQnE=;d6MTUYqzuxa4PuB5bcDkLzl!qmN+C+*5D5dWs3@-# zl0}BW2ZAdq%PWPTQ7kA22p*D#Xdz1o57L5oAP)!tIYt)2G-!cqunE4v2vP=V&;~KY z20FswfnTL4Gl&v7M8be8MG>O>QQ#aGAuk{sq)4q@GcZ;q~&r^4W#`Pb?bjE}$lUi+D9yGX9VCL=l z74zE`^$1*$oS(5ey!6Yl1GapPT3>12y=Q+MTNcr!XWZW9aeePjFkP`~ z$L$Xcxv}?r|AGKVn5aOCb$H;d{>ei_n`P9Qk-;6DtfHP+1Fm?v_ z1takcMPhSt0jaFAvK{b4BW^iz1oJt?sGndh`;W}Z#628v1$4(+_9?U=s`%-!Bs{wL zw&tYA%6{j`47zY)^#V?BcwK?}4M4gb7c}bFDcnhGe>AQ~aRFpLxUd_u@LPgA#V3EL zzcM0AFw_niG^qp)djFFjH2c{JpO1X}Sy;U@Sm%hU_mNK!>sc?ko}LZFvz`ru8^$Ko z`x&koZVKbQQW3hb-d(`2rz8AlgwHO4|DJF^6z=D6_3Q@`>vw?@sMo>zprM{< zw$xLK*XoJFI=KGq8Q*(-{n>kP!`La`pW)+UI758G1y=^bybEq5)A|487sML*6NRq+ zANe$4%l)VNH(}d^yC1HeeGh*<(*=+l2RDel6F~S)0?DVJa1RSNpgx6mtDjsihz*9@ zjBTvHrhX86UHBM6L@FVa?y``d{Pb)_C_Qfq{mCzq{RB6NT@{vGFP5!pu%^DAT^>%- z;}ImEd6AUXt-{>}w;Q_=8i|m9qmO)=vA&Jh)Q@DN8xzf`jS2I?Cgd)TpwMMa*VIQT zL{TYNgnN6`UEuIw6!CK`ig2Q%3Fp0LB49 zD}}pBxch{AOt`@vDKuWV8NwYW+^NFd+;M5gFt#7Ao`rQH>9y-b((4CT&u)g#W$g7% zB$;pUtYi z;<;CYk9^weenp=U#CjO0w)E*vsdq`C6m4)L*+(gqqsShV$HX3#$BA&m*qRkH5EL=N$^lVic_wO@;YPASy@y( z#B*h@$w@)1b#KbufZinY@p#s=)x9a!=fZ86{*ljdc3(O)@>xP3N-G6!EX(afHR`KA zluASf;itew9nPTgnvy|vuNUf`Kl>?z@*9;&c}&eD%pBn^6YgrbK`gZ|$@xm*UMJj} z;i9kTdrx0~_Bz}!_Mg5~Kff1llYTnvL*1(%#l5p1@$A>1D0da^aJXU2+MjZ|y+6t1 z1>t{0_(u<*_R@9$@qaCz!`MvWE)(wk1Ac9Xd<`JUkIb5!l+16=qCRy~7V*C)i&E)y z1-Z8fx5Yquw!;l$PYL9rAtdeOp_JkRxG2Y=R3bZs`z~Dc zD%l_Tv}T`W@6B$_PQyh%JWQu=&Dsy6=e~HRcY}OG(7TZ1E!G6eznI}vp)>&nFoOsi z0>}@WG1eE*)gmm6g$u|cpePn2pz8tEXRTO!0o}${vj}|KWeI2#pvEkPjTO*NU`9j7 zdkW(*A?zJMEdb3BVJ85!0yI-VzMMGg!{!L6C7`xASmt^GB?9UIXpw+=0ZPRY9jgU2 z6i_r9#vT!n2~a&Yl07M)xq#|}lV|Y$3}H7x6w!F|zbV4j2+U&ku7I8vkd+j0&(?X0hWmZ(sci1#3%wg?-{b->(#;Xyjv z!!~fr-z$Jxur~-o*ik@ffHn%~xC(7TNC-119oZ~|Jtd$PDzsHVDJryGq&HkZZ?R`Z zSRSBgwx2yOQlElBNjiI*z03o62)hALUv>}>!`%KVDJg_#fUZTE#0zMe&uWxPTb`x^$gW4cbd<>$5w;ANV_0_; zdPJnx6N`sbleY?}7oR4emju+8&lB7Vdh(Quse5Lq#ewuEdf4GH#w9(Xsgvo$G~5>2_qk{%heA>;Ev^_WqP^s{dnf z`}6VUo`V9Y9d-zK2d>PEjC-_xd(?#Q z>l1~a>l0<4AacWl$j2EcCz$+e!j$~v1yihq5R!0Ohz*owTGF+I5CxlXrwVtbaLa^y zXUJUO-!I&aA={Db-$L(3>(_^o+W;0ZoWnWE0A7jPQvUZkGu1?<}5Eg_|kd z>?YK9t`@G$i*qizH{H&+7RP8c#$~xsa?l zdnKv|{6CB8sp#2HQ5kraY5gg1LZS!2Cq8-z+-}i?-%q$#G`kKy%bLxG`&qNaie8`J zaxoiKR@`!=Dmg2=Ur=b{!PG2?u9%NyX{-;!$4-7Rmz^Lu!9#A*?@6Zox!+g7-p z;ObdI)Pop=bd95Qd&PZ?Sf53G4|iM~m2Ykw)!{L?4 zImX3X+L4^UZMO%Q&hHdiW2FpbO>W$t@|7UmRN)R1?p5vS?NivEWH?9o+#+0AqaJKe zZz9<`7u%CevO17_hIRNJJmhvb30L;dvR9Y=d2t7NQ^;O@ws^ipV6N=2 zy-GgT#P)nt*=*r1gv;5@iLLdV$v#K&vm%jdyUf>`#CH0QEax(kMsPgnu&2cHv%)>o zhWz(jM*e3my9?hF!;;9y7jFkW8=EBkcY%Ih61^jc|NSu-mav75-qa_8+Y!Z7B` z#t2BJU|@F$NT%S&4z-mj+ya_@?6iR9F{0wfMzwQLNx`hpA_*D3@*N9kjevHu-+YaL z-WAYF=5Hv#oLESEino$Q8;UVD>#jn-`Ih2a_*xZeXPAw#)ocMtNrbX>0+M`&u_FSK zd^TX2G?ar}UNoe$25gB69Rd`=PO8wifEuz!m>VF>KLIsnWhxZpmyX%3RVqaJi)Ncu zs0G5BvpmcoP`pgP6|4pOPKCz!rLb6bqBDgNpTht(>Ozp@vn9(BkmNIt^-iI%dF(dO zjAM&b=pjI@nW2XaBhKPki3(93+OcISM0rSHTU3ZrPh?BQl>a>TI;bSF(<<}{pd>af zm1q)YDXbG)A|T0GC$>jG^9;QM4&fW>hzbo3=nN<@P4YtZtTVpS3EIuB3OEdCTOS!_ z3`oZp$mc3_BcN_9Aw!030F=UR7tliXMnDSYM)#;;Uj%#xXi%oa{2iESY^e%e7WfV8 z#gh8UurYx@vUC>GPeO%(={P94vkJ`#Ou?xCvr{M6#_f#mlzK#!NzX|9|o>AYQ4`bc0keFB359Pzz zDixXpD2IKmLNfr3VyOcq=C=Bc`4~2~3X0)ZvL^(ztkF-GU+;ev+asWbhS;D(>?(Fb zg)R$9;#V;PzU`@nrv-Hd6s|%8fq6AcP@&O5odI=Mq1>P}K9*&x(3GHbKx0*CF~Y84 zb``o8Vb`!S6?y_R$FaLqXcuUXW4i_Ps^Pt$G&Y_cR-sRVRsfoYSp;y#z6wggS53?i z3H>0TECJ19B>8Juj(~QvhXW7eIL9q&*snq9F!SFfGbVRKRAb5J{yASjfJUm_mX@ z?2cj85-eiR3rI?^h`lMG-E3>{VVt3PNDZS}Ucv?pr+B;B%fZ>)%Jv9I)?^#|uL_Z@ zZ7gtvNI}TDlwIipO_C5h7My}Z9O+lamc<+o9?h$vGXk=%kEa8tdLMXk3FhFV*t%(M^vaFq%psNwHrh6WIwo&b#{SP2}ts?kR6d>hOHrK z{6=R<=e!^Vl-PyN!LWLTdyRKUVO`c7)!>Z)5LWBO!VREM*PG z5hNwJl(iAiJQfp{&X=-&D%3tKlrLkWR44_|?QEh7QK_t8PpMEpgx$$@st}cCIZGWc z)1%(>9=1e!<7?P72^sDTJH#GfOI2uNSZ6@1 zROm&7tz}zO=n%rzvYje)GVF1_jvZ2=-@~>5G8h?t3z^a&g{^0)69}5e3=Pr&l?aGZ z-_0LlYXl_g(j)A!ib)dOz(P!diWseJVDTz6s=*3`brulhiIK-fR-!^Q4tb2dr9y>B zZxb`*3o4=&KfyK^5G2!kf_*0-*^ZuM%O?v=@%DX^?UayVSoq`oNp?s;vW-2-W)%|V zJT@*o1)4!6MG~U-^i%AR3KfN?v#l(uSccsIXgj+`h3*CPG@GVE+Wd|}Io6=wSGd>{VtjAu7AsH{pjd_xP-UWG&ds z-WCv*!#8{{Gh9cQa^$g(*;Ob!B8BZ^?^-Er9;5v2V{7aLEn_heCwT??T0oNP3YH@} zKUwGBU?l>QvVMa-Dj+HAH`&gqL}h^?E#eRUCOf1;SrJV4COaV@DeE_xZW>|EV5VX*+DWZYy06QZg_7bQZU?npp z=37YN0J}?ts4l(BF!_q#Jj1bwLzppLAfScpvdC!NL3W1~y00+M<7h!kd*adwplZobUX znugcvjsel$TYJXp|H7Z0c?i;pMg{U=t$M&f4 zsNMd+8ZDGGgBykN6KtY@7P4qSKeFr_Wf=A4r`YELlI`dhHf<4wQ8`$3zp~E-Bx}!a zj4h@xSq{IkQ~}9y_?6NSxVBO0Z%-`SX(30h_-YBZXkVY39ZlHJf~rtS=Dw1mP4 zny33O`=AQC2_~9fs?aiED*RLxbd%198*Y>FRwGQ$!>gd1U<&c53T;4`A0M=oFqg6I zjh5;Bxm`dj+3N@k;D=S{eL#VH%`!>z3qbXG%yJ3+x6w)%KV%DN8S`(vQWwlOt6|ZN zXX-+D+3kcWU*pH#x)_@bxNmU6am$b_i%5 zo7E%*>k#ql2y-4=(j*`h=c;wP%07j%vInnz^3BTXuFjd{!l zf_AfCn!K%R!b=2%w_#I!LGx`Y)Cf>Ce_BA4qYre=`R7#-Xz-YgL}j7j?xsg{EqHeo zTHEwXK$$A^Xw&a?v3#rwZExC`$MO;tdbw#DYsr_Y&|3mJqC%fEJ%q5+D)epB&VXVb z73s0lO;cDLAD}{hQ3O>8Xda7 zwc^V~*aFe|TZ=G7lwUo?0lmtvj`~s;uZF$KXGaB)c`kkmdzCMaYNRB%#OqKMc6C&9 z<+3Vhc2pZBsS2Wa$$XVaUDlV*JZ2M7oyT&b@x{((snEped|hWAzFCIRyQ3@5d4iyY z=zB&eUHJ(K8D>Tw!itmONfBnaJ-RcXa22ASFNG(l5cPa1yt@i*M7$n6TZNuMydM07 z3hj+PqPv_&Jtb*=7=4X$IZsugZw0hYh5jp`3Kgo~?0dvJtwM3l@(?d%i=@)6*(5+I zfMQU4#xkVI;~fKZEzeP*KLJhPWhxXIlg{$^D=L%( zD4!ozp@D!V@q%xT=eL;pj0;q`ZR-soA&%%>lq_ExWXv{Op zb=f5xOR8;{yam^Ai&NwM*YDyT8H^URlISi=@CDW&{~3ejxS6n;iP zyIHdq&nQ!P)XRjqn!bDFC%vs#$6$w2cpzbQPqeVKxG6l4dy^XLr z{CXAoSU`8H&<_IIqQ?7gi#^I5eny4#v2QD7e9fyeg-}5AxX)`6Y90HLay?&H1%0L5 zzz6M-Vac&C=oaw`6-ouPm}l>mVOIdUi7!y0k+DB1H}f4Tbam_*=RD_pp7WgNJlk15pS=03Gox>FCVrcBuQBgG ztIoX58L*|#o^=lDz9FSy^YB^kjJ(}>!Ir*#*1^af&L_U3IDdra?sQ)8OXo%Jbguj^ z>(oNO!|9O{t>QuR4u>_KO@5~>(Iy{>yxT9`RMiuGk6)r~Jyh`A`~AAB;4MDrmu{-M zAsUqU+=ra&rT2#o{lkZyn|)g9%txFzh3Y=y{3%p-w`0CXN?()s@QlvL-Og#Y^vN05 zptMp-it}#g^I9i9=cCROe(8lF_wnSf6sVd^j;?~ zC35Mb(T_WK*t);WxG(w%=cj(@{^%#2HQyI3X!%I=(*=C_tj~$7s=gb&-!I)%^+fb@ zeu;c}z`0tnB%GQ5>U_x=u%*(Oe~Ny|`Gzf>GxKrtCFfVRbji#GC@ubh*L$7$vh#%} zSkmbJ%g$;4A$9O$FGPP-3}pBpx`m|u5pvZd?r+&7)uY>Bq@+s>zLiFWXq^DA4Thy9+@@vM5MJ7$)} zzUSO%OZTDlsB;h{Y5?{9G3SG}M16nE`IIeD-yd@xl+v*ICVGF&dDnj_Wj{vg2hOX1 zsiohebliE1EhW#bH~-;$(3Ym3`;3bhw{7Xtb5qWboKOE+pKC(tKb_w{r=<*@d)hI- z(b5p=e(H4E(p%3xGxCgck1gGcmOpoXVM`C6TW6kintrR#{RirvbvkW{t83h|krL(X zjM%T8FK8)o_N*o5H_oHBR6A=4UdAO3L{=pmXHAa4Hz>tu*?;S`jJ1JCx52ZgiZ?dHoDE-O#cUyWn zN++E^+tMIP|KrsBPO-cRrN209Z0V!3m&N|(yxx}R!;Sl8TRJ*B<+yJ3@AbK#&0Zag zx?Q%!l~l}qSW3Ff5qG~KrDu}lOTzuBEs-w?_c<*&6dC^#cuKs?BN-Qe3{@@ z+Y&i3(Y?f$c&0JY%}D7;)Ls22X=&a%r_PkSci0kF^W|FRy!Q9-oDan&xs#*> zt(vpMOm?r-I>dGV8k_9iU`xl*a*BJKU-#bFRCnV4D3+(^d?t3fd!CkrvNPQIe(9UB zGu#H-lG0k`Zj#c&=9RM^ja9i>zjV+{a|dmSbM!LzHZ3J4o_9QUruzXY=?eNx_pp?P z4W*~r{eqO#$DQT=LQ1+eoZ+7R0_oJX;o0spMO1=^WggCUqj8po&3Dejs>kiLrJqQt zDxobo4`;jQNom;p_B@&$F-RmIbFAE7kg{g^HN1*L`V z5nDQaE>0ia-`LUxDAl>u6WIf~^vBqx?jFDNLTs`73n>koLv#NayUe|^L}{V*Ug|z5 zCG|2(-A~|)PLxQVCM|QnW=lLxTIN1#OFW^fcYkF|JfW(0|7=SpkCmF|_cba?JTlsawcp}CQw2KPo=dUS3QrPtZgPv$;u zR=Mx9rT?D00Hu4R^q}Dhz-qTRt)q2n>dhK=l9V1aB{ff)%iVRh#FM7A?!C6<>1esm zz2BDRqO{({aLf?Sh?doq7j1B>D~R(!v##c}qD}6nrKI~ko89V3GIr6GE$(6|skCl! z_ee>l^-A{}QlrEgAbq}9aQ*@R4TU&a%=HjAj z+zqE|-GA3yR`d$@ep_-cs42SEU2}%km0$3n+wOkNmS&>V>Hgl97NfMyt;W~1bkAy4 z(GGW+Uur7KxmWw8%|+L_H~OWmMcwYZ{8Cp@pL@S8?Ym%A(SZB7Uur5Ebbs%ct}oi{ zmQU0E_Fb^QXs>&ZEgeAVMtAYcwC)4I@+$XgztmJT z)Kqk{`>0>Kz38>>3sO=$f2;djDXDG6zSx=CpL^l^i*9wVw56#Rez@rM?z{ZbzZTu* zJ|ZQ>a=ZJuU;1eDcK0LI#4>E=Uig6f2KU10TDt7Qe=B;UyGcr~G3zcoXx`-B;g`Nx zbin<*mPB6O>^|(59&qvD7r%tt1@5_L5vOYSTii`jdd7JaTKrbXCvT@ReZH3I%jff* zrVP@;{6Ku{HXmC+c+1?v)HPxFi@`r$zb^*HX1)J#DH2{>hdKP z7cl(%jgsFdZFKGw!%O8xc-}|TtPsT&jHm8Ys8&b!F zX`8%^kT6c_po@F%goj5IZZlp!%)Rm2ycqb4=e%MI%V(Ikt0o1b(>98EJUSIV9);gp zPHay}s(f2KnGj9GI8~yw{b-zF{_DImb&X1(YSwr({3CE3yV9nk7)={%9iwgTU&+0m zhmb~bTec9cZM>FjGd|?WhQiu#%fkFJ=|!nhE{!){ZTavTV*akAMRg!M4Z?~Cartovd9Xg*x4^RBb0wJHPQUUW`>BfST+jQ0lC zaUQFXM$9=#J;((ih+-R=x^~tG*L=ieLKxVK2O(9i$dxCbicP8gfym+K<=KUmq#-Pm z+D0*)T6$UQ7RdHUn)#Lh@hkiV>CtWCQ<{$>ueEr4OY+Je%_|L>4^tTCbC8dSu0;#z zQJL4dqXzLk4EEkAeT}wY0k#(>Gvl=nYu|Wn#)B*Wwf5FJ(mXmJ)-`RTGBzI0Fa}y< z7w;|*v$Y9gx7CCENjP(AJmKC?ou9itpnr7Br$eA>-xS(Ti)gOJC!) zd8u$+8TANe9jQXX{0z(Fc=^$Dq>$0@Foi#tet(5DVt$J>YW{@O^R1_j8LryEma6s2 zTjobYJU zEyOUAlCf$7N*u#D3U5iaFg;t+z-D@ORckj&ZHJ^SbK`hptQ7ys@vj2^CgI=d_*aX6 z^RPEG55Je--!ju?PP#mwb0SQWNEeut~`OJB}@eH2b6>l>a&btxml6ePB&O+AC+YiX5dG)xZ z&zo91L1!$|W-{~M5IJJ5n|EvcsJRifN%M|*2jWTdF-gB5PyKM-9r3-93nu?DmNd`L zdk<<$=Pv+N^XA`${L1-n0G=j5j+%k_pNJno%g@H|jNCfE-Z^YOJ^%CZ3_gN(Bz||~ ziTPiR-xvA){3W0SWN3xAGD`jmOY0ylBY zyl+7K{ z#0l){525|t3tyW6uK+(Bd2r#^F;m~gv-d?fgC`=~Z$BJ)X5pQ{L*7nRs-l#NI-za0 zq_vVxm$Y8eMoHUD=|x`!wbd7WE74}=UbHNB(p+>=y>rs6y@(WcAZ;@@T*P^N4brJm z%En1^??sO#rc1ufeEXs&@$3&#JKNSe7yl$t=agPt@6@5oygZY9|9iM z)+L!Pm9$aPmSnAS|0QpT)H;tMo$dVgl4x?a6RpE|<^7-8&h)x%Xt|`W3oRS#`jNh( z?$yA5ecc}9-&nUS)@D9X*ADJc4i7l@)GaY>&gbivI43ZhZ%np157oUDZ!Uco@Waki zb?*RGzdPGIayclWCTOTi7%=%8RzUppHCi$E?#s5=~|>2 z=bA;4qC2DcMPE(cDNo%Qebu7BB{I_2Vds`b-$|Y{Z^g4uVXl9Ze9ED&oiz6Va(DF0 ziz3Bs=39#r#fP2aizXJIG*2(8C_d(rs$(uWmNdUx#CiWK+UK0erFcWcNg_RI$}XLa zmM=qosz}jPXZEG_$X|3RIOZ(9w9ZU*8jv1~&_>;fHnGTFXUnA*74LO+NP0ceVTX6! zZgK9obV>0o&ZjS30my@wUQ>)4yqC5YKV_b{bcw-ROqJC7pI^EiwX_fQhP*uhoIS-% zr-H)|&$+SqXf(F?HN{ClZo{}vU;H?}+(3&lTWngJnYs8q#gzFE7Pmz&n0yb~aHMU9 zBRvKwT40VNJ!qandc2tF0`sg7sds7xTdiO_5qFL3-&rUUdDNOy`=Aw^j@Sb z=8Km#mE7&p!rUU9-wE0dBF`DwX=^W-+*;BiG((m!YFO#Zu0_AJKW*T{4&?cMMw@y5 zGS>3#j5axwxlg3D&A3Y=MVVOb(t(n@Wf!~6T()$$WG9}z5YKKw{+PRc>1&bpE?wg6 zjs45gHzQAJJm$V;X+0pfEqyy6uUZ5P>AY#_yYbX}mM$>Eu`e$r2fnrR!jfT!=j}(F zsS6$gXMO_s5$9Ku{vPQq=L{yQirGN%pu|4ap&y%DW%69`p4rAJ;-ouUj3YsLo!o`#77@8e5%DP zuSYy!S|q(1X(pPle_82$?!Nl7f&X^2Ip*A1e-QZZt6xxhMD7tZIuF!8ZjQt*n7pX8 z#d)Njn)O8eXJUsVKSSDPo~uuk9CzqXk2`;=hgWiF)2LI+N{3_7<#S4gV`WH>xwHev z+%uNfBb|=)sL1@$*xB`$qp#=FEv2+STS}8Mr%se_FC2Fom(Nco9ctWh=ZfX~Oc^M$*uUL)rnI-Fy(ktam>xu`VCq;HkV8vSbl0Ub2XMIO)(jope64f*SYG zipOzF@4G9gr$0fO0=9oCqs-vFT;yqK*RH&yYf4lM%Wry)8na`Bn=cXDCBCa^S0XDPfT;%JERy7=O z8;d$5WnYa&pPv6kO&RC7u3^O}i-e#7szO6iIu3h~Wz^NV6UFuHC<%|p$?Oy$k^5LR4 zAUz!U$m(~O9|oNtD?d_nboD38cbf05K3skjkXWR}{9*M2<+I(`nup3$Zt0pw%8!8$ zN8%}W-kR?KvUJT7;B1zZwkYLxt@(cWQ)u&K`H7-L3bAXH*5;(};balz|76j}*F25d zRg=FOzr~@P+~Rz84c@eq=;CnXYipvZTK7>vYTYN-B#NE*bI7-uKdw3E)(QQ$IJ{|| za(Qq3h*R81{aw6hP6;eItl~~XyRlO&$=xog-Dys1T;j9{uX1jB&U)MsUeyR*#b43b znyN3#H@2mQi}p9(naH^BY`iu#)%{T8wp1#9d`@?2YMfDV2G8zKW!xtkZ%G|-{tG>3 z+}}4|Sdxk-FW=_2m`RtvDb;4qx*Sm!+H;k$;_|lxvH@v};l1h>^NPzKDsM5oReeD8 zZl`-yRXyOZ1Uwnr-}qcA8N1=~=Ta^1^XcbP!!pJ;nemFJ#Fj?3q!Tg+XT z&ridr;D&LV`|-;khn4>P<*?`O*DwFI%Sd2Z`fit;-)WveEg`GZDfe0A?*{&s^iGqX zQHS0cM`4yPXUYhw#r#e36V{#+Z4=#LT4(CwbJtEWd)!NZ*S*HL=a=V0P`}X4rl8+K+)|-VkmvycyhP-nh07-u7)s+sp^irbRq* zi`?;Tk-NRgqK~eH_W?h#b~9f`o1KP{A)|#P(&KCCH=kbncKD-b*1}G@f0_QqXwEh3 zfDKPQp1xCN{7%@n-=+^B{cOBWI8f()a>gU&w>XQ?5`KT(Bjqjb=5@0xjyY9x;OWq^ zrlQ5Y;qv3fJIxK?#sP5bjmZN7Ip8uXYcW0RAW`O3>w54Wp~iK0uG?SH7QbuV*Cw{O zpIrC0ib+@leyXC%JTd>_ik;@W>o{KOV3ncuI2<{??&}pf(D~lBuGzAY7;MczQ|9b$nXL8={d72PGIH8lr$fATAH}J*^0Eq zbR#`!Zf}}idD7h9G^_GZoKkV0`$*Fxuk?=;&tEPL z)1qu&6=nPCC~MD-u8#pvv=!<3(JPTYDlH$EmQSK(4ZafbktsF!TEnfU)!>VNZ$o~D zd8n9wn*JalSD6nY?J)NuU17eB+6huyVTO@E1Noz7fBd21XU$vUKSKKY_}8%}()0uI z(dZb z;LqBWIFqjQ;z}HAU_eD&q_WS5&9#fs!{Seq@O8S5oN#oW3QjIHF|gKDarT~!6K691f%xkt&5lc7lIA46Mbf(^ zJ*sJfZGL+CrzUQVM$csW)VZxwwnm3%T{Y$GDTih;f5fK5|I{o^33q0*&4ZWosq5nR z#E-@QJDy5RPRvZyCN4=_mgq?ICI%9>C*G2HZ{ps>rxIUIOigY{zAAZ3^5e-LCI6T_ zz4(IS#^ToE!Q!_TzoYn5#h)v_eBu)mmz1n3X)Eb1`Ebd%Oa8OucO}WvIi)*FZ!EpF z^lhbIDt)ZUuehn=){1vke7E99lYT$RRHiDYR@PKrTDhk3s>*GZZ?61c<-b}ggO$fC ze^&X|%IM^h$&)6}o_x{d<&$rn{JzPbo&2TA4^RH)colJ5x@ZQZr@2l!htm zr(88<+mwMR{I=Ky*n7rTqF*+I^uWtrjr8f4)!|yz{+ah<-x+^X4F5&(UmV{JO5mGC zNqn=X4Bu%@!6&6nHFkQZn@V#QAZO$2Iy22__;$_d_(n|?Fi*o5XkLaL*|YHNsM%&Y zAS(e`4M-z)gD=OoWY*#fGEMky%zEq$Z!n8s>5N$y#{s!{g`{tnbWwtIJyCKl=!%yy zEiYSz^mNIeRkjZKT1o2#(p*Li;g;VLxVAqoEysK6NQ&5wN_tGv@2B1d$WJ8yY>K^~ zUcq#Zq)RIfBfqlZOGuUSKTjg0B^JXSv|B2Rk;W&VhO}}rpITXQ5%Mc579;JMOgeRp z{ZgxK&OePUmz~yyHaeE`r@jaI+A|10zv?9ORro`1=8`I6sF!qI6>CqNC2a&lYzFh? zGuVFGjCq*oIg(x?>BJHq{X4)iu?) z%d@@aTqj|+I{d=swMbn^U^@b!B;$Lk$)4u+T>!D zun>?pOZrymm22K2=|>HA=J92TIzaA$Uv=*ga~;~? z4Ns)4PB$PMkzy{KUgS3+b<7rLC-PTFdZm*`zRej#`f_JC(yN@kNUwHoKzfaH6WYH5 zDdqxSlfiv6XBg>rd_BfB|Aw!|xaNL*^~J?oLbo9On)7<3N1fa8)FVhScIS;qe~oXR zVC?wT30|R*G~ylv#Fcb{`*y%5B84=%cOtED--+}L_uYV3A$9R4z3~2rlnUV4(30r`P-2H?Gep?9Qh4D z(EJm~58=Hu;&~o3s#d|0Kq_;(TP%*FV3 zDLl9QZ*fy^=U`X%GSf5IlN+cR%w31Hv#ZP0cXqDm?b(*wKG>fb$o2ND%w@WIx105w z*=%!eZEk=~Hf7p3WVUB*Wqn^Co*BsGdb0hd;OU0W+(2)?;g5YJZ=Y%C@9*tjnalTe zW%ineJ$;#;PW)kwb(!{Tmszo)W=pQ8vv+sCW>s&0cRr}!l-)D1ymyaTJ(#N>7|3+& z$dcN8Z&%iA%H{_ec4d188hdv2b_neadpfdx90c3@_3Sh=fJgiB37ekn8wY!O&~tNN z)*Gm zPo_Itzz;k4joJKQ7des#syzdi4dh{eZxiMbs#e^sN>1Bw`V&?RFh%rdNZBb{>_cvh{2?RT-KXI zwrCy94P?os^}U@s2?dZVa(R(})-37DcJh%GJ2E}nvz;EBR_w@jTsLM-0sbp;+1)RFah$osw;!PArorQ*t4zIRx2m+-gqd{9<}U41TxIc zf|m9Dz#Ebo$wOg0MGI9?+JHOU+N$UXkS7)f)k3HJ4ar&v?UsJX12tsNK=a^0-{64v zxX9tAT%T&Ts&pQ_2cZ=d=Ay&^ih+SUs5OqSShMU+%VKasw*{`}43ht$XtW z+3pbrM0H1Myap?JyZd^3zyVl7+8p12u}iCpo^>3^b$J$$SerZ5FZlz6tX|0U*y{B&k`T77E$r}RGh*~B#^lLBrrpy8GmsnT%6h{l8Jh?&n)*Tz7SNiN*?ew$4~#_ru3QJbiuJc! zDTjdMP2;FKVzxk-1q#LLEEH1Oqd7EH0Q_wXFrrOCp}@WS=cW4Wl&Q31}cjdQPlkMt*%V5-g}-9N?jPFBz+~%wxHC0}s&U4IcANo97kDiIu&(d+e}T+}vji zqvInTP9ci1$p|B|#20pDfmW(k_Gfk@fH12dKxSojTLxxiRc=qVQveVljW0~z%j^K5 z{W{5;a^0L30yI0|oAceh{heF-GkvBr3%L{?c*ZlA^=+URMfz5;hJuDrCvRZZJFeT* zpXoqQsR3Ai6hvai<^6~YK}MDVq*rL|9qgx4bOulR5YyV%l^dW_q6T_-b_|=%cr8S8 z7|NEqv8!}iG6q@hxgA|xjMwD74;)95>K2<%{czN0_a9$I;bvu*BSBSd_;JXR;BxkuvRP+4&JDxvEy z1P$4m93--T8#EwqgN+q{O0c2p1$Z{h=m4KrfJoar|c5PXz(sge>^q1pDp8ZS?HePNHR9sy#jVD6L< zHX8|JJG#|?K(;D`unm1GZI@J@F8}h7b`{4it{XeK zQy|O2U70S^o$E2(nLP&4c^^VNtQ@o3yJ5;!^bW!kE$<)9?=agS@S1CfH_%*On^`Gr zf?jna%oYCFyvR^yPXM=h!duxJ8%u_e4Ow`Ko&kxIManhDHUZ4ihEC;KpM>U~75!Pn z+Vm4}TL#ELbGIOG?pY3^5w7=QMJX#>umcMZG!B6_V3$PK0oGaw045PDQN%Z71N6VX zW9J}d!Yi(ZXWfzO$Qx^)?LD9s z+bL4;V`z*4+aT~@SokAs&QJ$m(ZUCE7+qc8pao26IuM?UFws&ew zWW|m{2aRe2GZkI2{@ z^qji@p7etTFH5$fMoHRCva={M{>>}SFoo8+`{+F~EPOP5UWMP^*s)7M&sIPBpbEms zScUXStncs7?3LI94=I^SwdPl6LqRd=k+r?uhmf&a81vr##CV%_Uf9!`MYt(j8M0^4 z%23FAw$H8GDhPYJ}DtZT0a@?*bXSI`TQNZ*=_-6P6x%+jnt zpkQvelJyWM&hgv9j?1Bj5stpvq942_mlUo^i>4WRcJ zmN&r@>X(R$&srfi-V@*eHb1OdVzy*!SQufIhknq9=fR+{;Duv=>Gd{m$x$H%t9qDX zn+>5*>Oue^(v};zG|GECv{v3PGwk*1Y+xxieng1soBU8G{(vk&fx^|&E{xhk)|uj9 zyuG`@&RnmJ;S9Fid#s?#nL=-*#Ns3%Ns5*^Z-LZ7fEL;5GUyL3vdBl>0nnU zg>>6smwF=X6v3HqL`Z@7Uz#n{pGyRVYy}B;KH@QN;q9y6JZ)Qhp}|6-4=XJZ8EIeZ z)zz8|rl{YBZ+-p-yTQ>*c01f648KURFhjzq4Vr}|kbN$MG4zD8z`<-F$_$PcRB*iQ z(O_wY)s)?eVO;51bt|C(5*!WWx)CSyNNIUjrsukKIGRHA)ZfeC2j*x)e|8to6a0Cw z9wt=QQwgsNOM9-Tqic}%jasRjBCXfu`uZ^4vJGZ+&DLnFr3D*a*+Nf8FEQn@^Q91) z3)x&J&sY$SNrn(BA+#el>$Q`qWI=6-aFoSHk5WG47u3gzXllO_zbi^?HD|gyLUr{B z75j945Z3X;O6E#>4E5$Cm!lB7crcCi`Mo_I_A$u=dl$ocvpkECN!J+Ivj*q5+A#1w zJ77 zxYS41Ai-xRAv^>mzj=P*9p!k!ycd>+8%TL9kNY7(B9M8rEw_h9Pu8XJr=HDvpaHh0 z(J)a8=<2A^$lQ(r=VW?z12W8Jp`y&ZRS92Oq~4w*S?3&_zNuPLP{(UwCrvuWP@v5I z_}O_O$kRu5?kP*Av(pdI!f@T49kVJ#au~}PV2fmo8krSu)hhKcwOQ|c%#fU9!fxHr+c${SCRPkVKOtekX@0CvFf)6R|nYg??{ zN5H-2qiZ0>BiaHoW;31t5sj%c*bAmikErRu>a>6Csz3`zJkz)`Gmx>zV2yb!M{_{l zm0bx_&z-~VfmNrB_@~A^4`cYgT^f#E)xe!H(bEx+^$x;-=t8c!r+yn+seEFoDkYg0 z-TebwRM1u7#md;Q*lTR3#e3Lpv53hOMD}c04|0{GM1#FSxHyc-D$*L9X0Ql2L?iH0 z)@pg-NPz=XoTJ({GhixcC{K49SQHFMdqF;|m3dZ%^&LfR*p#`B3vcq0S;ii=*eE6w zv6pw;h%E^edTEw7%AwAx{@(7OB;0G_tqP+qMgTz;VQij#HueZ&pCg-jE-r0XXT56> zdLRrI(#PT;PuMP7jhp(hdq>{(_Q^9mRxijb-z)JG_>OfhPF92SVvKo|#SN4c6BZcA z@VPvvGN{R$FdM@)cBV(z#$7y%-MZCqe-4I1l{~b!Tcg}Yq#AI3o6g68$O}!doe^er z)+|5^;_@t{Lqis=06(paYB`tp=*1ybPiKMrdXpSlfPlr^;pWCD4mo-02X})2T$kO2 zbz5c^+y{NN9WaAEb|aop_a-FHPd+v`xo({r;UBM0AkTQ@!4L*ArX+=Vl3fraz! z0cE>Sf+3xC3#XjseWs8`k3=Xy52^?faql!Ch&m9g4@U4?0}t%3+I^_dBmVZOc4-we z+~a8RvqY+W^~P?kKnP7iJmb%{$HUN+(Jx8I@&p2JZpn*?V3cA~y@D=0Nu7X&Oux0n zLU>YQRK`Wf%X(c?F2cl2=;otYO)rTBp!Zk@PG@}4&Wo~##os$(_M2=&7k&XNGwjUg zv)t|Tft}egfc+pI-l3qOEHyxFm;}q@QG{6dNOCNAEIMq}Sk&06F=(7o76?)7;awx4Fl5*J%&xDH|4<5X$KfmqYd5zLT`WYEPEDSd3#OC0mB}LV~VQ zu%iUG!bD`vTdN@u!OjlgSZZqIzF5k1)ir%+{bJ$d*cf2iKoFOj+itiicI zAad>(7`$U`+tZ2TK|4%>geRf0a3@p-pKJ+(QUyb}q1Tsi%IXcvb1axA?&8Q4Vo7IL zm0E1vw!YWH1=69Ba4Wh@^;8t2v_T0u$m=&YRMI<7+AYjMmrp~xIMrG!Q*3P~NbW=k zHm|L3^aQhKuwa;#>Egw+q5Hi4o|KY5($bALxRLD;)_Hbd^c;+AJYq`5st(Q2Sk?Z7 zjjW`&kmm)bGgi_ebEBH)`b3&&KzJaC<0MGWcI;y05D+YfY3$4g2k(00Kn{xK6j#ga zlFymlP*_>K=&mpML7dbdT%44Cs9Rp1aLT&vg;k*`s_O-T&V5bAIZwgj)IPIj3qxYO5x%<|rW z9TG`#%~xx3-d+tZdkyyE-WK+o5TcB6E!3U>h}>Gy7r9i;3uSSf&3F@0D6Gcveq5~C zv8k6xB?xZrr!C=DE@KuUVrzKOI09D>AxYYncN{Qk~D60MZDC`i4+X zAc7(oqz2e3s94DQ{B;bzg;X7*E3okSFYDzgHS$SvpS3O`do+H(Yv3Z!SnV(!8?#^&*8#b2z%%q4>_{x&C9$E<{46~%k1ri z*RO|a^!CfzTQ?aMU^evPzJj>bb@r_aDTuR`6HFQwKLZP?4hjCkIvds(9KU#WYE710 zGmWYsm_IRgtksQYg-dTZ_X(~KvjvPA%!71m9}EOu?4^Zb#g1uTj+=U5ro1%3r^kY| z!pk@IY|7-XYsd8pwm=xrKd=G35~1aDg%A#rD*)LW?}jrMKIXwv?5AYy1@IAM(KaHK z!Uc%%cs-R?)KJMm-^(??7Y>{bWlX|)G zs_1ksp@dN8-oC93J8{b%@`Hn~13c~w$b{+i!X9!r zibBp1RX1xn0+wiZEChDh%08af>&isBAtU3Wn9J3Dr7Q>2!CJBuAs@K!-Gl}M^eVBZ zUs=6zi7hdkYs&P%JMh(v0p2~v>m;HYxFrpFAVju}{h>10@6D-MvPQDHyMDhxSU+@F_z>hcVkp&(*4uE89XZGfKI>gf*stvf$%MZ*37uMh*3$LDfTlvx~s0&^2ENJ0h?)1@Wtm0h- zX$aqQV;ir+o06~PfFcZ-vT8{ZmxEiYz!8VyWmz975&S)fKg*nKo%d zFLu}VO5>5R&_!S6C5agm2v>|?L2eDhFofT$+lZ64yjIJ5cHY8xgjMmts;X**D3&Yb zl>?Ch7B@o`TfJ-HUS58NRWlK>zZ(C>ts8Gw?k2cDx`DrpUh;h>dY;yP#RCJYBLd;@Xny zM6}JGD2H022Jq4%@7?rt`uDlfn>DGLQ|swnMpR^cJyTXBEUtkk@1i&NA$CpTFNao% zxx!0`vYAXO0tzgVaxAP{TC{-vU6_WRP78&U*o(WZI4uZHmxKg)>C%V~*^RNR#`yup z=@X#Ge|m46MpgKDrKD|GKEtl_QH^$p4{MVFgu%iu2D`ACf?^Y2`2kz7?;th;k??$M z;L4_;Hb7YHU!@Tl;~SC%5bo3XuRuun&@~Y79L5nx?ONu3G*08>O&wA-vK(N+cxBT^ zT6xz%7{p#N^XBqeW2QKVL7x^uW%!=`p^(A3-0i??F2<3pfls+kYVs=RH%ZT}$f z^fn&@h~4YJdEa2D9ZZRLmnCRQY2gY9TOrb~-qMf}fJ$owJlAbQV_A9h_W6yX!O=3T+*#v#f zYDA>>7W7ITc6^(%13P+gnE@|yas*nmP#GaODfh4C`m}6IiF7sdHnlwBU8$CJlWu{9 z-fN^J+7{>;PQQ~%YBhsBDx#6GZn(@=cEVfnZU9-cOn(XniPHgA(li-DeC9g2nP4rREkA_5a((QQDmgd6Fy zXqdlJQHrIs5P24=WiL**!iQsTf%n%*S%?d;E8Ds}Q@T-BJ2)fVVOC_ZK*K=D(kpqD zTizQB=pcMW2K$D3YA%aCyLSn@$g6$q$TzxzCq$2~K-gp*ulg~w5dz9zJ6l#qn{dT0 z+aKs-PWBS{VvD*GPy{Y=Db5Sy-twJz8W2b_wC4^1_k@FL5%u6fHdIR^*S?kVMxet2 z7zY$q1D*QPAg zRrn)0v5@4hlq3R^O3&b7`C2IOL5ZWb@*z%+SmctA`eG@9eO6KY1p~LV0&h(@w`Zin zMfDmo-FkLwR%Y7=w{z2*n^pl=b!^^EWue7BzZ=RcLO<)r&VE4*HEzc1LBi@R1}^v7*_WLm zVNCNj>CBTP>~r~1ArGNR4u91ekb%Mry-r|FNFR8mP?~kI)dcZ%iT+HtT=fowoHskY zj={JUJ91t2@*Z8Td=Ej6jwN{KDuopIg~B#r7dy*%8`31o~IwgJvMBH zTC2|?$>m)#Mxu9B66@-Q+diry}7qg5W*lkLFPS*LGReJg3LrXP4{FfV&b>JYiD zA%Z_*x9IOQlxw@R33gd3<3@x*8y1G?yUeUb1p+7`U$d$Zw#sfA;&Pw=v5`iI<@|Xe z*(7R_?g22%FLcNbiNMK<#=PC{uu{Pv3$dmFTfz1{cD65AOtY~sT(n_gh)AN{U&hs7 zY|7v&9E56M$7Xy6fOlHF9ZS+A#wEC`?32SfGzdT#+G50@{IOV{b1dt1&MphqjT7 zhASXutO$gjXAmt-$U5t08tf~12ni)<;f$$*@MXK*{9pty;QWynbh-6qgFBhE5g-X) z;8HDECSM~53$fNgZ*p^RoK;dJO;_`lk)22Z;5`c5Y~%K#>UmJ4{@AT-Z&4^Nd{ghb z>^2RD!ett*)wr##;Q~ir2mua$qQLg;zllm6X$9hEv68P+0_Ukph`Z14g3Gs1r$zEipi0GZq z9*DHR2WnPhM^@}If;`Vc5a{Ja#}ERw^Fo9K5g~mhLH72ruT1`aAl8QR%DA^}DGllH zz^^Q5P%A4?g~*7u?4W(7sK6QbV4cTZRCI~Wm7(jD2!Qp*W_Zty zK)I$#PDl$bm8DPbxQfH^q9GAB-Q_g+?38z4BwK(g(>kNUjw+wPhA5Fh_;^KI$h3xq zv4(aA9oJ>E6dUo5AdC9IY&@?c?ST?yC4A~uvT-gwnn z<_V~u^Y_;aAzI3I>Vd)tsP_g{oO^SiX09l6-KxwsCW~2yAW`K$M4QbcVvn$u% zt6Ldtgxf4~AB~nP^t@Upc_9%WtY$-NYe0$K=LsAd{bzm4|snv~>M0;UTU(( zHCSrf3n$+GEcOlh?dI1G?u2&3C+>#L&vctE{UNFAKr0}WO}ZmLAQ8haQG&hhKnCgE zdG7)L-TP}>b`jrd&q=`0Cj=}(miy;36ngzWN8WW#sxFteEV;L?Hy(=~7|;^Oo6qPTo> zu?CIprobti6(H0PBaMS_^e2bLYZy9E3N;z|jm8=k7f7z$1A9>|shHUR4YdvP=M*1j z9Ons`eMAYor!r0hiFx2(ybn2!(`+N|+l~3*#&O$o#~$;OAE!a9JvGz0qk;ZA4XHij zH5ubmj^j1;HZ;bm2gRda*&VMbOssXx*!Mf74APnwyq0qcl&6?03WpkXk9#ASGD-rm zFQR(}<8=tZAn$RtKwqUl=>#|pU|}nJtDxvKT|t?Kf&0m@eOWx z4fN1&%vJS&r?=g}K7enES4+y7uLiBk#cCNTFA-(XJ9$Sb$bo0rcfeeehXdfnDET;Z z6P{>C`wjTrj{0gykk=Mmo~~ThR$iL|&QA3>I}($bt{e>dCRIJ4Ba870mnMY9-@@4@ zg&jh(j*|48Y6d9L)%e#ZILQ+}!5OPD=8W)@>nt~{q&93s%WkyXg79@e!X2 z(s-)=%~X!V!&0C_Wiw5<2eY{zSSgD*_ySHor*o&W{g3qT$v|QM?0u%~BWuh#E2MXh z&KoVIqZ%U&X~~ohzf}RY3Bl85Md3&&Z^S_jr4&*oRnx-UFSJ#rLZ2$=0~}LXtHIo1 z_L`f34FR!F?@OH>QbSqF$sC)h;Zi}*Q)e2luWHZ`dZzMhkqdIF2H(in5uM7eH3%;# zmC)$fD?}2nTz|`S|@T1$zUYv9Ix&Z7QnqhfBiKKO28D1INl3yJylyn1`tzEt_Fl3WTMs z37nwOsKy^e=mQ?F zoJqWUX=$Qb1kdFybY%Y<&<7T8cuGT+myWRpe|CZ@)rnsQJ$>kvW=~}o?)D6i##QKJ z59sVfs6aO`V9Zvp?(flG$eS93ABB8uM&CK$Ce|SEGS~cX@vo6F<;?Y#QqKJ-UbX#i zv0ouGOrA5)8w2xI|69zhpqKj0(2?>(S^P(3rUtUpi~sP-Fet_$?#LP5T@SvimD+*v z^q^PTEjs8M@P~(P!Y^%#=iDgm)J8&g0HfMC21T@j42HvYR$U>rMJ??j!CDKfxE_gT zIMO~}eyio#UFhLDAIm2DY=hVaN=P;O4d{dxR*uGm0IMP#yjcCXcpY%lp>71FJ@`*) zZ3Ye0+CcV3aJ`u=JT0ScdQ=e~Z8@LjA5O@7bYfSbWqHS7be)i-r&AYr++RcM!PDlnvk> z7Z&{}VPhUvpZqjso-E#g1rVf1{JIyQjqjlfEWh|Q@0nBjH3Tl<8T32_{KL633+!?= zLcy6B=PFQ1T~Kd~cGElwq2A2IqKsa?+RB}Y%ry=c2-F%vXF@`#Ien7aFs)L3j*bnV zwE~7NV^Wkf^*Ec*XFDhg`-y<_qbLgbsu9v%p)rW+gvEMBnEnyeR~EMCOkw6K!yHpA z;KR~W+rmOh!XvSCyrk!q&Vq5A!&rjRSlBM9*T?$=vM>Xc3r|gDcmYMrXla{!>Zc0F zX8hLPycf>7;tV1V4|ic}Q#QgsPx0!j3uMTgIrj6OgqaES2D)%HWuA^;vnN=^1$tbfQkfJ*qySP;=%$Iulz8~%nF@-oH+Ie#@W2p- zox4XDN8WB1GoCpm_f+xd&~T#%>3E`PnhNJ^yddBTjFZ7UMVkD^H|+uGMV_E(;;Y7=-MeuF4VR9hK_R>FNBRP~JXk=N2MH)p zh*F?=r9ksa!HwXH#w3MYqtD)pv8aLg=kbaB9*;}^fAQi*KmHskJd~A@V;xP^jSxmg z6B@14WCqVEx4mbybR*Pe#wbAzo(apF_hcA$BmQRGsh%&C3=cyg^hR?9Oy2n84NG`{ zA&@SP;XM3zDhz?-1sDPtC2h0@di)-(8y=3)GK;@7UMQ?DUB$=mE-(h;tBhyS$7e=> z#T!Nd`6n{ss&x=VT|jZU;F%uJS9hRRHw74GkW2KYr`jgtzAHUk#+c2g#?1&Kz!=`d zIu(AiCA^P$s+L|IX(^=ClAIJGA`mr&X(Cf;iZaESS$Zg&oEj918)%S zN5!yEn>|>dpB^O8xADa{>|%MC6*$?EEE?NJc_R<|BM%l(*OMjzX-}Le#W3|%Oi!PX+w@eteg4TC;Qfr=Tz9LvF71Qfg5@}JV?qW#7Iox z^^%^`nVY4*@g8zG% z&*OY=c>fsd{|_?koJLIXE)fYHl2;>6YDHS;8O+qN-3yj}zTi;vm|2G7)YD0LiLwggr$~pd`4uAG}Mk_>1kLAXT8qLn|&c=AHyg)gKBRvxwK!U~G z-=S(k@Qms9+6D&}dhDo;&cj!slys^=QDV@6I zZ_W)y7RESgJaf5!pOqTkbli;eJe+x8tOn`zGbJT94kiqhI9=`9j5Jx8AIy~po?QM*N+g}2z0=e;8aK9~}>SEADM>cXiXf=hAP#(HPjSF@* z!%trX%E_J4t?>LA9#4s%Yoiqy5n~tZl!Yi*fSv*>gEqiWk+%^?7j#>908Lz@Co`or zROjtsLT6Ij&*_-c&bT8L3!o=GwLg82e^X7r{TZ><{%ZL_G;&0 zECrG^g=6Jtxg!{i#+*?fg6lz*@&bJoNXdoZ2ctzE+!GIvCUlq8oY?@4qqPe*dGrPv zC3YkpQpRPJjsdmU73ECfH9*kT3+zgxN@~HLvK(WD?O%_Z zdbJuR$%9qSD38GT%fnBNCC!uo;#pkb^_i-@ddHM&6zZ9teu&+ym?^qLJ@)j#;Le*$ zhh7xWD*}3wqI)cCZKhJ^!q0K{MQgmhBlV6vrnT1pjNp)eRNa)BW9o~k^|VR%uNX4~ zYco9*r@vAj%IV0^>+1oaQRLwUT?9qOb81v|BH4&v&xHodF1pWZyCUG3I-g?b!6(=S zkHYYBqQJSS#MZhz(;7Vmx9)klxq!806=-HwNr|IGu1VsgF9~?^2xY2CT zftd+2eNi^k#}d1lVZp0h18jVbhE;h5Q!sbrF_DL71!iHC@FuAm?Vu@e&;HRL&S-tC z72a&HR*wS>U@9^p*aWW~FivU5yitl69E94;VDPAvgcYseejQZ9YZKgV5OthJgGN(? zH~K_b3ZBD(oL3ttQ(+K<*Y@!=U8kuWE1cl;S|2ATS=2`ZH*@^$v^I(x)rs$)Tr3 z)DxOcx!(wP6pTA$&MRm7cMGfi+l40S-yTeCxKYV=bUEbRYJ`(nq<|p!%OlUx2lc zz5qUgzRY<12q=f@+qeYFLGpvGTeT(Bc}OO1d#jJ4RUz(m_~ix%-sU&vfkqUHs8-3MpMGsqsfG@cw*5FV)dP(?kXLSi-Gp*vwjsckrQ z#7-vAbaTN%U$W_lr|x|I=b9bS4D%<|BI z@r2ML@6@8indGHX6-o|MZ*YxeA}NaAuqnL3Q-O)a+|)8G<_d{zxIzmPOlleO6{r{9 zk}7`A=2dS!?~*sb5UPZq4nh@sWe_ga8#7$zTm}%N zHO%o=z`}Q}{Gc$k7_&p|)QhlqW3XZ|T()Xv0Amk*2rRfX>IBWZ(QZKI8=rUrlo-I3 z2zWJ@dmu#dC8#sL(iCJXgYllFJ+h1Ghi;gKU^58*|KKf(%ck;A2vUEWMD z!Cr{|cbP!->V43{nZVOQ8>GC7dA(lAwItW3s%x}j`onjn zMqk0Fk)UN`&`5K|{UYwRt2{8M21m~vdwuWk@*)Te?a)uJkr|;*W`I@06q+)>Jzl{* z>$gh}{rJBgYX01N&;Q<&PY$-3#J^pC^%YYW{O2u+w|(awFZ;LOU%oq1l)lC-D#cF* z|EA(!CH`gcFBz+Lob)wOq;90zIQUmuRP8!d>Bh(`QyMKw4?SAMCPR;+buLk7$&y5?mDm_=B<>|T6S!m}LCGgBm#4*ecN)w-0y7g75$BGvbbTgA% znB30f7jBWu-vdkzGP#qUdgzo4}obSyL*alf2JtzLJqxSZ0NF-T{1fhS;2LU;CdE3+<<>A_*aF0 zmk`0PnVeA6zm6F^cQdM*I6ab7asrx|aH6j!{A!l276x9+2dAa4MIn7{LekRMEXgyK zZvVg@PU7Lcm|Bc0eJufhaf?bw@vsxaXcKsf`Gm9}LIX*OB}|lzC@n1#cxlu)ZfV>& zso_{U7C~cR-2-gHNuqp+xe_KRz^jG8JvwE>mE=olyxMWgQ^QkbxWm(=|D+Zmz8L#M z^3aV!Oj5WA2xR!QiPe$x@N{&P9zLf^pO_A882fOtMCzDhCHtR^{s)+u%cM3|#7brt z%5)9SO%HvssM-)JG%Qq%3(;g~Nb*BN%)eUmujZq5+NO?7-oufk_uz5;9ik|@>ER`I zwDsDyQhyo}7y|oplXz-)A+r-eGoEiu4>!1ee&`_=O!r*}%ZTWwU00j)S z5u~SvZWE3vaYKJDnx%u{WGoMoy}RUMIr7#}#E7-YiP_i75M0NK$I5(nDV^sg43YbKaCu z^M>2V^w&Ygr@?eV0EgR%aayU^ll!%k`yu_)N+}i4GjiY?gxjC=@HLPc6gWz$fIgw# zO$}$F3669blOZPP>T5ut4PXWym%@W0bvH};Alp2t-QFU#PYV1=>769vDTo5}2N^BW z=D4LrVD`}C3H=c*d{EImh-xQ7T*F!78qV@@&`MQ;w5Eo0GNE&Yl{d)0^zdfOy3KYLpu5yps4bWPT~6w6YPfr%i4cNZYItXf ziAuGW64EF=9j)00nbKly&F0CX%JlFcM)*S1K&#O~dg#xk3HeD6@5KNhx-yK-RK1}W zhTdn+R<^$toG+rtp}euRzSczf9SO&L`|=52TDZ3R_K9^r|H85#PI&5-^FH_PU6J$zWE4+eyjBEBd! z{16a8C^4Z&F~f-}$sUuGE~F}ET(`7zVmy`}KAuPqKjx+(+Q4;OA9_kLA1{kT3yu>E z^?NMc76(svriOne(y+5C8h7Bd7>?ohPGl*G(WPB_~Ly67?6}qnPckk)n5G7wt;NE zdiM@|2s7JXjih=Y*H^t8pPB33U7g?2JJ{7(jlUYy-<8=bwO#T@DosKt0=72CY~r_! zt8+co_!|WHFj^L00qe}8ac02Bm&;do>fe^cS9Gdhp6%~Nd$04J-s%kgu1Yt)E7yVE zyR-PH9To@Z;(Y1l3dgj(v@WVM{6pc=yZmXs>aOgr42H?!fjapzo4LR-a~ii*<9mSF z^F8YF)fs7kFBMhed-H=}#K4Yf`MREgRwvwyW3C>b7VWHiFh5Y;o~_Q~V@+T^zL+W; ztj_dQ~aH;&C4SauNx=ntZheK*4)RpDov7{h(gQ@5&WS`{U_bW%JyjdfgU zOrKUIt#wHd6R|obnsZDQ@ffAlnvXk6t78u3FtzX9seOkm^e!| zN426zJ_PJA&YNKm6X`mF>e6-MdiUK8je+D>m4ZnyU?u`xr)s74i53q%C7v%wwM&5b zk`h=yXd6rb8a@VaNjxr=SHwE$!vCUQ>FZPE05r9UTvB(qDA&f6$+kWcn~y$0f|| zcZg|!47f?Fm@IIc6D95Uqm`TP62EqBy2a}p+#O8N6vxv0rzK$b_ou86rp2Z21Z=ns zYjr_CTTCo$E2m}uIrvHMpDUh!f2}lF__Fv!wukQrrv2w2$U>kMD@{*#)B6{u+a`h; zUNu%=h$7mwAsR5g+rNZ%8&Gx4Rb(EUG?W5>@ikIF1V9e}%;YB+#{pc!o?JL{`vg1H zu{XiFdCI1c7X8`m7GaK^#I#5}9xcU>a(t(aDoUuZv)MGgKg)cbFr^V`YCkp|K+sM} z2hk?I|EAK@;}c3#`}d~zwV+g`Oh(H@djBBgDUyiCV~Iqm8$syfo+jQH3pdQ(&_k4o zJvQ7Zi^mfvaPEL2-9{#0QD~I&v31l4vP5PE~@!wmm0)XRuaEM_i%lbj>qIjOD^+L`9bEiIhMN= z#)UGJk4!KwETaCOp@sx-dt_Q0T#=^+7q%1~$o$ZJQZ2EpBu3hg)c!jm`RTeug01Q} zi!dam5(nKyCr$mYOPn1q0j)!KdH;XN%lMGH5K?eJ9F|~rr=wgbZ*n}}zcrwAT z7_AyWk<6@?haU3EV3!LogN*|4CjuHzkC(WR1$l(Od$?wPOrE8=0MAq|AU-m0lo47k z(T<_putF9CICL9Xxc^=ZKAPTl3v!$R$nU-u7=0Kub|LcREr^oUrZTnvKBvMY;s@-XkM#roiC!WDa0t=nG4Qud+z4@nB;qv!)Q$Sh$p@XnfF2>xOYFGVdx`)6FbV}tFxJo9o2}c28gqdUrojtR=r~ukH*@; zzxja=$s#tvhh{@4+wq6mK$>9Dk2quf4>o==y)#Nt1uww<Kv+GTo2M1`RVbw3hbH5n&uLVx~%{+qLcY z2g*+~hhQxV{mWh6w(5@rm~W64HABlk{FGBQIav}5p`We0q?5fnUM{HUVMO_tRp<9-*`?X`LE0dGV_++{ZJ83D`zv6&)NC);` zMq^>DLs!la=NA2AZFnCM0yWg(vD%V^;R73M3?FcADb@gr6jv%0Dm_i&pCp`yRimy@ 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%0An#yj#N#!l?OiRN0uMO zgC7UQw?Vb6ftmF_9YV5i7)Du7WLa^~7bG0M6SDV$ZvZK}_zCkxPGPP}&Gq8mNf>dX zM@*@@#aq{KRR{(+^?FP|ad}au@Hxyh*=x^mvj8;>_cwE#u2`5p(?|_=;vTxZe*^Ul zc4wXA!(+fJ-10|(iG7b)Y=`U4xs&CvBp*~=VOlW+O>D4w3=DUT^MY^UH+PO00!}Zn z!PWPU2aZntrsK{a(SpYThfz=PpZL}9fjoh?;9Gpi^hSLzcqrMV&qB%gNnM%TxB((6 zO>QuUTzChfG__(ZoRE)e1m6ZtVI&>C1TY;ZCqkN;%CxSwD9wK9PqCi_wgu*^eyERp zl?>3DJupCKq!HhR89)}g)#G9rLr33@Sc{T=3V)Q-Uigjv&BaR{;xIIkv-oWYvJY5< z@EuwQtQgKIb*IC7Sb(R%sP40bleV~;^Cxr zOo2_uBls>LO*~w}cNr|jt3KN@ot5}aAj?WE=DjW=JZeaql2>>ujBlwoX@IdKLNY+c zQWr2)!qR@og4G#i!OkyNx1Z9oSfwBF-fUak zZZ;?E-5~Z;+>e3JXoSj2qW^g+vb>Y>Mmd;n=Om_De*g}J!!~#$+7J3bS+A)a{y)3h z=?FXgSKH8Ny86oBEL(?scZ|+=?_K6gF5U|+Dsz8&x4D-lL!$iWFVp;W0Toa1z_qV9 zem_KBO7~sp_h22yg(pKzWDW<%-p>Kj5$}t_|jYv^o4@Oc;4r76h7PF_v4rA zsB&Qt^}QYX{$YjT@}6$$RCvgn(~I3X;}*|g$+5NO^J2VuM?hJLS)jgeBL-1VfCi2n zYzLnW_Ih^N0EI6wXVdw%Emr(tJ-PXt8A~vkq@<3_-yVJNPUQ9x0gHVK9DUaUl-wq(H1#d08K&hPS7nj zp^plaP~=c<~*=lmB@q;M0!rBMrHVVuDFKSz>8XeL(n_2wZM&yO?j z;x7P!6{uT@{!6@z!>X&pFChre8}*RtYSLfXY9Ss_H?DwAYovH$c;5$r88?`Rp9VMB z4?oQ@u3pKy@I@xkH9n#EmU+5qTr$RWrUOJxc8yPt3D75dyyL<7fC|0=Rq1ZhK;>s# zHAZ$+l%pF=p<|c%g4YgE^dSr{gR2LyZV#PGbh*iHH(7||!YT+o6}+rsn1gq=Wpdnz zyTSzZOF(Uo(eD12K!x1Rl$WneM6feq()bO?;1wkw{91nT?JeL2zhS@>GFUi84Jb_b zdAz#8H1fs<+g$Gl01JMLNAY)fu&D>X#|!d^vRP?z#aEez@6cn|@CUpanSA78nta@( zh}{ZYO!KhVDaqMH@xK{`#V;&}NtEoRiG@4C0M^XKD9!)}MyDY;*VtOlanKsM_$V&uz2Wb6qq@jsnPc&8Q~^FJ_I zycINkuBj*g+zpVvMc=FT{J3%xf@rLGBWk|IcYPNq+{5y=U}_@hq9Vr%N295fymRm^ zE|Ki@$wYn!UF%pPRhVADu;B@yrR>)TaRrQ8Ng579JzsUV>|Joj_xx_zj5+;W9rDo6 z{t0;fBzbK|M`q*$TXwJy11PN57tXJqrgDU9`A%X=O92O+Up>qv^{Y|Wf%UE=oTgS( z7qyt<^|=NSG96I$tt=*GykTq=PRW zXPd(ptmsC271c+ZY_7g5nggi#=7h8g8L&a!F+ZD;h`f(2PbGi+gq;UfclzH#pH#Zv zr1ILSr;s4N1^qJW!M&6%`ei1F#^5rx7;e71&>9@xtWkNQ#=#!dN1^}481gUH<1zFk zP@O?OdEkw+U3`~M_3)G%#*+BX61xv2OY1GHsf`9tUqdo%nruI=xDR&aaL`EX|r&JnZh>cn6z25UY791mqs(9P&t0V zBn8fF!;g9rGK&T?OtvgtB2~2FBcCL3xlib+LY%(|)uXTRh;@qVvkirw~QW@6+RRas6U1`G8-ltxtMk zFSr8*(yy&k;M#%TB87}T!4R2fk>Oe3AHt&yg)dfw@?{V72w$#blk!Ar>2e`4`S1#8 zd-_G+xE$@XUlYc}27Fh1r_v6T;&P3k$Q6!*f!r{5U4-&uzwURSHTg9&(?fiTs{_Vv z#oAKVBkI{)MjTij2wJO8ueFtO^dkL!O_z$;^K*w<7* zWpWLLDT(Cvipd61T5Km9X~CBO8;5xH0vkXyIzq=7ivMP~~PjUNDNb zb|lP)q+X5G;qQ}JVAVJ+@OOmP1$LHwUmuyVIPoDKtB;&_j8 z6D{Vh4+dO*u?%nsyYjUQ|Hl^3<(;(ldleSc1t>o}26^h2D=@ew5ie*V5e?*AehDoK zNhLW_&S=LvzUDeUz~&^bkCO|!r0ys z^qAloC-h4Y(zf*8yCaw{=9w_Q7Vawf*17b9Rj!Wf`6FN^cq_P*YvW`?AT-OCEAA(d z5@gAI^r;(GvrNg~i7cT5`aM{<1F$(Po_ugjgi_8NpIoevY9&7o9LAk!(}!WNCsx6P zoeXBvNkHJDk3>v%@tH5i#)BMrlKK;UDJ0y4)nU0LO;wG1(LdpefVk0*#)taKc{xXT zT?x^-dY5te7GtPRmCBXFKM_@0o!iD%($>0-`aF3X+nnfS8gw5d-Qi~uC2IKR=QTbU9HfeiT6t)%jH!RaV3DYi1zDL>MM4crRVCmspuQM6Y~2K%UxNtOktIs z6BYp&&BdF^rKCpW5|l+a13{>0Fkby5tO+adbO77)Z}g1pay82Hk=@Q8TmNXWNgt|X zEbgZ}ZBsOd?eacLgAEm|C#i{pk$QFvT6+XsfIv!*#)3`ublw=El z?FGWZG``b06V*wp56*94yHo%2K$AX7`NKCo1a${cqqFS7*xr!7>Ac*|6EVsu?f|nx zRIl=iz;N+pDEKxi@6JQ29dXjd*PZhIuh|69y|K*~@q(cX?g88=#sS?MhB-062}KE? zA`{Jci*y$5^LW1n5yL+w(6=cp$8(D}fa1_Oi1NfkLiqrRuNN{ZxSlRUVH`gtgIJu? z`<>*^8AA0V;Dk|OSO?4-a2#7$>~|5{@h{Y-kGAFV4p{DYMH~Gs7#QwhCa;netL3nJ z<7>VRE=h=A1h;4+NMTT^^oy^886P|2A(1gYom0sK*|mEf7Ma{?-AmIGz6>F4qc}Pb zcd(52ydIdw1(H~%f#>weTl?*KZ4d94d6UAP zQ2rx>lIE)QNIZ)JG3Y13*fXIRomYu{+{u6J8G*x-UffXE?P& z`gTMob;|WB7)FkYqS>7mCw#b+iaQ;IvhF6)k8aE0_%5-zF26r!@6r~+755OsO0Iwx zxgNHz%cCa&#u3+ngSCvqwvYMgc)k5XyQU@UH4P&+2VH>XjH|H1=fP0U|C3l((|MXx zOuOhPegPqsk5KAe!1scmhou{E2ALkD0GTeF8P|!xBhi&%I5_wclO~`80!N1-{40dP zB0`udk&u3bSRvcT&%%6X4&dOv3O8eed88p{-9ZB?H;m-tvQtZTjv=DFoN4(=f-m$( zhp^rtOZ9;o&A{clKZw5RN>Kco_Gc`L8?+*qAO^&!heAKt9{vTw(X?w9fRNO4xN;8W zMkWIOV$U67>1=&1s-;;&ZnBaan^J7(Wl|z8qqE0xyfgI=AzU*D8Wg$Rp=Qkl4`qdX7~flcCzW=Fr`; z{Wp9egN-bh{|P3cX5`~CQB6vtY7aLHF{UaF&dh|bAX4j6bM)qw<}ZbOaWdd>i@+58 z*aCzR-eq0aM64PD#Pkz<9wQT_$F=0Lbe+w|NSgKOTdq19HuqIvj)i7ZP2mgP?%o4@muS8kP2QU&v3!Dt0X%BbAmalrEr{ z0xroflZgf0jFkNc9B*MdT6BdFK@XA|3iI^Zrn@k%t4qO1`*Wh4({Yg`KE};v&#C8F zJTo#E2V5sXJ0#-kBU9`hOsWkMSuyyJK1Lep!}4R~>PCEr)N)zYI@hwwDW`G)0x6Vy zP*Qk?yf}D^=A54>%dMDUFGpcvN5d-U#}E;s`PGxl6%xz?jiFbND7U~2@-3Jj(XErc zCErrIlGKXAigdWupTa5iSvm(Rb>b))3dSa5eZZKfp7=esi)GG`opgF^NQ<(aMQ+hUF|3IhsBM-=Ed`S=JLO;_Jg)=8rT~4FW%h0 zbs${3sjGd})^(dUu0NvxqT_;d`!_FMw_w5A{nqcd|Gb6!?At%Lcj1iDnQh%Xu<^Y9 zDEDLgal9N=jz9iewR{EtzyG3deu6;^*iGxPn4&lj|Ew!+xs`K4>oMveAeRW#~-({yLWo~(j^V4MHdz~^%Vy$+SFe> zyT5;+1_eYm7yAIRc>37`16%s$%(>u#3wkctrzZ%{nlo?V!i96z9DC%PmN8f*syrkK>vjUv*sYt<_Ae{*|c_`zx}+m1MAOTJbexklfuf{ zEn7BS)Exm7iL_`Ad5ofVO=Y0JIM5yT7f~C<5+}@h$#F<2wuf6c_q9jF5Nnw^f9Joa2N(*anC693+yNoE7xw^1V!0HB4=9Y zQDlyTs_YRTB9Y?OjRXC2mQlZID51pbgUuU?Wf7O9B64eQKROuLbGdB}ApfnKYjWvo zKWsB(ym7-GvAk@f0*@wg*5)AW-%}zAJc`J%=Wg7xWlxC|6}X0oD6!Q@5tmh?jc2w~ z+)(B@WwD=P>+r49mxy+kw6T5V#tUgP+R@aH-_l-EjH;?oUEO$Qq^UJ+qolB7=UCF; zTF%z5E%xu4v4fEMe}|vye0I;yvi=ME*KZx@hp||>c2lu`)+mV;+o4{fi~lDw5}wA$ zti&B_sC~o6;@WkaU=+lRb@vz7uiZk!IqRbS;;bbdGcH_l03OQ^s5U156Ej6VE-C9t z+5U~PMq7g7#sPFU{%j~>S&3#>TQW7CqmY+vUTa&u0%)tQX^6YPU4Qn*O&j|9HU}H} z{n>NQ>n|49o>gN({`Ul>`IWTNHW3lQE?BW3bBY6N*Pq*sK6ZT#BNe@bw8>;;(;1^) zB&yu&NuSc*j;`~-V-G*D&UU;RgwJOuzu(*i^Dz$O$A>rJInZy+jA3J*$L|UZ>Sr7~ z5JEfX!kNAA!RgBRh&%pRV}2%gKA9PZ9Df+b8fHAgSLBg);HF?5f$5CeIeK6mXV9;zzq~$WzFhy=de1yA@86U6Ki9vAn3#7to@sfuc@yv@v`)M? znnOIopD6LC%JXgBi=gvPiGL4bQs!2?r_5KpyS$WnN}fNJ)L#P9Gk?Id(fmtdX2*$p zSe)=@$n#P>J#)9je@$Y3CeK)c@h2rn{}FkglO%^D$*(7y%zi0ycpRQh=91LrRFio? zo;wkfGUL*uzb<`D+A|NO$;0pExvpVVgJ(`_T-}&5H#L&}R~t$5+jyqT6XO{3t)_>X zJo9q%s)m$V-olta=Lj>kwV~BBeXW<*=gdWuj+^9}zfF2}(j=3gl9=L|gQiec$4w#p zF*69?HuLiOspg)JJ3FSD`dN2&G?^1-EtoacoImRf;ZJXKI;L*JS#DO zMNG=9noUXGFV7$1>6vAnEbnJJ$-^HCm)AF8Z1m@@CbL)ff?1wf(akazyIHzx<$0Gp zAC~9OEOeuZbFnKYM>Z<)*ZtLHNQR(akh&mYQjuX$fjg4#UR*O~IXQl3xEW8J0a|9KvG zo8QoyGUv=cCY>@xc@E*}nfvCG=9GQN;evhm9?JV=^8SQ8UzF!-^33c@nA7(qKkt+838Hk#S{e-<@(?*6Q)3-@PD z-Hi9C<}(uW$Ni}%moH#l{0vXeH1_g2O`ezZQdWQNWqlF@o`#ke$yywgd5;OjQRSh{a`v9gMACJFCq^o%JavI$lKA2S(|TL%zPhP%o07bm?fIHgwK8DdAvL~ z%k#Z>qOO+^@^?$9rOwi`pl{7f8Pm6vsh2OMoNr!A`k#~Mx@CVoz%y4a6PYaM(_c=l zzI!<}Ie8#s?mY1713mMAJimS5m+=0Ay#G?3uSiVGL9Zcx?}M&Bu+c0yh!Q&tPw4qU zr11WOSh`0KqJ)2dnCWKYisM!^nc)=+W;L1l2eWm2>0q{we;oWG;Ik`Vtfw7RYe>6) z8J6!R;%4l6yz{^D1{Zq6dZtXfgpReL84@}Vp$SOqFn5B=#RwVfvzsqz*B~?zp@kB< zMM6#H5DDEYp}biwp|6;yu&J`uoFutFi_k5iAPiv$AwZagkOYV_CIL}V2+1W}2uZj% zAw;o~ic~ALpopMo1t+X?rHZ1~0a2U^)B#Z}QOhH06^A}bwf6n4wf8yqB*8v?e!oB7 z_m4MxSa*Ndp7&mR?X`z<&T&CC)GX*rplnzMYZM^;0MwW2Xq})054TbsT_qvA08PNV z(yx*n`T-GcxNa4{JfN;X`vpxAbQj)1&8>8yguENa@tk`#P!yhS$r8Vi_&rMV#P4#6 z_b8nw=vttS^f+BCXq)&wf!5+wZWr`4)d_k8D1)A%kf7JZ?-^Nbc4k$QR3y6c#&=qzl(t;0PPS|?_H0OFVXFSZigSEy97N1 z6h$x7eS)4AzgOrF7WezB$gL~AM$d`gyW;mJdO^@9f)3GPLH`u=7JVQnK58i4Mn~xr zNu>uy{cX4=drHbV0)9j27=0}vCjo7w4}mzpa}lyD{gph}g!6MQnClP)TjUk*)jDQkiwOwG;Hi8$MnFaR;JM5F=t^cjEm_5PH9X(xR=Ka zgnLy?4(L@etU<>64*M5~sOP=yIVANgQ{L&})*$qYbYY_pM2j;J#PfPbC$>{Z>+ml}~F^ zyCI!*pegj5)IO9?Tj8F!c39esyDjO1;l4FJ7gU$?9`F_I7W$-wr@gn6e9IHv_TA{xdx>e|%LLU?QtkBnl zzSAWRak-p2O)m}a#$_Ib7Y!*|*R3ynH+17x-PWzygh`={?$f*}G`xEmXj%6KpyBS- zpqsjfK=1E95+p9me4$*6NSzeTIu633&g!y+{?thQ`}ABeooxAeafQk7M_D8_03ybFSJ?c8rsNpuQnXK$C~yO%c>-NLO5F{q^8WK*tVw+Lxv-9)4Zi!A#cAEk0jNXOzU> zi_!Wnn_}{Tx;SVo&{cx=`)`cFOKRyhgKmw%OPHt&FS}{K|Dl+vK${JEF$R~k>D4~k z?_kUvppOKdP@l%&z94(xZ(r1@m<3poKgo-D%<=z3?p|8mU!!E-VxUt7o#k7K`7fE5 z^9XsCuMX?40_IY zEAC_08}u6TgC-ZWpN{(OgsrjJ_ptER`pnVkbpFnCi8*~LwZ@SZ<&Hm3Qiyjix zLOcEW)Sr$C(zO*4Ko0w(_J|+n#^|Xw=!E|}#M6KKqfVd>*$(;)A*It%hW!cu@OxAQ zCB}NxVES0{TSwbtd#WMi&E=>k6sM9y103`n<WO>B*l=!)lU9njz zkKQnTocnNUfi09tC;XiIaJtDL&V2;!2I6mFy%ak{jih+qxB~hpcBC3b&lvQ1Y(8xL zJU&!4BXtb*5Tqq!42^aCS`o5bBVVt$DQYZj7t}(71*MPVR9a}Ppd$uN7Bo9w`>l+d zj(EESt*0yEN`V?=$FGGp#N}g^v(KQL;|hU3Gw4o1Ge>hOx@2Q%i6AW@V`;U6D%3c7 z&!B^G)oMI>$8fy$^ghr8TC0)o`?wYAY`Vqx#l}OY(!Cmq&N`c(F(F6Cmm=g5gC@tf zBIHK~O^?5mCejZE&5K{7CX#Qg)PA=o zysT!^T0!e&^q10ZgC0vbtjg$BgZ3v(q%!(O(0=t!LOzgp5~s3Xy`NBuklPCwaVs4M zdO*;A%1_Lva(dXH@q(T)Xma8SRZa&T)QY!D9ye%OVk^y~QyTfI6F*hwk#Dl(Cpz*x zcH(b;R72vo@Y8?$qpnE&QO&0wI;3L13uv7|>~|sEC`k9_MRc1(=yINHaI+2)VRSV)$pGq8LEp^cM zh!=E_KdBXKYyG!BDkCY^TJE4;N%__a2jwN@Q>}w03hE-|JfS#;TFN(wbEu zk=`@tE9Blt-xy>im#S5iK84G&-q$I)kXFgb0i(gAv_Ti7EV99y(Y1eF{747xdCBjh;$jG^xx+tw5!MwD!J&E*8`xdhiO|3gM7jd^=LNSy#{% z20f5^3(y9G-cH?Vt)ujE2}%Ez8Uk8i(3h#ZtShNr&?fp<>U}^@8o#)--PSKDbFPk; zp0?Mziar*k%knEqo~Qk8N())PqUi?RpZ1Y;4fU9>{hml`vVKjI&e!P0v`?&Ssm7p# zKpV+-f%ZF|cFMYrrWy2Q+PBtbT5FI>Z?bOSEi?RWq8{nntS!{TpnmB;0?jrkH~kaq zM!Hdu9uM27Mf-{EwvB$<#_wJSjl~Y*9*umJ=?R{j=%Aqe#CGycbbJBlzMt4KzL~~f zq!Ew5o9PNcx?OIj?SeS>R``9Qk?*DS5uWYzjX^weZlU;#IhFOkH_}`2roc&pT4em) zN^6ZDkH1^#ltDcHZl$b+I^MDLQuSL}EvUu!ReB-bA-C1|@mTpS9W*EYx6zXZU6C=?vxD9+==zL_KqRVnz3=vnV$V+M zVi33BPRcdt_ZjB^EzpQw%$Vc3osKLf{I$^A8S{WXGU$_xe7r+xxF~RL!4aN2X_`iu z8*4mwQH_H_p1bK*jbQJt_Uxj)4r;|4U|uzdt>53#H-cJdO{eYZUYcITxv!^noqq1Q zk7^urm%5)e2--)#?sS44ppOk=JNY3R8jyH0{(etm9n^{^t*1C>qvsJSbI^^RKTy3! zz6Ux@#Pg$98T6E(+nkWC@O#QZw|gF^BPOJ;bE(=(rwmHze6MFO`Ibmoe3_jKu^*mm z&>%qz1ns9O5^tlREi|k1!-)5tAT6y=auWF4pKwLziTnhd{OwQJ*my)FYjrYlB+(87G}e6u0~zNmVmsi}N|pGn8V`k5Pf99T2FPW=V3B>&U% zI!)5ZH?hk^I!Fry?U$9}L25AQDSsgyqK^#Xwag*%i1D$WW^`ecDoFR=AsV3lki%H` zO%kMa)?upA$j5sEf2MDokoiFKYq*?TvaLY-9F*vNgQkml1Ixe5R(g{@6Z2-hk9F2t zxb7(Nd>?lyq_-&3pl?v4w`jCM-mZ*h8psfat5cH5i#e!ZkXs)2+ z22}|9&Y%@tGrVt6a=k9uD)Ad_(0W1a!!}=!ZaoolzWAL`jNYb~L+r;bkxxfxw;w2W>#e_^`zD?dVpjj?#ER`xUQ6k5X0x`@tF&v`digzoT?Y&)m~Z_e08Tl6by??&kqj8C21|0%(^(YrEF~VPl7L@ZHjV70`5p zc6VP3w9%lKyI%wJhCv^9-vZR7nd8}IVRt69O_Bd)_}OSS&_{x}kJxJds|y|So^YYJ zy&t>KG4CfX^r81N7dq+v+=agIo^m0I`pQ8(`oD1ykN&?qh)4f_Q>Igg#HjBmPmq?0 z(=-8y_Y$~9r)i!+T%&(by^iP0>d`god%8-H);-_TE(aa*{y+yE^tSg$8hr^DfI}Yh zlDf@7A9^k2yVUkO>Gi7F4*J3yt@b&HqI_!F8Xc1B7ptx?i0c=pHXFqCi&yoR>5wdu ziRv~%TWEJ&la;8le$IZIXmpQ|m82dNqSkJRQ1qWjr#b0PO0i|260)^)sKR-?BWrA{Mjo$8}W*7Ocb8U7e8L{6-43f z7Y6Z)uZK!+Va%m|CaR|@bI{9CnX1M?hogF{4GwxYs;|1wL4S=Jpk8p$=XmMx`wsdx zYOwm&K@^>%l7Auj`5x*S8=b2L7{vNBS4}dAcV=_de1rD(Oh(9hgI?-65q?)0^j6O~ zK(`sx+A{+o_Zaj=&u&1R8;`0^Kg)NaY@lI|-$bB12h9N*?w}<=BOJ5_XrzN~0LpjJ z?|?=*=sBR#4tfh{jD!9LG}b{;XXQuZK_64jOdx*St}b;h&;$n+0-f!kQlN2b$@i-vG^W&`uycePG(<_ds(T^a4<+gWd)zbI@l%By|sD3brWpJ6wSf@+IGPqpj7{oGIqox|fGPpu5GKgicRy7;MGFYds zGl*rdUfpXD%iv12&mfk;kUC}%%V1djw?Qm}4JzqMT^5$XMm4}7mcdo3z#x{vCUt>9 zEQ6~Re?^yDo@KCEZ7_&s@Dg>WK`eups;3QN8C;{@Hi%{LGIh!zmcgGZ|9YJ!%i!gz zw?Qm}Yt=Y|SO!~Exj`(0zfda-Vi~+btv85eaGmiY?gO2pxN_VN~t94n9^uCVnRzEZ7V|3jvm2c2#guF-1G$^(Y+D0ugs7Ifzbg%lk zK{WH9yw5m@&J){Qzip!!c+=oO@V75=V zyiXzg*oV>eZ4jSfM*QyRvoJb>cK0b&5yWSh4vKm~@-t}ywYvNc0zGW!7j>{tRrK#& z=xVjwLGK}zKRD=DK!M*A>LF;{g%eoP0 zkMZO7+^dcl#O=9PoiZW6%gR7V9Ju0dy{sGes$7HED%q>%8x-3&!LwJ@3p%0rjCQZu zY)~amUZ282x0G7(iS5&>vq5~e`$sk0AU>mgMim;w=djPJGK2Uu_c>K*5TD;Zuhs}^ zp>ch0iQcD<89zSF-LFm=#4_=sYPeSC&NA_$%KVK+ECnyAHynhOzB=xptJN!N=|&xr zW#U!k+r+4aX7?T8c~un(I-yuXUQ@Fj)C#n8vyR6S^151Z1EclyW1n+8ud6OMYCo2j zKdAwN*3-p(TY>H}ek?r))gA{ei$185x9WH-J%^Nhx&dj{^qmT{QvBA_B}nCvx=K(B zUEMdI4lCa_j@Lq41eug& z(MQw>jeL3VJE|6FgfutMQPp7l%KE(!{hr$3__fk|YLD?_`}&wVVi2Eq98;$Zx+LXD z^fBeTh4b4&>-vSPV`_sz*8#n+9um}o-QIlqi^|-=AzSERpZBBxq81snr{DY0t!mFs z?e{X!hst}WM#uWK(qB~%gTCsw(Q`tLHYlP0iRh12l|h+6pQ!DEbnAYmjtk-zY$d!l z`7TaV@3{O;busAnjMLG7Q@IB9^hd?~O_e(+KIU`vhDO+FON;qJePqzOPIswOs_Je@ z6FKD5m#U@>`h|m9;dh&ZhQxfOp4JHM(n?>e*Bvw@<{S0CK|A|bMgLuWRrx zk{|8tKOyF{>a3B}?|U`ILC4h(szFc-r3~0g|5Ta3<9IF9XFxvvsMZ-YLeMYo)oB(Z zpg(QQDMb>tz99s}}NBOcc1 zWgxHhl0okSMOpKI&wiWe)PN={+A4ZPhxBH*;-yTl3)21Pv)*;k>=?iGjiCL+yM=Mq z>OXM2{lvS4c+0B%?T_l6eV2-$VcGLy;;n;^vL~mRPYKq?f=(z7nP4q?jQvh14w+~j zH)y$kjY_gUG-z7(8kKCF5VW4AWiNn7uONA|jy zOzS?4{7+<0#kY$08NV0Mp1rJ(4EiwpnwZ{J`jebP3;iv7b4*`rvml*cKkG(=IKO_@ zc0pR3_Ol)oq-)gA+9zm>FKyt>G5xGbPjQ;-so%ig0>wO|(LZDEj_Gf85!6D%2bQV< z)^0(YXy(8NVg^`ipXHD(bkV>+#AI7{2--r+20j@x(3<@m`)#312R;`w$eQ-NM!z1o z%Nk;Z1!>Jb#9Cz#x7iTuH-dCIhgi*mbej#aZgl+aju~Rzr;(g`*=x8#Ka`XDt$>N5F7vmq9E`Bdi|{;`)uW)JvR-uKP&KD@fON zq&2b)Dt6F^F(a)i9na6_9r@NegZN}5-x_>C()9DmNWQh*AU+EjW$o5T@hQeAYo9@n zbZ({5)*B9b&NId;dYMycp$i6m7&F#-(xA|wRvKsJzM}os!*9IxoDmOd(ihWldOiHG?;E`O4EqNR|EgR)eCb-N%vawc254C0Y9 z**YSqg$j|wWNYa`PDQ6V*=i8PJ?8gKwyx5M79nJj)#FVL*#eZ}E3&Q-r2BTNwb?-% zXsUIep#8*q@Fmvjw>aJjbw_p|Uy1dqp!Ia);B4PHR{GoQx1R18Jlr?k8sVVPK;;fP z+c(3ichFSdEbAqM?jPL8S87c=!l|^-6NBgY%B-bFHF|CEg}%8~`nwt(A3PQ4s36^& z^R15zV%eQ?SQE%(j025W>fu*-c5ta5|;`LFU_WNmi*uJbLlvW`hS zSOPcs7FiPwTJGQBtFX!q;x_y5eCt0c^(bPjV@PY$z5=$Kq~ zyQ${iEWVS(SLfT2E)`#<7Bz|6O^*pjQ+Jq-ZoC}{v*gzj{s&MCcbU0V+KnsEaJy61 z`E~{$Z>O zMsVD|LUn4R#61DjGU;nRbCkrjh-=}YRl?yEEP7Dfx^{Q~(@FCO;cKdUe|kR-uigJS zr_V@^H4s$MFo#++7H$u*uPq5Hve~U^q43#l(F}3xy8I_$7AA2z9b59>b53>QSeokA z&^hjt+}&xWjpC5qKrQMm?rfoz!dWhEoz5k~x!lEhL^zKNr=$Ci!apE%c(+J-+#%iL zQJ3)F*URlYZ8Voz%jA}HPTyVAh48f{Q>Uz{o6q6xai`sU50#%Au&G7M9F9d>(5fCh z@4~*37Pj!b3v={X&?UT4V%_4Rnxk`Z`|2|5klOumXHMn=SCw3gFl(2}n?ZnqBaw$QjniawW79HAC{D;#YR=@hhOXiebosY2Op8MnJ6 zdaQLUiM9sa<&5Y7epZiDP7=$3sYUsci{|K(EY0FDx;%5mccD;SHr?{tcb{sp0K_p6fHTaK?K&watZ6+S-$rbyRayLGMqw{-U;PDjtqT?xBH?3 zjuoL6RSW0;O!MoR)SbR|KP_oS+R&nX;CPI!qWOA$pV5QMv$l|_c5BI5F1@4On(xj< z^YvOoTT^b|=`JhOJ-W3eqkRVyagGtUw$Bv}75*rpx+Tva%yP0t0Plcu6|33ULz_b3R@V}TQ;kN+)CQ}Li7f>Po7lT)f-zj)P zV+ww!;s3dKx5K&kok4T(CHuM5i};l5YKwR5HwoPanx%G#`yQbW3w>PZvqBFDJtXuU z(6Q7Cnoq;%i=5^DlUCHwm3}`l=aA4ZCCnk}H1u-+A?h`h?|AZU@k5j|v=who;8puQ z#B1;r;uFAoh*#iUiEmFmE-9oC-~N1@#tq%(Pa(c_^ep%f_)ik=`kuDRhJIu{Ocx-v zleBPXsX9q}dosN}V=CU3v98l=2w5Y(%|j3STP)_ZSiIA`LvlZDtsnY{brNZE3fB!S z1l>6_3n}mo^pnIl&rcHHVn0cId;KKw4fB)uoKP#ZSic{-LbX^u{YQ{yKmRfR-X#%+JvX=`3^qbSb(Qe3)I1(1uDhEb>Uj1#Xe3P>v8Jo z?-tvO_*}A==hV=%VtaYM8`?KkdARNeP}=O+FUiWyjZGoGca}o@9P0s!$=wQ?lA9l! zjgaTX&Jo`OG$eN_!tfKU@0b$u^Q$Su&#m?%KGRGgK1uCGd}`T?_*}CW@tI{Wyb0=7 zP(IrnhBRC8EMzTGdq+y>_gt16vc?Gi9qNZW<^`VPY1hRTc$WLGi_NAxa}TSa^+N8g zsMkXO-Qe)u=xnKDGaVfI6yChBCvl!9TlzX(_&t#Fo3RhmpkZmTy%guz6%^%E!-kcr zuBvcYD^*B~byXL_-BmRVdpC9^%8+JtRYm>}V!NvC!?IL1$HKcCc8mKt&}Ipftv(ob z5@BW|WQ&I-EnDunW-ETu>}pTHJWt%!p247F6!*&*H7u_bshyoyh>(0gw!m{vUPjz7 zDf4M-LEb0UCZwDlx5-oOUlzSh+&e(o&72acMTz=lUMropuFng^owjbtTMoJ_Zz4E* z@Ipe;7WM=BPgoU!mqm z%N#=ZC*sCPdHf!JuS2V(aMF`9;!jAq>xg4Wx&MfDaVeg{5ubu{-iUAFf>zClnD`2H z$%y5C<=r?U7w(%!9Pr5e@OfUJe|k1m30tkQ2jV!Yy3$%mH34>ThiH~V*5T3 zze9B&`AqyA#p7rWcA?i`TwgHqF4T_4*J-N~Zoj8?WRvChTmpL9Iykf&ILGmIYL^j(<6%$x>_;$Or?Ll{8YmjFF(!D z)k@DlH{rC^E5B5gc*p189K-D}8&6Tr!iUtlT4ni#beiVF_q0`&zc68r#GNB?nG--5 zmZG4#Hh*jUFlfK^3B#%I3dNWWo*|dE0HzoHs~lGgZFs&*^1NF1EWq^+tlGvrK-jI;iztEoBC4RKf(?9 z9F>=N+R7VUoap!Pn?mLwg|V1HSc7pte(0S;e5O4|-n_C>o&}ggV@9*)VI4R}G3jk@lXrxJlFn&sO{ZHDx!q>RY*KfP=9@G;yRC%p8;L8e zS4JNLJ%%(_(nq5|Ox%XExjsJDIS5H#jNa(k;f)%D`N*3NiW@tagSM$2V?IxO*n9RE ze%gX1=K%4|{R2|R15`04G3fxUMED(Q!p2K5VYfbRokkl+QaVJX1})FHo07Jv zFLG{63R*qK-JPVOZXWSKl0QoH49f5*(rFoY9CX9D|4OQ`wvYQFsjGKZ=fdRE$T4JP zM}0D`B6&c|V=72JK%qv>yDgC#*{Gqb0Ya zUOXO8tA1y{ka9Ircm;IY*;UaT_ppR~4|LJlrAmobQP!1bpGesjwd3s1z@Lt1!nu7y zaXeRU^!TNZQViw02`Sd6_(~I(4O(94!=Q^(Qmmc*&rM~{d8w>Vj;k>ei#dx@gWhfv zvsBPKWFj=1jOYVVQ#vn89TQbNaT)q+KIk^JV&dnC+thC+u1P%n(KoAfE@8UO`S;&^x)HD!Rm5UjQAB7Hg&Rtt$#HORMm(%p5{^jG!p7MWZ$p zv|@CB8nZcVo7z@zOIiuS-vP>Fd=v2rJ4?UZ5bulH@D+T-D`xavPJs%+bUf$0O zVAn-+n!UVTCLd2riS9QUeHuMhDBF-J(QGlMM9&n?Vxen5-%-Dt{83t0#Qg-6ZNFY{ ze+l$WaN`XOpx>nxfc`7(9o27ObUM>+phF9Dt@ERs#`jM@X)P$sO+P<+ap71B zMr++(HgsY7`BrmbmO9_Mx^NZTXo2(!&)tRVK${EmQT|5@@iwOD=E5h_n~^@AL`U79 zORuol&Z)rcZ~*Ru2>Fisvak>|s_4!1l<00nrRp8LW#!%U^F^lx#c~T;g+;KgiBAGs zh|fu{j=rvFWyYrHp8j(aO1wLZZjM=LwH6iP9dch39Y|kkeP6^g!m-g?GI(56Mek63 zitqKT6bWBx6&62{u`PN|ah7^q1&W`^DDkc+zBy)F^kv29ujpTa-lMh_PlUeRS-d~v z9yO)&3*f(2{HKf^(f#~Y(JN7lLU33=Y>Pfo3@w2$=O#3Z#ojEdfM&7Vn_(>^b$U3O z-|Nt9@jTKZoO|&86|@q)gtwmg=~a5$^5Mz1_dq|Ro*p08S-nBOq5h!HDCX=_%y~&M z=T%i6h4AWp&^Oe@phr|C=zD4@=yA0I^dl7l{a7`Dex}xdo>DEK->CJV->GXre^47i z$vTXDz19tI`>dNlpWbNt32mN<$3TxHscIiu*n;CBA=rL40}qh4G8xFO9!7{*L$u<6n$F z8vjZBf5(3xPYKZp@d>F3T@rdG^iCL_up;4xghvyePk1HaaKh1qFB1HT8Hqg-`y~!e z9G^HNu`Ka|#D$4fiA{-X5`U4nF>z<&J&6w{?oNCn@%hA85WSG z#-!(yjwXGRq>_EfiOCtsJ(7DTXD8<-k4m19JS}-zfXQF z`KjdRl3z@IHTg*LvE&bvPbQyA{ztM(>6+3jrGH9p%8ZoxDVL?(k@CBguTy@O+BbDj z>af&_siD+sQ+K33n)+1g{?s>8zf0|&HZrX^ZBE+7X;o=grrn$NO4{MHk?Bj)uSvfx z{l4_q(?3Z6H2v#zPex)!T1K~w{uv`P#%B~{Ov{*=u^?k1|4Q^--&kye89E;C z%ptrFjcIL<`#>)fdX3OqggzkjX`zROzAyBo(C>ss_vE-~LbHVC37sf(w$Mr+hgl%* z&Ej4r?w#Up68CfB{{KozEVO16+7crd+Qg4{n#SS{Q3-f2R2u%J<6jouw$u;%L;bP) zF#_*Q%Et&DO+9El+Iu2)hbG|-NClLMJ)U0J?O)erAC9Y7aghv-5Yf_H8XqblqS zEko=^yybHhQfR{4L@z-qYp_%FbEL8sv0D)P7uXfL0&jxB6P#1?}SB3%V%g8PG@kUxV(Bn}^M{ANZV>k;2^{PD1Wv(9 zWU6DOC%%m^XC-p_7bkuR_j4&6_jRG~r*Ozq;yx|(N8$KWufXPAr&JEvKb6De2`v)N zJaJzv^oGQ%5c1`uYe841ZU*g<_5x_%v;&|8>1iHB?sO5TPT!rQuM?-=wG*eWQyw9l zbA+>4+z+e8h`X{=HKhcxn`CZsox4ACi_O2ZFj;_pqNa*82pAq_^(1Svc2|X$FOQEN`cJ&hd zDDK#9oWg_MxKy`$w}bzXcPHr6-n&7+?|wgMtn~SvsO($Ag&J>NG7oacP_xI@0yms8g5qjP+>FZXFdKThqbsF&fZ+fB>W>eSC2&dN^zg8LDFH=Jue z;_n5zG_CoM9gGb0E#;`&;~wQreeWa4$2xg4(@F# z9{jDK7Jd`(|0b0P{>`8YS|SPjexN=)kCP1kEua>5dQ-r;Ri%RSTTqMULBAx!LP`h! zHc$&YI~hpf0#G0ARGr{^J1E}9h_>X~F*f}2r z_v3gEn~(N@T6iM-VhZmQ84Au*Di^*_f?9MNbZ9c3?#Kh@X;6!H zz&28}6O`?{5%7H$)S}y=VSRYIBOjdSK`puiJYVif=s4XRSy1fP=${;%mx2_P#=Au=E3(v zP>YV!d2s&~Z{lJbc|JH;!GZH%>H=_1fGWI2_(JeM0A&k$0enw_;ti3I)@1q=@89y# zC!iMIFuV|)zo|vwd(Fsr=eXbV6_X|*qK86%4Itj{_coq0xf?D(m1>pW# zEdl>4Pz&!Ou13huKrQ+b`%V^p1>4%9f8n!Hm~vDds7I{?^{OyvlxhTxR!yL>su^+P zKrM<_mx3m!%RoD+%R#%T7SJqp1?XUPCFn5qOVB)ZHRy144d@8l@9 zx8U6;7Tu^`1WmCHfTminfTrO+BomATR*1MpC ztz)1=tiOQfSgoK#tq(zSt-pc}v;GS-59c`0RMw}U3$4F_R#;zvF1Ee|t+c)dt+)OT zy3+a(gXW)&;jMhHxFHAW0(SLYDF>YYB4fn0rhjZVyJiME^UwhuS-tr>m z@gJAA&lI9e=<_0InG(!2)6JRUOz4Bz&;ar`enwqYV@=>}s%@+dHsmxm1Z#4tYHFyU zx;hl7u4urAT*~nor_#pS+CYeA&gDRJ5r}5svtq&engIJ2)vc%q)|xPGkJ+I*d^;{| zd38+&C`S71}d@9dHl^Yq}?7D;)7__b)n|s)%Ey97=K}oY}Sm5T6}vaM6>Go zOF#t;_}PH5Ev`ux`bQirT8_!PsexVP;n}Eai3%Q`gMw-#3DE&HU5+pK zq206V`ws%xyLGX6pmzQy;#UyDhm1s6 z1coEAih|*KBf1jWZdp4ui8Q^Azm_PGT+UgG!%`99>n19}_xuFvD$=|%TP_@z>F0LX z)j{)D)ab;V4-k^WGGY&GH;^rwB@r<~+j1L4MtM&0>V`mVIJlS_973r@6$Q~DU3uH7 zwrS8dOliq^!Ej?mO<6-@Rj|%U#+_mNEW%V!g^x7aBVK?lh@|z7?WfV)+8W*FCM9l9 zh=^OJZI=19A{1U)Q8T%@G_YjWVo?ZMBO|>)POujJvIJ5bHf>c1u9hCH zm`hk1>*OnKBwfHdHoz*|d|NZpRjdhZuP7$p@}f3u&g-ZQDSD_MB5vyQEI5CJD%CIS!K%^JYT>R$vNZ{X>PJ0J@IT zM8)+`(McHfSXc-3%&`igZZQ!w*3x85Nj$exacvd<6jsz$25Q)KUPZ7$YKXxA#Zkq< zZKtcp8*8ToYlHZlYL!cPbJ|F04q`fi%J>7F4&uT%U~VnuSuHbmVB3xB%)n_ z5?Crhd}i~K!1Umf08cr#IO(Cn4T4rJ;zCOUw`o>RRrdnx7U_D_N&4L((p?F;kXd(wq35EhDb;+HiAW+^i zxrG|eFu-%B^2iTXYMEIyjORqmg;PQS=Zm^wDYaeYcBOC6Zjae$&^p4l-Ijo3++kvG zkxk}?DHs+XmSLk<_eM1dbNku#lkX6Rm+E$`s}Ez?t!|)NCJp>$Vi9H}!IK~g&p$li3(W#@5|k~*8=J9_L^^Whv&h6BV?A#vWWTH)nx2Q-tR<{~ zX(mWXcviicI!sE_D#A+}xK#)`ma|}k2!dvkH>jYd#>FU!s9mX<%d4;^P!Y0A%aQBq z8|Lw+fY~9csVWez3wxipM@~tYhl1Zhk%VD!!J? zViF9O=uhBsK`@tyilU(Aq4P1N);2(%YijD6VB|JcgsRH023V?xZ~I_epqUtzuuY%gDNV7Vb>Y6xEx6iadO+BZ{zam7Y;E@J1tDy*r4F+QcH5v?rdfu_9LvRgp%EH+=*mZo;VjEdzlIkMu#2*Z3* z8fZj%`g_xu{a{V-su3$wOsuFwc}1w2N12O@+F-!)BC@%*(oA;ZE`%H`#*C+@EfWkw z$+(ajlp!z8j6QCQ%%Y)U6($QEiVIuFUw*aCWu8WjC)OX4kYOGPvgV^=Z8T%;Rj&Z~8w3D%Z`J=Q{CF}9I;zr9YMANZFDY>JRZ7}SUXw|`weLr}gCc!sb4Z%n)i=EEbrN<13FzvNj;-FY#qHMq z>Gsoc!gOx&`82(FYC+-o3)$HKvx|p4l^2(l3x}JDjWOYJ8#-V{urgE^u3OTOb6&7^ zcpk>H-a0uq&@5eE*cb|7W|#}xioh#g4Wk>=F;8=x23Q7_H7@2j;vkxn7?p#LHRU-$YBJ^9#B1$ zDqJ$16x1~QgioZMx$kAa2a*Y?UZuw<)Mi~RmRD@yLJzIbT-z}#G`E&F9$-c;X02?i z4pyhOTSTTEwqv2Y==1Y+%5%L&e`LqTg%6I*Rkh2Ah^Yot;%q6`C6NXlY9Es7_Vfm{T!b#tp#* z?9iO{lsen2^&$=DEJbG4H3XM58?`cPiPn0y_Q2rLqUAJGhc<{*tAm%8jGt(PcC~fY zqy!SWde#!&m~FuJaoAZJQ4K_PW+U51;+$+Qa2-68MS8 zobHT@)hyb&cO4*Q;RU&rsuTkm{(Z&@KTGDsV@sw*J89zZ47FYz)XWBRk9xd z3mhrd+cq4y*tTN52XlwFf^{()pn&;Q0G`2`Ml5ipmVrb<5yjaeIf0xt&{yHF&kLjU_-#{JL^j8G{vn=MjeeCgmt|Xh{0?gKDu(n zTqJE^Ptirypu|-qNf5&e^^sMo&I~22H;I%;8FhlZOqBqVqmCt5=L8Gi$*0Ve*Iibp zoTiMXd`_G;<#Lya7nfWfyDU-;cNxx*zwFF+&^3*i8tQrFXIAqjK#m*(xK{b?`8lj| zY6CUlobt+g!heHh?GHW{dS(+8`#aRIG%&pmX1qwN-t`aFK=x(-A1=L-A&gCLfaKgG+mUuz950R+*}~*y9;TxPFezXkBMCGco9q+ORcxIjxZUB7sl$mz zLTRlbp&~iiaZI`e(Rv-jf!QvYX{(MwjfX3Eq}|(w zj_^AK?obG)w>ktpV?lIqS5dfm+BJil#i`mjlDCWF4$wA7J5amKB7$iu&EX!*ccQQQ*cVn(gh%G9m@6D(pCpptNPQix-i0 zJD4NwZ5gh3ZmHowZmF>&IUQ&-oX%oKTX}IfZNhM^B7J8kV|uFN`IOkr)6BIHm>hCF z1PSVOJL}_;u&Z0qnwn>~r(rNO!5qcUMuI5+nSmzTk9){=>z1|=`*14e)K8qcO|`SJ zmVdD&BFB5|M*Cq8z{Kb1C`(D0eGFiyojkjp0tI-nz^5yc2ygPT(+*lANpS=my>hDT zl!{d9Et~cj1rc+eZ}vo*zR6s^2+1@)J5Vb&1&7hb37OQ|?nFp`Xd8Zdo8-9J%|=fo z#!vL893RZ8?dXdotgF3%xGH+7T}4xIs)ua?b5g^bcU%H9!Kan>*Z=DwfF^Ws@7RRd2JfkgaPn=N_DxY_GIo%AF`q zSdQ*_Dd60K&<8E{?tDA8DOKb&Eu16!BQmP1&?q6Oyoj&8R6<5M^TVh~xQ6!;*vO4s z)ma^`i2#Hw#UdQ-7vb@dieW}tC1<|uHk8QE%!*aPYFYjwJ_k22ZC#LHxB?7uN(N z1fP^b=QRZEL?JdIxo2R9(78CnqYWGViQ^8w@YRNmwg^LxOcs&=&ju)F8=jor=;A=T z;S3MvHWpmyYqM#iv*!CbeCVt9QJc7(q$Qybu|dW6op^7QH>(^sb|u)&hm>ac;(CcK z*3+;@BdS^)La>d(t3JnIH;X>OZns`a20{hA>eVENn^I1i)4?``FQ-rUj#o z`HB)!HZDv%RpK+bS@JZ|aqkGbyoK2H7E$8yTh^AP7u#l)2lY@`fg76=*x9@m$>6I& z4FU0mhnXx~(Qqjf*EQ?wd6$tjPP@H99lc%N?V#SA!u9|}x5~_AP_r7=+lyW_0s4(q zf~^bq%*?g-=z`5C2^1AX&xDn>DPB?EVDFZSfZGYNh!mTxxEaCPGTwg2CY=15^A~Y* z<|Z5qj_F@Hp|{y}q1mCplHh7d-!QS2XzvZ6fg-Da-l_}h#XRp4%Bo&AP^n7aO*M0Y zy~`lIXop8f+f#+;K%{Kr$aps#2n_b`a4PIzIT&$J*c6X-gS3zZIE$@2?sk&Mr={q0@+M}xx(8t8ceTf ztgT!sZgdTA7Q)1Ye6NBE;DM_{nfp%Aa1Dlo9Z7q$BUpirxo|_U(z#@-FYa+EdF1eo ztD>N+wkxoKiE_9u@CA8xlY4Hsd*_6Ko(bq-Z>C?GfxA9@frD&@kwQLV;`Vc97Uzrx z9^AMcJup5hntA)RqZis42gc?^qoX&EPQLz&dAFj*>}_`p^^+c$gQ^0!!MnU;99A2l zVD-|5j$Y`Ns>aGQc*q`lZF3}s=@4V*<(RnI<+C0*>z z%VpJwZ{%h>ccBb`624D~ra;B8IR>t|3dpkKDqH8sD*H4?Yz$M?g{*H)elGNSLIo zoXJ#uPfC&%wMF_~iIe~}#n~tZRlwPKo>|uDFRBfCa zQ;xH?C(@9f>%)9kPjb$wl$(o21?mz+`T!#{uv&7JYm9RI$A%w{TuSROHZf(Hn>-N% zpQi)4Xv+DP@Nkp3rn9*p^}5RLRaUcxqi@~uHabeU>FM0nEA|SiO{+x5~_-dUDx95HD?7jM+~0=`h3C+Hy$oHa;=rK zb?m6y5GHzK2*U#N8cvvTc7v;ETnijyY1PIOEj8wj(Iu4C4d1bW=tId!M?tDfYH_;- zMls}i7VbGoWAG7&(=0a6xweMs0Lv7ypD~2wfUuxekBaGm+G?E8u?YvOIJg40dPJg_ z!FMQJcjv|%%c6wuSh58wr78;GoUtZ+_N8Nrr;HhypI11fctpXNAtQ2&Cl47tdd!p| zBS(!KlUqDu%#?!3BQG;rClIpDgQ|!)ivWoxS%|YVBwi^J$CD{@*#MX@Yy@Rx;a1qv zx~kmO`MJ5dc}oIAhS>+^d@qX)MWJ=azT!U#yDvG5M4>vt{p{ev@Ov-{G zY(E7f*M1xn;pVfVqDt!#^xjE%XMP6#N{IS!BtA55if7Y`}zZiH!jLtP8|8vPR)Vuuo#2 zSRfGTG8ly=D{lQ1i_vy+T@UB2b^12G?nzo=%RX*i=!<66{Gf@g3D~yL+6B^y`x9tU zF?qC;TfmMFcUwKeo=^mw6344+#9oKJMApp`!3Y}xtL!}*(R$H(Kvr%Yefu2)^9F|RAjvt(pL_paoa5SoT9r|cjyc|kaJF_O+$0} z2bXJWjWgW1csY#i#jrFn&k`X2FbfSMeal@G#(cnw9o^aR(XriLCcPz?mN09HMk%$V5rdVn*72mcfx5SAly$gLlc;fEKD!iA=hy9)-g&nz5lBEe!V zhi$Nn#bpC$ir3FiN=dX$1f4Fn5zh;{z1w44i_hIFZQ$PH<3{0~ z(@?OY7Q;$5|L~wtn+%X#121gDyc=v3h0)DgYZ$>~TMgBykf(9wLYKL{A)97U7Dn39 zv{f~FXNt2ogV}5!u^D@Y{dRL$b_SoRg|H;+<6cYE`AYyha1c9z6G>+0y0-0tgf%ESjBts{0Na8E9f@U8{rZ~%nK)iu&_*$Ep3$2j3+6h zkyd-CaJ>y{Zi&rA*FnQp;`pPs+R-?+Ln?(3@~fZqVXZ65QgWD8W^44>xU0DYx(quK zoR1CN<%o19hnRu=TD~@kUXwt4^`{NcgG^XbN!UwHt=Rx`ZdkI6mDj;r(&352nYwh< zu#)E-d8r~d_(?^bd@vCUzew)KsK$^$FvWxb9RaRTjH7R_S?j}eaLqkW4D#t@zr9F- zGy>R9^NO6bk><2OT=9c%r4`%w;a_3Zjpf(riA0lGjL}hVA3#M0}xgBO%3vgD};ZQyWATBS(*y z$U>c;3&SL9?O@sh!D60doX)f_TR0P#bZn$MbQf`Fqh^iuJQ~e5u>_3t4(3rlsDR#(>xAZ4#(oK& z&w~h}kMOu6MAdFvXvfHwG_Tqt$euM=ki?8>KN-~5qdcr8^%~tJdv+r=+sFInq(Nj7 z{m+klhz7}Z;2dXEoh6lfB+DP9=4DQ3TJ#&+=eEJ_ ztO|_9|xJwc%ZThukfnCqtDKc}Qxm|r53 zF%xeIYrwl^rsKB)?-0WiXhbPC3KCWw@TKmhc+(;7l;Hntgu{U*!AwW!8u;0vGw~*; zI=qpoUVLyN66w!Hj2e@+liFEs?ipeY)wyNjZDN^tpVlg*ggcffV-Pz(oGuhJ$}oX0 z#kV>xBQ>E6KGoprQrY?FRLT&8OU&`A@D@28XE1(;Auc{5lQJ1T)kvWhZ+YZeQbI8( z9{bj4LIHBc+=ZGgMqQdwChmj=S_;<+gyAw}!Y=??fnRJqAzY*6NPWw|$3x1JKDT8f zVrSxgk(@#$(%_olB`9YMH3hM_mCKN;uK5bQtIHiTla?U25K`3jqV7|Gcn7!?|G6ZM zz?I^r?&U~t1>77yK&w%bpoB)B<5Ma+FFPgfm!-&yB|xO2d;2nSopfqcI2-wJ>u?V( z1=VsB>AOtSw$3SKrU@D8OGu+<4gL?p{~`F2#{m2e#((+TT*3srMRPjddsIN>cyHze zv`0DWM^O`KK2c9ybMDWm`|!e`RgGKoF;HrT^lWf zZQ87J6;e4vEBkpQvt&_*I}dJE9u1VV7%rG*2*sn2I=96Q7%lZ2t{0bxHHVf{9vM2_ zCgdB!8|29Eq%rD$+XrU61^&(u+Gr3HyEzjC>ON6l$hm+{aA`=Oc{KZfX{k^ z$M*vG+LDzcwW$Vgro&r+csY1KEfsW(ITLB%u{@;0ZIg-7(LQZ=IyA1M|G&?B2u3IC zo(59>9LOKf6a*K`C3*$##fC)o(%SXk^i5~h!mLlZ&x`PXF=~fVHHbBOoyZusAnR0a zkrm*vK4Bfq8jI^jJqsLnrj$s}1Uep#WF5(xU+Y#*g-2hL^Z;vjyB>Bbm5?l|=2&)a z?L#yW>y#-dgO*iJPisC--JRF}m=DHm+j`QlLbO0gYO8y03EXWZI#X(6>u{RL^E=m^ z$3rFjcnnp7bEcSF!j;HD_nqi`X`!~fGsopNbaEZnamLi6g=at32^^MZ^$=V^lu%1L z&&Ra(URI9Si4kvhaT9h7%oD#|S)6;JsTg5N1($7{a7;ZpvYOCEj400b;aQp3g<-{{ zi)p7FM$uWV+0%%q^ig*A>&|3Bx2tG3#+jOnhVs;34^bJ4fB3uyUTB(wX-oef2EJ~t zp++@OQX$IEQ!y(H9!z#QC_$?}JSBsYQCi2esLpLXBmJ3!mnCv}15!pU#D%DjOhP4R4p%HjP-LoP%!;wzkp;Vlos>qMIVBFKOXQp9H&tAU%c|9#jpgk$-GG9B&?*>Qr)fytyNb~b*rbkmUkO&p$jBE~1n z506b&$!xml6m!H7;*l}~d>(6T7SSwwVPLCiE-}}Yhd=W&Q92$|Zexq5LGCdtT<7 z%AShSvv$%G9+xVz9C0sisHZJ6Zdu5IM6N*H=-jsbP>xpSy7Qty63MYpCNmyFEH?b8re=*GL&SXT9LzD=yUkO!H%;H@p|JS zvPh?b|6JGaG+R>j(Bk&ULT>+I-TsGECjMt-*81uU zTL%AO|G6y+*Y-_+-V7?27R7lkM&D|*v$i41z{L}Gs5Q2KGV~n4b~rCe%p%<5$5%0y zA{1`X!A9pLEpON?mW`iP=pS3}>Wv`oHQp>*X8adNa7qrW>ZCPd{>d_IC#D2?a? zye&b>#WQ0m{XgxUe~et!b;s{}^W(i)@4WRqdt+}s6J{|EIC$4yV%J&} zCthp=hBfAgZGwV}w|F62cJXhB)2uo(TdE?3KioEz5|OrUg&Hc5K#3Kc;#8?bga1H@ z|8UYuwuIHt7FF94sZ^m#(tf`8&fEF1yT*H|v3K#=f38?FRmR0x#A6?ACb}-C8$!?l3EsyuvMdhLEbML++782WcuaEPwgC%TUUuT2aG}ZjFP;w&xh$OtS}Bi0)Ohp+l47^&M7DruQT| z)4u_H;4adG{PS3{cMIdDa3?=9aVvdzid0%KeUCy}vlGYX0FWA04jJz{J!vdL4!~tI zq_?{Lx#ZObvqHLfigL;2NvPJBYgaWEmIrK`8w-Tq3Q6NAytl3edcE>c^GXYvQ>pcd zy_w)q;u@sXC)<;+Q;Wu_`6Tz^z{|PCNw(uwBsody5KrAkkk{MLc*71P$NGlDvc_}G z6J&E9n;fzo`BLd>uD2G(t+$qBR141X&Gsnmo}g9|1DW2{{CJc5=T-{kU$xoNSl>Z! zY?wHmKMvobDB7mbTFU61dIVVYjKqVBF9+LN3hWYRQ+9L5@+g|po5mE?ncE)gX|-;% zLaRNJ_7liieb+^?UQcsN;V;f0CRVTdZ!z z<2-;ojM>qOwRzK45wGm2OuUiU!HwL__ch)f*M_Abt3~i^-hmvPKhQR4>+EXrmYAs# z+s0&t#mzwFXSDV#P0Nbp+f*W-C8<4$+#63DbM4l)NMdfaOd8Vc#tZ7JPODmb+ZJ;@ z5wX^(uV>@Gv5M4=&-A+S$<-ET*8BCi5iMD%F-txUuKEU1&uCp1u4QIqgeMx`nrFz` z{t~x}k!3@guV}`oeDmgt?N2w~zd)(#CU~31AJ!1&Z`mZ;xz^Q=h2}nUBkcNyZ&Pga zFcP0X-`WNjE)FyKJ#er7bBrItpW-idAV8|SZ$&0k@qN33edwpm6t zu3x_si8n?O&Bha+8V4VmBzH)Cv|(A!{xp&$(o5Dvn&)K6nuk`|RKEeMu{qJKtl5oF zZYM{c()8>lD!!Y~ZjM6SW6b7Xj=t&98lj}>MlZ8|1nEk?$rkuRt4U4m?rpVYH)AxL z?*QLKedSBOTN`z)kczH%LHF~`vulpLXm)kY@N2Gxj#+(mtow-4KOAO=x!%?Am=&(= z+Anfm*Ug$u-dS0_Ki?r7?OTbGH!m8Yp4y&Rg*=+;=L@Xo-PekzvAVSwE{#sIqhn}W zW1MX1H?7yG^SMeE@8W3nG3|oM>u6)y3@_vt^t2UTytmRf%bZ75bT)@=D8c5UDz_!A z5x4=%D zZf5VTPApEgD_$D#qtMmi1k(iLWV8TG6CK5)>iI2n`WL6O2UzBSO%Ux=>JYsRy4uX= zos@VLGuLP4w?Omf`B3fHo1j)SC}`HK$XxSjbK~ON-?<1}JCznV#-&6nib6jRCC$vg z04^fNfyJpg57Pp@MAlayLvnl2wT0FGr1ejbA}d&r_m>+O~y=ysTPDswQK z8@LrKY7cM#%T^?>-sYl+0q$E5$#|O4<9{9>Yj(q9GAn4^NfA~>yhO+&SEsABDkrHiJX;buj9L!r z7}mGbY4t_wIa-C=1E#~Gxcll98!dJ1)b3*|h8<`=i3_mRZSC}%pFc?5qgeEVq&hz4 zbkoY=FT+zi-e#Kcw5gq^o$%c7?CK-3!dB^;PbZQ|6iU*58e+RFXuD^X1X}RM6Xy zPjZaa+}uuG&~D{r9_)<^!6tMaABuC$JX!6sI2YX|+T4yev4?x$)6J-56N-o)u+ijk za?)jcy~TD6R7)|1`V?c*HSQB#Beo$)EQwSH+U#JV*w&jT$6a;5Ini<=!}KKaNv5WEx>YrK zHuVIp%O%f`)Bowm_=n~=Ofyc|LULqJT4|gTlLe`VtE}Gc9a_n3j)oUHtk=q~Rx#ZC zHSxG++5B4OvkT3YjzY`zHMORd+eA7#h~Fxkb}4vPTL~V?Pw{he%gt{$qR_@3@gX3c zY}~qylTPcZLn4`Eg*I8g)&9`^mWtZY%AtIeq8)LBPFCs8?cD0Dm871`EzQl^Axt=K z%+d#1xYrz_%)xZ#1OTdg{1YhPP~fnMpmxdAV)O zWc9PYqs)XKV6MLpJdJfvGa-*Fe%-o&W-lX6_H-E7#)0&Pq@*$N=H#OK8kd^e^hljY z?PBVDmA78wkJfF7c)_F$>T&X5GFI{^Z3U|LfM@|I-H_igy0j854f%3lHz> z+xYgg;UE9ts~`Q=f86zSDjPqPE}QrvKO2(Y?`M53V|>Q>6!=V_Z!cZ;ypW7OzTl^n z98of!DSLi=f;7&Bq+xtAOMW~qgk@is_#~xXTnNfOY5i^@!(AkJFP^sPIJLaEQiVb> zeG?q<1&EN3ubU|)N0f}iit71Z7^SmucQ-(NeIQc)!H5AC~(q;eJs{S?Xsj^)qT&EXBzeS9!&XbVZC zhJg3)#p?ms6137cRB$lG?}G#7`5A*O&vWYq25YIDkFpeV&AD4W42_=&1?FdS>7~Y) zbVZ4NHQdjpGRBXhh?GlKdE^ZJxbjxUAak{2SQ5BkC3L|`=t3%6csLCblLm=N`y{}P z@>!k{-=nm(@UXJL(d^}}H5ZgWAvG4`Eo#Up2@vE|FFqjqjt@AaLsaw=+HT90S_6pU zX_;yihT`g?6brK#Eq51TIi7R|c2TsBi-mYn1dfYr7*C4AWGJkY7Q=bR+IfrMylvij zVg834@P*3dxVnyJZS=Ew0hZ|IWs}Dy^H>B@aprL)G#JDcn94{YS5St%b;@`LeATp` zRMX(viR4Hq>$YXxBBvjbC*|>BJwB|mH*MLQf?Q`I*D1T)W|wDBX*HcD-D$JkN-NK+ z;IPfUX^Yp{v@ZXjV!cHfs2^IF&>eM?_amPaBS4n%Kok#zuYCHE-zi+|x)l+`m3I;E zyYRK$%5u9H`)Rst;_d01lyEz%H1V)eWnHEdc9EJkPC_W;F zl*1vo>)fMhysnDki6k?gWTu@7yaFZ~C*EoHgc3Y3!miR-l_G};CDXR?RcBByiG!Df zfeQkV`N4=v-**u23)3i~r?*?#p47wF;XcP_B_9n8RDaz*T`9J>iC0?UuhnJzfeiYD zv-#H?JQq5MkfK!_w25kazZ zoYDMj&c9aINO4i2y4E`Q>Y4~E!d_uwRt`l{nzfy+I=~%PJBurb;;F1WT0Dghv`h}! zA?!W1Wwa#MhF4JC=fz$zV_=5fLCJ`4kHpnYnNVe7E#4k)53FD%#X|Ka)!AsFhwHvV zg*0ebEgTLJKs=0#2(dMn@qv>|sa!w^;N74eaankVqjDN6#M=zV!*$$SLeNwF%lLx`+Sy^{tneT=}hAzWueQKJ{Gs=U+Z`cHrp5<=o%?-EVwv-zWd^ z4`2GrzGdGzz2%30o`3wwA6@?5$9{VI&;IFi=C4ybQ)6FU^;h@zJaXdM+rNMFUH|#* zFAnAXAN;`!-@orWQ}_SN?|tHZ|BkzN-(GrV$)o+x=l){zt*d`DwC~?iKm6V|zVz!C z`mcM*%41Vty!atWJ@6G_NfXtRslbc)gk3=<&iV0PKenzouDqNNh`<=Cr);4$xQSAH zWN8qF#8%|uBf!V`bU=K?2<@X>#6Ci{C@)A#HY_d=@?nUbFxVIIhE$M6#9F2^Ze0@EYN^Su13pa=T6*)Br5Tvt9GFBN^Dh1uFnE(255 zFRKXv@KL)gO`D^^MX{aBc_yt_qTt#B&tGEvxO&?C4-r;%Q=$5TwUZag6YEe%i61H^ z+aem3Q`z3Q`mz^ssYi6njJmT|sGf0*+ju0dp34TQ5H^?4^2&3*LcTC<2*bokF$hvT ziwSs42?kJ+Un*u%ROPhQR4G2$gN7<_cV1=OFQsw1e+xHb3vvO&O2S7OL-rK{}cfoYS>!^2@Gy zvmxP$A{0g#FP%68YUhSfuT*79-zR+i0Sdamq(U5s61MiiD#a17$52 z6^n`|Z7%5MQYVJcUKIs`GfNP|iz{brOV4x#DWbwSM`E*Ql|5@AE`SU5T!`VCv~qz5 z@n?Ko&{?agdJ(s3ZoHpnC%t7m{Q17R;Q^OMP!nFIZ;0=MYC)tvc>oPyyXsoCzCsW( zFhm4v(o3z+mKSOYvI#JdkK}@X+_f(0D$QLKA3qr?yF+u(Jv07bxYpA+S6X1qE-42w3(4CWcDh|3uy2L+Z zkBvln!fk2^65Nkjlu{I7oS}~aXDw`qd{Rh`6nH$f;0v`Kq3lX|*z%)7ZKqY&1!^N$ zX`Z+jF)r^$@+YGBgcZHQaC{Qw2atUjAAny{Xh`E1EsBd+sN{u2nSnwzp0vd29Mqe% zFy}Ez^l%=N6aWICpy)EVJqMf)GBdsVrlal&4BAO@=K z??&U}J{g$`E=hVX)W+zONdF@L?O;_KBZrz1^2Id)skJp*3hr?WsUrT%senqYqFEsh zt~M2CBDw|M6XLZa5q=vl5N9yCqA!PF{dnaq=}qROE>lJSDI9vK*v%CuAJ?9ZYtMZI zd#rAWYtsM%RE%rS5Sb$|Oy-KU!*^ts+`S{rUa0m}u7vTlz+^SmG|+y$)7^ACOM2dx z9dwV_FG=r^yw& z(3c)n-lcD5;@S&w?M19C7i46xCD|K1&k8~1CklRol>9L!P%83BVJQGdluRg@w(wPJ zN3$vzwFR$P)kkXQXgn=lb3r4ZW1{7+2)esunzex_A5SxUSyh!Z7Q`oHG66KPtyFvi z1M!sn{RyHe9EE(+31>2A6o-Z>OYiM8Cj(Np@4#+khoQJyuo^sP9fI?Kgrgq|dNGx= z^u@~08Jj7=9&82&18wG}b}&`L{a?ezfS|%TdnH%7ghkrX7SVne3W)l<7$+cry`da6 z$XUl_ZK-x4`gqVwktYCKaCKGyc@0`4VdVOm?ay_=c%_Uw4}MBfekoI88HDjS(-Y)q z;Qmk^ZBB%mC`%xgv2%7zIfZH{LK&_HBZz^hCqPy>=>2tqRtoO{fkbTQdJh}ZjTKz~ zN(Q=77CPYkER3XZzEM2N&`hYyXm^THBLiA;3P?_c*5cnnG%gO=WEET8w31Pw_AaXy z>gUxp7%>?-id~;!-e8rr2EPxoHTo|Om_%4P&$xinT?#Y37N>PDUSVdMqO-FP9P}1zA2hqT9+Th9yfxZ2^k{1_p5#5iyitWVR(U zTd)~lkxqm_q`#RQuFv|9AS0uhw&Ua|a!2*3Lu0U%K=>MD$T7x`+K>e#@)V;^kToAYNF~>1QdXDu~)uKY(5&g5)BC{C5%Zhh9T5)3yd1j~l31jnizbgoe zjKW3S9sW=gA8R+7i(j@1-C)POVY#DW9FclYb%Ul@wvig*$XkoiNMj4{TOQ;P_An2k zh=e{hRx0+u8|W^ev$??yRPn1Un%li)T613yT4n4IHz73*# zOZnc<@yiQ`%iE5QO*{@5FJUd)cUK-O^SWET0reoeXE|B*Bl?jReiVG}9+j9(-7E?u$`wV=OHzHGDelJ}b68V~t(@1xr%CwGnU z=DaE1E6eMI2M_WlF#Y}a8dKhCbDg9kfnPldct)E6EAcO_ZC8IZ`l7(Ra>3on=QD46 z=Id$QxxcTcHQ7s)&(H5k>*yE0FYLnRgy^;PzssAPKo75krE4iE;w@sT*@5v8l>bNa6N6m#-#Ug={UH)2&S#> zF`i6vzsq5UCC8P;6zz= zDCxP@in2Jm-GLY7_*KVFi-+@eTy!fMeBfoHrLfsj`Q%>u(#v@iun4g0*)+Rg5|p4B6y{ls2%Cy9T!{j4*Dk@e#|2eB}H)wf}N&AiH1W#{g| zO#<6)?N_t)?Y92>1NZ+M99Dpxq$7cj1UeGvNT4Hujs!Xq=t!U=fnOB~{D37$+Pai? resumi66i>vBY} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/nunit-agent.exe.config b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/nunit-agent.exe.config new file mode 100644 index 0000000..d840f37 --- /dev/null +++ b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/nunit-agent.exe.config @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/nunit-console-x86.exe.config b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/nunit-console-x86.exe.config new file mode 100644 index 0000000..fa0a262 --- /dev/null +++ b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/nunit-console-x86.exe.config @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/nunit-console.exe.config b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/nunit-console.exe.config new file mode 100644 index 0000000..fa0a262 --- /dev/null +++ b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/nunit-console.exe.config @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/nunit-x86.exe.config b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/nunit-x86.exe.config new file mode 100644 index 0000000..1641a50 --- /dev/null +++ b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/nunit-x86.exe.config @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/nunit.exe.config b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/nunit.exe.config new file mode 100644 index 0000000..1641a50 --- /dev/null +++ b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/nunit.exe.config @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/nunit.framework.dll b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/nunit.framework.dll new file mode 100644 index 0000000000000000000000000000000000000000..6856e51ef08a8e681896c3a84ccbeea8975d5947 GIT binary patch literal 139264 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


    jGx_)XGKVSL!mZ7A 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 s;idf~4WfA}|OOnpsbG<<@nYpjdJ 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 K#)0=F2mTF_u(`ni literal 0 HcmV?d00001 diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/pnunit-agent.exe.config b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/pnunit-agent.exe.config new file mode 100644 index 0000000..0bf29b3 --- /dev/null +++ b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/pnunit-agent.exe.config @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/pnunit-launcher.exe.config b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/pnunit-launcher.exe.config new file mode 100644 index 0000000..0bf29b3 --- /dev/null +++ b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/pnunit-launcher.exe.config @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/pnunit.framework.dll b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/pnunit.framework.dll new file mode 100644 index 0000000000000000000000000000000000000000..6c105d70f908dc7047aad6fbeba58162189c6070 GIT binary patch literal 6656 zcmeHLZ)_aZ5udlacX2N95sYIJu#-(4sx*PC^AA)tC3ftD7!t?$9FsJa!uq^+Ho3cX zclVMw(IF#9X{4$RQX3K!74e}}KeQE6X+agBh)VuKiQq#~3sp%4MXf+;K}ZFJpud^7 zdp_rYkk8Gt_qQ`|=FOX#H}CE4?fmvBGKt8-_35WXPvg$5Tkwlv8shBo-)HH``7f?` zTJ3mo#qa?yv?l|9B5+D}!6}#h$R2g=pi;KIvfZ~UZnuak-W8)|lf9_|*`+O${KYlo0o-4Z`; zO#GnLuNtjYgk<4{Xsp_dW(8R@w8*NMOpAOPak87ldHX8+h`iB#+^dteVBReYDd>eO zVLPTdCZfz5O2=b5FottY#&Mpvmgxn-L~YFK(+C~8NykdZd8xGiab8m&OPQwCkAAV1 z>0_m#_S4I#Sw74|5Bs*uqWy8MW(RTH!C5$0=YhEjab$c1KgUPYN0o4ojCt+z$E-&F zlx!2E7P*)cEr%!>OLWk2sSX!$tYZ)oo#d1!Mov+>&Dsl7J1KSk#d`1rS-1{4SoT@= zu8HkgDIfkob6Kkt1M;>df9Dnz?_53y4zJ5~TGr((ef!3Rb1(q&f@f4~0H0__#U;-``MA0{^9+M!CMHo}ob- zF4Fgwyh20h*KH>CR~o6~-lBcHp3-JgZ;>Ob#q3P#9r7@bZZoM5F%COb+Ds~~CiVJ* zXYMd^kjPrp2%_F&GtaZ1ARM~VW>R@|3Xiex+sv};7qpm`tVp2r8y@m$;1GGtROV4t}JLlaR ztxyBp^Fggg(_pbt)SUiR&@^cy(4x)26zYU^ZV*jv^Cv=ck3o;rSz!Cd9Gjo-=L&iS zaeqy4E$~(PhR{8N{epK3?iF+dJ;Cn^P6^%*e4S1LhfpPq4+~yP%dIz2oi|%A12+oY zD|ol`IMzSWe^BVdf+wtZu$oL`O$FJ*v-C^rBh;8h&A=u+3A5OB-=Z96^>QMio_erUgvZgu9M9qtyKY<(C1)WXJ02Td6Xnu#v z(C`{&9;09JAl)|Y^v5bi_jZ~rSISv+V%oQR(pnC!@a(8%TS5q|LN8b2UJaIoF ziq+x#ECVyqtWEY*rs@epw=`Ou5{7$+{h>-(q8xOPmr$IM$kERVwDqW4s6_6VB$4{V zd?n6QxXtm3mB6JwH!K9+WaRm<$EZq8#b z$Dt6CUYuU^iaT+9TaOl8ZMh`NP>Pp}z=n}ihUq)phb?-5K?tisBqS7JWyPXyiu>{MRg8ex`%OCj8?|UE04KHsUS5J z=zTXDZo z#1jo08V=}CG;la}mhk>m1|OlnEZVlnZEzK_MQewl%^IvZ4m&K<^Ln5>vF-x*oD;o?anon6vTgET<9WAA(5i3>WSwmfac!*E0}kLi2B z4O8n@X!qeGo!KGeft5^~lw~WGO#wR0dA12`YD(LN%C@wp_?AthGn;KP(;Zne-LfcS zr@&@AvMq~vP)np|Sd8D%R)0@cd z)@oPrOJsn*f#heS>AA|hZuoX2YUpRZ?YQ=IZ;eT;wpAn6g{wz9Oh+F?{z$wCIc{4mxwVC@cdx#T_?aZEl zJd2I18{a&$x+BmHpsi0y)>(^p)h=8cKy~3QJ4fq5uak@AJMdkkBszVbl@SYG7l9?% z!Y><$uo9myIh>jtGfR%( literal 0 HcmV?d00001 diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/pnunit.tests.dll b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/pnunit.tests.dll new file mode 100644 index 0000000000000000000000000000000000000000..dce018acda64eb9f1162a3b3e95f473ecbe029cb GIT binary patch literal 4608 zcmeHKTWlOx8UALxakdV2oF+|^R@h@XRh<+TI~OX8D6FrkQ{U>{IOW!Qc6YoPGCQ+9 zGn>Q+AtPu-MUm)B5j<3_ctWD$BBWN4`huwFOC+8ULP%6Xpa@k$LOcKugzx`n*IwIO zXkV+I^?c{Qo&WsjKUXh&{=4V`kl}atF7O6xDS5^J4VzT=4c_X*FYdWL^oBKmd#HHT zkDa=Ss>ZE3Wj73?#3^}>X@rg+I@3!9rxsPbTyJmBiKgr28DQS(LeHPRx6tbC9oRz$ ztSrz&Np~t8ILX@Km**$ou(H#*Noo92W0N1{Qo4|T7U zsY#qJOUdx%-l&RL(@+4%Ub_GOn zK4-ijqM@qRXd}Kj^!AbmCfj+XC9fj$T6O}gu%mu2Ok)rx_jha8TBd76Wh$Sx*9o5siD3e9T9!X9}@mP;hp}6 zfsv!zDmA@d_@m}iG#fc4G~IUcyR_w}b3fb8%xmK7xcIui-EV6o^gmg+G-)+6C3(Mo zIyag-H~Q%5M`bYk5D;JCJPd!0^TJJ*;Wu1Jj2~8GvFPX8zQcO>asmG&Ez>o8@$%d> z>n!JBQ~1dsDzTPASJuV*Y{-(qzpXQ178o#?7v00MRcHeSt-eGjAG>AgX-3+O8C>AD z+C)hFzT(dnZ!7*q@vh0o*;fk zF~%C{14N1kLmA&7ZYuqX;xICs>8j}Me~YK1lw+Ea zloqsbP8m55dQf~sm=Toi zFctV-m^AHkE8cp*27VM`B96UUDcE@2+gNmK-bBJ}R%#?(yJFT4Iw+>Sz}+bL)o^c{ zRnNq9zE?5T2$F{B;H+reidS>ZwGM5f`iAkVSChS}Wy9Q+J1C~2THOsd_O_Uc!gase zFs=-KuX@^x%f_#FRu=uFJr8N_b1RK7@oQdAx@4Y=B-}4^vQmL|w8B)~R4U%?v)NEX zP5hD{_(@y9?W+MUN=R47Iv)t$jmTWX;$>Mavs=8Zlv)4g&h(0KyGNO8!)0PTT_3F# zx9xLzx6@RxHKdDPf;o0O=^Cy_gDb{Qym>$LS_`Xq)p%}2mS{?$5O`i4GhyPHR-?JN zXc`{V6UI^C=^i*Zi3zOmH^(z}1^9RY9t^H4I*5@l1%~LM0t^;$m6W5r=p3w5@AKYJ z{g+z$G9^A`q1wc36`?^{g)MGq3u)U>y|fmOsppujI`z-%XMA^T?Osb7*Uoqy`j6Nj zQ26mv=YL`smR>mh_HUg#-G4>)^{;$!_4wI$p5F&Mo6UAPuriKi^$FMl+01@Xy!4wN z47~o2OE)qWz0lUmW;4LO3mMQvc)L%?zI~!c)@r_>2IO)m+DES#x4syKGdIhgE^W?D zbR)L#?ueMDrBB{7PLtVPHQzcr#ZON~W;zHKTt7??B+t`hORVlb1Sh}K{6o#jea!nH zeR{NwR3-oz?I0H;c{@It2VU5|4M?A*bQJ|WO_beG;I3H0BKbMuENLlkX8!h{^j5L( z*0a6rKCM5i+Vr{G=2oTCM2lW!FU>ah%N$qdI@hO^6Z%LlQtMJ0b4R$`5k9q{>VcnT z-sONS#+1;?r@Y$1)7xq@%5kT^vpl|-1AKz-2W!iIntLVYO)GxtJNj{Go5#U6+g06< zaa$~7yx&Lpo#j0}ig8kBNT24H-oev+MqA97?0wnGA;%Ihe=cg|`9!5ecD_%2PHkk@ z#-uB>lNYGm-4gFS?W@{)ikYbM#Uc?`c~Z##Ar8NJ?Q5wim#j!%tqcqI{`;KPaWB(X z#7G* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/runpnunit.bat b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/runpnunit.bat new file mode 100644 index 0000000..a05cbb7 --- /dev/null +++ b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/runpnunit.bat @@ -0,0 +1,2 @@ +start pnunit-agent agent.conf +pnunit-launcher test.conf \ No newline at end of file diff --git a/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/test.conf b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/test.conf new file mode 100644 index 0000000..14cd113 --- /dev/null +++ b/trunk/hammock/src/packages/NUnit.2.5.10.11092/tools/test.conf @@ -0,0 +1,24 @@ + + + + + Testing + + + Testing + pnunit.tests.dll + TestLibraries.Testing.EqualTo19 + localhost:8080 + + ..\server + + + + + + + + + + + \ No newline at end of file diff --git a/trunk/hammock/src/packages/repositories.config b/trunk/hammock/src/packages/repositories.config new file mode 100644 index 0000000..3c995b1 --- /dev/null +++ b/trunk/hammock/src/packages/repositories.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file -- 1.7.10.4

    !JYn|7kl`0RHP`!?#qJkwu+p}7**SWL@ymr> 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

lM& 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�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