diff options
546 files changed, 1010 insertions, 18745 deletions
diff --git a/samples/OAuthConsumerWpf/Authorize2.xaml.cs b/samples/OAuthConsumerWpf/Authorize2.xaml.cs index 5785a6e..f45af5c 100644 --- a/samples/OAuthConsumerWpf/Authorize2.xaml.cs +++ b/samples/OAuthConsumerWpf/Authorize2.xaml.cs @@ -1,7 +1,6 @@ namespace DotNetOpenAuth.Samples.OAuthConsumerWpf { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using System.Windows; @@ -15,13 +14,14 @@ using System.Windows.Shapes; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OAuth2; + using Validation; /// <summary> /// Interaction logic for Authorize2.xaml /// </summary> public partial class Authorize2 : Window { internal Authorize2(UserAgentClient client) { - Contract.Requires(client != null, "client"); + Requires.NotNull(client, "client"); this.InitializeComponent(); this.clientAuthorizationView.Client = client; diff --git a/samples/OAuthConsumerWpf/OAuthConsumerWpf.csproj b/samples/OAuthConsumerWpf/OAuthConsumerWpf.csproj index 1879d92..11520bd 100644 --- a/samples/OAuthConsumerWpf/OAuthConsumerWpf.csproj +++ b/samples/OAuthConsumerWpf/OAuthConsumerWpf.csproj @@ -91,6 +91,10 @@ </Reference> <Reference Include="System.Data" /> <Reference Include="System.Xml" /> + <Reference Include="Validation, Version=2.0.0.0, Culture=neutral, PublicKeyToken=2fc06f0d701809a7, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\..\src\packages\Validation.2.0.0.12319\lib\portable-windows8+net40+sl5+windowsphone8\Validation.dll</HintPath> + </Reference> <Reference Include="WindowsFormsIntegration" /> <Reference Include="System.Windows.Forms" /> <Reference Include="UIAutomationProvider"> @@ -174,6 +178,7 @@ <None Include="App.config"> <SubType>Designer</SubType> </None> + <None Include="packages.config" /> <None Include="Properties\Settings.settings"> <Generator>SettingsSingleFileGenerator</Generator> <LastGenOutput>Settings.Designer.cs</LastGenOutput> diff --git a/samples/OAuthConsumerWpf/packages.config b/samples/OAuthConsumerWpf/packages.config new file mode 100644 index 0000000..10eec89 --- /dev/null +++ b/samples/OAuthConsumerWpf/packages.config @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="Validation" version="2.0.0.12319" targetFramework="net40" /> +</packages>
\ No newline at end of file diff --git a/samples/OpenIdOfflineProvider/CheckIdWindow.xaml.cs b/samples/OpenIdOfflineProvider/CheckIdWindow.xaml.cs index 65d329e..27bb802 100644 --- a/samples/OpenIdOfflineProvider/CheckIdWindow.xaml.cs +++ b/samples/OpenIdOfflineProvider/CheckIdWindow.xaml.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.OpenIdOfflineProvider { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using System.Windows; @@ -20,6 +19,7 @@ namespace DotNetOpenAuth.OpenIdOfflineProvider { using System.Windows.Shapes; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Provider; + using Validation; /// <summary> /// Interaction logic for CheckIdWindow.xaml @@ -31,7 +31,7 @@ namespace DotNetOpenAuth.OpenIdOfflineProvider { /// <param name="provider">The OpenID Provider host.</param> /// <param name="request">The incoming authentication request.</param> private CheckIdWindow(HostedProvider provider, IAuthenticationRequest request) { - Contract.Requires(request != null); + Requires.NotNull(request, "request"); this.InitializeComponent(); @@ -59,8 +59,8 @@ namespace DotNetOpenAuth.OpenIdOfflineProvider { /// <param name="provider">The OpenID Provider host.</param> /// <param name="request">The incoming authentication request.</param> internal static void ProcessAuthentication(HostedProvider provider, IAuthenticationRequest request) { - Contract.Requires(provider != null); - Contract.Requires(request != null); + Requires.NotNull(provider, "provider"); + Requires.NotNull(request, "request"); var window = new CheckIdWindow(provider, request); bool? result = window.ShowDialog(); diff --git a/samples/OpenIdOfflineProvider/HostedProvider.cs b/samples/OpenIdOfflineProvider/HostedProvider.cs index 0f10ba1..3c7692d 100644 --- a/samples/OpenIdOfflineProvider/HostedProvider.cs +++ b/samples/OpenIdOfflineProvider/HostedProvider.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.OpenIdOfflineProvider { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.IO; using System.Linq; using System.Net; @@ -16,6 +15,7 @@ namespace DotNetOpenAuth.OpenIdOfflineProvider { using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Provider; using log4net; + using Validation; /// <summary> /// The OpenID Provider host. @@ -79,7 +79,7 @@ namespace DotNetOpenAuth.OpenIdOfflineProvider { /// </summary> internal Uri ProviderEndpoint { get { - Contract.Requires(this.IsRunning); + Assumes.True(this.IsRunning); return new Uri(this.httpHost.BaseUri, ProviderPath); } } @@ -89,7 +89,7 @@ namespace DotNetOpenAuth.OpenIdOfflineProvider { /// </summary> internal Uri UserIdentityPageBase { get { - Contract.Requires(this.IsRunning); + Assumes.True(this.IsRunning); return new Uri(this.httpHost.BaseUri, UserIdentifierPath); } } @@ -99,7 +99,7 @@ namespace DotNetOpenAuth.OpenIdOfflineProvider { /// </summary> internal Uri OPIdentifier { get { - Contract.Requires(this.IsRunning); + Assumes.True(this.IsRunning); return new Uri(this.httpHost.BaseUri, OPIdentifierPath); } } @@ -115,7 +115,6 @@ namespace DotNetOpenAuth.OpenIdOfflineProvider { /// Starts the provider. /// </summary> internal void StartProvider() { - Contract.Ensures(this.IsRunning); this.httpHost = HttpHost.CreateHost(this.RequestHandler); } @@ -123,7 +122,6 @@ namespace DotNetOpenAuth.OpenIdOfflineProvider { /// Stops the provider. /// </summary> internal void StopProvider() { - Contract.Ensures(!this.IsRunning); if (this.httpHost != null) { this.httpHost.Dispose(); this.httpHost = null; @@ -156,7 +154,7 @@ namespace DotNetOpenAuth.OpenIdOfflineProvider { /// <param name="localId">The local id.</param> /// <returns>The HTML document to return to the RP.</returns> private static string GenerateHtmlDiscoveryDocument(Uri providerEndpoint, string localId) { - Contract.Requires(providerEndpoint != null); + Requires.NotNull(providerEndpoint, "providerEndpoint"); const string DelegatedHtmlDiscoveryFormat = @"<html><head> <link rel=""openid.server"" href=""{0}"" /> @@ -183,8 +181,8 @@ namespace DotNetOpenAuth.OpenIdOfflineProvider { /// <param name="supportedExtensions">The supported extensions.</param> /// <returns>The content of the XRDS document.</returns> private static string GenerateXrdsOPIdentifierDocument(Uri providerEndpoint, IEnumerable<string> supportedExtensions) { - Contract.Requires(providerEndpoint != null); - Contract.Requires(supportedExtensions != null); + Requires.NotNull(providerEndpoint, "providerEndpoint"); + Requires.NotNull(supportedExtensions, "supportedExtensions"); const string OPIdentifierDiscoveryFormat = @"<xrds:XRDS xmlns:xrds='xri://$xrds' @@ -213,11 +211,12 @@ namespace DotNetOpenAuth.OpenIdOfflineProvider { /// </summary> /// <param name="context">The HttpListener context.</param> private void RequestHandler(HttpListenerContext context) { - Contract.Requires(context != null); - Contract.Requires(context.Response.OutputStream != null); - Contract.Requires(this.ProcessRequest != null); + Requires.NotNull(context, "context"); + Requires.NotNull(context.Response.OutputStream, "context.Response.OutputStream"); + Requires.NotNull(this.ProcessRequest, "this.ProcessRequest"); + Stream outputStream = context.Response.OutputStream; - Contract.Assume(outputStream != null); // CC static verification shortcoming. + Assumes.True(outputStream != null); // CC static verification shortcoming. UriBuilder providerEndpointBuilder = new UriBuilder(); providerEndpointBuilder.Scheme = Uri.UriSchemeHttp; diff --git a/samples/OpenIdOfflineProvider/HttpHost.cs b/samples/OpenIdOfflineProvider/HttpHost.cs index 692307e..3eb0884 100644 --- a/samples/OpenIdOfflineProvider/HttpHost.cs +++ b/samples/OpenIdOfflineProvider/HttpHost.cs @@ -6,13 +6,13 @@ namespace DotNetOpenAuth.OpenIdOfflineProvider { using System; - using System.Diagnostics.Contracts; using System.Globalization; using System.IO; using System.Net; using System.Threading; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Provider; + using Validation; /// <summary> /// An HTTP Listener that dispatches incoming requests for handling. @@ -39,7 +39,7 @@ namespace DotNetOpenAuth.OpenIdOfflineProvider { /// </summary> /// <param name="handler">The handler for incoming HTTP requests.</param> private HttpHost(RequestHandler handler) { - Contract.Requires(handler != null); + Requires.NotNull(handler, "handler"); this.Port = 45235; this.handler = handler; @@ -85,8 +85,7 @@ namespace DotNetOpenAuth.OpenIdOfflineProvider { /// <param name="handler">The handler for incoming HTTP requests.</param> /// <returns>The instantiated host.</returns> public static HttpHost CreateHost(RequestHandler handler) { - Contract.Requires(handler != null); - Contract.Ensures(Contract.Result<HttpHost>() != null); + Requires.NotNull(handler, "handler"); return new HttpHost(handler); } @@ -119,7 +118,7 @@ namespace DotNetOpenAuth.OpenIdOfflineProvider { /// The HTTP listener thread body. /// </summary> private void ProcessRequests() { - Contract.Requires(this.listener != null); + Assumes.True(this.listener != null); while (true) { try { diff --git a/samples/OpenIdOfflineProvider/MainWindow.xaml.cs b/samples/OpenIdOfflineProvider/MainWindow.xaml.cs index 6bf7f6a..30847d0 100644 --- a/samples/OpenIdOfflineProvider/MainWindow.xaml.cs +++ b/samples/OpenIdOfflineProvider/MainWindow.xaml.cs @@ -8,7 +8,6 @@ namespace DotNetOpenAuth.OpenIdOfflineProvider { using System; using System.Collections.Generic; using System.Diagnostics; - using System.Diagnostics.Contracts; using System.Globalization; using System.IO; using System.Linq; diff --git a/samples/OpenIdOfflineProvider/OpenIdOfflineProvider.csproj b/samples/OpenIdOfflineProvider/OpenIdOfflineProvider.csproj index c03366e..e8a7bf9 100644 --- a/samples/OpenIdOfflineProvider/OpenIdOfflineProvider.csproj +++ b/samples/OpenIdOfflineProvider/OpenIdOfflineProvider.csproj @@ -4,7 +4,6 @@ <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> - <CodeContractsAssemblyMode>1</CodeContractsAssemblyMode> </PropertyGroup> <Import Project="$(ProjectRoot)tools\DotNetOpenAuth.props" /> <PropertyGroup> @@ -50,36 +49,6 @@ <DefineConstants>DEBUG;TRACE</DefineConstants> <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> - <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking> - <CodeContractsCustomRewriterAssembly> - </CodeContractsCustomRewriterAssembly> - <CodeContractsCustomRewriterClass> - </CodeContractsCustomRewriterClass> - <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel> - <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis> - <CodeContractsBuildReferenceAssembly>False</CodeContractsBuildReferenceAssembly> - <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations> - <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations> - <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations> - <CodeContractsLibPaths> - </CodeContractsLibPaths> - <CodeContractsPlatformPath> - </CodeContractsPlatformPath> - <CodeContractsExtraAnalysisOptions> - </CodeContractsExtraAnalysisOptions> - <CodeContractsBaseLineFile> - </CodeContractsBaseLineFile> - <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine> - <CodeContractsRunInBackground>True</CodeContractsRunInBackground> - <CodeContractsShowSquigglies>True</CodeContractsShowSquigglies> - <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface> - <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> - <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure> - <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires> - <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions> - <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs> - <CodeContractsExtraRewriteOptions /> - <CodeContractsReferenceAssembly>%28none%29</CodeContractsReferenceAssembly> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <DebugType>pdbonly</DebugType> @@ -114,6 +83,10 @@ <Reference Include="UIAutomationProvider"> <RequiredTargetFramework>3.0</RequiredTargetFramework> </Reference> + <Reference Include="Validation, Version=2.0.0.0, Culture=neutral, PublicKeyToken=2fc06f0d701809a7, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\..\src\packages\Validation.2.0.0.12319\lib\portable-windows8+net40+sl5+windowsphone8\Validation.dll</HintPath> + </Reference> <Reference Include="WindowsBase"> <RequiredTargetFramework>3.0</RequiredTargetFramework> </Reference> @@ -181,6 +154,7 @@ <LastGenOutput>Resources.Designer.cs</LastGenOutput> </EmbeddedResource> <None Include="App.config" /> + <None Include="packages.config" /> <None Include="Properties\Settings.settings"> <Generator>SettingsSingleFileGenerator</Generator> <LastGenOutput>Settings.Designer.cs</LastGenOutput> diff --git a/samples/OpenIdOfflineProvider/TextBoxTextWriter.cs b/samples/OpenIdOfflineProvider/TextBoxTextWriter.cs index b7a3549..b0dabbc 100644 --- a/samples/OpenIdOfflineProvider/TextBoxTextWriter.cs +++ b/samples/OpenIdOfflineProvider/TextBoxTextWriter.cs @@ -6,10 +6,10 @@ namespace DotNetOpenAuth.OpenIdOfflineProvider { using System; - using System.Diagnostics.Contracts; using System.IO; using System.Text; using System.Windows.Controls; + using Validation; /// <summary> /// A text writer that appends all write calls to a text box. @@ -20,7 +20,7 @@ namespace DotNetOpenAuth.OpenIdOfflineProvider { /// </summary> /// <param name="box">The text box to append log messages to.</param> internal TextBoxTextWriter(TextBox box) { - Contract.Requires(box != null); + Requires.NotNull(box, "box"); this.Box = box; } @@ -68,14 +68,6 @@ namespace DotNetOpenAuth.OpenIdOfflineProvider { } /// <summary> - /// Verifies conditions that should be true for any valid state of this object. - /// </summary> - [ContractInvariantMethod] - private void ObjectInvariant() { - Contract.Invariant(this.Box != null); - } - - /// <summary> /// Appends text to the text box. /// </summary> /// <param name="value">The string to append.</param> diff --git a/samples/OpenIdOfflineProvider/packages.config b/samples/OpenIdOfflineProvider/packages.config new file mode 100644 index 0000000..10eec89 --- /dev/null +++ b/samples/OpenIdOfflineProvider/packages.config @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="Validation" version="2.0.0.12319" targetFramework="net40" /> +</packages>
\ No newline at end of file diff --git a/src/DotNetOpenAuth.AspNet/Clients/OAuth/DotNetOpenAuthWebConsumer.cs b/src/DotNetOpenAuth.AspNet/Clients/OAuth/DotNetOpenAuthWebConsumer.cs index 9af6804..e216906 100644 --- a/src/DotNetOpenAuth.AspNet/Clients/OAuth/DotNetOpenAuthWebConsumer.cs +++ b/src/DotNetOpenAuth.AspNet/Clients/OAuth/DotNetOpenAuthWebConsumer.cs @@ -12,6 +12,7 @@ namespace DotNetOpenAuth.AspNet.Clients { using DotNetOpenAuth.OAuth; using DotNetOpenAuth.OAuth.ChannelElements; using DotNetOpenAuth.OAuth.Messages; + using Validation; /// <summary> /// The dot net open auth web consumer. diff --git a/src/DotNetOpenAuth.AspNet/Clients/OAuth/InMemoryOAuthTokenManager.cs b/src/DotNetOpenAuth.AspNet/Clients/OAuth/InMemoryOAuthTokenManager.cs index b45a65b..a7b641c 100644 --- a/src/DotNetOpenAuth.AspNet/Clients/OAuth/InMemoryOAuthTokenManager.cs +++ b/src/DotNetOpenAuth.AspNet/Clients/OAuth/InMemoryOAuthTokenManager.cs @@ -10,6 +10,7 @@ namespace DotNetOpenAuth.AspNet.Clients { using DotNetOpenAuth.OAuth; using DotNetOpenAuth.OAuth.ChannelElements; using DotNetOpenAuth.OAuth.Messages; + using Validation; /// <summary> /// An implementation of IOAuthTokenManager which stores keys in memory. diff --git a/src/DotNetOpenAuth.AspNet/Clients/OAuth/OAuthClient.cs b/src/DotNetOpenAuth.AspNet/Clients/OAuth/OAuthClient.cs index 1ae64fc..a0afeca 100644 --- a/src/DotNetOpenAuth.AspNet/Clients/OAuth/OAuthClient.cs +++ b/src/DotNetOpenAuth.AspNet/Clients/OAuth/OAuthClient.cs @@ -16,6 +16,7 @@ namespace DotNetOpenAuth.AspNet.Clients { using DotNetOpenAuth.OAuth; using DotNetOpenAuth.OAuth.ChannelElements; using DotNetOpenAuth.OAuth.Messages; + using Validation; /// <summary> /// Represents base class for OAuth 1.0 clients diff --git a/src/DotNetOpenAuth.AspNet/Clients/OAuth/SimpleConsumerTokenManager.cs b/src/DotNetOpenAuth.AspNet/Clients/OAuth/SimpleConsumerTokenManager.cs index 22156e9..899204c 100644 --- a/src/DotNetOpenAuth.AspNet/Clients/OAuth/SimpleConsumerTokenManager.cs +++ b/src/DotNetOpenAuth.AspNet/Clients/OAuth/SimpleConsumerTokenManager.cs @@ -7,6 +7,7 @@ namespace DotNetOpenAuth.AspNet.Clients { using System; using DotNetOpenAuth.OAuth.ChannelElements; + using Validation; /// <summary> /// Simple wrapper around IConsumerTokenManager diff --git a/src/DotNetOpenAuth.AspNet/Clients/OAuth2/FacebookClient.cs b/src/DotNetOpenAuth.AspNet/Clients/OAuth2/FacebookClient.cs index a8c121d..d20e452 100644 --- a/src/DotNetOpenAuth.AspNet/Clients/OAuth2/FacebookClient.cs +++ b/src/DotNetOpenAuth.AspNet/Clients/OAuth2/FacebookClient.cs @@ -11,6 +11,7 @@ namespace DotNetOpenAuth.AspNet.Clients { using System.Net; using System.Web; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// The facebook client. diff --git a/src/DotNetOpenAuth.AspNet/Clients/OAuth2/JsonHelper.cs b/src/DotNetOpenAuth.AspNet/Clients/OAuth2/JsonHelper.cs index a7ff79e..918a8a9 100644 --- a/src/DotNetOpenAuth.AspNet/Clients/OAuth2/JsonHelper.cs +++ b/src/DotNetOpenAuth.AspNet/Clients/OAuth2/JsonHelper.cs @@ -8,6 +8,7 @@ namespace DotNetOpenAuth.AspNet.Clients { using System; using System.IO; using System.Runtime.Serialization.Json; + using Validation; /// <summary> /// The json helper. diff --git a/src/DotNetOpenAuth.AspNet/Clients/OAuth2/MicrosoftClient.cs b/src/DotNetOpenAuth.AspNet/Clients/OAuth2/MicrosoftClient.cs index 653a0b0..3e5f71f 100644 --- a/src/DotNetOpenAuth.AspNet/Clients/OAuth2/MicrosoftClient.cs +++ b/src/DotNetOpenAuth.AspNet/Clients/OAuth2/MicrosoftClient.cs @@ -10,6 +10,7 @@ namespace DotNetOpenAuth.AspNet.Clients { using System.IO; using System.Net; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// The Microsoft account client. diff --git a/src/DotNetOpenAuth.AspNet/Clients/OAuth2/OAuth2Client.cs b/src/DotNetOpenAuth.AspNet/Clients/OAuth2/OAuth2Client.cs index 138fac2..014f459 100644 --- a/src/DotNetOpenAuth.AspNet/Clients/OAuth2/OAuth2Client.cs +++ b/src/DotNetOpenAuth.AspNet/Clients/OAuth2/OAuth2Client.cs @@ -9,6 +9,7 @@ namespace DotNetOpenAuth.AspNet.Clients { using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Web; + using Validation; /// <summary> /// Represents the base class for OAuth 2.0 clients diff --git a/src/DotNetOpenAuth.AspNet/Clients/OpenID/OpenIDClient.cs b/src/DotNetOpenAuth.AspNet/Clients/OpenID/OpenIDClient.cs index bd706f5..a41b504 100644 --- a/src/DotNetOpenAuth.AspNet/Clients/OpenID/OpenIDClient.cs +++ b/src/DotNetOpenAuth.AspNet/Clients/OpenID/OpenIDClient.cs @@ -12,6 +12,7 @@ namespace DotNetOpenAuth.AspNet.Clients { using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId; using DotNetOpenAuth.OpenId.RelyingParty; + using Validation; /// <summary> /// Base classes for OpenID clients. diff --git a/src/DotNetOpenAuth.AspNet/DotNetOpenAuth.AspNet.csproj b/src/DotNetOpenAuth.AspNet/DotNetOpenAuth.AspNet.csproj index 405ac3c..c608c97 100644 --- a/src/DotNetOpenAuth.AspNet/DotNetOpenAuth.AspNet.csproj +++ b/src/DotNetOpenAuth.AspNet/DotNetOpenAuth.AspNet.csproj @@ -40,6 +40,10 @@ <Reference Include="Microsoft.CSharp" /> <Reference Include="System.Data" /> <Reference Include="System.Xml" /> + <Reference Include="Validation, Version=2.0.0.0, Culture=neutral, PublicKeyToken=2fc06f0d701809a7, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\Validation.2.0.0.12319\lib\portable-windows8+net40+sl5+windowsphone8\Validation.dll</HintPath> + </Reference> </ItemGroup> <ItemGroup> <Compile Include="AuthenticationResult.cs" /> @@ -108,6 +112,9 @@ <Name>DotNetOpenAuth.OpenId</Name> </ProjectReference> </ItemGroup> + <ItemGroup> + <None Include="packages.config" /> + </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(ProjectRoot)tools\DotNetOpenAuth.targets" /> <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))\EnlistmentInfo.targets" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))' != '' " /> diff --git a/src/DotNetOpenAuth.AspNet/OpenAuthAuthenticationTicketHelper.cs b/src/DotNetOpenAuth.AspNet/OpenAuthAuthenticationTicketHelper.cs index f51de1c..63f89b7 100644 --- a/src/DotNetOpenAuth.AspNet/OpenAuthAuthenticationTicketHelper.cs +++ b/src/DotNetOpenAuth.AspNet/OpenAuthAuthenticationTicketHelper.cs @@ -9,6 +9,7 @@ namespace DotNetOpenAuth.AspNet { using System.Diagnostics; using System.Web; using System.Web.Security; + using Validation; /// <summary> /// Helper methods for setting and retrieving a custom forms authentication ticket for delegation protocols. diff --git a/src/DotNetOpenAuth.AspNet/OpenAuthSecurityManager.cs b/src/DotNetOpenAuth.AspNet/OpenAuthSecurityManager.cs index 2d18b7b..6736205 100644 --- a/src/DotNetOpenAuth.AspNet/OpenAuthSecurityManager.cs +++ b/src/DotNetOpenAuth.AspNet/OpenAuthSecurityManager.cs @@ -12,6 +12,7 @@ namespace DotNetOpenAuth.AspNet { using System.Web.Security; using DotNetOpenAuth.AspNet.Clients; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// Manage authenticating with an external OAuth or OpenID provider diff --git a/src/DotNetOpenAuth.AspNet/packages.config b/src/DotNetOpenAuth.AspNet/packages.config new file mode 100644 index 0000000..10eec89 --- /dev/null +++ b/src/DotNetOpenAuth.AspNet/packages.config @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="Validation" version="2.0.0.12319" targetFramework="net40" /> +</packages>
\ No newline at end of file diff --git a/src/DotNetOpenAuth.BuildTasks/DotNetOpenAuth.BuildTasks.csproj b/src/DotNetOpenAuth.BuildTasks/DotNetOpenAuth.BuildTasks.csproj index f7d7256..64e3ab9 100644 --- a/src/DotNetOpenAuth.BuildTasks/DotNetOpenAuth.BuildTasks.csproj +++ b/src/DotNetOpenAuth.BuildTasks/DotNetOpenAuth.BuildTasks.csproj @@ -28,7 +28,6 @@ <IsWebBootstrapper>false</IsWebBootstrapper> <UseApplicationTrust>false</UseApplicationTrust> <BootstrapperEnabled>true</BootstrapperEnabled> - <CodeContractsAssemblyMode>1</CodeContractsAssemblyMode> <TargetFrameworkProfile /> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> @@ -39,35 +38,7 @@ <DefineConstants>DEBUG;TRACE</DefineConstants> <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> - <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking> - <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface> - <CodeContractsRuntimeThrowOnFailure>False</CodeContractsRuntimeThrowOnFailure> - <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires> - <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis> - <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations> - <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations> - <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations> - <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions> - <CodeContractsRunInBackground>True</CodeContractsRunInBackground> - <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies> - <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine> - <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs> - <CodeContractsCustomRewriterAssembly> - </CodeContractsCustomRewriterAssembly> - <CodeContractsCustomRewriterClass> - </CodeContractsCustomRewriterClass> - <CodeContractsLibPaths> - </CodeContractsLibPaths> - <CodeContractsPlatformPath> - </CodeContractsPlatformPath> - <CodeContractsExtraAnalysisOptions> - </CodeContractsExtraAnalysisOptions> - <CodeContractsBaseLineFile> - </CodeContractsBaseLineFile> - <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel> - <CodeContractsReferenceAssembly>%28none%29</CodeContractsReferenceAssembly> <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> - <CodeContractsExtraRewriteOptions /> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <DebugType>pdbonly</DebugType> diff --git a/src/DotNetOpenAuth.Core.UI/ComponentModel/ConverterBase.cs b/src/DotNetOpenAuth.Core.UI/ComponentModel/ConverterBase.cs index ca17197..eec2304 100644 --- a/src/DotNetOpenAuth.Core.UI/ComponentModel/ConverterBase.cs +++ b/src/DotNetOpenAuth.Core.UI/ComponentModel/ConverterBase.cs @@ -145,7 +145,7 @@ namespace DotNetOpenAuth.ComponentModel { /// </exception> [SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "System.Diagnostics.Contracts.__ContractsRuntime.Assume(System.Boolean,System.String,System.String)", Justification = "No localization required.")] public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { - Contract.Assume(destinationType != null, "Missing contract."); + Assumes.True(destinationType != null, "Missing contract."); if (destinationType.IsInstanceOfType(value)) { return value; } @@ -181,7 +181,6 @@ namespace DotNetOpenAuth.ComponentModel { [Pure] [SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate", Justification = "Potentially expensive call.")] protected virtual ICollection GetStandardValuesForCache() { - Contract.Ensures(Contract.Result<ICollection>() != null); return new T[0]; } diff --git a/src/DotNetOpenAuth.Core.UI/ComponentModel/SuggestedStringsConverter.cs b/src/DotNetOpenAuth.Core.UI/ComponentModel/SuggestedStringsConverter.cs index c382716..fd960d3 100644 --- a/src/DotNetOpenAuth.Core.UI/ComponentModel/SuggestedStringsConverter.cs +++ b/src/DotNetOpenAuth.Core.UI/ComponentModel/SuggestedStringsConverter.cs @@ -11,12 +11,12 @@ namespace DotNetOpenAuth.ComponentModel { using System.Diagnostics.Contracts; using System.Linq; using System.Reflection; + using Validation; /// <summary> /// A type that generates suggested strings for Intellisense, /// but doesn't actually convert between strings and other types. /// </summary> - [ContractClass(typeof(SuggestedStringsConverterContract))] public abstract class SuggestedStringsConverter : ConverterBase<string> { /// <summary> /// Initializes a new instance of the <see cref="SuggestedStringsConverter"/> class. @@ -37,7 +37,6 @@ namespace DotNetOpenAuth.ComponentModel { /// <returns>A collection of values.</returns> internal static ICollection GetStandardValuesForCacheShared(Type type) { Requires.NotNull(type, "type"); - Contract.Ensures(Contract.Result<ICollection>() != null); var fields = from field in type.GetFields(BindingFlags.Static | BindingFlags.Public) select field.GetValue(null); diff --git a/src/DotNetOpenAuth.Core.UI/ComponentModel/SuggestedStringsConverterContract.cs b/src/DotNetOpenAuth.Core.UI/ComponentModel/SuggestedStringsConverterContract.cs deleted file mode 100644 index dbd2278..0000000 --- a/src/DotNetOpenAuth.Core.UI/ComponentModel/SuggestedStringsConverterContract.cs +++ /dev/null @@ -1,30 +0,0 @@ -//----------------------------------------------------------------------- -// <copyright file="SuggestedStringsConverterContract.cs" company="Outercurve Foundation"> -// Copyright (c) Outercurve Foundation. All rights reserved. -// </copyright> -//----------------------------------------------------------------------- - -namespace DotNetOpenAuth.ComponentModel { - using System; - using System.Collections; - using System.ComponentModel.Design.Serialization; - using System.Diagnostics.Contracts; - using System.Linq; - using System.Reflection; - - /// <summary> - /// Contract class for the <see cref="SuggestedStringsConverter"/> class. - /// </summary> - [ContractClassFor(typeof(SuggestedStringsConverter))] - internal abstract class SuggestedStringsConverterContract : SuggestedStringsConverter { - /// <summary> - /// Gets the type to reflect over for the well known values. - /// </summary> - protected override Type WellKnownValuesType { - get { - Contract.Ensures(Contract.Result<Type>() != null); - throw new NotImplementedException(); - } - } - } -} diff --git a/src/DotNetOpenAuth.Core.UI/DotNetOpenAuth.Core.UI.csproj b/src/DotNetOpenAuth.Core.UI/DotNetOpenAuth.Core.UI.csproj index eba7fbe..1b138c7 100644 --- a/src/DotNetOpenAuth.Core.UI/DotNetOpenAuth.Core.UI.csproj +++ b/src/DotNetOpenAuth.Core.UI/DotNetOpenAuth.Core.UI.csproj @@ -23,7 +23,6 @@ <Compile Include="ComponentModel\ClaimTypeSuggestions.cs" /> <Compile Include="ComponentModel\ConverterBase.cs" /> <Compile Include="ComponentModel\SuggestedStringsConverter.cs" /> - <Compile Include="ComponentModel\SuggestedStringsConverterContract.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> </ItemGroup> <ItemGroup> @@ -32,6 +31,15 @@ <Name>DotNetOpenAuth.Core</Name> </ProjectReference> </ItemGroup> + <ItemGroup> + <Reference Include="Validation, Version=2.0.0.0, Culture=neutral, PublicKeyToken=2fc06f0d701809a7, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\Validation.2.0.0.12319\lib\portable-windows8+net40+sl5+windowsphone8\Validation.dll</HintPath> + </Reference> + </ItemGroup> + <ItemGroup> + <None Include="packages.config" /> + </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(ProjectRoot)tools\DotNetOpenAuth.targets" /> <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))\EnlistmentInfo.targets" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))' != '' " /> diff --git a/src/DotNetOpenAuth.Core.UI/Properties/AssemblyInfo.cs b/src/DotNetOpenAuth.Core.UI/Properties/AssemblyInfo.cs index 4eb88a3..23a9f9b 100644 --- a/src/DotNetOpenAuth.Core.UI/Properties/AssemblyInfo.cs +++ b/src/DotNetOpenAuth.Core.UI/Properties/AssemblyInfo.cs @@ -7,7 +7,6 @@ // We DON'T put an AssemblyVersionAttribute in here because it is generated in the build. using System; -using System.Diagnostics.Contracts; using System.Net; using System.Reflection; using System.Resources; @@ -33,8 +32,6 @@ using System.Web.UI; // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("7d73990c-47c0-4256-9f20-a893add9e289")] -[assembly: ContractVerification(true)] - #if StrongNameSigned // See comment at top of this file. We need this so that strong-naming doesn't // keep this assembly from being useful to shared host (medium trust) web sites. diff --git a/src/DotNetOpenAuth.Core.UI/packages.config b/src/DotNetOpenAuth.Core.UI/packages.config new file mode 100644 index 0000000..10eec89 --- /dev/null +++ b/src/DotNetOpenAuth.Core.UI/packages.config @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="Validation" version="2.0.0.12319" targetFramework="net40" /> +</packages>
\ No newline at end of file diff --git a/src/DotNetOpenAuth.Core/Configuration/DotNetOpenAuthSection.cs b/src/DotNetOpenAuth.Core/Configuration/DotNetOpenAuthSection.cs index 7c03c48..cdcd670 100644 --- a/src/DotNetOpenAuth.Core/Configuration/DotNetOpenAuthSection.cs +++ b/src/DotNetOpenAuth.Core/Configuration/DotNetOpenAuthSection.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.Configuration { using System; using System.Configuration; - using System.Diagnostics.Contracts; using System.Web; using System.Web.Configuration; @@ -15,7 +14,6 @@ namespace DotNetOpenAuth.Configuration { /// Represents the section in the host's .config file that configures /// this library's settings. /// </summary> - [ContractVerification(true)] public class DotNetOpenAuthSection : ConfigurationSectionGroup { /// <summary> /// The name of the section under which this library's settings must be found. diff --git a/src/DotNetOpenAuth.Core/Configuration/HostNameElement.cs b/src/DotNetOpenAuth.Core/Configuration/HostNameElement.cs index b46ece9..5386314 100644 --- a/src/DotNetOpenAuth.Core/Configuration/HostNameElement.cs +++ b/src/DotNetOpenAuth.Core/Configuration/HostNameElement.cs @@ -6,12 +6,10 @@ namespace DotNetOpenAuth.Configuration { using System.Configuration; - using System.Diagnostics.Contracts; /// <summary> /// Represents the name of a single host or a regex pattern for host names. /// </summary> - [ContractVerification(true)] internal class HostNameElement : ConfigurationElement { /// <summary> /// Gets the name of the @name attribute. diff --git a/src/DotNetOpenAuth.Core/Configuration/HostNameOrRegexCollection.cs b/src/DotNetOpenAuth.Core/Configuration/HostNameOrRegexCollection.cs index f009ce5..8f537c3 100644 --- a/src/DotNetOpenAuth.Core/Configuration/HostNameOrRegexCollection.cs +++ b/src/DotNetOpenAuth.Core/Configuration/HostNameOrRegexCollection.cs @@ -7,13 +7,12 @@ namespace DotNetOpenAuth.Configuration { using System.Collections.Generic; using System.Configuration; - using System.Diagnostics.Contracts; using System.Text.RegularExpressions; + using Validation; /// <summary> /// Represents a collection of child elements that describe host names either as literal host names or regex patterns. /// </summary> - [ContractVerification(true)] internal class HostNameOrRegexCollection : ConfigurationElementCollection { /// <summary> /// Initializes a new instance of the <see cref="HostNameOrRegexCollection"/> class. @@ -63,7 +62,7 @@ namespace DotNetOpenAuth.Configuration { /// An <see cref="T:System.Object"/> that acts as the key for the specified <see cref="T:System.Configuration.ConfigurationElement"/>. /// </returns> protected override object GetElementKey(ConfigurationElement element) { - Contract.Assume(element != null); // this should be Contract.Requires in base class. + Requires.NotNull(element, "element"); return ((HostNameElement)element).Name ?? string.Empty; } } diff --git a/src/DotNetOpenAuth.Core/Configuration/MessagingElement.cs b/src/DotNetOpenAuth.Core/Configuration/MessagingElement.cs index ff98d36..64dfba3 100644 --- a/src/DotNetOpenAuth.Core/Configuration/MessagingElement.cs +++ b/src/DotNetOpenAuth.Core/Configuration/MessagingElement.cs @@ -7,14 +7,12 @@ namespace DotNetOpenAuth.Configuration { using System; using System.Configuration; - using System.Diagnostics.Contracts; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Messaging.Bindings; /// <summary> /// Represents the <messaging> element in the host's .config file. /// </summary> - [ContractVerification(true)] public class MessagingElement : ConfigurationSection { /// <summary> /// The name of the <webResourceUrlProvider> sub-element. @@ -75,7 +73,6 @@ namespace DotNetOpenAuth.Configuration { /// </summary> public static MessagingElement Configuration { get { - Contract.Ensures(Contract.Result<MessagingElement>() != null); return (MessagingElement)ConfigurationManager.GetSection(MessagingElementName) ?? new MessagingElement(); } } diff --git a/src/DotNetOpenAuth.Core/Configuration/ReportingElement.cs b/src/DotNetOpenAuth.Core/Configuration/ReportingElement.cs index 0af8205..f0184a6 100644 --- a/src/DotNetOpenAuth.Core/Configuration/ReportingElement.cs +++ b/src/DotNetOpenAuth.Core/Configuration/ReportingElement.cs @@ -8,7 +8,6 @@ namespace DotNetOpenAuth.Configuration { using System; using System.Collections.Generic; using System.Configuration; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; @@ -76,7 +75,6 @@ namespace DotNetOpenAuth.Configuration { /// </summary> public static ReportingElement Configuration { get { - Contract.Ensures(Contract.Result<ReportingElement>() != null); return (ReportingElement)ConfigurationManager.GetSection(ReportingElementName) ?? new ReportingElement(); } } diff --git a/src/DotNetOpenAuth.Core/Configuration/TrustedProviderConfigurationCollection.cs b/src/DotNetOpenAuth.Core/Configuration/TrustedProviderConfigurationCollection.cs index 96f60bf..de70f64 100644 --- a/src/DotNetOpenAuth.Core/Configuration/TrustedProviderConfigurationCollection.cs +++ b/src/DotNetOpenAuth.Core/Configuration/TrustedProviderConfigurationCollection.cs @@ -9,7 +9,7 @@ namespace DotNetOpenAuth.Configuration { using System.Collections.Generic; using System.Configuration; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; + using Validation; /// <summary> /// A configuration collection of trusted OP Endpoints. diff --git a/src/DotNetOpenAuth.Core/Configuration/TypeConfigurationCollection.cs b/src/DotNetOpenAuth.Core/Configuration/TypeConfigurationCollection.cs index 3e72722..08bd2a1 100644 --- a/src/DotNetOpenAuth.Core/Configuration/TypeConfigurationCollection.cs +++ b/src/DotNetOpenAuth.Core/Configuration/TypeConfigurationCollection.cs @@ -8,16 +8,15 @@ namespace DotNetOpenAuth.Configuration { using System; using System.Collections.Generic; using System.Configuration; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// A collection of <see cref="TypeConfigurationElement<T>"/>. /// </summary> /// <typeparam name="T">The type that all types specified in the elements must derive from.</typeparam> - [ContractVerification(true)] internal class TypeConfigurationCollection<T> : ConfigurationElementCollection where T : class { /// <summary> @@ -44,7 +43,6 @@ namespace DotNetOpenAuth.Configuration { /// <param name="allowInternals">if set to <c>true</c> then internal types may be instantiated.</param> /// <returns>A sequence of instances generated from types in this collection. May be empty, but never null.</returns> internal IEnumerable<T> CreateInstances(bool allowInternals) { - Contract.Ensures(Contract.Result<IEnumerable<T>>() != null); return from element in this.Cast<TypeConfigurationElement<T>>() where !element.IsEmpty select element.CreateInstance(default(T), allowInternals); @@ -68,7 +66,7 @@ namespace DotNetOpenAuth.Configuration { /// An <see cref="T:System.Object"/> that acts as the key for the specified <see cref="T:System.Configuration.ConfigurationElement"/>. /// </returns> protected override object GetElementKey(ConfigurationElement element) { - Contract.Assume(element != null); // this should be Contract.Requires in base class. + Requires.NotNull(element, "element"); TypeConfigurationElement<T> typedElement = (TypeConfigurationElement<T>)element; return (!string.IsNullOrEmpty(typedElement.TypeName) ? typedElement.TypeName : typedElement.XamlSource) ?? string.Empty; } diff --git a/src/DotNetOpenAuth.Core/Configuration/TypeConfigurationElement.cs b/src/DotNetOpenAuth.Core/Configuration/TypeConfigurationElement.cs index edbb614..a3a8140 100644 --- a/src/DotNetOpenAuth.Core/Configuration/TypeConfigurationElement.cs +++ b/src/DotNetOpenAuth.Core/Configuration/TypeConfigurationElement.cs @@ -8,7 +8,6 @@ namespace DotNetOpenAuth.Configuration { using System; using System.Configuration; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.IO; using System.Reflection; using System.Web; @@ -82,8 +81,6 @@ namespace DotNetOpenAuth.Configuration { /// <param name="defaultValue">The value to return if no type is given in the .config file.</param> /// <returns>The newly instantiated type.</returns> public T CreateInstance(T defaultValue) { - Contract.Ensures(Contract.Result<T>() != null || Contract.Result<T>() == defaultValue); - return this.CreateInstance(defaultValue, false); } @@ -95,8 +92,6 @@ namespace DotNetOpenAuth.Configuration { /// <returns>The newly instantiated type.</returns> [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Justification = "No apparent problem. False positive?")] public T CreateInstance(T defaultValue, bool allowInternals) { - Contract.Ensures(Contract.Result<T>() != null || Contract.Result<T>() == defaultValue); - if (this.CustomType != null) { if (!allowInternals) { // Although .NET will usually prevent our instantiating non-public types, @@ -132,7 +127,6 @@ namespace DotNetOpenAuth.Configuration { /// be present. /// </remarks> private static T CreateInstanceFromXaml(Stream xaml) { - Contract.Ensures(Contract.Result<T>() != null); #if CLR4 return (T)XamlServices.Load(xaml); #else diff --git a/src/DotNetOpenAuth.Core/Configuration/UntrustedWebRequestElement.cs b/src/DotNetOpenAuth.Core/Configuration/UntrustedWebRequestElement.cs index b49452a..a16522a 100644 --- a/src/DotNetOpenAuth.Core/Configuration/UntrustedWebRequestElement.cs +++ b/src/DotNetOpenAuth.Core/Configuration/UntrustedWebRequestElement.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.Configuration { using System; using System.Configuration; - using System.Diagnostics.Contracts; /// <summary> /// Represents the section of a .config file where security policies regarding web requests diff --git a/src/DotNetOpenAuth.Core/DotNetOpenAuth.Core.csproj b/src/DotNetOpenAuth.Core/DotNetOpenAuth.Core.csproj index dc47259..71965ed 100644 --- a/src/DotNetOpenAuth.Core/DotNetOpenAuth.Core.csproj +++ b/src/DotNetOpenAuth.Core/DotNetOpenAuth.Core.csproj @@ -27,12 +27,10 @@ <Compile Include="Messaging\Bindings\MemoryCryptoKeyStore.cs" /> <Compile Include="Messaging\BinaryDataBagFormatter.cs" /> <Compile Include="Messaging\CachedDirectWebResponse.cs" /> - <Compile Include="Messaging\ChannelContract.cs" /> <Compile Include="Messaging\DataBagFormatterBase.cs" /> <Compile Include="Messaging\HmacAlgorithms.cs" /> <Compile Include="Messaging\HttpRequestHeaders.cs" /> <Compile Include="Messaging\IHttpDirectRequest.cs" /> - <Compile Include="Messaging\IHttpDirectRequestContract.cs" /> <Compile Include="Messaging\IHttpIndirectResponse.cs" /> <Compile Include="Messaging\IMessageOriginalPayload.cs" /> <Compile Include="Messaging\DirectWebRequestOptions.cs" /> @@ -40,7 +38,6 @@ <Compile Include="Messaging\HostErrorException.cs" /> <Compile Include="Messaging\IHttpDirectResponse.cs" /> <Compile Include="Messaging\IExtensionMessage.cs" /> - <Compile Include="Messaging\IHttpDirectResponseContract.cs" /> <Compile Include="Messaging\IMessage.cs" /> <Compile Include="Messaging\IncomingWebResponse.cs" /> <Compile Include="Messaging\IDirectResponseProtocolMessage.cs" /> @@ -49,7 +46,6 @@ <Compile Include="Messaging\EmptyList.cs" /> <Compile Include="Messaging\ErrorUtilities.cs" /> <Compile Include="Messaging\IMessageWithEvents.cs" /> - <Compile Include="Messaging\IncomingWebResponseContract.cs" /> <Compile Include="Messaging\IProtocolMessageWithExtensions.cs" /> <Compile Include="Messaging\InternalErrorException.cs" /> <Compile Include="Messaging\IStreamSerializingDataBag.cs" /> @@ -116,6 +112,7 @@ <None Include="Messaging\Bindings\Bindings.cd" /> <None Include="Messaging\Exceptions.cd" /> <None Include="Messaging\Messaging.cd" /> + <None Include="packages.config" /> </ItemGroup> <ItemGroup> <Compile Include="Configuration\DotNetOpenAuthSection.cs" /> @@ -136,8 +133,9 @@ <Compile Include="Loggers\TraceLogger.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Messaging\ReadOnlyDictionary.cs" /> + <Compile Include="PureAttribute.cs" /> <Compile Include="Reporting.cs" /> - <Compile Include="Requires.cs" /> + <Compile Include="RequiresEx.cs" /> <Compile Include="Strings.Designer.cs"> <AutoGen>True</AutoGen> <DesignTime>True</DesignTime> @@ -173,6 +171,9 @@ <Reference Include="log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> </Reference> + <Reference Include="Validation"> + <HintPath>..\packages\Validation.2.0.0.12319\lib\portable-windows8+net40+sl5+windowsphone8\Validation.dll</HintPath> + </Reference> </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(ProjectRoot)tools\DotNetOpenAuth.targets" /> diff --git a/src/DotNetOpenAuth.Core/Logger.cs b/src/DotNetOpenAuth.Core/Logger.cs index 975b391..cf9343b 100644 --- a/src/DotNetOpenAuth.Core/Logger.cs +++ b/src/DotNetOpenAuth.Core/Logger.cs @@ -6,11 +6,11 @@ namespace DotNetOpenAuth { using System; - using System.Diagnostics.Contracts; using System.Globalization; using DotNetOpenAuth.Loggers; using DotNetOpenAuth.Messaging; using log4net.Core; + using Validation; /// <summary> /// A general logger for the entire DotNetOpenAuth library. diff --git a/src/DotNetOpenAuth.Core/Messaging/BinaryDataBagFormatter.cs b/src/DotNetOpenAuth.Core/Messaging/BinaryDataBagFormatter.cs index 4f4bf0e..554205a 100644 --- a/src/DotNetOpenAuth.Core/Messaging/BinaryDataBagFormatter.cs +++ b/src/DotNetOpenAuth.Core/Messaging/BinaryDataBagFormatter.cs @@ -8,12 +8,12 @@ namespace DotNetOpenAuth.Messaging { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.IO; using System.Linq; using System.Security.Cryptography; using System.Text; using DotNetOpenAuth.Messaging.Bindings; + using Validation; /// <summary> /// A compact binary <see cref="DataBag"/> serialization class. @@ -45,7 +45,7 @@ namespace DotNetOpenAuth.Messaging { /// <param name="decodeOnceOnly">The nonce store to use to ensure that this instance is only decoded once.</param> protected internal BinaryDataBagFormatter(ICryptoKeyStore cryptoKeyStore = null, string bucket = null, bool signed = false, bool encrypted = false, bool compressed = false, TimeSpan? minimumAge = null, TimeSpan? maximumAge = null, INonceStore decodeOnceOnly = null) : base(cryptoKeyStore, bucket, signed, encrypted, compressed, minimumAge, maximumAge, decodeOnceOnly) { - Requires.True((cryptoKeyStore != null && bucket != null) || (!signed && !encrypted), null); + Requires.That((cryptoKeyStore != null && bucket != null) || (!signed && !encrypted), null, "Signing or encryption requires a crypto key store and bucket."); } /// <summary> diff --git a/src/DotNetOpenAuth.Core/Messaging/Bindings/AsymmetricCryptoKeyStoreWrapper.cs b/src/DotNetOpenAuth.Core/Messaging/Bindings/AsymmetricCryptoKeyStoreWrapper.cs index 4cb5337..0439908 100644 --- a/src/DotNetOpenAuth.Core/Messaging/Bindings/AsymmetricCryptoKeyStoreWrapper.cs +++ b/src/DotNetOpenAuth.Core/Messaging/Bindings/AsymmetricCryptoKeyStoreWrapper.cs @@ -8,11 +8,11 @@ namespace DotNetOpenAuth.Messaging.Bindings { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Linq; using System.Security.Cryptography; using System.Text; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// Provides RSA encryption of symmetric keys to protect them from a theft of @@ -42,7 +42,7 @@ namespace DotNetOpenAuth.Messaging.Bindings { public AsymmetricCryptoKeyStoreWrapper(ICryptoKeyStore dataStore, RSACryptoServiceProvider asymmetricCrypto) { Requires.NotNull(dataStore, "dataStore"); Requires.NotNull(asymmetricCrypto, "asymmetricCrypto"); - Requires.True(!asymmetricCrypto.PublicOnly, "asymmetricCrypto"); + Requires.That(!asymmetricCrypto.PublicOnly, "asymmetricCrypto", "Private key required."); this.dataStore = dataStore; this.asymmetricCrypto = asymmetricCrypto; } @@ -138,9 +138,9 @@ namespace DotNetOpenAuth.Messaging.Bindings { /// <param name="decrypted">The decrypted key.</param> internal CachedCryptoKey(CryptoKey encrypted, CryptoKey decrypted) : base(decrypted.Key, decrypted.ExpiresUtc) { - Contract.Requires(encrypted != null); - Contract.Requires(decrypted != null); - Contract.Requires(encrypted.ExpiresUtc == decrypted.ExpiresUtc); + Requires.NotNull(encrypted, "encrypted"); + Requires.NotNull(decrypted, "decrypted"); + Requires.That(encrypted.ExpiresUtc == decrypted.ExpiresUtc, "encrypted", "encrypted and decrypted expirations must equal."); this.EncryptedKey = encrypted.Key; } @@ -149,16 +149,6 @@ namespace DotNetOpenAuth.Messaging.Bindings { /// Gets the encrypted key. /// </summary> internal byte[] EncryptedKey { get; private set; } - - /// <summary> - /// Invariant conditions. - /// </summary> - [ContractInvariantMethod] - [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Justification = "Code contracts")] - [SuppressMessage("Microsoft.Performance", "CA1822:MarkMembersAsStatic", Justification = "Required for code contracts.")] - private void ObjectInvariant() { - Contract.Invariant(this.EncryptedKey != null); - } } } } diff --git a/src/DotNetOpenAuth.Core/Messaging/Bindings/CryptoKey.cs b/src/DotNetOpenAuth.Core/Messaging/Bindings/CryptoKey.cs index 3fa50d4..d6fef62 100644 --- a/src/DotNetOpenAuth.Core/Messaging/Bindings/CryptoKey.cs +++ b/src/DotNetOpenAuth.Core/Messaging/Bindings/CryptoKey.cs @@ -8,10 +8,10 @@ namespace DotNetOpenAuth.Messaging.Bindings { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// A cryptographic key and metadata concerning it. @@ -34,7 +34,7 @@ namespace DotNetOpenAuth.Messaging.Bindings { /// <param name="expiresUtc">The expires UTC.</param> public CryptoKey(byte[] key, DateTime expiresUtc) { Requires.NotNull(key, "key"); - Requires.True(expiresUtc.Kind == DateTimeKind.Utc, "expiresUtc"); + Requires.That(expiresUtc.Kind == DateTimeKind.Utc, "expiresUtc", "Time must be expressed in UTC."); this.key = key; this.expiresUtc = expiresUtc; } @@ -45,7 +45,6 @@ namespace DotNetOpenAuth.Messaging.Bindings { [SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays", Justification = "It's a buffer")] public byte[] Key { get { - Contract.Ensures(Contract.Result<byte[]>() != null); return this.key; } } @@ -55,7 +54,6 @@ namespace DotNetOpenAuth.Messaging.Bindings { /// </summary> public DateTime ExpiresUtc { get { - Contract.Ensures(Contract.Result<DateTime>().Kind == DateTimeKind.Utc); return this.expiresUtc; } } diff --git a/src/DotNetOpenAuth.Core/Messaging/Bindings/ExpiredMessageException.cs b/src/DotNetOpenAuth.Core/Messaging/Bindings/ExpiredMessageException.cs index 88b8fed..8c5db3c 100644 --- a/src/DotNetOpenAuth.Core/Messaging/Bindings/ExpiredMessageException.cs +++ b/src/DotNetOpenAuth.Core/Messaging/Bindings/ExpiredMessageException.cs @@ -6,8 +6,8 @@ namespace DotNetOpenAuth.Messaging.Bindings { using System; - using System.Diagnostics.Contracts; using System.Globalization; + using Validation; /// <summary> /// An exception thrown when a message is received that exceeds the maximum message age limit. @@ -21,7 +21,7 @@ namespace DotNetOpenAuth.Messaging.Bindings { /// <param name="faultedMessage">The expired message.</param> public ExpiredMessageException(DateTime utcExpirationDate, IProtocolMessage faultedMessage) : base(string.Format(CultureInfo.CurrentCulture, MessagingStrings.ExpiredMessage, utcExpirationDate.ToLocalTime(), DateTime.Now), faultedMessage) { - Requires.True(utcExpirationDate.Kind == DateTimeKind.Utc, "utcExpirationDate"); + Requires.Argument(utcExpirationDate.Kind == DateTimeKind.Utc, "utcExpirationDate", "Time must be expressed as UTC."); } /// <summary> diff --git a/src/DotNetOpenAuth.Core/Messaging/Bindings/ICryptoKeyStore.cs b/src/DotNetOpenAuth.Core/Messaging/Bindings/ICryptoKeyStore.cs index 2e43bba..ce7bf42 100644 --- a/src/DotNetOpenAuth.Core/Messaging/Bindings/ICryptoKeyStore.cs +++ b/src/DotNetOpenAuth.Core/Messaging/Bindings/ICryptoKeyStore.cs @@ -8,10 +8,10 @@ namespace DotNetOpenAuth.Messaging.Bindings { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// A persistent store for rotating symmetric cryptographic keys. @@ -23,7 +23,6 @@ namespace DotNetOpenAuth.Messaging.Bindings { /// of the confidentiality of the keys. One possible mitigation is to asymmetrically encrypt /// each key using a certificate installed in the server's certificate store. /// </remarks> - [ContractClass(typeof(ICryptoKeyStoreContract))] public interface ICryptoKeyStore { /// <summary> /// Gets the key in a given bucket and handle. @@ -57,62 +56,4 @@ namespace DotNetOpenAuth.Messaging.Bindings { /// <param name="handle">The key handle. Case sensitive.</param> void RemoveKey(string bucket, string handle); } - - /// <summary> - /// Code contract for the <see cref="ICryptoKeyStore"/> interface. - /// </summary> - [ContractClassFor(typeof(ICryptoKeyStore))] - internal abstract class ICryptoKeyStoreContract : ICryptoKeyStore { - /// <summary> - /// Gets the key in a given bucket and handle. - /// </summary> - /// <param name="bucket">The bucket name. Case sensitive.</param> - /// <param name="handle">The key handle. Case sensitive.</param> - /// <returns> - /// The cryptographic key, or <c>null</c> if no matching key was found. - /// </returns> - CryptoKey ICryptoKeyStore.GetKey(string bucket, string handle) { - Requires.NotNullOrEmpty(bucket, "bucket"); - Requires.NotNullOrEmpty(handle, "handle"); - throw new NotImplementedException(); - } - - /// <summary> - /// Gets a sequence of existing keys within a given bucket. - /// </summary> - /// <param name="bucket">The bucket name. Case sensitive.</param> - /// <returns> - /// A sequence of handles and keys, ordered by descending <see cref="CryptoKey.ExpiresUtc"/>. - /// </returns> - IEnumerable<KeyValuePair<string, CryptoKey>> ICryptoKeyStore.GetKeys(string bucket) { - Requires.NotNullOrEmpty(bucket, "bucket"); - Contract.Ensures(Contract.Result<IEnumerable<KeyValuePair<string, CryptoKey>>>() != null); - throw new NotImplementedException(); - } - - /// <summary> - /// Stores a cryptographic key. - /// </summary> - /// <param name="bucket">The name of the bucket to store the key in. Case sensitive.</param> - /// <param name="handle">The handle to the key, unique within the bucket. Case sensitive.</param> - /// <param name="key">The key to store.</param> - /// <exception cref="CryptoKeyCollisionException">Thrown in the event of a conflict with an existing key in the same bucket and with the same handle.</exception> - void ICryptoKeyStore.StoreKey(string bucket, string handle, CryptoKey key) { - Requires.NotNullOrEmpty(bucket, "bucket"); - Requires.NotNullOrEmpty(handle, "handle"); - Requires.NotNull(key, "key"); - throw new NotImplementedException(); - } - - /// <summary> - /// Removes the key. - /// </summary> - /// <param name="bucket">The bucket name. Case sensitive.</param> - /// <param name="handle">The key handle. Case sensitive.</param> - void ICryptoKeyStore.RemoveKey(string bucket, string handle) { - Requires.NotNullOrEmpty(bucket, "bucket"); - Requires.NotNullOrEmpty(handle, "handle"); - throw new NotImplementedException(); - } - } } diff --git a/src/DotNetOpenAuth.Core/Messaging/Bindings/StandardReplayProtectionBindingElement.cs b/src/DotNetOpenAuth.Core/Messaging/Bindings/StandardReplayProtectionBindingElement.cs index 7e39536..45bccdf 100644 --- a/src/DotNetOpenAuth.Core/Messaging/Bindings/StandardReplayProtectionBindingElement.cs +++ b/src/DotNetOpenAuth.Core/Messaging/Bindings/StandardReplayProtectionBindingElement.cs @@ -7,7 +7,7 @@ namespace DotNetOpenAuth.Messaging.Bindings { using System; using System.Diagnostics; - using System.Diagnostics.Contracts; + using Validation; /// <summary> /// A binding element that checks/verifies a nonce message part. diff --git a/src/DotNetOpenAuth.Core/Messaging/CachedDirectWebResponse.cs b/src/DotNetOpenAuth.Core/Messaging/CachedDirectWebResponse.cs index 16e92a8..20b1831 100644 --- a/src/DotNetOpenAuth.Core/Messaging/CachedDirectWebResponse.cs +++ b/src/DotNetOpenAuth.Core/Messaging/CachedDirectWebResponse.cs @@ -8,15 +8,14 @@ namespace DotNetOpenAuth.Messaging { using System; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.IO; using System.Net; using System.Text; + using Validation; /// <summary> /// Cached details on the response from a direct web request to a remote party. /// </summary> - [ContractVerification(true)] [DebuggerDisplay("{Status} {ContentType.MediaType}, length: {ResponseStream.Length}")] internal class CachedDirectWebResponse : IncomingWebResponse { /// <summary> @@ -160,14 +159,13 @@ namespace DotNetOpenAuth.Messaging { [SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "System.Diagnostics.Contracts.__ContractsRuntime.Assume(System.Boolean,System.String,System.String)", Justification = "No localization required.")] private static MemoryStream CacheNetworkStreamAndClose(HttpWebResponse response, int maximumBytesToRead) { Requires.NotNull(response, "response"); - Contract.Ensures(Contract.Result<MemoryStream>() != null); // Now read and cache the network stream Stream networkStream = response.GetResponseStream(); MemoryStream cachedStream = new MemoryStream(response.ContentLength < 0 ? 4 * 1024 : Math.Min((int)response.ContentLength, maximumBytesToRead)); try { - Contract.Assume(networkStream.CanRead, "HttpWebResponse.GetResponseStream() always returns a readable stream."); // CC missing - Contract.Assume(cachedStream.CanWrite, "This is a MemoryStream -- it's always writable."); // CC missing + Assumes.True(networkStream.CanRead, "HttpWebResponse.GetResponseStream() always returns a readable stream."); // CC missing + Assumes.True(cachedStream.CanWrite, "This is a MemoryStream -- it's always writable."); // CC missing networkStream.CopyTo(cachedStream); cachedStream.Seek(0, SeekOrigin.Begin); diff --git a/src/DotNetOpenAuth.Core/Messaging/Channel.cs b/src/DotNetOpenAuth.Core/Messaging/Channel.cs index f8ac6a1..9c2ba8c 100644 --- a/src/DotNetOpenAuth.Core/Messaging/Channel.cs +++ b/src/DotNetOpenAuth.Core/Messaging/Channel.cs @@ -24,13 +24,12 @@ namespace DotNetOpenAuth.Messaging { using System.Web; using System.Xml; using DotNetOpenAuth.Messaging.Reflection; + using Validation; /// <summary> /// Manages sending direct messages to a remote party and receiving responses. /// </summary> [SuppressMessage("Microsoft.Maintainability", "CA1506:AvoidExcessiveClassCoupling", Justification = "Unavoidable.")] - [ContractVerification(true)] - [ContractClass(typeof(ChannelContract))] public abstract class Channel : IDisposable { /// <summary> /// The encoding to use when writing out POST entity strings. @@ -201,7 +200,7 @@ namespace DotNetOpenAuth.Messaging { } set { - Requires.InRange(value >= 500 && value <= 4096, "value"); + Requires.Range(value >= 500 && value <= 4096, "value"); this.maximumIndirectMessageUrlLength = value; } } @@ -233,9 +232,8 @@ namespace DotNetOpenAuth.Messaging { /// </summary> protected internal ReadOnlyCollection<IChannelBindingElement> BindingElements { get { - Contract.Ensures(Contract.Result<ReadOnlyCollection<IChannelBindingElement>>() != null); var result = this.outgoingBindingElements.AsReadOnly(); - Contract.Assume(result != null); // should be an implicit BCL contract + Assumes.True(result != null); // should be an implicit BCL contract return result; } } @@ -252,8 +250,6 @@ namespace DotNetOpenAuth.Messaging { /// </summary> protected internal ReadOnlyCollection<IChannelBindingElement> IncomingBindingElements { get { - Contract.Ensures(Contract.Result<ReadOnlyCollection<IChannelBindingElement>>().All(be => be.Channel != null)); - Contract.Ensures(Contract.Result<ReadOnlyCollection<IChannelBindingElement>>().All(be => be != null)); return this.incomingBindingElements.AsReadOnly(); } } @@ -308,7 +304,7 @@ namespace DotNetOpenAuth.Messaging { /// </remarks> [EditorBrowsable(EditorBrowsableState.Never)] public void Send(IProtocolMessage message) { - Requires.ValidState(HttpContext.Current != null, MessagingStrings.CurrentHttpContextRequired); + RequiresEx.ValidState(HttpContext.Current != null, MessagingStrings.CurrentHttpContextRequired); Requires.NotNull(message, "message"); this.PrepareResponse(message).Respond(HttpContext.Current, true); } @@ -327,7 +323,7 @@ namespace DotNetOpenAuth.Messaging { /// Use the <see cref="Send"/> method instead for web forms. /// </remarks> public void Respond(IProtocolMessage message) { - Requires.ValidState(HttpContext.Current != null, MessagingStrings.CurrentHttpContextRequired); + RequiresEx.ValidState(HttpContext.Current != null, MessagingStrings.CurrentHttpContextRequired); Requires.NotNull(message, "message"); this.PrepareResponse(message).Respond(); } @@ -340,7 +336,6 @@ namespace DotNetOpenAuth.Messaging { /// <returns>The pending user agent redirect based message to be sent as an HttpResponse.</returns> public OutgoingWebResponse PrepareResponse(IProtocolMessage message) { Requires.NotNull(message, "message"); - Contract.Ensures(Contract.Result<OutgoingWebResponse>() != null); this.ProcessOutgoingMessage(message); Logger.Channel.DebugFormat("Sending message: {0}", message.GetType().Name); @@ -420,7 +415,6 @@ namespace DotNetOpenAuth.Messaging { public bool TryReadFromRequest<TRequest>(HttpRequestBase httpRequest, out TRequest request) where TRequest : class, IProtocolMessage { Requires.NotNull(httpRequest, "httpRequest"); - Contract.Ensures(Contract.Result<bool>() == (Contract.ValueAtReturn<TRequest>(out request) != null)); IProtocolMessage untypedRequest = this.ReadFromRequest(httpRequest); if (untypedRequest == null) { @@ -511,7 +505,6 @@ namespace DotNetOpenAuth.Messaging { public TResponse Request<TResponse>(IDirectedProtocolMessage requestMessage) where TResponse : class, IProtocolMessage { Requires.NotNull(requestMessage, "requestMessage"); - Contract.Ensures(Contract.Result<TResponse>() != null); IProtocolMessage response = this.Request(requestMessage); ErrorUtilities.VerifyProtocol(response != null, MessagingStrings.ExpectedMessageNotReceived, typeof(TResponse)); @@ -620,7 +613,7 @@ namespace DotNetOpenAuth.Messaging { /// <returns>An HttpContextBase instance.</returns> [SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate", Justification = "Allocates memory")] protected internal virtual HttpContextBase GetHttpContext() { - Requires.ValidState(HttpContext.Current != null, MessagingStrings.HttpContextRequired); + RequiresEx.ValidState(HttpContext.Current != null, MessagingStrings.HttpContextRequired); return new HttpContextWrapper(HttpContext.Current); } @@ -634,11 +627,10 @@ namespace DotNetOpenAuth.Messaging { /// <exception cref="InvalidOperationException">Thrown if <see cref="HttpContext.Current">HttpContext.Current</see> == <c>null</c>.</exception> [SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate", Justification = "Costly call should not be a property.")] protected internal virtual HttpRequestBase GetRequestFromContext() { - Requires.ValidState(HttpContext.Current != null && HttpContext.Current.Request != null, MessagingStrings.HttpContextRequired); - Contract.Ensures(Contract.Result<HttpRequestBase>() != null); + RequiresEx.ValidState(HttpContext.Current != null && HttpContext.Current.Request != null, MessagingStrings.HttpContextRequired); - Contract.Assume(HttpContext.Current.Request.Url != null); - Contract.Assume(HttpContext.Current.Request.RawUrl != null); + Assumes.True(HttpContext.Current.Request.Url != null); + Assumes.True(HttpContext.Current.Request.RawUrl != null); return new HttpRequestWrapper(HttpContext.Current.Request); } @@ -729,7 +721,7 @@ namespace DotNetOpenAuth.Messaging { /// </remarks> protected virtual IProtocolMessage RequestCore(IDirectedProtocolMessage request) { Requires.NotNull(request, "request"); - Requires.True(request.Recipient != null, "request", MessagingStrings.DirectedMessageMissingRecipient); + Requires.That(request.Recipient != null, "request", MessagingStrings.DirectedMessageMissingRecipient); HttpWebRequest webRequest = this.CreateHttpRequest(request); var directRequest = request as IHttpDirectRequest; @@ -785,7 +777,7 @@ namespace DotNetOpenAuth.Messaging { Logger.Channel.DebugFormat("Incoming HTTP request: {0} {1}", request.HttpMethod, request.GetPublicFacingUrl().AbsoluteUri); // Search Form data first, and if nothing is there search the QueryString - Contract.Assume(request.Form != null && request.GetQueryStringBeforeRewriting() != null); + Assumes.True(request.Form != null && request.GetQueryStringBeforeRewriting() != null); var fields = request.Form.ToDictionary(); if (fields.Count == 0 && request.HttpMethod != "POST") { // OpenID 2.0 section 4.1.2 fields = request.GetQueryStringBeforeRewriting().ToDictionary(); @@ -837,13 +829,12 @@ namespace DotNetOpenAuth.Messaging { /// <returns>The pending user agent redirect based message to be sent as an HttpResponse.</returns> protected virtual OutgoingWebResponse PrepareIndirectResponse(IDirectedProtocolMessage message) { Requires.NotNull(message, "message"); - Requires.True(message.Recipient != null, "message", MessagingStrings.DirectedMessageMissingRecipient); - Requires.True((message.HttpMethods & (HttpDeliveryMethods.GetRequest | HttpDeliveryMethods.PostRequest)) != 0, "message"); - Contract.Ensures(Contract.Result<OutgoingWebResponse>() != null); + Requires.That(message.Recipient != null, "message", MessagingStrings.DirectedMessageMissingRecipient); + Requires.That((message.HttpMethods & (HttpDeliveryMethods.GetRequest | HttpDeliveryMethods.PostRequest)) != 0, "message", "GET or POST expected."); - Contract.Assert(message != null && message.Recipient != null); + Assumes.True(message != null && message.Recipient != null); var messageAccessor = this.MessageDescriptions.GetAccessor(message); - Contract.Assert(message != null && message.Recipient != null); + Assumes.True(message != null && message.Recipient != null); var fields = messageAccessor.Serialize(); OutgoingWebResponse response = null; @@ -887,9 +878,8 @@ namespace DotNetOpenAuth.Messaging { [Pure] protected virtual OutgoingWebResponse Create301RedirectResponse(IDirectedProtocolMessage message, IDictionary<string, string> fields, bool payloadInFragment = false) { Requires.NotNull(message, "message"); - Requires.True(message.Recipient != null, "message", MessagingStrings.DirectedMessageMissingRecipient); + Requires.That(message.Recipient != null, "message", MessagingStrings.DirectedMessageMissingRecipient); Requires.NotNull(fields, "fields"); - Contract.Ensures(Contract.Result<OutgoingWebResponse>() != null); // As part of this redirect, we include an HTML body in order to get passed some proxy filters // such as WebSense. @@ -924,9 +914,8 @@ namespace DotNetOpenAuth.Messaging { [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Justification = "No apparent problem. False positive?")] protected virtual OutgoingWebResponse CreateFormPostResponse(IDirectedProtocolMessage message, IDictionary<string, string> fields) { Requires.NotNull(message, "message"); - Requires.True(message.Recipient != null, "message", MessagingStrings.DirectedMessageMissingRecipient); + Requires.That(message.Recipient != null, "message", MessagingStrings.DirectedMessageMissingRecipient); Requires.NotNull(fields, "fields"); - Contract.Ensures(Contract.Result<OutgoingWebResponse>() != null); WebHeaderCollection headers = new WebHeaderCollection(); headers.Add(HttpResponseHeader.ContentType, "text/html"); @@ -973,8 +962,7 @@ namespace DotNetOpenAuth.Messaging { /// </remarks> protected virtual HttpWebRequest CreateHttpRequest(IDirectedProtocolMessage request) { Requires.NotNull(request, "request"); - Requires.True(request.Recipient != null, "request", MessagingStrings.DirectedMessageMissingRecipient); - Contract.Ensures(Contract.Result<HttpWebRequest>() != null); + Requires.That(request.Recipient != null, "request", MessagingStrings.DirectedMessageMissingRecipient); throw new NotImplementedException(); } @@ -1039,7 +1027,7 @@ namespace DotNetOpenAuth.Messaging { MessageProtections appliedProtection = MessageProtections.None; foreach (IChannelBindingElement bindingElement in this.outgoingBindingElements) { - Contract.Assume(bindingElement.Channel != null); + Assumes.True(bindingElement.Channel != null); MessageProtections? elementProtection = bindingElement.ProcessOutgoingMessage(message); if (elementProtection.HasValue) { Logger.Bindings.DebugFormat("Binding element {0} applied to message.", bindingElement.GetType().FullName); @@ -1086,7 +1074,7 @@ namespace DotNetOpenAuth.Messaging { /// </remarks> protected virtual HttpWebRequest InitializeRequestAsGet(IDirectedProtocolMessage requestMessage) { Requires.NotNull(requestMessage, "requestMessage"); - Requires.True(requestMessage.Recipient != null, "requestMessage", MessagingStrings.DirectedMessageMissingRecipient); + Requires.That(requestMessage.Recipient != null, "requestMessage", MessagingStrings.DirectedMessageMissingRecipient); var messageAccessor = this.MessageDescriptions.GetAccessor(requestMessage); var fields = messageAccessor.Serialize(); @@ -1110,7 +1098,7 @@ namespace DotNetOpenAuth.Messaging { /// </remarks> protected virtual HttpWebRequest InitializeRequestAsHead(IDirectedProtocolMessage requestMessage) { Requires.NotNull(requestMessage, "requestMessage"); - Requires.True(requestMessage.Recipient != null, "requestMessage", MessagingStrings.DirectedMessageMissingRecipient); + Requires.That(requestMessage.Recipient != null, "requestMessage", MessagingStrings.DirectedMessageMissingRecipient); HttpWebRequest request = this.InitializeRequestAsGet(requestMessage); request.Method = "HEAD"; @@ -1129,7 +1117,6 @@ namespace DotNetOpenAuth.Messaging { /// </remarks> protected virtual HttpWebRequest InitializeRequestAsPost(IDirectedProtocolMessage requestMessage) { Requires.NotNull(requestMessage, "requestMessage"); - Contract.Ensures(Contract.Result<HttpWebRequest>() != null); var messageAccessor = this.MessageDescriptions.GetAccessor(requestMessage); var fields = messageAccessor.Serialize(); @@ -1164,7 +1151,6 @@ namespace DotNetOpenAuth.Messaging { /// </remarks> protected virtual HttpWebRequest InitializeRequestAsPut(IDirectedProtocolMessage requestMessage) { Requires.NotNull(requestMessage, "requestMessage"); - Contract.Ensures(Contract.Result<HttpWebRequest>() != null); HttpWebRequest request = this.InitializeRequestAsGet(requestMessage); request.Method = "PUT"; @@ -1181,7 +1167,6 @@ namespace DotNetOpenAuth.Messaging { /// </remarks> protected virtual HttpWebRequest InitializeRequestAsDelete(IDirectedProtocolMessage requestMessage) { Requires.NotNull(requestMessage, "requestMessage"); - Contract.Ensures(Contract.Result<HttpWebRequest>() != null); HttpWebRequest request = this.InitializeRequestAsGet(requestMessage); request.Method = "DELETE"; @@ -1254,7 +1239,7 @@ namespace DotNetOpenAuth.Messaging { MessageProtections appliedProtection = MessageProtections.None; foreach (IChannelBindingElement bindingElement in this.IncomingBindingElements) { - Contract.Assume(bindingElement.Channel != null); // CC bug: this.IncomingBindingElements ensures this... why must we assume it here? + Assumes.True(bindingElement.Channel != null); // CC bug: this.IncomingBindingElements ensures this... why must we assume it here? MessageProtections? elementProtection = bindingElement.ProcessIncomingMessage(message); if (elementProtection.HasValue) { Logger.Bindings.DebugFormat("Binding element {0} applied to message.", bindingElement.GetType().FullName); @@ -1350,8 +1335,7 @@ namespace DotNetOpenAuth.Messaging { /// <returns>The properly ordered list of elements.</returns> /// <exception cref="ProtocolException">Thrown when the binding elements are incomplete or inconsistent with each other.</exception> private static IEnumerable<IChannelBindingElement> ValidateAndPrepareBindingElements(IEnumerable<IChannelBindingElement> elements) { - Requires.NullOrWithNoNullElements(elements, "elements"); - Contract.Ensures(Contract.Result<IEnumerable<IChannelBindingElement>>() != null); + Requires.NullOrNotNullElements(elements, "elements"); if (elements == null) { return new IChannelBindingElement[0]; } diff --git a/src/DotNetOpenAuth.Core/Messaging/ChannelContract.cs b/src/DotNetOpenAuth.Core/Messaging/ChannelContract.cs deleted file mode 100644 index b48d45b..0000000 --- a/src/DotNetOpenAuth.Core/Messaging/ChannelContract.cs +++ /dev/null @@ -1,54 +0,0 @@ -//----------------------------------------------------------------------- -// <copyright file="ChannelContract.cs" company="Outercurve Foundation"> -// Copyright (c) Outercurve Foundation. All rights reserved. -// </copyright> -//----------------------------------------------------------------------- - -namespace DotNetOpenAuth.Messaging { - using System; - using System.Collections.Generic; - using System.Diagnostics.Contracts; - - /// <summary> - /// Code contract for the <see cref="Channel"/> class. - /// </summary> - [ContractClassFor(typeof(Channel))] - internal abstract class ChannelContract : Channel { - /// <summary> - /// Prevents a default instance of the ChannelContract class from being created. - /// </summary> - private ChannelContract() - : base(null, null) { - } - - /// <summary> - /// Gets the protocol message that may be in the given HTTP response. - /// </summary> - /// <param name="response">The response that is anticipated to contain an protocol message.</param> - /// <returns> - /// The deserialized message parts, if found. Null otherwise. - /// </returns> - /// <exception cref="ProtocolException">Thrown when the response is not valid.</exception> - protected override IDictionary<string, string> ReadFromResponseCore(IncomingWebResponse response) { - Requires.NotNull(response, "response"); - throw new NotImplementedException(); - } - - /// <summary> - /// Queues a message for sending in the response stream where the fields - /// are sent in the response stream in querystring style. - /// </summary> - /// <param name="response">The message to send as a response.</param> - /// <returns> - /// The pending user agent redirect based message to be sent as an HttpResponse. - /// </returns> - /// <remarks> - /// This method implements spec V1.0 section 5.3. - /// </remarks> - protected override OutgoingWebResponse PrepareDirectResponse(IProtocolMessage response) { - Requires.NotNull(response, "response"); - Contract.Ensures(Contract.Result<OutgoingWebResponse>() != null); - throw new NotImplementedException(); - } - } -} diff --git a/src/DotNetOpenAuth.Core/Messaging/ChannelEventArgs.cs b/src/DotNetOpenAuth.Core/Messaging/ChannelEventArgs.cs index f3ebc04..5c69e4d 100644 --- a/src/DotNetOpenAuth.Core/Messaging/ChannelEventArgs.cs +++ b/src/DotNetOpenAuth.Core/Messaging/ChannelEventArgs.cs @@ -6,7 +6,7 @@ namespace DotNetOpenAuth.Messaging { using System; - using System.Diagnostics.Contracts; + using Validation; /// <summary> /// The data packet sent with Channel events. diff --git a/src/DotNetOpenAuth.Core/Messaging/DataBag.cs b/src/DotNetOpenAuth.Core/Messaging/DataBag.cs index 0800840..8469676 100644 --- a/src/DotNetOpenAuth.Core/Messaging/DataBag.cs +++ b/src/DotNetOpenAuth.Core/Messaging/DataBag.cs @@ -8,7 +8,7 @@ namespace DotNetOpenAuth.Messaging { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; + using Validation; /// <summary> /// A collection of message parts that will be serialized into a single string, @@ -42,7 +42,7 @@ namespace DotNetOpenAuth.Messaging { /// </summary> /// <param name="version">The DataBag version.</param> protected DataBag(Version version) { - Contract.Requires(version != null); + Requires.NotNull(version, "version"); this.version = version; } diff --git a/src/DotNetOpenAuth.Core/Messaging/DataBagFormatterBase.cs b/src/DotNetOpenAuth.Core/Messaging/DataBagFormatterBase.cs index e7ac254..210a95e 100644 --- a/src/DotNetOpenAuth.Core/Messaging/DataBagFormatterBase.cs +++ b/src/DotNetOpenAuth.Core/Messaging/DataBagFormatterBase.cs @@ -8,7 +8,6 @@ namespace DotNetOpenAuth.Messaging { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.IO; using System.Linq; using System.Security.Cryptography; @@ -17,6 +16,7 @@ namespace DotNetOpenAuth.Messaging { using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Messaging.Bindings; using DotNetOpenAuth.Messaging.Reflection; + using Validation; /// <summary> /// A serializer for <see cref="DataBag"/>-derived types @@ -110,8 +110,8 @@ namespace DotNetOpenAuth.Messaging { /// <param name="decodeOnceOnly">The nonce store to use to ensure that this instance is only decoded once.</param> protected DataBagFormatterBase(ICryptoKeyStore cryptoKeyStore = null, string bucket = null, bool signed = false, bool encrypted = false, bool compressed = false, TimeSpan? minimumAge = null, TimeSpan? maximumAge = null, INonceStore decodeOnceOnly = null) : this(signed, encrypted, compressed, maximumAge, decodeOnceOnly) { - Requires.True(!string.IsNullOrEmpty(bucket) || cryptoKeyStore == null, null); - Requires.True(cryptoKeyStore != null || (!signed && !encrypted), null); + Requires.That(!string.IsNullOrEmpty(bucket) || cryptoKeyStore == null, "bucket", "Bucket name required when cryptoKeyStore is non-null."); + Requires.That(cryptoKeyStore != null || (!signed && !encrypted), "cryptoKeyStore", "cryptoKeyStore required if signing or encrypting."); this.cryptoKeyStore = cryptoKeyStore; this.cryptoKeyBucket = bucket; @@ -129,8 +129,8 @@ namespace DotNetOpenAuth.Messaging { /// <param name="maximumAge">The maximum age of a token that can be decoded; useful only when <paramref name="decodeOnceOnly"/> is <c>true</c>.</param> /// <param name="decodeOnceOnly">The nonce store to use to ensure that this instance is only decoded once.</param> private DataBagFormatterBase(bool signed = false, bool encrypted = false, bool compressed = false, TimeSpan? maximumAge = null, INonceStore decodeOnceOnly = null) { - Requires.True(signed || decodeOnceOnly == null, null); - Requires.True(maximumAge.HasValue || decodeOnceOnly == null, null); + Requires.That(signed || decodeOnceOnly == null, "decodeOnceOnly", "Nonce only valid with signing."); + Requires.That(maximumAge.HasValue || decodeOnceOnly == null, "decodeOnceOnly", "Nonce requires a maximum message age."); this.signed = signed; this.maximumAge = maximumAge; @@ -303,8 +303,7 @@ namespace DotNetOpenAuth.Messaging { [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Justification = "No apparent problem. False positive?")] private byte[] CalculateSignature(byte[] bytesToSign, string symmetricSecretHandle) { Requires.NotNull(bytesToSign, "bytesToSign"); - Requires.ValidState(this.asymmetricSigning != null || this.cryptoKeyStore != null); - Contract.Ensures(Contract.Result<byte[]>() != null); + RequiresEx.ValidState(this.asymmetricSigning != null || this.cryptoKeyStore != null); if (this.asymmetricSigning != null) { using (var hasher = SHA1.Create()) { @@ -328,7 +327,7 @@ namespace DotNetOpenAuth.Messaging { /// The encrypted value. /// </returns> private byte[] Encrypt(byte[] value, out string symmetricSecretHandle) { - Requires.ValidState(this.asymmetricEncrypting != null || this.cryptoKeyStore != null); + Assumes.True(this.asymmetricEncrypting != null || this.cryptoKeyStore != null); if (this.asymmetricEncrypting != null) { symmetricSecretHandle = null; @@ -349,7 +348,7 @@ namespace DotNetOpenAuth.Messaging { /// The decrypted value. /// </returns> private byte[] Decrypt(byte[] value, string symmetricSecretHandle) { - Requires.ValidState(this.asymmetricEncrypting != null || symmetricSecretHandle != null); + RequiresEx.ValidState(this.asymmetricEncrypting != null || symmetricSecretHandle != null); if (this.asymmetricEncrypting != null) { return this.asymmetricEncrypting.DecryptWithRandomSymmetricKey(value); diff --git a/src/DotNetOpenAuth.Core/Messaging/EnumerableCacheExtensions.cs b/src/DotNetOpenAuth.Core/Messaging/EnumerableCacheExtensions.cs index 5e9cf93..0886ef2 100644 --- a/src/DotNetOpenAuth.Core/Messaging/EnumerableCacheExtensions.cs +++ b/src/DotNetOpenAuth.Core/Messaging/EnumerableCacheExtensions.cs @@ -9,7 +9,7 @@ namespace DotNetOpenAuth.Messaging { using System; using System.Collections; using System.Collections.Generic; - using System.Diagnostics.Contracts; + using Validation; /// <summary> /// Extension methods for <see cref="IEnumerable<T>"/> types. diff --git a/src/DotNetOpenAuth.Core/Messaging/ErrorUtilities.cs b/src/DotNetOpenAuth.Core/Messaging/ErrorUtilities.cs index 2237cc7..71c904b 100644 --- a/src/DotNetOpenAuth.Core/Messaging/ErrorUtilities.cs +++ b/src/DotNetOpenAuth.Core/Messaging/ErrorUtilities.cs @@ -11,11 +11,11 @@ namespace DotNetOpenAuth.Messaging { using System.Diagnostics.Contracts; using System.Globalization; using System.Web; + using Validation; /// <summary> /// A collection of error checking and reporting methods. /// </summary> - [ContractVerification(true)] [Pure] internal static class ErrorUtilities { /// <summary> @@ -28,7 +28,7 @@ namespace DotNetOpenAuth.Messaging { [Pure] internal static Exception Wrap(Exception inner, string errorMessage, params object[] args) { Requires.NotNull(args, "args"); - Contract.Assume(errorMessage != null); + Assumes.True(errorMessage != null); return new ProtocolException(string.Format(CultureInfo.CurrentCulture, errorMessage, args), inner); } @@ -58,8 +58,6 @@ namespace DotNetOpenAuth.Messaging { /// <exception cref="InternalErrorException">Thrown if <paramref name="condition"/> evaluates to <c>false</c>.</exception> [Pure] internal static void VerifyInternal(bool condition, string errorMessage) { - Contract.Ensures(condition); - Contract.EnsuresOnThrow<InternalErrorException>(!condition); if (!condition) { ThrowInternal(errorMessage); } @@ -75,9 +73,7 @@ namespace DotNetOpenAuth.Messaging { [Pure] internal static void VerifyInternal(bool condition, string errorMessage, params object[] args) { Requires.NotNull(args, "args"); - Contract.Ensures(condition); - Contract.EnsuresOnThrow<InternalErrorException>(!condition); - Contract.Assume(errorMessage != null); + Assumes.True(errorMessage != null); if (!condition) { errorMessage = string.Format(CultureInfo.CurrentCulture, errorMessage, args); throw new InternalErrorException(errorMessage); @@ -92,8 +88,6 @@ namespace DotNetOpenAuth.Messaging { /// <exception cref="InvalidOperationException">Thrown if <paramref name="condition"/> evaluates to <c>false</c>.</exception> [Pure] internal static void VerifyOperation(bool condition, string errorMessage) { - Contract.Ensures(condition); - Contract.EnsuresOnThrow<InvalidOperationException>(!condition); if (!condition) { throw new InvalidOperationException(errorMessage); } @@ -107,8 +101,6 @@ namespace DotNetOpenAuth.Messaging { /// <exception cref="NotSupportedException">Thrown if <paramref name="condition"/> evaluates to <c>false</c>.</exception> [Pure] internal static void VerifySupported(bool condition, string errorMessage) { - Contract.Ensures(condition); - Contract.EnsuresOnThrow<NotSupportedException>(!condition); if (!condition) { throw new NotSupportedException(errorMessage); } @@ -124,9 +116,7 @@ namespace DotNetOpenAuth.Messaging { [Pure] internal static void VerifySupported(bool condition, string errorMessage, params object[] args) { Requires.NotNull(args, "args"); - Contract.Ensures(condition); - Contract.EnsuresOnThrow<NotSupportedException>(!condition); - Contract.Assume(errorMessage != null); + Assumes.True(errorMessage != null); if (!condition) { throw new NotSupportedException(string.Format(CultureInfo.CurrentCulture, errorMessage, args)); } @@ -142,9 +132,7 @@ namespace DotNetOpenAuth.Messaging { [Pure] internal static void VerifyOperation(bool condition, string errorMessage, params object[] args) { Requires.NotNull(args, "args"); - Contract.Ensures(condition); - Contract.EnsuresOnThrow<InvalidOperationException>(!condition); - Contract.Assume(errorMessage != null); + Assumes.True(errorMessage != null); if (!condition) { errorMessage = string.Format(CultureInfo.CurrentCulture, errorMessage, args); throw new InvalidOperationException(errorMessage); @@ -161,9 +149,7 @@ namespace DotNetOpenAuth.Messaging { [Pure] internal static void VerifyHost(bool condition, string errorMessage, params object[] args) { Requires.NotNull(args, "args"); - Contract.Ensures(condition); - Contract.EnsuresOnThrow<ProtocolException>(!condition); - Contract.Assume(errorMessage != null); + Assumes.True(errorMessage != null); if (!condition) { throw new HostErrorException(string.Format(CultureInfo.CurrentCulture, errorMessage, args)); } @@ -181,9 +167,7 @@ namespace DotNetOpenAuth.Messaging { internal static void VerifyProtocol(bool condition, IProtocolMessage faultedMessage, string errorMessage, params object[] args) { Requires.NotNull(args, "args"); Requires.NotNull(faultedMessage, "faultedMessage"); - Contract.Ensures(condition); - Contract.EnsuresOnThrow<ProtocolException>(!condition); - Contract.Assume(errorMessage != null); + Assumes.True(errorMessage != null); if (!condition) { throw new ProtocolException(string.Format(CultureInfo.CurrentCulture, errorMessage, args), faultedMessage); } @@ -199,9 +183,7 @@ namespace DotNetOpenAuth.Messaging { [Pure] internal static void VerifyProtocol(bool condition, string unformattedMessage, params object[] args) { Requires.NotNull(args, "args"); - Contract.Ensures(condition); - Contract.EnsuresOnThrow<ProtocolException>(!condition); - Contract.Assume(unformattedMessage != null); + Assumes.True(unformattedMessage != null); if (!condition) { var exception = new ProtocolException(string.Format(CultureInfo.CurrentCulture, unformattedMessage, args)); if (Logger.Messaging.IsErrorEnabled) { @@ -231,7 +213,7 @@ namespace DotNetOpenAuth.Messaging { [Pure] internal static Exception ThrowProtocol(string unformattedMessage, params object[] args) { Requires.NotNull(args, "args"); - Contract.Assume(unformattedMessage != null); + Assumes.True(unformattedMessage != null); VerifyProtocol(false, unformattedMessage, args); // we never reach here, but this allows callers to "throw" this method. @@ -247,7 +229,7 @@ namespace DotNetOpenAuth.Messaging { [Pure] internal static Exception ThrowFormat(string message, params object[] args) { Requires.NotNull(args, "args"); - Contract.Assume(message != null); + Assumes.True(message != null); throw new FormatException(string.Format(CultureInfo.CurrentCulture, message, args)); } @@ -261,9 +243,7 @@ namespace DotNetOpenAuth.Messaging { [Pure] internal static void VerifyFormat(bool condition, string message, params object[] args) { Requires.NotNull(args, "args"); - Contract.Ensures(condition); - Contract.EnsuresOnThrow<FormatException>(!condition); - Contract.Assume(message != null); + Assumes.True(message != null); if (!condition) { throw ThrowFormat(message, args); } @@ -279,9 +259,7 @@ namespace DotNetOpenAuth.Messaging { [Pure] internal static void VerifyArgument(bool condition, string message, params object[] args) { Requires.NotNull(args, "args"); - Contract.Ensures(condition); - Contract.EnsuresOnThrow<ArgumentException>(!condition); - Contract.Assume(message != null); + Assumes.True(message != null); if (!condition) { throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, message, args)); } @@ -297,7 +275,7 @@ namespace DotNetOpenAuth.Messaging { [Pure] internal static Exception ThrowArgumentNamed(string parameterName, string message, params object[] args) { Requires.NotNull(args, "args"); - Contract.Assume(message != null); + Assumes.True(message != null); throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, message, args), parameterName); } @@ -312,9 +290,7 @@ namespace DotNetOpenAuth.Messaging { [Pure] internal static void VerifyArgumentNamed(bool condition, string parameterName, string message, params object[] args) { Requires.NotNull(args, "args"); - Contract.Ensures(condition); - Contract.EnsuresOnThrow<ArgumentException>(!condition); - Contract.Assume(message != null); + Assumes.True(message != null); if (!condition) { throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, message, args), parameterName); } @@ -328,8 +304,6 @@ namespace DotNetOpenAuth.Messaging { /// <exception cref="ArgumentNullException">Thrown if <paramref name="value"/> is null.</exception> [Pure] internal static void VerifyArgumentNotNull(object value, string paramName) { - Contract.Ensures(value != null); - Contract.EnsuresOnThrow<ArgumentNullException>(value == null); if (value == null) { throw new ArgumentNullException(paramName); } @@ -344,8 +318,6 @@ namespace DotNetOpenAuth.Messaging { /// <exception cref="ArgumentException">Thrown if <paramref name="value"/> has zero length.</exception> [Pure] internal static void VerifyNonZeroLength(string value, string paramName) { - Contract.Ensures((value != null && value.Length > 0) && !string.IsNullOrEmpty(value)); - Contract.EnsuresOnThrow<ArgumentException>(value == null || value.Length == 0); VerifyArgumentNotNull(value, paramName); if (value.Length == 0) { throw new ArgumentException(MessagingStrings.UnexpectedEmptyString, paramName); @@ -358,8 +330,6 @@ namespace DotNetOpenAuth.Messaging { /// <exception cref="InvalidOperationException">Thrown if <see cref="HttpContext.Current"/> == <c>null</c></exception> [Pure] internal static void VerifyHttpContext() { - Contract.Ensures(HttpContext.Current != null); - Contract.Ensures(HttpContext.Current.Request != null); ErrorUtilities.VerifyOperation(HttpContext.Current != null && HttpContext.Current.Request != null, MessagingStrings.HttpContextRequired); } diff --git a/src/DotNetOpenAuth.Core/Messaging/HmacAlgorithms.cs b/src/DotNetOpenAuth.Core/Messaging/HmacAlgorithms.cs index 872b4ac..c80ebfe 100644 --- a/src/DotNetOpenAuth.Core/Messaging/HmacAlgorithms.cs +++ b/src/DotNetOpenAuth.Core/Messaging/HmacAlgorithms.cs @@ -10,6 +10,7 @@ namespace DotNetOpenAuth.Messaging { using System.Linq; using System.Security.Cryptography; using System.Text; + using Validation; /// <summary> /// HMAC-SHA algorithm names that can be passed to the <see cref="HMAC.Create(string)"/> method. diff --git a/src/DotNetOpenAuth.Core/Messaging/HttpRequestInfo.cs b/src/DotNetOpenAuth.Core/Messaging/HttpRequestInfo.cs index 75da833..55233c2 100644 --- a/src/DotNetOpenAuth.Core/Messaging/HttpRequestInfo.cs +++ b/src/DotNetOpenAuth.Core/Messaging/HttpRequestInfo.cs @@ -9,7 +9,6 @@ namespace DotNetOpenAuth.Messaging { using System.Collections.Specialized; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Globalization; using System.IO; using System.Net; @@ -20,6 +19,7 @@ namespace DotNetOpenAuth.Messaging { using System.Net.Mime; using System.ServiceModel.Channels; using System.Web; + using Validation; /// <summary> /// A property store of details of an incoming HTTP request. diff --git a/src/DotNetOpenAuth.Core/Messaging/IChannelBindingElement.cs b/src/DotNetOpenAuth.Core/Messaging/IChannelBindingElement.cs index 1047ec5..fca46a0 100644 --- a/src/DotNetOpenAuth.Core/Messaging/IChannelBindingElement.cs +++ b/src/DotNetOpenAuth.Core/Messaging/IChannelBindingElement.cs @@ -6,13 +6,12 @@ namespace DotNetOpenAuth.Messaging { using System; - using System.Diagnostics.Contracts; + using Validation; /// <summary> /// An interface that must be implemented by message transforms/validators in order /// to be included in the channel stack. /// </summary> - [ContractClass(typeof(IChannelBindingElementContract))] public interface IChannelBindingElement { /// <summary> /// Gets or sets the channel that this binding element belongs to. @@ -63,84 +62,4 @@ namespace DotNetOpenAuth.Messaging { /// </remarks> MessageProtections? ProcessIncomingMessage(IProtocolMessage message); } - - /// <summary> - /// Code Contract for the <see cref="IChannelBindingElement"/> interface. - /// </summary> - [ContractClassFor(typeof(IChannelBindingElement))] - internal abstract class IChannelBindingElementContract : IChannelBindingElement { - /// <summary> - /// Prevents a default instance of the <see cref="IChannelBindingElementContract"/> class from being created. - /// </summary> - private IChannelBindingElementContract() { - } - - #region IChannelBindingElement Members - - /// <summary> - /// Gets or sets the channel that this binding element belongs to. - /// </summary> - /// <value></value> - /// <remarks> - /// This property is set by the channel when it is first constructed. - /// </remarks> - Channel IChannelBindingElement.Channel { - get { throw new NotImplementedException(); } - set { throw new NotImplementedException(); } - } - - /// <summary> - /// Gets the protection commonly offered (if any) by this binding element. - /// </summary> - /// <value></value> - /// <remarks> - /// This value is used to assist in sorting binding elements in the channel stack. - /// </remarks> - MessageProtections IChannelBindingElement.Protection { - get { throw new NotImplementedException(); } - } - - /// <summary> - /// Prepares a message for sending based on the rules of this channel binding element. - /// </summary> - /// <param name="message">The message to prepare for sending.</param> - /// <returns> - /// The protections (if any) that this binding element applied to the message. - /// Null if this binding element did not even apply to this binding element. - /// </returns> - /// <remarks> - /// Implementations that provide message protection must honor the - /// <see cref="MessagePartAttribute.RequiredProtection"/> properties where applicable. - /// </remarks> - MessageProtections? IChannelBindingElement.ProcessOutgoingMessage(IProtocolMessage message) { - Requires.NotNull(message, "message"); - Requires.ValidState(((IChannelBindingElement)this).Channel != null); - throw new NotImplementedException(); - } - - /// <summary> - /// Performs any transformation on an incoming message that may be necessary and/or - /// validates an incoming message based on the rules of this channel binding element. - /// </summary> - /// <param name="message">The incoming message to process.</param> - /// <returns> - /// The protections (if any) that this binding element applied to the message. - /// Null if this binding element did not even apply to this binding element. - /// </returns> - /// <exception cref="ProtocolException"> - /// Thrown when the binding element rules indicate that this message is invalid and should - /// NOT be processed. - /// </exception> - /// <remarks> - /// Implementations that provide message protection must honor the - /// <see cref="MessagePartAttribute.RequiredProtection"/> properties where applicable. - /// </remarks> - MessageProtections? IChannelBindingElement.ProcessIncomingMessage(IProtocolMessage message) { - Requires.NotNull(message, "message"); - Requires.ValidState(((IChannelBindingElement)this).Channel != null); - throw new NotImplementedException(); - } - - #endregion - } } diff --git a/src/DotNetOpenAuth.Core/Messaging/IDataBagFormatter.cs b/src/DotNetOpenAuth.Core/Messaging/IDataBagFormatter.cs index 0d1ab03..955d7c0 100644 --- a/src/DotNetOpenAuth.Core/Messaging/IDataBagFormatter.cs +++ b/src/DotNetOpenAuth.Core/Messaging/IDataBagFormatter.cs @@ -6,13 +6,12 @@ namespace DotNetOpenAuth.Messaging { using System; - using System.Diagnostics.Contracts; + using Validation; /// <summary> /// A serializer for <see cref="DataBag"/>-derived types /// </summary> /// <typeparam name="T">The DataBag-derived type that is to be serialized/deserialized.</typeparam> - [ContractClass(typeof(IDataBagFormatterContract<>))] internal interface IDataBagFormatter<in T> where T : DataBag { /// <summary> /// Serializes the specified message. @@ -30,50 +29,4 @@ namespace DotNetOpenAuth.Messaging { /// <param name="messagePartName">The name of the parameter whose value is to be deserialized. Used for error message generation, but may be <c>null</c>.</param> void Deserialize(T message, string data, IProtocolMessage containingMessage = null, string messagePartName = null); } - - /// <summary> - /// Contract class for the IDataBagFormatter interface. - /// </summary> - /// <typeparam name="T">The type of DataBag to serialize.</typeparam> - [ContractClassFor(typeof(IDataBagFormatter<>))] - internal abstract class IDataBagFormatterContract<T> : IDataBagFormatter<T> where T : DataBag, new() { - /// <summary> - /// Prevents a default instance of the <see cref="IDataBagFormatterContract<T>"/> class from being created. - /// </summary> - private IDataBagFormatterContract() { - } - - #region IDataBagFormatter<T> Members - - /// <summary> - /// Serializes the specified message. - /// </summary> - /// <param name="message">The message to serialize. Must not be null.</param> - /// <returns>A non-null, non-empty value.</returns> - string IDataBagFormatter<T>.Serialize(T message) { - Requires.NotNull(message, "message"); - Contract.Ensures(!string.IsNullOrEmpty(Contract.Result<string>())); - - throw new System.NotImplementedException(); - } - - /// <summary> - /// Deserializes a <see cref="DataBag"/>. - /// </summary> - /// <param name="message">The instance to deserialize into</param> - /// <param name="data">The serialized form of the <see cref="DataBag"/> to deserialize. Must not be null or empty.</param> - /// <param name="containingMessage">The message that contains the <see cref="DataBag"/> serialized value. Must not be nulll.</param> - /// <param name="messagePartName">Name of the message part whose value is to be deserialized. Used for exception messages.</param> - void IDataBagFormatter<T>.Deserialize(T message, string data, IProtocolMessage containingMessage, string messagePartName) { - Requires.NotNull(message, "message"); - Requires.NotNull(containingMessage, "containingMessage"); - Requires.NotNullOrEmpty(data, "data"); - Requires.NotNullOrEmpty(messagePartName, "messagePartName"); - Contract.Ensures(Contract.Result<T>() != null); - - throw new System.NotImplementedException(); - } - - #endregion - } }
\ No newline at end of file diff --git a/src/DotNetOpenAuth.Core/Messaging/IDirectWebRequestHandler.cs b/src/DotNetOpenAuth.Core/Messaging/IDirectWebRequestHandler.cs index 7878405..f3975b3 100644 --- a/src/DotNetOpenAuth.Core/Messaging/IDirectWebRequestHandler.cs +++ b/src/DotNetOpenAuth.Core/Messaging/IDirectWebRequestHandler.cs @@ -11,6 +11,7 @@ namespace DotNetOpenAuth.Messaging { using System.IO; using System.Net; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// A contract for <see cref="HttpWebRequest"/> handling. @@ -18,7 +19,6 @@ namespace DotNetOpenAuth.Messaging { /// <remarks> /// Implementations of this interface must be thread safe. /// </remarks> - [ContractClass(typeof(IDirectWebRequestHandlerContract))] public interface IDirectWebRequestHandler { /// <summary> /// Determines whether this instance can support the specified options. @@ -102,122 +102,4 @@ namespace DotNetOpenAuth.Messaging { /// </remarks> IncomingWebResponse GetResponse(HttpWebRequest request, DirectWebRequestOptions options); } - - /// <summary> - /// Code contract for the <see cref="IDirectWebRequestHandler"/> type. - /// </summary> - [ContractClassFor(typeof(IDirectWebRequestHandler))] - internal abstract class IDirectWebRequestHandlerContract : IDirectWebRequestHandler { - #region IDirectWebRequestHandler Members - - /// <summary> - /// Determines whether this instance can support the specified options. - /// </summary> - /// <param name="options">The set of options that might be given in a subsequent web request.</param> - /// <returns> - /// <c>true</c> if this instance can support the specified options; otherwise, <c>false</c>. - /// </returns> - bool IDirectWebRequestHandler.CanSupport(DirectWebRequestOptions options) { - throw new System.NotImplementedException(); - } - - /// <summary> - /// Prepares an <see cref="HttpWebRequest"/> that contains an POST entity for sending the entity. - /// </summary> - /// <param name="request">The <see cref="HttpWebRequest"/> that should contain the entity.</param> - /// <returns> - /// The stream the caller should write out the entity data to. - /// </returns> - /// <exception cref="ProtocolException">Thrown for any network error.</exception> - /// <remarks> - /// <para>The caller should have set the <see cref="HttpWebRequest.ContentLength"/> - /// and any other appropriate properties <i>before</i> calling this method. - /// Callers <i>must</i> close and dispose of the request stream when they are done - /// writing to it to avoid taking up the connection too long and causing long waits on - /// subsequent requests.</para> - /// <para>Implementations should catch <see cref="WebException"/> and wrap it in a - /// <see cref="ProtocolException"/> to abstract away the transport and provide - /// a single exception type for hosts to catch.</para> - /// </remarks> - Stream IDirectWebRequestHandler.GetRequestStream(HttpWebRequest request) { - Requires.NotNull(request, "request"); - throw new System.NotImplementedException(); - } - - /// <summary> - /// Prepares an <see cref="HttpWebRequest"/> that contains an POST entity for sending the entity. - /// </summary> - /// <param name="request">The <see cref="HttpWebRequest"/> that should contain the entity.</param> - /// <param name="options">The options to apply to this web request.</param> - /// <returns> - /// The stream the caller should write out the entity data to. - /// </returns> - /// <exception cref="ProtocolException">Thrown for any network error.</exception> - /// <remarks> - /// <para>The caller should have set the <see cref="HttpWebRequest.ContentLength"/> - /// and any other appropriate properties <i>before</i> calling this method. - /// Callers <i>must</i> close and dispose of the request stream when they are done - /// writing to it to avoid taking up the connection too long and causing long waits on - /// subsequent requests.</para> - /// <para>Implementations should catch <see cref="WebException"/> and wrap it in a - /// <see cref="ProtocolException"/> to abstract away the transport and provide - /// a single exception type for hosts to catch.</para> - /// </remarks> - Stream IDirectWebRequestHandler.GetRequestStream(HttpWebRequest request, DirectWebRequestOptions options) { - Requires.NotNull(request, "request"); - Requires.Support(((IDirectWebRequestHandler)this).CanSupport(options), MessagingStrings.DirectWebRequestOptionsNotSupported); - ////ErrorUtilities.VerifySupported(((IDirectWebRequestHandler)this).CanSupport(options), string.Format(MessagingStrings.DirectWebRequestOptionsNotSupported, options, this.GetType().Name)); - throw new System.NotImplementedException(); - } - - /// <summary> - /// Processes an <see cref="HttpWebRequest"/> and converts the - /// <see cref="HttpWebResponse"/> to a <see cref="IncomingWebResponse"/> instance. - /// </summary> - /// <param name="request">The <see cref="HttpWebRequest"/> to handle.</param> - /// <returns> - /// An instance of <see cref="IncomingWebResponse"/> describing the response. - /// </returns> - /// <exception cref="ProtocolException">Thrown for any network error.</exception> - /// <remarks> - /// Implementations should catch <see cref="WebException"/> and wrap it in a - /// <see cref="ProtocolException"/> to abstract away the transport and provide - /// a single exception type for hosts to catch. The <see cref="WebException.Response"/> - /// value, if set, should be Closed before throwing. - /// </remarks> - IncomingWebResponse IDirectWebRequestHandler.GetResponse(HttpWebRequest request) { - Requires.NotNull(request, "request"); - Contract.Ensures(Contract.Result<IncomingWebResponse>() != null); - Contract.Ensures(Contract.Result<IncomingWebResponse>().ResponseStream != null); - throw new System.NotImplementedException(); - } - - /// <summary> - /// Processes an <see cref="HttpWebRequest"/> and converts the - /// <see cref="HttpWebResponse"/> to a <see cref="IncomingWebResponse"/> instance. - /// </summary> - /// <param name="request">The <see cref="HttpWebRequest"/> to handle.</param> - /// <param name="options">The options to apply to this web request.</param> - /// <returns> - /// An instance of <see cref="IncomingWebResponse"/> describing the response. - /// </returns> - /// <exception cref="ProtocolException">Thrown for any network error.</exception> - /// <remarks> - /// Implementations should catch <see cref="WebException"/> and wrap it in a - /// <see cref="ProtocolException"/> to abstract away the transport and provide - /// a single exception type for hosts to catch. The <see cref="WebException.Response"/> - /// value, if set, should be Closed before throwing. - /// </remarks> - IncomingWebResponse IDirectWebRequestHandler.GetResponse(HttpWebRequest request, DirectWebRequestOptions options) { - Requires.NotNull(request, "request"); - Contract.Ensures(Contract.Result<IncomingWebResponse>() != null); - Contract.Ensures(Contract.Result<IncomingWebResponse>().ResponseStream != null); - Requires.Support(((IDirectWebRequestHandler)this).CanSupport(options), MessagingStrings.DirectWebRequestOptionsNotSupported); - - ////ErrorUtilities.VerifySupported(((IDirectWebRequestHandler)this).CanSupport(options), string.Format(MessagingStrings.DirectWebRequestOptionsNotSupported, options, this.GetType().Name)); - throw new System.NotImplementedException(); - } - - #endregion - } } diff --git a/src/DotNetOpenAuth.Core/Messaging/IHttpDirectRequest.cs b/src/DotNetOpenAuth.Core/Messaging/IHttpDirectRequest.cs index 7153334..7b26869 100644 --- a/src/DotNetOpenAuth.Core/Messaging/IHttpDirectRequest.cs +++ b/src/DotNetOpenAuth.Core/Messaging/IHttpDirectRequest.cs @@ -5,13 +5,11 @@ //----------------------------------------------------------------------- namespace DotNetOpenAuth.Messaging { - using System.Diagnostics.Contracts; using System.Net; /// <summary> /// An interface that allows direct request messages to capture the details of the HTTP request they arrived on. /// </summary> - [ContractClass(typeof(IHttpDirectRequestContract))] public interface IHttpDirectRequest : IMessage { /// <summary> /// Gets the HTTP headers of the request. diff --git a/src/DotNetOpenAuth.Core/Messaging/IHttpDirectRequestContract.cs b/src/DotNetOpenAuth.Core/Messaging/IHttpDirectRequestContract.cs deleted file mode 100644 index cfde6cf..0000000 --- a/src/DotNetOpenAuth.Core/Messaging/IHttpDirectRequestContract.cs +++ /dev/null @@ -1,75 +0,0 @@ -//----------------------------------------------------------------------- -// <copyright file="IHttpDirectRequestContract.cs" company="Outercurve Foundation"> -// Copyright (c) Outercurve Foundation. All rights reserved. -// </copyright> -//----------------------------------------------------------------------- - -namespace DotNetOpenAuth.Messaging { - using System; - using System.Collections.Generic; - using System.Diagnostics.Contracts; - using System.Linq; - using System.Net; - using System.Text; - - /// <summary> - /// Contract class for the <see cref="IHttpDirectRequest"/> interface. - /// </summary> - [ContractClassFor(typeof(IHttpDirectRequest))] - public abstract class IHttpDirectRequestContract : IHttpDirectRequest { - #region IHttpDirectRequest Members - - /// <summary> - /// Gets the HTTP headers of the request. - /// </summary> - /// <value>May be an empty collection, but must not be <c>null</c>.</value> - WebHeaderCollection IHttpDirectRequest.Headers { - get { - Contract.Ensures(Contract.Result<WebHeaderCollection>() != null); - throw new NotImplementedException(); - } - } - - #endregion - - #region IMessage Members - - /// <summary> - /// Gets the version of the protocol or extension this message is prepared to implement. - /// </summary> - /// <remarks> - /// Implementations of this interface should ensure that this property never returns null. - /// </remarks> - Version IMessage.Version { - get { throw new NotImplementedException(); } - } - - /// <summary> - /// Gets the extra, non-standard Protocol parameters included in the message. - /// </summary> - /// <remarks> - /// Implementations of this interface should ensure that this property never returns null. - /// </remarks> - IDictionary<string, string> IMessage.ExtraData { - get { throw new NotImplementedException(); } - } - - /// <summary> - /// Checks the message state for conformity to the protocol specification - /// and throws an exception if the message is invalid. - /// </summary> - /// <remarks> - /// <para>Some messages have required fields, or combinations of fields that must relate to each other - /// in specialized ways. After deserializing a message, this method checks the state of the - /// message to see if it conforms to the protocol.</para> - /// <para>Note that this property should <i>not</i> check signatures or perform any state checks - /// outside this scope of this particular message.</para> - /// </remarks> - /// <exception cref="ProtocolException">Thrown if the message is invalid.</exception> - void IMessage.EnsureValidMessage() { - throw new NotImplementedException(); - } - - #endregion - } -} diff --git a/src/DotNetOpenAuth.Core/Messaging/IHttpDirectResponse.cs b/src/DotNetOpenAuth.Core/Messaging/IHttpDirectResponse.cs index d942366..f455fcf 100644 --- a/src/DotNetOpenAuth.Core/Messaging/IHttpDirectResponse.cs +++ b/src/DotNetOpenAuth.Core/Messaging/IHttpDirectResponse.cs @@ -5,14 +5,12 @@ //----------------------------------------------------------------------- namespace DotNetOpenAuth.Messaging { - using System.Diagnostics.Contracts; using System.Net; /// <summary> /// An interface that allows direct response messages to specify /// HTTP transport specific properties. /// </summary> - [ContractClass(typeof(IHttpDirectResponseContract))] public interface IHttpDirectResponse { /// <summary> /// Gets the HTTP status code that the direct response should be sent with. diff --git a/src/DotNetOpenAuth.Core/Messaging/IHttpDirectResponseContract.cs b/src/DotNetOpenAuth.Core/Messaging/IHttpDirectResponseContract.cs deleted file mode 100644 index a04ba62..0000000 --- a/src/DotNetOpenAuth.Core/Messaging/IHttpDirectResponseContract.cs +++ /dev/null @@ -1,43 +0,0 @@ -//----------------------------------------------------------------------- -// <copyright file="IHttpDirectResponseContract.cs" company="Outercurve Foundation"> -// Copyright (c) Outercurve Foundation. All rights reserved. -// </copyright> -//----------------------------------------------------------------------- - -namespace DotNetOpenAuth.Messaging { - using System; - using System.Collections.Generic; - using System.Diagnostics.Contracts; - using System.Linq; - using System.Net; - using System.Text; - - /// <summary> - /// Contract class for the <see cref="IHttpDirectResponse"/> interface. - /// </summary> - [ContractClassFor(typeof(IHttpDirectResponse))] - public abstract class IHttpDirectResponseContract : IHttpDirectResponse { - #region IHttpDirectResponse Members - - /// <summary> - /// Gets the HTTP status code that the direct response should be sent with. - /// </summary> - /// <value></value> - HttpStatusCode IHttpDirectResponse.HttpStatusCode { - get { throw new NotImplementedException(); } - } - - /// <summary> - /// Gets the HTTP headers to add to the response. - /// </summary> - /// <value>May be an empty collection, but must not be <c>null</c>.</value> - WebHeaderCollection IHttpDirectResponse.Headers { - get { - Contract.Ensures(Contract.Result<WebHeaderCollection>() != null); - throw new NotImplementedException(); - } - } - - #endregion - } -} diff --git a/src/DotNetOpenAuth.Core/Messaging/IHttpIndirectResponse.cs b/src/DotNetOpenAuth.Core/Messaging/IHttpIndirectResponse.cs index e0e8665..c9ab73b 100644 --- a/src/DotNetOpenAuth.Core/Messaging/IHttpIndirectResponse.cs +++ b/src/DotNetOpenAuth.Core/Messaging/IHttpIndirectResponse.cs @@ -5,7 +5,6 @@ //----------------------------------------------------------------------- namespace DotNetOpenAuth.Messaging { - using System.Diagnostics.Contracts; using System.Net; /// <summary> diff --git a/src/DotNetOpenAuth.Core/Messaging/IMessage.cs b/src/DotNetOpenAuth.Core/Messaging/IMessage.cs index 62673ef..c007913 100644 --- a/src/DotNetOpenAuth.Core/Messaging/IMessage.cs +++ b/src/DotNetOpenAuth.Core/Messaging/IMessage.cs @@ -7,14 +7,12 @@ namespace DotNetOpenAuth.Messaging { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Text; /// <summary> /// The interface that classes must implement to be serialized/deserialized /// as protocol or extension messages. /// </summary> - [ContractClass(typeof(IMessageContract))] public interface IMessage { /// <summary> /// Gets the version of the protocol or extension this message is prepared to implement. @@ -46,55 +44,4 @@ namespace DotNetOpenAuth.Messaging { /// <exception cref="ProtocolException">Thrown if the message is invalid.</exception> void EnsureValidMessage(); } - - /// <summary> - /// Code contract for the <see cref="IMessage"/> interface. - /// </summary> - [ContractClassFor(typeof(IMessage))] - internal abstract class IMessageContract : IMessage { - /// <summary> - /// Prevents a default instance of the <see cref="IMessageContract"/> class from being created. - /// </summary> - private IMessageContract() { - } - - /// <summary> - /// Gets the version of the protocol or extension this message is prepared to implement. - /// </summary> - Version IMessage.Version { - get { - Contract.Ensures(Contract.Result<Version>() != null); - return default(Version); // dummy return - } - } - - /// <summary> - /// Gets the extra, non-standard Protocol parameters included in the message. - /// </summary> - /// <value></value> - /// <remarks> - /// Implementations of this interface should ensure that this property never returns null. - /// </remarks> - IDictionary<string, string> IMessage.ExtraData { - get { - Contract.Ensures(Contract.Result<IDictionary<string, string>>() != null); - return default(IDictionary<string, string>); - } - } - - /// <summary> - /// Checks the message state for conformity to the protocol specification - /// and throws an exception if the message is invalid. - /// </summary> - /// <remarks> - /// <para>Some messages have required fields, or combinations of fields that must relate to each other - /// in specialized ways. After deserializing a message, this method checks the state of the - /// message to see if it conforms to the protocol.</para> - /// <para>Note that this property should <i>not</i> check signatures or perform any state checks - /// outside this scope of this particular message.</para> - /// </remarks> - /// <exception cref="ProtocolException">Thrown if the message is invalid.</exception> - void IMessage.EnsureValidMessage() { - } - } } diff --git a/src/DotNetOpenAuth.Core/Messaging/IMessageFactory.cs b/src/DotNetOpenAuth.Core/Messaging/IMessageFactory.cs index e45ac1d..1e86328 100644 --- a/src/DotNetOpenAuth.Core/Messaging/IMessageFactory.cs +++ b/src/DotNetOpenAuth.Core/Messaging/IMessageFactory.cs @@ -7,13 +7,12 @@ namespace DotNetOpenAuth.Messaging { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; + using Validation; /// <summary> /// A tool to analyze an incoming message to figure out what concrete class /// is designed to deserialize it and instantiates that class. /// </summary> - [ContractClass(typeof(IMessageFactoryContract))] public interface IMessageFactory { /// <summary> /// Analyzes an incoming request message payload to discover what kind of @@ -41,53 +40,4 @@ namespace DotNetOpenAuth.Messaging { /// </returns> IDirectResponseProtocolMessage GetNewResponseMessage(IDirectedProtocolMessage request, IDictionary<string, string> fields); } - - /// <summary> - /// Code contract for the <see cref="IMessageFactory"/> interface. - /// </summary> - [ContractClassFor(typeof(IMessageFactory))] - internal abstract class IMessageFactoryContract : IMessageFactory { - /// <summary> - /// Prevents a default instance of the <see cref="IMessageFactoryContract"/> class from being created. - /// </summary> - private IMessageFactoryContract() { - } - - #region IMessageFactory Members - - /// <summary> - /// Analyzes an incoming request message payload to discover what kind of - /// message is embedded in it and returns the type, or null if no match is found. - /// </summary> - /// <param name="recipient">The intended or actual recipient of the request message.</param> - /// <param name="fields">The name/value pairs that make up the message payload.</param> - /// <returns> - /// A newly instantiated <see cref="IProtocolMessage"/>-derived object that this message can - /// deserialize to. Null if the request isn't recognized as a valid protocol message. - /// </returns> - IDirectedProtocolMessage IMessageFactory.GetNewRequestMessage(MessageReceivingEndpoint recipient, IDictionary<string, string> fields) { - Requires.NotNull(recipient, "recipient"); - Requires.NotNull(fields, "fields"); - - throw new NotImplementedException(); - } - - /// <summary> - /// Analyzes an incoming request message payload to discover what kind of - /// message is embedded in it and returns the type, or null if no match is found. - /// </summary> - /// <param name="request">The message that was sent as a request that resulted in the response.</param> - /// <param name="fields">The name/value pairs that make up the message payload.</param> - /// <returns> - /// A newly instantiated <see cref="IProtocolMessage"/>-derived object that this message can - /// deserialize to. Null if the request isn't recognized as a valid protocol message. - /// </returns> - IDirectResponseProtocolMessage IMessageFactory.GetNewResponseMessage(IDirectedProtocolMessage request, IDictionary<string, string> fields) { - Requires.NotNull(request, "request"); - Requires.NotNull(fields, "fields"); - throw new NotImplementedException(); - } - - #endregion - } } diff --git a/src/DotNetOpenAuth.Core/Messaging/IMessageOriginalPayload.cs b/src/DotNetOpenAuth.Core/Messaging/IMessageOriginalPayload.cs index 099f54b..33fa860 100644 --- a/src/DotNetOpenAuth.Core/Messaging/IMessageOriginalPayload.cs +++ b/src/DotNetOpenAuth.Core/Messaging/IMessageOriginalPayload.cs @@ -8,14 +8,12 @@ namespace DotNetOpenAuth.Messaging { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Text; /// <summary> /// An interface that appears on messages that need to retain a description of /// what their literal payload was when they were deserialized. /// </summary> - [ContractClass(typeof(IMessageOriginalPayloadContract))] public interface IMessageOriginalPayload { /// <summary> /// Gets or sets the original message parts, before any normalization or default values were assigned. @@ -23,18 +21,4 @@ namespace DotNetOpenAuth.Messaging { [SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly", Justification = "By design")] IDictionary<string, string> OriginalPayload { get; set; } } - - /// <summary> - /// Code contract for the <see cref="IMessageOriginalPayload"/> interface. - /// </summary> - [ContractClassFor(typeof(IMessageOriginalPayload))] - internal abstract class IMessageOriginalPayloadContract : IMessageOriginalPayload { - /// <summary> - /// Gets or sets the original message parts, before any normalization or default values were assigned. - /// </summary> - IDictionary<string, string> IMessageOriginalPayload.OriginalPayload { - get { throw new NotImplementedException(); } - set { throw new NotImplementedException(); } - } - } } diff --git a/src/DotNetOpenAuth.Core/Messaging/IMessageWithBinaryData.cs b/src/DotNetOpenAuth.Core/Messaging/IMessageWithBinaryData.cs index 60e1f50..2992678 100644 --- a/src/DotNetOpenAuth.Core/Messaging/IMessageWithBinaryData.cs +++ b/src/DotNetOpenAuth.Core/Messaging/IMessageWithBinaryData.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.Messaging { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; @@ -15,7 +14,6 @@ namespace DotNetOpenAuth.Messaging { /// The interface that classes must implement to be serialized/deserialized /// as protocol or extension messages that uses POST multi-part data for binary content. /// </summary> - [ContractClass(typeof(IMessageWithBinaryDataContract))] public interface IMessageWithBinaryData : IDirectedProtocolMessage { /// <summary> /// Gets the parts of the message that carry binary data. @@ -28,129 +26,4 @@ namespace DotNetOpenAuth.Messaging { /// </summary> bool SendAsMultipart { get; } } - - /// <summary> - /// The contract class for the <see cref="IMessageWithBinaryData"/> interface. - /// </summary> - [ContractClassFor(typeof(IMessageWithBinaryData))] - internal abstract class IMessageWithBinaryDataContract : IMessageWithBinaryData { - /// <summary> - /// Prevents a default instance of the <see cref="IMessageWithBinaryDataContract"/> class from being created. - /// </summary> - private IMessageWithBinaryDataContract() { - } - - #region IMessageWithBinaryData Members - - /// <summary> - /// Gets the parts of the message that carry binary data. - /// </summary> - /// <value>A list of parts. Never null.</value> - IList<MultipartPostPart> IMessageWithBinaryData.BinaryData { - get { - Contract.Ensures(Contract.Result<IList<MultipartPostPart>>() != null); - throw new NotImplementedException(); - } - } - - /// <summary> - /// Gets a value indicating whether this message should be sent as multi-part POST. - /// </summary> - bool IMessageWithBinaryData.SendAsMultipart { - get { throw new NotImplementedException(); } - } - - #endregion - - #region IMessage Properties - - /// <summary> - /// Gets the version of the protocol or extension this message is prepared to implement. - /// </summary> - /// <value></value> - /// <remarks> - /// Implementations of this interface should ensure that this property never returns null. - /// </remarks> - Version IMessage.Version { - get { - return default(Version); // dummy return - } - } - - /// <summary> - /// Gets the extra, non-standard Protocol parameters included in the message. - /// </summary> - /// <value></value> - /// <remarks> - /// Implementations of this interface should ensure that this property never returns null. - /// </remarks> - IDictionary<string, string> IMessage.ExtraData { - get { - return default(IDictionary<string, string>); - } - } - - #endregion - - #region IDirectedProtocolMessage Members - - /// <summary> - /// Gets the preferred method of transport for the message. - /// </summary> - /// <remarks> - /// For indirect messages this will likely be GET+POST, which both can be simulated in the user agent: - /// the GET with a simple 301 Redirect, and the POST with an HTML form in the response with javascript - /// to automate submission. - /// </remarks> - HttpDeliveryMethods IDirectedProtocolMessage.HttpMethods { - get { throw new NotImplementedException(); } - } - - /// <summary> - /// Gets the URL of the intended receiver of this message. - /// </summary> - Uri IDirectedProtocolMessage.Recipient { - get { throw new NotImplementedException(); } - } - - #endregion - - #region IProtocolMessage Members - - /// <summary> - /// Gets the level of protection this message requires. - /// </summary> - MessageProtections IProtocolMessage.RequiredProtection { - get { throw new NotImplementedException(); } - } - - /// <summary> - /// Gets a value indicating whether this is a direct or indirect message. - /// </summary> - MessageTransport IProtocolMessage.Transport { - get { throw new NotImplementedException(); } - } - - #endregion - - #region IMessage methods - - /// <summary> - /// Checks the message state for conformity to the protocol specification - /// and throws an exception if the message is invalid. - /// </summary> - /// <remarks> - /// <para>Some messages have required fields, or combinations of fields that must relate to each other - /// in specialized ways. After deserializing a message, this method checks the state of the - /// message to see if it conforms to the protocol.</para> - /// <para>Note that this property should <i>not</i> check signatures or perform any state checks - /// outside this scope of this particular message.</para> - /// </remarks> - /// <exception cref="ProtocolException">Thrown if the message is invalid.</exception> - void IMessage.EnsureValidMessage() { - throw new NotImplementedException(); - } - - #endregion - } } diff --git a/src/DotNetOpenAuth.Core/Messaging/IProtocolMessageWithExtensions.cs b/src/DotNetOpenAuth.Core/Messaging/IProtocolMessageWithExtensions.cs index c492e65..436c7a9 100644 --- a/src/DotNetOpenAuth.Core/Messaging/IProtocolMessageWithExtensions.cs +++ b/src/DotNetOpenAuth.Core/Messaging/IProtocolMessageWithExtensions.cs @@ -7,12 +7,10 @@ namespace DotNetOpenAuth.Messaging { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; /// <summary> /// A protocol message that supports adding extensions to the payload for transmission. /// </summary> - [ContractClass(typeof(IProtocolMessageWithExtensionsContract))] public interface IProtocolMessageWithExtensions : IProtocolMessage { /// <summary> /// Gets the list of extensions that are included with this message. @@ -22,95 +20,4 @@ namespace DotNetOpenAuth.Messaging { /// </remarks> IList<IExtensionMessage> Extensions { get; } } - - /// <summary> - /// Code contract for the <see cref="IProtocolMessageWithExtensions"/> interface. - /// </summary> - [ContractClassFor(typeof(IProtocolMessageWithExtensions))] - internal abstract class IProtocolMessageWithExtensionsContract : IProtocolMessageWithExtensions { - /// <summary> - /// Prevents a default instance of the <see cref="IProtocolMessageWithExtensionsContract"/> class from being created. - /// </summary> - private IProtocolMessageWithExtensionsContract() { - } - - #region IProtocolMessageWithExtensions Members - - /// <summary> - /// Gets the list of extensions that are included with this message. - /// </summary> - /// <remarks> - /// Implementations of this interface should ensure that this property never returns null. - /// </remarks> - IList<IExtensionMessage> IProtocolMessageWithExtensions.Extensions { - get { - Contract.Ensures(Contract.Result<IList<IExtensionMessage>>() != null); - throw new NotImplementedException(); - } - } - - #endregion - - #region IProtocolMessage Members - - /// <summary> - /// Gets the level of protection this message requires. - /// </summary> - MessageProtections IProtocolMessage.RequiredProtection { - get { throw new NotImplementedException(); } - } - - /// <summary> - /// Gets a value indicating whether this is a direct or indirect message. - /// </summary> - MessageTransport IProtocolMessage.Transport { - get { throw new NotImplementedException(); } - } - - #endregion - - #region IMessage Members - - /// <summary> - /// Gets the version of the protocol or extension this message is prepared to implement. - /// </summary> - /// <remarks> - /// Implementations of this interface should ensure that this property never returns null. - /// </remarks> - Version IMessage.Version { - get { - throw new NotImplementedException(); - } - } - - /// <summary> - /// Gets the extra, non-standard Protocol parameters included in the message. - /// </summary> - /// <remarks> - /// Implementations of this interface should ensure that this property never returns null. - /// </remarks> - IDictionary<string, string> IMessage.ExtraData { - get { - throw new NotImplementedException(); - } - } - - /// <summary> - /// Checks the message state for conformity to the protocol specification - /// and throws an exception if the message is invalid. - /// </summary> - /// <remarks> - /// <para>Some messages have required fields, or combinations of fields that must relate to each other - /// in specialized ways. After deserializing a message, this method checks the state of the - /// message to see if it conforms to the protocol.</para> - /// <para>Note that this property should <i>not</i> check signatures or perform any state checks - /// outside this scope of this particular message.</para> - /// </remarks> - /// <exception cref="ProtocolException">Thrown if the message is invalid.</exception> - void IMessage.EnsureValidMessage() { - throw new NotImplementedException(); - } - - #endregion - } } diff --git a/src/DotNetOpenAuth.Core/Messaging/IStreamSerializingDataBag.cs b/src/DotNetOpenAuth.Core/Messaging/IStreamSerializingDataBag.cs index cc82d6a..16fed67 100644 --- a/src/DotNetOpenAuth.Core/Messaging/IStreamSerializingDataBag.cs +++ b/src/DotNetOpenAuth.Core/Messaging/IStreamSerializingDataBag.cs @@ -6,13 +6,11 @@ namespace DotNetOpenAuth.Messaging { using System; - using System.Diagnostics.Contracts; using System.IO; /// <summary> /// An interface implemented by <see cref="DataBag"/>-derived types that support binary serialization. /// </summary> - [ContractClass(typeof(IStreamSerializingDataBaContract))] internal interface IStreamSerializingDataBag { /// <summary> /// Serializes the instance to the specified stream. @@ -26,30 +24,4 @@ namespace DotNetOpenAuth.Messaging { /// <param name="stream">The stream.</param> void Deserialize(Stream stream); } - - /// <summary> - /// Code Contract for the <see cref="IStreamSerializingDataBag"/> interface. - /// </summary> - [ContractClassFor(typeof(IStreamSerializingDataBag))] - internal abstract class IStreamSerializingDataBaContract : IStreamSerializingDataBag { - /// <summary> - /// Serializes the instance to the specified stream. - /// </summary> - /// <param name="stream">The stream.</param> - void IStreamSerializingDataBag.Serialize(Stream stream) { - Contract.Requires(stream != null); - Contract.Requires(stream.CanWrite); - throw new NotImplementedException(); - } - - /// <summary> - /// Initializes the fields on this instance from the specified stream. - /// </summary> - /// <param name="stream">The stream.</param> - void IStreamSerializingDataBag.Deserialize(Stream stream) { - Contract.Requires(stream != null); - Contract.Requires(stream.CanRead); - throw new NotImplementedException(); - } - } } diff --git a/src/DotNetOpenAuth.Core/Messaging/IncomingWebResponse.cs b/src/DotNetOpenAuth.Core/Messaging/IncomingWebResponse.cs index cdb26ae..abb01a1 100644 --- a/src/DotNetOpenAuth.Core/Messaging/IncomingWebResponse.cs +++ b/src/DotNetOpenAuth.Core/Messaging/IncomingWebResponse.cs @@ -7,18 +7,16 @@ namespace DotNetOpenAuth.Messaging { using System; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Globalization; using System.IO; using System.Net; using System.Net.Mime; using System.Text; + using Validation; /// <summary> /// Details on the incoming response from a direct web request to a remote party. /// </summary> - [ContractVerification(true)] - [ContractClass(typeof(IncomingWebResponseContract))] public abstract class IncomingWebResponse : IDisposable { /// <summary> /// The encoding to use in reading a response that does not declare its own content encoding. diff --git a/src/DotNetOpenAuth.Core/Messaging/IncomingWebResponseContract.cs b/src/DotNetOpenAuth.Core/Messaging/IncomingWebResponseContract.cs deleted file mode 100644 index 5c94e47..0000000 --- a/src/DotNetOpenAuth.Core/Messaging/IncomingWebResponseContract.cs +++ /dev/null @@ -1,54 +0,0 @@ -//----------------------------------------------------------------------- -// <copyright file="IncomingWebResponseContract.cs" company="Outercurve Foundation"> -// Copyright (c) Outercurve Foundation. All rights reserved. -// </copyright> -//----------------------------------------------------------------------- - -namespace DotNetOpenAuth.Messaging { - using System; - using System.Diagnostics.Contracts; - using System.IO; - - /// <summary> - /// Code contract for the <see cref="IncomingWebResponse"/> class. - /// </summary> - [ContractClassFor(typeof(IncomingWebResponse))] - internal abstract class IncomingWebResponseContract : IncomingWebResponse { - /// <summary> - /// Gets the body of the HTTP response. - /// </summary> - /// <value></value> - public override Stream ResponseStream { - get { throw new NotImplementedException(); } - } - - /// <summary> - /// Creates a text reader for the response stream. - /// </summary> - /// <returns> - /// The text reader, initialized for the proper encoding. - /// </returns> - public override StreamReader GetResponseReader() { - Contract.Ensures(Contract.Result<StreamReader>() != null); - throw new NotImplementedException(); - } - - /// <summary> - /// Gets an offline snapshot version of this instance. - /// </summary> - /// <param name="maximumBytesToCache">The maximum bytes from the response stream to cache.</param> - /// <returns>A snapshot version of this instance.</returns> - /// <remarks> - /// If this instance is a <see cref="NetworkDirectWebResponse"/> creating a snapshot - /// will automatically close and dispose of the underlying response stream. - /// If this instance is a <see cref="CachedDirectWebResponse"/>, the result will - /// be the self same instance. - /// </remarks> - internal override CachedDirectWebResponse GetSnapshot(int maximumBytesToCache) { - Requires.InRange(maximumBytesToCache >= 0, "maximumBytesToCache"); - Requires.ValidState(this.RequestUri != null); - Contract.Ensures(Contract.Result<CachedDirectWebResponse>() != null); - throw new NotImplementedException(); - } - } -} diff --git a/src/DotNetOpenAuth.Core/Messaging/KeyedCollectionDelegate.cs b/src/DotNetOpenAuth.Core/Messaging/KeyedCollectionDelegate.cs index d0988c8..251ff30 100644 --- a/src/DotNetOpenAuth.Core/Messaging/KeyedCollectionDelegate.cs +++ b/src/DotNetOpenAuth.Core/Messaging/KeyedCollectionDelegate.cs @@ -7,7 +7,7 @@ namespace DotNetOpenAuth.Messaging { using System; using System.Collections.ObjectModel; - using System.Diagnostics.Contracts; + using Validation; /// <summary> /// A KeyedCollection whose item -> key transform is provided via a delegate diff --git a/src/DotNetOpenAuth.Core/Messaging/MessageReceivingEndpoint.cs b/src/DotNetOpenAuth.Core/Messaging/MessageReceivingEndpoint.cs index cf5ea92..34be92d 100644 --- a/src/DotNetOpenAuth.Core/Messaging/MessageReceivingEndpoint.cs +++ b/src/DotNetOpenAuth.Core/Messaging/MessageReceivingEndpoint.cs @@ -7,7 +7,7 @@ namespace DotNetOpenAuth.Messaging { using System; using System.Diagnostics; - using System.Diagnostics.Contracts; + using Validation; /// <summary> /// An immutable description of a URL that receives messages. @@ -23,8 +23,8 @@ namespace DotNetOpenAuth.Messaging { public MessageReceivingEndpoint(string locationUri, HttpDeliveryMethods method) : this(new Uri(locationUri), method) { Requires.NotNull(locationUri, "locationUri"); - Requires.InRange(method != HttpDeliveryMethods.None, "method"); - Requires.InRange((method & HttpDeliveryMethods.HttpVerbMask) != 0, "method", MessagingStrings.GetOrPostFlagsRequired); + Requires.Range(method != HttpDeliveryMethods.None, "method"); + Requires.Range((method & HttpDeliveryMethods.HttpVerbMask) != 0, "method", MessagingStrings.GetOrPostFlagsRequired); } /// <summary> @@ -34,8 +34,8 @@ namespace DotNetOpenAuth.Messaging { /// <param name="method">The HTTP method(s) allowed.</param> public MessageReceivingEndpoint(Uri location, HttpDeliveryMethods method) { Requires.NotNull(location, "location"); - Requires.InRange(method != HttpDeliveryMethods.None, "method"); - Requires.InRange((method & HttpDeliveryMethods.HttpVerbMask) != 0, "method", MessagingStrings.GetOrPostFlagsRequired); + Requires.Range(method != HttpDeliveryMethods.None, "method"); + Requires.Range((method & HttpDeliveryMethods.HttpVerbMask) != 0, "method", MessagingStrings.GetOrPostFlagsRequired); this.Location = location; this.AllowedMethods = method; diff --git a/src/DotNetOpenAuth.Core/Messaging/MessageSerializer.cs b/src/DotNetOpenAuth.Core/Messaging/MessageSerializer.cs index 7391867..1b30748 100644 --- a/src/DotNetOpenAuth.Core/Messaging/MessageSerializer.cs +++ b/src/DotNetOpenAuth.Core/Messaging/MessageSerializer.cs @@ -14,11 +14,11 @@ namespace DotNetOpenAuth.Messaging { using System.Reflection; using System.Xml; using DotNetOpenAuth.Messaging.Reflection; + using Validation; /// <summary> /// Serializes/deserializes OAuth messages for/from transit. /// </summary> - [ContractVerification(true)] internal class MessageSerializer { /// <summary> /// The specific <see cref="IMessage"/>-derived type @@ -31,10 +31,8 @@ namespace DotNetOpenAuth.Messaging { /// </summary> /// <param name="messageType">The specific <see cref="IMessage"/>-derived type /// that will be serialized and deserialized using this class.</param> - [ContractVerification(false)] // bugs/limitations in CC static analysis private MessageSerializer(Type messageType) { - Requires.NotNullSubtype<IMessage>(messageType, "messageType"); - Contract.Ensures(this.messageType != null); + RequiresEx.NotNullSubtype<IMessage>(messageType, "messageType"); this.messageType = messageType; } @@ -43,9 +41,8 @@ namespace DotNetOpenAuth.Messaging { /// </summary> /// <param name="messageType">The type of message that will be serialized/deserialized.</param> /// <returns>A message serializer for the given message type.</returns> - [ContractVerification(false)] // bugs/limitations in CC static analysis - internal static MessageSerializer Get(Type messageType) { - Requires.NotNullSubtype<IMessage>(messageType, "messageType"); + internal static MessageSerializer Get(Type messageType) { + RequiresEx.NotNullSubtype<IMessage>(messageType, "messageType"); return new MessageSerializer(messageType); } @@ -94,7 +91,7 @@ namespace DotNetOpenAuth.Messaging { string type = "string"; MessagePart partDescription; if (messageDictionary.Description.Mapping.TryGetValue(pair.Key, out partDescription)) { - Contract.Assume(partDescription != null); + Assumes.True(partDescription != null); if (partDescription.IsRequired || partDescription.IsNondefaultValueSet(messageDictionary.Message)) { include = true; Type formattingType = partDescription.PreferredFormattingType; @@ -150,7 +147,6 @@ namespace DotNetOpenAuth.Messaging { [SuppressMessage("Microsoft.Performance", "CA1822:MarkMembersAsStatic", Justification = "Parallel design with Deserialize method.")] internal IDictionary<string, string> Serialize(MessageDictionary messageDictionary) { Requires.NotNull(messageDictionary, "messageDictionary"); - Contract.Ensures(Contract.Result<IDictionary<string, string>>() != null); // Rather than hand back the whole message dictionary (which // includes keys with blank values), create a new dictionary @@ -160,7 +156,7 @@ namespace DotNetOpenAuth.Messaging { foreach (var pair in messageDictionary) { MessagePart partDescription; if (messageDictionary.Description.Mapping.TryGetValue(pair.Key, out partDescription)) { - Contract.Assume(partDescription != null); + Assumes.True(partDescription != null); if (partDescription.IsRequired || partDescription.IsNondefaultValueSet(messageDictionary.Message)) { result.Add(pair.Key, pair.Value); } diff --git a/src/DotNetOpenAuth.Core/Messaging/MessagingUtilities.cs b/src/DotNetOpenAuth.Core/Messaging/MessagingUtilities.cs index e859162..fffb855 100644 --- a/src/DotNetOpenAuth.Core/Messaging/MessagingUtilities.cs +++ b/src/DotNetOpenAuth.Core/Messaging/MessagingUtilities.cs @@ -9,7 +9,6 @@ namespace DotNetOpenAuth.Messaging { using System.Collections.Generic; using System.Collections.Specialized; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Globalization; using System.IO; using System.IO.Compression; @@ -29,6 +28,7 @@ namespace DotNetOpenAuth.Messaging { using System.Xml; using DotNetOpenAuth.Messaging.Bindings; using DotNetOpenAuth.Messaging.Reflection; + using Validation; /// <summary> /// A grab-bag of utility methods useful for the channel stack of the protocol. @@ -198,7 +198,7 @@ namespace DotNetOpenAuth.Messaging { [SuppressMessage("Microsoft.Usage", "CA2234:PassSystemUriObjectsInsteadOfStrings", Justification = "The Uri merging requires use of a string value.")] [SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate", Justification = "Expensive call should not be a property.")] public static Uri GetRequestUrlFromContext() { - Requires.ValidState(HttpContext.Current != null && HttpContext.Current.Request != null, MessagingStrings.HttpContextRequired); + RequiresEx.ValidState(HttpContext.Current != null && HttpContext.Current.Request != null, MessagingStrings.HttpContextRequired); return new HttpRequestWrapper(HttpContext.Current.Request).GetPublicFacingUrl(); } @@ -589,7 +589,6 @@ namespace DotNetOpenAuth.Messaging { /// <returns>A sequence of key=value pairs discovered in the header. Never null, but may be empty.</returns> internal static IEnumerable<KeyValuePair<string, string>> ParseAuthorizationHeader(string scheme, string authorizationHeader) { Requires.NotNullOrEmpty(scheme, "scheme"); - Contract.Ensures(Contract.Result<IEnumerable<KeyValuePair<string, string>>>() != null); string prefix = scheme + " "; if (authorizationHeader != null) { @@ -621,7 +620,6 @@ namespace DotNetOpenAuth.Messaging { internal static string CombineKeyHandleAndPayload(string handle, string payload) { Requires.NotNullOrEmpty(handle, "handle"); Requires.NotNullOrEmpty(payload, "payload"); - Contract.Ensures(!string.IsNullOrEmpty(Contract.Result<string>())); return handle + "!" + payload; } @@ -695,8 +693,8 @@ namespace DotNetOpenAuth.Messaging { /// <param name="allowableCharacters">The allowable characters.</param> /// <returns>A random string.</returns> internal static string GetRandomString(int length, string allowableCharacters) { - Requires.InRange(length >= 0, "length"); - Requires.True(allowableCharacters != null && allowableCharacters.Length >= 2, "allowableCharacters"); + Requires.Range(length >= 0, "length"); + Requires.That(allowableCharacters != null && allowableCharacters.Length >= 2, "allowableCharacters", "At least two allowable characters required."); char[] randomString = new char[length]; var random = NonCryptoRandomDataGenerator; @@ -717,7 +715,6 @@ namespace DotNetOpenAuth.Messaging { internal static string ComputeHash(this HashAlgorithm algorithm, string value, Encoding encoding = null) { Requires.NotNull(algorithm, "algorithm"); Requires.NotNull(value, "value"); - Contract.Ensures(Contract.Result<string>() != null); encoding = encoding ?? Encoding.UTF8; byte[] bytesToHash = encoding.GetBytes(value); @@ -736,7 +733,6 @@ namespace DotNetOpenAuth.Messaging { internal static string ComputeHash(this HashAlgorithm algorithm, IDictionary<string, string> data, Encoding encoding = null) { Requires.NotNull(algorithm, "algorithm"); Requires.NotNull(data, "data"); - Contract.Ensures(Contract.Result<string>() != null); // Assemble the dictionary to sign, taking care to remove the signature itself // in order to accurately reproduce the original signature (which of course didn't include @@ -757,7 +753,6 @@ namespace DotNetOpenAuth.Messaging { internal static string ComputeHash(this HashAlgorithm algorithm, IEnumerable<KeyValuePair<string, string>> sortedData, Encoding encoding = null) { Requires.NotNull(algorithm, "algorithm"); Requires.NotNull(sortedData, "sortedData"); - Contract.Ensures(Contract.Result<string>() != null); return ComputeHash(algorithm, CreateQueryString(sortedData), encoding); } @@ -936,7 +931,7 @@ namespace DotNetOpenAuth.Messaging { internal static KeyValuePair<string, CryptoKey> GetCurrentKey(this ICryptoKeyStore cryptoKeyStore, string bucket, TimeSpan minimumRemainingLife, int keySize = 256) { Requires.NotNull(cryptoKeyStore, "cryptoKeyStore"); Requires.NotNullOrEmpty(bucket, "bucket"); - Requires.True(keySize % 8 == 0, "keySize"); + Requires.That(keySize % 8 == 0, "keySize", "Key size must be a multiple of 8."); var cryptoKeyPair = cryptoKeyStore.GetKeys(bucket).FirstOrDefault(pair => pair.Value.Key.Length == keySize / 8); if (cryptoKeyPair.Value == null || cryptoKeyPair.Value.ExpiresUtc < DateTime.UtcNow + minimumRemainingLife) { @@ -979,7 +974,6 @@ namespace DotNetOpenAuth.Messaging { [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Justification = "No apparent problem. False positive?")] internal static byte[] Compress(byte[] buffer, CompressionMethod method = CompressionMethod.Deflate) { Requires.NotNull(buffer, "buffer"); - Contract.Ensures(Contract.Result<byte[]>() != null); using (var ms = new MemoryStream()) { Stream compressingStream = null; @@ -992,7 +986,7 @@ namespace DotNetOpenAuth.Messaging { compressingStream = new GZipStream(ms, CompressionMode.Compress, true); break; default: - Requires.InRange(false, "method"); + Requires.Range(false, "method"); break; } @@ -1016,7 +1010,6 @@ namespace DotNetOpenAuth.Messaging { [SuppressMessage("Microsoft.Usage", "CA2202:Do not dispose objects multiple times", Justification = "This Dispose is safe.")] internal static byte[] Decompress(byte[] buffer, CompressionMethod method = CompressionMethod.Deflate) { Requires.NotNull(buffer, "buffer"); - Contract.Ensures(Contract.Result<byte[]>() != null); using (var compressedDataStream = new MemoryStream(buffer)) { using (var decompressedDataStream = new MemoryStream()) { @@ -1030,7 +1023,7 @@ namespace DotNetOpenAuth.Messaging { decompressingStream = new GZipStream(compressedDataStream, CompressionMode.Decompress, true); break; default: - Requires.InRange(false, "method"); + Requires.Range(false, "method"); break; } @@ -1070,7 +1063,6 @@ namespace DotNetOpenAuth.Messaging { /// <returns>A data buffer.</returns> internal static byte[] FromBase64WebSafeString(string base64WebSafe) { Requires.NotNullOrEmpty(base64WebSafe, "base64WebSafe"); - Contract.Ensures(Contract.Result<byte[]>() != null); // Restore the padding characters and original URL-unsafe characters. int missingPaddingCharacters; @@ -1158,8 +1150,8 @@ namespace DotNetOpenAuth.Messaging { internal static int CopyTo(this Stream copyFrom, Stream copyTo) { Requires.NotNull(copyFrom, "copyFrom"); Requires.NotNull(copyTo, "copyTo"); - Requires.True(copyFrom.CanRead, "copyFrom", MessagingStrings.StreamUnreadable); - Requires.True(copyTo.CanWrite, "copyTo", MessagingStrings.StreamUnwritable); + Requires.That(copyFrom.CanRead, "copyFrom", MessagingStrings.StreamUnreadable); + Requires.That(copyTo.CanWrite, "copyTo", MessagingStrings.StreamUnwritable); return CopyUpTo(copyFrom, copyTo, int.MaxValue); } #endif @@ -1178,8 +1170,8 @@ namespace DotNetOpenAuth.Messaging { internal static int CopyUpTo(this Stream copyFrom, Stream copyTo, int maximumBytesToCopy) { Requires.NotNull(copyFrom, "copyFrom"); Requires.NotNull(copyTo, "copyTo"); - Requires.True(copyFrom.CanRead, "copyFrom", MessagingStrings.StreamUnreadable); - Requires.True(copyTo.CanWrite, "copyTo", MessagingStrings.StreamUnwritable); + Requires.That(copyFrom.CanRead, "copyFrom", MessagingStrings.StreamUnreadable); + Requires.That(copyTo.CanWrite, "copyTo", MessagingStrings.StreamUnwritable); byte[] buffer = new byte[1024]; int readBytes; @@ -1201,7 +1193,7 @@ namespace DotNetOpenAuth.Messaging { /// <returns>A seekable stream with the same contents as the original.</returns> internal static Stream CreateSnapshot(this Stream copyFrom) { Requires.NotNull(copyFrom, "copyFrom"); - Requires.True(copyFrom.CanRead, "copyFrom", MessagingStrings.StreamUnreadable); + Requires.That(copyFrom.CanRead, "copyFrom", MessagingStrings.StreamUnreadable); MemoryStream copyTo = new MemoryStream(copyFrom.CanSeek ? (int)copyFrom.Length : 4 * 1024); try { @@ -1221,7 +1213,7 @@ namespace DotNetOpenAuth.Messaging { /// <returns>The newly created instance.</returns> internal static HttpWebRequest Clone(this HttpWebRequest request) { Requires.NotNull(request, "request"); - Requires.True(request.RequestUri != null, "request"); + Requires.That(request.RequestUri != null, "request", "request.RequestUri cannot be null."); return Clone(request, request.RequestUri); } @@ -1434,7 +1426,6 @@ namespace DotNetOpenAuth.Messaging { /// <returns>The formulated querystring style string.</returns> internal static string CreateQueryString(IEnumerable<KeyValuePair<string, string>> args) { Requires.NotNull(args, "args"); - Contract.Ensures(Contract.Result<string>() != null); if (!args.Any()) { return string.Empty; @@ -1638,7 +1629,6 @@ namespace DotNetOpenAuth.Messaging { /// <c>Dictionary<string, string></c> does not allow null keys. /// </remarks> internal static Dictionary<string, string> ToDictionary(this NameValueCollection nvc) { - Contract.Ensures((nvc != null && Contract.Result<Dictionary<string, string>>() != null) || (nvc == null && Contract.Result<Dictionary<string, string>>() == null)); return ToDictionary(nvc, false); } @@ -1654,7 +1644,6 @@ namespace DotNetOpenAuth.Messaging { /// <returns>The generated dictionary, or null if <paramref name="nvc"/> is null.</returns> /// <exception cref="ArgumentException">Thrown if <paramref name="throwOnNullKey"/> is <c>true</c> and a null key is encountered.</exception> internal static Dictionary<string, string> ToDictionary(this NameValueCollection nvc, bool throwOnNullKey) { - Contract.Ensures((nvc != null && Contract.Result<Dictionary<string, string>>() != null) || (nvc == null && Contract.Result<Dictionary<string, string>>() == null)); if (nvc == null) { return null; } @@ -1708,7 +1697,6 @@ namespace DotNetOpenAuth.Messaging { Requires.NotNull(source, "source"); Requires.NotNull(comparer, "comparer"); Requires.NotNull(keySelector, "keySelector"); - Contract.Ensures(Contract.Result<IOrderedEnumerable<TSource>>() != null); return System.Linq.Enumerable.OrderBy<TSource, TKey>(source, keySelector, new ComparisonHelper<TKey>(comparer)); } @@ -1771,7 +1759,7 @@ namespace DotNetOpenAuth.Messaging { /// <returns>The read buffer.</returns> internal static byte[] ReadBuffer(this BinaryReader reader, int maxBufferSize) { Requires.NotNull(reader, "reader"); - Requires.InRange(maxBufferSize > 0 && maxBufferSize < 1024 * 1024, "maxBufferSize"); + Requires.Range(maxBufferSize > 0 && maxBufferSize < 1024 * 1024, "maxBufferSize"); int length = reader.ReadInt32(); ErrorUtilities.VerifyProtocol(length <= maxBufferSize, MessagingStrings.DataCorruptionDetected); byte[] buffer = new byte[length]; diff --git a/src/DotNetOpenAuth.Core/Messaging/MultipartPostPart.cs b/src/DotNetOpenAuth.Core/Messaging/MultipartPostPart.cs index 055e4b9..b4a0968 100644 --- a/src/DotNetOpenAuth.Core/Messaging/MultipartPostPart.cs +++ b/src/DotNetOpenAuth.Core/Messaging/MultipartPostPart.cs @@ -8,10 +8,10 @@ namespace DotNetOpenAuth.Messaging { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.IO; using System.Net; using System.Text; + using Validation; /// <summary> /// Represents a single part in a HTTP multipart POST request. diff --git a/src/DotNetOpenAuth.Core/Messaging/NetworkDirectWebResponse.cs b/src/DotNetOpenAuth.Core/Messaging/NetworkDirectWebResponse.cs index 2c3ddac..754d71d 100644 --- a/src/DotNetOpenAuth.Core/Messaging/NetworkDirectWebResponse.cs +++ b/src/DotNetOpenAuth.Core/Messaging/NetworkDirectWebResponse.cs @@ -7,16 +7,15 @@ namespace DotNetOpenAuth.Messaging { using System; using System.Diagnostics; - using System.Diagnostics.Contracts; using System.IO; using System.Net; using System.Text; + using Validation; /// <summary> /// A live network HTTP response /// </summary> [DebuggerDisplay("{Status} {ContentType.MediaType}")] - [ContractVerification(true)] internal class NetworkDirectWebResponse : IncomingWebResponse, IDisposable { /// <summary> /// The network response object, used to initialize this instance, that still needs diff --git a/src/DotNetOpenAuth.Core/Messaging/OutgoingWebResponse.cs b/src/DotNetOpenAuth.Core/Messaging/OutgoingWebResponse.cs index e1e9d53..be7774f 100644 --- a/src/DotNetOpenAuth.Core/Messaging/OutgoingWebResponse.cs +++ b/src/DotNetOpenAuth.Core/Messaging/OutgoingWebResponse.cs @@ -8,7 +8,6 @@ namespace DotNetOpenAuth.Messaging { using System; using System.ComponentModel; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.IO; using System.Net; using System.Net.Mime; @@ -16,6 +15,7 @@ namespace DotNetOpenAuth.Messaging { using System.Text; using System.Threading; using System.Web; + using Validation; /// <summary> /// A protocol message (request or response) that passes from this @@ -136,7 +136,7 @@ namespace DotNetOpenAuth.Messaging { /// </remarks> [EditorBrowsable(EditorBrowsableState.Never)] public virtual void Send() { - Requires.ValidState(HttpContext.Current != null && HttpContext.Current.Request != null, MessagingStrings.HttpContextRequired); + RequiresEx.ValidState(HttpContext.Current != null && HttpContext.Current.Request != null, MessagingStrings.HttpContextRequired); this.Send(HttpContext.Current); } @@ -178,7 +178,7 @@ namespace DotNetOpenAuth.Messaging { /// Use the <see cref="Send()"/> method instead for web forms. /// </remarks> public virtual void Respond() { - Requires.ValidState(HttpContext.Current != null && HttpContext.Current.Request != null, MessagingStrings.HttpContextRequired); + RequiresEx.ValidState(HttpContext.Current != null && HttpContext.Current.Request != null, MessagingStrings.HttpContextRequired); this.Respond(HttpContext.Current); } diff --git a/src/DotNetOpenAuth.Core/Messaging/OutgoingWebResponseActionResult.cs b/src/DotNetOpenAuth.Core/Messaging/OutgoingWebResponseActionResult.cs index 7691cc4..bc2f985 100644 --- a/src/DotNetOpenAuth.Core/Messaging/OutgoingWebResponseActionResult.cs +++ b/src/DotNetOpenAuth.Core/Messaging/OutgoingWebResponseActionResult.cs @@ -6,9 +6,9 @@ namespace DotNetOpenAuth.Messaging { using System; - using System.Diagnostics.Contracts; using System.Web.Mvc; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// An ASP.NET MVC structure to represent the response to send diff --git a/src/DotNetOpenAuth.Core/Messaging/ProtocolException.cs b/src/DotNetOpenAuth.Core/Messaging/ProtocolException.cs index 982e1c0..4bc3590 100644 --- a/src/DotNetOpenAuth.Core/Messaging/ProtocolException.cs +++ b/src/DotNetOpenAuth.Core/Messaging/ProtocolException.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.Messaging { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Security; using System.Security.Permissions; diff --git a/src/DotNetOpenAuth.Core/Messaging/ProtocolFaultResponseException.cs b/src/DotNetOpenAuth.Core/Messaging/ProtocolFaultResponseException.cs index c2dc34e..4d5c418 100644 --- a/src/DotNetOpenAuth.Core/Messaging/ProtocolFaultResponseException.cs +++ b/src/DotNetOpenAuth.Core/Messaging/ProtocolFaultResponseException.cs @@ -9,6 +9,7 @@ namespace DotNetOpenAuth.Messaging { using System.Collections.Generic; using System.Linq; using System.Text; + using Validation; /// <summary> /// An exception to represent errors in the local or remote implementation of the protocol diff --git a/src/DotNetOpenAuth.Core/Messaging/Reflection/DefaultEncoderAttribute.cs b/src/DotNetOpenAuth.Core/Messaging/Reflection/DefaultEncoderAttribute.cs index d827972..adf0f33 100644 --- a/src/DotNetOpenAuth.Core/Messaging/Reflection/DefaultEncoderAttribute.cs +++ b/src/DotNetOpenAuth.Core/Messaging/Reflection/DefaultEncoderAttribute.cs @@ -9,6 +9,7 @@ namespace DotNetOpenAuth.Messaging.Reflection { using System.Collections.Generic; using System.Linq; using System.Text; + using Validation; /// <summary> /// Allows a custom class or struct to be serializable between itself and a string representation. @@ -21,7 +22,7 @@ namespace DotNetOpenAuth.Messaging.Reflection { /// <param name="converterType">The <see cref="IMessagePartEncoder"/> implementing type to use for serializing this type.</param> public DefaultEncoderAttribute(Type converterType) { Requires.NotNull(converterType, "converterType"); - Requires.True(typeof(IMessagePartEncoder).IsAssignableFrom(converterType), "Argument must be a type that implements {0}.", typeof(IMessagePartEncoder).Name); + Requires.That(typeof(IMessagePartEncoder).IsAssignableFrom(converterType), "Argument must be a type that implements {0}.", typeof(IMessagePartEncoder).Name); this.Encoder = (IMessagePartEncoder)Activator.CreateInstance(converterType); } diff --git a/src/DotNetOpenAuth.Core/Messaging/Reflection/IMessagePartEncoder.cs b/src/DotNetOpenAuth.Core/Messaging/Reflection/IMessagePartEncoder.cs index 6186cd7..017c7d7 100644 --- a/src/DotNetOpenAuth.Core/Messaging/Reflection/IMessagePartEncoder.cs +++ b/src/DotNetOpenAuth.Core/Messaging/Reflection/IMessagePartEncoder.cs @@ -7,9 +7,9 @@ namespace DotNetOpenAuth.Messaging.Reflection { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; + using Validation; /// <summary> /// An interface describing how various objects can be serialized and deserialized between their object and string forms. @@ -17,7 +17,6 @@ namespace DotNetOpenAuth.Messaging.Reflection { /// <remarks> /// Implementations of this interface must include a default constructor and must be thread-safe. /// </remarks> - [ContractClass(typeof(IMessagePartEncoderContract))] public interface IMessagePartEncoder { /// <summary> /// Encodes the specified value. @@ -34,45 +33,4 @@ namespace DotNetOpenAuth.Messaging.Reflection { /// <exception cref="FormatException">Thrown when the string value given cannot be decoded into the required object type.</exception> object Decode(string value); } - - /// <summary> - /// Code contract for the <see cref="IMessagePartEncoder"/> type. - /// </summary> - [ContractClassFor(typeof(IMessagePartEncoder))] - internal abstract class IMessagePartEncoderContract : IMessagePartEncoder { - /// <summary> - /// Initializes a new instance of the <see cref="IMessagePartEncoderContract"/> class. - /// </summary> - protected IMessagePartEncoderContract() { - } - - #region IMessagePartEncoder Members - - /// <summary> - /// Encodes the specified value. - /// </summary> - /// <param name="value">The value. Guaranteed to never be null.</param> - /// <returns> - /// The <paramref name="value"/> in string form, ready for message transport. - /// </returns> - string IMessagePartEncoder.Encode(object value) { - Requires.NotNull(value, "value"); - throw new NotImplementedException(); - } - - /// <summary> - /// Decodes the specified value. - /// </summary> - /// <param name="value">The string value carried by the transport. Guaranteed to never be null, although it may be empty.</param> - /// <returns> - /// The deserialized form of the given string. - /// </returns> - /// <exception cref="FormatException">Thrown when the string value given cannot be decoded into the required object type.</exception> - object IMessagePartEncoder.Decode(string value) { - Requires.NotNull(value, "value"); - throw new NotImplementedException(); - } - - #endregion - } } diff --git a/src/DotNetOpenAuth.Core/Messaging/Reflection/MessageDescription.cs b/src/DotNetOpenAuth.Core/Messaging/Reflection/MessageDescription.cs index 7e67842..cd04e1d 100644 --- a/src/DotNetOpenAuth.Core/Messaging/Reflection/MessageDescription.cs +++ b/src/DotNetOpenAuth.Core/Messaging/Reflection/MessageDescription.cs @@ -12,6 +12,7 @@ namespace DotNetOpenAuth.Messaging.Reflection { using System.Globalization; using System.Linq; using System.Reflection; + using Validation; /// <summary> /// A mapping between serialized key names and <see cref="MessagePart"/> instances describing @@ -30,7 +31,7 @@ namespace DotNetOpenAuth.Messaging.Reflection { /// <param name="messageType">Type of the message.</param> /// <param name="messageVersion">The message version.</param> internal MessageDescription(Type messageType, Version messageVersion) { - Requires.NotNullSubtype<IMessage>(messageType, "messageType"); + RequiresEx.NotNullSubtype<IMessage>(messageType, "messageType"); Requires.NotNull(messageVersion, "messageVersion"); this.MessageType = messageType; @@ -80,7 +81,6 @@ namespace DotNetOpenAuth.Messaging.Reflection { [Pure] internal MessageDictionary GetDictionary(IMessage message) { Requires.NotNull(message, "message"); - Contract.Ensures(Contract.Result<MessageDictionary>() != null); return this.GetDictionary(message, false); } @@ -93,7 +93,6 @@ namespace DotNetOpenAuth.Messaging.Reflection { [Pure] internal MessageDictionary GetDictionary(IMessage message, bool getOriginalValues) { Requires.NotNull(message, "message"); - Contract.Ensures(Contract.Result<MessageDictionary>() != null); return new MessageDictionary(message, this, getOriginalValues); } diff --git a/src/DotNetOpenAuth.Core/Messaging/Reflection/MessageDescriptionCollection.cs b/src/DotNetOpenAuth.Core/Messaging/Reflection/MessageDescriptionCollection.cs index 3517abc..f27a7af 100644 --- a/src/DotNetOpenAuth.Core/Messaging/Reflection/MessageDescriptionCollection.cs +++ b/src/DotNetOpenAuth.Core/Messaging/Reflection/MessageDescriptionCollection.cs @@ -10,11 +10,11 @@ namespace DotNetOpenAuth.Messaging.Reflection { using System.Diagnostics.CodeAnalysis; using System.Diagnostics.Contracts; using System.Linq; + using Validation; /// <summary> /// A cache of <see cref="MessageDescription"/> instances. /// </summary> - [ContractVerification(true)] internal class MessageDescriptionCollection : IEnumerable<MessageDescription> { /// <summary> /// A dictionary of reflected message types and the generated reflection information. @@ -68,9 +68,8 @@ namespace DotNetOpenAuth.Messaging.Reflection { [SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "System.Diagnostics.Contracts.__ContractsRuntime.Assume(System.Boolean,System.String,System.String)", Justification = "No localization required.")] [Pure] internal MessageDescription Get(Type messageType, Version messageVersion) { - Requires.NotNullSubtype<IMessage>(messageType, "messageType"); + RequiresEx.NotNullSubtype<IMessage>(messageType, "messageType"); Requires.NotNull(messageVersion, "messageVersion"); - Contract.Ensures(Contract.Result<MessageDescription>() != null); MessageTypeAndVersion key = new MessageTypeAndVersion(messageType, messageVersion); @@ -106,7 +105,6 @@ namespace DotNetOpenAuth.Messaging.Reflection { [Pure] internal MessageDescription Get(IMessage message) { Requires.NotNull(message, "message"); - Contract.Ensures(Contract.Result<MessageDescription>() != null); return this.Get(message.GetType(), message.Version); } @@ -136,8 +134,7 @@ namespace DotNetOpenAuth.Messaging.Reflection { /// <summary> /// A struct used as the key to bundle message type and version. /// </summary> - [ContractVerification(true)] - private struct MessageTypeAndVersion { + private struct MessageTypeAndVersion { /// <summary> /// Backing store for the <see cref="Type"/> property. /// </summary> diff --git a/src/DotNetOpenAuth.Core/Messaging/Reflection/MessageDictionary.cs b/src/DotNetOpenAuth.Core/Messaging/Reflection/MessageDictionary.cs index cf44863..a2dddb2 100644 --- a/src/DotNetOpenAuth.Core/Messaging/Reflection/MessageDictionary.cs +++ b/src/DotNetOpenAuth.Core/Messaging/Reflection/MessageDictionary.cs @@ -11,13 +11,13 @@ namespace DotNetOpenAuth.Messaging.Reflection { using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Diagnostics.Contracts; + using Validation; /// <summary> /// Wraps an <see cref="IMessage"/> instance in a dictionary that /// provides access to both well-defined message properties and "extra" /// name/value pairs that have no properties associated with them. /// </summary> - [ContractVerification(false)] internal class MessageDictionary : IDictionary<string, string> { /// <summary> /// The <see cref="IMessage"/> instance manipulated by this dictionary. @@ -55,7 +55,6 @@ namespace DotNetOpenAuth.Messaging.Reflection { /// </summary> public IMessage Message { get { - Contract.Ensures(Contract.Result<IMessage>() != null); return this.message; } } @@ -65,7 +64,6 @@ namespace DotNetOpenAuth.Messaging.Reflection { /// </summary> public MessageDescription Description { get { - Contract.Ensures(Contract.Result<MessageDescription>() != null); return this.description; } } @@ -380,7 +378,6 @@ namespace DotNetOpenAuth.Messaging.Reflection { /// <returns>The generated dictionary.</returns> [Pure] public IDictionary<string, string> Serialize() { - Contract.Ensures(Contract.Result<IDictionary<string, string>>() != null); return this.Serializer.Serialize(this); } diff --git a/src/DotNetOpenAuth.Core/Messaging/Reflection/MessagePart.cs b/src/DotNetOpenAuth.Core/Messaging/Reflection/MessagePart.cs index a6e8da2..add4beb 100644 --- a/src/DotNetOpenAuth.Core/Messaging/Reflection/MessagePart.cs +++ b/src/DotNetOpenAuth.Core/Messaging/Reflection/MessagePart.cs @@ -9,18 +9,17 @@ namespace DotNetOpenAuth.Messaging.Reflection { using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Globalization; using System.Linq; using System.Net.Security; using System.Reflection; using System.Xml; using DotNetOpenAuth.Configuration; + using Validation; /// <summary> /// Describes an individual member of a message and assists in its serialization. /// </summary> - [ContractVerification(true)] [DebuggerDisplay("MessagePart {Name}")] internal class MessagePart { /// <summary> @@ -66,20 +65,20 @@ namespace DotNetOpenAuth.Messaging.Reflection { [SuppressMessage("Microsoft.Performance", "CA1810:InitializeReferenceTypeStaticFieldsInline", Justification = "Much more efficient initialization when we can call methods.")] static MessagePart() { Func<string, Uri> safeUri = str => { - Contract.Assume(str != null); + Assumes.True(str != null); return new Uri(str); }; Func<string, bool> safeBool = str => { - Contract.Assume(str != null); + Assumes.True(str != null); return bool.Parse(str); }; Func<byte[], string> safeFromByteArray = bytes => { - Contract.Assume(bytes != null); + Assumes.True(bytes != null); return Convert.ToBase64String(bytes); }; Func<string, byte[]> safeToByteArray = str => { - Contract.Assume(str != null); + Assumes.True(str != null); return Convert.FromBase64String(str); }; Map<Uri>(uri => uri.AbsoluteUri, uri => uri.OriginalString, safeUri); @@ -106,7 +105,7 @@ namespace DotNetOpenAuth.Messaging.Reflection { [SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity", Justification = "Unavoidable"), SuppressMessage("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily", Justification = "Code contracts requires it.")] internal MessagePart(MemberInfo member, MessagePartAttribute attribute) { Requires.NotNull(member, "member"); - Requires.True(member is FieldInfo || member is PropertyInfo, "member"); + Requires.That(member is FieldInfo || member is PropertyInfo, "member", "Member must be a property or field."); Requires.NotNull(attribute, "attribute"); this.field = member as FieldInfo; @@ -119,7 +118,7 @@ namespace DotNetOpenAuth.Messaging.Reflection { this.memberDeclaredType = (this.field != null) ? this.field.FieldType : this.property.PropertyType; this.defaultMemberValue = DeriveDefaultValue(this.memberDeclaredType); - Contract.Assume(this.memberDeclaredType != null); // CC missing PropertyInfo.PropertyType ensures result != null + Assumes.True(this.memberDeclaredType != null); // CC missing PropertyInfo.PropertyType ensures result != null if (attribute.Encoder == null) { if (!converters.TryGetValue(this.memberDeclaredType, out this.converter)) { if (this.memberDeclaredType.IsGenericType && @@ -203,7 +202,7 @@ namespace DotNetOpenAuth.Messaging.Reflection { /// </summary> internal string StaticConstantValue { get { - Requires.ValidState(this.IsConstantValueAvailableStatically); + RequiresEx.ValidState(this.IsConstantValueAvailableStatically); return this.ToString(this.field.GetValue(null), false); } } @@ -394,7 +393,6 @@ namespace DotNetOpenAuth.Messaging.Reflection { /// <returns>An instance of the desired encoder.</returns> private static IMessagePartEncoder GetEncoder(Type messagePartEncoder) { Requires.NotNull(messagePartEncoder, "messagePartEncoder"); - Contract.Ensures(Contract.Result<IMessagePartEncoder>() != null); IMessagePartEncoder encoder; lock (encoders) { diff --git a/src/DotNetOpenAuth.Core/Messaging/Reflection/ValueMapping.cs b/src/DotNetOpenAuth.Core/Messaging/Reflection/ValueMapping.cs index 4139f52..c45eb5d 100644 --- a/src/DotNetOpenAuth.Core/Messaging/Reflection/ValueMapping.cs +++ b/src/DotNetOpenAuth.Core/Messaging/Reflection/ValueMapping.cs @@ -6,12 +6,11 @@ namespace DotNetOpenAuth.Messaging.Reflection { using System; - using System.Diagnostics.Contracts; + using Validation; /// <summary> /// A pair of conversion functions to map some type to a string and back again. /// </summary> - [ContractVerification(true)] internal struct ValueMapping { /// <summary> /// The mapping function that converts some custom type to a string. diff --git a/src/DotNetOpenAuth.Core/Messaging/StandardMessageFactory.cs b/src/DotNetOpenAuth.Core/Messaging/StandardMessageFactory.cs index 762b54b..fd35e5f 100644 --- a/src/DotNetOpenAuth.Core/Messaging/StandardMessageFactory.cs +++ b/src/DotNetOpenAuth.Core/Messaging/StandardMessageFactory.cs @@ -7,11 +7,11 @@ namespace DotNetOpenAuth.Messaging { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Reflection; using System.Text; using DotNetOpenAuth.Messaging.Reflection; + using Validation; /// <summary> /// A message factory that automatically selects the message type based on the incoming data. @@ -42,7 +42,7 @@ namespace DotNetOpenAuth.Messaging { /// <param name="messageTypes">The message types that this factory may instantiate.</param> public virtual void AddMessageTypes(IEnumerable<MessageDescription> messageTypes) { Requires.NotNull(messageTypes, "messageTypes"); - Requires.True(messageTypes.All(msg => msg != null), "messageTypes"); + Requires.NullOrNotNullElements(messageTypes, "messageTypes"); var unsupportedMessageTypes = new List<MessageDescription>(0); foreach (MessageDescription messageDescription in messageTypes) { @@ -208,7 +208,6 @@ namespace DotNetOpenAuth.Messaging { protected virtual IDirectedProtocolMessage InstantiateAsRequest(MessageDescription messageDescription, MessageReceivingEndpoint recipient) { Requires.NotNull(messageDescription, "messageDescription"); Requires.NotNull(recipient, "recipient"); - Contract.Ensures(Contract.Result<IDirectedProtocolMessage>() != null); ConstructorInfo ctor = this.requestMessageTypes[messageDescription]; return (IDirectedProtocolMessage)ctor.Invoke(new object[] { recipient.Location, messageDescription.MessageVersion }); @@ -223,7 +222,6 @@ namespace DotNetOpenAuth.Messaging { protected virtual IDirectResponseProtocolMessage InstantiateAsResponse(MessageDescription messageDescription, IDirectedProtocolMessage request) { Requires.NotNull(messageDescription, "messageDescription"); Requires.NotNull(request, "request"); - Contract.Ensures(Contract.Result<IDirectResponseProtocolMessage>() != null); Type requestType = request.GetType(); var ctors = this.FindMatchingResponseConstructors(messageDescription, requestType); @@ -249,7 +247,7 @@ namespace DotNetOpenAuth.Messaging { private static int GetDerivationDistance(Type assignableType, Type derivedType) { Requires.NotNull(assignableType, "assignableType"); Requires.NotNull(derivedType, "derivedType"); - Requires.True(assignableType.IsAssignableFrom(derivedType), "assignableType"); + Requires.That(assignableType.IsAssignableFrom(derivedType), "assignableType", "Types are not related as required."); // If this is the two types are equivalent... if (derivedType.IsAssignableFrom(assignableType)) @@ -277,7 +275,6 @@ namespace DotNetOpenAuth.Messaging { private static int CountInCommon(ICollection<string> collection1, ICollection<string> collection2, StringComparison comparison = StringComparison.Ordinal) { Requires.NotNull(collection1, "collection1"); Requires.NotNull(collection2, "collection2"); - Contract.Ensures(Contract.Result<int>() >= 0 && Contract.Result<int>() <= Math.Min(collection1.Count, collection2.Count)); return collection1.Count(value1 => collection2.Any(value2 => string.Equals(value1, value2, comparison))); } diff --git a/src/DotNetOpenAuth.Core/Messaging/StandardMessageFactoryChannel.cs b/src/DotNetOpenAuth.Core/Messaging/StandardMessageFactoryChannel.cs index 7ca5d45..9cb80b0 100644 --- a/src/DotNetOpenAuth.Core/Messaging/StandardMessageFactoryChannel.cs +++ b/src/DotNetOpenAuth.Core/Messaging/StandardMessageFactoryChannel.cs @@ -7,10 +7,10 @@ namespace DotNetOpenAuth.Messaging { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using Reflection; + using Validation; /// <summary> /// A channel that uses the standard message factory. @@ -98,7 +98,6 @@ namespace DotNetOpenAuth.Messaging { { Requires.NotNull(messageTypes, "messageTypes"); Requires.NotNull(descriptionsCache, "descriptionsCache"); - Contract.Ensures(Contract.Result<IEnumerable<MessageDescription>>() != null); // Get all the MessageDescription objects through the standard cache, // so that perhaps it will be a quick lookup, or at least it will be diff --git a/src/DotNetOpenAuth.Core/Messaging/StandardWebRequestHandler.cs b/src/DotNetOpenAuth.Core/Messaging/StandardWebRequestHandler.cs index adca925..2383a5b 100644 --- a/src/DotNetOpenAuth.Core/Messaging/StandardWebRequestHandler.cs +++ b/src/DotNetOpenAuth.Core/Messaging/StandardWebRequestHandler.cs @@ -13,6 +13,7 @@ namespace DotNetOpenAuth.Messaging { using System.Net.Sockets; using System.Reflection; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// The default handler for transmitting <see cref="HttpWebRequest"/> instances diff --git a/src/DotNetOpenAuth.Core/Messaging/UntrustedWebRequestHandler.cs b/src/DotNetOpenAuth.Core/Messaging/UntrustedWebRequestHandler.cs index 25a7bbb..be0182d 100644 --- a/src/DotNetOpenAuth.Core/Messaging/UntrustedWebRequestHandler.cs +++ b/src/DotNetOpenAuth.Core/Messaging/UntrustedWebRequestHandler.cs @@ -17,6 +17,7 @@ namespace DotNetOpenAuth.Messaging { using System.Text.RegularExpressions; using DotNetOpenAuth.Configuration; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// A paranoid HTTP get/post request engine. It helps to protect against attacks from remote @@ -112,7 +113,7 @@ namespace DotNetOpenAuth.Messaging { } set { - Requires.InRange(value >= 2048, "value"); + Requires.Range(value >= 2048, "value"); this.maximumBytesToRead = value; } } @@ -127,7 +128,7 @@ namespace DotNetOpenAuth.Messaging { } set { - Requires.InRange(value >= 0, "value"); + Requires.Range(value >= 0, "value"); this.maximumRedirections = value; } } diff --git a/src/DotNetOpenAuth.Core/Messaging/UriStyleMessageFormatter.cs b/src/DotNetOpenAuth.Core/Messaging/UriStyleMessageFormatter.cs index 242175e..1d7c424 100644 --- a/src/DotNetOpenAuth.Core/Messaging/UriStyleMessageFormatter.cs +++ b/src/DotNetOpenAuth.Core/Messaging/UriStyleMessageFormatter.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.Messaging { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Security.Cryptography; using System.Text; @@ -15,6 +14,7 @@ namespace DotNetOpenAuth.Messaging { using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Messaging.Bindings; using DotNetOpenAuth.Messaging.Reflection; + using Validation; /// <summary> /// A serializer for <see cref="DataBag"/>-derived types @@ -46,7 +46,7 @@ namespace DotNetOpenAuth.Messaging { /// <param name="decodeOnceOnly">The nonce store to use to ensure that this instance is only decoded once.</param> protected internal UriStyleMessageFormatter(ICryptoKeyStore cryptoKeyStore = null, string bucket = null, bool signed = false, bool encrypted = false, bool compressed = false, TimeSpan? minimumAge = null, TimeSpan? maximumAge = null, INonceStore decodeOnceOnly = null) : base(cryptoKeyStore, bucket, signed, encrypted, compressed, minimumAge, maximumAge, decodeOnceOnly) { - Requires.True((cryptoKeyStore != null && !string.IsNullOrEmpty(bucket)) || (!signed && !encrypted), null); + Requires.That((cryptoKeyStore != null && !string.IsNullOrEmpty(bucket)) || (!signed && !encrypted), null, "Signing or encryption requires a cryptoKeyStore and bucket."); } /// <summary> diff --git a/src/DotNetOpenAuth.Core/Properties/AssemblyInfo.cs b/src/DotNetOpenAuth.Core/Properties/AssemblyInfo.cs index 21cbb94..7f8a591 100644 --- a/src/DotNetOpenAuth.Core/Properties/AssemblyInfo.cs +++ b/src/DotNetOpenAuth.Core/Properties/AssemblyInfo.cs @@ -7,7 +7,6 @@ // We DON'T put an AssemblyVersionAttribute in here because it is generated in the build. using System; -using System.Diagnostics.Contracts; using System.Net; using System.Reflection; using System.Resources; @@ -31,8 +30,6 @@ using System.Web.UI; // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("7d73990c-47c0-4256-9f20-a893add9e289")] -[assembly: ContractVerification(true)] - #if StrongNameSigned // See comment at top of this file. We need this so that strong-naming doesn't // keep this assembly from being useful to shared host (medium trust) web sites. diff --git a/src/DotNetOpenAuth.Core/PureAttribute.cs b/src/DotNetOpenAuth.Core/PureAttribute.cs new file mode 100644 index 0000000..04f7ead --- /dev/null +++ b/src/DotNetOpenAuth.Core/PureAttribute.cs @@ -0,0 +1,22 @@ +//----------------------------------------------------------------------- +// <copyright file="PureAttribute.cs" company="Andrew Arnott"> +// Copyright (c) Andrew Arnott. All rights reserved. +// </copyright> +//----------------------------------------------------------------------- + +namespace System.Diagnostics.Contracts { + using System; + using System.Collections.Generic; + using System.Linq; + using System.Text; + +#if !CLR4 + /// <summary> + /// Designates a type or member as one that does not mutate any objects that were allocated + /// before the invocation of the member. + /// </summary> + [AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = false)] + internal sealed class PureAttribute : Attribute { + } +#endif +} diff --git a/src/DotNetOpenAuth.Core/Reporting.cs b/src/DotNetOpenAuth.Core/Reporting.cs index 80a3374..f902fd6 100644 --- a/src/DotNetOpenAuth.Core/Reporting.cs +++ b/src/DotNetOpenAuth.Core/Reporting.cs @@ -9,7 +9,6 @@ namespace DotNetOpenAuth { using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Globalization; using System.IO; using System.IO.IsolatedStorage; @@ -23,6 +22,7 @@ namespace DotNetOpenAuth { using DotNetOpenAuth.Configuration; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Messaging.Bindings; + using Validation; /// <summary> /// The statistical reporting mechanism used so this library's project authors @@ -170,7 +170,7 @@ namespace DotNetOpenAuth { /// <param name="category">The category within the event. Null and empty strings are allowed, but considered the same.</param> [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Justification = "PersistentCounter instances are stored in a table for later use.")] internal static void RecordEventOccurrence(string eventName, string category) { - Contract.Requires(!string.IsNullOrEmpty(eventName)); + Requires.NotNullOrEmpty(eventName, "eventName"); // In release builds, just quietly return. if (string.IsNullOrEmpty(eventName)) { @@ -196,7 +196,7 @@ namespace DotNetOpenAuth { /// <param name="eventNameByObjectType">The object whose type name is the event name to record.</param> /// <param name="category">The category within the event. Null and empty strings are allowed, but considered the same.</param> internal static void RecordEventOccurrence(object eventNameByObjectType, string category) { - Contract.Requires(eventNameByObjectType != null); + Requires.NotNull(eventNameByObjectType, "eventNameByObjectType"); // In release builds, just quietly return. if (eventNameByObjectType == null) { @@ -213,7 +213,7 @@ namespace DotNetOpenAuth { /// </summary> /// <param name="feature">The feature.</param> internal static void RecordFeatureUse(string feature) { - Contract.Requires(!string.IsNullOrEmpty(feature)); + Requires.NotNullOrEmpty(feature, "feature"); // In release builds, just quietly return. if (string.IsNullOrEmpty(feature)) { @@ -231,7 +231,7 @@ namespace DotNetOpenAuth { /// </summary> /// <param name="value">The object whose type is the feature to set as used.</param> internal static void RecordFeatureUse(object value) { - Contract.Requires(value != null); + Requires.NotNull(value, "value"); // In release builds, just quietly return. if (value == null) { @@ -250,7 +250,7 @@ namespace DotNetOpenAuth { /// <param name="value">The object whose type is the feature to set as used.</param> /// <param name="dependency1">Some dependency used by <paramref name="value"/>.</param> internal static void RecordFeatureAndDependencyUse(object value, object dependency1) { - Contract.Requires(value != null); + Requires.NotNull(value, "value"); // In release builds, just quietly return. if (value == null) { @@ -274,7 +274,7 @@ namespace DotNetOpenAuth { /// <param name="dependency1">Some dependency used by <paramref name="value"/>.</param> /// <param name="dependency2">Some dependency used by <paramref name="value"/>.</param> internal static void RecordFeatureAndDependencyUse(object value, object dependency1, object dependency2) { - Contract.Requires(value != null); + Requires.NotNull(value, "value"); // In release builds, just quietly return. if (value == null) { @@ -298,7 +298,7 @@ namespace DotNetOpenAuth { /// </summary> /// <param name="request">The request.</param> internal static void RecordRequestStatistics(HttpRequestBase request) { - Contract.Requires(request != null); + Requires.NotNull(request, "request"); // In release builds, just quietly return. if (request == null) { @@ -534,8 +534,6 @@ namespace DotNetOpenAuth { /// </summary> /// <returns>An isolated storage location appropriate for our host.</returns> private static IsolatedStorageFile GetIsolatedStorage() { - Contract.Ensures(Contract.Result<IsolatedStorageFile>() != null); - IsolatedStorageFile result = null; // We'll try for whatever storage location we can get, @@ -567,8 +565,7 @@ namespace DotNetOpenAuth { /// </remarks> [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Justification = "No apparent problem. False positive?")] private static Guid GetOrCreateOriginIdentity() { - Requires.ValidState(file != null); - Contract.Ensures(Contract.Result<Guid>() != Guid.Empty); + RequiresEx.ValidState(file != null, "file not set."); Guid identityGuid = Guid.Empty; const int GuidLength = 16; diff --git a/src/DotNetOpenAuth.Core/Requires.cs b/src/DotNetOpenAuth.Core/Requires.cs deleted file mode 100644 index 7d4d5be..0000000 --- a/src/DotNetOpenAuth.Core/Requires.cs +++ /dev/null @@ -1,255 +0,0 @@ -//----------------------------------------------------------------------- -// <copyright file="Requires.cs" company="Outercurve Foundation"> -// Copyright (c) Outercurve Foundation. All rights reserved. -// </copyright> -//----------------------------------------------------------------------- - -namespace DotNetOpenAuth { - using System; - using System.Collections.Generic; - using System.Diagnostics; - using System.Diagnostics.Contracts; - using System.Globalization; - using System.Linq; - using System.Text; - using DotNetOpenAuth.Messaging; - - /// <summary> - /// Argument validation checks that throw some kind of ArgumentException when they fail (unless otherwise noted). - /// </summary> - internal static class Requires { - /// <summary> - /// Validates that a given parameter is not null. - /// </summary> - /// <typeparam name="T">The type of the parameter</typeparam> - /// <param name="value">The value.</param> - /// <param name="parameterName">Name of the parameter.</param> - /// <returns>The tested value, guaranteed to not be null.</returns> -#if !CLR4 - [ContractArgumentValidator] -#endif - [Pure, DebuggerStepThrough] - internal static T NotNull<T>(T value, string parameterName) where T : class { - if (value == null) { - throw new ArgumentNullException(parameterName); - } - - Contract.EndContractBlock(); - return value; - } - - /// <summary> - /// Validates that a parameter is not null or empty. - /// </summary> - /// <param name="value">The value.</param> - /// <param name="parameterName">Name of the parameter.</param> - /// <returns>The validated value.</returns> -#if !CLR4 - [ContractArgumentValidator] -#endif - [Pure, DebuggerStepThrough] - internal static string NotNullOrEmpty(string value, string parameterName) { - NotNull(value, parameterName); - True(value.Length > 0, parameterName, Strings.EmptyStringNotAllowed); - Contract.Ensures(Contract.Result<string>() == value); - Contract.EndContractBlock(); - return value; - } - - /// <summary> - /// Validates that an array is not null or empty. - /// </summary> - /// <typeparam name="T">The type of the elements in the sequence.</typeparam> - /// <param name="value">The value.</param> - /// <param name="parameterName">Name of the parameter.</param> -#if !CLR4 - [ContractArgumentValidator] -#endif - [Pure, DebuggerStepThrough] - internal static void NotNullOrEmpty<T>(IEnumerable<T> value, string parameterName) { - NotNull(value, parameterName); - True(value.Any(), parameterName, Strings.InvalidArgument); - Contract.EndContractBlock(); - } - - /// <summary> - /// Validates that an argument is either null or is a sequence with no null elements. - /// </summary> - /// <typeparam name="T">The type of elements in the sequence.</typeparam> - /// <param name="sequence">The sequence.</param> - /// <param name="parameterName">Name of the parameter.</param> -#if !CLR4 - [ContractArgumentValidator] -#endif - [Pure, DebuggerStepThrough] - internal static void NullOrWithNoNullElements<T>(IEnumerable<T> sequence, string parameterName) where T : class { - if (sequence != null) { - if (sequence.Any(e => e == null)) { - throw new ArgumentException(MessagingStrings.SequenceContainsNullElement, parameterName); - } - } - } - - /// <summary> - /// Validates some expression describing the acceptable range for an argument evaluates to true. - /// </summary> - /// <param name="condition">The expression that must evaluate to true to avoid an <see cref="ArgumentOutOfRangeException"/>.</param> - /// <param name="parameterName">Name of the parameter.</param> - /// <param name="message">The message to include with the exception.</param> -#if !CLR4 - [ContractArgumentValidator] -#endif - [Pure, DebuggerStepThrough] - internal static void InRange(bool condition, string parameterName, string message = null) { - if (!condition) { - throw new ArgumentOutOfRangeException(parameterName, message); - } - - Contract.EndContractBlock(); - } - - /// <summary> - /// Validates some expression describing the acceptable condition for an argument evaluates to true. - /// </summary> - /// <param name="condition">The expression that must evaluate to true to avoid an <see cref="ArgumentException"/>.</param> - /// <param name="parameterName">Name of the parameter.</param> - /// <param name="message">The message to include with the exception.</param> -#if !CLR4 - [ContractArgumentValidator] -#endif - [Pure, DebuggerStepThrough] - internal static void True(bool condition, string parameterName = null, string message = null) { - if (!condition) { - throw new ArgumentException(message ?? Strings.InvalidArgument, parameterName); - } - - Contract.EndContractBlock(); - } - - /// <summary> - /// Validates some expression describing the acceptable condition for an argument evaluates to true. - /// </summary> - /// <param name="condition">The expression that must evaluate to true to avoid an <see cref="ArgumentException"/>.</param> - /// <param name="parameterName">Name of the parameter.</param> - /// <param name="unformattedMessage">The unformatted message.</param> - /// <param name="args">Formatting arguments.</param> -#if !CLR4 - [ContractArgumentValidator] -#endif - [Pure, DebuggerStepThrough] - internal static void True(bool condition, string parameterName, string unformattedMessage, params object[] args) { - if (!condition) { - throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, unformattedMessage, args), parameterName); - } - - Contract.EndContractBlock(); - } - - /// <summary> - /// Validates some expression describing the acceptable condition for an argument evaluates to true. - /// </summary> - /// <param name="condition">The expression that must evaluate to true to avoid an <see cref="InvalidOperationException"/>.</param> -#if !CLR4 - [ContractArgumentValidator] -#endif - [Pure, DebuggerStepThrough] - internal static void ValidState(bool condition) { - if (!condition) { - throw new InvalidOperationException(); - } - - Contract.EndContractBlock(); - } - - /// <summary> - /// Validates some expression describing the acceptable condition for an argument evaluates to true. - /// </summary> - /// <param name="condition">The expression that must evaluate to true to avoid an <see cref="InvalidOperationException"/>.</param> - /// <param name="message">The message to include with the exception.</param> -#if !CLR4 - [ContractArgumentValidator] -#endif - [Pure, DebuggerStepThrough] - internal static void ValidState(bool condition, string message) { - if (!condition) { - throw new InvalidOperationException(message); - } - - Contract.EndContractBlock(); - } - - /// <summary> - /// Validates some expression describing the acceptable condition for an argument evaluates to true. - /// </summary> - /// <param name="condition">The expression that must evaluate to true to avoid an <see cref="InvalidOperationException"/>.</param> - /// <param name="unformattedMessage">The unformatted message.</param> - /// <param name="args">Formatting arguments.</param> -#if !CLR4 - [ContractArgumentValidator] -#endif - [Pure, DebuggerStepThrough] - internal static void ValidState(bool condition, string unformattedMessage, params object[] args) { - if (!condition) { - throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, unformattedMessage, args)); - } - - Contract.EndContractBlock(); - } - - /// <summary> - /// Validates that some argument describes a type that is or derives from a required type. - /// </summary> - /// <typeparam name="T">The type that the argument must be or derive from.</typeparam> - /// <param name="type">The type given in the argument.</param> - /// <param name="parameterName">Name of the parameter.</param> -#if !CLR4 - [ContractArgumentValidator] -#endif - [Pure, DebuggerStepThrough] - internal static void NotNullSubtype<T>(Type type, string parameterName) { - NotNull(type, parameterName); - True(typeof(T).IsAssignableFrom(type), parameterName, MessagingStrings.UnexpectedType, typeof(T).FullName, type.FullName); - - Contract.EndContractBlock(); - } - - /// <summary> - /// Validates some expression describing the acceptable condition for an argument evaluates to true. - /// </summary> - /// <param name="condition">The expression that must evaluate to true to avoid an <see cref="FormatException"/>.</param> - /// <param name="message">The message.</param> -#if !CLR4 - [ContractArgumentValidator] -#endif - [Pure, DebuggerStepThrough] - internal static void Format(bool condition, string message) { - if (!condition) { - throw new FormatException(message); - } - - Contract.EndContractBlock(); - } - - /// <summary> - /// Throws an <see cref="NotSupportedException"/> if a condition does not evaluate to <c>true</c>. - /// </summary> - /// <param name="condition">The expression that must evaluate to true to avoid an <see cref="NotSupportedException"/>.</param> - /// <param name="message">The message.</param> - [Pure, DebuggerStepThrough] - internal static void Support(bool condition, string message) { - if (!condition) { - throw new NotSupportedException(message); - } - } - - /// <summary> - /// Throws an <see cref="ArgumentException"/> - /// </summary> - /// <param name="parameterName">Name of the parameter.</param> - /// <param name="message">The message.</param> - [Pure, DebuggerStepThrough] - internal static void Fail(string parameterName, string message) { - throw new ArgumentException(message, parameterName); - } - } -} diff --git a/src/DotNetOpenAuth.Core/RequiresEx.cs b/src/DotNetOpenAuth.Core/RequiresEx.cs new file mode 100644 index 0000000..1a077c4 --- /dev/null +++ b/src/DotNetOpenAuth.Core/RequiresEx.cs @@ -0,0 +1,94 @@ +//----------------------------------------------------------------------- +// <copyright file="RequiresEx.cs" company="Outercurve Foundation"> +// Copyright (c) Outercurve Foundation. All rights reserved. +// </copyright> +//----------------------------------------------------------------------- + +namespace DotNetOpenAuth { + using System; + using System.Collections.Generic; + using System.Diagnostics; + using System.Diagnostics.Contracts; + using System.Globalization; + using System.Linq; + using System.Text; + using DotNetOpenAuth.Messaging; + using Validation; + + /// <summary> + /// Argument validation checks that throw some kind of ArgumentException when they fail (unless otherwise noted). + /// </summary> + internal static class RequiresEx { + /// <summary> + /// Validates some expression describing the acceptable condition for an argument evaluates to true. + /// </summary> + /// <param name="condition">The expression that must evaluate to true to avoid an <see cref="InvalidOperationException"/>.</param> + [Pure, DebuggerStepThrough] + internal static void ValidState(bool condition) { + if (!condition) { + throw new InvalidOperationException(); + } + } + + /// <summary> + /// Validates some expression describing the acceptable condition for an argument evaluates to true. + /// </summary> + /// <param name="condition">The expression that must evaluate to true to avoid an <see cref="InvalidOperationException"/>.</param> + /// <param name="message">The message to include with the exception.</param> + [Pure, DebuggerStepThrough] + internal static void ValidState(bool condition, string message) { + if (!condition) { + throw new InvalidOperationException(message); + } + } + + /// <summary> + /// Validates some expression describing the acceptable condition for an argument evaluates to true. + /// </summary> + /// <param name="condition">The expression that must evaluate to true to avoid an <see cref="InvalidOperationException"/>.</param> + /// <param name="unformattedMessage">The unformatted message.</param> + /// <param name="args">Formatting arguments.</param> + [Pure, DebuggerStepThrough] + internal static void ValidState(bool condition, string unformattedMessage, params object[] args) { + if (!condition) { + throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, unformattedMessage, args)); + } + } + + /// <summary> + /// Validates that some argument describes a type that is or derives from a required type. + /// </summary> + /// <typeparam name="T">The type that the argument must be or derive from.</typeparam> + /// <param name="type">The type given in the argument.</param> + /// <param name="parameterName">Name of the parameter.</param> + [Pure, DebuggerStepThrough] + internal static void NotNullSubtype<T>(Type type, string parameterName) { + Requires.NotNull(type, parameterName); + Requires.That(typeof(T).IsAssignableFrom(type), parameterName, MessagingStrings.UnexpectedType, typeof(T).FullName, type.FullName); + } + + /// <summary> + /// Validates some expression describing the acceptable condition for an argument evaluates to true. + /// </summary> + /// <param name="condition">The expression that must evaluate to true to avoid an <see cref="FormatException"/>.</param> + /// <param name="message">The message.</param> + [Pure, DebuggerStepThrough] + internal static void Format(bool condition, string message) { + if (!condition) { + throw new FormatException(message); + } + } + + /// <summary> + /// Throws an <see cref="NotSupportedException"/> if a condition does not evaluate to <c>true</c>. + /// </summary> + /// <param name="condition">The expression that must evaluate to true to avoid an <see cref="NotSupportedException"/>.</param> + /// <param name="message">The message.</param> + [Pure, DebuggerStepThrough] + internal static void Support(bool condition, string message) { + if (!condition) { + throw new NotSupportedException(message); + } + } + } +} diff --git a/src/DotNetOpenAuth.Core/UriUtil.cs b/src/DotNetOpenAuth.Core/UriUtil.cs index c52e1bb..25b92a2 100644 --- a/src/DotNetOpenAuth.Core/UriUtil.cs +++ b/src/DotNetOpenAuth.Core/UriUtil.cs @@ -8,17 +8,16 @@ namespace DotNetOpenAuth { using System; using System.Collections.Specialized; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Linq; using System.Text.RegularExpressions; using System.Web; using System.Web.UI; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// Utility methods for working with URIs. /// </summary> - [ContractVerification(true)] internal static class UriUtil { /// <summary> /// Tests a URI for the presence of an OAuth payload. @@ -28,15 +27,14 @@ namespace DotNetOpenAuth { /// <returns> /// True if the URI contains an OAuth message. /// </returns> - [ContractVerification(false)] // bugs/limitations in CC static analysis - internal static bool QueryStringContainPrefixedParameters(this Uri uri, string prefix) { + internal static bool QueryStringContainPrefixedParameters(this Uri uri, string prefix) { Requires.NotNullOrEmpty(prefix, "prefix"); if (uri == null) { return false; } NameValueCollection nvc = HttpUtility.ParseQueryString(uri.Query); - Contract.Assume(nvc != null); // BCL + Assumes.True(nvc != null); // BCL return nvc.Keys.OfType<string>().Any(key => key.StartsWith(prefix, StringComparison.Ordinal)); } @@ -60,7 +58,6 @@ namespace DotNetOpenAuth { /// <returns>The string version of the Uri.</returns> internal static string ToStringWithImpliedPorts(this UriBuilder builder) { Requires.NotNull(builder, "builder"); - Contract.Ensures(Contract.Result<string>() != null); // We only check for implied ports on HTTP and HTTPS schemes since those // are the only ones supported by OpenID anyway. @@ -73,7 +70,7 @@ namespace DotNetOpenAuth { // we're removing only the port (and not something in the query string that // looks like a port. string result = Regex.Replace(url, @"^(https?://[^:]+):\d+", m => m.Groups[1].Value, RegexOptions.IgnoreCase); - Contract.Assume(result != null); // Regex.Replace never returns null + Assumes.True(result != null); // Regex.Replace never returns null return result; } else { // The port must be explicitly given anyway. @@ -95,12 +92,12 @@ namespace DotNetOpenAuth { } if (page != null && !designMode) { - Contract.Assume(page.Request != null); + Assumes.True(page.Request != null); // Validate new value by trying to construct a Realm object based on it. string relativeUrl = page.ResolveUrl(value); - Contract.Assume(page.Request.Url != null); - Contract.Assume(relativeUrl != null); + Assumes.True(page.Request.Url != null); + Assumes.True(relativeUrl != null); new Uri(page.Request.Url, relativeUrl); // throws an exception on failure. } else { // We can't fully test it, but it should start with either ~/ or a protocol. diff --git a/src/DotNetOpenAuth.Core/Util.cs b/src/DotNetOpenAuth.Core/Util.cs index 3babba5..ec28c50 100644 --- a/src/DotNetOpenAuth.Core/Util.cs +++ b/src/DotNetOpenAuth.Core/Util.cs @@ -6,7 +6,6 @@ namespace DotNetOpenAuth { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Globalization; using System.Net; using System.Reflection; @@ -17,11 +16,11 @@ namespace DotNetOpenAuth { using DotNetOpenAuth.Configuration; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Messaging.Reflection; + using Validation; /// <summary> /// A grab-bag utility class. /// </summary> - [ContractVerification(true)] internal static class Util { /// <summary> /// The base namespace for this library from which all other namespaces derive. @@ -103,8 +102,7 @@ namespace DotNetOpenAuth { return new DelayedToString<IEnumerable<KeyValuePair<K, V>>>( pairs, p => { - ////Contract.Requires(pairs != null); // CC: anonymous method can't handle it - ErrorUtilities.VerifyArgumentNotNull(pairs, "pairs"); + Requires.NotNull(pairs, "pairs"); var dictionary = pairs as IDictionary<K, V>; var messageDictionary = pairs as MessageDictionary; StringBuilder sb = new StringBuilder(dictionary != null ? dictionary.Count * 40 : 200); @@ -139,7 +137,6 @@ namespace DotNetOpenAuth { /// <param name="list">The list of elements.</param> /// <param name="multiLineElements">if set to <c>true</c>, special formatting will be applied to the output to make it clear where one element ends and the next begins.</param> /// <returns>An object whose ToString method will perform the actual work of generating the string.</returns> - [ContractVerification(false)] internal static object ToStringDeferred<T>(this IEnumerable<T> list, bool multiLineElements) { return new DelayedToString<IEnumerable<T>>( list, @@ -148,7 +145,7 @@ namespace DotNetOpenAuth { ErrorUtilities.VerifyArgumentNotNull(l, "l"); string newLine = Environment.NewLine; - ////Contract.Assume(newLine != null && newLine.Length > 0); + ////Assumes.True(newLine != null && newLine.Length > 0); StringBuilder sb = new StringBuilder(); if (multiLineElements) { sb.AppendLine("[{"); diff --git a/src/DotNetOpenAuth.Core/packages.config b/src/DotNetOpenAuth.Core/packages.config new file mode 100644 index 0000000..10eec89 --- /dev/null +++ b/src/DotNetOpenAuth.Core/packages.config @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="Validation" version="2.0.0.12319" targetFramework="net40" /> +</packages>
\ No newline at end of file diff --git a/src/DotNetOpenAuth.InfoCard.UI/DotNetOpenAuth.InfoCard.UI.csproj b/src/DotNetOpenAuth.InfoCard.UI/DotNetOpenAuth.InfoCard.UI.csproj index f1aac54..40fa674 100644 --- a/src/DotNetOpenAuth.InfoCard.UI/DotNetOpenAuth.InfoCard.UI.csproj +++ b/src/DotNetOpenAuth.InfoCard.UI/DotNetOpenAuth.InfoCard.UI.csproj @@ -62,6 +62,15 @@ <Name>DotNetOpenAuth.Core</Name> </ProjectReference> </ItemGroup> + <ItemGroup> + <Reference Include="Validation, Version=2.0.0.0, Culture=neutral, PublicKeyToken=2fc06f0d701809a7, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\Validation.2.0.0.12319\lib\portable-windows8+net40+sl5+windowsphone8\Validation.dll</HintPath> + </Reference> + </ItemGroup> + <ItemGroup> + <None Include="packages.config" /> + </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(ProjectRoot)tools\DotNetOpenAuth.targets" /> <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))\EnlistmentInfo.targets" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))' != '' " /> diff --git a/src/DotNetOpenAuth.InfoCard.UI/InfoCard/ClaimType.cs b/src/DotNetOpenAuth.InfoCard.UI/InfoCard/ClaimType.cs index 831e38d..53898ba 100644 --- a/src/DotNetOpenAuth.InfoCard.UI/InfoCard/ClaimType.cs +++ b/src/DotNetOpenAuth.InfoCard.UI/InfoCard/ClaimType.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.InfoCard { using System; using System.ComponentModel; - using System.Diagnostics.Contracts; using System.IdentityModel.Claims; using System.Web.UI; @@ -16,7 +15,6 @@ namespace DotNetOpenAuth.InfoCard { /// </summary> [PersistChildren(false)] [Serializable] - [ContractVerification(true)] public class ClaimType { /// <summary> /// Initializes a new instance of the <see cref="ClaimType"/> class. diff --git a/src/DotNetOpenAuth.InfoCard.UI/InfoCard/InfoCardImage.cs b/src/DotNetOpenAuth.InfoCard.UI/InfoCard/InfoCardImage.cs index 821ea1b..cdb0562 100644 --- a/src/DotNetOpenAuth.InfoCard.UI/InfoCard/InfoCardImage.cs +++ b/src/DotNetOpenAuth.InfoCard.UI/InfoCard/InfoCardImage.cs @@ -23,7 +23,6 @@ namespace DotNetOpenAuth.InfoCard { using System; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Globalization; /// <summary> @@ -130,7 +129,7 @@ namespace DotNetOpenAuth.InfoCard { /// <returns>The manifest resource stream name.</returns> internal static string GetImageManifestResourceStreamName(InfoCardImageSize size) { string imageSize = size.ToString(); - Contract.Assume(imageSize.Length >= 6); + Assumes.True(imageSize.Length >= 6); imageSize = imageSize.Substring(4); return string.Format(CultureInfo.InvariantCulture, UrlFormatString, imageSize); } diff --git a/src/DotNetOpenAuth.InfoCard.UI/InfoCard/InfoCardSelector.cs b/src/DotNetOpenAuth.InfoCard.UI/InfoCard/InfoCardSelector.cs index 3862e39..3b6b368 100644 --- a/src/DotNetOpenAuth.InfoCard.UI/InfoCard/InfoCardSelector.cs +++ b/src/DotNetOpenAuth.InfoCard.UI/InfoCard/InfoCardSelector.cs @@ -24,6 +24,7 @@ namespace DotNetOpenAuth.InfoCard { using System.Web.UI.WebControls; using System.Xml; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// The style to use for NOT displaying a hidden region. @@ -47,7 +48,6 @@ namespace DotNetOpenAuth.InfoCard { [PersistChildren(false)] [DefaultEvent("ReceivedToken")] [ToolboxData("<{0}:InfoCardSelector runat=\"server\"><ClaimsRequested><{0}:ClaimType Name=\"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/privatepersonalidentifier\" /></ClaimsRequested><UnsupportedTemplate><p>Your browser does not support Information Cards.</p></UnsupportedTemplate></{0}:InfoCardSelector>")] - [ContractVerification(true)] public class InfoCardSelector : CompositeControl, IPostBackEventHandler { /// <summary> /// The resource name for getting at the SupportingScript.js embedded manifest stream. @@ -229,7 +229,6 @@ namespace DotNetOpenAuth.InfoCard { [PersistenceMode(PersistenceMode.InnerProperty), Category(InfoCardCategory)] public Collection<ClaimType> ClaimsRequested { get { - Contract.Ensures(Contract.Result<Collection<ClaimType>>() != null); if (this.ViewState[ClaimsRequestedViewStateKey] == null) { var claims = new Collection<ClaimType>(); this.ViewState[ClaimsRequestedViewStateKey] = claims; @@ -547,7 +546,6 @@ namespace DotNetOpenAuth.InfoCard { /// <param name="value">The parameter value.</param> /// <returns>The control that renders to the Param tag.</returns> private static string CreateParamJs(string name, string value) { - Contract.Ensures(Contract.Result<string>() != null); string scriptFormat = @" objp = document.createElement('param'); objp.name = {0}; objp.value = {1}; @@ -567,8 +565,6 @@ namespace DotNetOpenAuth.InfoCard { /// <returns>The Panel control</returns> [Pure] private Panel CreateInfoCardSupportedPanel() { - Contract.Ensures(Contract.Result<Panel>() != null); - Panel supportedPanel = new Panel(); try { @@ -626,8 +622,6 @@ namespace DotNetOpenAuth.InfoCard { /// <returns>The Panel control.</returns> [Pure] private Panel CreateInfoCardUnsupportedPanel() { - Contract.Ensures(Contract.Result<Panel>() != null); - Panel unsupportedPanel = new Panel(); try { if (this.UnsupportedTemplate != null) { @@ -724,9 +718,7 @@ namespace DotNetOpenAuth.InfoCard { /// <param name="optional">A space-delimited list of claim type URIs for claims that may optionally be included in a submitted Information Card.</param> [Pure] private void GetRequestedClaims(out string required, out string optional) { - Requires.ValidState(this.ClaimsRequested != null); - Contract.Ensures(Contract.ValueAtReturn<string>(out required) != null); - Contract.Ensures(Contract.ValueAtReturn<string>(out optional) != null); + RequiresEx.ValidState(this.ClaimsRequested != null); var nonEmptyClaimTypes = this.ClaimsRequested.Where(c => c.Name != null); @@ -741,8 +733,8 @@ namespace DotNetOpenAuth.InfoCard { string[] optionalClaimsArray = optionalClaims.ToArray(); required = string.Join(" ", requiredClaimsArray); optional = string.Join(" ", optionalClaimsArray); - Contract.Assume(required != null); - Contract.Assume(optional != null); + Assumes.True(required != null); + Assumes.True(optional != null); } /// <summary> @@ -750,7 +742,7 @@ namespace DotNetOpenAuth.InfoCard { /// or to downgrade gracefully if the user agent lacks an Information Card selector. /// </summary> private void RenderSupportingScript() { - Requires.ValidState(this.infoCardSupportedPanel != null); + RequiresEx.ValidState(this.infoCardSupportedPanel != null); this.Page.ClientScript.RegisterClientScriptResource(typeof(InfoCardSelector), ScriptResourceName); diff --git a/src/DotNetOpenAuth.InfoCard.UI/InfoCard/ReceivedTokenEventArgs.cs b/src/DotNetOpenAuth.InfoCard.UI/InfoCard/ReceivedTokenEventArgs.cs index 94d3d63..2ec124b 100644 --- a/src/DotNetOpenAuth.InfoCard.UI/InfoCard/ReceivedTokenEventArgs.cs +++ b/src/DotNetOpenAuth.InfoCard.UI/InfoCard/ReceivedTokenEventArgs.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.InfoCard { using System; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Xml.XPath; /// <summary> diff --git a/src/DotNetOpenAuth.InfoCard.UI/InfoCard/ReceivingTokenEventArgs.cs b/src/DotNetOpenAuth.InfoCard.UI/InfoCard/ReceivingTokenEventArgs.cs index 3d7e3d3..6de2ef0 100644 --- a/src/DotNetOpenAuth.InfoCard.UI/InfoCard/ReceivingTokenEventArgs.cs +++ b/src/DotNetOpenAuth.InfoCard.UI/InfoCard/ReceivingTokenEventArgs.cs @@ -8,9 +8,9 @@ namespace DotNetOpenAuth.InfoCard { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.IdentityModel.Tokens; using System.Security.Cryptography.X509Certificates; + using Validation; /// <summary> /// Arguments for the <see cref="InfoCardSelector.ReceivingToken"/> event. @@ -74,7 +74,7 @@ namespace DotNetOpenAuth.InfoCard { [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Justification = "False positive")] public void AddDecryptingToken(X509Certificate2 certificate) { Requires.NotNull(certificate, "certificate"); - Requires.True(certificate.HasPrivateKey, "certificate"); + Requires.That(certificate.HasPrivateKey, "certificate", "requires private key"); var cert = new X509SecurityToken(certificate); try { this.AddDecryptingToken(cert); diff --git a/src/DotNetOpenAuth.InfoCard.UI/InfoCard/TokenProcessingErrorEventArgs.cs b/src/DotNetOpenAuth.InfoCard.UI/InfoCard/TokenProcessingErrorEventArgs.cs index d9c38f6..104df15 100644 --- a/src/DotNetOpenAuth.InfoCard.UI/InfoCard/TokenProcessingErrorEventArgs.cs +++ b/src/DotNetOpenAuth.InfoCard.UI/InfoCard/TokenProcessingErrorEventArgs.cs @@ -6,7 +6,7 @@ namespace DotNetOpenAuth.InfoCard { using System; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; + using Validation; /// <summary> /// Arguments for the <see cref="InfoCardSelector.TokenProcessingError"/> event. diff --git a/src/DotNetOpenAuth.InfoCard.UI/Properties/AssemblyInfo.cs b/src/DotNetOpenAuth.InfoCard.UI/Properties/AssemblyInfo.cs index 69b7345..bc8a8cc 100644 --- a/src/DotNetOpenAuth.InfoCard.UI/Properties/AssemblyInfo.cs +++ b/src/DotNetOpenAuth.InfoCard.UI/Properties/AssemblyInfo.cs @@ -7,7 +7,6 @@ // We DON'T put an AssemblyVersionAttribute in here because it is generated in the build. using System; -using System.Diagnostics.Contracts; using System.Net; using System.Reflection; using System.Resources; @@ -33,8 +32,6 @@ using System.Web.UI; // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("7d73990c-47c0-4256-9f20-a893add9e289")] -[assembly: ContractVerification(true)] - #if StrongNameSigned // See comment at top of this file. We need this so that strong-naming doesn't // keep this assembly from being useful to shared host (medium trust) web sites. diff --git a/src/DotNetOpenAuth.InfoCard.UI/packages.config b/src/DotNetOpenAuth.InfoCard.UI/packages.config new file mode 100644 index 0000000..10eec89 --- /dev/null +++ b/src/DotNetOpenAuth.InfoCard.UI/packages.config @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="Validation" version="2.0.0.12319" targetFramework="net40" /> +</packages>
\ No newline at end of file diff --git a/src/DotNetOpenAuth.InfoCard/DotNetOpenAuth.InfoCard.csproj b/src/DotNetOpenAuth.InfoCard/DotNetOpenAuth.InfoCard.csproj index 09371f1..ee0899b 100644 --- a/src/DotNetOpenAuth.InfoCard/DotNetOpenAuth.InfoCard.csproj +++ b/src/DotNetOpenAuth.InfoCard/DotNetOpenAuth.InfoCard.csproj @@ -46,6 +46,15 @@ <Name>DotNetOpenAuth.Core</Name> </ProjectReference> </ItemGroup> + <ItemGroup> + <Reference Include="Validation, Version=2.0.0.0, Culture=neutral, PublicKeyToken=2fc06f0d701809a7, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\Validation.2.0.0.12319\lib\portable-windows8+net40+sl5+windowsphone8\Validation.dll</HintPath> + </Reference> + </ItemGroup> + <ItemGroup> + <None Include="packages.config" /> + </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(ProjectRoot)tools\DotNetOpenAuth.targets" /> <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))\EnlistmentInfo.targets" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))' != '' " /> diff --git a/src/DotNetOpenAuth.InfoCard/InfoCard/Token/Token.cs b/src/DotNetOpenAuth.InfoCard/InfoCard/Token/Token.cs index 0660ec7..2ac1788 100644 --- a/src/DotNetOpenAuth.InfoCard/InfoCard/Token/Token.cs +++ b/src/DotNetOpenAuth.InfoCard/InfoCard/Token/Token.cs @@ -18,11 +18,11 @@ namespace DotNetOpenAuth.InfoCard { using System.Xml; using System.Xml.XPath; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// The decrypted token that was submitted as an Information Card. /// </summary> - [ContractVerification(true)] public class Token { /// <summary> /// Backing field for the <see cref="Claims"/> property. @@ -44,8 +44,7 @@ namespace DotNetOpenAuth.InfoCard { [SuppressMessage("Microsoft.Usage", "CA2202:Do not dispose objects multiple times", Justification = "Not a problem for this type."), SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Justification = "False positive")] private Token(string tokenXml, Uri audience, TokenDecryptor decryptor) { Requires.NotNullOrEmpty(tokenXml, "tokenXml"); - Requires.True(decryptor != null || !IsEncrypted(tokenXml), null); - Contract.Ensures(this.AuthorizationContext != null); + Requires.That(decryptor != null || !IsEncrypted(tokenXml), "decryptor", "Required when tokenXml is encrypted."); byte[] decryptedBytes; string decryptedString; @@ -53,12 +52,12 @@ namespace DotNetOpenAuth.InfoCard { using (StringReader xmlReader = new StringReader(tokenXml)) { var readerSettings = MessagingUtilities.CreateUntrustedXmlReaderSettings(); using (XmlReader tokenReader = XmlReader.Create(xmlReader, readerSettings)) { - Contract.Assume(tokenReader != null); // BCL contract should say XmlReader.Create result != null + Assumes.True(tokenReader != null); // BCL contract should say XmlReader.Create result != null if (IsEncrypted(tokenReader)) { Logger.InfoCard.DebugFormat("Incoming SAML token, before decryption: {0}", tokenXml); decryptedBytes = decryptor.DecryptToken(tokenReader); decryptedString = Encoding.UTF8.GetString(decryptedBytes); - Contract.Assume(decryptedString != null); // BCL contracts should be enhanced here + Assumes.True(decryptedString != null); // BCL contracts should be enhanced here } else { decryptedBytes = Encoding.UTF8.GetBytes(tokenXml); decryptedString = tokenXml; @@ -118,7 +117,7 @@ namespace DotNetOpenAuth.InfoCard { /// </summary> public string SiteSpecificId { get { - Requires.ValidState(this.Claims.ContainsKey(ClaimTypes.PPID) && !string.IsNullOrEmpty(this.Claims[ClaimTypes.PPID])); + RequiresEx.ValidState(this.Claims.ContainsKey(ClaimTypes.PPID) && !string.IsNullOrEmpty(this.Claims[ClaimTypes.PPID])); string ppidValue; ErrorUtilities.VerifyOperation(this.Claims.TryGetValue(ClaimTypes.PPID, out ppidValue) && ppidValue != null, InfoCardStrings.PpidClaimRequired); return TokenUtility.CalculateSiteSpecificID(ppidValue); @@ -181,7 +180,6 @@ namespace DotNetOpenAuth.InfoCard { public static Token Read(string tokenXml, Uri audience, IEnumerable<SecurityToken> decryptionTokens) { Requires.NotNullOrEmpty(tokenXml, "tokenXml"); Requires.NotNull(decryptionTokens, "decryptionTokens"); - Contract.Ensures(Contract.Result<Token>() != null); TokenDecryptor decryptor = null; @@ -215,7 +213,7 @@ namespace DotNetOpenAuth.InfoCard { } try { - Contract.Assume(tokenReader != null); // CC missing for XmlReader.Create + Assumes.True(tokenReader != null); // CC missing for XmlReader.Create return IsEncrypted(tokenReader); } catch { IDisposable disposableReader = tokenReader; diff --git a/src/DotNetOpenAuth.InfoCard/InfoCard/Token/TokenDecryptor.cs b/src/DotNetOpenAuth.InfoCard/InfoCard/Token/TokenDecryptor.cs index e9199c7..fab5148 100644 --- a/src/DotNetOpenAuth.InfoCard/InfoCard/Token/TokenDecryptor.cs +++ b/src/DotNetOpenAuth.InfoCard/InfoCard/Token/TokenDecryptor.cs @@ -13,7 +13,6 @@ namespace DotNetOpenAuth.InfoCard { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.IdentityModel.Selectors; using System.IdentityModel.Tokens; using System.Linq; @@ -22,6 +21,7 @@ namespace DotNetOpenAuth.InfoCard { using System.ServiceModel.Security; using System.Xml; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// A utility class for decrypting InfoCard tokens. @@ -90,7 +90,6 @@ namespace DotNetOpenAuth.InfoCard { /// <returns>A byte array of the contents of the encrypted token</returns> internal byte[] DecryptToken(XmlReader reader) { Requires.NotNull(reader, "reader"); - Contract.Ensures(Contract.Result<byte[]>() != null); byte[] securityTokenData; string encryptionAlgorithm; diff --git a/src/DotNetOpenAuth.InfoCard/InfoCard/Token/TokenUtility.cs b/src/DotNetOpenAuth.InfoCard/InfoCard/Token/TokenUtility.cs index 8b9eef8..616cb9f 100644 --- a/src/DotNetOpenAuth.InfoCard/InfoCard/Token/TokenUtility.cs +++ b/src/DotNetOpenAuth.InfoCard/InfoCard/Token/TokenUtility.cs @@ -13,7 +13,6 @@ namespace DotNetOpenAuth.InfoCard { using System.Collections.Generic; using System.Configuration; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.IdentityModel.Claims; using System.IdentityModel.Policy; using System.IdentityModel.Selectors; @@ -27,6 +26,7 @@ namespace DotNetOpenAuth.InfoCard { using System.Text; using System.Xml; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// Tools for reading InfoCard tokens. @@ -49,8 +49,6 @@ namespace DotNetOpenAuth.InfoCard { /// The authorization context carried by the token. /// </returns> internal static AuthorizationContext AuthenticateToken(XmlReader reader, Uri audience) { - Contract.Ensures(Contract.Result<AuthorizationContext>() != null); - // Extensibility Point: // in order to accept different token types, you would need to add additional // code to create an authenticationcontext from the security token. @@ -227,7 +225,6 @@ namespace DotNetOpenAuth.InfoCard { [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Justification = "False positive.")] internal static string CalculateSiteSpecificID(string ppid) { Requires.NotNull(ppid, "ppid"); - Contract.Ensures(!string.IsNullOrEmpty(Contract.Result<string>())); int callSignChars = 10; char[] charMap = "QL23456789ABCDEFGHJKMNPRSTUVWXYZ".ToCharArray(); @@ -281,7 +278,6 @@ namespace DotNetOpenAuth.InfoCard { private static string ComputeCombinedId(RSA issuerKey, string claimValue) { Requires.NotNull(issuerKey, "issuerKey"); Requires.NotNull(claimValue, "claimValue"); - Contract.Ensures(Contract.Result<string>() != null); int nameLength = Encoding.UTF8.GetByteCount(claimValue); RSAParameters rsaParams = issuerKey.ExportParameters(false); diff --git a/src/DotNetOpenAuth.InfoCard/InfoCardErrorUtilities.cs b/src/DotNetOpenAuth.InfoCard/InfoCardErrorUtilities.cs index cfde838..aaff82b 100644 --- a/src/DotNetOpenAuth.InfoCard/InfoCardErrorUtilities.cs +++ b/src/DotNetOpenAuth.InfoCard/InfoCardErrorUtilities.cs @@ -11,6 +11,7 @@ namespace DotNetOpenAuth { using System.Globalization; using System.Linq; using System.Text; + using Validation; /// <summary> /// Error reporting methods specific to InfoCard validation. @@ -27,9 +28,7 @@ namespace DotNetOpenAuth { [Pure] internal static void VerifyInfoCard(bool condition, string errorMessage, params object[] args) { Requires.NotNull(args, "args"); - Contract.Ensures(condition); - Contract.EnsuresOnThrow<InfoCard.InformationCardException>(!condition); - Contract.Assume(errorMessage != null); + Assumes.True(errorMessage != null); if (!condition) { errorMessage = string.Format(CultureInfo.CurrentCulture, errorMessage, args); throw new InfoCard.InformationCardException(errorMessage); diff --git a/src/DotNetOpenAuth.InfoCard/Properties/AssemblyInfo.cs b/src/DotNetOpenAuth.InfoCard/Properties/AssemblyInfo.cs index e9f2c20..1288eb4 100644 --- a/src/DotNetOpenAuth.InfoCard/Properties/AssemblyInfo.cs +++ b/src/DotNetOpenAuth.InfoCard/Properties/AssemblyInfo.cs @@ -7,7 +7,6 @@ // We DON'T put an AssemblyVersionAttribute in here because it is generated in the build. using System; -using System.Diagnostics.Contracts; using System.Net; using System.Reflection; using System.Resources; @@ -31,8 +30,6 @@ using System.Web.UI; // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("7d73990c-47c0-4256-9f20-a893add9e289")] -[assembly: ContractVerification(true)] - #if StrongNameSigned // See comment at top of this file. We need this so that strong-naming doesn't // keep this assembly from being useful to shared host (medium trust) web sites. diff --git a/src/DotNetOpenAuth.InfoCard/packages.config b/src/DotNetOpenAuth.InfoCard/packages.config new file mode 100644 index 0000000..10eec89 --- /dev/null +++ b/src/DotNetOpenAuth.InfoCard/packages.config @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="Validation" version="2.0.0.12319" targetFramework="net40" /> +</packages>
\ No newline at end of file diff --git a/src/DotNetOpenAuth.OAuth.Common/DotNetOpenAuth.OAuth.Common.csproj b/src/DotNetOpenAuth.OAuth.Common/DotNetOpenAuth.OAuth.Common.csproj index 0e3743f..6e69173 100644 --- a/src/DotNetOpenAuth.OAuth.Common/DotNetOpenAuth.OAuth.Common.csproj +++ b/src/DotNetOpenAuth.OAuth.Common/DotNetOpenAuth.OAuth.Common.csproj @@ -30,6 +30,15 @@ <Name>DotNetOpenAuth.Core</Name> </ProjectReference> </ItemGroup> + <ItemGroup> + <Reference Include="Validation, Version=2.0.0.0, Culture=neutral, PublicKeyToken=2fc06f0d701809a7, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\Validation.2.0.0.12319\lib\portable-windows8+net40+sl5+windowsphone8\Validation.dll</HintPath> + </Reference> + </ItemGroup> + <ItemGroup> + <None Include="packages.config" /> + </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(ProjectRoot)tools\DotNetOpenAuth.targets" /> <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))\EnlistmentInfo.targets" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))' != '' " /> diff --git a/src/DotNetOpenAuth.OAuth.Common/OAuth/ChannelElements/OAuthIdentity.cs b/src/DotNetOpenAuth.OAuth.Common/OAuth/ChannelElements/OAuthIdentity.cs index 1f9fbbc..28e0333 100644 --- a/src/DotNetOpenAuth.OAuth.Common/OAuth/ChannelElements/OAuthIdentity.cs +++ b/src/DotNetOpenAuth.OAuth.Common/OAuth/ChannelElements/OAuthIdentity.cs @@ -7,10 +7,10 @@ namespace DotNetOpenAuth.OAuth.ChannelElements { using System; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Runtime.InteropServices; using System.Security.Principal; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// Represents an OAuth consumer that is impersonating a known user on the system. diff --git a/src/DotNetOpenAuth.OAuth.Common/OAuth/ChannelElements/OAuthPrincipal.cs b/src/DotNetOpenAuth.OAuth.Common/OAuth/ChannelElements/OAuthPrincipal.cs index c23939a..65d7042 100644 --- a/src/DotNetOpenAuth.OAuth.Common/OAuth/ChannelElements/OAuthPrincipal.cs +++ b/src/DotNetOpenAuth.OAuth.Common/OAuth/ChannelElements/OAuthPrincipal.cs @@ -9,7 +9,6 @@ namespace DotNetOpenAuth.OAuth.ChannelElements { using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Linq; using System.Runtime.InteropServices; using System.Security.Principal; diff --git a/src/DotNetOpenAuth.OAuth.Common/Properties/AssemblyInfo.cs b/src/DotNetOpenAuth.OAuth.Common/Properties/AssemblyInfo.cs index 759bd3f..a3afcd7 100644 --- a/src/DotNetOpenAuth.OAuth.Common/Properties/AssemblyInfo.cs +++ b/src/DotNetOpenAuth.OAuth.Common/Properties/AssemblyInfo.cs @@ -7,7 +7,6 @@ // We DON'T put an AssemblyVersionAttribute in here because it is generated in the build. using System; -using System.Diagnostics.Contracts; using System.Net; using System.Reflection; using System.Resources; @@ -30,7 +29,6 @@ using System.Web.UI; // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("F9AFC069-8291-497F-B2A1-3E4D1646C572")] -[assembly: ContractVerification(true)] #if StrongNameSigned // See comment at top of this file. We need this so that strong-naming doesn't diff --git a/src/DotNetOpenAuth.OAuth.Common/packages.config b/src/DotNetOpenAuth.OAuth.Common/packages.config new file mode 100644 index 0000000..10eec89 --- /dev/null +++ b/src/DotNetOpenAuth.OAuth.Common/packages.config @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="Validation" version="2.0.0.12319" targetFramework="net40" /> +</packages>
\ No newline at end of file diff --git a/src/DotNetOpenAuth.OAuth.Consumer/DotNetOpenAuth.OAuth.Consumer.csproj b/src/DotNetOpenAuth.OAuth.Consumer/DotNetOpenAuth.OAuth.Consumer.csproj index cb4aea3..031277a 100644 --- a/src/DotNetOpenAuth.OAuth.Consumer/DotNetOpenAuth.OAuth.Consumer.csproj +++ b/src/DotNetOpenAuth.OAuth.Consumer/DotNetOpenAuth.OAuth.Consumer.csproj @@ -40,6 +40,15 @@ <Name>DotNetOpenAuth.OAuth</Name> </ProjectReference> </ItemGroup> + <ItemGroup> + <Reference Include="Validation, Version=2.0.0.0, Culture=neutral, PublicKeyToken=2fc06f0d701809a7, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\Validation.2.0.0.12319\lib\portable-windows8+net40+sl5+windowsphone8\Validation.dll</HintPath> + </Reference> + </ItemGroup> + <ItemGroup> + <None Include="packages.config" /> + </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(ProjectRoot)tools\DotNetOpenAuth.targets" /> <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))\EnlistmentInfo.targets" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))' != '' " /> diff --git a/src/DotNetOpenAuth.OAuth.Consumer/OAuth/ChannelElements/OAuthConsumerChannel.cs b/src/DotNetOpenAuth.OAuth.Consumer/OAuth/ChannelElements/OAuthConsumerChannel.cs index 673c23f..89ce187 100644 --- a/src/DotNetOpenAuth.OAuth.Consumer/OAuth/ChannelElements/OAuthConsumerChannel.cs +++ b/src/DotNetOpenAuth.OAuth.Consumer/OAuth/ChannelElements/OAuthConsumerChannel.cs @@ -8,11 +8,11 @@ namespace DotNetOpenAuth.OAuth.ChannelElements { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Messaging.Bindings; + using Validation; /// <summary> /// The messaging channel for OAuth 1.0(a) Consumers. diff --git a/src/DotNetOpenAuth.OAuth.Consumer/OAuth/ChannelElements/OAuthConsumerMessageFactory.cs b/src/DotNetOpenAuth.OAuth.Consumer/OAuth/ChannelElements/OAuthConsumerMessageFactory.cs index f9cf1fe..e79749f 100644 --- a/src/DotNetOpenAuth.OAuth.Consumer/OAuth/ChannelElements/OAuthConsumerMessageFactory.cs +++ b/src/DotNetOpenAuth.OAuth.Consumer/OAuth/ChannelElements/OAuthConsumerMessageFactory.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.OAuth.ChannelElements { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OAuth.Messages; diff --git a/src/DotNetOpenAuth.OAuth.Consumer/OAuth/ChannelElements/RsaSha1ConsumerSigningBindingElement.cs b/src/DotNetOpenAuth.OAuth.Consumer/OAuth/ChannelElements/RsaSha1ConsumerSigningBindingElement.cs index 03e1b8e..d492e33 100644 --- a/src/DotNetOpenAuth.OAuth.Consumer/OAuth/ChannelElements/RsaSha1ConsumerSigningBindingElement.cs +++ b/src/DotNetOpenAuth.OAuth.Consumer/OAuth/ChannelElements/RsaSha1ConsumerSigningBindingElement.cs @@ -7,11 +7,11 @@ namespace DotNetOpenAuth.OAuth.ChannelElements { using System; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; using System.Text; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// A binding element that signs outgoing messages and verifies the signature on incoming messages. diff --git a/src/DotNetOpenAuth.OAuth.Consumer/OAuth/ConsumerBase.cs b/src/DotNetOpenAuth.OAuth.Consumer/OAuth/ConsumerBase.cs index 10f2c54..0d2da87 100644 --- a/src/DotNetOpenAuth.OAuth.Consumer/OAuth/ConsumerBase.cs +++ b/src/DotNetOpenAuth.OAuth.Consumer/OAuth/ConsumerBase.cs @@ -8,7 +8,6 @@ namespace DotNetOpenAuth.OAuth { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Linq; using System.Net; using DotNetOpenAuth.Configuration; @@ -16,6 +15,7 @@ namespace DotNetOpenAuth.OAuth { using DotNetOpenAuth.Messaging.Bindings; using DotNetOpenAuth.OAuth.ChannelElements; using DotNetOpenAuth.OAuth.Messages; + using Validation; /// <summary> /// Base class for <see cref="WebConsumer"/> and <see cref="DesktopConsumer"/> types. @@ -278,7 +278,6 @@ namespace DotNetOpenAuth.OAuth { /// </returns> protected AuthorizedTokenResponse ProcessUserAuthorization(string requestToken, string verifier) { Requires.NotNullOrEmpty(requestToken, "requestToken"); - Contract.Ensures(Contract.Result<AuthorizedTokenResponse>() != null); var requestAccess = new AuthorizedTokenRequest(this.ServiceProvider.AccessTokenEndpoint, this.ServiceProvider.Version) { RequestToken = requestToken, diff --git a/src/DotNetOpenAuth.OAuth.Consumer/OAuth/WebConsumer.cs b/src/DotNetOpenAuth.OAuth.Consumer/OAuth/WebConsumer.cs index 086ff7a..4d4e67c 100644 --- a/src/DotNetOpenAuth.OAuth.Consumer/OAuth/WebConsumer.cs +++ b/src/DotNetOpenAuth.OAuth.Consumer/OAuth/WebConsumer.cs @@ -7,11 +7,11 @@ namespace DotNetOpenAuth.OAuth { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Web; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OAuth.ChannelElements; using DotNetOpenAuth.OAuth.Messages; + using Validation; /// <summary> /// A website or application that uses OAuth to access the Service Provider on behalf of the User. diff --git a/src/DotNetOpenAuth.OAuth.Consumer/Properties/AssemblyInfo.cs b/src/DotNetOpenAuth.OAuth.Consumer/Properties/AssemblyInfo.cs index 6c9e910..95b169d 100644 --- a/src/DotNetOpenAuth.OAuth.Consumer/Properties/AssemblyInfo.cs +++ b/src/DotNetOpenAuth.OAuth.Consumer/Properties/AssemblyInfo.cs @@ -7,7 +7,6 @@ // We DON'T put an AssemblyVersionAttribute in here because it is generated in the build. using System; -using System.Diagnostics.Contracts; using System.Net; using System.Reflection; using System.Resources; @@ -31,8 +30,6 @@ using System.Web.UI; // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("7d73990c-47c0-4256-9f20-a893add9e289")] -[assembly: ContractVerification(true)] - #if StrongNameSigned // See comment at top of this file. We need this so that strong-naming doesn't // keep this assembly from being useful to shared host (medium trust) web sites. diff --git a/src/DotNetOpenAuth.OAuth.Consumer/packages.config b/src/DotNetOpenAuth.OAuth.Consumer/packages.config new file mode 100644 index 0000000..10eec89 --- /dev/null +++ b/src/DotNetOpenAuth.OAuth.Consumer/packages.config @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="Validation" version="2.0.0.12319" targetFramework="net40" /> +</packages>
\ No newline at end of file diff --git a/src/DotNetOpenAuth.OAuth.ServiceProvider/DotNetOpenAuth.OAuth.ServiceProvider.csproj b/src/DotNetOpenAuth.OAuth.ServiceProvider/DotNetOpenAuth.OAuth.ServiceProvider.csproj index 689d08a..5708136 100644 --- a/src/DotNetOpenAuth.OAuth.ServiceProvider/DotNetOpenAuth.OAuth.ServiceProvider.csproj +++ b/src/DotNetOpenAuth.OAuth.ServiceProvider/DotNetOpenAuth.OAuth.ServiceProvider.csproj @@ -50,6 +50,15 @@ <Name>DotNetOpenAuth.OAuth</Name> </ProjectReference> </ItemGroup> + <ItemGroup> + <Reference Include="Validation, Version=2.0.0.0, Culture=neutral, PublicKeyToken=2fc06f0d701809a7, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\Validation.2.0.0.12319\lib\portable-windows8+net40+sl5+windowsphone8\Validation.dll</HintPath> + </Reference> + </ItemGroup> + <ItemGroup> + <None Include="packages.config" /> + </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(ProjectRoot)tools\DotNetOpenAuth.targets" /> <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))\EnlistmentInfo.targets" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))' != '' " /> diff --git a/src/DotNetOpenAuth.OAuth.ServiceProvider/OAuth/ChannelElements/IServiceProviderTokenManager.cs b/src/DotNetOpenAuth.OAuth.ServiceProvider/OAuth/ChannelElements/IServiceProviderTokenManager.cs index 2d47d00..1c413a3 100644 --- a/src/DotNetOpenAuth.OAuth.ServiceProvider/OAuth/ChannelElements/IServiceProviderTokenManager.cs +++ b/src/DotNetOpenAuth.OAuth.ServiceProvider/OAuth/ChannelElements/IServiceProviderTokenManager.cs @@ -7,15 +7,14 @@ namespace DotNetOpenAuth.OAuth.ChannelElements { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; + using Validation; /// <summary> /// A token manager for use by a web site in its role as a /// service provider. /// </summary> - [ContractClass(typeof(IServiceProviderTokenManagerContract))] public interface IServiceProviderTokenManager : ITokenManager { /// <summary> /// Gets the Consumer description for a given a Consumer Key. @@ -79,173 +78,4 @@ namespace DotNetOpenAuth.OAuth.ChannelElements { /// </remarks> void UpdateToken(IServiceProviderRequestToken token); } - - /// <summary> - /// Code contract class for the <see cref="IServiceProviderTokenManager"/> interface. - /// </summary> - [ContractClassFor(typeof(IServiceProviderTokenManager))] - internal abstract class IServiceProviderTokenManagerContract : IServiceProviderTokenManager { - /// <summary> - /// Prevents a default instance of the <see cref="IServiceProviderTokenManagerContract"/> class from being created. - /// </summary> - private IServiceProviderTokenManagerContract() { - } - - #region IServiceProviderTokenManager Members - - /// <summary> - /// Gets the Consumer description for a given a Consumer Key. - /// </summary> - /// <param name="consumerKey">The Consumer Key.</param> - /// <returns> - /// A description of the consumer. Never null. - /// </returns> - /// <exception cref="KeyNotFoundException">Thrown if the consumer key cannot be found.</exception> - IConsumerDescription IServiceProviderTokenManager.GetConsumer(string consumerKey) { - Requires.NotNullOrEmpty(consumerKey, "consumerKey"); - Contract.Ensures(Contract.Result<IConsumerDescription>() != null); - throw new NotImplementedException(); - } - - /// <summary> - /// Checks whether a given request token has already been authorized - /// by some user for use by the Consumer that requested it. - /// </summary> - /// <param name="requestToken">The Consumer's request token.</param> - /// <returns> - /// True if the request token has already been fully authorized by the user - /// who owns the relevant protected resources. False if the token has not yet - /// been authorized, has expired or does not exist. - /// </returns> - bool IServiceProviderTokenManager.IsRequestTokenAuthorized(string requestToken) { - Requires.NotNullOrEmpty(requestToken, "requestToken"); - throw new NotImplementedException(); - } - - /// <summary> - /// Gets details on the named request token. - /// </summary> - /// <param name="token">The request token.</param> - /// <returns>A description of the token. Never null.</returns> - /// <exception cref="KeyNotFoundException">Thrown if the token cannot be found.</exception> - /// <remarks> - /// It is acceptable for implementations to find the token, see that it has expired, - /// delete it from the database and then throw <see cref="KeyNotFoundException"/>, - /// or alternatively it can return the expired token anyway and the OAuth channel will - /// log and throw the appropriate error. - /// </remarks> - IServiceProviderRequestToken IServiceProviderTokenManager.GetRequestToken(string token) { - Requires.NotNullOrEmpty(token, "token"); - Contract.Ensures(Contract.Result<IServiceProviderRequestToken>() != null); - throw new NotImplementedException(); - } - - /// <summary> - /// Gets details on the named access token. - /// </summary> - /// <param name="token">The access token.</param> - /// <returns>A description of the token. Never null.</returns> - /// <exception cref="KeyNotFoundException">Thrown if the token cannot be found.</exception> - /// <remarks> - /// It is acceptable for implementations to find the token, see that it has expired, - /// delete it from the database and then throw <see cref="KeyNotFoundException"/>, - /// or alternatively it can return the expired token anyway and the OAuth channel will - /// log and throw the appropriate error. - /// </remarks> - IServiceProviderAccessToken IServiceProviderTokenManager.GetAccessToken(string token) { - Requires.NotNullOrEmpty(token, "token"); - Contract.Ensures(Contract.Result<IServiceProviderAccessToken>() != null); - throw new NotImplementedException(); - } - - /// <summary> - /// Persists any changes made to the token. - /// </summary> - /// <param name="token">The token whose properties have been changed.</param> - /// <remarks> - /// This library will invoke this method after making a set - /// of changes to the token as part of a web request to give the host - /// the opportunity to persist those changes to a database. - /// Depending on the object persistence framework the host site uses, - /// this method MAY not need to do anything (if changes made to the token - /// will automatically be saved without any extra handling). - /// </remarks> - void IServiceProviderTokenManager.UpdateToken(IServiceProviderRequestToken token) { - Requires.NotNull(token, "token"); - throw new NotImplementedException(); - } - - #endregion - - #region ITokenManager Members - - /// <summary> - /// Gets the Token Secret given a request or access token. - /// </summary> - /// <param name="token">The request or access token.</param> - /// <returns> - /// The secret associated with the given token. - /// </returns> - /// <exception cref="ArgumentException">Thrown if the secret cannot be found for the given token.</exception> - string ITokenManager.GetTokenSecret(string token) { - throw new NotImplementedException(); - } - - /// <summary> - /// Stores a newly generated unauthorized request token, secret, and optional - /// application-specific parameters for later recall. - /// </summary> - /// <param name="request">The request message that resulted in the generation of a new unauthorized request token.</param> - /// <param name="response">The response message that includes the unauthorized request token.</param> - /// <exception cref="ArgumentException">Thrown if the consumer key is not registered, or a required parameter was not found in the parameters collection.</exception> - /// <remarks> - /// Request tokens stored by this method SHOULD NOT associate any user account with this token. - /// It usually opens up security holes in your application to do so. Instead, you associate a user - /// account with access tokens (not request tokens) in the <see cref="ITokenManager.ExpireRequestTokenAndStoreNewAccessToken"/> - /// method. - /// </remarks> - void ITokenManager.StoreNewRequestToken(DotNetOpenAuth.OAuth.Messages.UnauthorizedTokenRequest request, DotNetOpenAuth.OAuth.Messages.ITokenSecretContainingMessage response) { - throw new NotImplementedException(); - } - - /// <summary> - /// Deletes a request token and its associated secret and stores a new access token and secret. - /// </summary> - /// <param name="consumerKey">The Consumer that is exchanging its request token for an access token.</param> - /// <param name="requestToken">The Consumer's request token that should be deleted/expired.</param> - /// <param name="accessToken">The new access token that is being issued to the Consumer.</param> - /// <param name="accessTokenSecret">The secret associated with the newly issued access token.</param> - /// <remarks> - /// <para> - /// Any scope of granted privileges associated with the request token from the - /// original call to <see cref="ITokenManager.StoreNewRequestToken"/> should be carried over - /// to the new Access Token. - /// </para> - /// <para> - /// To associate a user account with the new access token, - /// <see cref="System.Web.HttpContext.User">HttpContext.Current.User</see> may be - /// useful in an ASP.NET web application within the implementation of this method. - /// Alternatively you may store the access token here without associating with a user account, - /// and wait until WebConsumer.ProcessUserAuthorization or - /// DesktopConsumer.ProcessUserAuthorization return the access - /// token to associate the access token with a user account at that point. - /// </para> - /// </remarks> - void ITokenManager.ExpireRequestTokenAndStoreNewAccessToken(string consumerKey, string requestToken, string accessToken, string accessTokenSecret) { - throw new NotImplementedException(); - } - - /// <summary> - /// Classifies a token as a request token or an access token. - /// </summary> - /// <param name="token">The token to classify.</param> - /// <returns> - /// Request or Access token, or invalid if the token is not recognized. - /// </returns> - TokenType ITokenManager.GetTokenType(string token) { - throw new NotImplementedException(); - } - - #endregion - } } diff --git a/src/DotNetOpenAuth.OAuth.ServiceProvider/OAuth/ChannelElements/OAuth1Principal.cs b/src/DotNetOpenAuth.OAuth.ServiceProvider/OAuth/ChannelElements/OAuth1Principal.cs index 03f8030..ff44a45 100644 --- a/src/DotNetOpenAuth.OAuth.ServiceProvider/OAuth/ChannelElements/OAuth1Principal.cs +++ b/src/DotNetOpenAuth.OAuth.ServiceProvider/OAuth/ChannelElements/OAuth1Principal.cs @@ -11,6 +11,7 @@ namespace DotNetOpenAuth.OAuth.ChannelElements { using System.Linq; using System.Runtime.InteropServices; using System.Text; + using Validation; /// <summary> /// Represents an OAuth consumer that is impersonating a known user on the system. diff --git a/src/DotNetOpenAuth.OAuth.ServiceProvider/OAuth/ChannelElements/OAuthServiceProviderChannel.cs b/src/DotNetOpenAuth.OAuth.ServiceProvider/OAuth/ChannelElements/OAuthServiceProviderChannel.cs index 0d6450f..62019d8 100644 --- a/src/DotNetOpenAuth.OAuth.ServiceProvider/OAuth/ChannelElements/OAuthServiceProviderChannel.cs +++ b/src/DotNetOpenAuth.OAuth.ServiceProvider/OAuth/ChannelElements/OAuthServiceProviderChannel.cs @@ -8,11 +8,11 @@ namespace DotNetOpenAuth.OAuth.ChannelElements { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Messaging.Bindings; + using Validation; /// <summary> /// The messaging channel for OAuth 1.0(a) Service Providers. @@ -59,7 +59,7 @@ namespace DotNetOpenAuth.OAuth.ChannelElements { /// An array of binding elements used to initialize the channel. /// </returns> private static IChannelBindingElement[] InitializeBindingElements(ITamperProtectionChannelBindingElement signingBindingElement, INonceStore store, ITokenManager tokenManager, SecuritySettings securitySettings) { - Contract.Requires(securitySettings != null); + Requires.NotNull(securitySettings, "securitySettings"); var bindingElements = OAuthChannel.InitializeBindingElements(signingBindingElement, store); diff --git a/src/DotNetOpenAuth.OAuth.ServiceProvider/OAuth/ChannelElements/OAuthServiceProviderMessageFactory.cs b/src/DotNetOpenAuth.OAuth.ServiceProvider/OAuth/ChannelElements/OAuthServiceProviderMessageFactory.cs index 3dcee04..38a1f56 100644 --- a/src/DotNetOpenAuth.OAuth.ServiceProvider/OAuth/ChannelElements/OAuthServiceProviderMessageFactory.cs +++ b/src/DotNetOpenAuth.OAuth.ServiceProvider/OAuth/ChannelElements/OAuthServiceProviderMessageFactory.cs @@ -7,9 +7,9 @@ namespace DotNetOpenAuth.OAuth.ChannelElements { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OAuth.Messages; + using Validation; /// <summary> /// An OAuth-protocol specific implementation of the <see cref="IMessageFactory"/> diff --git a/src/DotNetOpenAuth.OAuth.ServiceProvider/OAuth/ChannelElements/RsaSha1ServiceProviderSigningBindingElement.cs b/src/DotNetOpenAuth.OAuth.ServiceProvider/OAuth/ChannelElements/RsaSha1ServiceProviderSigningBindingElement.cs index d1324d4..fd0d3ad 100644 --- a/src/DotNetOpenAuth.OAuth.ServiceProvider/OAuth/ChannelElements/RsaSha1ServiceProviderSigningBindingElement.cs +++ b/src/DotNetOpenAuth.OAuth.ServiceProvider/OAuth/ChannelElements/RsaSha1ServiceProviderSigningBindingElement.cs @@ -7,11 +7,11 @@ namespace DotNetOpenAuth.OAuth.ChannelElements { using System; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; using System.Text; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// A binding element that signs outgoing messages and verifies the signature on incoming messages. diff --git a/src/DotNetOpenAuth.OAuth.ServiceProvider/OAuth/ChannelElements/TokenHandlingBindingElement.cs b/src/DotNetOpenAuth.OAuth.ServiceProvider/OAuth/ChannelElements/TokenHandlingBindingElement.cs index e37cc2f..22c254f 100644 --- a/src/DotNetOpenAuth.OAuth.ServiceProvider/OAuth/ChannelElements/TokenHandlingBindingElement.cs +++ b/src/DotNetOpenAuth.OAuth.ServiceProvider/OAuth/ChannelElements/TokenHandlingBindingElement.cs @@ -8,12 +8,12 @@ namespace DotNetOpenAuth.OAuth.ChannelElements { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Configuration; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OAuth.Messages; + using Validation; /// <summary> /// A binding element for Service Providers to manage the diff --git a/src/DotNetOpenAuth.OAuth.ServiceProvider/OAuth/ServiceProvider.cs b/src/DotNetOpenAuth.OAuth.ServiceProvider/OAuth/ServiceProvider.cs index ecfd191..d2152ea 100644 --- a/src/DotNetOpenAuth.OAuth.ServiceProvider/OAuth/ServiceProvider.cs +++ b/src/DotNetOpenAuth.OAuth.ServiceProvider/OAuth/ServiceProvider.cs @@ -9,7 +9,6 @@ namespace DotNetOpenAuth.OAuth { using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Globalization; using System.Security.Principal; using System.ServiceModel.Channels; @@ -19,6 +18,7 @@ namespace DotNetOpenAuth.OAuth { using DotNetOpenAuth.Messaging.Bindings; using DotNetOpenAuth.OAuth.ChannelElements; using DotNetOpenAuth.OAuth.Messages; + using Validation; /// <summary> /// A web application that allows access via OAuth. @@ -109,8 +109,6 @@ namespace DotNetOpenAuth.OAuth { [EditorBrowsable(EditorBrowsableState.Advanced)] public static INonceStore HttpApplicationStore { get { - Contract.Ensures(Contract.Result<INonceStore>() != null); - HttpContext context = HttpContext.Current; ErrorUtilities.VerifyOperation(context != null, Strings.StoreRequiredWhenNoHttpContextAvailable, typeof(INonceStore).Name); var store = (INonceStore)context.Application[ApplicationStoreKey]; @@ -182,7 +180,7 @@ namespace DotNetOpenAuth.OAuth { /// length of the final string.</param> /// <returns>The verification code.</returns> public static string CreateVerificationCode(VerificationCodeFormat format, int length) { - Requires.InRange(length >= 0, "length"); + Requires.Range(length >= 0, "length"); switch (format) { case VerificationCodeFormat.IncludedInCallback: diff --git a/src/DotNetOpenAuth.OAuth.ServiceProvider/Properties/AssemblyInfo.cs b/src/DotNetOpenAuth.OAuth.ServiceProvider/Properties/AssemblyInfo.cs index aa99a01..63af312 100644 --- a/src/DotNetOpenAuth.OAuth.ServiceProvider/Properties/AssemblyInfo.cs +++ b/src/DotNetOpenAuth.OAuth.ServiceProvider/Properties/AssemblyInfo.cs @@ -7,7 +7,6 @@ // We DON'T put an AssemblyVersionAttribute in here because it is generated in the build. using System; -using System.Diagnostics.Contracts; using System.Net; using System.Reflection; using System.Resources; @@ -31,8 +30,6 @@ using System.Web.UI; // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("7d73990c-47c0-4256-9f20-a893add9e289")] -[assembly: ContractVerification(true)] - #if StrongNameSigned // See comment at top of this file. We need this so that strong-naming doesn't // keep this assembly from being useful to shared host (medium trust) web sites. diff --git a/src/DotNetOpenAuth.OAuth.ServiceProvider/packages.config b/src/DotNetOpenAuth.OAuth.ServiceProvider/packages.config new file mode 100644 index 0000000..10eec89 --- /dev/null +++ b/src/DotNetOpenAuth.OAuth.ServiceProvider/packages.config @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="Validation" version="2.0.0.12319" targetFramework="net40" /> +</packages>
\ No newline at end of file diff --git a/src/DotNetOpenAuth.OAuth/Configuration/OAuthElement.cs b/src/DotNetOpenAuth.OAuth/Configuration/OAuthElement.cs index 3972e6f..8b34e49 100644 --- a/src/DotNetOpenAuth.OAuth/Configuration/OAuthElement.cs +++ b/src/DotNetOpenAuth.OAuth/Configuration/OAuthElement.cs @@ -6,7 +6,6 @@ namespace DotNetOpenAuth.Configuration { using System.Configuration; - using System.Diagnostics.Contracts; /// <summary> /// Represents the <oauth> element in the host's .config file. @@ -38,7 +37,6 @@ namespace DotNetOpenAuth.Configuration { /// </summary> public static OAuthElement Configuration { get { - Contract.Ensures(Contract.Result<OAuthElement>() != null); return (OAuthElement)ConfigurationManager.GetSection(SectionName) ?? new OAuthElement(); } } diff --git a/src/DotNetOpenAuth.OAuth/DotNetOpenAuth.OAuth.csproj b/src/DotNetOpenAuth.OAuth/DotNetOpenAuth.OAuth.csproj index 1720648..d9d61ff 100644 --- a/src/DotNetOpenAuth.OAuth/DotNetOpenAuth.OAuth.csproj +++ b/src/DotNetOpenAuth.OAuth/DotNetOpenAuth.OAuth.csproj @@ -29,7 +29,6 @@ <Compile Include="OAuth\ChannelElements\OAuthHttpMethodBindingElement.cs" /> <Compile Include="OAuth\ChannelElements\PlaintextSigningBindingElement.cs" /> <Compile Include="OAuth\ChannelElements\HmacSha1SigningBindingElement.cs" /> - <Compile Include="OAuth\ChannelElements\SigningBindingElementBaseContract.cs" /> <Compile Include="OAuth\ChannelElements\SigningBindingElementChain.cs" /> <Compile Include="OAuth\ChannelElements\TokenType.cs" /> <Compile Include="OAuth\ChannelElements\UriOrOobEncoding.cs" /> @@ -66,6 +65,7 @@ <ItemGroup> <None Include="OAuth\ClassDiagram.cd" /> <None Include="OAuth\Messages\OAuth Messages.cd" /> + <None Include="packages.config" /> </ItemGroup> <ItemGroup> <EmbeddedResource Include="OAuth\OAuthStrings.resx"> @@ -82,6 +82,12 @@ <Name>DotNetOpenAuth.Core</Name> </ProjectReference> </ItemGroup> + <ItemGroup> + <Reference Include="Validation, Version=2.0.0.0, Culture=neutral, PublicKeyToken=2fc06f0d701809a7, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\Validation.2.0.0.12319\lib\portable-windows8+net40+sl5+windowsphone8\Validation.dll</HintPath> + </Reference> + </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(ProjectRoot)tools\DotNetOpenAuth.targets" /> <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))\EnlistmentInfo.targets" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))' != '' " /> diff --git a/src/DotNetOpenAuth.OAuth/Messaging/ITamperProtectionChannelBindingElement.cs b/src/DotNetOpenAuth.OAuth/Messaging/ITamperProtectionChannelBindingElement.cs index 66b82d4..1251472 100644 --- a/src/DotNetOpenAuth.OAuth/Messaging/ITamperProtectionChannelBindingElement.cs +++ b/src/DotNetOpenAuth.OAuth/Messaging/ITamperProtectionChannelBindingElement.cs @@ -6,14 +6,12 @@ namespace DotNetOpenAuth.Messaging { using System; - using System.Diagnostics.Contracts; using DotNetOpenAuth.OAuth.ChannelElements; /// <summary> /// An interface that must be implemented by message transforms/validators in order /// to be included in the channel stack. /// </summary> - [ContractClass(typeof(ITamperProtectionChannelBindingElementContract))] public interface ITamperProtectionChannelBindingElement : IChannelBindingElement { /// <summary> /// Gets or sets the delegate that will initialize the non-serialized properties necessary on a @@ -27,98 +25,4 @@ namespace DotNetOpenAuth.Messaging { /// <returns>The cloned instance.</returns> ITamperProtectionChannelBindingElement Clone(); } - - /// <summary> - /// Contract class for the <see cref="ITamperProtectionChannelBindingElement"/> interface. - /// </summary> - [ContractClassFor(typeof(ITamperProtectionChannelBindingElement))] - internal abstract class ITamperProtectionChannelBindingElementContract : ITamperProtectionChannelBindingElement { - #region ITamperProtectionChannelBindingElement Properties - - /// <summary> - /// Gets or sets the delegate that will initialize the non-serialized properties necessary on a - /// signable message so that its signature can be correctly calculated or verified. - /// </summary> - Action<ITamperResistantOAuthMessage> ITamperProtectionChannelBindingElement.SignatureCallback { - get { throw new NotImplementedException(); } - set { throw new NotImplementedException(); } - } - - #endregion - - #region IChannelBindingElement Members - - /// <summary> - /// Gets or sets the channel that this binding element belongs to. - /// </summary> - /// <remarks> - /// This property is set by the channel when it is first constructed. - /// </remarks> - Channel IChannelBindingElement.Channel { - get { throw new NotImplementedException(); } - set { throw new NotImplementedException(); } - } - - /// <summary> - /// Gets the protection commonly offered (if any) by this binding element. - /// </summary> - /// <remarks> - /// This value is used to assist in sorting binding elements in the channel stack. - /// </remarks> - MessageProtections IChannelBindingElement.Protection { - get { throw new NotImplementedException(); } - } - - /// <summary> - /// Prepares a message for sending based on the rules of this channel binding element. - /// </summary> - /// <param name="message">The message to prepare for sending.</param> - /// <returns> - /// The protections (if any) that this binding element applied to the message. - /// Null if this binding element did not even apply to this binding element. - /// </returns> - /// <remarks> - /// Implementations that provide message protection must honor the - /// <see cref="MessagePartAttribute.RequiredProtection"/> properties where applicable. - /// </remarks> - MessageProtections? IChannelBindingElement.ProcessOutgoingMessage(IProtocolMessage message) { - throw new NotImplementedException(); - } - - /// <summary> - /// Performs any transformation on an incoming message that may be necessary and/or - /// validates an incoming message based on the rules of this channel binding element. - /// </summary> - /// <param name="message">The incoming message to process.</param> - /// <returns> - /// The protections (if any) that this binding element applied to the message. - /// Null if this binding element did not even apply to this binding element. - /// </returns> - /// <exception cref="ProtocolException"> - /// Thrown when the binding element rules indicate that this message is invalid and should - /// NOT be processed. - /// </exception> - /// <remarks> - /// Implementations that provide message protection must honor the - /// <see cref="MessagePartAttribute.RequiredProtection"/> properties where applicable. - /// </remarks> - MessageProtections? IChannelBindingElement.ProcessIncomingMessage(IProtocolMessage message) { - throw new NotImplementedException(); - } - - #endregion - - #region ITamperProtectionChannelBindingElement Methods - - /// <summary> - /// Clones this instance. - /// </summary> - /// <returns>The cloned instance.</returns> - ITamperProtectionChannelBindingElement ITamperProtectionChannelBindingElement.Clone() { - Contract.Ensures(Contract.Result<ITamperProtectionChannelBindingElement>() != null); - throw new NotImplementedException(); - } - - #endregion - } } diff --git a/src/DotNetOpenAuth.OAuth/OAuth/ChannelElements/HmacSha1SigningBindingElement.cs b/src/DotNetOpenAuth.OAuth/OAuth/ChannelElements/HmacSha1SigningBindingElement.cs index ee05614..60fbdb9 100644 --- a/src/DotNetOpenAuth.OAuth/OAuth/ChannelElements/HmacSha1SigningBindingElement.cs +++ b/src/DotNetOpenAuth.OAuth/OAuth/ChannelElements/HmacSha1SigningBindingElement.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.OAuth.ChannelElements { using System; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Security.Cryptography; using System.Text; using DotNetOpenAuth.Messaging; diff --git a/src/DotNetOpenAuth.OAuth/OAuth/ChannelElements/ITokenManager.cs b/src/DotNetOpenAuth.OAuth/OAuth/ChannelElements/ITokenManager.cs index aa969f2..3749920 100644 --- a/src/DotNetOpenAuth.OAuth/OAuth/ChannelElements/ITokenManager.cs +++ b/src/DotNetOpenAuth.OAuth/OAuth/ChannelElements/ITokenManager.cs @@ -7,17 +7,16 @@ namespace DotNetOpenAuth.OAuth.ChannelElements { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.OAuth.Messages; + using Validation; /// <summary> /// An interface OAuth hosts must implement for persistent storage /// and recall of tokens and secrets for an individual OAuth consumer /// or service provider. /// </summary> - [ContractClass(typeof(ITokenManagerContract))] public interface ITokenManager { /// <summary> /// Gets the Token Secret given a request or access token. @@ -74,96 +73,4 @@ namespace DotNetOpenAuth.OAuth.ChannelElements { /// <returns>Request or Access token, or invalid if the token is not recognized.</returns> TokenType GetTokenType(string token); } - - /// <summary> - /// The code contract class for the <see cref="ITokenManager"/> interface. - /// </summary> - [ContractClassFor(typeof(ITokenManager))] - internal abstract class ITokenManagerContract : ITokenManager { - /// <summary> - /// Prevents a default instance of the <see cref="ITokenManagerContract"/> class from being created. - /// </summary> - private ITokenManagerContract() { - } - - #region ITokenManager Members - - /// <summary> - /// Gets the Token Secret given a request or access token. - /// </summary> - /// <param name="token">The request or access token.</param> - /// <returns> - /// The secret associated with the given token. - /// </returns> - /// <exception cref="ArgumentException">Thrown if the secret cannot be found for the given token.</exception> - string ITokenManager.GetTokenSecret(string token) { - Requires.NotNullOrEmpty(token, "token"); - Contract.Ensures(Contract.Result<string>() != null); - throw new NotImplementedException(); - } - - /// <summary> - /// Stores a newly generated unauthorized request token, secret, and optional - /// application-specific parameters for later recall. - /// </summary> - /// <param name="request">The request message that resulted in the generation of a new unauthorized request token.</param> - /// <param name="response">The response message that includes the unauthorized request token.</param> - /// <exception cref="ArgumentException">Thrown if the consumer key is not registered, or a required parameter was not found in the parameters collection.</exception> - /// <remarks> - /// Request tokens stored by this method SHOULD NOT associate any user account with this token. - /// It usually opens up security holes in your application to do so. Instead, you associate a user - /// account with access tokens (not request tokens) in the <see cref="ITokenManager.ExpireRequestTokenAndStoreNewAccessToken"/> - /// method. - /// </remarks> - void ITokenManager.StoreNewRequestToken(UnauthorizedTokenRequest request, ITokenSecretContainingMessage response) { - Requires.NotNull(request, "request"); - Requires.NotNull(response, "response"); - throw new NotImplementedException(); - } - - /// <summary> - /// Deletes a request token and its associated secret and stores a new access token and secret. - /// </summary> - /// <param name="consumerKey">The Consumer that is exchanging its request token for an access token.</param> - /// <param name="requestToken">The Consumer's request token that should be deleted/expired.</param> - /// <param name="accessToken">The new access token that is being issued to the Consumer.</param> - /// <param name="accessTokenSecret">The secret associated with the newly issued access token.</param> - /// <remarks> - /// <para> - /// Any scope of granted privileges associated with the request token from the - /// original call to <see cref="ITokenManager.StoreNewRequestToken"/> should be carried over - /// to the new Access Token. - /// </para> - /// <para> - /// To associate a user account with the new access token, - /// <see cref="System.Web.HttpContext.User">HttpContext.Current.User</see> may be - /// useful in an ASP.NET web application within the implementation of this method. - /// Alternatively you may store the access token here without associating with a user account, - /// and wait until WebConsumer.ProcessUserAuthorization or - /// DesktopConsumer.ProcessUserAuthorization return the access - /// token to associate the access token with a user account at that point. - /// </para> - /// </remarks> - void ITokenManager.ExpireRequestTokenAndStoreNewAccessToken(string consumerKey, string requestToken, string accessToken, string accessTokenSecret) { - Requires.NotNullOrEmpty(consumerKey, "consumerKey"); - Requires.NotNullOrEmpty(requestToken, "requestToken"); - Requires.NotNullOrEmpty(accessToken, "accessToken"); - Requires.NotNull(accessTokenSecret, "accessTokenSecret"); - throw new NotImplementedException(); - } - - /// <summary> - /// Classifies a token as a request token or an access token. - /// </summary> - /// <param name="token">The token to classify.</param> - /// <returns> - /// Request or Access token, or invalid if the token is not recognized. - /// </returns> - TokenType ITokenManager.GetTokenType(string token) { - Requires.NotNullOrEmpty(token, "token"); - throw new NotImplementedException(); - } - - #endregion - } } diff --git a/src/DotNetOpenAuth.OAuth/OAuth/ChannelElements/OAuthChannel.cs b/src/DotNetOpenAuth.OAuth/OAuth/ChannelElements/OAuthChannel.cs index db131a9..1362ca9 100644 --- a/src/DotNetOpenAuth.OAuth/OAuth/ChannelElements/OAuthChannel.cs +++ b/src/DotNetOpenAuth.OAuth/OAuth/ChannelElements/OAuthChannel.cs @@ -9,7 +9,6 @@ namespace DotNetOpenAuth.OAuth.ChannelElements { using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Globalization; using System.IO; using System.Linq; @@ -21,6 +20,7 @@ namespace DotNetOpenAuth.OAuth.ChannelElements { using DotNetOpenAuth.Messaging.Bindings; using DotNetOpenAuth.Messaging.Reflection; using DotNetOpenAuth.OAuth.Messages; + using Validation; /// <summary> /// An OAuth-specific implementation of the <see cref="Channel"/> class. @@ -42,7 +42,7 @@ namespace DotNetOpenAuth.OAuth.ChannelElements { Requires.NotNull(tokenManager, "tokenManager"); Requires.NotNull(securitySettings, "securitySettings"); Requires.NotNull(signingBindingElement, "signingBindingElement"); - Requires.True(signingBindingElement.SignatureCallback == null, "signingBindingElement", OAuthStrings.SigningElementAlreadyAssociatedWithChannel); + Requires.That(signingBindingElement.SignatureCallback == null, "signingBindingElement", OAuthStrings.SigningElementAlreadyAssociatedWithChannel); Requires.NotNull(bindingElements, "bindingElements"); this.TokenManager = tokenManager; diff --git a/src/DotNetOpenAuth.OAuth/OAuth/ChannelElements/RsaSha1SigningBindingElement.cs b/src/DotNetOpenAuth.OAuth/OAuth/ChannelElements/RsaSha1SigningBindingElement.cs index 01a5c53..55ce981 100644 --- a/src/DotNetOpenAuth.OAuth/OAuth/ChannelElements/RsaSha1SigningBindingElement.cs +++ b/src/DotNetOpenAuth.OAuth/OAuth/ChannelElements/RsaSha1SigningBindingElement.cs @@ -6,7 +6,6 @@ namespace DotNetOpenAuth.OAuth.ChannelElements { using System; - using System.Diagnostics.Contracts; using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; using System.Text; diff --git a/src/DotNetOpenAuth.OAuth/OAuth/ChannelElements/SigningBindingElementBase.cs b/src/DotNetOpenAuth.OAuth/OAuth/ChannelElements/SigningBindingElementBase.cs index 58e4ada..780afdc 100644 --- a/src/DotNetOpenAuth.OAuth/OAuth/ChannelElements/SigningBindingElementBase.cs +++ b/src/DotNetOpenAuth.OAuth/OAuth/ChannelElements/SigningBindingElementBase.cs @@ -9,7 +9,6 @@ namespace DotNetOpenAuth.OAuth.ChannelElements { using System.Collections.Generic; using System.Collections.Specialized; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Globalization; using System.Linq; using System.Text; @@ -17,11 +16,11 @@ namespace DotNetOpenAuth.OAuth.ChannelElements { using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Messaging.Bindings; using DotNetOpenAuth.Messaging.Reflection; + using Validation; /// <summary> /// A binding element that signs outgoing messages and verifies the signature on incoming messages. /// </summary> - [ContractClass(typeof(SigningBindingElementBaseContract))] public abstract class SigningBindingElementBase : ITamperProtectionChannelBindingElement { /// <summary> /// The signature method this binding element uses. diff --git a/src/DotNetOpenAuth.OAuth/OAuth/ChannelElements/SigningBindingElementBaseContract.cs b/src/DotNetOpenAuth.OAuth/OAuth/ChannelElements/SigningBindingElementBaseContract.cs deleted file mode 100644 index f608e52..0000000 --- a/src/DotNetOpenAuth.OAuth/OAuth/ChannelElements/SigningBindingElementBaseContract.cs +++ /dev/null @@ -1,47 +0,0 @@ -//----------------------------------------------------------------------- -// <copyright file="SigningBindingElementBaseContract.cs" company="Outercurve Foundation"> -// Copyright (c) Outercurve Foundation. All rights reserved. -// </copyright> -//----------------------------------------------------------------------- - -namespace DotNetOpenAuth.OAuth.ChannelElements { - using System; - using System.Diagnostics.Contracts; - using DotNetOpenAuth.Messaging; - - /// <summary> - /// Code Contract for the <see cref="SigningBindingElementBase"/> class. - /// </summary> - [ContractClassFor(typeof(SigningBindingElementBase))] - internal abstract class SigningBindingElementBaseContract : SigningBindingElementBase { - /// <summary> - /// Prevents a default instance of the SigningBindingElementBaseContract class from being created. - /// </summary> - private SigningBindingElementBaseContract() - : base(string.Empty) { - } - - /// <summary> - /// Clones this instance. - /// </summary> - /// <returns>A new instance of the binding element.</returns> - /// <remarks> - /// Implementations of this method need not clone the SignatureVerificationCallback member, as the - /// <see cref="SigningBindingElementBase"/> class does this. - /// </remarks> - protected override ITamperProtectionChannelBindingElement Clone() { - throw new NotImplementedException(); - } - - /// <summary> - /// Calculates a signature for a given message. - /// </summary> - /// <param name="message">The message to sign.</param> - /// <returns>The signature for the message.</returns> - protected override string GetSignature(ITamperResistantOAuthMessage message) { - Requires.NotNull(message, "message"); - Requires.ValidState(this.Channel != null); - throw new NotImplementedException(); - } - } -} diff --git a/src/DotNetOpenAuth.OAuth/OAuth/ChannelElements/SigningBindingElementChain.cs b/src/DotNetOpenAuth.OAuth/OAuth/ChannelElements/SigningBindingElementChain.cs index 7155df8..2b25566 100644 --- a/src/DotNetOpenAuth.OAuth/OAuth/ChannelElements/SigningBindingElementChain.cs +++ b/src/DotNetOpenAuth.OAuth/OAuth/ChannelElements/SigningBindingElementChain.cs @@ -7,10 +7,10 @@ namespace DotNetOpenAuth.OAuth.ChannelElements { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// A tamper protection applying binding element that can use any of several given @@ -31,8 +31,8 @@ namespace DotNetOpenAuth.OAuth.ChannelElements { /// </param> internal SigningBindingElementChain(ITamperProtectionChannelBindingElement[] signers) { Requires.NotNullOrEmpty(signers, "signers"); - Requires.NullOrWithNoNullElements(signers, "signers"); - Requires.True(signers.Select(s => s.Protection).Distinct().Count() == 1, "signers", OAuthStrings.SigningElementsMustShareSameProtection); + Requires.NullOrNotNullElements(signers, "signers"); + Requires.That(signers.Select(s => s.Protection).Distinct().Count() == 1, "signers", OAuthStrings.SigningElementsMustShareSameProtection); this.signers = signers; } diff --git a/src/DotNetOpenAuth.OAuth/OAuth/ChannelElements/UriOrOobEncoding.cs b/src/DotNetOpenAuth.OAuth/OAuth/ChannelElements/UriOrOobEncoding.cs index 639310d..60ec6c8 100644 --- a/src/DotNetOpenAuth.OAuth/OAuth/ChannelElements/UriOrOobEncoding.cs +++ b/src/DotNetOpenAuth.OAuth/OAuth/ChannelElements/UriOrOobEncoding.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.OAuth.ChannelElements { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; diff --git a/src/DotNetOpenAuth.OAuth/OAuth/Messages/MessageBase.cs b/src/DotNetOpenAuth.OAuth/OAuth/Messages/MessageBase.cs index 98e19f0..f2f087d 100644 --- a/src/DotNetOpenAuth.OAuth/OAuth/Messages/MessageBase.cs +++ b/src/DotNetOpenAuth.OAuth/OAuth/Messages/MessageBase.cs @@ -7,12 +7,12 @@ namespace DotNetOpenAuth.OAuth.Messages { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Globalization; using System.Text; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Messaging.Reflection; using DotNetOpenAuth.OAuth.ChannelElements; + using Validation; /// <summary> /// A base class for all OAuth messages. diff --git a/src/DotNetOpenAuth.OAuth/OAuth/Messages/UnauthorizedTokenResponse.cs b/src/DotNetOpenAuth.OAuth/OAuth/Messages/UnauthorizedTokenResponse.cs index adfed6a..9e879cd 100644 --- a/src/DotNetOpenAuth.OAuth/OAuth/Messages/UnauthorizedTokenResponse.cs +++ b/src/DotNetOpenAuth.OAuth/OAuth/Messages/UnauthorizedTokenResponse.cs @@ -8,8 +8,8 @@ namespace DotNetOpenAuth.OAuth.Messages { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// A direct message sent from Service Provider to Consumer in response to diff --git a/src/DotNetOpenAuth.OAuth/OAuth/Protocol.cs b/src/DotNetOpenAuth.OAuth/OAuth/Protocol.cs index ee5c421..72f0ff4 100644 --- a/src/DotNetOpenAuth.OAuth/OAuth/Protocol.cs +++ b/src/DotNetOpenAuth.OAuth/OAuth/Protocol.cs @@ -9,10 +9,10 @@ namespace DotNetOpenAuth.OAuth { using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// An enumeration of the OAuth protocol versions supported by this library. @@ -141,7 +141,7 @@ namespace DotNetOpenAuth.OAuth { /// <returns>A matching <see cref="Protocol"/> instance.</returns> internal static Protocol Lookup(Version version) { Requires.NotNull(version, "version"); - Requires.InRange(AllVersions.Any(p => p.Version == version), "version"); + Requires.Range(AllVersions.Any(p => p.Version == version), "version"); return AllVersions.First(p => p.Version == version); } } diff --git a/src/DotNetOpenAuth.OAuth/OAuth/ServiceProviderDescription.cs b/src/DotNetOpenAuth.OAuth/OAuth/ServiceProviderDescription.cs index 3f553a9..6dbe6ea 100644 --- a/src/DotNetOpenAuth.OAuth/OAuth/ServiceProviderDescription.cs +++ b/src/DotNetOpenAuth.OAuth/OAuth/ServiceProviderDescription.cs @@ -8,7 +8,6 @@ namespace DotNetOpenAuth.OAuth { using System; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Linq; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OAuth.ChannelElements; @@ -95,7 +94,7 @@ namespace DotNetOpenAuth.OAuth { /// </summary> /// <returns>The created signing element.</returns> internal ITamperProtectionChannelBindingElement CreateTamperProtectionElement() { - Contract.Requires(this.TamperProtectionElements != null); + RequiresEx.ValidState(this.TamperProtectionElements != null); return new SigningBindingElementChain(this.TamperProtectionElements.Select(el => (ITamperProtectionChannelBindingElement)el.Clone()).ToArray()); } } diff --git a/src/DotNetOpenAuth.OAuth/OAuthReporting.cs b/src/DotNetOpenAuth.OAuth/OAuthReporting.cs index 29a9adc..e2c0aab 100644 --- a/src/DotNetOpenAuth.OAuth/OAuthReporting.cs +++ b/src/DotNetOpenAuth.OAuth/OAuthReporting.cs @@ -7,12 +7,12 @@ namespace DotNetOpenAuth { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging.Bindings; using DotNetOpenAuth.OAuth; using DotNetOpenAuth.OAuth.ChannelElements; + using Validation; /// <summary> /// Utility methods specific to OAuth feature reporting. @@ -26,9 +26,9 @@ namespace DotNetOpenAuth { /// <param name="tokenManager">The token manager.</param> /// <param name="nonceStore">The nonce store.</param> internal static void RecordFeatureAndDependencyUse(object value, ServiceProviderDescription service, ITokenManager tokenManager, INonceStore nonceStore) { - Contract.Requires(value != null); - Contract.Requires(service != null); - Contract.Requires(tokenManager != null); + Requires.NotNull(value, "value"); + Requires.NotNull(service, "service"); + Requires.NotNull(tokenManager, "tokenManager"); // In release builds, just quietly return. if (value == null || service == null || tokenManager == null) { diff --git a/src/DotNetOpenAuth.OAuth/Properties/AssemblyInfo.cs b/src/DotNetOpenAuth.OAuth/Properties/AssemblyInfo.cs index 465f646..85b5275 100644 --- a/src/DotNetOpenAuth.OAuth/Properties/AssemblyInfo.cs +++ b/src/DotNetOpenAuth.OAuth/Properties/AssemblyInfo.cs @@ -7,7 +7,6 @@ // We DON'T put an AssemblyVersionAttribute in here because it is generated in the build. using System; -using System.Diagnostics.Contracts; using System.Net; using System.Reflection; using System.Resources; @@ -33,8 +32,6 @@ using System.Web.UI; // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("7d73990c-47c0-4256-9f20-a893add9e289")] -[assembly: ContractVerification(true)] - #if StrongNameSigned // See comment at top of this file. We need this so that strong-naming doesn't // keep this assembly from being useful to shared host (medium trust) web sites. diff --git a/src/DotNetOpenAuth.OAuth/packages.config b/src/DotNetOpenAuth.OAuth/packages.config new file mode 100644 index 0000000..10eec89 --- /dev/null +++ b/src/DotNetOpenAuth.OAuth/packages.config @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="Validation" version="2.0.0.12319" targetFramework="net40" /> +</packages>
\ No newline at end of file diff --git a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/Configuration/OAuth2AuthorizationServerSection.cs b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/Configuration/OAuth2AuthorizationServerSection.cs index 6511a11..a06555d 100644 --- a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/Configuration/OAuth2AuthorizationServerSection.cs +++ b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/Configuration/OAuth2AuthorizationServerSection.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.Configuration { using System; using System.Configuration; - using System.Diagnostics.Contracts; using DotNetOpenAuth.Messaging.Bindings; using DotNetOpenAuth.OAuth2.ChannelElements; @@ -42,7 +41,6 @@ namespace DotNetOpenAuth.Configuration { /// </summary> internal static OAuth2AuthorizationServerSection Configuration { get { - Contract.Ensures(Contract.Result<OAuth2AuthorizationServerSection>() != null); return (OAuth2AuthorizationServerSection)ConfigurationManager.GetSection(SectionName) ?? new OAuth2AuthorizationServerSection(); } } diff --git a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/DotNetOpenAuth.OAuth2.AuthorizationServer.csproj b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/DotNetOpenAuth.OAuth2.AuthorizationServer.csproj index 73c563b..497405a 100644 --- a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/DotNetOpenAuth.OAuth2.AuthorizationServer.csproj +++ b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/DotNetOpenAuth.OAuth2.AuthorizationServer.csproj @@ -70,6 +70,15 @@ <LastGenOutput>AuthServerStrings.Designer.cs</LastGenOutput> </EmbeddedResource> </ItemGroup> + <ItemGroup> + <Reference Include="Validation, Version=2.0.0.0, Culture=neutral, PublicKeyToken=2fc06f0d701809a7, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\Validation.2.0.0.12319\lib\portable-windows8+net40+sl5+windowsphone8\Validation.dll</HintPath> + </Reference> + </ItemGroup> + <ItemGroup> + <None Include="packages.config" /> + </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(ProjectRoot)tools\DotNetOpenAuth.targets" /> <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))\EnlistmentInfo.targets" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))' != '' " /> diff --git a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/AuthServerUtilities.cs b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/AuthServerUtilities.cs index b8a1071..b6aa75d 100644 --- a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/AuthServerUtilities.cs +++ b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/AuthServerUtilities.cs @@ -7,13 +7,13 @@ namespace DotNetOpenAuth.OAuth2 { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Globalization; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OAuth2.ChannelElements; using DotNetOpenAuth.OAuth2.Messages; + using Validation; /// <summary> /// Utility methods for authorization servers. @@ -27,7 +27,6 @@ namespace DotNetOpenAuth.OAuth2 { /// <returns>The client information. Never null.</returns> internal static IClientDescription GetClientOrThrow(this IAuthorizationServerHost authorizationServer, string clientIdentifier) { Requires.NotNullOrEmpty(clientIdentifier, "clientIdentifier"); - Contract.Ensures(Contract.Result<IClientDescription>() != null); try { var result = authorizationServer.GetClient(clientIdentifier); diff --git a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/AuthorizationServer.cs b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/AuthorizationServer.cs index 050a4ab..5b47d0a 100644 --- a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/AuthorizationServer.cs +++ b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/AuthorizationServer.cs @@ -8,7 +8,6 @@ namespace DotNetOpenAuth.OAuth2 { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Linq; #if CLR4 using System.Net.Http; @@ -20,6 +19,7 @@ namespace DotNetOpenAuth.OAuth2 { using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OAuth2.ChannelElements; using DotNetOpenAuth.OAuth2.Messages; + using Validation; /// <summary> /// Authorization Server supporting the web server flow. @@ -194,7 +194,6 @@ namespace DotNetOpenAuth.OAuth2 { /// <returns>The authorization response message to send to the Client.</returns> public EndUserAuthorizationFailedResponse PrepareRejectAuthorizationRequest(EndUserAuthorizationRequest authorizationRequest, Uri callback = null) { Requires.NotNull(authorizationRequest, "authorizationRequest"); - Contract.Ensures(Contract.Result<EndUserAuthorizationFailedResponse>() != null); if (callback == null) { callback = this.GetCallback(authorizationRequest); @@ -215,7 +214,6 @@ namespace DotNetOpenAuth.OAuth2 { public EndUserAuthorizationSuccessResponseBase PrepareApproveAuthorizationRequest(EndUserAuthorizationRequest authorizationRequest, string userName, IEnumerable<string> scopes = null, Uri callback = null) { Requires.NotNull(authorizationRequest, "authorizationRequest"); Requires.NotNullOrEmpty(userName, "userName"); - Contract.Ensures(Contract.Result<EndUserAuthorizationSuccessResponseBase>() != null); if (callback == null) { callback = this.GetCallback(authorizationRequest); @@ -291,7 +289,6 @@ namespace DotNetOpenAuth.OAuth2 { /// <exception cref="ProtocolException">Thrown if no callback URL could be determined.</exception> protected Uri GetCallback(EndUserAuthorizationRequest authorizationRequest) { Requires.NotNull(authorizationRequest, "authorizationRequest"); - Contract.Ensures(Contract.Result<Uri>() != null); var client = this.AuthorizationServerServices.GetClientOrThrow(authorizationRequest.ClientIdentifier); diff --git a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/AuthorizationServerAccessToken.cs b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/AuthorizationServerAccessToken.cs index a127166..7c9f808 100644 --- a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/AuthorizationServerAccessToken.cs +++ b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/AuthorizationServerAccessToken.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.OAuth2 { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Security.Cryptography; using System.Text; diff --git a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/AutomatedAuthorizationCheckResponse.cs b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/AutomatedAuthorizationCheckResponse.cs index 0179d05..f644f09 100644 --- a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/AutomatedAuthorizationCheckResponse.cs +++ b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/AutomatedAuthorizationCheckResponse.cs @@ -10,6 +10,7 @@ namespace DotNetOpenAuth.OAuth2 { using System.Linq; using System.Text; using DotNetOpenAuth.OAuth2.Messages; + using Validation; /// <summary> /// Describes the result of an automated authorization check, such as for client credential or resource owner password grants. diff --git a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/AutomatedUserAuthorizationCheckResponse.cs b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/AutomatedUserAuthorizationCheckResponse.cs index b62807c..ac15af3 100644 --- a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/AutomatedUserAuthorizationCheckResponse.cs +++ b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/AutomatedUserAuthorizationCheckResponse.cs @@ -11,6 +11,7 @@ namespace DotNetOpenAuth.OAuth2 { using System.Text; using DotNetOpenAuth.OAuth2.Messages; + using Validation; /// <summary> /// Describes the result of an automated authorization check for resource owner grants. diff --git a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ChannelElements/AggregatingClientCredentialReader.cs b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ChannelElements/AggregatingClientCredentialReader.cs index ace95b3..8f39e9f 100644 --- a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ChannelElements/AggregatingClientCredentialReader.cs +++ b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ChannelElements/AggregatingClientCredentialReader.cs @@ -13,6 +13,7 @@ namespace DotNetOpenAuth.OAuth2.ChannelElements { using System.Web; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OAuth2.Messages; + using Validation; /// <summary> /// Applies OAuth 2 spec policy for supporting multiple methods of client authentication. diff --git a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ChannelElements/AuthorizationCode.cs b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ChannelElements/AuthorizationCode.cs index 08da8d2..75744d4 100644 --- a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ChannelElements/AuthorizationCode.cs +++ b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ChannelElements/AuthorizationCode.cs @@ -8,10 +8,10 @@ namespace DotNetOpenAuth.OAuth2.ChannelElements { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Security.Cryptography; using System.Text; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// Represents the authorization code created when a user approves authorization that @@ -67,7 +67,6 @@ namespace DotNetOpenAuth.OAuth2.ChannelElements { /// <returns>A DataBag formatter.</returns> internal static IDataBagFormatter<AuthorizationCode> CreateFormatter(IAuthorizationServerHost authorizationServer) { Requires.NotNull(authorizationServer, "authorizationServer"); - Contract.Ensures(Contract.Result<IDataBagFormatter<AuthorizationCode>>() != null); var cryptoStore = authorizationServer.CryptoKeyStore; ErrorUtilities.VerifyHost(cryptoStore != null, OAuthStrings.ResultShouldNotBeNull, authorizationServer.GetType(), "CryptoKeyStore"); diff --git a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ChannelElements/ClientAuthenticationModule.cs b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ChannelElements/ClientAuthenticationModule.cs index 027929a..2ab3c1e 100644 --- a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ChannelElements/ClientAuthenticationModule.cs +++ b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ChannelElements/ClientAuthenticationModule.cs @@ -13,6 +13,7 @@ namespace DotNetOpenAuth.OAuth2.ChannelElements { using System.Web; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OAuth2.Messages; + using Validation; /// <summary> /// A base class for extensions that can read incoming messages and extract the client identifier and diff --git a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ChannelElements/ClientCredentialHttpBasicReader.cs b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ChannelElements/ClientCredentialHttpBasicReader.cs index 6f0bbc4..dba1278 100644 --- a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ChannelElements/ClientCredentialHttpBasicReader.cs +++ b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ChannelElements/ClientCredentialHttpBasicReader.cs @@ -13,6 +13,7 @@ namespace DotNetOpenAuth.OAuth2.ChannelElements { using System.Web; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OAuth2.Messages; + using Validation; /// <summary> /// Reads client authentication information from the HTTP Authorization header via Basic authentication. diff --git a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ChannelElements/ClientCredentialMessagePartReader.cs b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ChannelElements/ClientCredentialMessagePartReader.cs index 2afd06e..de18d8e 100644 --- a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ChannelElements/ClientCredentialMessagePartReader.cs +++ b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ChannelElements/ClientCredentialMessagePartReader.cs @@ -11,6 +11,7 @@ namespace DotNetOpenAuth.OAuth2.ChannelElements { using System.Text; using System.Web; using DotNetOpenAuth.OAuth2.Messages; + using Validation; /// <summary> /// Reads client authentication information from the message payload itself (POST entity as a URI-encoded parameter). diff --git a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ChannelElements/MessageValidationBindingElement.cs b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ChannelElements/MessageValidationBindingElement.cs index 500b91d..6d4220b 100644 --- a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ChannelElements/MessageValidationBindingElement.cs +++ b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ChannelElements/MessageValidationBindingElement.cs @@ -7,12 +7,12 @@ namespace DotNetOpenAuth.OAuth2.ChannelElements { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Globalization; using System.Linq; using System.Text; using DotNetOpenAuth.OAuth2.Messages; using Messaging; + using Validation; /// <summary> /// A guard for all messages to or from an Authorization Server to ensure that they are well formed, diff --git a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ChannelElements/OAuth2AuthorizationServerChannel.cs b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ChannelElements/OAuth2AuthorizationServerChannel.cs index 7ca4538..249f5e7 100644 --- a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ChannelElements/OAuth2AuthorizationServerChannel.cs +++ b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ChannelElements/OAuth2AuthorizationServerChannel.cs @@ -7,12 +7,12 @@ namespace DotNetOpenAuth.OAuth2.ChannelElements { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Net.Mime; using System.Web; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OAuth2.AuthServer.Messages; using DotNetOpenAuth.OAuth2.Messages; + using Validation; /// <summary> /// The channel for the OAuth protocol. diff --git a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ChannelElements/RefreshToken.cs b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ChannelElements/RefreshToken.cs index 993583c..eb40617 100644 --- a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ChannelElements/RefreshToken.cs +++ b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ChannelElements/RefreshToken.cs @@ -6,9 +6,9 @@ namespace DotNetOpenAuth.OAuth2.ChannelElements { using System; - using System.Diagnostics.Contracts; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Messaging.Bindings; + using Validation; /// <summary> /// The refresh token issued to a client by an authorization server that allows the client @@ -48,7 +48,6 @@ namespace DotNetOpenAuth.OAuth2.ChannelElements { /// </returns> internal static IDataBagFormatter<RefreshToken> CreateFormatter(ICryptoKeyStore cryptoKeyStore) { Requires.NotNull(cryptoKeyStore, "cryptoKeyStore"); - Contract.Ensures(Contract.Result<IDataBagFormatter<RefreshToken>>() != null); return new UriStyleMessageFormatter<RefreshToken>(cryptoKeyStore, RefreshTokenKeyBucket, signed: true, encrypted: true); } diff --git a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ClientDescription.cs b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ClientDescription.cs index 3384183..a10e1aa 100644 --- a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ClientDescription.cs +++ b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/ClientDescription.cs @@ -10,6 +10,7 @@ namespace DotNetOpenAuth.OAuth2 { using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// A default implementation of the <see cref="IClientDescription"/> interface. diff --git a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/IAuthorizationServerHost.cs b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/IAuthorizationServerHost.cs index b9b5725..6465307 100644 --- a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/IAuthorizationServerHost.cs +++ b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/IAuthorizationServerHost.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.OAuth2 { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Security.Cryptography; using System.Text; @@ -15,11 +14,11 @@ namespace DotNetOpenAuth.OAuth2 { using DotNetOpenAuth.Messaging.Bindings; using DotNetOpenAuth.OAuth2.ChannelElements; using DotNetOpenAuth.OAuth2.Messages; + using Validation; /// <summary> /// Provides host-specific authorization server services needed by this library. /// </summary> - [ContractClass(typeof(IAuthorizationServerHostContract))] public interface IAuthorizationServerHost { /// <summary> /// Gets the store for storing crypto keys used to symmetrically encrypt and sign authorization codes and refresh tokens. @@ -112,134 +111,4 @@ namespace DotNetOpenAuth.OAuth2 { /// </exception> AutomatedAuthorizationCheckResponse CheckAuthorizeClientCredentialsGrant(IAccessTokenRequest accessRequest); } - - /// <summary> - /// Code Contract for the <see cref="IAuthorizationServerHost" /> interface. - /// </summary> - [ContractClassFor(typeof(IAuthorizationServerHost))] - internal abstract class IAuthorizationServerHostContract : IAuthorizationServerHost { - /// <summary> - /// Prevents a default instance of the <see cref="IAuthorizationServerHostContract"/> class from being created. - /// </summary> - private IAuthorizationServerHostContract() { - } - - /// <summary> - /// Gets the store for storeing crypto keys used to symmetrically encrypt and sign authorization codes and refresh tokens. - /// </summary> - ICryptoKeyStore IAuthorizationServerHost.CryptoKeyStore { - get { - Contract.Ensures(Contract.Result<ICryptoKeyStore>() != null); - throw new NotImplementedException(); - } - } - - /// <summary> - /// Gets the authorization code nonce store to use to ensure that authorization codes can only be used once. - /// </summary> - /// <value>The authorization code nonce store.</value> - INonceStore IAuthorizationServerHost.NonceStore { - get { - Contract.Ensures(Contract.Result<INonceStore>() != null); - throw new NotImplementedException(); - } - } - - /// <summary> - /// Gets the client with a given identifier. - /// </summary> - /// <param name="clientIdentifier">The client identifier.</param> - /// <returns>The client registration. Never null.</returns> - /// <exception cref="ArgumentException">Thrown when no client with the given identifier is registered with this authorization server.</exception> - IClientDescription IAuthorizationServerHost.GetClient(string clientIdentifier) { - Requires.NotNullOrEmpty(clientIdentifier, "clientIdentifier"); - Contract.Ensures(Contract.Result<IClientDescription>() != null); - throw new NotImplementedException(); - } - - /// <summary> - /// Determines whether a described authorization is (still) valid. - /// </summary> - /// <param name="authorization">The authorization.</param> - /// <returns> - /// <c>true</c> if the original authorization is still valid; otherwise, <c>false</c>. - /// </returns> - /// <remarks> - /// <para>When establishing that an authorization is still valid, - /// it's very important to only match on recorded authorizations that - /// meet these criteria:</para> - /// 1) The client identifier matches. - /// 2) The user account matches. - /// 3) The scope on the recorded authorization must include all scopes in the given authorization. - /// 4) The date the recorded authorization was issued must be <em>no later</em> that the date the given authorization was issued. - /// <para>One possible scenario is where the user authorized a client, later revoked authorization, - /// and even later reinstated authorization. This subsequent recorded authorization - /// would not satisfy requirement #4 in the above list. This is important because the revocation - /// the user went through should invalidate all previously issued tokens as a matter of - /// security in the event the user was revoking access in order to sever authorization on a stolen - /// account or piece of hardware in which the tokens were stored. </para> - /// </remarks> - bool IAuthorizationServerHost.IsAuthorizationValid(IAuthorizationDescription authorization) { - Requires.NotNull(authorization, "authorization"); - throw new NotImplementedException(); - } - - /// <summary> - /// Determines whether a given set of resource owner credentials is valid based on the authorization server's user database - /// and if so records an authorization entry such that subsequent calls to <see cref="IAuthorizationServerHost.IsAuthorizationValid"/> would - /// return <c>true</c>. - /// </summary> - /// <param name="userName">Username on the account.</param> - /// <param name="password">The user's password.</param> - /// <param name="accessRequest"> - /// The access request the credentials came with. - /// This may be useful if the authorization server wishes to apply some policy based on the client that is making the request. - /// </param> - /// <returns> - /// A value that describes the result of the authorization check. - /// </returns> - /// <exception cref="NotSupportedException"> - /// May be thrown if the authorization server does not support the resource owner password credential grant type. - /// </exception> - AutomatedUserAuthorizationCheckResponse IAuthorizationServerHost.CheckAuthorizeResourceOwnerCredentialGrant(string userName, string password, IAccessTokenRequest accessRequest) { - Contract.Requires(!string.IsNullOrEmpty(userName)); - Contract.Requires(password != null); - Contract.Requires(accessRequest != null); - Contract.Ensures(Contract.Result<AutomatedUserAuthorizationCheckResponse>() != null); - throw new NotImplementedException(); - } - - /// <summary> - /// Determines whether an access token request given a client credential grant should be authorized - /// and if so records an authorization entry such that subsequent calls to <see cref="IAuthorizationServerHost.IsAuthorizationValid" /> would - /// return <c>true</c>. - /// </summary> - /// <param name="accessRequest">The access request the credentials came with. - /// This may be useful if the authorization server wishes to apply some policy based on the client that is making the request.</param> - /// <returns> - /// A value that describes the result of the authorization check. - /// </returns> - /// <exception cref="NotSupportedException">May be thrown if the authorization server does not support the client credential grant type.</exception> - AutomatedAuthorizationCheckResponse IAuthorizationServerHost.CheckAuthorizeClientCredentialsGrant(IAccessTokenRequest accessRequest) { - Contract.Requires(accessRequest != null); - Contract.Ensures(Contract.Result<AutomatedAuthorizationCheckResponse>() != null); - throw new NotImplementedException(); - } - - /// <summary> - /// Obtains parameters to go into the formulation of an access token. - /// </summary> - /// <param name="accessTokenRequestMessage">Details regarding the resources that the access token will grant access to, and the identity of the client - /// that will receive that access. - /// Based on this information the receiving resource server can be determined and the lifetime of the access - /// token can be set based on the sensitivity of the resources.</param> - /// <returns> - /// A non-null parameters instance that DotNetOpenAuth will dispose after it has been used. - /// </returns> - AccessTokenResult IAuthorizationServerHost.CreateAccessToken(IAccessTokenRequest accessTokenRequestMessage) { - Contract.Requires(accessTokenRequestMessage != null); - Contract.Ensures(Contract.Result<AccessTokenResult>() != null); - throw new NotImplementedException(); - } - } } diff --git a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/Messages/AccessTokenResult.cs b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/Messages/AccessTokenResult.cs index 4297165..3663018 100644 --- a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/Messages/AccessTokenResult.cs +++ b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/Messages/AccessTokenResult.cs @@ -10,6 +10,7 @@ namespace DotNetOpenAuth.OAuth2 { using System.Linq; using System.Security.Cryptography; using System.Text; + using Validation; /// <summary> /// Describes the parameters to be fed into creating a response to an access token request. diff --git a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/Messages/EndUserAuthorizationSuccessAuthCodeResponseAS.cs b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/Messages/EndUserAuthorizationSuccessAuthCodeResponseAS.cs index 25f5dc8..c479f58 100644 --- a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/Messages/EndUserAuthorizationSuccessAuthCodeResponseAS.cs +++ b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/OAuth2/Messages/EndUserAuthorizationSuccessAuthCodeResponseAS.cs @@ -10,6 +10,7 @@ namespace DotNetOpenAuth.OAuth2.Messages { using System.Linq; using System.Text; using DotNetOpenAuth.OAuth2.ChannelElements; + using Validation; /// <summary> /// The message sent by the Authorization Server to the Client via the user agent diff --git a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/Properties/AssemblyInfo.cs b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/Properties/AssemblyInfo.cs index 397b35d..29900ab 100644 --- a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/Properties/AssemblyInfo.cs +++ b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/Properties/AssemblyInfo.cs @@ -7,7 +7,6 @@ // We DON'T put an AssemblyVersionAttribute in here because it is generated in the build. using System; -using System.Diagnostics.Contracts; using System.Net; using System.Reflection; using System.Resources; @@ -31,8 +30,6 @@ using System.Web.UI; // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("7d73990c-47c0-4256-9f20-a893add9e289")] -[assembly: ContractVerification(true)] - #if StrongNameSigned // See comment at top of this file. We need this so that strong-naming doesn't // keep this assembly from being useful to shared host (medium trust) web sites. diff --git a/src/DotNetOpenAuth.OAuth2.AuthorizationServer/packages.config b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/packages.config new file mode 100644 index 0000000..10eec89 --- /dev/null +++ b/src/DotNetOpenAuth.OAuth2.AuthorizationServer/packages.config @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="Validation" version="2.0.0.12319" targetFramework="net40" /> +</packages>
\ No newline at end of file diff --git a/src/DotNetOpenAuth.OAuth2.Client.UI/DotNetOpenAuth.OAuth2.Client.UI.csproj b/src/DotNetOpenAuth.OAuth2.Client.UI/DotNetOpenAuth.OAuth2.Client.UI.csproj index 373baab..19161f4 100644 --- a/src/DotNetOpenAuth.OAuth2.Client.UI/DotNetOpenAuth.OAuth2.Client.UI.csproj +++ b/src/DotNetOpenAuth.OAuth2.Client.UI/DotNetOpenAuth.OAuth2.Client.UI.csproj @@ -46,6 +46,15 @@ <DependentUpon>ClientAuthorizationView.cs</DependentUpon> </EmbeddedResource> </ItemGroup> + <ItemGroup> + <Reference Include="Validation, Version=2.0.0.0, Culture=neutral, PublicKeyToken=2fc06f0d701809a7, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\Validation.2.0.0.12319\lib\portable-windows8+net40+sl5+windowsphone8\Validation.dll</HintPath> + </Reference> + </ItemGroup> + <ItemGroup> + <None Include="packages.config" /> + </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(ProjectRoot)tools\DotNetOpenAuth.targets" /> <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))\EnlistmentInfo.targets" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))' != '' " /> diff --git a/src/DotNetOpenAuth.OAuth2.Client.UI/OAuth2/ClientAuthorizationCompleteEventArgs.cs b/src/DotNetOpenAuth.OAuth2.Client.UI/OAuth2/ClientAuthorizationCompleteEventArgs.cs index a57034b..d7a080c 100644 --- a/src/DotNetOpenAuth.OAuth2.Client.UI/OAuth2/ClientAuthorizationCompleteEventArgs.cs +++ b/src/DotNetOpenAuth.OAuth2.Client.UI/OAuth2/ClientAuthorizationCompleteEventArgs.cs @@ -9,6 +9,7 @@ namespace DotNetOpenAuth.OAuth2 { using System.Collections.Generic; using System.Linq; using System.Text; + using Validation; /// <summary> /// Describes the results of a completed authorization flow. diff --git a/src/DotNetOpenAuth.OAuth2.Client.UI/OAuth2/ClientAuthorizationView.cs b/src/DotNetOpenAuth.OAuth2.Client.UI/OAuth2/ClientAuthorizationView.cs index a0204fa..2c90c99 100644 --- a/src/DotNetOpenAuth.OAuth2.Client.UI/OAuth2/ClientAuthorizationView.cs +++ b/src/DotNetOpenAuth.OAuth2.Client.UI/OAuth2/ClientAuthorizationView.cs @@ -10,7 +10,6 @@ namespace DotNetOpenAuth.OAuth2 { using System.ComponentModel; using System.Data; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Drawing; using System.Linq; using System.Text; diff --git a/src/DotNetOpenAuth.OAuth2.Client.UI/Properties/AssemblyInfo.cs b/src/DotNetOpenAuth.OAuth2.Client.UI/Properties/AssemblyInfo.cs index 397b35d..29900ab 100644 --- a/src/DotNetOpenAuth.OAuth2.Client.UI/Properties/AssemblyInfo.cs +++ b/src/DotNetOpenAuth.OAuth2.Client.UI/Properties/AssemblyInfo.cs @@ -7,7 +7,6 @@ // We DON'T put an AssemblyVersionAttribute in here because it is generated in the build. using System; -using System.Diagnostics.Contracts; using System.Net; using System.Reflection; using System.Resources; @@ -31,8 +30,6 @@ using System.Web.UI; // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("7d73990c-47c0-4256-9f20-a893add9e289")] -[assembly: ContractVerification(true)] - #if StrongNameSigned // See comment at top of this file. We need this so that strong-naming doesn't // keep this assembly from being useful to shared host (medium trust) web sites. diff --git a/src/DotNetOpenAuth.OAuth2.Client.UI/packages.config b/src/DotNetOpenAuth.OAuth2.Client.UI/packages.config new file mode 100644 index 0000000..10eec89 --- /dev/null +++ b/src/DotNetOpenAuth.OAuth2.Client.UI/packages.config @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="Validation" version="2.0.0.12319" targetFramework="net40" /> +</packages>
\ No newline at end of file diff --git a/src/DotNetOpenAuth.OAuth2.Client/Configuration/OAuth2ClientSection.cs b/src/DotNetOpenAuth.OAuth2.Client/Configuration/OAuth2ClientSection.cs index 3bb6ffc..d0c27c9 100644 --- a/src/DotNetOpenAuth.OAuth2.Client/Configuration/OAuth2ClientSection.cs +++ b/src/DotNetOpenAuth.OAuth2.Client/Configuration/OAuth2ClientSection.cs @@ -7,7 +7,7 @@ namespace DotNetOpenAuth.Configuration { using System; using System.Configuration; - using System.Diagnostics.Contracts; + using Validation; /// <summary> /// Represents the <oauth2/client> section in the host's .config file. @@ -34,7 +34,6 @@ namespace DotNetOpenAuth.Configuration { /// </summary> internal static OAuth2ClientSection Configuration { get { - Contract.Ensures(Contract.Result<OAuth2ClientSection>() != null); return (OAuth2ClientSection)ConfigurationManager.GetSection(SectionName) ?? new OAuth2ClientSection(); } } @@ -46,14 +45,13 @@ namespace DotNetOpenAuth.Configuration { [PositiveTimeSpanValidator] internal TimeSpan MaxAuthorizationTime { get { - Contract.Ensures(Contract.Result<TimeSpan>() > TimeSpan.Zero); TimeSpan result = (TimeSpan)this[MaxAuthorizationTimePropertyName]; - Contract.Assume(result > TimeSpan.Zero); // our PositiveTimeSpanValidator should take care of this + Assumes.True(result > TimeSpan.Zero); // our PositiveTimeSpanValidator should take care of this return result; } set { - Requires.InRange(value > TimeSpan.Zero, "value"); + Requires.Range(value > TimeSpan.Zero, "value"); this[MaxAuthorizationTimePropertyName] = value; } } diff --git a/src/DotNetOpenAuth.OAuth2.Client/DotNetOpenAuth.OAuth2.Client.csproj b/src/DotNetOpenAuth.OAuth2.Client/DotNetOpenAuth.OAuth2.Client.csproj index e595df2..475ed3f 100644 --- a/src/DotNetOpenAuth.OAuth2.Client/DotNetOpenAuth.OAuth2.Client.csproj +++ b/src/DotNetOpenAuth.OAuth2.Client/DotNetOpenAuth.OAuth2.Client.csproj @@ -61,6 +61,15 @@ <LastGenOutput>ClientStrings.Designer.cs</LastGenOutput> </EmbeddedResource> </ItemGroup> + <ItemGroup> + <Reference Include="Validation, Version=2.0.0.0, Culture=neutral, PublicKeyToken=2fc06f0d701809a7, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\Validation.2.0.0.12319\lib\portable-windows8+net40+sl5+windowsphone8\Validation.dll</HintPath> + </Reference> + </ItemGroup> + <ItemGroup> + <None Include="packages.config" /> + </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(ProjectRoot)tools\DotNetOpenAuth.targets" /> <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))\EnlistmentInfo.targets" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))' != '' " /> diff --git a/src/DotNetOpenAuth.OAuth2.Client/OAuth2/BearerTokenHttpMessageHandler.cs b/src/DotNetOpenAuth.OAuth2.Client/OAuth2/BearerTokenHttpMessageHandler.cs index 6b2e937..8c802ff 100644 --- a/src/DotNetOpenAuth.OAuth2.Client/OAuth2/BearerTokenHttpMessageHandler.cs +++ b/src/DotNetOpenAuth.OAuth2.Client/OAuth2/BearerTokenHttpMessageHandler.cs @@ -15,6 +15,7 @@ namespace DotNetOpenAuth.OAuth2 { using System.Threading; using System.Threading.Tasks; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// An <see cref="HttpMessageHandler"/> that applies a bearer token to each outbound HTTP request. @@ -41,7 +42,7 @@ namespace DotNetOpenAuth.OAuth2 { : base(innerHandler) { Requires.NotNull(client, "client"); Requires.NotNull(authorization, "authorization"); - Requires.True(!string.IsNullOrEmpty(authorization.AccessToken), "authorization.AccessToken"); + Requires.That(!string.IsNullOrEmpty(authorization.AccessToken), "authorization.AccessToken", "AccessToken must be non-empty"); this.Client = client; this.Authorization = authorization; } diff --git a/src/DotNetOpenAuth.OAuth2.Client/OAuth2/ChannelElements/OAuth2ClientChannel.cs b/src/DotNetOpenAuth.OAuth2.Client/OAuth2/ChannelElements/OAuth2ClientChannel.cs index b0cdb4b..cf57618 100644 --- a/src/DotNetOpenAuth.OAuth2.Client/OAuth2/ChannelElements/OAuth2ClientChannel.cs +++ b/src/DotNetOpenAuth.OAuth2.Client/OAuth2/ChannelElements/OAuth2ClientChannel.cs @@ -8,7 +8,6 @@ namespace DotNetOpenAuth.OAuth2.ChannelElements { using System; using System.Collections.Generic; using System.Collections.Specialized; - using System.Diagnostics.Contracts; using System.Net; using System.Web; using System.Xml; diff --git a/src/DotNetOpenAuth.OAuth2.Client/OAuth2/ClientBase.cs b/src/DotNetOpenAuth.OAuth2.Client/OAuth2/ClientBase.cs index e9c952d..b2178e9 100644 --- a/src/DotNetOpenAuth.OAuth2.Client/OAuth2/ClientBase.cs +++ b/src/DotNetOpenAuth.OAuth2.Client/OAuth2/ClientBase.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.OAuth2 { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Globalization; using System.Linq; using System.Net; @@ -21,6 +20,7 @@ namespace DotNetOpenAuth.OAuth2 { using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OAuth2.ChannelElements; using DotNetOpenAuth.OAuth2.Messages; + using Validation; /// <summary> /// A base class for common OAuth Client behaviors. @@ -134,7 +134,7 @@ namespace DotNetOpenAuth.OAuth2 { public void AuthorizeRequest(WebHeaderCollection requestHeaders, IAuthorizationState authorization) { Requires.NotNull(requestHeaders, "requestHeaders"); Requires.NotNull(authorization, "authorization"); - Requires.True(!string.IsNullOrEmpty(authorization.AccessToken), "authorization"); + Requires.That(!string.IsNullOrEmpty(authorization.AccessToken), "authorization", "AccessToken required."); ErrorUtilities.VerifyProtocol(!authorization.AccessTokenExpirationUtc.HasValue || authorization.AccessTokenExpirationUtc >= DateTime.UtcNow || authorization.RefreshToken != null, ClientStrings.AuthorizationExpired); if (authorization.AccessTokenExpirationUtc.HasValue && authorization.AccessTokenExpirationUtc.Value < DateTime.UtcNow) { @@ -186,7 +186,7 @@ namespace DotNetOpenAuth.OAuth2 { /// </remarks> public bool RefreshAuthorization(IAuthorizationState authorization, TimeSpan? skipIfUsefulLifeExceeds = null) { Requires.NotNull(authorization, "authorization"); - Requires.True(!string.IsNullOrEmpty(authorization.RefreshToken), "authorization"); + Requires.That(!string.IsNullOrEmpty(authorization.RefreshToken), "authorization", "RefreshToken required."); if (skipIfUsefulLifeExceeds.HasValue && authorization.AccessTokenExpirationUtc.HasValue) { TimeSpan usefulLifeRemaining = authorization.AccessTokenExpirationUtc.Value - DateTime.UtcNow; @@ -223,7 +223,6 @@ namespace DotNetOpenAuth.OAuth2 { public IAuthorizationState GetScopedAccessToken(string refreshToken, HashSet<string> scope) { Requires.NotNullOrEmpty(refreshToken, "refreshToken"); Requires.NotNull(scope, "scope"); - Contract.Ensures(Contract.Result<IAuthorizationState>() != null); var request = new AccessTokenRefreshRequestC(this.AuthorizationServer) { ClientIdentifier = this.ClientIdentifier, @@ -377,8 +376,8 @@ namespace DotNetOpenAuth.OAuth2 { /// <returns>A fractional number no greater than 1. Could be negative if the access token has already expired.</returns> private static double ProportionalLifeRemaining(IAuthorizationState authorization) { Requires.NotNull(authorization, "authorization"); - Requires.True(authorization.AccessTokenIssueDateUtc.HasValue, "authorization"); - Requires.True(authorization.AccessTokenExpirationUtc.HasValue, "authorization"); + Requires.That(authorization.AccessTokenIssueDateUtc.HasValue, "authorization", "AccessTokenIssueDateUtc required"); + Requires.That(authorization.AccessTokenExpirationUtc.HasValue, "authorization", "AccessTokenExpirationUtc required"); // Calculate what % of the total life this access token has left. TimeSpan totalLifetime = authorization.AccessTokenExpirationUtc.Value - authorization.AccessTokenIssueDateUtc.Value; diff --git a/src/DotNetOpenAuth.OAuth2.Client/OAuth2/ClientCredentialApplicator.cs b/src/DotNetOpenAuth.OAuth2.Client/OAuth2/ClientCredentialApplicator.cs index 0677f5a..39ba1cb 100644 --- a/src/DotNetOpenAuth.OAuth2.Client/OAuth2/ClientCredentialApplicator.cs +++ b/src/DotNetOpenAuth.OAuth2.Client/OAuth2/ClientCredentialApplicator.cs @@ -12,6 +12,7 @@ namespace DotNetOpenAuth.OAuth2 { using System.Text; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OAuth2.Messages; + using Validation; /// <summary> /// A base class for extensions that apply client authentication to messages for the authorization server in specific ways. diff --git a/src/DotNetOpenAuth.OAuth2.Client/OAuth2/IClientAuthorizationTracker.cs b/src/DotNetOpenAuth.OAuth2.Client/OAuth2/IClientAuthorizationTracker.cs index 73b7a44..d42248a 100644 --- a/src/DotNetOpenAuth.OAuth2.Client/OAuth2/IClientAuthorizationTracker.cs +++ b/src/DotNetOpenAuth.OAuth2.Client/OAuth2/IClientAuthorizationTracker.cs @@ -6,12 +6,11 @@ namespace DotNetOpenAuth.OAuth2 { using System; - using System.Diagnostics.Contracts; + using Validation; /// <summary> /// A token manager implemented by some clients to assist in tracking authorization state. /// </summary> - [ContractClass(typeof(IClientAuthorizationTrackerContract))] public interface IClientAuthorizationTracker { /// <summary> /// Gets the state of the authorization for a given callback URL and client state. @@ -21,33 +20,4 @@ namespace DotNetOpenAuth.OAuth2 { /// <returns>The authorization state; may be <c>null</c> if no authorization state matches.</returns> IAuthorizationState GetAuthorizationState(Uri callbackUrl, string clientState); } - - /// <summary> - /// Contract class for the <see cref="IClientAuthorizationTracker"/> interface. - /// </summary> - [ContractClassFor(typeof(IClientAuthorizationTracker))] - internal abstract class IClientAuthorizationTrackerContract : IClientAuthorizationTracker { - /// <summary> - /// Prevents a default instance of the <see cref="IClientAuthorizationTrackerContract"/> class from being created. - /// </summary> - private IClientAuthorizationTrackerContract() { - } - - #region IClientTokenManager Members - - /// <summary> - /// Gets the state of the authorization for a given callback URL and client state. - /// </summary> - /// <param name="callbackUrl">The callback URL.</param> - /// <param name="clientState">State of the client stored at the beginning of an authorization request.</param> - /// <returns> - /// The authorization state; may be <c>null</c> if no authorization state matches. - /// </returns> - IAuthorizationState IClientAuthorizationTracker.GetAuthorizationState(Uri callbackUrl, string clientState) { - Requires.NotNull(callbackUrl, "callbackUrl"); - throw new NotImplementedException(); - } - - #endregion - } } diff --git a/src/DotNetOpenAuth.OAuth2.Client/OAuth2/Messages/AccessTokenAuthorizationCodeRequestC.cs b/src/DotNetOpenAuth.OAuth2.Client/OAuth2/Messages/AccessTokenAuthorizationCodeRequestC.cs index ebfb2e8..861c8cd 100644 --- a/src/DotNetOpenAuth.OAuth2.Client/OAuth2/Messages/AccessTokenAuthorizationCodeRequestC.cs +++ b/src/DotNetOpenAuth.OAuth2.Client/OAuth2/Messages/AccessTokenAuthorizationCodeRequestC.cs @@ -9,6 +9,7 @@ namespace DotNetOpenAuth.OAuth2.Messages { using System.Collections.Generic; using System.Linq; using System.Text; + using Validation; /// <summary> /// A request from a Client to an Authorization Server to exchange an authorization code for an access token, diff --git a/src/DotNetOpenAuth.OAuth2.Client/OAuth2/Messages/EndUserAuthorizationRequestC.cs b/src/DotNetOpenAuth.OAuth2.Client/OAuth2/Messages/EndUserAuthorizationRequestC.cs index 7c06897..b388f0c 100644 --- a/src/DotNetOpenAuth.OAuth2.Client/OAuth2/Messages/EndUserAuthorizationRequestC.cs +++ b/src/DotNetOpenAuth.OAuth2.Client/OAuth2/Messages/EndUserAuthorizationRequestC.cs @@ -9,6 +9,7 @@ namespace DotNetOpenAuth.OAuth2.Messages { using System.Collections.Generic; using System.Linq; using System.Text; + using Validation; /// <summary> /// A message sent by a web application Client to the AuthorizationServer @@ -24,8 +25,8 @@ namespace DotNetOpenAuth.OAuth2.Messages { internal EndUserAuthorizationRequestC(AuthorizationServerDescription authorizationServer) : base(authorizationServer.AuthorizationEndpoint, authorizationServer.Version) { Requires.NotNull(authorizationServer, "authorizationServer"); - Requires.True(authorizationServer.Version != null, "authorizationServer"); - Requires.True(authorizationServer.AuthorizationEndpoint != null, "authorizationServer"); + Requires.That(authorizationServer.Version != null, "authorizationServer", "requires Version"); + Requires.That(authorizationServer.AuthorizationEndpoint != null, "authorizationServer", "requires AuthorizationEndpoint"); } } } diff --git a/src/DotNetOpenAuth.OAuth2.Client/OAuth2/UserAgentClient.cs b/src/DotNetOpenAuth.OAuth2.Client/OAuth2/UserAgentClient.cs index edde2a9..dcb3826 100644 --- a/src/DotNetOpenAuth.OAuth2.Client/OAuth2/UserAgentClient.cs +++ b/src/DotNetOpenAuth.OAuth2.Client/OAuth2/UserAgentClient.cs @@ -7,13 +7,13 @@ namespace DotNetOpenAuth.OAuth2 { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using System.Web; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OAuth2.Messages; + using Validation; /// <summary> /// The OAuth client for the user-agent flow, providing services for installed apps @@ -103,7 +103,7 @@ namespace DotNetOpenAuth.OAuth2 { /// </returns> public Uri RequestUserAuthorization(IAuthorizationState authorization, bool implicitResponseType = false, string state = null) { Requires.NotNull(authorization, "authorization"); - Requires.ValidState(!string.IsNullOrEmpty(this.ClientIdentifier)); + RequiresEx.ValidState(!string.IsNullOrEmpty(this.ClientIdentifier)); var request = this.PrepareRequestUserAuthorization(authorization, implicitResponseType, state); return this.Channel.PrepareResponse(request).GetDirectUriRequest(this.Channel); @@ -172,7 +172,7 @@ namespace DotNetOpenAuth.OAuth2 { /// </returns> internal EndUserAuthorizationRequest PrepareRequestUserAuthorization(IAuthorizationState authorization, bool implicitResponseType = false, string state = null) { Requires.NotNull(authorization, "authorization"); - Requires.ValidState(!string.IsNullOrEmpty(this.ClientIdentifier)); + RequiresEx.ValidState(!string.IsNullOrEmpty(this.ClientIdentifier)); if (authorization.Callback == null) { authorization.Callback = new Uri("http://localhost/"); diff --git a/src/DotNetOpenAuth.OAuth2.Client/OAuth2/WebServerClient.cs b/src/DotNetOpenAuth.OAuth2.Client/OAuth2/WebServerClient.cs index 879e4e3..63d96e1 100644 --- a/src/DotNetOpenAuth.OAuth2.Client/OAuth2/WebServerClient.cs +++ b/src/DotNetOpenAuth.OAuth2.Client/OAuth2/WebServerClient.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.OAuth2 { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Globalization; using System.Linq; using System.Net; @@ -18,6 +17,7 @@ namespace DotNetOpenAuth.OAuth2 { using DotNetOpenAuth.Configuration; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OAuth2.Messages; + using Validation; /// <summary> /// An OAuth 2.0 consumer designed for web applications. @@ -89,9 +89,8 @@ namespace DotNetOpenAuth.OAuth2 { /// <returns>The authorization request.</returns> public OutgoingWebResponse PrepareRequestUserAuthorization(IAuthorizationState authorization) { Requires.NotNull(authorization, "authorization"); - Requires.ValidState(authorization.Callback != null || (HttpContext.Current != null && HttpContext.Current.Request != null), MessagingStrings.HttpContextRequired); - Requires.ValidState(!string.IsNullOrEmpty(this.ClientIdentifier), Strings.RequiredPropertyNotYetPreset, "ClientIdentifier"); - Contract.Ensures(Contract.Result<OutgoingWebResponse>() != null); + RequiresEx.ValidState(authorization.Callback != null || (HttpContext.Current != null && HttpContext.Current.Request != null), MessagingStrings.HttpContextRequired); + RequiresEx.ValidState(!string.IsNullOrEmpty(this.ClientIdentifier), Strings.RequiredPropertyNotYetPreset, "ClientIdentifier"); if (authorization.Callback == null) { authorization.Callback = this.Channel.GetRequestFromContext().GetPublicFacingUrl() @@ -136,8 +135,8 @@ namespace DotNetOpenAuth.OAuth2 { /// <param name="request">The incoming HTTP request that may carry an authorization response.</param> /// <returns>The authorization state that contains the details of the authorization.</returns> public IAuthorizationState ProcessUserAuthorization(HttpRequestBase request = null) { - Requires.ValidState(!string.IsNullOrEmpty(this.ClientIdentifier), Strings.RequiredPropertyNotYetPreset, "ClientIdentifier"); - Requires.ValidState(this.ClientCredentialApplicator != null, Strings.RequiredPropertyNotYetPreset, "ClientCredentialApplicator"); + RequiresEx.ValidState(!string.IsNullOrEmpty(this.ClientIdentifier), Strings.RequiredPropertyNotYetPreset, "ClientIdentifier"); + RequiresEx.ValidState(this.ClientCredentialApplicator != null, Strings.RequiredPropertyNotYetPreset, "ClientCredentialApplicator"); if (request == null) { request = this.Channel.GetRequestFromContext(); diff --git a/src/DotNetOpenAuth.OAuth2.Client/Properties/AssemblyInfo.cs b/src/DotNetOpenAuth.OAuth2.Client/Properties/AssemblyInfo.cs index 397b35d..29900ab 100644 --- a/src/DotNetOpenAuth.OAuth2.Client/Properties/AssemblyInfo.cs +++ b/src/DotNetOpenAuth.OAuth2.Client/Properties/AssemblyInfo.cs @@ -7,7 +7,6 @@ // We DON'T put an AssemblyVersionAttribute in here because it is generated in the build. using System; -using System.Diagnostics.Contracts; using System.Net; using System.Reflection; using System.Resources; @@ -31,8 +30,6 @@ using System.Web.UI; // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("7d73990c-47c0-4256-9f20-a893add9e289")] -[assembly: ContractVerification(true)] - #if StrongNameSigned // See comment at top of this file. We need this so that strong-naming doesn't // keep this assembly from being useful to shared host (medium trust) web sites. diff --git a/src/DotNetOpenAuth.OAuth2.Client/packages.config b/src/DotNetOpenAuth.OAuth2.Client/packages.config new file mode 100644 index 0000000..10eec89 --- /dev/null +++ b/src/DotNetOpenAuth.OAuth2.Client/packages.config @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="Validation" version="2.0.0.12319" targetFramework="net40" /> +</packages>
\ No newline at end of file diff --git a/src/DotNetOpenAuth.OAuth2.ClientAuthorization/DotNetOpenAuth.OAuth2.ClientAuthorization.csproj b/src/DotNetOpenAuth.OAuth2.ClientAuthorization/DotNetOpenAuth.OAuth2.ClientAuthorization.csproj index c3ed569..032fd28 100644 --- a/src/DotNetOpenAuth.OAuth2.ClientAuthorization/DotNetOpenAuth.OAuth2.ClientAuthorization.csproj +++ b/src/DotNetOpenAuth.OAuth2.ClientAuthorization/DotNetOpenAuth.OAuth2.ClientAuthorization.csproj @@ -71,6 +71,13 @@ </ItemGroup> <ItemGroup> <None Include="OAuth2\Messages\Access Token Request Messages.cd" /> + <None Include="packages.config" /> + </ItemGroup> + <ItemGroup> + <Reference Include="Validation, Version=2.0.0.0, Culture=neutral, PublicKeyToken=2fc06f0d701809a7, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\Validation.2.0.0.12319\lib\portable-windows8+net40+sl5+windowsphone8\Validation.dll</HintPath> + </Reference> </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(ProjectRoot)tools\DotNetOpenAuth.targets" /> diff --git a/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/ChannelElements/OAuth2ChannelBase.cs b/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/ChannelElements/OAuth2ChannelBase.cs index f2f674e..e6be1c4 100644 --- a/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/ChannelElements/OAuth2ChannelBase.cs +++ b/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/ChannelElements/OAuth2ChannelBase.cs @@ -12,6 +12,7 @@ namespace DotNetOpenAuth.OAuth2.ChannelElements { using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OAuth2.Messages; + using Validation; /// <summary> /// The base messaging channel used by OAuth 2.0 parties. diff --git a/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/IClientDescription.cs b/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/IClientDescription.cs index b4bc689..fe05f25 100644 --- a/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/IClientDescription.cs +++ b/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/IClientDescription.cs @@ -7,13 +7,12 @@ namespace DotNetOpenAuth.OAuth2 { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// A description of a client from an Authorization Server's point of view. /// </summary> - [ContractClass(typeof(IClientDescriptionContract))] public interface IClientDescription { /// <summary> /// Gets the callback to use when an individual authorization request @@ -69,70 +68,4 @@ namespace DotNetOpenAuth.OAuth2 { /// </remarks> bool IsValidClientSecret(string secret); } - - /// <summary> - /// Contract class for the <see cref="IClientDescription"/> interface. - /// </summary> - [ContractClassFor(typeof(IClientDescription))] - internal abstract class IClientDescriptionContract : IClientDescription { - #region IClientDescription Members - - /// <summary> - /// Gets the type of the client. - /// </summary> - ClientType IClientDescription.ClientType { - get { throw new NotImplementedException(); } - } - - /// <summary> - /// Gets the callback to use when an individual authorization request - /// does not include an explicit callback URI. - /// </summary> - /// <value> - /// An absolute URL; or <c>null</c> if none is registered. - /// </value> - Uri IClientDescription.DefaultCallback { - get { - Contract.Ensures(Contract.Result<Uri>() == null || Contract.Result<Uri>().IsAbsoluteUri); - throw new NotImplementedException(); - } - } - - /// <summary> - /// Gets a value indicating whether a non-empty secret is registered for this client. - /// </summary> - bool IClientDescription.HasNonEmptySecret { - get { throw new NotImplementedException(); } - } - - /// <summary> - /// Determines whether a callback URI included in a client's authorization request - /// is among those allowed callbacks for the registered client. - /// </summary> - /// <param name="callback">The requested callback URI.</param> - /// <returns> - /// <c>true</c> if the callback is allowed; otherwise, <c>false</c>. - /// </returns> - bool IClientDescription.IsCallbackAllowed(Uri callback) { - Requires.NotNull(callback, "callback"); - Requires.True(callback.IsAbsoluteUri, "callback"); - throw new NotImplementedException(); - } - - /// <summary> - /// Checks whether the specified client secret is correct. - /// </summary> - /// <param name="secret">The secret obtained from the client.</param> - /// <returns><c>true</c> if the secret matches the one in the authorization server's record for the client; <c>false</c> otherwise.</returns> - /// <remarks> - /// All string equality checks, whether checking secrets or their hashes, - /// should be done using <see cref="MessagingUtilities.EqualsConstantTime"/> to mitigate timing attacks. - /// </remarks> - bool IClientDescription.IsValidClientSecret(string secret) { - Requires.NotNullOrEmpty(secret, "secret"); - throw new NotImplementedException(); - } - - #endregion - } } diff --git a/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/Messages/AccessTokenAuthorizationCodeRequest.cs b/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/Messages/AccessTokenAuthorizationCodeRequest.cs index b8c9ede..bf06627 100644 --- a/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/Messages/AccessTokenAuthorizationCodeRequest.cs +++ b/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/Messages/AccessTokenAuthorizationCodeRequest.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.OAuth2.Messages { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; diff --git a/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/Messages/EndUserAuthorizationFailedResponse.cs b/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/Messages/EndUserAuthorizationFailedResponse.cs index 7cc8e82..cb1c5d4 100644 --- a/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/Messages/EndUserAuthorizationFailedResponse.cs +++ b/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/Messages/EndUserAuthorizationFailedResponse.cs @@ -7,11 +7,11 @@ namespace DotNetOpenAuth.OAuth2.Messages { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Runtime.Remoting.Messaging; using System.Text; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// The message that an Authorization Server responds to a Client with when the user denies a user authorization request. diff --git a/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/Messages/EndUserAuthorizationRequest.cs b/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/Messages/EndUserAuthorizationRequest.cs index f229cf9..9da2c03 100644 --- a/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/Messages/EndUserAuthorizationRequest.cs +++ b/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/Messages/EndUserAuthorizationRequest.cs @@ -8,10 +8,10 @@ namespace DotNetOpenAuth.OAuth2.Messages { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using DotNetOpenAuth.Configuration; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OAuth2.ChannelElements; + using Validation; /// <summary> /// A message sent by a web application Client to the AuthorizationServer diff --git a/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/Messages/EndUserAuthorizationSuccessAccessTokenResponse.cs b/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/Messages/EndUserAuthorizationSuccessAccessTokenResponse.cs index 7a79e46..a776459 100644 --- a/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/Messages/EndUserAuthorizationSuccessAccessTokenResponse.cs +++ b/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/Messages/EndUserAuthorizationSuccessAccessTokenResponse.cs @@ -7,12 +7,12 @@ namespace DotNetOpenAuth.OAuth2.Messages { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OAuth2.ChannelElements; + using Validation; /// <summary> /// The message sent by the Authorization Server to the Client via the user agent diff --git a/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/Messages/EndUserAuthorizationSuccessAuthCodeResponse.cs b/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/Messages/EndUserAuthorizationSuccessAuthCodeResponse.cs index 9d6b015..9f7c4b1 100644 --- a/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/Messages/EndUserAuthorizationSuccessAuthCodeResponse.cs +++ b/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/Messages/EndUserAuthorizationSuccessAuthCodeResponse.cs @@ -6,10 +6,10 @@ namespace DotNetOpenAuth.OAuth2.Messages { using System; - using System.Diagnostics.Contracts; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OAuth2.ChannelElements; + using Validation; /// <summary> /// The message sent by the Authorization Server to the Client via the user agent diff --git a/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/Messages/EndUserAuthorizationSuccessResponseBase.cs b/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/Messages/EndUserAuthorizationSuccessResponseBase.cs index ef0010e..bf385f9 100644 --- a/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/Messages/EndUserAuthorizationSuccessResponseBase.cs +++ b/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/Messages/EndUserAuthorizationSuccessResponseBase.cs @@ -8,11 +8,11 @@ namespace DotNetOpenAuth.OAuth2.Messages { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Security.Cryptography; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OAuth2.ChannelElements; + using Validation; /// <summary> /// The message sent by the Authorization Server to the Client via the user agent diff --git a/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/TokenEndpointProtocolException.cs b/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/TokenEndpointProtocolException.cs index e86c27e..d18e788 100644 --- a/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/TokenEndpointProtocolException.cs +++ b/src/DotNetOpenAuth.OAuth2.ClientAuthorization/OAuth2/TokenEndpointProtocolException.cs @@ -13,6 +13,7 @@ namespace DotNetOpenAuth.OAuth2 { using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OAuth2.Messages; + using Validation; /// <summary> /// Describes an error generated by an Authorization Server's token endpoint. diff --git a/src/DotNetOpenAuth.OAuth2.ClientAuthorization/Properties/AssemblyInfo.cs b/src/DotNetOpenAuth.OAuth2.ClientAuthorization/Properties/AssemblyInfo.cs index 3d9e231..f4a2303 100644 --- a/src/DotNetOpenAuth.OAuth2.ClientAuthorization/Properties/AssemblyInfo.cs +++ b/src/DotNetOpenAuth.OAuth2.ClientAuthorization/Properties/AssemblyInfo.cs @@ -7,7 +7,6 @@ // We DON'T put an AssemblyVersionAttribute in here because it is generated in the build. using System; -using System.Diagnostics.Contracts; using System.Net; using System.Reflection; using System.Resources; @@ -31,8 +30,6 @@ using System.Web.UI; // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("7d73990c-47c0-4256-9f20-a893add9e289")] -[assembly: ContractVerification(true)] - #if StrongNameSigned // See comment at top of this file. We need this so that strong-naming doesn't // keep this assembly from being useful to shared host (medium trust) web sites. diff --git a/src/DotNetOpenAuth.OAuth2.ClientAuthorization/packages.config b/src/DotNetOpenAuth.OAuth2.ClientAuthorization/packages.config new file mode 100644 index 0000000..10eec89 --- /dev/null +++ b/src/DotNetOpenAuth.OAuth2.ClientAuthorization/packages.config @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="Validation" version="2.0.0.12319" targetFramework="net40" /> +</packages>
\ No newline at end of file diff --git a/src/DotNetOpenAuth.OAuth2.ResourceServer/Configuration/OAuth2ResourceServerSection.cs b/src/DotNetOpenAuth.OAuth2.ResourceServer/Configuration/OAuth2ResourceServerSection.cs index 3e37018..5f6cc3c 100644 --- a/src/DotNetOpenAuth.OAuth2.ResourceServer/Configuration/OAuth2ResourceServerSection.cs +++ b/src/DotNetOpenAuth.OAuth2.ResourceServer/Configuration/OAuth2ResourceServerSection.cs @@ -6,7 +6,6 @@ namespace DotNetOpenAuth.Configuration { using System.Configuration; - using System.Diagnostics.Contracts; /// <summary> /// Represents the <oauth2/resourceServer> section in the host's .config file. @@ -28,7 +27,6 @@ namespace DotNetOpenAuth.Configuration { /// </summary> internal static OAuth2ResourceServerSection Configuration { get { - Contract.Ensures(Contract.Result<OAuth2ResourceServerSection>() != null); return (OAuth2ResourceServerSection)ConfigurationManager.GetSection(SectionName) ?? new OAuth2ResourceServerSection(); } } diff --git a/src/DotNetOpenAuth.OAuth2.ResourceServer/DotNetOpenAuth.OAuth2.ResourceServer.csproj b/src/DotNetOpenAuth.OAuth2.ResourceServer/DotNetOpenAuth.OAuth2.ResourceServer.csproj index eb54fee..c36a789 100644 --- a/src/DotNetOpenAuth.OAuth2.ResourceServer/DotNetOpenAuth.OAuth2.ResourceServer.csproj +++ b/src/DotNetOpenAuth.OAuth2.ResourceServer/DotNetOpenAuth.OAuth2.ResourceServer.csproj @@ -50,6 +50,12 @@ <LastGenOutput>ResourceServerStrings.Designer.cs</LastGenOutput> </EmbeddedResource> </ItemGroup> + <ItemGroup> + <Reference Include="Validation, Version=2.0.0.0, Culture=neutral, PublicKeyToken=2fc06f0d701809a7, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\Validation.2.0.0.12319\lib\portable-windows8+net40+sl5+windowsphone8\Validation.dll</HintPath> + </Reference> + </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(ProjectRoot)tools\DotNetOpenAuth.targets" /> <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))\EnlistmentInfo.targets" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))' != '' " /> diff --git a/src/DotNetOpenAuth.OAuth2.ResourceServer/OAuth2/ChannelElements/OAuth2ResourceServerChannel.cs b/src/DotNetOpenAuth.OAuth2.ResourceServer/OAuth2/ChannelElements/OAuth2ResourceServerChannel.cs index e9d596a..8cf7eeb 100644 --- a/src/DotNetOpenAuth.OAuth2.ResourceServer/OAuth2/ChannelElements/OAuth2ResourceServerChannel.cs +++ b/src/DotNetOpenAuth.OAuth2.ResourceServer/OAuth2/ChannelElements/OAuth2ResourceServerChannel.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.OAuth2.ChannelElements { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Net; using System.Net.Mime; @@ -16,6 +15,7 @@ namespace DotNetOpenAuth.OAuth2.ChannelElements { using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Messaging.Reflection; using DotNetOpenAuth.OAuth2.Messages; + using Validation; /// <summary> /// The channel for the OAuth protocol. diff --git a/src/DotNetOpenAuth.OAuth2.ResourceServer/OAuth2/IAccessTokenAnalyzer.cs b/src/DotNetOpenAuth.OAuth2.ResourceServer/OAuth2/IAccessTokenAnalyzer.cs index 5c5a526..a86b26d 100644 --- a/src/DotNetOpenAuth.OAuth2.ResourceServer/OAuth2/IAccessTokenAnalyzer.cs +++ b/src/DotNetOpenAuth.OAuth2.ResourceServer/OAuth2/IAccessTokenAnalyzer.cs @@ -8,16 +8,15 @@ namespace DotNetOpenAuth.OAuth2 { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// An interface that resource server hosts should implement if they accept access tokens /// issued by non-DotNetOpenAuth authorization servers. /// </summary> - [ContractClass((typeof(IAccessTokenAnalyzerContract)))] public interface IAccessTokenAnalyzer { /// <summary> /// Reads an access token to find out what data it authorizes access to. @@ -28,30 +27,4 @@ namespace DotNetOpenAuth.OAuth2 { /// <exception cref="ProtocolException">Thrown if the access token is expired, invalid, or from an untrusted authorization server.</exception> AccessToken DeserializeAccessToken(IDirectedProtocolMessage message, string accessToken); } - - /// <summary> - /// Code contract for the <see cref="IAccessTokenAnalyzer"/> interface. - /// </summary> - [ContractClassFor(typeof(IAccessTokenAnalyzer))] - internal abstract class IAccessTokenAnalyzerContract : IAccessTokenAnalyzer { - /// <summary> - /// Prevents a default instance of the <see cref="IAccessTokenAnalyzerContract"/> class from being created. - /// </summary> - private IAccessTokenAnalyzerContract() { - } - - /// <summary> - /// Reads an access token to find out what data it authorizes access to. - /// </summary> - /// <param name="message">The message carrying the access token.</param> - /// <param name="accessToken">The access token's serialized representation.</param> - /// <returns>The deserialized, validated token.</returns> - /// <exception cref="ProtocolException">Thrown if the access token is expired, invalid, or from an untrusted authorization server.</exception> - AccessToken IAccessTokenAnalyzer.DeserializeAccessToken(IDirectedProtocolMessage message, string accessToken) { - Requires.NotNull(message, "message"); - Requires.NotNullOrEmpty(accessToken, "accessToken"); - Contract.Ensures(Contract.Result<AccessToken>() != null); - throw new NotImplementedException(); - } - } } diff --git a/src/DotNetOpenAuth.OAuth2.ResourceServer/OAuth2/ResourceServer.cs b/src/DotNetOpenAuth.OAuth2.ResourceServer/OAuth2/ResourceServer.cs index 896588f..540773f 100644 --- a/src/DotNetOpenAuth.OAuth2.ResourceServer/OAuth2/ResourceServer.cs +++ b/src/DotNetOpenAuth.OAuth2.ResourceServer/OAuth2/ResourceServer.cs @@ -8,7 +8,6 @@ namespace DotNetOpenAuth.OAuth2 { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Linq; using System.Net; #if CLR4 @@ -23,6 +22,7 @@ namespace DotNetOpenAuth.OAuth2 { using DotNetOpenAuth.OAuth.ChannelElements; using Messages; using Messaging; + using Validation; /// <summary> /// Provides services for validating OAuth access tokens. @@ -90,7 +90,7 @@ namespace DotNetOpenAuth.OAuth2 { /// </exception> public virtual AccessToken GetAccessToken(HttpRequestBase httpRequestInfo = null, params string[] requiredScopes) { Requires.NotNull(requiredScopes, "requiredScopes"); - Requires.ValidState(this.ScopeSatisfiedCheck != null, Strings.RequiredPropertyNotYetPreset); + RequiresEx.ValidState(this.ScopeSatisfiedCheck != null, Strings.RequiredPropertyNotYetPreset); if (httpRequestInfo == null) { httpRequestInfo = this.Channel.GetRequestFromContext(); } diff --git a/src/DotNetOpenAuth.OAuth2.ResourceServer/OAuth2/StandardAccessTokenAnalyzer.cs b/src/DotNetOpenAuth.OAuth2.ResourceServer/OAuth2/StandardAccessTokenAnalyzer.cs index 62436ec..32f10ba 100644 --- a/src/DotNetOpenAuth.OAuth2.ResourceServer/OAuth2/StandardAccessTokenAnalyzer.cs +++ b/src/DotNetOpenAuth.OAuth2.ResourceServer/OAuth2/StandardAccessTokenAnalyzer.cs @@ -7,11 +7,11 @@ namespace DotNetOpenAuth.OAuth2 { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.IO; using System.Security.Cryptography; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OAuth2.ChannelElements; + using Validation; /// <summary> /// An access token reader that understands DotNetOpenAuth authorization server issued tokens. @@ -24,7 +24,7 @@ namespace DotNetOpenAuth.OAuth2 { /// <param name="resourceServerPrivateEncryptionKey">The crypto service provider with the resource server private encryption key.</param> public StandardAccessTokenAnalyzer(RSACryptoServiceProvider authorizationServerPublicSigningKey, RSACryptoServiceProvider resourceServerPrivateEncryptionKey) { Requires.NotNull(authorizationServerPublicSigningKey, "authorizationServerPublicSigningKey"); - Requires.True(resourceServerPrivateEncryptionKey == null || !resourceServerPrivateEncryptionKey.PublicOnly, "resourceServerPrivateEncryptionKey"); + Requires.That(resourceServerPrivateEncryptionKey == null || !resourceServerPrivateEncryptionKey.PublicOnly, "resourceServerPrivateEncryptionKey", "Private key required when encrypting."); this.AuthorizationServerPublicSigningKey = authorizationServerPublicSigningKey; this.ResourceServerPrivateEncryptionKey = resourceServerPrivateEncryptionKey; } diff --git a/src/DotNetOpenAuth.OAuth2.ResourceServer/Properties/AssemblyInfo.cs b/src/DotNetOpenAuth.OAuth2.ResourceServer/Properties/AssemblyInfo.cs index 397b35d..29900ab 100644 --- a/src/DotNetOpenAuth.OAuth2.ResourceServer/Properties/AssemblyInfo.cs +++ b/src/DotNetOpenAuth.OAuth2.ResourceServer/Properties/AssemblyInfo.cs @@ -7,7 +7,6 @@ // We DON'T put an AssemblyVersionAttribute in here because it is generated in the build. using System; -using System.Diagnostics.Contracts; using System.Net; using System.Reflection; using System.Resources; @@ -31,8 +30,6 @@ using System.Web.UI; // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("7d73990c-47c0-4256-9f20-a893add9e289")] -[assembly: ContractVerification(true)] - #if StrongNameSigned // See comment at top of this file. We need this so that strong-naming doesn't // keep this assembly from being useful to shared host (medium trust) web sites. diff --git a/src/DotNetOpenAuth.OAuth2.ResourceServer/packages.config b/src/DotNetOpenAuth.OAuth2.ResourceServer/packages.config new file mode 100644 index 0000000..67054af --- /dev/null +++ b/src/DotNetOpenAuth.OAuth2.ResourceServer/packages.config @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="Microsoft.IdentityModel" version="6.1.7600.16394" targetFramework="net40" /> +</packages>
\ No newline at end of file diff --git a/src/DotNetOpenAuth.OAuth2/Configuration/OAuth2SectionGroup.cs b/src/DotNetOpenAuth.OAuth2/Configuration/OAuth2SectionGroup.cs index 112e756..09eef2c 100644 --- a/src/DotNetOpenAuth.OAuth2/Configuration/OAuth2SectionGroup.cs +++ b/src/DotNetOpenAuth.OAuth2/Configuration/OAuth2SectionGroup.cs @@ -6,7 +6,6 @@ namespace DotNetOpenAuth.Configuration { using System.Configuration; - using System.Diagnostics.Contracts; /// <summary> /// Represents the <oauth> element in the host's .config file. diff --git a/src/DotNetOpenAuth.OAuth2/DotNetOpenAuth.OAuth2.csproj b/src/DotNetOpenAuth.OAuth2/DotNetOpenAuth.OAuth2.csproj index 696d8a9..b1b1d7f 100644 --- a/src/DotNetOpenAuth.OAuth2/DotNetOpenAuth.OAuth2.csproj +++ b/src/DotNetOpenAuth.OAuth2/DotNetOpenAuth.OAuth2.csproj @@ -43,6 +43,7 @@ </ItemGroup> <ItemGroup> <None Include="OAuth2\OAuth 2 client facades.cd" /> + <None Include="packages.config" /> </ItemGroup> <ItemGroup> <EmbeddedResource Include="OAuth2\OAuthStrings.resx"> @@ -56,6 +57,12 @@ <Name>DotNetOpenAuth.Core</Name> </ProjectReference> </ItemGroup> + <ItemGroup> + <Reference Include="Validation, Version=2.0.0.0, Culture=neutral, PublicKeyToken=2fc06f0d701809a7, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\Validation.2.0.0.12319\lib\portable-windows8+net40+sl5+windowsphone8\Validation.dll</HintPath> + </Reference> + </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(ProjectRoot)tools\DotNetOpenAuth.targets" /> <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))\EnlistmentInfo.targets" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))' != '' " /> diff --git a/src/DotNetOpenAuth.OAuth2/OAuth2/AccessToken.cs b/src/DotNetOpenAuth.OAuth2/OAuth2/AccessToken.cs index 5890d93..449b3ca 100644 --- a/src/DotNetOpenAuth.OAuth2/OAuth2/AccessToken.cs +++ b/src/DotNetOpenAuth.OAuth2/OAuth2/AccessToken.cs @@ -7,11 +7,11 @@ namespace DotNetOpenAuth.OAuth2 { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Security.Cryptography; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Messaging.Bindings; using DotNetOpenAuth.OAuth2.ChannelElements; + using Validation; /// <summary> /// A short-lived token that accompanies HTTP requests to protected data to authorize the request. @@ -51,9 +51,8 @@ namespace DotNetOpenAuth.OAuth2 { /// <param name="encryptingKey">The crypto service provider with the resource server's public key used to encrypt the access token.</param> /// <returns>An access token serializer.</returns> internal static IDataBagFormatter<AccessToken> CreateFormatter(RSACryptoServiceProvider signingKey, RSACryptoServiceProvider encryptingKey) { - Contract.Requires(signingKey != null || !signingKey.PublicOnly); - Contract.Requires(encryptingKey != null); - Contract.Ensures(Contract.Result<IDataBagFormatter<AccessToken>>() != null); + Requires.That(signingKey == null || !signingKey.PublicOnly, "signingKey", "requires private key"); + Requires.NotNull(encryptingKey, "encryptingKey"); return new UriStyleMessageFormatter<AccessToken>(signingKey, encryptingKey); } @@ -94,7 +93,6 @@ namespace DotNetOpenAuth.OAuth2 { /// </summary> /// <returns>A non-empty string.</returns> protected internal virtual string Serialize() { - Contract.Ensures(!string.IsNullOrEmpty(Contract.Result<string>())); throw new NotSupportedException(); } diff --git a/src/DotNetOpenAuth.OAuth2/OAuth2/ChannelElements/IAuthorizationDescription.cs b/src/DotNetOpenAuth.OAuth2/OAuth2/ChannelElements/IAuthorizationDescription.cs index 1ad0422..949fc94 100644 --- a/src/DotNetOpenAuth.OAuth2/OAuth2/ChannelElements/IAuthorizationDescription.cs +++ b/src/DotNetOpenAuth.OAuth2/OAuth2/ChannelElements/IAuthorizationDescription.cs @@ -7,14 +7,12 @@ namespace DotNetOpenAuth.OAuth2.ChannelElements { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; /// <summary> /// Describes a delegated authorization between a resource server, a client, and a user. /// </summary> - [ContractClass(typeof(IAuthorizationDescriptionContract))] public interface IAuthorizationDescription { /// <summary> /// Gets the identifier of the client authorized to access protected data. @@ -37,56 +35,4 @@ namespace DotNetOpenAuth.OAuth2.ChannelElements { /// </summary> HashSet<string> Scope { get; } } - - /// <summary> - /// Code contract for the <see cref="IAuthorizationDescription"/> interface. - /// </summary> - [ContractClassFor(typeof(IAuthorizationDescription))] - internal abstract class IAuthorizationDescriptionContract : IAuthorizationDescription { - /// <summary> - /// Prevents a default instance of the <see cref="IAuthorizationDescriptionContract"/> class from being created. - /// </summary> - private IAuthorizationDescriptionContract() { - } - - /// <summary> - /// Gets the identifier of the client authorized to access protected data. - /// </summary> - string IAuthorizationDescription.ClientIdentifier { - get { - Contract.Ensures(!string.IsNullOrEmpty(Contract.Result<string>())); - throw new NotImplementedException(); - } - } - - /// <summary> - /// Gets the date this authorization was established or the token was issued. - /// </summary> - /// <value>A date/time expressed in UTC.</value> - DateTime IAuthorizationDescription.UtcIssued { - get { throw new NotImplementedException(); } - } - - /// <summary> - /// Gets the name on the account whose data on the resource server is accessible using this authorization, if applicable. - /// </summary> - /// <value>A username, or <c>null</c> if the authorization is to access the client's own data (not a distinct resource owner's data).</value> - string IAuthorizationDescription.User { - get { - // Null and non-empty are allowed, but not empty. - Contract.Ensures(Contract.Result<string>() != string.Empty); - throw new NotImplementedException(); - } - } - - /// <summary> - /// Gets the scope of operations the client is allowed to invoke. - /// </summary> - HashSet<string> IAuthorizationDescription.Scope { - get { - Contract.Ensures(Contract.Result<HashSet<string>>() != null); - throw new NotImplementedException(); - } - } - } } diff --git a/src/DotNetOpenAuth.OAuth2/OAuth2/Messages/MessageBase.cs b/src/DotNetOpenAuth.OAuth2/OAuth2/Messages/MessageBase.cs index e966376..272b690 100644 --- a/src/DotNetOpenAuth.OAuth2/OAuth2/Messages/MessageBase.cs +++ b/src/DotNetOpenAuth.OAuth2/OAuth2/Messages/MessageBase.cs @@ -8,8 +8,8 @@ namespace DotNetOpenAuth.OAuth2.Messages { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// A common message base class for OAuth messages. diff --git a/src/DotNetOpenAuth.OAuth2/OAuth2/Messages/UnauthorizedResponse.cs b/src/DotNetOpenAuth.OAuth2/OAuth2/Messages/UnauthorizedResponse.cs index e4a8a48..d90d1b5 100644 --- a/src/DotNetOpenAuth.OAuth2/OAuth2/Messages/UnauthorizedResponse.cs +++ b/src/DotNetOpenAuth.OAuth2/OAuth2/Messages/UnauthorizedResponse.cs @@ -7,12 +7,12 @@ namespace DotNetOpenAuth.OAuth2.Messages { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Globalization; using System.Net; using System.Text; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OAuth2.ChannelElements; + using Validation; /// <summary> /// A direct response sent in response to a rejected Bearer access token. diff --git a/src/DotNetOpenAuth.OAuth2/OAuth2/OAuthUtilities.cs b/src/DotNetOpenAuth.OAuth2/OAuth2/OAuthUtilities.cs index f28518f..f2acf79 100644 --- a/src/DotNetOpenAuth.OAuth2/OAuth2/OAuthUtilities.cs +++ b/src/DotNetOpenAuth.OAuth2/OAuth2/OAuthUtilities.cs @@ -7,12 +7,12 @@ namespace DotNetOpenAuth.OAuth2 { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Globalization; using System.Linq; using System.Net; using System.Text; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// Some common utility methods for OAuth 2.0. diff --git a/src/DotNetOpenAuth.OAuth2/OAuth2/StandardScopeSatisfiedCheck.cs b/src/DotNetOpenAuth.OAuth2/OAuth2/StandardScopeSatisfiedCheck.cs index 684e4a8..5fe0226 100644 --- a/src/DotNetOpenAuth.OAuth2/OAuth2/StandardScopeSatisfiedCheck.cs +++ b/src/DotNetOpenAuth.OAuth2/OAuth2/StandardScopeSatisfiedCheck.cs @@ -6,6 +6,7 @@ namespace DotNetOpenAuth.OAuth2 { using System.Collections.Generic; + using Validation; /// <summary> /// The default scope superset checker, which assumes that no scopes overlap. diff --git a/src/DotNetOpenAuth.OAuth2/Properties/AssemblyInfo.cs b/src/DotNetOpenAuth.OAuth2/Properties/AssemblyInfo.cs index d89d8c1..df59ca5 100644 --- a/src/DotNetOpenAuth.OAuth2/Properties/AssemblyInfo.cs +++ b/src/DotNetOpenAuth.OAuth2/Properties/AssemblyInfo.cs @@ -7,7 +7,6 @@ // We DON'T put an AssemblyVersionAttribute in here because it is generated in the build. using System; -using System.Diagnostics.Contracts; using System.Net; using System.Reflection; using System.Resources; @@ -31,8 +30,6 @@ using System.Web.UI; // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("7d73990c-47c0-4256-9f20-a893add9e289")] -[assembly: ContractVerification(true)] - #if StrongNameSigned // See comment at top of this file. We need this so that strong-naming doesn't // keep this assembly from being useful to shared host (medium trust) web sites. diff --git a/src/DotNetOpenAuth.OAuth2/packages.config b/src/DotNetOpenAuth.OAuth2/packages.config new file mode 100644 index 0000000..10eec89 --- /dev/null +++ b/src/DotNetOpenAuth.OAuth2/packages.config @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="Validation" version="2.0.0.12319" targetFramework="net40" /> +</packages>
\ No newline at end of file diff --git a/src/DotNetOpenAuth.OpenId.Provider.UI/DotNetOpenAuth.OpenId.Provider.UI.csproj b/src/DotNetOpenAuth.OpenId.Provider.UI/DotNetOpenAuth.OpenId.Provider.UI.csproj index aede485..4bac4bb 100644 --- a/src/DotNetOpenAuth.OpenId.Provider.UI/DotNetOpenAuth.OpenId.Provider.UI.csproj +++ b/src/DotNetOpenAuth.OpenId.Provider.UI/DotNetOpenAuth.OpenId.Provider.UI.csproj @@ -51,8 +51,14 @@ </ItemGroup> <ItemGroup> <Reference Include="System" /> + <Reference Include="Validation, Version=2.0.0.0, Culture=neutral, PublicKeyToken=2fc06f0d701809a7, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\Validation.2.0.0.12319\lib\portable-windows8+net40+sl5+windowsphone8\Validation.dll</HintPath> + </Reference> + </ItemGroup> + <ItemGroup> + <None Include="packages.config" /> </ItemGroup> - <ItemGroup /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(ProjectRoot)tools\DotNetOpenAuth.targets" /> <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))\EnlistmentInfo.targets" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))' != '' " /> diff --git a/src/DotNetOpenAuth.OpenId.Provider.UI/OpenId/Provider/AnonymousRequestEventArgs.cs b/src/DotNetOpenAuth.OpenId.Provider.UI/OpenId/Provider/AnonymousRequestEventArgs.cs index 8b59912..dbee07a 100644 --- a/src/DotNetOpenAuth.OpenId.Provider.UI/OpenId/Provider/AnonymousRequestEventArgs.cs +++ b/src/DotNetOpenAuth.OpenId.Provider.UI/OpenId/Provider/AnonymousRequestEventArgs.cs @@ -6,8 +6,8 @@ namespace DotNetOpenAuth.OpenId.Provider { using System; - using System.Diagnostics.Contracts; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// The event arguments that include details of the incoming request. diff --git a/src/DotNetOpenAuth.OpenId.Provider.UI/OpenId/Provider/ProviderEndpoint.cs b/src/DotNetOpenAuth.OpenId.Provider.UI/OpenId/Provider/ProviderEndpoint.cs index bff8097..a29f6e3 100644 --- a/src/DotNetOpenAuth.OpenId.Provider.UI/OpenId/Provider/ProviderEndpoint.cs +++ b/src/DotNetOpenAuth.OpenId.Provider.UI/OpenId/Provider/ProviderEndpoint.cs @@ -8,7 +8,6 @@ namespace DotNetOpenAuth.OpenId.Provider { using System; using System.Collections.Generic; using System.ComponentModel; - using System.Diagnostics.Contracts; using System.Text; using System.Web; using System.Web.UI; @@ -16,6 +15,7 @@ namespace DotNetOpenAuth.OpenId.Provider { using DotNetOpenAuth.Configuration; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Messages; + using Validation; /// <summary> /// An OpenID Provider control that automatically responds to certain @@ -69,7 +69,6 @@ namespace DotNetOpenAuth.OpenId.Provider { /// <value>The default value is an <see cref="OpenIdProvider"/> instance initialized according to the web.config file.</value> public static OpenIdProvider Provider { get { - Contract.Ensures(Contract.Result<OpenIdProvider>() != null); if (provider == null) { lock (providerInitializerLock) { if (provider == null) { @@ -98,15 +97,14 @@ namespace DotNetOpenAuth.OpenId.Provider { /// </remarks> public static IAuthenticationRequest PendingAuthenticationRequest { get { - Requires.ValidState(HttpContext.Current != null, MessagingStrings.HttpContextRequired); - Requires.ValidState(HttpContext.Current.Session != null, MessagingStrings.SessionRequired); - Contract.Ensures(Contract.Result<IAuthenticationRequest>() == null || PendingRequest != null); + RequiresEx.ValidState(HttpContext.Current != null, MessagingStrings.HttpContextRequired); + RequiresEx.ValidState(HttpContext.Current.Session != null, MessagingStrings.SessionRequired); return HttpContext.Current.Session[PendingRequestKey] as IAuthenticationRequest; } set { - Requires.ValidState(HttpContext.Current != null, MessagingStrings.HttpContextRequired); - Requires.ValidState(HttpContext.Current.Session != null, MessagingStrings.SessionRequired); + RequiresEx.ValidState(HttpContext.Current != null, MessagingStrings.HttpContextRequired); + RequiresEx.ValidState(HttpContext.Current.Session != null, MessagingStrings.SessionRequired); HttpContext.Current.Session[PendingRequestKey] = value; } } @@ -122,15 +120,14 @@ namespace DotNetOpenAuth.OpenId.Provider { /// </remarks> public static IAnonymousRequest PendingAnonymousRequest { get { - Requires.ValidState(HttpContext.Current != null, MessagingStrings.HttpContextRequired); - Requires.ValidState(HttpContext.Current.Session != null, MessagingStrings.SessionRequired); - Contract.Ensures(Contract.Result<IAnonymousRequest>() == null || PendingRequest != null); + RequiresEx.ValidState(HttpContext.Current != null, MessagingStrings.HttpContextRequired); + RequiresEx.ValidState(HttpContext.Current.Session != null, MessagingStrings.SessionRequired); return HttpContext.Current.Session[PendingRequestKey] as IAnonymousRequest; } set { - Requires.ValidState(HttpContext.Current != null, MessagingStrings.HttpContextRequired); - Requires.ValidState(HttpContext.Current.Session != null, MessagingStrings.SessionRequired); + RequiresEx.ValidState(HttpContext.Current != null, MessagingStrings.HttpContextRequired); + RequiresEx.ValidState(HttpContext.Current.Session != null, MessagingStrings.SessionRequired); HttpContext.Current.Session[PendingRequestKey] = value; } } @@ -146,14 +143,14 @@ namespace DotNetOpenAuth.OpenId.Provider { /// </remarks> public static IHostProcessedRequest PendingRequest { get { - Requires.ValidState(HttpContext.Current != null, MessagingStrings.HttpContextRequired); - Requires.ValidState(HttpContext.Current.Session != null, MessagingStrings.SessionRequired); + RequiresEx.ValidState(HttpContext.Current != null, MessagingStrings.HttpContextRequired); + RequiresEx.ValidState(HttpContext.Current.Session != null, MessagingStrings.SessionRequired); return HttpContext.Current.Session[PendingRequestKey] as IHostProcessedRequest; } set { - Requires.ValidState(HttpContext.Current != null, MessagingStrings.HttpContextRequired); - Requires.ValidState(HttpContext.Current.Session != null, MessagingStrings.SessionRequired); + RequiresEx.ValidState(HttpContext.Current != null, MessagingStrings.HttpContextRequired); + RequiresEx.ValidState(HttpContext.Current.Session != null, MessagingStrings.SessionRequired); HttpContext.Current.Session[PendingRequestKey] = value; } } @@ -260,7 +257,6 @@ namespace DotNetOpenAuth.OpenId.Provider { /// </summary> /// <returns>The new instance of OpenIdProvider.</returns> private static OpenIdProvider CreateProvider() { - Contract.Ensures(Contract.Result<OpenIdProvider>() != null); return new OpenIdProvider(OpenIdElement.Configuration.Provider.ApplicationStore.CreateInstance(OpenIdProvider.HttpApplicationStore)); } } diff --git a/src/DotNetOpenAuth.OpenId.Provider.UI/Properties/AssemblyInfo.cs b/src/DotNetOpenAuth.OpenId.Provider.UI/Properties/AssemblyInfo.cs index f05fec0..c7df904 100644 --- a/src/DotNetOpenAuth.OpenId.Provider.UI/Properties/AssemblyInfo.cs +++ b/src/DotNetOpenAuth.OpenId.Provider.UI/Properties/AssemblyInfo.cs @@ -7,7 +7,6 @@ // We DON'T put an AssemblyVersionAttribute in here because it is generated in the build. using System; -using System.Diagnostics.Contracts; using System.Net; using System.Reflection; using System.Resources; @@ -33,8 +32,6 @@ using System.Web.UI; // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("7d73990c-47c0-4256-9f20-a893add9e289")] -[assembly: ContractVerification(true)] - #if StrongNameSigned // See comment at top of this file. We need this so that strong-naming doesn't // keep this assembly from being useful to shared host (medium trust) web sites. diff --git a/src/DotNetOpenAuth.OpenId.Provider.UI/packages.config b/src/DotNetOpenAuth.OpenId.Provider.UI/packages.config new file mode 100644 index 0000000..10eec89 --- /dev/null +++ b/src/DotNetOpenAuth.OpenId.Provider.UI/packages.config @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="Validation" version="2.0.0.12319" targetFramework="net40" /> +</packages>
\ No newline at end of file diff --git a/src/DotNetOpenAuth.OpenId.Provider/DotNetOpenAuth.OpenId.Provider.csproj b/src/DotNetOpenAuth.OpenId.Provider/DotNetOpenAuth.OpenId.Provider.csproj index 524415f..d9fd749 100644 --- a/src/DotNetOpenAuth.OpenId.Provider/DotNetOpenAuth.OpenId.Provider.csproj +++ b/src/DotNetOpenAuth.OpenId.Provider/DotNetOpenAuth.OpenId.Provider.csproj @@ -35,7 +35,6 @@ <Compile Include="OpenId\Messages\IAssociateRequestProvider.cs" /> <Compile Include="OpenId\Messages\AssociateRequestProviderTools.cs" /> <Compile Include="OpenId\Messages\IAssociateSuccessfulResponseProvider.cs" /> - <Compile Include="OpenId\Messages\IAssociateSuccessfulResponseProviderContract.cs" /> <Compile Include="OpenId\Messages\AssociateUnencryptedResponseProvider.cs" /> <Compile Include="OpenId\Messages\CheckAuthenticationResponseProvider.cs" /> <Compile Include="OpenId\Provider\OpenIdProviderUtilities.cs" /> @@ -53,7 +52,6 @@ <Compile Include="OpenId\Provider\IDirectedIdentityIdentifierProvider.cs" /> <Compile Include="OpenId\Provider\IErrorReporting.cs" /> <Compile Include="OpenId\Provider\Request.cs" /> - <Compile Include="OpenId\Provider\RequestContract.cs" /> <Compile Include="OpenId\Provider\StandardProviderApplicationStore.cs" /> <Compile Include="OpenId\Provider\OpenIdProvider.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> @@ -67,17 +65,24 @@ <Project>{3896A32A-E876-4C23-B9B8-78E17D134CD3}</Project> <Name>DotNetOpenAuth.OpenId</Name> </ProjectReference> - <ProjectReference Include="..\Org.Mentalis.Security.Cryptography\Org.Mentalis.Security.Cryptography.csproj" > + <ProjectReference Include="..\Org.Mentalis.Security.Cryptography\Org.Mentalis.Security.Cryptography.csproj"> <Project>{26DC877F-5987-48DD-9DDB-E62F2DE0E150}</Project> <Name>Org.Mentalis.Security.Cryptography</Name> </ProjectReference> </ItemGroup> <ItemGroup> <Reference Include="System" /> + <Reference Include="Validation, Version=2.0.0.0, Culture=neutral, PublicKeyToken=2fc06f0d701809a7, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\Validation.2.0.0.12319\lib\portable-windows8+net40+sl5+windowsphone8\Validation.dll</HintPath> + </Reference> </ItemGroup> <ItemGroup> <Folder Include="Configuration\" /> </ItemGroup> + <ItemGroup> + <None Include="packages.config" /> + </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(ProjectRoot)tools\DotNetOpenAuth.targets" /> <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))\EnlistmentInfo.targets" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))' != '' " /> diff --git a/src/DotNetOpenAuth.OpenId.Provider/OpenId/ChannelElements/OpenIdProviderChannel.cs b/src/DotNetOpenAuth.OpenId.Provider/OpenId/ChannelElements/OpenIdProviderChannel.cs index c18bcac..45a69a5 100644 --- a/src/DotNetOpenAuth.OpenId.Provider/OpenId/ChannelElements/OpenIdProviderChannel.cs +++ b/src/DotNetOpenAuth.OpenId.Provider/OpenId/ChannelElements/OpenIdProviderChannel.cs @@ -7,13 +7,13 @@ namespace DotNetOpenAuth.OpenId.ChannelElements { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Messaging.Bindings; using DotNetOpenAuth.OpenId.Extensions; using DotNetOpenAuth.OpenId.Provider; + using Validation; /// <summary> /// The messaging channel for OpenID Providers. diff --git a/src/DotNetOpenAuth.OpenId.Provider/OpenId/ChannelElements/ProviderSigningBindingElement.cs b/src/DotNetOpenAuth.OpenId.Provider/OpenId/ChannelElements/ProviderSigningBindingElement.cs index 93d86d2..fbbf37a 100644 --- a/src/DotNetOpenAuth.OpenId.Provider/OpenId/ChannelElements/ProviderSigningBindingElement.cs +++ b/src/DotNetOpenAuth.OpenId.Provider/OpenId/ChannelElements/ProviderSigningBindingElement.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.OpenId.ChannelElements { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using System.Web; @@ -16,6 +15,7 @@ namespace DotNetOpenAuth.OpenId.ChannelElements { using DotNetOpenAuth.Messaging.Reflection; using DotNetOpenAuth.OpenId.Messages; using DotNetOpenAuth.OpenId.Provider; + using Validation; /// <summary> /// The signing binding element for OpenID Providers. @@ -217,7 +217,7 @@ namespace DotNetOpenAuth.OpenId.ChannelElements { /// the inclusion and order of message parts that will be signed. /// </returns> private string GetSignedParameterOrder(ITamperResistantOpenIdMessage signedMessage) { - Requires.ValidState(this.Channel != null); + RequiresEx.ValidState(this.Channel != null); Requires.NotNull(signedMessage, "signedMessage"); Protocol protocol = Protocol.Lookup(signedMessage.Version); diff --git a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Messages/AssociateDiffieHellmanProviderResponse.cs b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Messages/AssociateDiffieHellmanProviderResponse.cs index c7e0ad9..ebcb534 100644 --- a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Messages/AssociateDiffieHellmanProviderResponse.cs +++ b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Messages/AssociateDiffieHellmanProviderResponse.cs @@ -6,7 +6,6 @@ namespace DotNetOpenAuth.OpenId.Messages { using System; - using System.Diagnostics.Contracts; using System.Security.Cryptography; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Messaging.Reflection; diff --git a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Messages/AssociateRequestProviderTools.cs b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Messages/AssociateRequestProviderTools.cs index 0fb5e98..a03c93f 100644 --- a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Messages/AssociateRequestProviderTools.cs +++ b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Messages/AssociateRequestProviderTools.cs @@ -7,11 +7,11 @@ namespace DotNetOpenAuth.OpenId.Messages { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Provider; + using Validation; /// <summary> /// OpenID Provider tools for receiving association requests. diff --git a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Messages/CheckAuthenticationResponseProvider.cs b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Messages/CheckAuthenticationResponseProvider.cs index c187d5e..f69de5e 100644 --- a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Messages/CheckAuthenticationResponseProvider.cs +++ b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Messages/CheckAuthenticationResponseProvider.cs @@ -7,11 +7,11 @@ namespace DotNetOpenAuth.OpenId.Messages { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.OpenId.ChannelElements; using DotNetOpenAuth.OpenId.Provider; + using Validation; /// <summary> /// The check_auth response message, as it is seen by the OpenID Provider. diff --git a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Messages/IAssociateSuccessfulResponseProvider.cs b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Messages/IAssociateSuccessfulResponseProvider.cs index 070f235..df02a2c 100644 --- a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Messages/IAssociateSuccessfulResponseProvider.cs +++ b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Messages/IAssociateSuccessfulResponseProvider.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.OpenId.Messages { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; @@ -16,7 +15,6 @@ namespace DotNetOpenAuth.OpenId.Messages { /// <summary> /// An outgoing successful association response from the OpenID Provider. /// </summary> - [ContractClass(typeof(IAssociateSuccessfulResponseProviderContract))] internal interface IAssociateSuccessfulResponseProvider : IProtocolMessage { /// <summary> /// Gets or sets the expires in. diff --git a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Messages/IAssociateSuccessfulResponseProviderContract.cs b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Messages/IAssociateSuccessfulResponseProviderContract.cs deleted file mode 100644 index 6788a84..0000000 --- a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Messages/IAssociateSuccessfulResponseProviderContract.cs +++ /dev/null @@ -1,96 +0,0 @@ -//----------------------------------------------------------------------- -// <copyright file="IAssociateSuccessfulResponseProviderContract.cs" company="Outercurve Foundation"> -// Copyright (c) Outercurve Foundation. All rights reserved. -// </copyright> -//----------------------------------------------------------------------- - -namespace DotNetOpenAuth.OpenId.Messages { - using System; - using System.Collections.Generic; - using System.Diagnostics.Contracts; - using System.Linq; - using System.Text; - using DotNetOpenAuth.Messaging; - using DotNetOpenAuth.OpenId.Provider; - - /// <summary> - /// Code contract for the <see cref="IAssociateSuccessfulResponseProvider"/> interface. - /// </summary> - [ContractClassFor(typeof(IAssociateSuccessfulResponseProvider))] - internal abstract class IAssociateSuccessfulResponseProviderContract : IAssociateSuccessfulResponseProvider { - /// <summary> - /// Gets or sets the expires in. - /// </summary> - /// <value> - /// The expires in. - /// </value> - long IAssociateSuccessfulResponseProvider.ExpiresIn { - get { throw new NotImplementedException(); } - set { throw new NotImplementedException(); } - } - - /// <summary> - /// Gets or sets the association handle. - /// </summary> - /// <value> - /// The association handle. - /// </value> - string IAssociateSuccessfulResponseProvider.AssociationHandle { - get { throw new NotImplementedException(); } - set { throw new NotImplementedException(); } - } - - /// <summary> - /// Gets the level of protection this message requires. - /// </summary> - Messaging.MessageProtections Messaging.IProtocolMessage.RequiredProtection { - get { throw new NotImplementedException(); } - } - - /// <summary> - /// Gets a value indicating whether this is a direct or indirect message. - /// </summary> - Messaging.MessageTransport Messaging.IProtocolMessage.Transport { - get { throw new NotImplementedException(); } - } - - /// <summary> - /// Gets the version of the protocol or extension this message is prepared to implement. - /// </summary> - Version Messaging.IMessage.Version { - get { throw new NotImplementedException(); } - } - - /// <summary> - /// Gets the extra, non-standard Protocol parameters included in the message. - /// </summary> - IDictionary<string, string> Messaging.IMessage.ExtraData { - get { throw new NotImplementedException(); } - } - - /// <summary> - /// Called to create the Association based on a request previously given by the Relying Party. - /// </summary> - /// <param name="request">The prior request for an association.</param> - /// <param name="associationStore">The Provider's association store.</param> - /// <param name="securitySettings">The security settings of the Provider.</param> - /// <returns> - /// The created association. - /// </returns> - Association IAssociateSuccessfulResponseProvider.CreateAssociationAtProvider(AssociateRequest request, IProviderAssociationStore associationStore, ProviderSecuritySettings securitySettings) { - Requires.NotNull(request, "request"); - Requires.NotNull(associationStore, "associationStore"); - Requires.NotNull(securitySettings, "securitySettings"); - throw new NotImplementedException(); - } - - /// <summary> - /// Checks the message state for conformity to the protocol specification - /// and throws an exception if the message is invalid. - /// </summary> - /// <exception cref="ProtocolException">Thrown if the message is invalid.</exception> - void Messaging.IMessage.EnsureValidMessage() { - throw new NotImplementedException(); - } - } -} diff --git a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/AnonymousRequest.cs b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/AnonymousRequest.cs index f156b9a..9d73d9a 100644 --- a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/AnonymousRequest.cs +++ b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/AnonymousRequest.cs @@ -7,9 +7,9 @@ namespace DotNetOpenAuth.OpenId.Provider { using System; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Messages; + using Validation; /// <summary> /// Provides access to a host Provider to read an incoming extension-only checkid request message, @@ -31,7 +31,7 @@ namespace DotNetOpenAuth.OpenId.Provider { internal AnonymousRequest(OpenIdProvider provider, SignedResponseRequest request) : base(provider, request) { Requires.NotNull(provider, "provider"); - Requires.True(!(request is CheckIdRequest), "request"); + Requires.That(!(request is CheckIdRequest), "request", "request cannot be CheckIdRequest"); this.positiveResponse = new IndirectSignedResponse(request); } diff --git a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/AssociationDataBag.cs b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/AssociationDataBag.cs index f619b76..350ed5f 100644 --- a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/AssociationDataBag.cs +++ b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/AssociationDataBag.cs @@ -7,12 +7,12 @@ namespace DotNetOpenAuth.OpenId.Provider { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.IO; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Messaging.Bindings; + using Validation; /// <summary> /// A signed and encrypted serialization of an association. @@ -58,6 +58,9 @@ namespace DotNetOpenAuth.OpenId.Provider { /// </summary> /// <param name="stream">The stream.</param> public void Serialize(Stream stream) { + Requires.NotNull(stream, "stream"); + Requires.That(stream.CanWrite, "stream", "requires stream.CanWrite"); + var writer = new BinaryWriter(stream); writer.Write(this.IsPrivateAssociation); writer.WriteBuffer(this.Secret); @@ -70,6 +73,9 @@ namespace DotNetOpenAuth.OpenId.Provider { /// </summary> /// <param name="stream">The stream.</param> public void Deserialize(Stream stream) { + Requires.NotNull(stream, "stream"); + Requires.That(stream.CanRead, "stream", "requires stream.CanRead"); + var reader = new BinaryReader(stream); this.IsPrivateAssociation = reader.ReadBoolean(); this.Secret = reader.ReadBuffer(256); @@ -88,7 +94,6 @@ namespace DotNetOpenAuth.OpenId.Provider { internal static IDataBagFormatter<AssociationDataBag> CreateFormatter(ICryptoKeyStore cryptoKeyStore, string bucket, TimeSpan? minimumAge = null) { Requires.NotNull(cryptoKeyStore, "cryptoKeyStore"); Requires.NotNullOrEmpty(bucket, "bucket"); - Contract.Ensures(Contract.Result<IDataBagFormatter<AssociationDataBag>>() != null); return new BinaryDataBagFormatter<AssociationDataBag>(cryptoKeyStore, bucket, signed: true, encrypted: true, minimumAge: minimumAge); } } diff --git a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/AuthenticationRequest.cs b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/AuthenticationRequest.cs index e88af8a..0167580 100644 --- a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/AuthenticationRequest.cs +++ b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/AuthenticationRequest.cs @@ -6,9 +6,9 @@ namespace DotNetOpenAuth.OpenId.Provider { using System; - using System.Diagnostics.Contracts; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Messages; + using Validation; /// <summary> /// Implements the <see cref="IAuthenticationRequest"/> interface diff --git a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/AutoResponsiveRequest.cs b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/AutoResponsiveRequest.cs index 661d719..91bb6f3 100644 --- a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/AutoResponsiveRequest.cs +++ b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/AutoResponsiveRequest.cs @@ -7,11 +7,11 @@ namespace DotNetOpenAuth.OpenId.Provider { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Messages; + using Validation; /// <summary> /// Handles messages coming into an OpenID Provider for which the entire diff --git a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/Behaviors/GsaIcamProfile.cs b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/Behaviors/GsaIcamProfile.cs index feb56eb..e12ca39 100644 --- a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/Behaviors/GsaIcamProfile.cs +++ b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/Behaviors/GsaIcamProfile.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.OpenId.Provider.Behaviors { using System; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Linq; using DotNetOpenAuth.Configuration; using DotNetOpenAuth.Messaging; @@ -17,6 +16,7 @@ namespace DotNetOpenAuth.OpenId.Provider.Behaviors { using DotNetOpenAuth.OpenId.Extensions.SimpleRegistration; using DotNetOpenAuth.OpenId.Provider; using DotNetOpenAuth.OpenId.RelyingParty; + using Validation; /// <summary> /// Implements the Identity, Credential, & Access Management (ICAM) OpenID 2.0 Profile @@ -182,8 +182,8 @@ namespace DotNetOpenAuth.OpenId.Provider.Behaviors { /// <param name="maximumLifetime">The maximum lifetime.</param> /// <param name="securitySettings">The security settings to adjust.</param> private static void SetMaximumAssociationLifetimeToNotExceed(string associationType, TimeSpan maximumLifetime, ProviderSecuritySettings securitySettings) { - Contract.Requires(!string.IsNullOrEmpty(associationType)); - Contract.Requires(maximumLifetime.TotalSeconds > 0); + Requires.NotNullOrEmpty(associationType, "associationType"); + Requires.That(maximumLifetime.TotalSeconds > 0, "maximumLifetime", "requires positive timespan"); if (!securitySettings.AssociationLifetimes.ContainsKey(associationType) || securitySettings.AssociationLifetimes[associationType] > maximumLifetime) { securitySettings.AssociationLifetimes[associationType] = maximumLifetime; diff --git a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/Behaviors/PpidGeneration.cs b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/Behaviors/PpidGeneration.cs index 9b914d0..c8bdd93 100644 --- a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/Behaviors/PpidGeneration.cs +++ b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/Behaviors/PpidGeneration.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.OpenId.Provider.Behaviors { using System; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Linq; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Behaviors; diff --git a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/Extensions/ExtensionsInteropHelper.cs b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/Extensions/ExtensionsInteropHelper.cs index 946d354..d4332d2 100644 --- a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/Extensions/ExtensionsInteropHelper.cs +++ b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/Extensions/ExtensionsInteropHelper.cs @@ -8,13 +8,13 @@ namespace DotNetOpenAuth.OpenId.Provider.Extensions { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Linq; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Extensions; using DotNetOpenAuth.OpenId.Extensions.AttributeExchange; using DotNetOpenAuth.OpenId.Extensions.SimpleRegistration; using DotNetOpenAuth.OpenId.Messages; + using Validation; /// <summary> /// A set of methods designed to assist in improving interop across different diff --git a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/Extensions/UI/UIRequestTools.cs b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/Extensions/UI/UIRequestTools.cs index c5ede8c..278ad6c 100644 --- a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/Extensions/UI/UIRequestTools.cs +++ b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/Extensions/UI/UIRequestTools.cs @@ -8,7 +8,6 @@ namespace DotNetOpenAuth.OpenId.Provider.Extensions.UI { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Globalization; using System.Linq; using DotNetOpenAuth.Messaging; @@ -16,6 +15,7 @@ namespace DotNetOpenAuth.OpenId.Provider.Extensions.UI { using DotNetOpenAuth.OpenId.Messages; using DotNetOpenAuth.OpenId.Provider; using DotNetOpenAuth.Xrds; + using Validation; /// <summary> /// OpenID User Interface extension 1.0 request message. @@ -52,8 +52,8 @@ namespace DotNetOpenAuth.OpenId.Provider.Extensions.UI { /// </example> /// </remarks> public static IEnumerable<Uri> GetRelyingPartyIconUrls(Realm realm, IDirectWebRequestHandler webRequestHandler) { - Contract.Requires(realm != null); - Contract.Requires(webRequestHandler != null); + Requires.NotNull(realm, "realm"); + Requires.NotNull(webRequestHandler, "webRequestHandler"); ErrorUtilities.VerifyArgumentNotNull(realm, "realm"); ErrorUtilities.VerifyArgumentNotNull(webRequestHandler, "webRequestHandler"); diff --git a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/HmacShaAssociationProvider.cs b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/HmacShaAssociationProvider.cs index bdf3e9b..8c4011b 100644 --- a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/HmacShaAssociationProvider.cs +++ b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/HmacShaAssociationProvider.cs @@ -7,11 +7,11 @@ namespace DotNetOpenAuth.OpenId.Provider { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Provider; + using Validation; /// <summary> /// OpenID Provider utility methods for HMAC-SHA* associations. @@ -43,7 +43,6 @@ namespace DotNetOpenAuth.OpenId.Provider { Requires.NotNullOrEmpty(associationType, "associationType"); Requires.NotNull(associationStore, "associationStore"); Requires.NotNull(securitySettings, "securitySettings"); - Contract.Ensures(Contract.Result<HmacShaAssociation>() != null); int secretLength = HmacShaAssociation.GetSecretLength(protocol, associationType); @@ -61,9 +60,9 @@ namespace DotNetOpenAuth.OpenId.Provider { string handle = associationStore.Serialize(secret, DateTime.UtcNow + lifetime, associationUse == AssociationRelyingPartyType.Dumb); - Contract.Assert(protocol != null); // All the way up to the method call, the condition holds, yet we get a Requires failure next - Contract.Assert(secret != null); - Contract.Assert(!string.IsNullOrEmpty(associationType)); + Assumes.True(protocol != null); // All the way up to the method call, the condition holds, yet we get a Requires failure next + Assumes.True(secret != null); + Assumes.True(!string.IsNullOrEmpty(associationType)); var result = HmacShaAssociation.Create(protocol, associationType, handle, secret, lifetime); return result; } diff --git a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/HostProcessedRequest.cs b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/HostProcessedRequest.cs index 67ecdb2..9c5004c 100644 --- a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/HostProcessedRequest.cs +++ b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/HostProcessedRequest.cs @@ -7,12 +7,12 @@ namespace DotNetOpenAuth.OpenId.Provider { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Net; using System.Text; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Messages; + using Validation; /// <summary> /// A base class from which identity and non-identity RP requests can derive. diff --git a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/IDirectedIdentityIdentifierProvider.cs b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/IDirectedIdentityIdentifierProvider.cs index 86c7e7c..550033b 100644 --- a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/IDirectedIdentityIdentifierProvider.cs +++ b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/IDirectedIdentityIdentifierProvider.cs @@ -7,6 +7,7 @@ namespace DotNetOpenAuth.OpenId.Provider { using System; using System.Diagnostics.Contracts; + using Validation; /// <summary> /// An interface to provide custom identifiers for users logging into specific relying parties. @@ -16,7 +17,6 @@ namespace DotNetOpenAuth.OpenId.Provider { /// allowing the users to log into RPs without leaving any clue as to their true identity, /// and preventing multiple RPs from colluding to track user activity across realms. /// </remarks> - [ContractClass(typeof(IDirectedIdentityIdentifierProviderContract))] public interface IDirectedIdentityIdentifierProvider { /// <summary> /// Gets the Identifier to use for the Claimed Identifier and Local Identifier of @@ -40,44 +40,4 @@ namespace DotNetOpenAuth.OpenId.Provider { [Pure] bool IsUserLocalIdentifier(Identifier identifier); } - - /// <summary> - /// Contract class for the <see cref="IDirectedIdentityIdentifierProvider"/> type. - /// </summary> - [ContractClassFor(typeof(IDirectedIdentityIdentifierProvider))] - internal abstract class IDirectedIdentityIdentifierProviderContract : IDirectedIdentityIdentifierProvider { - #region IDirectedIdentityIdentifierProvider Members - - /// <summary> - /// Gets the Identifier to use for the Claimed Identifier and Local Identifier of - /// an outgoing positive assertion. - /// </summary> - /// <param name="localIdentifier">The OP local identifier for the authenticating user.</param> - /// <param name="relyingPartyRealm">The realm of the relying party receiving the assertion.</param> - /// <returns> - /// A valid, discoverable OpenID Identifier that should be used as the value for the - /// openid.claimed_id and openid.local_id parameters. Must not be null. - /// </returns> - Uri IDirectedIdentityIdentifierProvider.GetIdentifier(Identifier localIdentifier, Realm relyingPartyRealm) { - Requires.NotNull(localIdentifier, "localIdentifier"); - Requires.NotNull(relyingPartyRealm, "relyingPartyRealm"); - Requires.True(((IDirectedIdentityIdentifierProvider)this).IsUserLocalIdentifier(localIdentifier), "localIdentifier", OpenIdStrings.ArgumentIsPpidIdentifier); - throw new NotImplementedException(); - } - - /// <summary> - /// Determines whether a given identifier is the primary (non-PPID) local identifier for some user. - /// </summary> - /// <param name="identifier">The identifier in question.</param> - /// <returns> - /// <c>true</c> if the given identifier is the valid, unique identifier for some uesr (and NOT a PPID); otherwise, <c>false</c>. - /// </returns> - bool IDirectedIdentityIdentifierProvider.IsUserLocalIdentifier(Identifier identifier) { - Requires.NotNull(identifier, "identifier"); - - throw new NotImplementedException(); - } - - #endregion - } } diff --git a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/IProviderAssociationStore.cs b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/IProviderAssociationStore.cs index 930abcd..e0f84b9 100644 --- a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/IProviderAssociationStore.cs +++ b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/IProviderAssociationStore.cs @@ -7,10 +7,10 @@ namespace DotNetOpenAuth.OpenId.Provider { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// Provides association serialization and deserialization. @@ -24,7 +24,6 @@ namespace DotNetOpenAuth.OpenId.Provider { /// to avoid disclosing the secret to anyone who sees the association handle, which itself isn't considered to /// be confidential. /// </remarks> - [ContractClass(typeof(IProviderAssociationStoreContract))] internal interface IProviderAssociationStore { /// <summary> /// Stores an association and returns a handle for it. @@ -49,42 +48,4 @@ namespace DotNetOpenAuth.OpenId.Provider { /// <exception cref="ProtocolException">Thrown if the association is not of the expected type.</exception> Association Deserialize(IProtocolMessage containingMessage, bool privateAssociation, string handle); } - - /// <summary> - /// Code contract for the <see cref="IProviderAssociationStore"/> interface. - /// </summary> - [ContractClassFor(typeof(IProviderAssociationStore))] - internal abstract class IProviderAssociationStoreContract : IProviderAssociationStore { - /// <summary> - /// Stores an association and returns a handle for it. - /// </summary> - /// <param name="secret">The association secret.</param> - /// <param name="expiresUtc">The expires UTC.</param> - /// <param name="privateAssociation">A value indicating whether this is a private association.</param> - /// <returns> - /// The association handle that represents this association. - /// </returns> - string IProviderAssociationStore.Serialize(byte[] secret, DateTime expiresUtc, bool privateAssociation) { - Requires.NotNull(secret, "secret"); - Requires.True(expiresUtc.Kind == DateTimeKind.Utc, "expiresUtc"); - Contract.Ensures(!string.IsNullOrEmpty(Contract.Result<string>())); - throw new NotImplementedException(); - } - - /// <summary> - /// Retrieves an association given an association handle. - /// </summary> - /// <param name="containingMessage">The OpenID message that referenced this association handle.</param> - /// <param name="privateAssociation">A value indicating whether a private association is expected.</param> - /// <param name="handle">The association handle.</param> - /// <returns> - /// An association instance, or <c>null</c> if the association has expired or the signature is incorrect (which may be because the OP's symmetric key has changed). - /// </returns> - /// <exception cref="ProtocolException">Thrown if the association is not of the expected type.</exception> - Association IProviderAssociationStore.Deserialize(IProtocolMessage containingMessage, bool privateAssociation, string handle) { - Requires.NotNull(containingMessage, "containingMessage"); - Requires.NotNullOrEmpty(handle, "handle"); - throw new NotImplementedException(); - } - } } diff --git a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/OpenIdProvider.cs b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/OpenIdProvider.cs index 05a33bc..d96e5c9 100644 --- a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/OpenIdProvider.cs +++ b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/OpenIdProvider.cs @@ -11,7 +11,6 @@ namespace DotNetOpenAuth.OpenId.Provider { using System.Collections.Specialized; using System.ComponentModel; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Linq; using System.Threading; using System.Web; @@ -20,13 +19,13 @@ namespace DotNetOpenAuth.OpenId.Provider { using DotNetOpenAuth.Messaging.Bindings; using DotNetOpenAuth.OpenId.ChannelElements; using DotNetOpenAuth.OpenId.Messages; + using Validation; using RP = DotNetOpenAuth.OpenId.RelyingParty; /// <summary> /// Offers services for a web page that is acting as an OpenID identity server. /// </summary> [SuppressMessage("Microsoft.Maintainability", "CA1506:AvoidExcessiveClassCoupling", Justification = "By design")] - [ContractVerification(true)] public sealed class OpenIdProvider : IDisposable, IOpenIdHost { /// <summary> /// The name of the key to use in the HttpApplication cache to store the @@ -55,8 +54,6 @@ namespace DotNetOpenAuth.OpenId.Provider { /// </summary> public OpenIdProvider() : this(OpenIdElement.Configuration.Provider.ApplicationStore.CreateInstance(HttpApplicationStore)) { - Contract.Ensures(this.SecuritySettings != null); - Contract.Ensures(this.Channel != null); } /// <summary> @@ -66,8 +63,6 @@ namespace DotNetOpenAuth.OpenId.Provider { public OpenIdProvider(IOpenIdApplicationStore applicationStore) : this((INonceStore)applicationStore, (ICryptoKeyStore)applicationStore) { Requires.NotNull(applicationStore, "applicationStore"); - Contract.Ensures(this.SecuritySettings != null); - Contract.Ensures(this.Channel != null); } /// <summary> @@ -78,8 +73,6 @@ namespace DotNetOpenAuth.OpenId.Provider { private OpenIdProvider(INonceStore nonceStore, ICryptoKeyStore cryptoKeyStore) { Requires.NotNull(nonceStore, "nonceStore"); Requires.NotNull(cryptoKeyStore, "cryptoKeyStore"); - Contract.Ensures(this.SecuritySettings != null); - Contract.Ensures(this.Channel != null); this.SecuritySettings = OpenIdElement.Configuration.Provider.SecuritySettings.CreateSecuritySettings(); this.behaviors.CollectionChanged += this.OnBehaviorsChanged; @@ -102,8 +95,7 @@ namespace DotNetOpenAuth.OpenId.Provider { [EditorBrowsable(EditorBrowsableState.Advanced)] public static IOpenIdApplicationStore HttpApplicationStore { get { - Requires.ValidState(HttpContext.Current != null && HttpContext.Current.Request != null, MessagingStrings.HttpContextRequired); - Contract.Ensures(Contract.Result<IOpenIdApplicationStore>() != null); + RequiresEx.ValidState(HttpContext.Current != null && HttpContext.Current.Request != null, MessagingStrings.HttpContextRequired); HttpContext context = HttpContext.Current; var store = (IOpenIdApplicationStore)context.Application[ApplicationStoreKey]; if (store == null) { @@ -131,8 +123,7 @@ namespace DotNetOpenAuth.OpenId.Provider { /// </summary> public ProviderSecuritySettings SecuritySettings { get { - Contract.Ensures(Contract.Result<ProviderSecuritySettings>() != null); - Contract.Assume(this.securitySettings != null); + Assumes.True(this.securitySettings != null); return this.securitySettings; } @@ -325,9 +316,9 @@ namespace DotNetOpenAuth.OpenId.Provider { [SuppressMessage("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily", Justification = "Code Contract requires that we cast early.")] [EditorBrowsable(EditorBrowsableState.Never)] public void SendResponse(IRequest request) { - Requires.ValidState(HttpContext.Current != null, MessagingStrings.CurrentHttpContextRequired); + RequiresEx.ValidState(HttpContext.Current != null, MessagingStrings.CurrentHttpContextRequired); Requires.NotNull(request, "request"); - Requires.True(request.IsResponseReady, "request"); + Requires.That(request.IsResponseReady, "request", OpenIdStrings.ResponseNotReady); this.ApplyBehaviorsToResponse(request); Request requestInternal = (Request)request; @@ -346,9 +337,9 @@ namespace DotNetOpenAuth.OpenId.Provider { /// <exception cref="InvalidOperationException">Thrown if <see cref="IRequest.IsResponseReady"/> is <c>false</c>.</exception> [SuppressMessage("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily", Justification = "Code Contract requires that we cast early.")] public void Respond(IRequest request) { - Requires.ValidState(HttpContext.Current != null, MessagingStrings.CurrentHttpContextRequired); + RequiresEx.ValidState(HttpContext.Current != null, MessagingStrings.CurrentHttpContextRequired); Requires.NotNull(request, "request"); - Requires.True(request.IsResponseReady, "request"); + Requires.That(request.IsResponseReady, "request", OpenIdStrings.ResponseNotReady); this.ApplyBehaviorsToResponse(request); Request requestInternal = (Request)request; @@ -364,7 +355,7 @@ namespace DotNetOpenAuth.OpenId.Provider { [SuppressMessage("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily", Justification = "Code Contract requires that we cast early.")] public OutgoingWebResponse PrepareResponse(IRequest request) { Requires.NotNull(request, "request"); - Requires.True(request.IsResponseReady, "request"); + Requires.That(request.IsResponseReady, "request", OpenIdStrings.ResponseNotReady); this.ApplyBehaviorsToResponse(request); Request requestInternal = (Request)request; @@ -387,9 +378,9 @@ namespace DotNetOpenAuth.OpenId.Provider { /// be the same as <paramref name="claimedIdentifier"/>.</param> /// <param name="extensions">The extensions.</param> public void SendUnsolicitedAssertion(Uri providerEndpoint, Realm relyingPartyRealm, Identifier claimedIdentifier, Identifier localIdentifier, params IExtensionMessage[] extensions) { - Requires.ValidState(HttpContext.Current != null, MessagingStrings.HttpContextRequired); + RequiresEx.ValidState(HttpContext.Current != null, MessagingStrings.HttpContextRequired); Requires.NotNull(providerEndpoint, "providerEndpoint"); - Requires.True(providerEndpoint.IsAbsoluteUri, "providerEndpoint"); + Requires.That(providerEndpoint.IsAbsoluteUri, "providerEndpoint", OpenIdStrings.AbsoluteUriRequired); Requires.NotNull(relyingPartyRealm, "relyingPartyRealm"); Requires.NotNull(claimedIdentifier, "claimedIdentifier"); Requires.NotNull(localIdentifier, "localIdentifier"); @@ -418,11 +409,11 @@ namespace DotNetOpenAuth.OpenId.Provider { /// </returns> public OutgoingWebResponse PrepareUnsolicitedAssertion(Uri providerEndpoint, Realm relyingPartyRealm, Identifier claimedIdentifier, Identifier localIdentifier, params IExtensionMessage[] extensions) { Requires.NotNull(providerEndpoint, "providerEndpoint"); - Requires.True(providerEndpoint.IsAbsoluteUri, "providerEndpoint"); + Requires.That(providerEndpoint.IsAbsoluteUri, "providerEndpoint", OpenIdStrings.AbsoluteUriRequired); Requires.NotNull(relyingPartyRealm, "relyingPartyRealm"); Requires.NotNull(claimedIdentifier, "claimedIdentifier"); Requires.NotNull(localIdentifier, "localIdentifier"); - Requires.ValidState(this.Channel.WebRequestHandler != null); + RequiresEx.ValidState(this.Channel.WebRequestHandler != null); // Although the RP should do their due diligence to make sure that this OP // is authorized to send an assertion for the given claimed identifier, diff --git a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/OpenIdProviderUtilities.cs b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/OpenIdProviderUtilities.cs index ae7dede..9e46168 100644 --- a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/OpenIdProviderUtilities.cs +++ b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/OpenIdProviderUtilities.cs @@ -7,12 +7,12 @@ namespace DotNetOpenAuth.OpenId.Provider { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Messages; using DotNetOpenAuth.OpenId.Provider; + using Validation; /// <summary> /// Utility methods for OpenID Providers. diff --git a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/PrivatePersonalIdentifierProviderBase.cs b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/PrivatePersonalIdentifierProviderBase.cs index aaffa4c..2650e44 100644 --- a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/PrivatePersonalIdentifierProviderBase.cs +++ b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/PrivatePersonalIdentifierProviderBase.cs @@ -8,12 +8,12 @@ namespace DotNetOpenAuth.OpenId.Provider { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Globalization; using System.Linq; using System.Security.Cryptography; using System.Text; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// Provides standard PPID Identifiers to users to protect their identity from individual relying parties @@ -102,7 +102,7 @@ namespace DotNetOpenAuth.OpenId.Provider { } set { - Requires.InRange(value > 0, "value"); + Requires.Range(value > 0, "value"); this.newSaltLength = value; } } diff --git a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/ProviderAssociationHandleEncoder.cs b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/ProviderAssociationHandleEncoder.cs index 897b4f8..240e450 100644 --- a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/ProviderAssociationHandleEncoder.cs +++ b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/ProviderAssociationHandleEncoder.cs @@ -6,11 +6,11 @@ namespace DotNetOpenAuth.OpenId.Provider { using System; - using System.Diagnostics.Contracts; using System.Threading; using DotNetOpenAuth.Configuration; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Messaging.Bindings; + using Validation; /// <summary> /// Provides association storage in the association handle itself, but embedding signed and encrypted association diff --git a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/ProviderAssociationKeyStorage.cs b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/ProviderAssociationKeyStorage.cs index 0786828..8eaae09 100644 --- a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/ProviderAssociationKeyStorage.cs +++ b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/ProviderAssociationKeyStorage.cs @@ -6,9 +6,9 @@ namespace DotNetOpenAuth.OpenId.Provider { using System; - using System.Diagnostics.Contracts; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Messaging.Bindings; + using Validation; /// <summary> /// An association storage mechanism that stores the association secrets in a private store, diff --git a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/Request.cs b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/Request.cs index 21c1b51..ceabab3 100644 --- a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/Request.cs +++ b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/Request.cs @@ -7,19 +7,17 @@ namespace DotNetOpenAuth.OpenId.Provider { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Messages; + using Validation; /// <summary> /// Implements the <see cref="IRequest"/> interface for all incoming /// request messages to an OpenID Provider. /// </summary> [Serializable] - [ContractClass(typeof(RequestContract))] - [ContractVerification(true)] internal abstract class Request : IRequest { /// <summary> /// The incoming request message. @@ -99,8 +97,7 @@ namespace DotNetOpenAuth.OpenId.Provider { /// <exception cref="InvalidOperationException">Thrown if <see cref="IsResponseReady"/> is <c>false</c>.</exception> internal IProtocolMessage Response { get { - Requires.ValidState(this.IsResponseReady, OpenIdStrings.ResponseNotReady); - Contract.Ensures(Contract.Result<IProtocolMessage>() != null); + RequiresEx.ValidState(this.IsResponseReady, OpenIdStrings.ResponseNotReady); if (this.responseExtensions.Count > 0) { var extensibleResponse = this.ResponseMessage as IProtocolMessageWithExtensions; diff --git a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/RequestContract.cs b/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/RequestContract.cs deleted file mode 100644 index aa692d3..0000000 --- a/src/DotNetOpenAuth.OpenId.Provider/OpenId/Provider/RequestContract.cs +++ /dev/null @@ -1,48 +0,0 @@ -//----------------------------------------------------------------------- -// <copyright file="RequestContract.cs" company="Outercurve Foundation"> -// Copyright (c) Outercurve Foundation. All rights reserved. -// </copyright> -//----------------------------------------------------------------------- - -namespace DotNetOpenAuth.OpenId.Provider { - using System; - using System.Collections.Generic; - using System.Diagnostics.Contracts; - using System.Linq; - using System.Text; - using DotNetOpenAuth.Messaging; - - /// <summary> - /// Code contract for the <see cref="Request"/> class. - /// </summary> - [ContractClassFor(typeof(Request))] - internal abstract class RequestContract : Request { - /// <summary> - /// Prevents a default instance of the <see cref="RequestContract"/> class from being created. - /// </summary> - private RequestContract() : base((Version)null, null) { - } - - /// <summary> - /// Gets a value indicating whether the response is ready to be sent to the user agent. - /// </summary> - /// <remarks> - /// This property returns false if there are properties that must be set on this - /// request instance before the response can be sent. - /// </remarks> - public override bool IsResponseReady { - get { throw new NotImplementedException(); } - } - - /// <summary> - /// Gets the response message, once <see cref="IsResponseReady"/> is <c>true</c>. - /// </summary> - protected override IProtocolMessage ResponseMessage { - get { - Requires.ValidState(this.IsResponseReady); - Contract.Ensures(Contract.Result<IProtocolMessage>() != null); - throw new NotImplementedException(); - } - } - } -} diff --git a/src/DotNetOpenAuth.OpenId.Provider/Properties/AssemblyInfo.cs b/src/DotNetOpenAuth.OpenId.Provider/Properties/AssemblyInfo.cs index 397b35d..29900ab 100644 --- a/src/DotNetOpenAuth.OpenId.Provider/Properties/AssemblyInfo.cs +++ b/src/DotNetOpenAuth.OpenId.Provider/Properties/AssemblyInfo.cs @@ -7,7 +7,6 @@ // We DON'T put an AssemblyVersionAttribute in here because it is generated in the build. using System; -using System.Diagnostics.Contracts; using System.Net; using System.Reflection; using System.Resources; @@ -31,8 +30,6 @@ using System.Web.UI; // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("7d73990c-47c0-4256-9f20-a893add9e289")] -[assembly: ContractVerification(true)] - #if StrongNameSigned // See comment at top of this file. We need this so that strong-naming doesn't // keep this assembly from being useful to shared host (medium trust) web sites. diff --git a/src/DotNetOpenAuth.OpenId.Provider/packages.config b/src/DotNetOpenAuth.OpenId.Provider/packages.config new file mode 100644 index 0000000..10eec89 --- /dev/null +++ b/src/DotNetOpenAuth.OpenId.Provider/packages.config @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="Validation" version="2.0.0.12319" targetFramework="net40" /> +</packages>
\ No newline at end of file diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty.UI/DotNetOpenAuth.OpenId.RelyingParty.UI.csproj b/src/DotNetOpenAuth.OpenId.RelyingParty.UI/DotNetOpenAuth.OpenId.RelyingParty.UI.csproj index 4d376bf..3d2661f 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty.UI/DotNetOpenAuth.OpenId.RelyingParty.UI.csproj +++ b/src/DotNetOpenAuth.OpenId.RelyingParty.UI/DotNetOpenAuth.OpenId.RelyingParty.UI.csproj @@ -28,14 +28,13 @@ <Compile Include="OpenId\RelyingParty\OpenIdButton.cs" /> <Compile Include="OpenId\RelyingParty\OpenIdEventArgs.cs" /> <Compile Include="OpenId\RelyingParty\OpenIdLogin.cs" /> - <Compile Include="OpenId\RelyingParty\OpenIdMobileTextBox.cs" Condition=" '$(ClrVersion)' != '4' "/> + <Compile Include="OpenId\RelyingParty\OpenIdMobileTextBox.cs" Condition=" '$(ClrVersion)' != '4' " /> <Compile Include="OpenId\RelyingParty\OpenIdRelyingPartyAjaxControlBase.cs" /> <Compile Include="OpenId\RelyingParty\OpenIdRelyingPartyControlBase.cs" /> <Compile Include="OpenId\RelyingParty\OpenIdSelector.cs" /> <Compile Include="OpenId\RelyingParty\OpenIdTextBox.cs" /> <Compile Include="OpenId\RelyingParty\PopupBehavior.cs" /> <Compile Include="OpenId\RelyingParty\SelectorButton.cs" /> - <Compile Include="OpenId\RelyingParty\SelectorButtonContract.cs" /> <Compile Include="OpenId\RelyingParty\SelectorOpenIdButton.cs" /> <Compile Include="OpenId\RelyingParty\SelectorProviderButton.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> @@ -64,6 +63,10 @@ </ItemGroup> <ItemGroup> <Reference Include="System" /> + <Reference Include="Validation, Version=2.0.0.0, Culture=neutral, PublicKeyToken=2fc06f0d701809a7, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\Validation.2.0.0.12319\lib\portable-windows8+net40+sl5+windowsphone8\Validation.dll</HintPath> + </Reference> </ItemGroup> <ItemGroup> <EmbeddedResource Include="OpenId\RelyingParty\login_failure.png" /> @@ -80,6 +83,7 @@ </ItemGroup> <ItemGroup> <None Include="OpenId\RelyingParty\Controls.cd" /> + <None Include="packages.config" /> </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(ProjectRoot)tools\DotNetOpenAuth.targets" /> diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/Mvc/OpenIdHelper.cs b/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/Mvc/OpenIdHelper.cs index 0573e0a..c78c6a7 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/Mvc/OpenIdHelper.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/Mvc/OpenIdHelper.cs @@ -8,7 +8,6 @@ namespace DotNetOpenAuth.Mvc { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Globalization; using System.IO; using System.Linq; @@ -21,6 +20,7 @@ namespace DotNetOpenAuth.Mvc { using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId; using DotNetOpenAuth.OpenId.RelyingParty; + using Validation; /// <summary> /// Methods that generate HTML or Javascript for hosting AJAX OpenID "controls" on @@ -35,7 +35,6 @@ namespace DotNetOpenAuth.Mvc { [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Justification = "False positive.")] public static string OpenIdSelectorStyles(this HtmlHelper html) { Requires.NotNull(html, "html"); - Contract.Ensures(Contract.Result<string>() != null); using (var result = new StringWriter(CultureInfo.CurrentCulture)) { result.WriteStylesheetLink(OpenId.RelyingParty.OpenIdSelector.EmbeddedStylesheetResourceName); @@ -65,7 +64,6 @@ namespace DotNetOpenAuth.Mvc { [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Justification = "False positive")] public static string OpenIdSelectorScripts(this HtmlHelper html, OpenIdSelector selectorOptions, OpenIdAjaxOptions additionalOptions) { Requires.NotNull(html, "html"); - Contract.Ensures(Contract.Result<string>() != null); bool selectorOptionsOwned = false; if (selectorOptions == null) { @@ -211,7 +209,6 @@ window.openid_trace = {1}; // causes lots of messages"; Requires.NotNull(html, "html"); Requires.NotNull(providerIdentifier, "providerIdentifier"); Requires.NotNullOrEmpty(imageUrl, "imageUrl"); - Contract.Ensures(Contract.Result<string>() != null); return OpenIdSelectorButton(html, providerIdentifier, "OPButton", imageUrl); } @@ -228,7 +225,6 @@ window.openid_trace = {1}; // causes lots of messages"; public static string OpenIdSelectorOpenIdButton(this HtmlHelper html, string imageUrl) { Requires.NotNull(html, "html"); Requires.NotNullOrEmpty(imageUrl, "imageUrl"); - Contract.Ensures(Contract.Result<string>() != null); return OpenIdSelectorButton(html, "OpenIDButton", "OpenIDButton", imageUrl); } @@ -246,7 +242,6 @@ window.openid_trace = {1}; // causes lots of messages"; public static string OpenIdSelector(this HtmlHelper html, params SelectorButton[] buttons) { Requires.NotNull(html, "html"); Requires.NotNull(buttons, "buttons"); - Contract.Ensures(Contract.Result<string>() != null); using (var writer = new StringWriter(CultureInfo.CurrentCulture)) { using (var h = new HtmlTextWriter(writer)) { @@ -313,7 +308,6 @@ window.openid_trace = {1}; // causes lots of messages"; Requires.NotNull(html, "html"); Requires.NotNull(id, "id"); Requires.NotNullOrEmpty(imageUrl, "imageUrl"); - Contract.Ensures(Contract.Result<string>() != null); using (var writer = new StringWriter(CultureInfo.CurrentCulture)) { using (var h = new HtmlTextWriter(writer)) { diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdAjaxRelyingParty.cs b/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdAjaxRelyingParty.cs index ef6894b..918efdf 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdAjaxRelyingParty.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdAjaxRelyingParty.cs @@ -8,7 +8,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Globalization; using System.Linq; using System.Net; @@ -21,6 +20,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Extensions; using DotNetOpenAuth.OpenId.Extensions.UI; + using Validation; /// <summary> /// Provides the programmatic facilities to act as an AJAX-enabled OpenID relying party. diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdAjaxTextBox.cs b/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdAjaxTextBox.cs index d00f920..b5b6162 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdAjaxTextBox.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdAjaxTextBox.cs @@ -19,13 +19,13 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using System.ComponentModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Drawing.Design; using System.Globalization; using System.Text; using System.Web.UI; using System.Web.UI.HtmlControls; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// An ASP.NET control that provides a minimal text box that is OpenID-aware and uses AJAX for @@ -382,7 +382,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { } set { - Requires.InRange(value >= 0, "value"); + Requires.Range(value >= 0, "value"); this.ViewState[ColumnsViewStateKey] = value; } } @@ -446,7 +446,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { } set { - Requires.InRange(value.TotalMilliseconds > 0, "value"); + Requires.Range(value.TotalMilliseconds > 0, "value"); this.ViewState[TimeoutViewStateKey] = value; } } @@ -462,7 +462,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { } set { - Requires.InRange(value > 0, "value"); + Requires.Range(value > 0, "value"); this.ViewState[ThrottleViewStateKey] = value; } } diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdEventArgs.cs b/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdEventArgs.cs index 8b91b14..66d6df6 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdEventArgs.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdEventArgs.cs @@ -7,10 +7,10 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// The event details passed to event handlers. diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdLogin.cs b/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdLogin.cs index ffb619a..16f9462 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdLogin.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdLogin.cs @@ -8,7 +8,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using System; using System.ComponentModel; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Globalization; using System.Linq; using System.Web.UI; diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdMobileTextBox.cs b/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdMobileTextBox.cs index b3d208a..0c159a1 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdMobileTextBox.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdMobileTextBox.cs @@ -11,7 +11,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using System.ComponentModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Globalization; using System.Text.RegularExpressions; using System.Web.Security; @@ -20,6 +19,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using DotNetOpenAuth.Configuration; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Extensions.SimpleRegistration; + using Validation; /// <summary> /// An ASP.NET control for mobile devices that provides a minimal text box that is OpenID-aware. @@ -583,8 +583,8 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// </remarks> [SuppressMessage("Microsoft.Usage", "CA2234:PassSystemUriObjectsInsteadOfStrings", Justification = "Uri(Uri, string) accepts second arguments that Uri(Uri, new Uri(string)) does not that we must support.")] public IAuthenticationRequest CreateRequest() { - Requires.ValidState(this.Request == null, OpenIdStrings.CreateRequestAlreadyCalled); - Requires.ValidState(!string.IsNullOrEmpty(this.Text), OpenIdStrings.OpenIdTextBoxEmpty); + RequiresEx.ValidState(this.Request == null, OpenIdStrings.CreateRequestAlreadyCalled); + RequiresEx.ValidState(!string.IsNullOrEmpty(this.Text), OpenIdStrings.OpenIdTextBoxEmpty); try { // Resolve the trust root, and swap out the scheme and port if necessary to match the diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdRelyingPartyAjaxControlBase.cs b/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdRelyingPartyAjaxControlBase.cs index 34c4df4..9b4d271 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdRelyingPartyAjaxControlBase.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdRelyingPartyAjaxControlBase.cs @@ -11,7 +11,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Globalization; using System.Linq; using System.Text; @@ -21,6 +20,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using DotNetOpenAuth.Configuration; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Extensions; + using Validation; /// <summary> /// A common base class for OpenID Relying Party controls. @@ -395,7 +395,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// </summary> /// <param name="writer">The <see cref="T:System.Web.UI.HtmlTextWriter"/> object that receives the server control content.</param> protected override void Render(HtmlTextWriter writer) { - Contract.Assume(writer != null, "Missing contract."); + Assumes.True(writer != null, "Missing contract."); base.Render(writer); // Emit a hidden field to let the javascript on the user agent know if an diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdRelyingPartyControlBase.cs b/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdRelyingPartyControlBase.cs index c730dea..7d616d2 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdRelyingPartyControlBase.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdRelyingPartyControlBase.cs @@ -12,7 +12,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using System.Collections.ObjectModel; using System.ComponentModel; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Drawing.Design; using System.Globalization; using System.Linq; @@ -27,6 +26,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using DotNetOpenAuth.OpenId.Extensions; using DotNetOpenAuth.OpenId.Extensions.UI; using DotNetOpenAuth.OpenId.Messages; + using Validation; /// <summary> /// Methods of indicating to the rest of the web site that the user has logged in. @@ -604,7 +604,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// used to determine the user's control of the <see cref="IAuthenticationRequest.ClaimedIdentifier"/>. /// </returns> protected IEnumerable<IAuthenticationRequest> CreateRequests() { - Requires.ValidState(this.Identifier != null, OpenIdStrings.NoIdentifierSet); + RequiresEx.ValidState(this.Identifier != null, OpenIdStrings.NoIdentifierSet); return this.CreateRequests(this.Identifier); } @@ -715,7 +715,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// <param name="response">The response.</param> protected virtual void OnLoggedIn(IAuthenticationResponse response) { Requires.NotNull(response, "response"); - Requires.True(response.Status == AuthenticationStatus.Authenticated, "response"); + Requires.That(response.Status == AuthenticationStatus.Authenticated, "response", "response not authenticatedl"); var loggedIn = this.LoggedIn; OpenIdEventArgs args = new OpenIdEventArgs(response); @@ -765,7 +765,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// <param name="response">The response.</param> protected virtual void OnCanceled(IAuthenticationResponse response) { Requires.NotNull(response, "response"); - Requires.True(response.Status == AuthenticationStatus.Canceled, "response"); + Requires.That(response.Status == AuthenticationStatus.Canceled, "response", "response not canceled"); var canceled = this.Canceled; if (canceled != null) { @@ -779,7 +779,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// <param name="response">The response.</param> protected virtual void OnFailed(IAuthenticationResponse response) { Requires.NotNull(response, "response"); - Requires.True(response.Status == AuthenticationStatus.Failed, "response"); + Requires.That(response.Status == AuthenticationStatus.Failed, "response", "response not failed"); var failed = this.Failed; if (failed != null) { @@ -1016,7 +1016,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// <param name="request">The request.</param> private void ScriptPopupWindow(IAuthenticationRequest request) { Requires.NotNull(request, "request"); - Requires.ValidState(this.RelyingParty != null); + RequiresEx.ValidState(this.RelyingParty != null); StringBuilder startupScript = new StringBuilder(); diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdSelector.cs b/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdSelector.cs index 91ff8c8..7881a8b 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdSelector.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdSelector.cs @@ -12,7 +12,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; - using System.Diagnostics.Contracts; using System.Globalization; using System.IdentityModel.Claims; using System.Linq; @@ -327,7 +326,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// </summary> /// <param name="writer">The <see cref="T:System.Web.UI.HtmlTextWriter"/> object that receives the server control content.</param> protected override void Render(HtmlTextWriter writer) { - Contract.Assume(writer != null, "Missing contract"); + Assumes.True(writer != null, "Missing contract"); writer.AddAttribute(HtmlTextWriterAttribute.Class, "OpenIdProviders"); writer.RenderBeginTag(HtmlTextWriterTag.Ul); diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdTextBox.cs b/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdTextBox.cs index 8ba689f..7474854 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdTextBox.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/OpenIdTextBox.cs @@ -15,7 +15,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using System.ComponentModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Drawing.Design; using System.Globalization; using System.Net; @@ -29,6 +28,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Extensions.SimpleRegistration; using DotNetOpenAuth.OpenId.Extensions.UI; + using Validation; /// <summary> /// An ASP.NET control that provides a minimal text box that is OpenID-aware. @@ -584,7 +584,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// </summary> /// <param name="writer">The <see cref="T:System.Web.UI.HtmlTextWriter"/> object that receives the server control content.</param> protected override void Render(HtmlTextWriter writer) { - Contract.Assume(writer != null, "Missing contract."); + Assumes.True(writer != null, "Missing contract."); if (this.ShowLogo) { string logoUrl = Page.ClientScript.GetWebResourceUrl( @@ -627,7 +627,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// true if the server control's state changes as a result of the postback; otherwise, false. /// </returns> protected virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection) { - Contract.Assume(postCollection != null, "Missing contract"); + Assumes.True(postCollection != null, "Missing contract"); // If the control was temporarily hidden, it won't be in the Form data, // and we'll just implicitly keep the last Text setting. @@ -666,7 +666,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// used to determine the user's control of the <see cref="IAuthenticationRequest.ClaimedIdentifier"/>. /// </returns> private IEnumerable<IAuthenticationRequest> CreateRequestsCore(IEnumerable<IAuthenticationRequest> requests) { - Contract.Requires(requests != null); + Requires.NotNull(requests, "requests"); foreach (var request in requests) { if (this.EnableRequestProfile) { diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/SelectorButton.cs b/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/SelectorButton.cs index 670189c..82fd96b 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/SelectorButton.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/SelectorButton.cs @@ -6,13 +6,11 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using System; - using System.Diagnostics.Contracts; using System.Web.UI; /// <summary> /// A button that would appear in the <see cref="OpenIdSelector"/> control via its <see cref="OpenIdSelector.Buttons"/> collection. /// </summary> - [ContractClass(typeof(SelectorButtonContract))] [Serializable] public abstract class SelectorButton { /// <summary> diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/SelectorButtonContract.cs b/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/SelectorButtonContract.cs deleted file mode 100644 index b57b73b..0000000 --- a/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/SelectorButtonContract.cs +++ /dev/null @@ -1,46 +0,0 @@ -//----------------------------------------------------------------------- -// <copyright file="SelectorButtonContract.cs" company="Outercurve Foundation"> -// Copyright (c) Outercurve Foundation. All rights reserved. -// </copyright> -//----------------------------------------------------------------------- - -namespace DotNetOpenAuth.OpenId.RelyingParty { - using System; - using System.Diagnostics.Contracts; - using System.Web.UI; - - /// <summary> - /// The contract class for the <see cref="SelectorButton"/> class. - /// </summary> - [ContractClassFor(typeof(SelectorButton))] - internal abstract class SelectorButtonContract : SelectorButton { - /// <summary> - /// Ensures that this button has been initialized to a valid state. - /// </summary> - /// <remarks> - /// This is "internal" -- NOT "protected internal" deliberately. It makes it impossible - /// to derive from this class outside the assembly, which suits our purposes since the - /// <see cref="OpenIdSelector"/> control is not designed for an extensible set of button types. - /// </remarks> - internal override void EnsureValid() { - } - - /// <summary> - /// Renders the leading attributes for the LI tag. - /// </summary> - /// <param name="writer">The writer.</param> - protected internal override void RenderLeadingAttributes(HtmlTextWriter writer) { - Requires.NotNull(writer, "writer"); - } - - /// <summary> - /// Renders the content of the button. - /// </summary> - /// <param name="writer">The writer.</param> - /// <param name="selector">The containing selector control.</param> - protected internal override void RenderButtonContent(HtmlTextWriter writer, OpenIdSelector selector) { - Requires.NotNull(writer, "writer"); - Requires.NotNull(selector, "selector"); - } - } -} diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/SelectorOpenIdButton.cs b/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/SelectorOpenIdButton.cs index 0041ad7..2ede5d6 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/SelectorOpenIdButton.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/SelectorOpenIdButton.cs @@ -7,10 +7,10 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using System; using System.ComponentModel; - using System.Diagnostics.Contracts; using System.Drawing.Design; using System.Web.UI; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// A button that appears in the <see cref="OpenIdSelector"/> control that @@ -47,8 +47,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// Ensures that this button has been initialized to a valid state. /// </summary> internal override void EnsureValid() { - Contract.Ensures(!string.IsNullOrEmpty(this.Image)); - // Every button must have an image. ErrorUtilities.VerifyOperation(!string.IsNullOrEmpty(this.Image), OpenIdStrings.PropertyNotSet, "SelectorButton.Image"); } diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/SelectorProviderButton.cs b/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/SelectorProviderButton.cs index 7c71a37..e60d95d 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/SelectorProviderButton.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty.UI/OpenId/RelyingParty/SelectorProviderButton.cs @@ -7,11 +7,11 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using System; using System.ComponentModel; - using System.Diagnostics.Contracts; using System.Drawing.Design; using System.Web.UI; using DotNetOpenAuth.ComponentModel; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// A button that appears in the <see cref="OpenIdSelector"/> control that @@ -69,9 +69,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// Ensures that this button has been initialized to a valid state. /// </summary> internal override void EnsureValid() { - Contract.Ensures(!string.IsNullOrEmpty(this.Image)); - Contract.Ensures(this.OPIdentifier != null); - // Every button must have an image. ErrorUtilities.VerifyOperation(!string.IsNullOrEmpty(this.Image), OpenIdStrings.PropertyNotSet, "SelectorButton.Image"); diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty.UI/Properties/AssemblyInfo.cs b/src/DotNetOpenAuth.OpenId.RelyingParty.UI/Properties/AssemblyInfo.cs index 5ea4ad7..0b03770 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty.UI/Properties/AssemblyInfo.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty.UI/Properties/AssemblyInfo.cs @@ -7,7 +7,6 @@ // We DON'T put an AssemblyVersionAttribute in here because it is generated in the build. using System; -using System.Diagnostics.Contracts; using System.Net; using System.Reflection; using System.Resources; @@ -33,8 +32,6 @@ using System.Web.UI; // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("7d73990c-47c0-4256-9f20-a893add9e289")] -[assembly: ContractVerification(true)] - #if StrongNameSigned // See comment at top of this file. We need this so that strong-naming doesn't // keep this assembly from being useful to shared host (medium trust) web sites. diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty.UI/packages.config b/src/DotNetOpenAuth.OpenId.RelyingParty.UI/packages.config new file mode 100644 index 0000000..10eec89 --- /dev/null +++ b/src/DotNetOpenAuth.OpenId.RelyingParty.UI/packages.config @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="Validation" version="2.0.0.12319" targetFramework="net40" /> +</packages>
\ No newline at end of file diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty/DotNetOpenAuth.OpenId.RelyingParty.csproj b/src/DotNetOpenAuth.OpenId.RelyingParty/DotNetOpenAuth.OpenId.RelyingParty.csproj index 3ebd698..309ecb3 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty/DotNetOpenAuth.OpenId.RelyingParty.csproj +++ b/src/DotNetOpenAuth.OpenId.RelyingParty/DotNetOpenAuth.OpenId.RelyingParty.csproj @@ -36,7 +36,6 @@ <Compile Include="OpenId\Interop\OpenIdRelyingPartyShim.cs" /> <Compile Include="OpenId\Messages\AssociateDiffieHellmanRelyingPartyResponse.cs" /> <Compile Include="OpenId\Messages\AssociateRequestRelyingParty.cs" /> - <Compile Include="OpenId\Messages\IAssociateSuccessfulResponseRelyingPartyContract.cs" /> <Compile Include="OpenId\Messages\IAssociateSuccessfulResponseRelyingParty.cs" /> <Compile Include="OpenId\Messages\AssociateUnencryptedResponseRelyingParty.cs" /> <Compile Include="OpenId\RelyingParty\CryptoKeyStoreAsRelyingPartyAssociationStore.cs" /> @@ -61,6 +60,7 @@ </ItemGroup> <ItemGroup> <None Include="OpenId\RelyingParty\OpenIdRelyingParty.cd" /> + <None Include="packages.config" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\DotNetOpenAuth.Core\DotNetOpenAuth.Core.csproj"> @@ -78,6 +78,10 @@ </ItemGroup> <ItemGroup> <Reference Include="System" /> + <Reference Include="Validation, Version=2.0.0.0, Culture=neutral, PublicKeyToken=2fc06f0d701809a7, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\Validation.2.0.0.12319\lib\portable-windows8+net40+sl5+windowsphone8\Validation.dll</HintPath> + </Reference> </ItemGroup> <ItemGroup> <Folder Include="ComponentModel\" /> diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/ChannelElements/ExtensionsBindingElementRelyingParty.cs b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/ChannelElements/ExtensionsBindingElementRelyingParty.cs index fca62f8..be98d29 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/ChannelElements/ExtensionsBindingElementRelyingParty.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/ChannelElements/ExtensionsBindingElementRelyingParty.cs @@ -7,10 +7,10 @@ namespace DotNetOpenAuth.OpenId.ChannelElements { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.OpenId.RelyingParty; + using Validation; /// <summary> /// The OpenID binding element responsible for reading/writing OpenID extensions diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/ChannelElements/OpenIdRelyingPartyChannel.cs b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/ChannelElements/OpenIdRelyingPartyChannel.cs index e18a103..e65409a 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/ChannelElements/OpenIdRelyingPartyChannel.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/ChannelElements/OpenIdRelyingPartyChannel.cs @@ -7,13 +7,13 @@ namespace DotNetOpenAuth.OpenId.ChannelElements { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Messaging.Bindings; using DotNetOpenAuth.OpenId.Extensions; using DotNetOpenAuth.OpenId.RelyingParty; + using Validation; /// <summary> /// The messaging channel for OpenID relying parties. @@ -42,7 +42,7 @@ namespace DotNetOpenAuth.OpenId.ChannelElements { base(messageTypeProvider, InitializeBindingElements(cryptoKeyStore, nonceStore, securitySettings, nonVerifying)) { Requires.NotNull(messageTypeProvider, "messageTypeProvider"); Requires.NotNull(securitySettings, "securitySettings"); - Requires.True(!nonVerifying || securitySettings is RelyingPartySecuritySettings); + Assumes.True(!nonVerifying || securitySettings is RelyingPartySecuritySettings); } /// <summary> @@ -58,8 +58,6 @@ namespace DotNetOpenAuth.OpenId.ChannelElements { /// messages, and will validate them later.</para> /// </remarks> internal static OpenIdChannel CreateNonVerifyingChannel() { - Contract.Ensures(Contract.Result<OpenIdChannel>() != null); - return new OpenIdRelyingPartyChannel(null, null, new OpenIdRelyingPartyMessageFactory(), new RelyingPartySecuritySettings(), true); } diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/ChannelElements/RelyingPartySigningBindingElement.cs b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/ChannelElements/RelyingPartySigningBindingElement.cs index 81ce4e4..3ec2eee 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/ChannelElements/RelyingPartySigningBindingElement.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/ChannelElements/RelyingPartySigningBindingElement.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.OpenId.ChannelElements { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/ChannelElements/ReturnToNonceBindingElement.cs b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/ChannelElements/ReturnToNonceBindingElement.cs index 2aa735a..c459487 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/ChannelElements/ReturnToNonceBindingElement.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/ChannelElements/ReturnToNonceBindingElement.cs @@ -7,13 +7,13 @@ namespace DotNetOpenAuth.OpenId.ChannelElements { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Messaging.Bindings; using DotNetOpenAuth.OpenId.Messages; using DotNetOpenAuth.OpenId.RelyingParty; + using Validation; /// <summary> /// This binding element adds a nonce to a Relying Party's outgoing @@ -261,7 +261,7 @@ namespace DotNetOpenAuth.OpenId.ChannelElements { Requires.NotNullOrEmpty(value, "value"); byte[] nonce = MessagingUtilities.FromBase64WebSafeString(value); - Contract.Assume(nonce != null); + Assumes.True(nonce != null); DateTime creationDateUtc = new DateTime(BitConverter.ToInt64(nonce, 0), DateTimeKind.Utc); byte[] randomPart = new byte[NonceByteLength]; Array.Copy(nonce, sizeof(long), randomPart, 0, NonceByteLength); diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/HostMetaDiscoveryService.cs b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/HostMetaDiscoveryService.cs index 7336275..1871f19 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/HostMetaDiscoveryService.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/HostMetaDiscoveryService.cs @@ -9,7 +9,6 @@ namespace DotNetOpenAuth.OpenId { using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Globalization; using System.IO; using System.Linq; @@ -27,6 +26,7 @@ namespace DotNetOpenAuth.OpenId { using DotNetOpenAuth.OpenId.RelyingParty; using DotNetOpenAuth.Xrds; using DotNetOpenAuth.Yadis; + using Validation; /// <summary> /// The discovery service to support host-meta based discovery, such as Google Apps for Domains. @@ -167,7 +167,6 @@ namespace DotNetOpenAuth.OpenId { /// <returns>A sequence of services.</returns> private static IEnumerable<ServiceElement> GetDescribedByServices(IEnumerable<XrdElement> xrds) { Requires.NotNull(xrds, "xrds"); - Contract.Ensures(Contract.Result<IEnumerable<ServiceElement>>() != null); var describedBy = from xrd in xrds from service in xrd.SearchForServiceTypeUris(p => "http://www.iana.org/assignments/relation/describedby") @@ -186,7 +185,6 @@ namespace DotNetOpenAuth.OpenId { Requires.NotNull(xrds, "xrds"); Requires.NotNull(identifier, "identifier"); Requires.NotNull(requestHandler, "requestHandler"); - Contract.Ensures(Contract.Result<IEnumerable<IdentifierDiscoveryResult>>() != null); var results = new List<IdentifierDiscoveryResult>(); foreach (var serviceElement in GetDescribedByServices(xrds)) { @@ -298,7 +296,6 @@ namespace DotNetOpenAuth.OpenId { Requires.NotNull(identifier, "identifier"); Requires.NotNull(requestHandler, "requestHandler"); Requires.NotNull(xrdsLocation, "xrdsLocation"); - Contract.Ensures(Contract.Result<IncomingWebResponse>() != null); var request = (HttpWebRequest)WebRequest.Create(xrdsLocation); request.CachePolicy = Yadis.IdentifierDiscoveryCachePolicy; @@ -317,8 +314,7 @@ namespace DotNetOpenAuth.OpenId { /// </summary> /// <param name="certificates">The chain of certificates to verify.</param> private static void VerifyCertificateChain(IList<X509Certificate2> certificates) { - Contract.Requires(certificates.Count > 0); - Contract.Requires(certificates.All(c => c != null)); + Requires.NotNullEmptyOrNullElements(certificates, "certificates"); // Before calling into the OS to validate the certificate, since that can for some bizzare reason hang for 5 seconds // on some systems, check a cache of previously verified certificates first. diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/Interop/AuthenticationResponseShim.cs b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/Interop/AuthenticationResponseShim.cs index e6d6609..d871645 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/Interop/AuthenticationResponseShim.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/Interop/AuthenticationResponseShim.cs @@ -7,12 +7,12 @@ namespace DotNetOpenAuth.OpenId.Interop { using System; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Runtime.InteropServices; using System.Web; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Extensions.SimpleRegistration; using DotNetOpenAuth.OpenId.RelyingParty; + using Validation; /// <summary> /// The COM type used to provide details of an authentication result to a relying party COM client. diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/Interop/ClaimsResponseShim.cs b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/Interop/ClaimsResponseShim.cs index 2569395..cad4504 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/Interop/ClaimsResponseShim.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/Interop/ClaimsResponseShim.cs @@ -7,10 +7,10 @@ namespace DotNetOpenAuth.OpenId.Interop { using System; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Runtime.InteropServices; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Extensions.SimpleRegistration; + using Validation; /// <summary> /// A struct storing Simple Registration field values describing an @@ -18,7 +18,6 @@ namespace DotNetOpenAuth.OpenId.Interop { /// </summary> [SuppressMessage("Microsoft.Interoperability", "CA1409:ComVisibleTypesShouldBeCreatable", Justification = "It's only creatable on the inside. It must be ComVisible for ASP to see it.")] [ComVisible(true), Obsolete("This class acts as a COM Server and should not be called directly from .NET code.")] - [ContractVerification(true)] public sealed class ClaimsResponseShim { /// <summary> /// The Simple Registration claims response message that this shim wraps. diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/Messages/AssociateDiffieHellmanRelyingPartyResponse.cs b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/Messages/AssociateDiffieHellmanRelyingPartyResponse.cs index 9464582..64e1b30 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/Messages/AssociateDiffieHellmanRelyingPartyResponse.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/Messages/AssociateDiffieHellmanRelyingPartyResponse.cs @@ -6,7 +6,6 @@ namespace DotNetOpenAuth.OpenId.Messages { using System; - using System.Diagnostics.Contracts; using System.Security.Cryptography; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Messaging.Reflection; diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/Messages/AssociateRequestRelyingParty.cs b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/Messages/AssociateRequestRelyingParty.cs index 1ac8488..3555dfb 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/Messages/AssociateRequestRelyingParty.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/Messages/AssociateRequestRelyingParty.cs @@ -7,10 +7,10 @@ namespace DotNetOpenAuth.OpenId.Messages { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.OpenId.RelyingParty; + using Validation; /// <summary> /// Utility methods for requesting associations from the relying party. diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/Messages/IAssociateSuccessfulResponseRelyingParty.cs b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/Messages/IAssociateSuccessfulResponseRelyingParty.cs index 0c81550..a76d59c 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/Messages/IAssociateSuccessfulResponseRelyingParty.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/Messages/IAssociateSuccessfulResponseRelyingParty.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.OpenId.Messages { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; @@ -15,7 +14,6 @@ namespace DotNetOpenAuth.OpenId.Messages { /// <summary> /// A successful association response as it is received by the relying party. /// </summary> - [ContractClass(typeof(IAssociateSuccessfulResponseRelyingPartyContract))] internal interface IAssociateSuccessfulResponseRelyingParty : IProtocolMessage { /// <summary> /// Called to create the Association based on a request previously given by the Relying Party. diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/Messages/IAssociateSuccessfulResponseRelyingPartyContract.cs b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/Messages/IAssociateSuccessfulResponseRelyingPartyContract.cs deleted file mode 100644 index e870c33..0000000 --- a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/Messages/IAssociateSuccessfulResponseRelyingPartyContract.cs +++ /dev/null @@ -1,79 +0,0 @@ -//----------------------------------------------------------------------- -// <copyright file="IAssociateSuccessfulResponseRelyingPartyContract.cs" company="Outercurve Foundation"> -// Copyright (c) Outercurve Foundation. All rights reserved. -// </copyright> -//----------------------------------------------------------------------- - -namespace DotNetOpenAuth { - using System; - using System.Collections.Generic; - using System.Diagnostics.Contracts; - using System.Linq; - using System.Text; - using DotNetOpenAuth.Messaging; - using DotNetOpenAuth.OpenId; - using DotNetOpenAuth.OpenId.Messages; - - /// <summary> - /// Code contract for the <see cref="IAssociateSuccessfulResponseRelyingParty"/> interface. - /// </summary> - [ContractClassFor(typeof(IAssociateSuccessfulResponseRelyingParty))] - internal abstract class IAssociateSuccessfulResponseRelyingPartyContract : IAssociateSuccessfulResponseRelyingParty { - #region IProtocolMessage Members - - /// <summary> - /// Gets the level of protection this message requires. - /// </summary> - Messaging.MessageProtections Messaging.IProtocolMessage.RequiredProtection { - get { throw new NotImplementedException(); } - } - - /// <summary> - /// Gets a value indicating whether this is a direct or indirect message. - /// </summary> - Messaging.MessageTransport Messaging.IProtocolMessage.Transport { - get { throw new NotImplementedException(); } - } - - #endregion - - #region IMessage members - - /// <summary> - /// Gets the version of the protocol or extension this message is prepared to implement. - /// </summary> - Version Messaging.IMessage.Version { - get { throw new NotImplementedException(); } - } - - /// <summary> - /// Gets the extra, non-standard Protocol parameters included in the message. - /// </summary> - IDictionary<string, string> Messaging.IMessage.ExtraData { - get { throw new NotImplementedException(); } - } - - /// <summary> - /// Checks the message state for conformity to the protocol specification - /// and throws an exception if the message is invalid. - /// </summary> - /// <exception cref="ProtocolException">Thrown if the message is invalid.</exception> - void Messaging.IMessage.EnsureValidMessage() { - throw new NotImplementedException(); - } - - #endregion - - /// <summary> - /// Called to create the Association based on a request previously given by the Relying Party. - /// </summary> - /// <param name="request">The prior request for an association.</param> - /// <returns> - /// The created association. - /// </returns> - Association IAssociateSuccessfulResponseRelyingParty.CreateAssociationAtRelyingParty(AssociateRequest request) { - Requires.NotNull(request, "request"); - throw new NotImplementedException(); - } - } -} diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/AssociationManager.cs b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/AssociationManager.cs index e6feac1..dfb307b 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/AssociationManager.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/AssociationManager.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Net; using System.Security; @@ -15,6 +14,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.ChannelElements; using DotNetOpenAuth.OpenId.Messages; + using Validation; /// <summary> /// Manages the establishment, storage and retrieval of associations at the relying party. diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/Associations.cs b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/Associations.cs index f315bf0..44d7d07 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/Associations.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/Associations.cs @@ -13,6 +13,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using System.Diagnostics.Contracts; using System.Linq; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// A dictionary of handle/Association pairs. @@ -23,7 +24,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// can break if the collection is changed by another thread during enumeration. /// </remarks> [DebuggerDisplay("Count = {assocs.Count}")] - [ContractVerification(true)] internal class Associations { /// <summary> /// The lookup table where keys are the association handles and values are the associations themselves. @@ -47,8 +47,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// </remarks> public IEnumerable<Association> Best { get { - Contract.Ensures(Contract.Result<IEnumerable<Association>>() != null); - lock (this.associations) { return this.associations.OrderByDescending(assoc => assoc.Issued); } @@ -61,13 +59,12 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// <param name="association">The association to add to the collection.</param> public void Set(Association association) { Requires.NotNull(association, "association"); - Contract.Ensures(this.Get(association.Handle) == association); lock (this.associations) { this.associations.Remove(association.Handle); // just in case one already exists. this.associations.Add(association); } - Contract.Assume(this.Get(association.Handle) == association); + Assumes.True(this.Get(association.Handle) == association); } /// <summary> diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/AuthenticationRequest.cs b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/AuthenticationRequest.cs index 8af817e..92af297 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/AuthenticationRequest.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/AuthenticationRequest.cs @@ -8,7 +8,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using System; using System.Collections.Generic; using System.Collections.Specialized; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using System.Threading; @@ -18,6 +17,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.ChannelElements; using DotNetOpenAuth.OpenId.Messages; + using Validation; /// <summary> /// Facilitates customization and creation and an authentication request @@ -322,7 +322,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { Requires.NotNull(userSuppliedIdentifier, "userSuppliedIdentifier"); Requires.NotNull(relyingParty, "relyingParty"); Requires.NotNull(realm, "realm"); - Contract.Ensures(Contract.Result<IEnumerable<AuthenticationRequest>>() != null); // Normalize the portion of the return_to path that correlates to the realm for capitalization. // (so that if a web app base path is /MyApp/, but the URL of this request happens to be @@ -430,8 +429,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { ErrorUtilities.VerifyArgumentNotNull(relyingParty, "relyingParty"); ErrorUtilities.VerifyArgumentNotNull(realm, "realm"); ErrorUtilities.VerifyArgumentNotNull(serviceEndpoints, "serviceEndpoints"); - ////Contract.Ensures(Contract.Result<IEnumerable<AuthenticationRequest>>() != null); - + //// // If shared associations are required, then we had better have an association store. ErrorUtilities.VerifyOperation(!relyingParty.SecuritySettings.RequireAssociation || relyingParty.AssociationManager.HasAssociationStore, OpenIdStrings.AssociationStoreRequired); diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/Behaviors/GsaIcamProfile.cs b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/Behaviors/GsaIcamProfile.cs index f05d354..8deed09 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/Behaviors/GsaIcamProfile.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/Behaviors/GsaIcamProfile.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty.Behaviors { using System; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Linq; using DotNetOpenAuth.Configuration; using DotNetOpenAuth.Messaging; diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/CryptoKeyStoreAsRelyingPartyAssociationStore.cs b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/CryptoKeyStoreAsRelyingPartyAssociationStore.cs index 7ad1346..ba69838 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/CryptoKeyStoreAsRelyingPartyAssociationStore.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/CryptoKeyStoreAsRelyingPartyAssociationStore.cs @@ -6,9 +6,9 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using System; - using System.Diagnostics.Contracts; using System.Linq; using DotNetOpenAuth.Messaging.Bindings; + using Validation; /// <summary> /// Wraps a standard <see cref="ICryptoKeyStore"/> so that it behaves as an association store. @@ -25,7 +25,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// <param name="keyStore">The key store.</param> internal CryptoKeyStoreAsRelyingPartyAssociationStore(ICryptoKeyStore keyStore) { Requires.NotNull(keyStore, "keyStore"); - Contract.Ensures(this.keyStore == keyStore); this.keyStore = keyStore; } diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/Extensions/ExtensionsInteropHelper.cs b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/Extensions/ExtensionsInteropHelper.cs index d57fede..fde1462 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/Extensions/ExtensionsInteropHelper.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/Extensions/ExtensionsInteropHelper.cs @@ -8,13 +8,13 @@ namespace DotNetOpenAuth.OpenId.RelyingParty.Extensions { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Linq; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Extensions; using DotNetOpenAuth.OpenId.Extensions.AttributeExchange; using DotNetOpenAuth.OpenId.Extensions.SimpleRegistration; using DotNetOpenAuth.OpenId.Messages; + using Validation; /// <summary> /// A set of methods designed to assist in improving interop across different diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/Extensions/UIUtilities.cs b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/Extensions/UIUtilities.cs index 049430a..a5de08b 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/Extensions/UIUtilities.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/Extensions/UIUtilities.cs @@ -6,10 +6,10 @@ namespace DotNetOpenAuth.OpenId.RelyingParty.Extensions.UI { using System; - using System.Diagnostics.Contracts; using System.Globalization; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.RelyingParty; + using Validation; /// <summary> /// Constants used in implementing support for the UI extension. diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/FailedAuthenticationResponse.cs b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/FailedAuthenticationResponse.cs index 764062e..ef50d10 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/FailedAuthenticationResponse.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/FailedAuthenticationResponse.cs @@ -8,7 +8,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using System; using System.Collections.Generic; using System.Diagnostics; - using System.Diagnostics.Contracts; using System.Globalization; using System.Text; using System.Web; @@ -16,6 +15,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using DotNetOpenAuth.OpenId; using DotNetOpenAuth.OpenId.Messages; using DotNetOpenAuth.OpenId.RelyingParty; + using Validation; /// <summary> /// Wraps a failed authentication response in an <see cref="IAuthenticationResponse"/> instance diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/IRelyingPartyAssociationStore.cs b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/IRelyingPartyAssociationStore.cs index a97449e..96f613c 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/IRelyingPartyAssociationStore.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/IRelyingPartyAssociationStore.cs @@ -6,7 +6,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using System; - using System.Diagnostics.Contracts; + using Validation; /// <summary> /// Stores <see cref="Association"/>s for lookup by their handle, keeping @@ -18,7 +18,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// to not be a performance drain. Because this balance can vary by host, it is the /// responsibility of the host to initiate this cleaning. /// </remarks> - [ContractClass(typeof(IRelyingPartyAssociationStoreContract))] public interface IRelyingPartyAssociationStore { /// <summary> /// Saves an <see cref="Association"/> for later recall. @@ -71,83 +70,4 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// </remarks> bool RemoveAssociation(Uri providerEndpoint, string handle); } - - /// <summary> - /// Code Contract for the <see cref="IRelyingPartyAssociationStore"/> class. - /// </summary> - [ContractClassFor(typeof(IRelyingPartyAssociationStore))] - internal abstract class IRelyingPartyAssociationStoreContract : IRelyingPartyAssociationStore { - #region IAssociationStore Members - - /// <summary> - /// Saves an <see cref="Association"/> for later recall. - /// </summary> - /// <param name="providerEndpoint">The Uri (for relying parties) or Smart/Dumb (for providers).</param> - /// <param name="association">The association to store.</param> - /// <remarks> - /// TODO: what should implementations do on association handle conflict? - /// </remarks> - void IRelyingPartyAssociationStore.StoreAssociation(Uri providerEndpoint, Association association) { - Requires.NotNull(providerEndpoint, "providerEndpoint"); - Requires.NotNull(association, "association"); - throw new NotImplementedException(); - } - - /// <summary> - /// Gets the best association (the one with the longest remaining life) for a given key. - /// </summary> - /// <param name="providerEndpoint">The Uri (for relying parties) or Smart/Dumb (for Providers).</param> - /// <param name="securityRequirements">The security requirements that the returned association must meet.</param> - /// <returns> - /// The requested association, or null if no unexpired <see cref="Association"/>s exist for the given key. - /// </returns> - /// <remarks> - /// In the event that multiple associations exist for the given - /// <paramref name="providerEndpoint"/>, it is important for the - /// implementation for this method to use the <paramref name="securityRequirements"/> - /// to pick the best (highest grade or longest living as the host's policy may dictate) - /// association that fits the security requirements. - /// Associations that are returned that do not meet the security requirements will be - /// ignored and a new association created. - /// </remarks> - Association IRelyingPartyAssociationStore.GetAssociation(Uri providerEndpoint, SecuritySettings securityRequirements) { - Requires.NotNull(providerEndpoint, "providerEndpoint"); - Requires.NotNull(securityRequirements, "securityRequirements"); - throw new NotImplementedException(); - } - - /// <summary> - /// Gets the association for a given key and handle. - /// </summary> - /// <param name="providerEndpoint">The Uri (for relying parties) or Smart/Dumb (for Providers).</param> - /// <param name="handle">The handle of the specific association that must be recalled.</param> - /// <returns> - /// The requested association, or null if no unexpired <see cref="Association"/>s exist for the given key and handle. - /// </returns> - Association IRelyingPartyAssociationStore.GetAssociation(Uri providerEndpoint, string handle) { - Requires.NotNull(providerEndpoint, "providerEndpoint"); - Contract.Requires(!string.IsNullOrEmpty(handle)); - throw new NotImplementedException(); - } - - /// <summary> - /// Removes a specified handle that may exist in the store. - /// </summary> - /// <param name="providerEndpoint">The Uri (for relying parties) or Smart/Dumb (for Providers).</param> - /// <param name="handle">The handle of the specific association that must be deleted.</param> - /// <returns> - /// True if the association existed in this store previous to this call. - /// </returns> - /// <remarks> - /// No exception should be thrown if the association does not exist in the store - /// before this call. - /// </remarks> - bool IRelyingPartyAssociationStore.RemoveAssociation(Uri providerEndpoint, string handle) { - Requires.NotNull(providerEndpoint, "providerEndpoint"); - Contract.Requires(!string.IsNullOrEmpty(handle)); - throw new NotImplementedException(); - } - - #endregion - } } diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/ISetupRequiredAuthenticationResponse.cs b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/ISetupRequiredAuthenticationResponse.cs index 2d23cfc..4fc459f 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/ISetupRequiredAuthenticationResponse.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/ISetupRequiredAuthenticationResponse.cs @@ -6,14 +6,12 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using System; - using System.Diagnostics.Contracts; /// <summary> /// An interface to expose useful properties and functionality for handling /// authentication responses that are returned from Immediate authentication /// requests that require a subsequent request to be made in non-immediate mode. /// </summary> - [ContractClass(typeof(ISetupRequiredAuthenticationResponseContract))] public interface ISetupRequiredAuthenticationResponse { /// <summary> /// Gets the <see cref="Identifier"/> to pass to <see cref="OpenIdRelyingParty.CreateRequest(Identifier)"/> @@ -21,31 +19,4 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// </summary> Identifier UserSuppliedIdentifier { get; } } - - /// <summary> - /// Code contract class for the <see cref="ISetupRequiredAuthenticationResponse"/> type. - /// </summary> - [ContractClassFor(typeof(ISetupRequiredAuthenticationResponse))] - internal abstract class ISetupRequiredAuthenticationResponseContract : ISetupRequiredAuthenticationResponse { - /// <summary> - /// Initializes a new instance of the <see cref="ISetupRequiredAuthenticationResponseContract"/> class. - /// </summary> - protected ISetupRequiredAuthenticationResponseContract() { - } - - #region ISetupRequiredAuthenticationResponse Members - - /// <summary> - /// Gets the <see cref="Identifier"/> to pass to <see cref="OpenIdRelyingParty.CreateRequest(Identifier)"/> - /// in a subsequent authentication attempt. - /// </summary> - Identifier ISetupRequiredAuthenticationResponse.UserSuppliedIdentifier { - get { - Requires.ValidState(((IAuthenticationResponse)this).Status == AuthenticationStatus.SetupRequired, OpenIdStrings.OperationOnlyValidForSetupRequiredState); - throw new System.NotImplementedException(); - } - } - - #endregion - } } diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/NegativeAuthenticationResponse.cs b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/NegativeAuthenticationResponse.cs index 5837449..bf52060 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/NegativeAuthenticationResponse.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/NegativeAuthenticationResponse.cs @@ -7,11 +7,11 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Web; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Messages; + using Validation; /// <summary> /// Wraps a negative assertion response in an <see cref="IAuthenticationResponse"/> instance diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/OpenIdRelyingParty.cs b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/OpenIdRelyingParty.cs index 6264041..2177591 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/OpenIdRelyingParty.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/OpenIdRelyingParty.cs @@ -11,7 +11,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using System.Collections.Specialized; using System.ComponentModel; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Globalization; using System.Linq; using System.Net; @@ -24,6 +23,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using DotNetOpenAuth.OpenId.ChannelElements; using DotNetOpenAuth.OpenId.Extensions; using DotNetOpenAuth.OpenId.Messages; + using Validation; /// <summary> /// A delegate that decides whether a given OpenID Provider endpoint may be @@ -40,7 +40,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// Provides the programmatic facilities to act as an OpenID relying party. /// </summary> [SuppressMessage("Microsoft.Maintainability", "CA1506:AvoidExcessiveClassCoupling", Justification = "Unavoidable")] - [ContractVerification(true)] public class OpenIdRelyingParty : IDisposable, IOpenIdHost { /// <summary> /// The name of the key to use in the HttpApplication cache to store the @@ -114,7 +113,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { // If we are a smart-mode RP (supporting associations), then we MUST also be // capable of storing nonces to prevent replay attacks. // If we're a dumb-mode RP, then 2.0 OPs are responsible for preventing replays. - Requires.True(cryptoKeyStore == null || nonceStore != null, null, OpenIdStrings.AssociationStoreRequiresNonceStore); + Requires.That(cryptoKeyStore == null || nonceStore != null, null, OpenIdStrings.AssociationStoreRequiresNonceStore); this.securitySettings = OpenIdElement.Configuration.RelyingParty.SecuritySettings.CreateSecuritySettings(); @@ -160,8 +159,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { [EditorBrowsable(EditorBrowsableState.Advanced)] public static IOpenIdApplicationStore HttpApplicationStore { get { - Contract.Ensures(Contract.Result<IOpenIdApplicationStore>() != null); - HttpContext context = HttpContext.Current; ErrorUtilities.VerifyOperation(context != null, Strings.StoreRequiredWhenNoHttpContextAvailable, typeof(IOpenIdApplicationStore).Name); var store = (IOpenIdApplicationStore)context.Application[ApplicationStoreKey]; @@ -200,7 +197,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// </summary> public RelyingPartySecuritySettings SecuritySettings { get { - Contract.Ensures(Contract.Result<RelyingPartySecuritySettings>() != null); return this.securitySettings; } @@ -347,7 +343,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { Requires.NotNull(userSuppliedIdentifier, "userSuppliedIdentifier"); Requires.NotNull(realm, "realm"); Requires.NotNull(returnToUrl, "returnToUrl"); - Contract.Ensures(Contract.Result<IAuthenticationRequest>() != null); try { return this.CreateRequests(userSuppliedIdentifier, realm, returnToUrl).First(); } catch (InvalidOperationException ex) { @@ -379,10 +374,9 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { public IAuthenticationRequest CreateRequest(Identifier userSuppliedIdentifier, Realm realm) { Requires.NotNull(userSuppliedIdentifier, "userSuppliedIdentifier"); Requires.NotNull(realm, "realm"); - Contract.Ensures(Contract.Result<IAuthenticationRequest>() != null); try { var result = this.CreateRequests(userSuppliedIdentifier, realm).First(); - Contract.Assume(result != null); + Assumes.True(result != null); return result; } catch (InvalidOperationException ex) { throw ErrorUtilities.Wrap(ex, OpenIdStrings.OpenIdEndpointNotFound); @@ -407,7 +401,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// <exception cref="InvalidOperationException">Thrown if <see cref="HttpContext.Current">HttpContext.Current</see> == <c>null</c>.</exception> public IAuthenticationRequest CreateRequest(Identifier userSuppliedIdentifier) { Requires.NotNull(userSuppliedIdentifier, "userSuppliedIdentifier"); - Contract.Ensures(Contract.Result<IAuthenticationRequest>() != null); try { return this.CreateRequests(userSuppliedIdentifier).First(); } catch (InvalidOperationException ex) { @@ -446,7 +439,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { Requires.NotNull(userSuppliedIdentifier, "userSuppliedIdentifier"); Requires.NotNull(realm, "realm"); Requires.NotNull(returnToUrl, "returnToUrl"); - Contract.Ensures(Contract.Result<IEnumerable<IAuthenticationRequest>>() != null); return AuthenticationRequest.Create(userSuppliedIdentifier, this, realm, returnToUrl, true).Cast<IAuthenticationRequest>().CacheGeneratedResults(); } @@ -477,15 +469,13 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// </remarks> /// <exception cref="InvalidOperationException">Thrown if <see cref="HttpContext.Current">HttpContext.Current</see> == <c>null</c>.</exception> public IEnumerable<IAuthenticationRequest> CreateRequests(Identifier userSuppliedIdentifier, Realm realm) { - Requires.ValidState(HttpContext.Current != null && HttpContext.Current.Request != null, MessagingStrings.HttpContextRequired); + RequiresEx.ValidState(HttpContext.Current != null && HttpContext.Current.Request != null, MessagingStrings.HttpContextRequired); Requires.NotNull(userSuppliedIdentifier, "userSuppliedIdentifier"); Requires.NotNull(realm, "realm"); - Contract.Ensures(Contract.Result<IEnumerable<IAuthenticationRequest>>() != null); // This next code contract is a BAD idea, because it causes each authentication request to be generated // at least an extra time. - ////Contract.Ensures(Contract.ForAll(Contract.Result<IEnumerable<IAuthenticationRequest>>(), el => el != null)); - + //// // Build the return_to URL UriBuilder returnTo = new UriBuilder(this.Channel.GetRequestFromContext().GetPublicFacingUrl()); @@ -526,8 +516,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// <exception cref="InvalidOperationException">Thrown if <see cref="HttpContext.Current">HttpContext.Current</see> == <c>null</c>.</exception> public IEnumerable<IAuthenticationRequest> CreateRequests(Identifier userSuppliedIdentifier) { Requires.NotNull(userSuppliedIdentifier, "userSuppliedIdentifier"); - Requires.ValidState(HttpContext.Current != null && HttpContext.Current.Request != null, MessagingStrings.HttpContextRequired); - Contract.Ensures(Contract.Result<IEnumerable<IAuthenticationRequest>>() != null); + RequiresEx.ValidState(HttpContext.Current != null && HttpContext.Current.Request != null, MessagingStrings.HttpContextRequired); return this.CreateRequests(userSuppliedIdentifier, Realm.AutoDetect); } @@ -540,7 +529,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// <para>Requires an <see cref="HttpContext.Current">HttpContext.Current</see> context.</para> /// </remarks> public IAuthenticationResponse GetResponse() { - Requires.ValidState(HttpContext.Current != null && HttpContext.Current.Request != null, MessagingStrings.HttpContextRequired); + RequiresEx.ValidState(HttpContext.Current != null && HttpContext.Current.Request != null, MessagingStrings.HttpContextRequired); return this.GetResponse(this.Channel.GetRequestFromContext()); } @@ -593,8 +582,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// <para>Requires an <see cref="HttpContext.Current">HttpContext.Current</see> context.</para> /// </remarks> public OutgoingWebResponse ProcessResponseFromPopup() { - Requires.ValidState(HttpContext.Current != null && HttpContext.Current.Request != null, MessagingStrings.HttpContextRequired); - Contract.Ensures(Contract.Result<OutgoingWebResponse>() != null); + RequiresEx.ValidState(HttpContext.Current != null && HttpContext.Current.Request != null, MessagingStrings.HttpContextRequired); return this.ProcessResponseFromPopup(this.Channel.GetRequestFromContext()); } @@ -606,7 +594,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// <returns>The HTTP response to send to this HTTP request.</returns> public OutgoingWebResponse ProcessResponseFromPopup(HttpRequestBase request) { Requires.NotNull(request, "request"); - Contract.Ensures(Contract.Result<OutgoingWebResponse>() != null); return this.ProcessResponseFromPopup(request, null); } @@ -693,7 +680,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { [SuppressMessage("Microsoft.Naming", "CA2204:Literals should be spelled correctly", MessageId = "OpenID", Justification = "real word"), SuppressMessage("Microsoft.Naming", "CA2204:Literals should be spelled correctly", MessageId = "iframe", Justification = "Code contracts")] internal OutgoingWebResponse ProcessResponseFromPopup(HttpRequestBase request, Action<AuthenticationStatus> callback) { Requires.NotNull(request, "request"); - Contract.Ensures(Contract.Result<OutgoingWebResponse>() != null); string extensionsJson = null; var authResponse = this.NonVerifyingRelyingParty.GetResponse(); diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/PositiveAnonymousResponse.cs b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/PositiveAnonymousResponse.cs index 3f4692a..6ec7d04 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/PositiveAnonymousResponse.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/PositiveAnonymousResponse.cs @@ -7,11 +7,11 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Web; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Messages; + using Validation; /// <summary> /// Wraps an extension-only response from the OP in an <see cref="IAuthenticationResponse"/> instance diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/PositiveAuthenticationResponse.cs b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/PositiveAuthenticationResponse.cs index 2a06c9b..509eb60 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/PositiveAuthenticationResponse.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/PositiveAuthenticationResponse.cs @@ -7,11 +7,11 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using System; using System.Diagnostics; - using System.Diagnostics.Contracts; using System.Linq; using System.Web; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Messages; + using Validation; /// <summary> /// Wraps a positive assertion response in an <see cref="IAuthenticationResponse"/> instance diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/PositiveAuthenticationResponseSnapshot.cs b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/PositiveAuthenticationResponseSnapshot.cs index f5cf8ad..0e10087 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/PositiveAuthenticationResponseSnapshot.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty/OpenId/RelyingParty/PositiveAuthenticationResponseSnapshot.cs @@ -7,11 +7,11 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Text; using System.Web; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Messages; + using Validation; /// <summary> /// A serializable snapshot of a verified authentication message. diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty/Properties/AssemblyInfo.cs b/src/DotNetOpenAuth.OpenId.RelyingParty/Properties/AssemblyInfo.cs index 4d35e76..e3bbc74 100644 --- a/src/DotNetOpenAuth.OpenId.RelyingParty/Properties/AssemblyInfo.cs +++ b/src/DotNetOpenAuth.OpenId.RelyingParty/Properties/AssemblyInfo.cs @@ -7,7 +7,6 @@ // We DON'T put an AssemblyVersionAttribute in here because it is generated in the build. using System; -using System.Diagnostics.Contracts; using System.Net; using System.Reflection; using System.Resources; @@ -31,8 +30,6 @@ using System.Web.UI; // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("7d73990c-47c0-4256-9f20-a893add9e289")] -[assembly: ContractVerification(true)] - #if StrongNameSigned // See comment at top of this file. We need this so that strong-naming doesn't // keep this assembly from being useful to shared host (medium trust) web sites. diff --git a/src/DotNetOpenAuth.OpenId.RelyingParty/packages.config b/src/DotNetOpenAuth.OpenId.RelyingParty/packages.config new file mode 100644 index 0000000..10eec89 --- /dev/null +++ b/src/DotNetOpenAuth.OpenId.RelyingParty/packages.config @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="Validation" version="2.0.0.12319" targetFramework="net40" /> +</packages>
\ No newline at end of file diff --git a/src/DotNetOpenAuth.OpenId.UI/DotNetOpenAuth.OpenId.UI.csproj b/src/DotNetOpenAuth.OpenId.UI/DotNetOpenAuth.OpenId.UI.csproj index f2a1cf5..86658bd 100644 --- a/src/DotNetOpenAuth.OpenId.UI/DotNetOpenAuth.OpenId.UI.csproj +++ b/src/DotNetOpenAuth.OpenId.UI/DotNetOpenAuth.OpenId.UI.csproj @@ -37,6 +37,15 @@ <Name>Org.Mentalis.Security.Cryptography</Name> </ProjectReference> </ItemGroup> + <ItemGroup> + <Reference Include="Validation, Version=2.0.0.0, Culture=neutral, PublicKeyToken=2fc06f0d701809a7, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\Validation.2.0.0.12319\lib\portable-windows8+net40+sl5+windowsphone8\Validation.dll</HintPath> + </Reference> + </ItemGroup> + <ItemGroup> + <None Include="packages.config" /> + </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(ProjectRoot)tools\DotNetOpenAuth.targets" /> <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))\EnlistmentInfo.targets" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))' != '' " /> diff --git a/src/DotNetOpenAuth.OpenId.UI/Properties/AssemblyInfo.cs b/src/DotNetOpenAuth.OpenId.UI/Properties/AssemblyInfo.cs index a488d1d..5a3a8a4 100644 --- a/src/DotNetOpenAuth.OpenId.UI/Properties/AssemblyInfo.cs +++ b/src/DotNetOpenAuth.OpenId.UI/Properties/AssemblyInfo.cs @@ -7,7 +7,6 @@ // We DON'T put an AssemblyVersionAttribute in here because it is generated in the build. using System; -using System.Diagnostics.Contracts; using System.Net; using System.Reflection; using System.Resources; @@ -33,8 +32,6 @@ using System.Web.UI; // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("7d73990c-47c0-4256-9f20-a893add9e289")] -[assembly: ContractVerification(true)] - #if StrongNameSigned // See comment at top of this file. We need this so that strong-naming doesn't // keep this assembly from being useful to shared host (medium trust) web sites. diff --git a/src/DotNetOpenAuth.OpenId.UI/XrdsPublisher.cs b/src/DotNetOpenAuth.OpenId.UI/XrdsPublisher.cs index 87e3a8b..640bee7 100644 --- a/src/DotNetOpenAuth.OpenId.UI/XrdsPublisher.cs +++ b/src/DotNetOpenAuth.OpenId.UI/XrdsPublisher.cs @@ -9,7 +9,6 @@ namespace DotNetOpenAuth { using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Drawing.Design; using System.Text; using System.Web; @@ -211,7 +210,7 @@ namespace DotNetOpenAuth { /// <param name="writer">The <see cref="T:System.Web.UI.HtmlTextWriter"/> object that receives the server control content.</param> [SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "System.Diagnostics.Contracts.__ContractsRuntime.Assume(System.Boolean,System.String,System.String)", Justification = "Code contracts"), SuppressMessage("Microsoft.Usage", "CA2234:PassSystemUriObjectsInsteadOfStrings", Justification = "Uri(Uri, string) accepts second arguments that Uri(Uri, new Uri(string)) does not that we must support.")] protected override void Render(HtmlTextWriter writer) { - Contract.Assume(writer != null, "Missing contract."); + Assumes.True(writer != null, "Missing contract."); if (this.Enabled && this.Visible && !string.IsNullOrEmpty(this.XrdsUrl)) { Uri xrdsAddress = new Uri(MessagingUtilities.GetRequestUrlFromContext(), Page.Response.ApplyAppPathModifier(this.XrdsUrl)); if ((this.XrdsAdvertisement & XrdsUrlLocations.HttpHeader) != 0) { diff --git a/src/DotNetOpenAuth.OpenId.UI/packages.config b/src/DotNetOpenAuth.OpenId.UI/packages.config new file mode 100644 index 0000000..10eec89 --- /dev/null +++ b/src/DotNetOpenAuth.OpenId.UI/packages.config @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="Validation" version="2.0.0.12319" targetFramework="net40" /> +</packages>
\ No newline at end of file diff --git a/src/DotNetOpenAuth.OpenId/Configuration/AssociationTypeCollection.cs b/src/DotNetOpenAuth.OpenId/Configuration/AssociationTypeCollection.cs index 419a76a..384497c 100644 --- a/src/DotNetOpenAuth.OpenId/Configuration/AssociationTypeCollection.cs +++ b/src/DotNetOpenAuth.OpenId/Configuration/AssociationTypeCollection.cs @@ -7,12 +7,10 @@ namespace DotNetOpenAuth.Configuration { using System.Collections.Generic; using System.Configuration; - using System.Diagnostics.Contracts; /// <summary> /// Describes a collection of association type sub-elements in a .config file. /// </summary> - [ContractVerification(true)] internal class AssociationTypeCollection : ConfigurationElementCollection, IEnumerable<AssociationTypeElement> { /// <summary> /// Initializes a new instance of the <see cref="AssociationTypeCollection"/> class. diff --git a/src/DotNetOpenAuth.OpenId/Configuration/AssociationTypeElement.cs b/src/DotNetOpenAuth.OpenId/Configuration/AssociationTypeElement.cs index 32c1cc9..c64913d 100644 --- a/src/DotNetOpenAuth.OpenId/Configuration/AssociationTypeElement.cs +++ b/src/DotNetOpenAuth.OpenId/Configuration/AssociationTypeElement.cs @@ -8,7 +8,6 @@ namespace DotNetOpenAuth.Configuration { using System; using System.Collections.Generic; using System.Configuration; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; @@ -16,7 +15,6 @@ namespace DotNetOpenAuth.Configuration { /// Describes an association type and its maximum lifetime as an element /// in a .config file. /// </summary> - [ContractVerification(true)] internal class AssociationTypeElement : ConfigurationElement { /// <summary> /// The name of the attribute that stores the association type. diff --git a/src/DotNetOpenAuth.OpenId/Configuration/OpenIdElement.cs b/src/DotNetOpenAuth.OpenId/Configuration/OpenIdElement.cs index c43a3ad..6c6ad10 100644 --- a/src/DotNetOpenAuth.OpenId/Configuration/OpenIdElement.cs +++ b/src/DotNetOpenAuth.OpenId/Configuration/OpenIdElement.cs @@ -8,14 +8,13 @@ namespace DotNetOpenAuth.Configuration { using System; using System.Collections.Generic; using System.Configuration; - using System.Diagnostics.Contracts; using DotNetOpenAuth.OpenId.ChannelElements; using DotNetOpenAuth.OpenId.Messages; + using Validation; /// <summary> /// Represents the <openid> element in the host's .config file. /// </summary> - [ContractVerification(true)] internal class OpenIdElement : ConfigurationSection { /// <summary> /// The name of the section under which this library's settings must be found. @@ -63,7 +62,6 @@ namespace DotNetOpenAuth.Configuration { /// </summary> public static OpenIdElement Configuration { get { - Contract.Ensures(Contract.Result<OpenIdElement>() != null); return (OpenIdElement)ConfigurationManager.GetSection(SectionName) ?? new OpenIdElement(); } } @@ -80,14 +78,13 @@ namespace DotNetOpenAuth.Configuration { [PositiveTimeSpanValidator] internal TimeSpan MaxAuthenticationTime { get { - Contract.Ensures(Contract.Result<TimeSpan>() > TimeSpan.Zero); TimeSpan result = (TimeSpan)this[MaxAuthenticationTimePropertyName]; - Contract.Assume(result > TimeSpan.Zero); // our PositiveTimeSpanValidator should take care of this + Assumes.True(result > TimeSpan.Zero); // our PositiveTimeSpanValidator should take care of this return result; } set { - Requires.InRange(value > TimeSpan.Zero, "value"); + Requires.Range(value > TimeSpan.Zero, "value"); this[MaxAuthenticationTimePropertyName] = value; } } diff --git a/src/DotNetOpenAuth.OpenId/Configuration/OpenIdProviderElement.cs b/src/DotNetOpenAuth.OpenId/Configuration/OpenIdProviderElement.cs index df93d3b..dfa5a86 100644 --- a/src/DotNetOpenAuth.OpenId/Configuration/OpenIdProviderElement.cs +++ b/src/DotNetOpenAuth.OpenId/Configuration/OpenIdProviderElement.cs @@ -6,14 +6,12 @@ namespace DotNetOpenAuth.Configuration { using System.Configuration; - using System.Diagnostics.Contracts; using DotNetOpenAuth.OpenId; using DotNetOpenAuth.OpenId.Provider; /// <summary> /// The section in the .config file that allows customization of OpenID Provider behaviors. /// </summary> - [ContractVerification(true)] internal class OpenIdProviderElement : ConfigurationElement { /// <summary> /// The name of the <provider> sub-element. diff --git a/src/DotNetOpenAuth.OpenId/Configuration/OpenIdProviderSecuritySettingsElement.cs b/src/DotNetOpenAuth.OpenId/Configuration/OpenIdProviderSecuritySettingsElement.cs index f003900..3579faa 100644 --- a/src/DotNetOpenAuth.OpenId/Configuration/OpenIdProviderSecuritySettingsElement.cs +++ b/src/DotNetOpenAuth.OpenId/Configuration/OpenIdProviderSecuritySettingsElement.cs @@ -6,14 +6,12 @@ namespace DotNetOpenAuth.Configuration { using System.Configuration; - using System.Diagnostics.Contracts; using DotNetOpenAuth.OpenId; using DotNetOpenAuth.OpenId.Provider; /// <summary> /// Represents the .config file element that allows for setting the security policies of the Provider. /// </summary> - [ContractVerification(true)] internal class OpenIdProviderSecuritySettingsElement : ConfigurationElement { /// <summary> /// Gets the name of the @protectDownlevelReplayAttacks attribute. @@ -111,7 +109,6 @@ namespace DotNetOpenAuth.Configuration { [ConfigurationCollection(typeof(AssociationTypeCollection))] public AssociationTypeCollection AssociationLifetimes { get { - Contract.Ensures(Contract.Result<AssociationTypeCollection>() != null); return (AssociationTypeCollection)this[AssociationsConfigName] ?? new AssociationTypeCollection(); } @@ -144,7 +141,7 @@ namespace DotNetOpenAuth.Configuration { settings.UnsolicitedAssertionVerification = this.UnsolicitedAssertionVerification; settings.EncodeAssociationSecretsInHandles = this.EncodeAssociationSecretsInHandles; foreach (AssociationTypeElement element in this.AssociationLifetimes) { - Contract.Assume(element != null); + Assumes.True(element != null); settings.AssociationLifetimes.Add(element.AssociationType, element.MaximumLifetime); } diff --git a/src/DotNetOpenAuth.OpenId/Configuration/OpenIdRelyingPartyElement.cs b/src/DotNetOpenAuth.OpenId/Configuration/OpenIdRelyingPartyElement.cs index 8af1129..681ba38 100644 --- a/src/DotNetOpenAuth.OpenId/Configuration/OpenIdRelyingPartyElement.cs +++ b/src/DotNetOpenAuth.OpenId/Configuration/OpenIdRelyingPartyElement.cs @@ -7,14 +7,12 @@ namespace DotNetOpenAuth.Configuration { using System; using System.Configuration; - using System.Diagnostics.Contracts; using DotNetOpenAuth.OpenId; using DotNetOpenAuth.OpenId.RelyingParty; /// <summary> /// The section in the .config file that allows customization of OpenID Relying Party behaviors. /// </summary> - [ContractVerification(true)] internal class OpenIdRelyingPartyElement : ConfigurationElement { /// <summary> /// The name of the custom store sub-element. diff --git a/src/DotNetOpenAuth.OpenId/Configuration/OpenIdRelyingPartySecuritySettingsElement.cs b/src/DotNetOpenAuth.OpenId/Configuration/OpenIdRelyingPartySecuritySettingsElement.cs index f0d8942..a2e2c34 100644 --- a/src/DotNetOpenAuth.OpenId/Configuration/OpenIdRelyingPartySecuritySettingsElement.cs +++ b/src/DotNetOpenAuth.OpenId/Configuration/OpenIdRelyingPartySecuritySettingsElement.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.Configuration { using System; using System.Configuration; - using System.Diagnostics.Contracts; using DotNetOpenAuth.OpenId; using DotNetOpenAuth.OpenId.RelyingParty; @@ -238,8 +237,6 @@ namespace DotNetOpenAuth.Configuration { /// </summary> /// <returns>The newly created security settings object.</returns> public RelyingPartySecuritySettings CreateSecuritySettings() { - Contract.Ensures(Contract.Result<RelyingPartySecuritySettings>() != null); - RelyingPartySecuritySettings settings = new RelyingPartySecuritySettings(); settings.RequireSsl = this.RequireSsl; settings.RequireDirectedIdentity = this.RequireDirectedIdentity; diff --git a/src/DotNetOpenAuth.OpenId/DotNetOpenAuth.OpenId.csproj b/src/DotNetOpenAuth.OpenId/DotNetOpenAuth.OpenId.csproj index 75bd113..09beb3f 100644 --- a/src/DotNetOpenAuth.OpenId/DotNetOpenAuth.OpenId.csproj +++ b/src/DotNetOpenAuth.OpenId/DotNetOpenAuth.OpenId.csproj @@ -40,7 +40,6 @@ </Compile> <Compile Include="OpenId\Behaviors\GsaIcamProfileBase.cs" /> <Compile Include="OpenId\ChannelElements\BackwardCompatibilityBindingElement.cs" /> - <Compile Include="OpenId\ChannelElements\SigningBindingElementContract.cs" /> <Compile Include="OpenId\ChannelElements\ExtensionsBindingElement.cs" /> <Compile Include="OpenId\ChannelElements\IOpenIdExtensionFactory.cs" /> <Compile Include="OpenId\ChannelElements\ITamperResistantOpenIdMessage.cs" /> @@ -50,7 +49,6 @@ <Compile Include="OpenId\ChannelElements\OpenIdChannel.cs" /> <Compile Include="OpenId\ChannelElements\ReturnToSignatureBindingElement.cs" /> <Compile Include="OpenId\ChannelElements\SkipSecurityBindingElement.cs" /> - <Compile Include="OpenId\AssociationContract.cs" /> <Compile Include="OpenId\Extensions\AliasManager.cs" /> <Compile Include="OpenId\Extensions\AttributeExchange\AttributeRequest.cs" /> <Compile Include="OpenId\Extensions\AttributeExchange\AttributeValues.cs" /> @@ -89,7 +87,6 @@ <Compile Include="OpenId\Extensions\UI\UIRequest.cs" /> <Compile Include="OpenId\Extensions\UI\UIUtilities.cs" /> <Compile Include="OpenId\Identifier.cs" /> - <Compile Include="OpenId\IdentifierContract.cs" /> <Compile Include="OpenId\Extensions\OpenIdExtensionsInteropHelper.cs" /> <Compile Include="OpenId\IdentifierDiscoveryResult.cs" /> <Compile Include="OpenId\IIdentifierDiscoveryService.cs" /> @@ -104,13 +101,11 @@ <Compile Include="OpenId\Provider\RelyingPartyDiscoveryResult.cs" /> <Compile Include="OpenId\RelyingParty\AuthenticationStatus.cs" /> <Compile Include="OpenId\RelyingParty\IAuthenticationRequest.cs" /> - <Compile Include="OpenId\RelyingParty\IAuthenticationRequestContract.cs" /> <Compile Include="OpenId\RelyingParty\IAuthenticationResponse.cs" /> <Compile Include="OpenId\RelyingParty\IRelyingPartyBehavior.cs" /> <Compile Include="OpenId\Messages\CheckAuthenticationRequest.cs" /> <Compile Include="OpenId\Messages\CheckAuthenticationResponse.cs" /> <Compile Include="OpenId\Messages\CheckIdRequest.cs" /> - <Compile Include="OpenId\Messages\AssociateSuccessfulResponseContract.cs" /> <Compile Include="OpenId\Messages\IErrorMessage.cs" /> <Compile Include="OpenId\Messages\IndirectResponseBase.cs" /> <Compile Include="OpenId\Messages\IndirectSignedResponse.cs" /> @@ -186,6 +181,15 @@ <Name>Org.Mentalis.Security.Cryptography</Name> </ProjectReference> </ItemGroup> + <ItemGroup> + <Reference Include="Validation, Version=2.0.0.0, Culture=neutral, PublicKeyToken=2fc06f0d701809a7, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\Validation.2.0.0.12319\lib\portable-windows8+net40+sl5+windowsphone8\Validation.dll</HintPath> + </Reference> + </ItemGroup> + <ItemGroup> + <None Include="packages.config" /> + </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(ProjectRoot)tools\DotNetOpenAuth.targets" /> <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))\EnlistmentInfo.targets" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))' != '' " /> diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Association.cs b/src/DotNetOpenAuth.OpenId/OpenId/Association.cs index a0f5bae..502afb3 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Association.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Association.cs @@ -8,12 +8,12 @@ namespace DotNetOpenAuth.OpenId { using System; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.IO; using System.Security.Cryptography; using System.Text; using DotNetOpenAuth.Configuration; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// Stores a secret used in signing and verifying messages. @@ -24,8 +24,6 @@ namespace DotNetOpenAuth.OpenId { /// (dumb associations). /// </remarks> [DebuggerDisplay("Handle = {Handle}, Expires = {Expires}")] - [ContractVerification(true)] - [ContractClass(typeof(AssociationContract))] public abstract class Association { /// <summary> /// Initializes a new instance of the <see cref="Association"/> class. @@ -37,10 +35,9 @@ namespace DotNetOpenAuth.OpenId { protected Association(string handle, byte[] secret, TimeSpan totalLifeLength, DateTime issued) { Requires.NotNullOrEmpty(handle, "handle"); Requires.NotNull(secret, "secret"); - Requires.InRange(totalLifeLength > TimeSpan.Zero, "totalLifeLength"); - Requires.True(issued.Kind == DateTimeKind.Utc, "issued"); - Requires.InRange(issued <= DateTime.UtcNow, "issued"); - Contract.Ensures(this.TotalLifeLength == totalLifeLength); + Requires.Range(totalLifeLength > TimeSpan.Zero, "totalLifeLength"); + Requires.That(issued.Kind == DateTimeKind.Utc, "issued", "UTC time required."); + Requires.Range(issued <= DateTime.UtcNow, "issued"); this.Handle = handle; this.SecretKey = secret; @@ -93,7 +90,6 @@ namespace DotNetOpenAuth.OpenId { /// </summary> protected internal static TimeSpan DumbSecretLifetime { get { - Contract.Ensures(Contract.Result<TimeSpan>() > TimeSpan.Zero); return OpenIdElement.Configuration.MaxAuthenticationTime; } } @@ -104,7 +100,6 @@ namespace DotNetOpenAuth.OpenId { /// </summary> protected internal long SecondsTillExpiration { get { - Contract.Ensures(Contract.Result<long>() >= 0); return Math.Max(0, (long)this.TimeTillExpiration.TotalSeconds); } } @@ -130,7 +125,6 @@ namespace DotNetOpenAuth.OpenId { /// </remarks> private static TimeSpan MinimumUsefulAssociationLifetime { get { - Contract.Ensures(Contract.Result<TimeSpan>() > TimeSpan.Zero); return OpenIdElement.Configuration.MaxAuthenticationTime; } } @@ -164,7 +158,6 @@ namespace DotNetOpenAuth.OpenId { public static Association Deserialize(string handle, DateTime expiresUtc, byte[] privateData) { Requires.NotNullOrEmpty(handle, "handle"); Requires.NotNull(privateData, "privateData"); - Contract.Ensures(Contract.Result<Association>() != null); expiresUtc = expiresUtc.ToUniversalTimeSafe(); TimeSpan remainingLifeLength = expiresUtc - DateTime.UtcNow; @@ -191,8 +184,6 @@ namespace DotNetOpenAuth.OpenId { /// in this byte array, as they are useful for fast database lookup and are persisted separately. /// </remarks> public byte[] SerializePrivateData() { - Contract.Ensures(Contract.Result<byte[]>() != null); - // We may want to encrypt this secret using the machine.config private key, // and add data regarding which Association derivative will need to be // re-instantiated on deserialization. diff --git a/src/DotNetOpenAuth.OpenId/OpenId/AssociationContract.cs b/src/DotNetOpenAuth.OpenId/OpenId/AssociationContract.cs deleted file mode 100644 index e04a332..0000000 --- a/src/DotNetOpenAuth.OpenId/OpenId/AssociationContract.cs +++ /dev/null @@ -1,65 +0,0 @@ -//----------------------------------------------------------------------- -// <copyright file="AssociationContract.cs" company="Outercurve Foundation"> -// Copyright (c) Outercurve Foundation. All rights reserved. -// </copyright> -//----------------------------------------------------------------------- - -namespace DotNetOpenAuth.OpenId { - using System; - using System.Diagnostics; - using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; - using System.IO; - using System.Security.Cryptography; - using System.Text; - using DotNetOpenAuth.Configuration; - using DotNetOpenAuth.Messaging; - - /// <summary> - /// Code contract for the <see cref="Association"/> class. - /// </summary> - [ContractClassFor(typeof(Association))] - internal abstract class AssociationContract : Association { - /// <summary> - /// Prevents a default instance of the <see cref="AssociationContract"/> class from being created. - /// </summary> - private AssociationContract() - : base(null, null, TimeSpan.Zero, DateTime.Now) { - } - - /// <summary> - /// Gets the length (in bits) of the hash this association creates when signing. - /// </summary> - public override int HashBitLength { - get { - Contract.Ensures(Contract.Result<int>() > 0); - throw new NotImplementedException(); - } - } - - /// <summary> - /// The string to pass as the assoc_type value in the OpenID protocol. - /// </summary> - /// <param name="protocol">The protocol version of the message that the assoc_type value will be included in.</param> - /// <returns> - /// The value that should be used for the openid.assoc_type parameter. - /// </returns> - [Pure] - internal override string GetAssociationType(Protocol protocol) { - Requires.NotNull(protocol, "protocol"); - throw new NotImplementedException(); - } - - /// <summary> - /// Returns the specific hash algorithm used for message signing. - /// </summary> - /// <returns> - /// The hash algorithm used for message signing. - /// </returns> - [Pure] - protected override HashAlgorithm CreateHasher() { - Contract.Ensures(Contract.Result<HashAlgorithm>() != null); - throw new NotImplementedException(); - } - } -} diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Behaviors/GsaIcamProfileBase.cs b/src/DotNetOpenAuth.OpenId/OpenId/Behaviors/GsaIcamProfileBase.cs index c7352c8..a51e844 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Behaviors/GsaIcamProfileBase.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Behaviors/GsaIcamProfileBase.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.OpenId.Behaviors { using System; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Linq; using DotNetOpenAuth.Configuration; using DotNetOpenAuth.Messaging; diff --git a/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/ExtensionsBindingElement.cs b/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/ExtensionsBindingElement.cs index 46d08a3..f24c8b4 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/ExtensionsBindingElement.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/ExtensionsBindingElement.cs @@ -8,13 +8,13 @@ namespace DotNetOpenAuth.OpenId.ChannelElements { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Messaging.Reflection; using DotNetOpenAuth.OpenId.Extensions; using DotNetOpenAuth.OpenId.Messages; + using Validation; /// <summary> /// The binding element that serializes/deserializes OpenID extensions to/from @@ -238,7 +238,7 @@ namespace DotNetOpenAuth.OpenId.ChannelElements { /// A dictionary of message parts, including only signed parts when appropriate. /// </returns> private IDictionary<string, string> GetExtensionsDictionary(IProtocolMessage message, bool ignoreUnsigned) { - Requires.ValidState(this.Channel != null); + RequiresEx.ValidState(this.Channel != null); IndirectSignedResponse signedResponse = message as IndirectSignedResponse; if (signedResponse != null && ignoreUnsigned) { diff --git a/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/KeyValueFormEncoding.cs b/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/KeyValueFormEncoding.cs index cdd1085..6ad66c0 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/KeyValueFormEncoding.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/KeyValueFormEncoding.cs @@ -8,11 +8,11 @@ namespace DotNetOpenAuth.OpenId.ChannelElements { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Globalization; using System.IO; using System.Text; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// Indicates the level of strictness to require when decoding a diff --git a/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/OpenIdChannel.cs b/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/OpenIdChannel.cs index 6b88b3f..5a6b8bb 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/OpenIdChannel.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/OpenIdChannel.cs @@ -8,7 +8,6 @@ namespace DotNetOpenAuth.OpenId.ChannelElements { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Globalization; using System.IO; using System.Linq; @@ -18,11 +17,11 @@ namespace DotNetOpenAuth.OpenId.ChannelElements { using DotNetOpenAuth.Messaging.Bindings; using DotNetOpenAuth.OpenId.Extensions; using DotNetOpenAuth.OpenId.Messages; + using Validation; /// <summary> /// A channel that knows how to send and receive OpenID messages. /// </summary> - [ContractVerification(true)] internal class OpenIdChannel : Channel { /// <summary> /// The HTTP Content-Type to use in Key-Value Form responses. diff --git a/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/ReturnToSignatureBindingElement.cs b/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/ReturnToSignatureBindingElement.cs index 912a322..726c01f 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/ReturnToSignatureBindingElement.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/ReturnToSignatureBindingElement.cs @@ -8,13 +8,13 @@ namespace DotNetOpenAuth.OpenId.ChannelElements { using System; using System.Collections.Generic; using System.Collections.Specialized; - using System.Diagnostics.Contracts; using System.Security.Cryptography; using System.Web; using DotNetOpenAuth.Configuration; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Messaging.Bindings; using DotNetOpenAuth.OpenId.Messages; + using Validation; /// <summary> /// This binding element signs a Relying Party's openid.return_to parameter diff --git a/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/SigningBindingElement.cs b/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/SigningBindingElement.cs index 363ff28..584b0e9 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/SigningBindingElement.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/SigningBindingElement.cs @@ -8,7 +8,6 @@ namespace DotNetOpenAuth.OpenId.ChannelElements { using System; using System.Collections.Generic; using System.Diagnostics; - using System.Diagnostics.Contracts; using System.Globalization; using System.Linq; using System.Net.Security; @@ -18,11 +17,11 @@ namespace DotNetOpenAuth.OpenId.ChannelElements { using DotNetOpenAuth.Messaging.Bindings; using DotNetOpenAuth.Messaging.Reflection; using DotNetOpenAuth.OpenId.Messages; + using Validation; /// <summary> /// Signs and verifies authentication assertions. /// </summary> - [ContractClass(typeof(SigningBindingElementContract))] internal abstract class SigningBindingElement : IChannelBindingElement { #region IChannelBindingElement Properties @@ -121,7 +120,7 @@ namespace DotNetOpenAuth.OpenId.ChannelElements { /// <returns>The calculated signature of the method.</returns> protected string GetSignature(ITamperResistantOpenIdMessage signedMessage, Association association) { Requires.NotNull(signedMessage, "signedMessage"); - Requires.True(!string.IsNullOrEmpty(signedMessage.SignedParameterOrder), "signedMessage"); + Requires.That(!string.IsNullOrEmpty(signedMessage.SignedParameterOrder), "signedMessage", "SignedParameterOrder must not be null or empty."); Requires.NotNull(association, "association"); // Prepare the parts to sign, taking care to replace an openid.mode value diff --git a/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/SigningBindingElementContract.cs b/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/SigningBindingElementContract.cs deleted file mode 100644 index bacbb29..0000000 --- a/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/SigningBindingElementContract.cs +++ /dev/null @@ -1,64 +0,0 @@ -//----------------------------------------------------------------------- -// <copyright file="SigningBindingElementContract.cs" company="Outercurve Foundation"> -// Copyright (c) Outercurve Foundation. All rights reserved. -// </copyright> -//----------------------------------------------------------------------- - -namespace DotNetOpenAuth.OpenId.ChannelElements { - using System; - using System.Collections.Generic; - using System.Diagnostics; - using System.Diagnostics.Contracts; - using System.Globalization; - using System.Linq; - using System.Net.Security; - using System.Web; - using DotNetOpenAuth.Loggers; - using DotNetOpenAuth.Messaging; - using DotNetOpenAuth.Messaging.Bindings; - using DotNetOpenAuth.Messaging.Reflection; - using DotNetOpenAuth.OpenId.Messages; - - /// <summary> - /// Code contract for the <see cref="SigningBindingElement"/> class. - /// </summary> - [ContractClassFor(typeof(SigningBindingElement))] - internal abstract class SigningBindingElementContract : SigningBindingElement { - /// <summary> - /// Verifies the signature by unrecognized handle. - /// </summary> - /// <param name="message">The message.</param> - /// <param name="signedMessage">The signed message.</param> - /// <param name="protectionsApplied">The protections applied.</param> - /// <returns> - /// The applied protections. - /// </returns> - protected override MessageProtections VerifySignatureByUnrecognizedHandle(IProtocolMessage message, ITamperResistantOpenIdMessage signedMessage, MessageProtections protectionsApplied) { - throw new NotImplementedException(); - } - - /// <summary> - /// Gets the association to use to sign or verify a message. - /// </summary> - /// <param name="signedMessage">The message to sign or verify.</param> - /// <returns> - /// The association to use to sign or verify the message. - /// </returns> - protected override Association GetAssociation(ITamperResistantOpenIdMessage signedMessage) { - Requires.NotNull(signedMessage, "signedMessage"); - throw new NotImplementedException(); - } - - /// <summary> - /// Gets a specific association referenced in a given message's association handle. - /// </summary> - /// <param name="signedMessage">The signed message whose association handle should be used to lookup the association to return.</param> - /// <returns> - /// The referenced association; or <c>null</c> if such an association cannot be found. - /// </returns> - protected override Association GetSpecificAssociation(ITamperResistantOpenIdMessage signedMessage) { - Requires.NotNull(signedMessage, "signedMessage"); - throw new NotImplementedException(); - } - } -} diff --git a/src/DotNetOpenAuth.OpenId/OpenId/DiffieHellmanUtilities.cs b/src/DotNetOpenAuth.OpenId/OpenId/DiffieHellmanUtilities.cs index e15bd6e..6f7fc31 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/DiffieHellmanUtilities.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/DiffieHellmanUtilities.cs @@ -7,13 +7,13 @@ namespace DotNetOpenAuth.OpenId { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Globalization; using System.Linq; using System.Security.Cryptography; using System.Text; using DotNetOpenAuth.Messaging; using Org.Mentalis.Security.Cryptography; + using Validation; /// <summary> /// Diffie-Hellman encryption methods used by both the relying party and provider. diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Extensions/AliasManager.cs b/src/DotNetOpenAuth.OpenId/OpenId/Extensions/AliasManager.cs index ff3d3f3..94f7762 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Extensions/AliasManager.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Extensions/AliasManager.cs @@ -8,10 +8,10 @@ namespace DotNetOpenAuth.OpenId.Extensions { using System; using System.Collections.Generic; using System.Diagnostics; - using System.Diagnostics.Contracts; using System.Globalization; using System.Text; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// Manages a fast, two-way mapping between type URIs and their aliases. diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Extensions/AttributeExchange/AXUtilities.cs b/src/DotNetOpenAuth.OpenId/OpenId/Extensions/AttributeExchange/AXUtilities.cs index 20b8a79..539e570 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Extensions/AttributeExchange/AXUtilities.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Extensions/AttributeExchange/AXUtilities.cs @@ -7,9 +7,9 @@ namespace DotNetOpenAuth.OpenId.Extensions.AttributeExchange { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Globalization; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// Helper methods shared by multiple messages in the Attribute Exchange extension. diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Extensions/AttributeExchange/AttributeRequest.cs b/src/DotNetOpenAuth.OpenId/OpenId/Extensions/AttributeExchange/AttributeRequest.cs index 6590cd1..06ddb45 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Extensions/AttributeExchange/AttributeRequest.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Extensions/AttributeExchange/AttributeRequest.cs @@ -7,8 +7,8 @@ namespace DotNetOpenAuth.OpenId.Extensions.AttributeExchange { using System; using System.Diagnostics; - using System.Diagnostics.Contracts; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// An individual attribute to be requested of the OpenID Provider using @@ -84,7 +84,7 @@ namespace DotNetOpenAuth.OpenId.Extensions.AttributeExchange { } set { - Requires.InRange(value > 0, "value"); + Requires.Range(value > 0, "value"); this.count = value; } } @@ -100,7 +100,7 @@ namespace DotNetOpenAuth.OpenId.Extensions.AttributeExchange { /// </returns> public AttributeValues Respond(params string[] values) { Requires.NotNull(values, "values"); - Requires.True(values.Length <= this.Count, "values"); + Requires.That(values.Length <= this.Count, "values", "requires values.Length <= this.Count"); return new AttributeValues(this.TypeUri, values); } diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Extensions/AttributeExchange/AttributeValues.cs b/src/DotNetOpenAuth.OpenId/OpenId/Extensions/AttributeExchange/AttributeValues.cs index 44aad04..2aea683 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Extensions/AttributeExchange/AttributeValues.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Extensions/AttributeExchange/AttributeValues.cs @@ -8,8 +8,8 @@ namespace DotNetOpenAuth.OpenId.Extensions.AttributeExchange { using System; using System.Collections.Generic; using System.Diagnostics; - using System.Diagnostics.Contracts; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// An individual attribute's value(s) as supplied by an OpenID Provider diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Extensions/AttributeExchange/FetchRequest.cs b/src/DotNetOpenAuth.OpenId/OpenId/Extensions/AttributeExchange/FetchRequest.cs index ff47ee6..083d19c 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Extensions/AttributeExchange/FetchRequest.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Extensions/AttributeExchange/FetchRequest.cs @@ -8,7 +8,6 @@ namespace DotNetOpenAuth.OpenId.Extensions.AttributeExchange { using System; using System.Collections.Generic; using System.Collections.ObjectModel; - using System.Diagnostics.Contracts; using System.Globalization; using System.Linq; using DotNetOpenAuth.Messaging; @@ -69,7 +68,6 @@ namespace DotNetOpenAuth.OpenId.Extensions.AttributeExchange { /// is all the attribute request details.</value> public KeyedCollection<string, AttributeRequest> Attributes { get { - Contract.Ensures(Contract.Result<KeyedCollection<string, AttributeRequest>>() != null); return this.attributes; } } diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Extensions/AttributeExchange/FetchResponse.cs b/src/DotNetOpenAuth.OpenId/OpenId/Extensions/AttributeExchange/FetchResponse.cs index d5633c3..425b5e2 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Extensions/AttributeExchange/FetchResponse.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Extensions/AttributeExchange/FetchResponse.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.OpenId.Extensions.AttributeExchange { using System; using System.Collections.ObjectModel; - using System.Diagnostics.Contracts; using System.Linq; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Messages; @@ -54,7 +53,6 @@ namespace DotNetOpenAuth.OpenId.Extensions.AttributeExchange { /// </summary> public KeyedCollection<string, AttributeValues> Attributes { get { - Contract.Ensures(Contract.Result<KeyedCollection<string, AttributeValues>>() != null); return this.attributesProvided; } } diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Extensions/ExtensionArgumentsManager.cs b/src/DotNetOpenAuth.OpenId/OpenId/Extensions/ExtensionArgumentsManager.cs index 1d795da..f3fa7f2 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Extensions/ExtensionArgumentsManager.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Extensions/ExtensionArgumentsManager.cs @@ -7,10 +7,10 @@ namespace DotNetOpenAuth.OpenId.Extensions { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Globalization; using System.Text; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// Manages the processing and construction of OpenID extensions parts. @@ -134,7 +134,7 @@ namespace DotNetOpenAuth.OpenId.Extensions { /// <param name="extensionTypeUri">The extension type URI.</param> /// <param name="arguments">The arguments for this extension to add to the message.</param> public void AddExtensionArguments(string extensionTypeUri, IDictionary<string, string> arguments) { - Requires.ValidState(!this.ReadMode); + RequiresEx.ValidState(!this.ReadMode); Requires.NotNullOrEmpty(extensionTypeUri, "extensionTypeUri"); Requires.NotNull(arguments, "arguments"); if (arguments.Count == 0) { @@ -162,7 +162,7 @@ namespace DotNetOpenAuth.OpenId.Extensions { /// </param> /// <returns>A dictionary of key=value pairs to add to the message to carry the extension.</returns> internal IDictionary<string, string> GetArgumentsToSend(bool includeOpenIdPrefix) { - Requires.ValidState(!this.ReadMode); + RequiresEx.ValidState(!this.ReadMode); Dictionary<string, string> args = new Dictionary<string, string>(); foreach (var typeUriAndExtension in this.extensions) { string typeUri = typeUriAndExtension.Key; @@ -196,7 +196,7 @@ namespace DotNetOpenAuth.OpenId.Extensions { /// </returns> internal IDictionary<string, string> GetExtensionArguments(string extensionTypeUri) { Requires.NotNullOrEmpty(extensionTypeUri, "extensionTypeUri"); - Requires.ValidState(this.ReadMode); + RequiresEx.ValidState(this.ReadMode); IDictionary<string, string> extensionArgs; this.extensions.TryGetValue(extensionTypeUri, out extensionArgs); diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Extensions/OpenIdExtensionFactoryAggregator.cs b/src/DotNetOpenAuth.OpenId/OpenId/Extensions/OpenIdExtensionFactoryAggregator.cs index 2b851dd..ddd60f3 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Extensions/OpenIdExtensionFactoryAggregator.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Extensions/OpenIdExtensionFactoryAggregator.cs @@ -6,7 +6,6 @@ namespace DotNetOpenAuth.OpenId.Extensions { using System.Collections.Generic; - using System.Diagnostics.Contracts; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.ChannelElements; using DotNetOpenAuth.OpenId.Messages; @@ -70,7 +69,6 @@ namespace DotNetOpenAuth.OpenId.Extensions { /// </summary> /// <returns>A new instance of <see cref="OpenIdExtensionFactoryAggregator"/>.</returns> internal static OpenIdExtensionFactoryAggregator LoadFromConfiguration() { - Contract.Ensures(Contract.Result<OpenIdExtensionFactoryAggregator>() != null); var factoriesElement = DotNetOpenAuth.Configuration.OpenIdElement.Configuration.ExtensionFactories; var aggregator = new OpenIdExtensionFactoryAggregator(); aggregator.Factories.Add(new StandardOpenIdExtensionFactory()); diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Extensions/OpenIdExtensionsInteropHelper.cs b/src/DotNetOpenAuth.OpenId/OpenId/Extensions/OpenIdExtensionsInteropHelper.cs index f9d3062..d90dd2a 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Extensions/OpenIdExtensionsInteropHelper.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Extensions/OpenIdExtensionsInteropHelper.cs @@ -8,12 +8,12 @@ namespace DotNetOpenAuth.OpenId.Extensions { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Linq; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Extensions.AttributeExchange; using DotNetOpenAuth.OpenId.Extensions.SimpleRegistration; using DotNetOpenAuth.OpenId.Messages; + using Validation; /// <summary> /// A set of methods designed to assist in improving interop across different diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Extensions/ProviderAuthenticationPolicy/PapeUtilities.cs b/src/DotNetOpenAuth.OpenId/OpenId/Extensions/ProviderAuthenticationPolicy/PapeUtilities.cs index f017031..e9e8e95 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Extensions/ProviderAuthenticationPolicy/PapeUtilities.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Extensions/ProviderAuthenticationPolicy/PapeUtilities.cs @@ -7,11 +7,11 @@ namespace DotNetOpenAuth.OpenId.Extensions.ProviderAuthenticationPolicy { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Globalization; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// Utility methods for use by the PAPE extension. diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Extensions/ProviderAuthenticationPolicy/PolicyResponse.cs b/src/DotNetOpenAuth.OpenId/OpenId/Extensions/ProviderAuthenticationPolicy/PolicyResponse.cs index 880a25e..d764118 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Extensions/ProviderAuthenticationPolicy/PolicyResponse.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Extensions/ProviderAuthenticationPolicy/PolicyResponse.cs @@ -8,10 +8,10 @@ namespace DotNetOpenAuth.OpenId.Extensions.ProviderAuthenticationPolicy { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Globalization; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Messages; + using Validation; /// <summary> /// The PAPE response part of an OpenID Authentication response message. @@ -83,7 +83,7 @@ namespace DotNetOpenAuth.OpenId.Extensions.ProviderAuthenticationPolicy { } set { - Requires.True(!value.HasValue || value.Value.Kind != DateTimeKind.Unspecified, "value", OpenIdStrings.UnspecifiedDateTimeKindNotAllowed); + Requires.That(!value.HasValue || value.Value.Kind != DateTimeKind.Unspecified, "value", OpenIdStrings.UnspecifiedDateTimeKindNotAllowed); // Make sure that whatever is set here, it becomes UTC time. if (value.HasValue) { diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Extensions/SimpleRegistration/ClaimsRequest.cs b/src/DotNetOpenAuth.OpenId/OpenId/Extensions/SimpleRegistration/ClaimsRequest.cs index ab08cbb..f6fd620 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Extensions/SimpleRegistration/ClaimsRequest.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Extensions/SimpleRegistration/ClaimsRequest.cs @@ -9,11 +9,11 @@ namespace DotNetOpenAuth.OpenId.Extensions.SimpleRegistration { using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Globalization; using System.Text; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Messages; + using Validation; /// <summary> /// Carries the request/require/none demand state of the simple registration fields. diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Extensions/SimpleRegistration/ClaimsResponse.cs b/src/DotNetOpenAuth.OpenId/OpenId/Extensions/SimpleRegistration/ClaimsResponse.cs index af60596..361910d 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Extensions/SimpleRegistration/ClaimsResponse.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Extensions/SimpleRegistration/ClaimsResponse.cs @@ -8,7 +8,6 @@ namespace DotNetOpenAuth.OpenId.Extensions.SimpleRegistration { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Globalization; using System.Net.Mail; using System.Text; @@ -16,6 +15,7 @@ namespace DotNetOpenAuth.OpenId.Extensions.SimpleRegistration { using System.Xml.Serialization; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Messages; + using Validation; /// <summary> /// A struct storing Simple Registration field values describing an diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Extensions/UI/UIRequest.cs b/src/DotNetOpenAuth.OpenId/OpenId/Extensions/UI/UIRequest.cs index 0902a00..731ca1c 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Extensions/UI/UIRequest.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Extensions/UI/UIRequest.cs @@ -8,7 +8,6 @@ namespace DotNetOpenAuth.OpenId.Extensions.UI { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Globalization; using System.Linq; using DotNetOpenAuth.Messaging; diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Extensions/UI/UIUtilities.cs b/src/DotNetOpenAuth.OpenId/OpenId/Extensions/UI/UIUtilities.cs index 19e333d..1f48ce3 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Extensions/UI/UIUtilities.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Extensions/UI/UIUtilities.cs @@ -6,7 +6,6 @@ namespace DotNetOpenAuth.OpenId.Extensions.UI { using System; - using System.Diagnostics.Contracts; using System.Globalization; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.RelyingParty; diff --git a/src/DotNetOpenAuth.OpenId/OpenId/HmacShaAssociation.cs b/src/DotNetOpenAuth.OpenId/OpenId/HmacShaAssociation.cs index bf0111d..2eaa8cf 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/HmacShaAssociation.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/HmacShaAssociation.cs @@ -15,11 +15,11 @@ namespace DotNetOpenAuth.OpenId { using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId; using DotNetOpenAuth.OpenId.Messages; + using Validation; /// <summary> /// An association that uses the HMAC-SHA family of algorithms for message signing. /// </summary> - [ContractVerification(true)] internal class HmacShaAssociation : Association { /// <summary> /// A list of HMAC-SHA algorithms in order of decreasing bit lengths. @@ -43,8 +43,7 @@ namespace DotNetOpenAuth.OpenId { Requires.NotNull(typeIdentity, "typeIdentity"); Requires.NotNullOrEmpty(handle, "handle"); Requires.NotNull(secret, "secret"); - Requires.InRange(totalLifeLength > TimeSpan.Zero, "totalLifeLength"); - Contract.Ensures(this.TotalLifeLength == totalLifeLength); + Requires.Range(totalLifeLength > TimeSpan.Zero, "totalLifeLength"); ErrorUtilities.VerifyProtocol(secret.Length == typeIdentity.SecretLength, OpenIdStrings.AssociationSecretAndTypeLengthMismatch, secret.Length, typeIdentity.GetAssociationType(Protocol.Default)); this.typeIdentity = typeIdentity; @@ -73,7 +72,6 @@ namespace DotNetOpenAuth.OpenId { Requires.NotNull(protocol, "protocol"); Requires.NotNullOrEmpty(associationType, "associationType"); Requires.NotNull(secret, "secret"); - Contract.Ensures(Contract.Result<HmacShaAssociation>() != null); HmacSha match = hmacShaAssociationTypes.FirstOrDefault(sha => string.Equals(sha.GetAssociationType(protocol), associationType, StringComparison.Ordinal)); ErrorUtilities.VerifyProtocol(match != null, OpenIdStrings.NoAssociationTypeFoundByName, associationType); return new HmacShaAssociation(match, handle, secret, totalLifeLength); @@ -89,7 +87,6 @@ namespace DotNetOpenAuth.OpenId { public static HmacShaAssociation Create(string handle, byte[] secret, TimeSpan totalLifeLength) { Requires.NotNullOrEmpty(handle, "handle"); Requires.NotNull(secret, "secret"); - Contract.Ensures(Contract.Result<HmacShaAssociation>() != null); HmacSha shaType = hmacShaAssociationTypes.FirstOrDefault(sha => sha.SecretLength == secret.Length); ErrorUtilities.VerifyProtocol(shaType != null, OpenIdStrings.NoAssociationTypeFoundByLength, secret.Length); @@ -211,7 +208,7 @@ namespace DotNetOpenAuth.OpenId { [Pure] protected override HashAlgorithm CreateHasher() { var result = this.typeIdentity.CreateHasher(SecretKey); - Contract.Assume(result != null); + Assumes.True(result != null); return result; } diff --git a/src/DotNetOpenAuth.OpenId/OpenId/IIdentifierDiscoveryService.cs b/src/DotNetOpenAuth.OpenId/OpenId/IIdentifierDiscoveryService.cs index 63c3895..20b8f1c 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/IIdentifierDiscoveryService.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/IIdentifierDiscoveryService.cs @@ -13,11 +13,11 @@ namespace DotNetOpenAuth.OpenId { using System.Text; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.RelyingParty; + using Validation; /// <summary> /// A module that provides discovery services for OpenID identifiers. /// </summary> - [ContractClass(typeof(IIdentifierDiscoveryServiceContract))] public interface IIdentifierDiscoveryService { /// <summary> /// Performs discovery on the specified identifier. @@ -32,36 +32,4 @@ namespace DotNetOpenAuth.OpenId { [Pure] IEnumerable<IdentifierDiscoveryResult> Discover(Identifier identifier, IDirectWebRequestHandler requestHandler, out bool abortDiscoveryChain); } - - /// <summary> - /// Code contract for the <see cref="IIdentifierDiscoveryService"/> interface. - /// </summary> - [ContractClassFor(typeof(IIdentifierDiscoveryService))] - internal abstract class IIdentifierDiscoveryServiceContract : IIdentifierDiscoveryService { - /// <summary> - /// Prevents a default instance of the <see cref="IIdentifierDiscoveryServiceContract"/> class from being created. - /// </summary> - private IIdentifierDiscoveryServiceContract() { - } - - #region IDiscoveryService Members - - /// <summary> - /// Performs discovery on the specified identifier. - /// </summary> - /// <param name="identifier">The identifier to perform discovery on.</param> - /// <param name="requestHandler">The means to place outgoing HTTP requests.</param> - /// <param name="abortDiscoveryChain">if set to <c>true</c>, no further discovery services will be called for this identifier.</param> - /// <returns> - /// A sequence of service endpoints yielded by discovery. Must not be null, but may be empty. - /// </returns> - IEnumerable<IdentifierDiscoveryResult> IIdentifierDiscoveryService.Discover(Identifier identifier, IDirectWebRequestHandler requestHandler, out bool abortDiscoveryChain) { - Requires.NotNull(identifier, "identifier"); - Requires.NotNull(requestHandler, "requestHandler"); - Contract.Ensures(Contract.Result<IEnumerable<IdentifierDiscoveryResult>>() != null); - throw new NotImplementedException(); - } - - #endregion - } } diff --git a/src/DotNetOpenAuth.OpenId/OpenId/IProviderEndpoint.cs b/src/DotNetOpenAuth.OpenId/OpenId/IProviderEndpoint.cs index b2b231a..b5c1c03 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/IProviderEndpoint.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/IProviderEndpoint.cs @@ -8,7 +8,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using System; using System.Collections.ObjectModel; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Globalization; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Messages; @@ -21,7 +20,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// Because information provided by this interface is suppplied by a /// user's individually published documents, it may be incomplete or inaccurate. /// </remarks> - [ContractClass(typeof(IProviderEndpointContract))] public interface IProviderEndpoint { /// <summary> /// Gets the detected version of OpenID implemented by the Provider. @@ -67,77 +65,4 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { [Obsolete("Use IAuthenticationRequest.DiscoveryResult.IsExtensionSupported instead.")] bool IsExtensionSupported(Type extensionType); } - - /// <summary> - /// Code contract for the <see cref="IProviderEndpoint"/> type. - /// </summary> - [ContractClassFor(typeof(IProviderEndpoint))] - internal abstract class IProviderEndpointContract : IProviderEndpoint { - /// <summary> - /// Prevents a default instance of the <see cref="IProviderEndpointContract"/> class from being created. - /// </summary> - private IProviderEndpointContract() { - } - - #region IProviderEndpoint Members - - /// <summary> - /// Gets the detected version of OpenID implemented by the Provider. - /// </summary> - Version IProviderEndpoint.Version { - get { - Contract.Ensures(Contract.Result<Version>() != null); - throw new System.NotImplementedException(); - } - } - - /// <summary> - /// Gets the URL that the OpenID Provider receives authentication requests at. - /// </summary> - Uri IProviderEndpoint.Uri { - get { - Contract.Ensures(Contract.Result<Uri>() != null); - throw new System.NotImplementedException(); - } - } - - /// <summary> - /// Checks whether the OpenId Identifier claims support for a given extension. - /// </summary> - /// <typeparam name="T">The extension whose support is being queried.</typeparam> - /// <returns> - /// True if support for the extension is advertised. False otherwise. - /// </returns> - /// <remarks> - /// Note that a true or false return value is no guarantee of a Provider's - /// support for or lack of support for an extension. The return value is - /// determined by how the authenticating user filled out his/her XRDS document only. - /// The only way to be sure of support for a given extension is to include - /// the extension in the request and see if a response comes back for that extension. - /// </remarks> - bool IProviderEndpoint.IsExtensionSupported<T>() { - throw new NotImplementedException(); - } - - /// <summary> - /// Checks whether the OpenId Identifier claims support for a given extension. - /// </summary> - /// <param name="extensionType">The extension whose support is being queried.</param> - /// <returns> - /// True if support for the extension is advertised. False otherwise. - /// </returns> - /// <remarks> - /// Note that a true or false return value is no guarantee of a Provider's - /// support for or lack of support for an extension. The return value is - /// determined by how the authenticating user filled out his/her XRDS document only. - /// The only way to be sure of support for a given extension is to include - /// the extension in the request and see if a response comes back for that extension. - /// </remarks> - bool IProviderEndpoint.IsExtensionSupported(Type extensionType) { - Requires.NotNullSubtype<IOpenIdMessageExtension>(extensionType, "extensionType"); - throw new NotImplementedException(); - } - - #endregion - } } diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Identifier.cs b/src/DotNetOpenAuth.OpenId/OpenId/Identifier.cs index 3cdd0f3..310ebd2 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Identifier.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Identifier.cs @@ -12,14 +12,13 @@ namespace DotNetOpenAuth.OpenId { using System.Diagnostics.Contracts; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Messaging.Reflection; + using Validation; /// <summary> /// An Identifier is either a "http" or "https" URI, or an XRI. /// </summary> [Serializable] - [ContractVerification(true)] [Pure] - [ContractClass(typeof(IdentifierContract))] [DefaultEncoder(typeof(IdentifierEncoder))] public abstract class Identifier { /// <summary> @@ -92,8 +91,7 @@ namespace DotNetOpenAuth.OpenId { [SuppressMessage("Microsoft.Usage", "CA2225:OperatorOverloadsHaveNamedAlternates", Justification = "Our named alternate is Parse.")] [DebuggerStepThrough] public static implicit operator Identifier(string identifier) { - Requires.True(identifier == null || identifier.Length > 0, "identifier"); - Contract.Ensures((identifier == null) == (Contract.Result<Identifier>() == null)); + Requires.That(identifier == null || identifier.Length > 0, "identifier", "Empty string cannot be translated to an identifier."); if (identifier == null) { return null; @@ -109,7 +107,6 @@ namespace DotNetOpenAuth.OpenId { [SuppressMessage("Microsoft.Usage", "CA2225:OperatorOverloadsHaveNamedAlternates", Justification = "We have a Parse function.")] [DebuggerStepThrough] public static implicit operator Identifier(Uri identifier) { - Contract.Ensures((identifier == null) == (Contract.Result<Identifier>() == null)); if (identifier == null) { return null; } @@ -125,7 +122,6 @@ namespace DotNetOpenAuth.OpenId { [SuppressMessage("Microsoft.Usage", "CA2225:OperatorOverloadsHaveNamedAlternates", Justification = "We have a Parse function.")] [DebuggerStepThrough] public static implicit operator string(Identifier identifier) { - Contract.Ensures((identifier == null) == (Contract.Result<string>() == null)); if (identifier == null) { return null; } @@ -141,7 +137,6 @@ namespace DotNetOpenAuth.OpenId { [SuppressMessage("Microsoft.Usage", "CA2234:PassSystemUriObjectsInsteadOfStrings", Justification = "Some of these identifiers are not properly formatted to be Uris at this stage.")] public static Identifier Parse(string identifier) { Requires.NotNullOrEmpty(identifier, "identifier"); - Contract.Ensures(Contract.Result<Identifier>() != null); return Parse(identifier, false); } @@ -158,7 +153,6 @@ namespace DotNetOpenAuth.OpenId { [SuppressMessage("Microsoft.Usage", "CA2234:PassSystemUriObjectsInsteadOfStrings", Justification = "Some of these identifiers are not properly formatted to be Uris at this stage.")] public static Identifier Parse(string identifier, bool serializeExactValue) { Requires.NotNullOrEmpty(identifier, "identifier"); - Contract.Ensures(Contract.Result<Identifier>() != null); Identifier id; if (XriIdentifier.IsValidXri(identifier)) { @@ -265,7 +259,6 @@ namespace DotNetOpenAuth.OpenId { /// <returns>Either <see cref="XriIdentifier"/> or <see cref="UriIdentifier"/>.</returns> internal static Identifier Reparse(Identifier identifier) { Requires.NotNull(identifier, "identifier"); - Contract.Ensures(Contract.Result<Identifier>() != null); return Parse(identifier, identifier.IsDeserializedInstance); } diff --git a/src/DotNetOpenAuth.OpenId/OpenId/IdentifierContract.cs b/src/DotNetOpenAuth.OpenId/OpenId/IdentifierContract.cs deleted file mode 100644 index 0156d12..0000000 --- a/src/DotNetOpenAuth.OpenId/OpenId/IdentifierContract.cs +++ /dev/null @@ -1,56 +0,0 @@ -//----------------------------------------------------------------------- -// <copyright file="IdentifierContract.cs" company="Outercurve Foundation"> -// Copyright (c) Outercurve Foundation. All rights reserved. -// </copyright> -//----------------------------------------------------------------------- - -namespace DotNetOpenAuth.OpenId { - using System; - using System.Collections.Generic; - using System.Diagnostics.Contracts; - using DotNetOpenAuth.Messaging; - - /// <summary> - /// Code Contract for the <see cref="Identifier"/> class. - /// </summary> - [ContractClassFor(typeof(Identifier))] - internal abstract class IdentifierContract : Identifier { - /// <summary> - /// Prevents a default instance of the IdentifierContract class from being created. - /// </summary> - private IdentifierContract() - : base(null, false) { - } - - /// <summary> - /// Returns an <see cref="Identifier"/> that has no URI fragment. - /// Quietly returns the original <see cref="Identifier"/> if it is not - /// a <see cref="UriIdentifier"/> or no fragment exists. - /// </summary> - /// <returns> - /// A new <see cref="Identifier"/> instance if there was a - /// fragment to remove, otherwise this same instance.. - /// </returns> - internal override Identifier TrimFragment() { - Contract.Ensures(Contract.Result<Identifier>() != null); - throw new NotImplementedException(); - } - - /// <summary> - /// Converts a given identifier to its secure equivalent. - /// UriIdentifiers originally created with an implied HTTP scheme change to HTTPS. - /// Discovery is made to require SSL for the entire resolution process. - /// </summary> - /// <param name="secureIdentifier">The newly created secure identifier. - /// If the conversion fails, <paramref name="secureIdentifier"/> retains - /// <i>this</i> identifiers identity, but will never discover any endpoints.</param> - /// <returns> - /// True if the secure conversion was successful. - /// False if the Identifier was originally created with an explicit HTTP scheme. - /// </returns> - internal override bool TryRequireSsl(out Identifier secureIdentifier) { - Contract.Ensures(Contract.ValueAtReturn(out secureIdentifier) != null); - throw new NotImplementedException(); - } - } -} diff --git a/src/DotNetOpenAuth.OpenId/OpenId/IdentifierDiscoveryResult.cs b/src/DotNetOpenAuth.OpenId/OpenId/IdentifierDiscoveryResult.cs index ab69bf6..c7eabf0 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/IdentifierDiscoveryResult.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/IdentifierDiscoveryResult.cs @@ -10,7 +10,6 @@ namespace DotNetOpenAuth.OpenId { using System.Collections.ObjectModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Globalization; using System.IO; using System.Linq; @@ -18,6 +17,7 @@ namespace DotNetOpenAuth.OpenId { using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Messages; using DotNetOpenAuth.OpenId.RelyingParty; + using Validation; /// <summary> /// Represents a single OP endpoint from discovery on some OpenID Identifier. diff --git a/src/DotNetOpenAuth.OpenId/OpenId/IdentifierDiscoveryServices.cs b/src/DotNetOpenAuth.OpenId/OpenId/IdentifierDiscoveryServices.cs index 6a3cfaa..1b20d4e 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/IdentifierDiscoveryServices.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/IdentifierDiscoveryServices.cs @@ -6,10 +6,10 @@ namespace DotNetOpenAuth.OpenId { using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using DotNetOpenAuth.Configuration; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// A service that can perform discovery on OpenID identifiers. @@ -50,7 +50,6 @@ namespace DotNetOpenAuth.OpenId { /// <returns>A non-null sequence of services discovered for the identifier.</returns> public IEnumerable<IdentifierDiscoveryResult> Discover(Identifier identifier) { Requires.NotNull(identifier, "identifier"); - Contract.Ensures(Contract.Result<IEnumerable<IdentifierDiscoveryResult>>() != null); IEnumerable<IdentifierDiscoveryResult> results = Enumerable.Empty<IdentifierDiscoveryResult>(); foreach (var discoverer in this.DiscoveryServices) { diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Messages/AssociateDiffieHellmanResponse.cs b/src/DotNetOpenAuth.OpenId/OpenId/Messages/AssociateDiffieHellmanResponse.cs index 3860565..1510e97 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Messages/AssociateDiffieHellmanResponse.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Messages/AssociateDiffieHellmanResponse.cs @@ -6,7 +6,6 @@ namespace DotNetOpenAuth.OpenId.Messages { using System; - using System.Diagnostics.Contracts; using System.Security.Cryptography; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Messaging.Reflection; diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Messages/AssociateRequest.cs b/src/DotNetOpenAuth.OpenId/OpenId/Messages/AssociateRequest.cs index 1e716e2..1eaf7b6 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Messages/AssociateRequest.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Messages/AssociateRequest.cs @@ -8,7 +8,6 @@ namespace DotNetOpenAuth.OpenId.Messages { using System; using System.Collections.Generic; using System.Diagnostics; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Messages/AssociateSuccessfulResponse.cs b/src/DotNetOpenAuth.OpenId/OpenId/Messages/AssociateSuccessfulResponse.cs index 6605530..8daafbd 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Messages/AssociateSuccessfulResponse.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Messages/AssociateSuccessfulResponse.cs @@ -8,7 +8,6 @@ namespace DotNetOpenAuth.OpenId.Messages { using System; using System.Collections.Generic; using System.Diagnostics; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; @@ -20,7 +19,6 @@ namespace DotNetOpenAuth.OpenId.Messages { /// Association response messages are described in OpenID 2.0 section 8.2. This type covers section 8.2.1. /// </remarks> [DebuggerDisplay("OpenID {Version} associate response {AssociationHandle} {AssociationType} {SessionType}")] - [ContractClass(typeof(AssociateSuccessfulResponseContract))] internal abstract class AssociateSuccessfulResponse : DirectResponseBase { /// <summary> /// Initializes a new instance of the <see cref="AssociateSuccessfulResponse"/> class. diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Messages/AssociateSuccessfulResponseContract.cs b/src/DotNetOpenAuth.OpenId/OpenId/Messages/AssociateSuccessfulResponseContract.cs deleted file mode 100644 index 39a79a4..0000000 --- a/src/DotNetOpenAuth.OpenId/OpenId/Messages/AssociateSuccessfulResponseContract.cs +++ /dev/null @@ -1,17 +0,0 @@ -// <auto-generated /> - -namespace DotNetOpenAuth.OpenId.Messages { - using System; - using System.Collections.Generic; - using System.Diagnostics; - using System.Diagnostics.Contracts; - using System.Linq; - using System.Text; - using DotNetOpenAuth.Messaging; - - [ContractClassFor(typeof(AssociateSuccessfulResponse))] - internal abstract class AssociateSuccessfulResponseContract : AssociateSuccessfulResponse { - protected AssociateSuccessfulResponseContract() : base(null, null) { - } - } -} diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Messages/CheckAuthenticationRequest.cs b/src/DotNetOpenAuth.OpenId/OpenId/Messages/CheckAuthenticationRequest.cs index 0c46411..93cf9d7 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Messages/CheckAuthenticationRequest.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Messages/CheckAuthenticationRequest.cs @@ -7,12 +7,12 @@ namespace DotNetOpenAuth.OpenId.Messages { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Messaging.Reflection; using DotNetOpenAuth.OpenId.ChannelElements; + using Validation; /// <summary> /// A message a Relying Party sends to a Provider to confirm the validity diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Messages/CheckAuthenticationResponse.cs b/src/DotNetOpenAuth.OpenId/OpenId/Messages/CheckAuthenticationResponse.cs index 9c31ea5..ee9a0b0 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Messages/CheckAuthenticationResponse.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Messages/CheckAuthenticationResponse.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.OpenId.Messages { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Messages/DirectResponseBase.cs b/src/DotNetOpenAuth.OpenId/OpenId/Messages/DirectResponseBase.cs index 787c920..a081159 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Messages/DirectResponseBase.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Messages/DirectResponseBase.cs @@ -9,8 +9,8 @@ namespace DotNetOpenAuth.OpenId.Messages { using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// A common base class for OpenID direct message responses. diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Messages/IOpenIdMessageExtension.cs b/src/DotNetOpenAuth.OpenId/OpenId/Messages/IOpenIdMessageExtension.cs index dabb752..a7e2268 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Messages/IOpenIdMessageExtension.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Messages/IOpenIdMessageExtension.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.OpenId.Messages { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; @@ -20,7 +19,6 @@ namespace DotNetOpenAuth.OpenId.Messages { /// [<see cref="SerializableAttribute"/>] to allow serializing state servers /// to cache messages, particularly responses. /// </remarks> - [ContractClass(typeof(IOpenIdMessageExtensionContract))] public interface IOpenIdMessageExtension : IExtensionMessage { /// <summary> /// Gets the TypeURI the extension uses in the OpenID protocol and in XRDS advertisements. @@ -53,108 +51,4 @@ namespace DotNetOpenAuth.OpenId.Messages { /// </value> bool IsSignedByRemoteParty { get; set; } } - - /// <summary> - /// Code contract class for the IOpenIdMessageExtension interface. - /// </summary> - [ContractClassFor(typeof(IOpenIdMessageExtension))] - internal abstract class IOpenIdMessageExtensionContract : IOpenIdMessageExtension { - /// <summary> - /// Prevents a default instance of the <see cref="IOpenIdMessageExtensionContract"/> class from being created. - /// </summary> - private IOpenIdMessageExtensionContract() { - } - - #region IOpenIdMessageExtension Members - - /// <summary> - /// Gets the TypeURI the extension uses in the OpenID protocol and in XRDS advertisements. - /// </summary> - string IOpenIdMessageExtension.TypeUri { - get { - Contract.Ensures(!string.IsNullOrEmpty(Contract.Result<string>())); - throw new NotImplementedException(); - } - } - - /// <summary> - /// Gets the additional TypeURIs that are supported by this extension, in preferred order. - /// May be empty if none other than <see cref="IOpenIdMessageExtension.TypeUri"/> is supported, but - /// should not be null. - /// </summary> - /// <remarks> - /// Useful for reading in messages with an older version of an extension. - /// The value in the <see cref="IOpenIdMessageExtension.TypeUri"/> property is always checked before - /// trying this list. - /// If you do support multiple versions of an extension using this method, - /// consider adding a CreateResponse method to your request extension class - /// so that the response can have the context it needs to remain compatible - /// given the version of the extension in the request message. - /// The <see cref="Extensions.SimpleRegistration.ClaimsRequest.CreateResponse"/> for an example. - /// </remarks> - IEnumerable<string> IOpenIdMessageExtension.AdditionalSupportedTypeUris { - get { - Contract.Ensures(Contract.Result<IEnumerable<string>>() != null); - throw new NotImplementedException(); - } - } - - /// <summary> - /// Gets or sets a value indicating whether this extension was - /// signed by the sender. - /// </summary> - /// <value> - /// <c>true</c> if this instance is signed by the sender; otherwise, <c>false</c>. - /// </value> - bool IOpenIdMessageExtension.IsSignedByRemoteParty { - get { throw new NotImplementedException(); } - set { throw new NotImplementedException(); } - } - - #endregion - - #region IMessage Members - - /// <summary> - /// Gets the version of the protocol or extension this message is prepared to implement. - /// </summary> - /// <remarks> - /// Implementations of this interface should ensure that this property never returns null. - /// </remarks> - Version IMessage.Version { - get { - throw new NotImplementedException(); - } - } - - /// <summary> - /// Gets the extra, non-standard Protocol parameters included in the message. - /// </summary> - /// <remarks> - /// Implementations of this interface should ensure that this property never returns null. - /// </remarks> - IDictionary<string, string> IMessage.ExtraData { - get { - throw new NotImplementedException(); - } - } - - /// <summary> - /// Checks the message state for conformity to the protocol specification - /// and throws an exception if the message is invalid. - /// </summary> - /// <remarks> - /// <para>Some messages have required fields, or combinations of fields that must relate to each other - /// in specialized ways. After deserializing a message, this method checks the state of the - /// message to see if it conforms to the protocol.</para> - /// <para>Note that this property should <i>not</i> check signatures or perform any state checks - /// outside this scope of this particular message.</para> - /// </remarks> - /// <exception cref="ProtocolException">Thrown if the message is invalid.</exception> - void IMessage.EnsureValidMessage() { - throw new NotImplementedException(); - } - - #endregion - } } diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Messages/IndirectResponseBase.cs b/src/DotNetOpenAuth.OpenId/OpenId/Messages/IndirectResponseBase.cs index ae0217d..cd56175 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Messages/IndirectResponseBase.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Messages/IndirectResponseBase.cs @@ -7,10 +7,10 @@ namespace DotNetOpenAuth.OpenId.Messages { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// A common base class from which indirect response messages should derive. diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Messages/IndirectSignedResponse.cs b/src/DotNetOpenAuth.OpenId/OpenId/Messages/IndirectSignedResponse.cs index 8bceb68..51d6805 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Messages/IndirectSignedResponse.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Messages/IndirectSignedResponse.cs @@ -10,7 +10,6 @@ namespace DotNetOpenAuth.OpenId.Messages { using System.Collections.Specialized; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Globalization; using System.Linq; using System.Net.Security; @@ -19,6 +18,7 @@ namespace DotNetOpenAuth.OpenId.Messages { using DotNetOpenAuth.Messaging.Bindings; using DotNetOpenAuth.Messaging.Reflection; using DotNetOpenAuth.OpenId.ChannelElements; + using Validation; /// <summary> /// An indirect message from a Provider to a Relying Party where at least part of the diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Messages/NegativeAssertionResponse.cs b/src/DotNetOpenAuth.OpenId/OpenId/Messages/NegativeAssertionResponse.cs index 43fd6f5..9aac107 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Messages/NegativeAssertionResponse.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Messages/NegativeAssertionResponse.cs @@ -7,10 +7,10 @@ namespace DotNetOpenAuth.OpenId.Messages { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// The message OpenID Providers send back to Relying Parties to refuse diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Messages/RequestBase.cs b/src/DotNetOpenAuth.OpenId/OpenId/Messages/RequestBase.cs index 678dcee..f91dc96 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Messages/RequestBase.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Messages/RequestBase.cs @@ -9,8 +9,8 @@ namespace DotNetOpenAuth.OpenId.Messages { using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// A common base class for OpenID request messages and indirect responses (since they are ultimately requests). diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Messages/SignedResponseRequest.cs b/src/DotNetOpenAuth.OpenId/OpenId/Messages/SignedResponseRequest.cs index a2ebb64..688bb40 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Messages/SignedResponseRequest.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Messages/SignedResponseRequest.cs @@ -8,10 +8,10 @@ namespace DotNetOpenAuth.OpenId.Messages { using System; using System.Collections.Generic; using System.Diagnostics; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// An indirect request from a Relying Party to a Provider where the response diff --git a/src/DotNetOpenAuth.OpenId/OpenId/NoDiscoveryIdentifier.cs b/src/DotNetOpenAuth.OpenId/OpenId/NoDiscoveryIdentifier.cs index c439f1f..aa12067 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/NoDiscoveryIdentifier.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/NoDiscoveryIdentifier.cs @@ -10,11 +10,11 @@ namespace DotNetOpenAuth.OpenId { using System.Diagnostics.Contracts; using System.Linq; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// Wraps an existing Identifier and prevents it from performing discovery. /// </summary> - [ContractVerification(true)] [Pure] internal class NoDiscoveryIdentifier : Identifier { /// <summary> diff --git a/src/DotNetOpenAuth.OpenId/OpenId/OpenIdUtilities.cs b/src/DotNetOpenAuth.OpenId/OpenId/OpenIdUtilities.cs index a5202de..e04a633 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/OpenIdUtilities.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/OpenIdUtilities.cs @@ -8,7 +8,6 @@ namespace DotNetOpenAuth.OpenId { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Globalization; using System.IO; using System.Linq; @@ -19,6 +18,7 @@ namespace DotNetOpenAuth.OpenId { using DotNetOpenAuth.OpenId.ChannelElements; using DotNetOpenAuth.OpenId.Extensions; using Org.Mentalis.Security.Cryptography; + using Validation; /// <summary> /// A set of utilities especially useful to OpenID. @@ -69,8 +69,6 @@ namespace DotNetOpenAuth.OpenId { /// </summary> /// <returns>The association handle.</returns> public static string GenerateRandomAssociationHandle() { - Contract.Ensures(!string.IsNullOrEmpty(Contract.Result<string>())); - // Generate the handle. It must be unique, and preferably unpredictable, // so we use a time element and a random data element to generate it. string uniq = MessagingUtilities.GetCryptoRandomDataAsBase64(4); diff --git a/src/DotNetOpenAuth.OpenId/OpenId/OpenIdXrdsHelper.cs b/src/DotNetOpenAuth.OpenId/OpenId/OpenIdXrdsHelper.cs index 284f8db..4fca2af 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/OpenIdXrdsHelper.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/OpenIdXrdsHelper.cs @@ -7,10 +7,10 @@ namespace DotNetOpenAuth.OpenId { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Xrds; + using Validation; /// <summary> /// Utility methods for working with XRDS documents. @@ -27,7 +27,6 @@ namespace DotNetOpenAuth.OpenId { /// </remarks> internal static IEnumerable<RelyingPartyEndpointDescription> FindRelyingPartyReceivingEndpoints(this XrdsDocument xrds) { Requires.NotNull(xrds, "xrds"); - Contract.Ensures(Contract.Result<IEnumerable<RelyingPartyEndpointDescription>>() != null); return from service in xrds.FindReturnToServices() from uri in service.UriElements @@ -42,7 +41,6 @@ namespace DotNetOpenAuth.OpenId { /// <returns>A sequence of the icon URLs in preferred order.</returns> internal static IEnumerable<Uri> FindRelyingPartyIcons(this XrdsDocument xrds) { Requires.NotNull(xrds, "xrds"); - Contract.Ensures(Contract.Result<IEnumerable<Uri>>() != null); return from xrd in xrds.XrdElements from service in xrd.OpenIdRelyingPartyIcons @@ -58,7 +56,6 @@ namespace DotNetOpenAuth.OpenId { /// <returns>A sequence of service elements.</returns> private static IEnumerable<ServiceElement> FindReturnToServices(this XrdsDocument xrds) { Requires.NotNull(xrds, "xrds"); - Contract.Ensures(Contract.Result<IEnumerable<ServiceElement>>() != null); return from xrd in xrds.XrdElements from service in xrd.OpenIdRelyingPartyReturnToServices diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Protocol.cs b/src/DotNetOpenAuth.OpenId/OpenId/Protocol.cs index 22f5b9c..7ef3ab5 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Protocol.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Protocol.cs @@ -11,8 +11,8 @@ namespace DotNetOpenAuth.OpenId { using DotNetOpenAuth.Messaging; using System.Globalization; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Diagnostics; + using Validation; /// <summary> /// An enumeration of the OpenID protocol versions supported by this library. diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Provider/IAuthenticationRequest.cs b/src/DotNetOpenAuth.OpenId/OpenId/Provider/IAuthenticationRequest.cs index 5e8efa5..0b121b7 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Provider/IAuthenticationRequest.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Provider/IAuthenticationRequest.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.OpenId.Provider { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Text; using DotNetOpenAuth.Messaging; @@ -16,7 +15,6 @@ namespace DotNetOpenAuth.OpenId.Provider { /// This interface provides the details of the request and allows setting /// the response. /// </summary> - [ContractClass(typeof(IAuthenticationRequestContract))] public interface IAuthenticationRequest : IHostProcessedRequest { /// <summary> /// Gets a value indicating whether the Provider should help the user @@ -95,273 +93,4 @@ namespace DotNetOpenAuth.OpenId.Provider { /// </exception> void SetClaimedIdentifierFragment(string fragment); } - - /// <summary> - /// Code contract class for the <see cref="IAuthenticationRequest"/> type. - /// </summary> - [ContractClassFor(typeof(IAuthenticationRequest))] - internal abstract class IAuthenticationRequestContract : IAuthenticationRequest { - /// <summary> - /// Initializes a new instance of the <see cref="IAuthenticationRequestContract"/> class. - /// </summary> - protected IAuthenticationRequestContract() { - } - - #region IAuthenticationRequest Properties - - /// <summary> - /// Gets a value indicating whether the Provider should help the user - /// select a Claimed Identifier to send back to the relying party. - /// </summary> - bool IAuthenticationRequest.IsDirectedIdentity { - get { throw new NotImplementedException(); } - } - - /// <summary> - /// Gets a value indicating whether the requesting Relying Party is using a delegated URL. - /// </summary> - /// <remarks> - /// When delegated identifiers are used, the <see cref="IAuthenticationRequest.ClaimedIdentifier"/> should not - /// be changed at the Provider during authentication. - /// Delegation is only detectable on requests originating from OpenID 2.0 relying parties. - /// A relying party implementing only OpenID 1.x may use delegation and this property will - /// return false anyway. - /// </remarks> - bool IAuthenticationRequest.IsDelegatedIdentifier { - get { throw new NotImplementedException(); } - } - - /// <summary> - /// Gets or sets the Local Identifier to this OpenID Provider of the user attempting - /// to authenticate. Check <see cref="IAuthenticationRequest.IsDirectedIdentity"/> to see if - /// this value is valid. - /// </summary> - /// <remarks> - /// This may or may not be the same as the Claimed Identifier that the user agent - /// originally supplied to the relying party. The Claimed Identifier - /// endpoint may be delegating authentication to this provider using - /// this provider's local id, which is what this property contains. - /// Use this identifier when looking up this user in the provider's user account - /// list. - /// </remarks> - Identifier IAuthenticationRequest.LocalIdentifier { - get { - throw new NotImplementedException(); - } - - set { - throw new NotImplementedException(); - } - } - - /// <summary> - /// Gets or sets the identifier that the user agent is claiming at the relying party site. - /// Check <see cref="IAuthenticationRequest.IsDirectedIdentity"/> to see if this value is valid. - /// </summary> - /// <remarks> - /// <para>This property can only be set if <see cref="IAuthenticationRequest.IsDelegatedIdentifier"/> is - /// false, to prevent breaking URL delegation.</para> - /// <para>This will not be the same as this provider's local identifier for the user - /// if the user has set up his/her own identity page that points to this - /// provider for authentication.</para> - /// <para>The provider may use this identifier for displaying to the user when - /// asking for the user's permission to authenticate to the relying party.</para> - /// </remarks> - /// <exception cref="InvalidOperationException">Thrown from the setter - /// if <see cref="IAuthenticationRequest.IsDelegatedIdentifier"/> is true.</exception> - Identifier IAuthenticationRequest.ClaimedIdentifier { - get { - throw new NotImplementedException(); - } - - set { - IAuthenticationRequest req = this; - Requires.ValidState(!req.IsDelegatedIdentifier, OpenIdStrings.ClaimedIdentifierCannotBeSetOnDelegatedAuthentication); - Requires.ValidState(!req.IsDirectedIdentity || !(req.LocalIdentifier != null && req.LocalIdentifier != value), OpenIdStrings.IdentifierSelectRequiresMatchingIdentifiers); - } - } - - /// <summary> - /// Gets or sets a value indicating whether the provider has determined that the - /// <see cref="IAuthenticationRequest.ClaimedIdentifier"/> belongs to the currently logged in user - /// and wishes to share this information with the consumer. - /// </summary> - bool? IAuthenticationRequest.IsAuthenticated { - get { - throw new NotImplementedException(); - } - - set { - throw new NotImplementedException(); - } - } - - #endregion - - #region IHostProcessedRequest Properties - - /// <summary> - /// Gets the version of OpenID being used by the relying party that sent the request. - /// </summary> - ProtocolVersion IHostProcessedRequest.RelyingPartyVersion { - get { throw new NotImplementedException(); } - } - - /// <summary> - /// Gets the URL the consumer site claims to use as its 'base' address. - /// </summary> - Realm IHostProcessedRequest.Realm { - get { throw new NotImplementedException(); } - } - - /// <summary> - /// Gets a value indicating whether the consumer demands an immediate response. - /// If false, the consumer is willing to wait for the identity provider - /// to authenticate the user. - /// </summary> - bool IHostProcessedRequest.Immediate { - get { throw new NotImplementedException(); } - } - - /// <summary> - /// Gets or sets the provider endpoint claimed in the positive assertion. - /// </summary> - /// <value> - /// The default value is the URL that the request came in on from the relying party. - /// This value MUST match the value for the OP Endpoint in the discovery results for the - /// claimed identifier being asserted in a positive response. - /// </value> - Uri IHostProcessedRequest.ProviderEndpoint { - get { - throw new NotImplementedException(); - } - - set { - throw new NotImplementedException(); - } - } - - #endregion - - #region IRequest Properties - - /// <summary> - /// Gets a value indicating whether the response is ready to be sent to the user agent. - /// </summary> - /// <remarks> - /// This property returns false if there are properties that must be set on this - /// request instance before the response can be sent. - /// </remarks> - bool IRequest.IsResponseReady { - get { throw new NotImplementedException(); } - } - - /// <summary> - /// Gets or sets the security settings that apply to this request. - /// </summary> - /// <value> - /// Defaults to the OpenIdProvider.SecuritySettings on the OpenIdProvider. - /// </value> - ProviderSecuritySettings IRequest.SecuritySettings { - get { - throw new NotImplementedException(); - } - - set { - throw new NotImplementedException(); - } - } - - #endregion - - #region IAuthenticationRequest Methods - - /// <summary> - /// Adds an optional fragment (#fragment) portion to the ClaimedIdentifier. - /// Useful for identifier recycling. - /// </summary> - /// <param name="fragment">Should not include the # prefix character as that will be added internally. - /// May be null or the empty string to clear a previously set fragment.</param> - /// <remarks> - /// <para>Unlike the <see cref="IAuthenticationRequest.ClaimedIdentifier"/> property, which can only be set if - /// using directed identity, this method can be called on any URI claimed identifier.</para> - /// <para>Because XRI claimed identifiers (the canonical IDs) are never recycled, - /// this method should<i>not</i> be called for XRIs.</para> - /// </remarks> - /// <exception cref="InvalidOperationException"> - /// Thrown when this method is called on an XRI, or on a directed identity - /// request before the <see cref="IAuthenticationRequest.ClaimedIdentifier"/> property is set. - /// </exception> - void IAuthenticationRequest.SetClaimedIdentifierFragment(string fragment) { - Requires.ValidState(!(((IAuthenticationRequest)this).IsDirectedIdentity && ((IAuthenticationRequest)this).ClaimedIdentifier == null), OpenIdStrings.ClaimedIdentifierMustBeSetFirst); - Requires.ValidState(!(((IAuthenticationRequest)this).ClaimedIdentifier is XriIdentifier), OpenIdStrings.FragmentNotAllowedOnXRIs); - - throw new NotImplementedException(); - } - - #endregion - - #region IHostProcessedRequest Methods - - /// <summary> - /// Attempts to perform relying party discovery of the return URL claimed by the Relying Party. - /// </summary> - /// <param name="webRequestHandler">The web request handler to use for the RP discovery request.</param> - /// <returns> - /// The details of how successful the relying party discovery was. - /// </returns> - /// <remarks> - /// <para>Return URL verification is only attempted if this method is called.</para> - /// <para>See OpenID Authentication 2.0 spec section 9.2.1.</para> - /// </remarks> - RelyingPartyDiscoveryResult IHostProcessedRequest.IsReturnUrlDiscoverable(IDirectWebRequestHandler webRequestHandler) { - throw new NotImplementedException(); - } - - #endregion - - #region IRequest Methods - - /// <summary> - /// Adds an extension to the response to send to the relying party. - /// </summary> - /// <param name="extension">The extension to add to the response message.</param> - void IRequest.AddResponseExtension(DotNetOpenAuth.OpenId.Messages.IOpenIdMessageExtension extension) { - throw new NotImplementedException(); - } - - /// <summary> - /// Removes any response extensions previously added using <see cref="IRequest.AddResponseExtension"/>. - /// </summary> - /// <remarks> - /// This should be called before sending a negative response back to the relying party - /// if extensions were already added, since negative responses cannot carry extensions. - /// </remarks> - void IRequest.ClearResponseExtensions() { - } - - /// <summary> - /// Gets an extension sent from the relying party. - /// </summary> - /// <typeparam name="T">The type of the extension.</typeparam> - /// <returns> - /// An instance of the extension initialized with values passed in with the request. - /// </returns> - T IRequest.GetExtension<T>() { - throw new NotImplementedException(); - } - - /// <summary> - /// Gets an extension sent from the relying party. - /// </summary> - /// <param name="extensionType">The type of the extension.</param> - /// <returns> - /// An instance of the extension initialized with values passed in with the request. - /// </returns> - DotNetOpenAuth.OpenId.Messages.IOpenIdMessageExtension IRequest.GetExtension(Type extensionType) { - throw new NotImplementedException(); - } - - #endregion - } } diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Provider/IHostProcessedRequest.cs b/src/DotNetOpenAuth.OpenId/OpenId/Provider/IHostProcessedRequest.cs index 236f4a8..4a464b9 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Provider/IHostProcessedRequest.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Provider/IHostProcessedRequest.cs @@ -6,15 +6,14 @@ namespace DotNetOpenAuth.OpenId.Provider { using System; - using System.Diagnostics.Contracts; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Messages; + using Validation; /// <summary> /// Interface exposing incoming messages to the OpenID Provider that /// require interaction with the host site. /// </summary> - [ContractClass(typeof(IHostProcessedRequestContract))] public interface IHostProcessedRequest : IRequest { /// <summary> /// Gets the version of OpenID being used by the relying party that sent the request. @@ -56,147 +55,4 @@ namespace DotNetOpenAuth.OpenId.Provider { /// </remarks> RelyingPartyDiscoveryResult IsReturnUrlDiscoverable(IDirectWebRequestHandler webRequestHandler); } - - /// <summary> - /// Code contract for the <see cref="IHostProcessedRequest"/> type. - /// </summary> - [ContractClassFor(typeof(IHostProcessedRequest))] - internal abstract class IHostProcessedRequestContract : IHostProcessedRequest { - /// <summary> - /// Initializes a new instance of the <see cref="IHostProcessedRequestContract"/> class. - /// </summary> - protected IHostProcessedRequestContract() { - } - - #region IHostProcessedRequest Properties - - /// <summary> - /// Gets the version of OpenID being used by the relying party that sent the request. - /// </summary> - ProtocolVersion IHostProcessedRequest.RelyingPartyVersion { - get { throw new System.NotImplementedException(); } - } - - /// <summary> - /// Gets the URL the consumer site claims to use as its 'base' address. - /// </summary> - Realm IHostProcessedRequest.Realm { - get { throw new System.NotImplementedException(); } - } - - /// <summary> - /// Gets a value indicating whether the consumer demands an immediate response. - /// If false, the consumer is willing to wait for the identity provider - /// to authenticate the user. - /// </summary> - bool IHostProcessedRequest.Immediate { - get { throw new System.NotImplementedException(); } - } - - /// <summary> - /// Gets or sets the provider endpoint. - /// </summary> - /// <value> - /// The default value is the URL that the request came in on from the relying party. - /// </value> - Uri IHostProcessedRequest.ProviderEndpoint { - get { - Contract.Ensures(Contract.Result<Uri>() != null); - throw new NotImplementedException(); - } - - set { - Contract.Requires(value != null); - throw new NotImplementedException(); - } - } - - #endregion - - #region IRequest Members - - /// <summary> - /// Gets or sets the security settings that apply to this request. - /// </summary> - /// <value> - /// Defaults to the OpenIdProvider.SecuritySettings on the OpenIdProvider. - /// </value> - ProviderSecuritySettings IRequest.SecuritySettings { - get { throw new NotImplementedException(); } - set { throw new NotImplementedException(); } - } - - /// <summary> - /// Gets a value indicating whether the response is ready to be sent to the user agent. - /// </summary> - /// <remarks> - /// This property returns false if there are properties that must be set on this - /// request instance before the response can be sent. - /// </remarks> - bool IRequest.IsResponseReady { - get { throw new System.NotImplementedException(); } - } - - /// <summary> - /// Adds an extension to the response to send to the relying party. - /// </summary> - /// <param name="extension">The extension to add to the response message.</param> - void IRequest.AddResponseExtension(DotNetOpenAuth.OpenId.Messages.IOpenIdMessageExtension extension) { - throw new System.NotImplementedException(); - } - - /// <summary> - /// Removes any response extensions previously added using <see cref="IRequest.AddResponseExtension"/>. - /// </summary> - /// <remarks> - /// This should be called before sending a negative response back to the relying party - /// if extensions were already added, since negative responses cannot carry extensions. - /// </remarks> - void IRequest.ClearResponseExtensions() { - } - - /// <summary> - /// Gets an extension sent from the relying party. - /// </summary> - /// <typeparam name="T">The type of the extension.</typeparam> - /// <returns> - /// An instance of the extension initialized with values passed in with the request. - /// </returns> - T IRequest.GetExtension<T>() { - throw new System.NotImplementedException(); - } - - /// <summary> - /// Gets an extension sent from the relying party. - /// </summary> - /// <param name="extensionType">The type of the extension.</param> - /// <returns> - /// An instance of the extension initialized with values passed in with the request. - /// </returns> - DotNetOpenAuth.OpenId.Messages.IOpenIdMessageExtension IRequest.GetExtension(System.Type extensionType) { - throw new System.NotImplementedException(); - } - - #endregion - - #region IHostProcessedRequest Methods - - /// <summary> - /// Attempts to perform relying party discovery of the return URL claimed by the Relying Party. - /// </summary> - /// <param name="webRequestHandler">The web request handler.</param> - /// <returns> - /// The details of how successful the relying party discovery was. - /// </returns> - /// <remarks> - /// <para>Return URL verification is only attempted if this method is called.</para> - /// <para>See OpenID Authentication 2.0 spec section 9.2.1.</para> - /// </remarks> - RelyingPartyDiscoveryResult IHostProcessedRequest.IsReturnUrlDiscoverable(IDirectWebRequestHandler webRequestHandler) { - Requires.NotNull(webRequestHandler, "webRequestHandler"); - throw new System.NotImplementedException(); - } - - #endregion - } } diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Provider/IProviderBehavior.cs b/src/DotNetOpenAuth.OpenId/OpenId/Provider/IProviderBehavior.cs index 840fe3a..57fe66b 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Provider/IProviderBehavior.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Provider/IProviderBehavior.cs @@ -6,13 +6,12 @@ namespace DotNetOpenAuth.OpenId.Provider { using System; - using System.Diagnostics.Contracts; using DotNetOpenAuth.OpenId.ChannelElements; + using Validation; /// <summary> /// Applies a custom security policy to certain OpenID security settings and behaviors. /// </summary> - [ContractClass(typeof(IProviderBehaviorContract))] public interface IProviderBehavior { /// <summary> /// Applies a well known set of security requirements to a default set of security settings. @@ -50,65 +49,4 @@ namespace DotNetOpenAuth.OpenId.Provider { /// </returns> bool OnOutgoingResponse(IAuthenticationRequest request); } - - /// <summary> - /// Code contract for the <see cref="IProviderBehavior"/> type. - /// </summary> - [ContractClassFor(typeof(IProviderBehavior))] - internal abstract class IProviderBehaviorContract : IProviderBehavior { - /// <summary> - /// Initializes a new instance of the <see cref="IProviderBehaviorContract"/> class. - /// </summary> - protected IProviderBehaviorContract() { - } - - #region IProviderBehavior Members - - /// <summary> - /// Applies a well known set of security requirements to a default set of security settings. - /// </summary> - /// <param name="securitySettings">The security settings to enhance with the requirements of this profile.</param> - /// <remarks> - /// Care should be taken to never decrease security when applying a profile. - /// Profiles should only enhance security requirements to avoid being - /// incompatible with each other. - /// </remarks> - void IProviderBehavior.ApplySecuritySettings(ProviderSecuritySettings securitySettings) { - Requires.NotNull(securitySettings, "securitySettings"); - throw new System.NotImplementedException(); - } - - /// <summary> - /// Called when a request is received by the Provider. - /// </summary> - /// <param name="request">The incoming request.</param> - /// <returns> - /// <c>true</c> if this behavior owns this request and wants to stop other behaviors - /// from handling it; <c>false</c> to allow other behaviors to process this request. - /// </returns> - /// <remarks> - /// Implementations may set a new value to <see cref="IRequest.SecuritySettings"/> but - /// should not change the properties on the instance of <see cref="ProviderSecuritySettings"/> - /// itself as that instance may be shared across many requests. - /// </remarks> - bool IProviderBehavior.OnIncomingRequest(IRequest request) { - Requires.NotNull(request, "request"); - throw new System.NotImplementedException(); - } - - /// <summary> - /// Called when the Provider is preparing to send a response to an authentication request. - /// </summary> - /// <param name="request">The request that is configured to generate the outgoing response.</param> - /// <returns> - /// <c>true</c> if this behavior owns this request and wants to stop other behaviors - /// from handling it; <c>false</c> to allow other behaviors to process this request. - /// </returns> - bool IProviderBehavior.OnOutgoingResponse(IAuthenticationRequest request) { - Requires.NotNull(request, "request"); - throw new System.NotImplementedException(); - } - - #endregion - } } diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Provider/IRequest.cs b/src/DotNetOpenAuth.OpenId/OpenId/Provider/IRequest.cs index 0e29792..791237f 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Provider/IRequest.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Provider/IRequest.cs @@ -8,10 +8,10 @@ namespace DotNetOpenAuth.OpenId.Provider { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Text; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Messages; + using Validation; /// <summary> /// Represents an incoming OpenId authentication request. @@ -21,7 +21,6 @@ namespace DotNetOpenAuth.OpenId.Provider { /// be authentication requests where the Provider site has to make decisions based /// on its own user database and policies. /// </remarks> - [ContractClass(typeof(IRequestContract))] public interface IRequest { /// <summary> /// Gets a value indicating whether the response is ready to be sent to the user agent. @@ -68,82 +67,4 @@ namespace DotNetOpenAuth.OpenId.Provider { /// <returns>An instance of the extension initialized with values passed in with the request.</returns> IOpenIdMessageExtension GetExtension(Type extensionType); } - - /// <summary> - /// Code contract for the <see cref="IRequest"/> interface. - /// </summary> - [ContractClassFor(typeof(IRequest))] - internal abstract class IRequestContract : IRequest { - /// <summary> - /// Prevents a default instance of the <see cref="IRequestContract"/> class from being created. - /// </summary> - private IRequestContract() { - } - - #region IRequest Members - - /// <summary> - /// Gets or sets the security settings that apply to this request. - /// </summary> - /// <value>Defaults to the OpenIdProvider.SecuritySettings on the OpenIdProvider.</value> - ProviderSecuritySettings IRequest.SecuritySettings { - get { throw new NotImplementedException(); } - set { throw new NotImplementedException(); } - } - - /// <summary> - /// Gets a value indicating whether the response is ready to be sent to the user agent. - /// </summary> - /// <remarks> - /// This property returns false if there are properties that must be set on this - /// request instance before the response can be sent. - /// </remarks> - bool IRequest.IsResponseReady { - get { throw new NotImplementedException(); } - } - - /// <summary> - /// Adds an extension to the response to send to the relying party. - /// </summary> - /// <param name="extension">The extension to add to the response message.</param> - void IRequest.AddResponseExtension(IOpenIdMessageExtension extension) { - Requires.NotNull(extension, "extension"); - throw new NotImplementedException(); - } - - /// <summary> - /// Removes any response extensions previously added using <see cref="IRequest.AddResponseExtension"/>. - /// </summary> - /// <remarks> - /// This should be called before sending a negative response back to the relying party - /// if extensions were already added, since negative responses cannot carry extensions. - /// </remarks> - void IRequest.ClearResponseExtensions() { - } - - /// <summary> - /// Gets an extension sent from the relying party. - /// </summary> - /// <typeparam name="T">The type of the extension.</typeparam> - /// <returns> - /// An instance of the extension initialized with values passed in with the request. - /// </returns> - T IRequest.GetExtension<T>() { - throw new NotImplementedException(); - } - - /// <summary> - /// Gets an extension sent from the relying party. - /// </summary> - /// <param name="extensionType">The type of the extension.</param> - /// <returns> - /// An instance of the extension initialized with values passed in with the request. - /// </returns> - IOpenIdMessageExtension IRequest.GetExtension(Type extensionType) { - Requires.NotNull(extensionType, "extensionType"); - throw new NotImplementedException(); - } - - #endregion - } } diff --git a/src/DotNetOpenAuth.OpenId/OpenId/ProviderEndpointDescription.cs b/src/DotNetOpenAuth.OpenId/OpenId/ProviderEndpointDescription.cs index 7cac8c6..ff87795 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/ProviderEndpointDescription.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/ProviderEndpointDescription.cs @@ -9,11 +9,11 @@ namespace DotNetOpenAuth.OpenId { using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Linq; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.Messages; using DotNetOpenAuth.OpenId.RelyingParty; + using Validation; /// <summary> /// Describes some OpenID Provider endpoint and its capabilities. diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Realm.cs b/src/DotNetOpenAuth.OpenId/OpenId/Realm.cs index 8f1baed..c1a959e 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/Realm.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/Realm.cs @@ -19,6 +19,7 @@ namespace DotNetOpenAuth.OpenId { using DotNetOpenAuth.Messaging.Reflection; using DotNetOpenAuth.Xrds; using DotNetOpenAuth.Yadis; + using Validation; /// <summary> /// A trust root to validate requests and match return URLs against. @@ -113,8 +114,7 @@ namespace DotNetOpenAuth.OpenId { /// </remarks> public static Realm AutoDetect { get { - Requires.ValidState(HttpContext.Current != null && HttpContext.Current.Request != null, MessagingStrings.HttpContextRequired); - Contract.Ensures(Contract.Result<Realm>() != null); + RequiresEx.ValidState(HttpContext.Current != null && HttpContext.Current.Request != null, MessagingStrings.HttpContextRequired); var realmUrl = new UriBuilder(MessagingUtilities.GetWebRoot()); @@ -260,7 +260,6 @@ namespace DotNetOpenAuth.OpenId { [SuppressMessage("Microsoft.Usage", "CA2234:PassSystemUriObjectsInsteadOfStrings", Justification = "Not all Realms are valid URLs.")] [DebuggerStepThrough] public static implicit operator Realm(string uri) { - Contract.Ensures((Contract.Result<Realm>() != null) == (uri != null)); return uri != null ? new Realm(uri) : null; } @@ -271,7 +270,6 @@ namespace DotNetOpenAuth.OpenId { /// <returns>The result of the conversion.</returns> [DebuggerStepThrough] public static implicit operator Realm(Uri uri) { - Contract.Ensures((Contract.Result<Realm>() != null) == (uri != null)); return uri != null ? new Realm(uri) : null; } @@ -282,7 +280,6 @@ namespace DotNetOpenAuth.OpenId { /// <returns>The result of the conversion.</returns> [DebuggerStepThrough] public static implicit operator string(Realm realm) { - Contract.Ensures((Contract.Result<string>() != null) == (realm != null)); return realm != null ? realm.ToString() : null; } diff --git a/src/DotNetOpenAuth.OpenId/OpenId/RelyingParty/IAuthenticationRequest.cs b/src/DotNetOpenAuth.OpenId/OpenId/RelyingParty/IAuthenticationRequest.cs index 92e3233..886029c 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/RelyingParty/IAuthenticationRequest.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/RelyingParty/IAuthenticationRequest.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; @@ -18,7 +17,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// requests that may be queried/modified in specific ways before being /// routed to the OpenID Provider. /// </summary> - [ContractClass(typeof(IAuthenticationRequestContract))] public interface IAuthenticationRequest { /// <summary> /// Gets or sets the mode the Provider should use during authentication. diff --git a/src/DotNetOpenAuth.OpenId/OpenId/RelyingParty/IAuthenticationRequestContract.cs b/src/DotNetOpenAuth.OpenId/OpenId/RelyingParty/IAuthenticationRequestContract.cs deleted file mode 100644 index 4ddc6ae..0000000 --- a/src/DotNetOpenAuth.OpenId/OpenId/RelyingParty/IAuthenticationRequestContract.cs +++ /dev/null @@ -1,111 +0,0 @@ -// <auto-generated /> - -namespace DotNetOpenAuth.OpenId.RelyingParty { - using System; - using System.Collections.Generic; - using System.Diagnostics.Contracts; - using System.Linq; - using System.Text; - using DotNetOpenAuth.Messaging; - using DotNetOpenAuth.OpenId.Messages; - - [ContractClassFor(typeof(IAuthenticationRequest))] - internal abstract class IAuthenticationRequestContract : IAuthenticationRequest { - #region IAuthenticationRequest Members - - AuthenticationRequestMode IAuthenticationRequest.Mode { - get { - throw new NotImplementedException(); - } - - set { - throw new NotImplementedException(); - } - } - - OutgoingWebResponse IAuthenticationRequest.RedirectingResponse { - get { throw new NotImplementedException(); } - } - - Uri IAuthenticationRequest.ReturnToUrl { - get { throw new NotImplementedException(); } - } - - Realm IAuthenticationRequest.Realm { - get { - Contract.Ensures(Contract.Result<Realm>() != null); - throw new NotImplementedException(); - } - } - - Identifier IAuthenticationRequest.ClaimedIdentifier { - get { - throw new NotImplementedException(); - } - } - - bool IAuthenticationRequest.IsDirectedIdentity { - get { throw new NotImplementedException(); } - } - - bool IAuthenticationRequest.IsExtensionOnly { - get { - throw new NotImplementedException(); - } - - set { - throw new NotImplementedException(); - } - } - - IProviderEndpoint IAuthenticationRequest.Provider { - get { - Contract.Ensures(Contract.Result<IProviderEndpoint>() != null); - throw new NotImplementedException(); - } - } - - IdentifierDiscoveryResult IAuthenticationRequest.DiscoveryResult { - get { - Contract.Ensures(Contract.Result<IdentifierDiscoveryResult>() != null); - throw new NotImplementedException(); - } - } - - void IAuthenticationRequest.AddCallbackArguments(IDictionary<string, string> arguments) { - Requires.NotNull(arguments, "arguments"); - Requires.True(arguments.Keys.All(k => !string.IsNullOrEmpty(k)), "arguments"); - Requires.True(arguments.Values.All(v => v != null), "arguments"); - throw new NotImplementedException(); - } - - void IAuthenticationRequest.AddCallbackArguments(string key, string value) { - Requires.NotNullOrEmpty(key, "key"); - Requires.NotNull(value, "value"); - throw new NotImplementedException(); - } - - void IAuthenticationRequest.SetCallbackArgument(string key, string value) { - Requires.NotNullOrEmpty(key, "key"); - Requires.NotNull(value, "value"); - throw new NotImplementedException(); - } - - void IAuthenticationRequest.AddExtension(IOpenIdMessageExtension extension) { - Requires.NotNull(extension, "extension"); - throw new NotImplementedException(); - } - - void IAuthenticationRequest.RedirectToProvider() { - throw new NotImplementedException(); - } - - void IAuthenticationRequest.SetUntrustedCallbackArgument(string key, string value) { - Requires.NotNullOrEmpty(key, "key"); - Requires.NotNull(value, "value"); - throw new NotImplementedException(); - } - - #endregion - } -} diff --git a/src/DotNetOpenAuth.OpenId/OpenId/RelyingParty/IAuthenticationResponse.cs b/src/DotNetOpenAuth.OpenId/OpenId/RelyingParty/IAuthenticationResponse.cs index 10e99e4..bfdc65d 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/RelyingParty/IAuthenticationResponse.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/RelyingParty/IAuthenticationResponse.cs @@ -8,12 +8,12 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Globalization; using System.Text; using System.Web; using DotNetOpenAuth.OpenId.Extensions; using DotNetOpenAuth.OpenId.Messages; + using Validation; /// <summary> /// An instance of this interface represents an identity assertion @@ -26,7 +26,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// assertions. This interface does not offer a way to discern between /// solicited and unsolicited assertions as they should be treated equally. /// </remarks> - [ContractClass(typeof(IAuthenticationResponseContract))] public interface IAuthenticationResponse { /// <summary> /// Gets the Identifier that the end user claims to own. For use with user database storage and lookup. @@ -254,277 +253,4 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// </remarks> IOpenIdMessageExtension GetUntrustedExtension(Type extensionType); } - - /// <summary> - /// Code contract for the <see cref="IAuthenticationResponse"/> type. - /// </summary> - [ContractClassFor(typeof(IAuthenticationResponse))] - internal abstract class IAuthenticationResponseContract : IAuthenticationResponse { - /// <summary> - /// Initializes a new instance of the <see cref="IAuthenticationResponseContract"/> class. - /// </summary> - protected IAuthenticationResponseContract() { - } - - #region IAuthenticationResponse Members - - /// <summary> - /// Gets the Identifier that the end user claims to own. For use with user database storage and lookup. - /// May be null for some failed authentications (i.e. failed directed identity authentications). - /// </summary> - /// <value></value> - /// <remarks> - /// <para> - /// This is the secure identifier that should be used for database storage and lookup. - /// It is not always friendly (i.e. =Arnott becomes =!9B72.7DD1.50A9.5CCD), but it protects - /// user identities against spoofing and other attacks. - /// </para> - /// <para> - /// For user-friendly identifiers to display, use the - /// <see cref="IAuthenticationResponse.FriendlyIdentifierForDisplay"/> property. - /// </para> - /// </remarks> - Identifier IAuthenticationResponse.ClaimedIdentifier { - get { throw new NotImplementedException(); } - } - - /// <summary> - /// Gets a user-friendly OpenID Identifier for display purposes ONLY. - /// </summary> - /// <value></value> - /// <remarks> - /// <para> - /// This <i>should</i> be put through <see cref="HttpUtility.HtmlEncode(string)"/> before - /// sending to a browser to secure against javascript injection attacks. - /// </para> - /// <para> - /// This property retains some aspects of the user-supplied identifier that get lost - /// in the <see cref="IAuthenticationResponse.ClaimedIdentifier"/>. For example, XRIs used as user-supplied - /// identifiers (i.e. =Arnott) become unfriendly unique strings (i.e. =!9B72.7DD1.50A9.5CCD). - /// For display purposes, such as text on a web page that says "You're logged in as ...", - /// this property serves to provide the =Arnott string, or whatever else is the most friendly - /// string close to what the user originally typed in. - /// </para> - /// <para> - /// If the user-supplied identifier is a URI, this property will be the URI after all - /// redirects, and with the protocol and fragment trimmed off. - /// If the user-supplied identifier is an XRI, this property will be the original XRI. - /// If the user-supplied identifier is an OpenID Provider identifier (i.e. yahoo.com), - /// this property will be the Claimed Identifier, with the protocol stripped if it is a URI. - /// </para> - /// <para> - /// It is <b>very</b> important that this property <i>never</i> be used for database storage - /// or lookup to avoid identity spoofing and other security risks. For database storage - /// and lookup please use the <see cref="IAuthenticationResponse.ClaimedIdentifier"/> property. - /// </para> - /// </remarks> - string IAuthenticationResponse.FriendlyIdentifierForDisplay { - get { throw new NotImplementedException(); } - } - - /// <summary> - /// Gets the detailed success or failure status of the authentication attempt. - /// </summary> - /// <value></value> - AuthenticationStatus IAuthenticationResponse.Status { - get { throw new NotImplementedException(); } - } - - /// <summary> - /// Gets information about the OpenId Provider, as advertised by the - /// OpenID discovery documents found at the <see cref="IAuthenticationResponse.ClaimedIdentifier"/> - /// location, if available. - /// </summary> - /// <value> - /// The Provider endpoint that issued the positive assertion; - /// or <c>null</c> if information about the Provider is unavailable. - /// </value> - IProviderEndpoint IAuthenticationResponse.Provider { - get { throw new NotImplementedException(); } - } - - /// <summary> - /// Gets the details regarding a failed authentication attempt, if available. - /// This will be set if and only if <see cref="IAuthenticationResponse.Status"/> is <see cref="AuthenticationStatus.Failed"/>. - /// </summary> - /// <value></value> - Exception IAuthenticationResponse.Exception { - get { throw new NotImplementedException(); } - } - - /// <summary> - /// Gets a callback argument's value that was previously added using - /// <see cref="IAuthenticationRequest.AddCallbackArguments(string, string)"/>. - /// </summary> - /// <param name="key">The name of the parameter whose value is sought.</param> - /// <returns> - /// The value of the argument, or null if the named parameter could not be found. - /// </returns> - /// <remarks> - /// <para>This may return any argument on the querystring that came with the authentication response, - /// which may include parameters not explicitly added using - /// <see cref="IAuthenticationRequest.AddCallbackArguments(string, string)"/>.</para> - /// <para>Note that these values are NOT protected against tampering in transit.</para> - /// </remarks> - string IAuthenticationResponse.GetCallbackArgument(string key) { - Requires.NotNullOrEmpty(key, "key"); - throw new NotImplementedException(); - } - - /// <summary> - /// Gets all the callback arguments that were previously added using - /// <see cref="IAuthenticationRequest.AddCallbackArguments(string, string)"/> or as a natural part - /// of the return_to URL. - /// </summary> - /// <returns>A name-value dictionary. Never null.</returns> - /// <remarks> - /// <para>This MAY return any argument on the querystring that came with the authentication response, - /// which may include parameters not explicitly added using - /// <see cref="IAuthenticationRequest.AddCallbackArguments(string, string)"/>.</para> - /// <para>Note that these values are NOT protected against tampering in transit.</para> - /// </remarks> - IDictionary<string, string> IAuthenticationResponse.GetCallbackArguments() { - throw new NotImplementedException(); - } - - /// <summary> - /// Tries to get an OpenID extension that may be present in the response. - /// </summary> - /// <typeparam name="T">The type of extension to look for in the response message.</typeparam> - /// <returns> - /// The extension, if it is found. Null otherwise. - /// </returns> - /// <remarks> - /// <para>Extensions are returned only if the Provider signed them. - /// Relying parties that do not care if the values were modified in - /// transit should use the <see cref="IAuthenticationResponse.GetUntrustedExtension<T>"/> method - /// in order to allow the Provider to not sign the extension. </para> - /// <para>Unsigned extensions are completely unreliable and should be - /// used only to prefill user forms since the user or any other third - /// party may have tampered with the data carried by the extension.</para> - /// <para>Signed extensions are only reliable if the relying party - /// trusts the OpenID Provider that signed them. Signing does not mean - /// the relying party can trust the values -- it only means that the values - /// have not been tampered with since the Provider sent the message.</para> - /// </remarks> - T IAuthenticationResponse.GetExtension<T>() { - throw new NotImplementedException(); - } - - /// <summary> - /// Tries to get an OpenID extension that may be present in the response. - /// </summary> - /// <param name="extensionType">Type of the extension to look for in the response.</param> - /// <returns> - /// The extension, if it is found. Null otherwise. - /// </returns> - /// <remarks> - /// <para>Extensions are returned only if the Provider signed them. - /// Relying parties that do not care if the values were modified in - /// transit should use the <see cref="IAuthenticationResponse.GetUntrustedExtension"/> method - /// in order to allow the Provider to not sign the extension. </para> - /// <para>Unsigned extensions are completely unreliable and should be - /// used only to prefill user forms since the user or any other third - /// party may have tampered with the data carried by the extension.</para> - /// <para>Signed extensions are only reliable if the relying party - /// trusts the OpenID Provider that signed them. Signing does not mean - /// the relying party can trust the values -- it only means that the values - /// have not been tampered with since the Provider sent the message.</para> - /// </remarks> - IOpenIdMessageExtension IAuthenticationResponse.GetExtension(Type extensionType) { - Requires.NotNullSubtype<IOpenIdMessageExtension>(extensionType, "extensionType"); - ////ErrorUtilities.VerifyArgument(typeof(IOpenIdMessageExtension).IsAssignableFrom(extensionType), string.Format(CultureInfo.CurrentCulture, OpenIdStrings.TypeMustImplementX, typeof(IOpenIdMessageExtension).FullName)); - throw new NotImplementedException(); - } - - /// <summary> - /// Tries to get an OpenID extension that may be present in the response, without - /// requiring it to be signed by the Provider. - /// </summary> - /// <typeparam name="T">The type of extension to look for in the response message.</typeparam> - /// <returns> - /// The extension, if it is found. Null otherwise. - /// </returns> - /// <remarks> - /// <para>Extensions are returned whether they are signed or not. - /// Use the <see cref="IAuthenticationResponse.GetExtension<T>"/> method to retrieve - /// extension responses only if they are signed by the Provider to - /// protect against tampering. </para> - /// <para>Unsigned extensions are completely unreliable and should be - /// used only to prefill user forms since the user or any other third - /// party may have tampered with the data carried by the extension.</para> - /// <para>Signed extensions are only reliable if the relying party - /// trusts the OpenID Provider that signed them. Signing does not mean - /// the relying party can trust the values -- it only means that the values - /// have not been tampered with since the Provider sent the message.</para> - /// </remarks> - T IAuthenticationResponse.GetUntrustedExtension<T>() { - throw new NotImplementedException(); - } - - /// <summary> - /// Tries to get an OpenID extension that may be present in the response, without - /// requiring it to be signed by the Provider. - /// </summary> - /// <param name="extensionType">Type of the extension to look for in the response.</param> - /// <returns> - /// The extension, if it is found. Null otherwise. - /// </returns> - /// <remarks> - /// <para>Extensions are returned whether they are signed or not. - /// Use the <see cref="IAuthenticationResponse.GetExtension"/> method to retrieve - /// extension responses only if they are signed by the Provider to - /// protect against tampering. </para> - /// <para>Unsigned extensions are completely unreliable and should be - /// used only to prefill user forms since the user or any other third - /// party may have tampered with the data carried by the extension.</para> - /// <para>Signed extensions are only reliable if the relying party - /// trusts the OpenID Provider that signed them. Signing does not mean - /// the relying party can trust the values -- it only means that the values - /// have not been tampered with since the Provider sent the message.</para> - /// </remarks> - IOpenIdMessageExtension IAuthenticationResponse.GetUntrustedExtension(Type extensionType) { - Requires.NotNullSubtype<IOpenIdMessageExtension>(extensionType, "extensionType"); - ////ErrorUtilities.VerifyArgument(typeof(IOpenIdMessageExtension).IsAssignableFrom(extensionType), string.Format(CultureInfo.CurrentCulture, OpenIdStrings.TypeMustImplementX, typeof(IOpenIdMessageExtension).FullName)); - throw new NotImplementedException(); - } - - /// <summary> - /// Gets a callback argument's value that was previously added using - /// <see cref="IAuthenticationRequest.AddCallbackArguments(string, string)"/>. - /// </summary> - /// <param name="key">The name of the parameter whose value is sought.</param> - /// <returns> - /// The value of the argument, or null if the named parameter could not be found. - /// </returns> - /// <remarks> - /// Callback parameters are only available even if the RP is in stateless mode, - /// or the callback parameters are otherwise unverifiable as untampered with. - /// Therefore, use this method only when the callback argument is not to be - /// used to make a security-sensitive decision. - /// </remarks> - string IAuthenticationResponse.GetUntrustedCallbackArgument(string key) { - Requires.NotNullOrEmpty(key, "key"); - throw new NotImplementedException(); - } - - /// <summary> - /// Gets all the callback arguments that were previously added using - /// <see cref="IAuthenticationRequest.AddCallbackArguments(string, string)"/> or as a natural part - /// of the return_to URL. - /// </summary> - /// <returns>A name-value dictionary. Never null.</returns> - /// <remarks> - /// Callback parameters are only available even if the RP is in stateless mode, - /// or the callback parameters are otherwise unverifiable as untampered with. - /// Therefore, use this method only when the callback argument is not to be - /// used to make a security-sensitive decision. - /// </remarks> - IDictionary<string, string> IAuthenticationResponse.GetUntrustedCallbackArguments() { - Contract.Ensures(Contract.Result<IDictionary<string, string>>() != null); - throw new NotImplementedException(); - } - - #endregion - } } diff --git a/src/DotNetOpenAuth.OpenId/OpenId/RelyingParty/IRelyingPartyBehavior.cs b/src/DotNetOpenAuth.OpenId/OpenId/RelyingParty/IRelyingPartyBehavior.cs index 0113f62..b056fcd 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/RelyingParty/IRelyingPartyBehavior.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/RelyingParty/IRelyingPartyBehavior.cs @@ -6,12 +6,11 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using System; - using System.Diagnostics.Contracts; + using Validation; /// <summary> /// Applies a custom security policy to certain OpenID security settings and behaviors. /// </summary> - [ContractClass(typeof(IRelyingPartyBehaviorContract))] public interface IRelyingPartyBehavior { /// <summary> /// Applies a well known set of security requirements to a default set of security settings. @@ -40,53 +39,4 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// <param name="assertion">The positive assertion.</param> void OnIncomingPositiveAssertion(IAuthenticationResponse assertion); } - - /// <summary> - /// Contract class for the <see cref="IRelyingPartyBehavior"/> interface. - /// </summary> - [ContractClassFor(typeof(IRelyingPartyBehavior))] - internal abstract class IRelyingPartyBehaviorContract : IRelyingPartyBehavior { - /// <summary> - /// Prevents a default instance of the <see cref="IRelyingPartyBehaviorContract"/> class from being created. - /// </summary> - private IRelyingPartyBehaviorContract() { - } - - #region IRelyingPartyBehavior Members - - /// <summary> - /// Applies a well known set of security requirements to a default set of security settings. - /// </summary> - /// <param name="securitySettings">The security settings to enhance with the requirements of this profile.</param> - /// <remarks> - /// Care should be taken to never decrease security when applying a profile. - /// Profiles should only enhance security requirements to avoid being - /// incompatible with each other. - /// </remarks> - void IRelyingPartyBehavior.ApplySecuritySettings(RelyingPartySecuritySettings securitySettings) { - Requires.NotNull(securitySettings, "securitySettings"); - } - - /// <summary> - /// Called when an authentication request is about to be sent. - /// </summary> - /// <param name="request">The request.</param> - /// <remarks> - /// Implementations should be prepared to be called multiple times on the same outgoing message - /// without malfunctioning. - /// </remarks> - void IRelyingPartyBehavior.OnOutgoingAuthenticationRequest(IAuthenticationRequest request) { - Requires.NotNull(request, "request"); - } - - /// <summary> - /// Called when an incoming positive assertion is received. - /// </summary> - /// <param name="assertion">The positive assertion.</param> - void IRelyingPartyBehavior.OnIncomingPositiveAssertion(IAuthenticationResponse assertion) { - Requires.NotNull(assertion, "assertion"); - } - - #endregion - } } diff --git a/src/DotNetOpenAuth.OpenId/OpenId/RelyingParty/RelyingPartySecuritySettings.cs b/src/DotNetOpenAuth.OpenId/OpenId/RelyingParty/RelyingPartySecuritySettings.cs index 77ccbca..e866f24 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/RelyingParty/RelyingPartySecuritySettings.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/RelyingParty/RelyingPartySecuritySettings.cs @@ -9,7 +9,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Linq; using DotNetOpenAuth.Messaging; diff --git a/src/DotNetOpenAuth.OpenId/OpenId/RelyingPartyEndpointDescription.cs b/src/DotNetOpenAuth.OpenId/OpenId/RelyingPartyEndpointDescription.cs index f0d3b6a..d7ebd3a 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/RelyingPartyEndpointDescription.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/RelyingPartyEndpointDescription.cs @@ -8,10 +8,10 @@ namespace DotNetOpenAuth.OpenId { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// A description of some OpenID Relying Party endpoint. diff --git a/src/DotNetOpenAuth.OpenId/OpenId/SecuritySettings.cs b/src/DotNetOpenAuth.OpenId/OpenId/SecuritySettings.cs index 2035c9f..589f470 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/SecuritySettings.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/SecuritySettings.cs @@ -8,8 +8,8 @@ namespace DotNetOpenAuth.OpenId { using System; using System.Collections.Generic; using System.Collections.Specialized; - using System.Diagnostics.Contracts; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// Security settings that may be applicable to both relying parties and providers. diff --git a/src/DotNetOpenAuth.OpenId/OpenId/UriIdentifier.cs b/src/DotNetOpenAuth.OpenId/OpenId/UriIdentifier.cs index 631eab6..b9f6ebc 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/UriIdentifier.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/UriIdentifier.cs @@ -19,6 +19,7 @@ namespace DotNetOpenAuth.OpenId { using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Xrds; using DotNetOpenAuth.Yadis; + using Validation; /// <summary> /// A URI style of OpenID Identifier. @@ -480,7 +481,6 @@ namespace DotNetOpenAuth.OpenId { /// <returns>The non-compressing equivalent scheme or URL for the given value.</returns> private static string NormalSchemeToSpecialRoundTrippingScheme(string normal) { Requires.NotNullOrEmpty(normal, "normal"); - Contract.Ensures(!string.IsNullOrEmpty(Contract.Result<string>())); ErrorUtilities.VerifyInternal(schemeSubstitution, "Wrong schemeSubstitution value."); int delimiterIndex = normal.IndexOf(Uri.SchemeDelimiter, StringComparison.Ordinal); @@ -564,14 +564,14 @@ namespace DotNetOpenAuth.OpenId { // Get the Path out ourselves, since the default Uri parser compresses it too much for OpenID. int schemeLength = value.IndexOf(Uri.SchemeDelimiter, StringComparison.Ordinal); - Contract.Assume(schemeLength > 0); + Assumes.True(schemeLength > 0); int hostStart = schemeLength + Uri.SchemeDelimiter.Length; int hostFinish = value.IndexOf('/', hostStart); if (hostFinish < 0) { this.Path = "/"; } else { int pathFinish = value.IndexOfAny(PathEndingCharacters, hostFinish); - Contract.Assume(pathFinish >= hostFinish || pathFinish < 0); + Assumes.True(pathFinish >= hostFinish || pathFinish < 0); if (pathFinish < 0) { this.Path = value.Substring(hostFinish); } else { diff --git a/src/DotNetOpenAuth.OpenId/OpenId/XriDiscoveryProxyService.cs b/src/DotNetOpenAuth.OpenId/OpenId/XriDiscoveryProxyService.cs index 3189a5d..a3e8345 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/XriDiscoveryProxyService.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/XriDiscoveryProxyService.cs @@ -8,7 +8,6 @@ namespace DotNetOpenAuth.OpenId { using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Globalization; using System.Linq; using System.Text; @@ -18,6 +17,7 @@ namespace DotNetOpenAuth.OpenId { using DotNetOpenAuth.OpenId.RelyingParty; using DotNetOpenAuth.Xrds; using DotNetOpenAuth.Yadis; + using Validation; /// <summary> /// The discovery service for XRI identifiers that uses an XRI proxy resolver for discovery. @@ -74,7 +74,6 @@ namespace DotNetOpenAuth.OpenId { private static XrdsDocument DownloadXrds(XriIdentifier identifier, IDirectWebRequestHandler requestHandler) { Requires.NotNull(identifier, "identifier"); Requires.NotNull(requestHandler, "requestHandler"); - Contract.Ensures(Contract.Result<XrdsDocument>() != null); XrdsDocument doc; using (var xrdsResponse = Yadis.Request(requestHandler, GetXrdsUrl(identifier), identifier.IsDiscoverySecureEndToEnd)) { var readerSettings = MessagingUtilities.CreateUntrustedXmlReaderSettings(); diff --git a/src/DotNetOpenAuth.OpenId/OpenId/XriIdentifier.cs b/src/DotNetOpenAuth.OpenId/OpenId/XriIdentifier.cs index f6a633f..4222726 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/XriIdentifier.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/XriIdentifier.cs @@ -15,12 +15,12 @@ namespace DotNetOpenAuth.OpenId { using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Xrds; using DotNetOpenAuth.Yadis; + using Validation; /// <summary> /// An XRI style of OpenID Identifier. /// </summary> [Serializable] - [ContractVerification(true)] [Pure] public sealed class XriIdentifier : Identifier { /// <summary> @@ -45,7 +45,7 @@ namespace DotNetOpenAuth.OpenId { internal XriIdentifier(string xri) : this(xri, false) { Requires.NotNullOrEmpty(xri, "xri"); - Requires.Format(IsValidXri(xri), OpenIdStrings.InvalidXri); + RequiresEx.Format(IsValidXri(xri), OpenIdStrings.InvalidXri); } /// <summary> @@ -59,8 +59,8 @@ namespace DotNetOpenAuth.OpenId { internal XriIdentifier(string xri, bool requireSsl) : base(xri, requireSsl) { Requires.NotNullOrEmpty(xri, "xri"); - Requires.Format(IsValidXri(xri), OpenIdStrings.InvalidXri); - Contract.Assume(xri != null); // Proven by IsValidXri + RequiresEx.Format(IsValidXri(xri), OpenIdStrings.InvalidXri); + Assumes.True(xri != null); // Proven by IsValidXri this.OriginalXri = xri; this.canonicalXri = CanonicalizeXri(xri); } @@ -75,7 +75,6 @@ namespace DotNetOpenAuth.OpenId { /// </summary> internal string CanonicalXri { get { - Contract.Ensures(Contract.Result<string>() != null); return this.canonicalXri; } } @@ -169,7 +168,6 @@ namespace DotNetOpenAuth.OpenId { /// True if the secure conversion was successful. /// False if the Identifier was originally created with an explicit HTTP scheme. /// </returns> - [ContractVerification(false)] // bugs/limitations in CC static analysis internal override bool TryRequireSsl(out Identifier secureIdentifier) { secureIdentifier = IsDiscoverySecureEndToEnd ? this : new XriIdentifier(this, true); return true; @@ -183,10 +181,9 @@ namespace DotNetOpenAuth.OpenId { /// <remarks>The canonical form, per the OpenID spec, is no scheme and no whitespace on either end.</remarks> private static string CanonicalizeXri(string xri) { Requires.NotNull(xri, "xri"); - Contract.Ensures(Contract.Result<string>() != null); xri = xri.Trim(); if (xri.StartsWith(XriScheme, StringComparison.OrdinalIgnoreCase)) { - Contract.Assume(XriScheme.Length <= xri.Length); // should be implied by StartsWith + Assumes.True(XriScheme.Length <= xri.Length); // should be implied by StartsWith xri = xri.Substring(XriScheme.Length); } return xri; diff --git a/src/DotNetOpenAuth.OpenId/OpenIdXrdsHelperRelyingParty.cs b/src/DotNetOpenAuth.OpenId/OpenIdXrdsHelperRelyingParty.cs index 4e3221f..885370c 100644 --- a/src/DotNetOpenAuth.OpenId/OpenIdXrdsHelperRelyingParty.cs +++ b/src/DotNetOpenAuth.OpenId/OpenIdXrdsHelperRelyingParty.cs @@ -7,11 +7,11 @@ namespace DotNetOpenAuth.OpenId { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.RelyingParty; using DotNetOpenAuth.Xrds; + using Validation; /// <summary> /// Adds OpenID-specific extension methods to the XrdsDocument class. @@ -31,7 +31,6 @@ namespace DotNetOpenAuth.OpenId { Requires.NotNull(xrds, "xrds"); Requires.NotNull(claimedIdentifier, "claimedIdentifier"); Requires.NotNull(userSuppliedIdentifier, "userSuppliedIdentifier"); - Contract.Ensures(Contract.Result<IEnumerable<IdentifierDiscoveryResult>>() != null); var endpoints = new List<IdentifierDiscoveryResult>(); endpoints.AddRange(xrds.GenerateOPIdentifierServiceEndpoints(userSuppliedIdentifier)); @@ -52,7 +51,6 @@ namespace DotNetOpenAuth.OpenId { internal static IEnumerable<IdentifierDiscoveryResult> CreateServiceEndpoints(this IEnumerable<XrdElement> xrds, XriIdentifier userSuppliedIdentifier) { Requires.NotNull(xrds, "xrds"); Requires.NotNull(userSuppliedIdentifier, "userSuppliedIdentifier"); - Contract.Ensures(Contract.Result<IEnumerable<IdentifierDiscoveryResult>>() != null); var endpoints = new List<IdentifierDiscoveryResult>(); endpoints.AddRange(xrds.GenerateOPIdentifierServiceEndpoints(userSuppliedIdentifier)); @@ -71,7 +69,6 @@ namespace DotNetOpenAuth.OpenId { private static IEnumerable<IdentifierDiscoveryResult> GenerateOPIdentifierServiceEndpoints(this IEnumerable<XrdElement> xrds, Identifier opIdentifier) { Requires.NotNull(xrds, "xrds"); Requires.NotNull(opIdentifier, "opIdentifier"); - Contract.Ensures(Contract.Result<IEnumerable<IdentifierDiscoveryResult>>() != null); return from service in xrds.FindOPIdentifierServices() from uri in service.UriElements let protocol = Protocol.FindBestVersion(p => p.OPIdentifierServiceTypeURI, service.TypeElementUris) @@ -92,7 +89,6 @@ namespace DotNetOpenAuth.OpenId { private static IEnumerable<IdentifierDiscoveryResult> GenerateClaimedIdentifierServiceEndpoints(this IEnumerable<XrdElement> xrds, UriIdentifier claimedIdentifier, UriIdentifier userSuppliedIdentifier) { Requires.NotNull(xrds, "xrds"); Requires.NotNull(claimedIdentifier, "claimedIdentifier"); - Contract.Ensures(Contract.Result<IEnumerable<IdentifierDiscoveryResult>>() != null); return from service in xrds.FindClaimedIdentifierServices() from uri in service.UriElements @@ -111,8 +107,7 @@ namespace DotNetOpenAuth.OpenId { private static IEnumerable<IdentifierDiscoveryResult> GenerateClaimedIdentifierServiceEndpoints(this IEnumerable<XrdElement> xrds, XriIdentifier userSuppliedIdentifier) { // Cannot use code contracts because this method uses yield return. ////Requires.NotNull(xrds, "xrds"); - ////Contract.Ensures(Contract.Result<IEnumerable<IdentifierDiscoveryResult>>() != null); - ErrorUtilities.VerifyArgumentNotNull(xrds, "xrds"); + //// ErrorUtilities.VerifyArgumentNotNull(xrds, "xrds"); foreach (var service in xrds.FindClaimedIdentifierServices()) { foreach (var uri in service.UriElements) { @@ -138,7 +133,6 @@ namespace DotNetOpenAuth.OpenId { /// <returns>A sequence of service elements.</returns> private static IEnumerable<ServiceElement> FindOPIdentifierServices(this IEnumerable<XrdElement> xrds) { Requires.NotNull(xrds, "xrds"); - Contract.Ensures(Contract.Result<IEnumerable<ServiceElement>>() != null); return from xrd in xrds from service in xrd.OpenIdProviderIdentifierServices @@ -153,7 +147,6 @@ namespace DotNetOpenAuth.OpenId { /// <returns>A sequence of the services offered.</returns> private static IEnumerable<ServiceElement> FindClaimedIdentifierServices(this IEnumerable<XrdElement> xrds) { Requires.NotNull(xrds, "xrds"); - Contract.Ensures(Contract.Result<IEnumerable<ServiceElement>>() != null); return from xrd in xrds from service in xrd.OpenIdClaimedIdentifierServices diff --git a/src/DotNetOpenAuth.OpenId/Properties/AssemblyInfo.cs b/src/DotNetOpenAuth.OpenId/Properties/AssemblyInfo.cs index 42aa959..ac795f5 100644 --- a/src/DotNetOpenAuth.OpenId/Properties/AssemblyInfo.cs +++ b/src/DotNetOpenAuth.OpenId/Properties/AssemblyInfo.cs @@ -7,7 +7,6 @@ // We DON'T put an AssemblyVersionAttribute in here because it is generated in the build. using System; -using System.Diagnostics.Contracts; using System.Net; using System.Reflection; using System.Resources; @@ -31,8 +30,6 @@ using System.Web.UI; // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("7d73990c-47c0-4256-9f20-a893add9e289")] -[assembly: ContractVerification(true)] - #if StrongNameSigned // See comment at top of this file. We need this so that strong-naming doesn't // keep this assembly from being useful to shared host (medium trust) web sites. diff --git a/src/DotNetOpenAuth.OpenId/Xrds/TypeElement.cs b/src/DotNetOpenAuth.OpenId/Xrds/TypeElement.cs index 717dfee..97f7ded 100644 --- a/src/DotNetOpenAuth.OpenId/Xrds/TypeElement.cs +++ b/src/DotNetOpenAuth.OpenId/Xrds/TypeElement.cs @@ -6,8 +6,8 @@ namespace DotNetOpenAuth.Xrds { using System; - using System.Diagnostics.Contracts; using System.Xml.XPath; + using Validation; /// <summary> /// The Type element in an XRDS document. diff --git a/src/DotNetOpenAuth.OpenId/Xrds/XrdsNode.cs b/src/DotNetOpenAuth.OpenId/Xrds/XrdsNode.cs index 3e163f7..91c59ba 100644 --- a/src/DotNetOpenAuth.OpenId/Xrds/XrdsNode.cs +++ b/src/DotNetOpenAuth.OpenId/Xrds/XrdsNode.cs @@ -6,10 +6,10 @@ namespace DotNetOpenAuth.Xrds { using System; - using System.Diagnostics.Contracts; using System.Xml; using System.Xml.XPath; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// A node in an XRDS document. @@ -45,7 +45,7 @@ namespace DotNetOpenAuth.Xrds { /// <param name="document">The document's root node, which this instance represents.</param> protected XrdsNode(XPathNavigator document) { Requires.NotNull(document, "document"); - Requires.True(document.NameTable != null, null); + Requires.That(document.NameTable != null, "document", "requires document.NameTable != null"); this.Node = document; this.XmlNamespaceResolver = new XmlNamespaceManager(document.NameTable); diff --git a/src/DotNetOpenAuth.OpenId/Yadis/HtmlParser.cs b/src/DotNetOpenAuth.OpenId/Yadis/HtmlParser.cs index 481d6a7..36b7bf1 100644 --- a/src/DotNetOpenAuth.OpenId/Yadis/HtmlParser.cs +++ b/src/DotNetOpenAuth.OpenId/Yadis/HtmlParser.cs @@ -7,13 +7,13 @@ namespace DotNetOpenAuth.Yadis { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Globalization; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Web; using System.Web.UI.HtmlControls; + using Validation; /// <summary> /// An HTML HEAD tag parser. diff --git a/src/DotNetOpenAuth.OpenId/Yadis/Yadis.cs b/src/DotNetOpenAuth.OpenId/Yadis/Yadis.cs index a23e019..4a06ea7 100644 --- a/src/DotNetOpenAuth.OpenId/Yadis/Yadis.cs +++ b/src/DotNetOpenAuth.OpenId/Yadis/Yadis.cs @@ -6,7 +6,6 @@ namespace DotNetOpenAuth.Yadis { using System; - using System.Diagnostics.Contracts; using System.IO; using System.Net; using System.Net.Cache; @@ -16,6 +15,7 @@ namespace DotNetOpenAuth.Yadis { using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId; using DotNetOpenAuth.Xrds; + using Validation; /// <summary> /// YADIS discovery manager. @@ -137,8 +137,6 @@ namespace DotNetOpenAuth.Yadis { internal static IncomingWebResponse Request(IDirectWebRequestHandler requestHandler, Uri uri, bool requireSsl, params string[] acceptTypes) { Requires.NotNull(requestHandler, "requestHandler"); Requires.NotNull(uri, "uri"); - Contract.Ensures(Contract.Result<IncomingWebResponse>() != null); - Contract.Ensures(Contract.Result<IncomingWebResponse>().ResponseStream != null); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); request.CachePolicy = IdentifierDiscoveryCachePolicy; diff --git a/src/DotNetOpenAuth.OpenId/packages.config b/src/DotNetOpenAuth.OpenId/packages.config new file mode 100644 index 0000000..10eec89 --- /dev/null +++ b/src/DotNetOpenAuth.OpenId/packages.config @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="Validation" version="2.0.0.12319" targetFramework="net40" /> +</packages>
\ No newline at end of file diff --git a/src/DotNetOpenAuth.OpenIdInfoCard.UI/DotNetOpenAuth.OpenIdInfoCard.UI.csproj b/src/DotNetOpenAuth.OpenIdInfoCard.UI/DotNetOpenAuth.OpenIdInfoCard.UI.csproj index e0a5267..f3c7f0a 100644 --- a/src/DotNetOpenAuth.OpenIdInfoCard.UI/DotNetOpenAuth.OpenIdInfoCard.UI.csproj +++ b/src/DotNetOpenAuth.OpenIdInfoCard.UI/DotNetOpenAuth.OpenIdInfoCard.UI.csproj @@ -62,6 +62,15 @@ <Name>Org.Mentalis.Security.Cryptography</Name> </ProjectReference> </ItemGroup> + <ItemGroup> + <Reference Include="Validation, Version=2.0.0.0, Culture=neutral, PublicKeyToken=2fc06f0d701809a7, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\Validation.2.0.0.12319\lib\portable-windows8+net40+sl5+windowsphone8\Validation.dll</HintPath> + </Reference> + </ItemGroup> + <ItemGroup> + <None Include="packages.config" /> + </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(ProjectRoot)tools\DotNetOpenAuth.targets" /> <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))\EnlistmentInfo.targets" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))' != '' " /> diff --git a/src/DotNetOpenAuth.OpenIdInfoCard.UI/OpenId/RelyingParty/OpenIdInfoCardSelector.cs b/src/DotNetOpenAuth.OpenIdInfoCard.UI/OpenId/RelyingParty/OpenIdInfoCardSelector.cs index a68fd95..9470ef0 100644 --- a/src/DotNetOpenAuth.OpenIdInfoCard.UI/OpenId/RelyingParty/OpenIdInfoCardSelector.cs +++ b/src/DotNetOpenAuth.OpenIdInfoCard.UI/OpenId/RelyingParty/OpenIdInfoCardSelector.cs @@ -9,7 +9,6 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; - using System.Diagnostics.Contracts; using System.Globalization; using System.IdentityModel.Claims; using System.Linq; @@ -22,6 +21,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using DotNetOpenAuth.InfoCard; ////using DotNetOpenAuth.InfoCard; using DotNetOpenAuth.Messaging; + using Validation; /// <summary> /// An ASP.NET control that provides a user-friendly way of logging into a web site using OpenID. @@ -75,8 +75,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// </summary> /// <param name="e">The token, if it was decrypted.</param> protected virtual void OnReceivedToken(ReceivedTokenEventArgs e) { - Contract.Requires(e != null); - ErrorUtilities.VerifyArgumentNotNull(e, "e"); + Requires.NotNull(e, "paramName"); var receivedInfoCard = this.ReceivedToken; if (receivedInfoCard != null) { @@ -89,8 +88,7 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { /// </summary> /// <param name="e">The <see cref="DotNetOpenAuth.InfoCard.TokenProcessingErrorEventArgs"/> instance containing the event data.</param> protected virtual void OnTokenProcessingError(TokenProcessingErrorEventArgs e) { - Contract.Requires(e != null); - ErrorUtilities.VerifyArgumentNotNull(e, "e"); + Requires.NotNull(e, "paramName"); var tokenProcessingError = this.TokenProcessingError; if (tokenProcessingError != null) { diff --git a/src/DotNetOpenAuth.OpenIdInfoCard.UI/OpenId/RelyingParty/SelectorInfoCardButton.cs b/src/DotNetOpenAuth.OpenIdInfoCard.UI/OpenId/RelyingParty/SelectorInfoCardButton.cs index 2a96d2b..cbb1011 100644 --- a/src/DotNetOpenAuth.OpenIdInfoCard.UI/OpenId/RelyingParty/SelectorInfoCardButton.cs +++ b/src/DotNetOpenAuth.OpenIdInfoCard.UI/OpenId/RelyingParty/SelectorInfoCardButton.cs @@ -8,9 +8,9 @@ namespace DotNetOpenAuth.OpenId.RelyingParty { using System; using System.Collections.ObjectModel; using System.ComponentModel; - using System.Diagnostics.Contracts; using System.Web.UI; using DotNetOpenAuth.InfoCard; + using Validation; /// <summary> /// A button that appears in the <see cref="OpenIdSelector"/> control that diff --git a/src/DotNetOpenAuth.OpenIdInfoCard.UI/Properties/AssemblyInfo.cs b/src/DotNetOpenAuth.OpenIdInfoCard.UI/Properties/AssemblyInfo.cs index 5c9dc63..16d6896 100644 --- a/src/DotNetOpenAuth.OpenIdInfoCard.UI/Properties/AssemblyInfo.cs +++ b/src/DotNetOpenAuth.OpenIdInfoCard.UI/Properties/AssemblyInfo.cs @@ -7,7 +7,6 @@ // We DON'T put an AssemblyVersionAttribute in here because it is generated in the build. using System; -using System.Diagnostics.Contracts; using System.Net; using System.Reflection; using System.Resources; @@ -31,8 +30,6 @@ using System.Web.UI; // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("7d73990c-47c0-4256-9f20-a893add9e289")] -[assembly: ContractVerification(true)] - #if StrongNameSigned // See comment at top of this file. We need this so that strong-naming doesn't // keep this assembly from being useful to shared host (medium trust) web sites. diff --git a/src/DotNetOpenAuth.OpenIdInfoCard.UI/packages.config b/src/DotNetOpenAuth.OpenIdInfoCard.UI/packages.config new file mode 100644 index 0000000..10eec89 --- /dev/null +++ b/src/DotNetOpenAuth.OpenIdInfoCard.UI/packages.config @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="Validation" version="2.0.0.12319" targetFramework="net40" /> +</packages>
\ No newline at end of file diff --git a/src/DotNetOpenAuth.OpenIdOAuth/DotNetOpenAuth.OpenIdOAuth.csproj b/src/DotNetOpenAuth.OpenIdOAuth/DotNetOpenAuth.OpenIdOAuth.csproj index 74719d4..0dc83c8 100644 --- a/src/DotNetOpenAuth.OpenIdOAuth/DotNetOpenAuth.OpenIdOAuth.csproj +++ b/src/DotNetOpenAuth.OpenIdOAuth/DotNetOpenAuth.OpenIdOAuth.csproj @@ -52,6 +52,15 @@ <Name>DotNetOpenAuth.OpenId</Name> </ProjectReference> </ItemGroup> + <ItemGroup> + <Reference Include="Validation, Version=2.0.0.0, Culture=neutral, PublicKeyToken=2fc06f0d701809a7, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\Validation.2.0.0.12319\lib\portable-windows8+net40+sl5+windowsphone8\Validation.dll</HintPath> + </Reference> + </ItemGroup> + <ItemGroup> + <None Include="packages.config" /> + </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(ProjectRoot)tools\DotNetOpenAuth.targets" /> <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))\EnlistmentInfo.targets" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), EnlistmentInfo.targets))' != '' " /> diff --git a/src/DotNetOpenAuth.OpenIdOAuth/OAuth/ServiceProviderOpenIdProvider.cs b/src/DotNetOpenAuth.OpenIdOAuth/OAuth/ServiceProviderOpenIdProvider.cs index b590a90..f827857 100644 --- a/src/DotNetOpenAuth.OpenIdOAuth/OAuth/ServiceProviderOpenIdProvider.cs +++ b/src/DotNetOpenAuth.OpenIdOAuth/OAuth/ServiceProviderOpenIdProvider.cs @@ -9,7 +9,6 @@ namespace DotNetOpenAuth.OAuth { using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics.CodeAnalysis; - using System.Diagnostics.Contracts; using System.Globalization; using System.Security.Principal; using System.ServiceModel.Channels; @@ -23,6 +22,7 @@ namespace DotNetOpenAuth.OAuth { using DotNetOpenAuth.OpenId.Extensions.OAuth; using DotNetOpenAuth.OpenId.Messages; using DotNetOpenAuth.OpenId.Provider; + using Validation; /// <summary> /// A web application that allows access via OAuth and can respond to OpenID+OAuth requests. @@ -92,7 +92,7 @@ namespace DotNetOpenAuth.OAuth { /// </remarks> public AuthorizationRequest ReadAuthorizationRequest(IHostProcessedRequest openIdRequest) { Requires.NotNull(openIdRequest, "openIdRequest"); - Requires.ValidState(this.TokenManager is ICombinedOpenIdProviderTokenManager); + RequiresEx.ValidState(this.TokenManager is ICombinedOpenIdProviderTokenManager); var openidTokenManager = this.TokenManager as ICombinedOpenIdProviderTokenManager; ErrorUtilities.VerifyOperation(openidTokenManager != null, OAuthStrings.OpenIdOAuthExtensionRequiresSpecialTokenManagerInterface, typeof(IOpenIdOAuthTokenManager).FullName); @@ -122,8 +122,8 @@ namespace DotNetOpenAuth.OAuth { [Obsolete("Call the overload that doesn't take a consumerKey instead.")] public void AttachAuthorizationResponse(IHostProcessedRequest openIdAuthenticationRequest, string consumerKey, string scope) { Requires.NotNull(openIdAuthenticationRequest, "openIdAuthenticationRequest"); - Requires.True((consumerKey == null) == (scope == null), null); - Requires.ValidState(this.TokenManager is ICombinedOpenIdProviderTokenManager); + Requires.That((consumerKey == null) == (scope == null), null, "consumerKey and scope must either be both provided or both omitted."); + RequiresEx.ValidState(this.TokenManager is ICombinedOpenIdProviderTokenManager); var openidTokenManager = (ICombinedOpenIdProviderTokenManager)this.TokenManager; ErrorUtilities.VerifyArgument(consumerKey == null || consumerKey == openidTokenManager.GetConsumerKey(openIdAuthenticationRequest.Realm), OAuthStrings.OpenIdOAuthRealmConsumerKeyDoNotMatch); @@ -138,7 +138,7 @@ namespace DotNetOpenAuth.OAuth { [SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters", Justification = "We want to take IAuthenticationRequest because that's the only supported use case.")] public void AttachAuthorizationResponse(IHostProcessedRequest openIdAuthenticationRequest, string scope) { Requires.NotNull(openIdAuthenticationRequest, "openIdAuthenticationRequest"); - Requires.ValidState(this.TokenManager is ICombinedOpenIdProviderTokenManager); + RequiresEx.ValidState(this.TokenManager is ICombinedOpenIdProviderTokenManager); var openidTokenManager = this.TokenManager as ICombinedOpenIdProviderTokenManager; IOpenIdMessageExtension response; diff --git a/src/DotNetOpenAuth.OpenIdOAuth/OAuth/WebConsumerOpenIdRelyingParty.cs b/src/DotNetOpenAuth.OpenIdOAuth/OAuth/WebConsumerOpenIdRelyingParty.cs index 0d1a602..7c77e4f 100644 --- a/src/DotNetOpenAuth.OpenIdOAuth/OAuth/WebConsumerOpenIdRelyingParty.cs +++ b/src/DotNetOpenAuth.OpenIdOAuth/OAuth/WebConsumerOpenIdRelyingParty.cs @@ -14,6 +14,7 @@ namespace DotNetOpenAuth.OAuth { using DotNetOpenAuth.OAuth.Messages; using DotNetOpenAuth.OpenId.Extensions.OAuth; using DotNetOpenAuth.OpenId.RelyingParty; + using Validation; /// <summary> /// A website or application that uses OAuth to access the Service Provider on behalf of the User @@ -62,7 +63,7 @@ namespace DotNetOpenAuth.OAuth { /// </remarks> public AuthorizedTokenResponse ProcessUserAuthorization(IAuthenticationResponse openIdAuthenticationResponse) { Requires.NotNull(openIdAuthenticationResponse, "openIdAuthenticationResponse"); - Requires.ValidState(this.TokenManager is IOpenIdOAuthTokenManager); + RequiresEx.ValidState(this.TokenManager is IOpenIdOAuthTokenManager); var openidTokenManager = this.TokenManager as IOpenIdOAuthTokenManager; ErrorUtilities.VerifyOperation(openidTokenManager != null, OAuthStrings.OpenIdOAuthExtensionRequiresSpecialTokenManagerInterface, typeof(IOpenIdOAuthTokenManager).FullName); diff --git a/src/DotNetOpenAuth.OpenIdOAuth/Properties/AssemblyInfo.cs b/src/DotNetOpenAuth.OpenIdOAuth/Properties/AssemblyInfo.cs index 759bd3f..a3afcd7 100644 --- a/src/DotNetOpenAuth.OpenIdOAuth/Properties/AssemblyInfo.cs +++ b/src/DotNetOpenAuth.OpenIdOAuth/Properties/AssemblyInfo.cs @@ -7,7 +7,6 @@ // We DON'T put an AssemblyVersionAttribute in here because it is generated in the build. using System; -using System.Diagnostics.Contracts; using System.Net; using System.Reflection; using System.Resources; @@ -30,7 +29,6 @@ using System.Web.UI; // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("F9AFC069-8291-497F-B2A1-3E4D1646C572")] -[assembly: ContractVerification(true)] #if StrongNameSigned // See comment at top of this file. We need this so that strong-naming doesn't diff --git a/src/DotNetOpenAuth.OpenIdOAuth/packages.config b/src/DotNetOpenAuth.OpenIdOAuth/packages.config new file mode 100644 index 0000000..10eec89 --- /dev/null +++ b/src/DotNetOpenAuth.OpenIdOAuth/packages.config @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="Validation" version="2.0.0.12319" targetFramework="net40" /> +</packages>
\ No newline at end of file diff --git a/src/DotNetOpenAuth.Test/AssemblyTesting.cs b/src/DotNetOpenAuth.Test/AssemblyTesting.cs deleted file mode 100644 index dac5bea..0000000 --- a/src/DotNetOpenAuth.Test/AssemblyTesting.cs +++ /dev/null @@ -1,26 +0,0 @@ -//----------------------------------------------------------------------- -// <copyright file="AssemblyTesting.cs" company="Outercurve Foundation"> -// Copyright (c) Outercurve Foundation. All rights reserved. -// </copyright> -//----------------------------------------------------------------------- - -namespace DotNetOpenAuth.Test { - using System.Diagnostics.Contracts; - using NUnit.Framework; - - [SetUpFixture] - public class AssemblyTesting { - [SetUp] - public static void AssemblyInitialize() { - // Make contract failures become test failures. - Contract.ContractFailed += (sender, e) => { - // For now, we have tests that verify that preconditions throw exceptions. - // So we don't want to fail a test just because a precondition check failed. - if (e.FailureKind != ContractFailureKind.Precondition) { - e.SetHandled(); - Assert.Fail(e.FailureKind.ToString() + ": " + e.Message); - } - }; - } - } -} diff --git a/src/DotNetOpenAuth.Test/CoordinatorBase.cs b/src/DotNetOpenAuth.Test/CoordinatorBase.cs index 1b4a5cd..d1c6f85 100644 --- a/src/DotNetOpenAuth.Test/CoordinatorBase.cs +++ b/src/DotNetOpenAuth.Test/CoordinatorBase.cs @@ -6,12 +6,12 @@ namespace DotNetOpenAuth.Test { using System; - using System.Diagnostics.Contracts; using System.Threading; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.RelyingParty; using DotNetOpenAuth.Test.Mocks; using NUnit.Framework; + using Validation; internal abstract class CoordinatorBase<T1, T2> { private Action<T1> party1Action; diff --git a/src/DotNetOpenAuth.Test/DotNetOpenAuth.Test.csproj b/src/DotNetOpenAuth.Test/DotNetOpenAuth.Test.csproj index 189a569..1ecfa30 100644 --- a/src/DotNetOpenAuth.Test/DotNetOpenAuth.Test.csproj +++ b/src/DotNetOpenAuth.Test/DotNetOpenAuth.Test.csproj @@ -5,7 +5,6 @@ <ProjectRoot Condition="'$(ProjectRoot)' == ''">$(MSBuildProjectDirectory)\..\..\</ProjectRoot> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> - <CodeContractsAssemblyMode>0</CodeContractsAssemblyMode> </PropertyGroup> <Import Project="$(ProjectRoot)tools\DotNetOpenAuth.props" /> <PropertyGroup> @@ -44,41 +43,7 @@ <DefineConstants>DEBUG;TRACE</DefineConstants> <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> - <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking> - <CodeContractsCustomRewriterAssembly> - </CodeContractsCustomRewriterAssembly> - <CodeContractsCustomRewriterClass> - </CodeContractsCustomRewriterClass> - <CodeContractsRuntimeCheckingLevel>None</CodeContractsRuntimeCheckingLevel> - <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis> - <CodeContractsBuildReferenceAssembly>False</CodeContractsBuildReferenceAssembly> - <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations> - <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations> - <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations> - <CodeContractsLibPaths> - </CodeContractsLibPaths> - <CodeContractsPlatformPath> - </CodeContractsPlatformPath> - <CodeContractsExtraAnalysisOptions> - </CodeContractsExtraAnalysisOptions> - <CodeContractsBaseLineFile> - </CodeContractsBaseLineFile> - <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine> - <CodeContractsRunInBackground>True</CodeContractsRunInBackground> - <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies> - <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface> - <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure> - <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires> - <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> - <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions> - <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs> - <CodeContractsExtraRewriteOptions /> - <CodeContractsReferenceAssembly>%28none%29</CodeContractsReferenceAssembly> <AllowUnsafeBlocks>true</AllowUnsafeBlocks> - <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers> - <CodeContractsEnumObligations>False</CodeContractsEnumObligations> - <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults> - <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <DebugType>pdbonly</DebugType> @@ -86,41 +51,7 @@ <DefineConstants>TRACE</DefineConstants> <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> - <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking> - <CodeContractsCustomRewriterAssembly> - </CodeContractsCustomRewriterAssembly> - <CodeContractsCustomRewriterClass> - </CodeContractsCustomRewriterClass> - <CodeContractsRuntimeCheckingLevel>None</CodeContractsRuntimeCheckingLevel> - <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface> - <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure> - <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires> - <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis> - <CodeContractsBuildReferenceAssembly>False</CodeContractsBuildReferenceAssembly> - <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations> - <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations> - <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations> - <CodeContractsLibPaths> - </CodeContractsLibPaths> - <CodeContractsPlatformPath> - </CodeContractsPlatformPath> - <CodeContractsExtraAnalysisOptions> - </CodeContractsExtraAnalysisOptions> - <CodeContractsBaseLineFile> - </CodeContractsBaseLineFile> - <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine> - <CodeContractsRunInBackground>True</CodeContractsRunInBackground> - <CodeContractsShowSquigglies>False</CodeContractsShowSquigglies> - <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> - <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions> - <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs> - <CodeContractsExtraRewriteOptions /> - <CodeContractsReferenceAssembly>%28none%29</CodeContractsReferenceAssembly> <AllowUnsafeBlocks>true</AllowUnsafeBlocks> - <CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers> - <CodeContractsEnumObligations>False</CodeContractsEnumObligations> - <CodeContractsCacheAnalysisResults>False</CodeContractsCacheAnalysisResults> - <CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'CodeAnalysis|AnyCPU' "> <DebugSymbols>true</DebugSymbols> @@ -130,36 +61,7 @@ <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression> <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile> <ErrorReport>prompt</ErrorReport> - <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking> - <CodeContractsCustomRewriterAssembly> - </CodeContractsCustomRewriterAssembly> - <CodeContractsCustomRewriterClass> - </CodeContractsCustomRewriterClass> - <CodeContractsRuntimeCheckingLevel>None</CodeContractsRuntimeCheckingLevel> - <CodeContractsRunCodeAnalysis>True</CodeContractsRunCodeAnalysis> - <CodeContractsBuildReferenceAssembly>False</CodeContractsBuildReferenceAssembly> - <CodeContractsNonNullObligations>False</CodeContractsNonNullObligations> - <CodeContractsBoundsObligations>False</CodeContractsBoundsObligations> - <CodeContractsLibPaths> - </CodeContractsLibPaths> - <CodeContractsPlatformPath> - </CodeContractsPlatformPath> - <CodeContractsExtraAnalysisOptions> - </CodeContractsExtraAnalysisOptions> - <CodeContractsBaseLineFile> - </CodeContractsBaseLineFile> - <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine> - <CodeContractsRunInBackground>True</CodeContractsRunInBackground> - <CodeContractsShowSquigglies>True</CodeContractsShowSquigglies> - <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface> - <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure> - <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires> - <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations> <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> - <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions> - <CodeContractsEmitXMLDocs>False</CodeContractsEmitXMLDocs> - <CodeContractsExtraRewriteOptions /> - <CodeContractsReferenceAssembly>%28none%29</CodeContractsReferenceAssembly> <AllowUnsafeBlocks>true</AllowUnsafeBlocks> </PropertyGroup> <ItemGroup> @@ -189,9 +91,12 @@ <Reference Include="System.Xml.Linq"> <RequiredTargetFramework>3.5</RequiredTargetFramework> </Reference> + <Reference Include="Validation, Version=2.0.0.0, Culture=neutral, PublicKeyToken=2fc06f0d701809a7, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\Validation.2.0.0.12319\lib\portable-windows8+net40+sl5+windowsphone8\Validation.dll</HintPath> + </Reference> </ItemGroup> <ItemGroup> - <Compile Include="AssemblyTesting.cs" /> <Compile Include="Configuration\SectionTests.cs" /> <Compile Include="CoordinatorBase.cs" /> <Compile Include="Hosting\AspNetHost.cs" /> @@ -373,6 +278,7 @@ </ItemGroup> <ItemGroup> <None Include="App.config" /> + <None Include="packages.config" /> </ItemGroup> <ItemGroup> <EmbeddedResource Include="OpenId\Discovery\xrdsdiscovery\xrds20dual.xml" /> diff --git a/src/DotNetOpenAuth.Test/Messaging/CollectionAssert.cs b/src/DotNetOpenAuth.Test/Messaging/CollectionAssert.cs index 117cde2..40dcc09 100644 --- a/src/DotNetOpenAuth.Test/Messaging/CollectionAssert.cs +++ b/src/DotNetOpenAuth.Test/Messaging/CollectionAssert.cs @@ -8,10 +8,10 @@ namespace DotNetOpenAuth.Test.Messaging { using System; using System.Collections; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using DotNetOpenAuth.Messaging; using NUnit.Framework; + using Validation; internal class CollectionAssert<T> { internal static void AreEquivalent(ICollection<T> expected, ICollection<T> actual) { diff --git a/src/DotNetOpenAuth.Test/Messaging/MultipartPostPartTests.cs b/src/DotNetOpenAuth.Test/Messaging/MultipartPostPartTests.cs index 39267ca..e9ac5aa 100644 --- a/src/DotNetOpenAuth.Test/Messaging/MultipartPostPartTests.cs +++ b/src/DotNetOpenAuth.Test/Messaging/MultipartPostPartTests.cs @@ -7,11 +7,11 @@ namespace DotNetOpenAuth.Test.Messaging { using System.CodeDom.Compiler; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.IO; using System.Net; using DotNetOpenAuth.Messaging; using NUnit.Framework; + using Validation; [TestFixture] public class MultipartPostPartTests : TestBase { @@ -77,7 +77,7 @@ namespace DotNetOpenAuth.Test.Messaging { } private static void VerifyLength(MultipartPostPart part) { - Contract.Requires(part != null); + Requires.NotNull(part, "part"); var expectedLength = part.Length; var ms = new MemoryStream(); diff --git a/src/DotNetOpenAuth.Test/Mocks/CoordinatingChannel.cs b/src/DotNetOpenAuth.Test/Mocks/CoordinatingChannel.cs index 50eff97..475f4b5 100644 --- a/src/DotNetOpenAuth.Test/Mocks/CoordinatingChannel.cs +++ b/src/DotNetOpenAuth.Test/Mocks/CoordinatingChannel.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.Test.Mocks { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Net; using System.Text; @@ -17,6 +16,7 @@ namespace DotNetOpenAuth.Test.Mocks { using DotNetOpenAuth.Messaging.Reflection; using DotNetOpenAuth.Test.OpenId; using NUnit.Framework; + using Validation; internal class CoordinatingChannel : Channel { /// <summary> diff --git a/src/DotNetOpenAuth.Test/Mocks/CoordinatingHttpRequestInfo.cs b/src/DotNetOpenAuth.Test/Mocks/CoordinatingHttpRequestInfo.cs index 2713765..497503c 100644 --- a/src/DotNetOpenAuth.Test/Mocks/CoordinatingHttpRequestInfo.cs +++ b/src/DotNetOpenAuth.Test/Mocks/CoordinatingHttpRequestInfo.cs @@ -7,11 +7,11 @@ namespace DotNetOpenAuth.Test.Mocks { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Net; using System.Web; using DotNetOpenAuth.Messaging; + using Validation; internal class CoordinatingHttpRequestInfo : HttpRequestInfo { private readonly Channel channel; @@ -40,9 +40,9 @@ namespace DotNetOpenAuth.Test.Mocks { MessageReceivingEndpoint recipient, HttpCookieCollection cookies) : this(recipient, cookies) { - Contract.Requires(channel != null); - Contract.Requires(messageFactory != null); - Contract.Requires(messageData != null); + Requires.NotNull(channel, "channel"); + Requires.NotNull(messageFactory, "messageFactory"); + Requires.NotNull(messageData, "messageData"); this.channel = channel; this.messageData = messageData; this.messageFactory = messageFactory; diff --git a/src/DotNetOpenAuth.Test/Mocks/CoordinatingOAuthConsumerChannel.cs b/src/DotNetOpenAuth.Test/Mocks/CoordinatingOAuthConsumerChannel.cs index e145952..9b552d3 100644 --- a/src/DotNetOpenAuth.Test/Mocks/CoordinatingOAuthConsumerChannel.cs +++ b/src/DotNetOpenAuth.Test/Mocks/CoordinatingOAuthConsumerChannel.cs @@ -6,7 +6,6 @@ namespace DotNetOpenAuth.Test.Mocks { using System; - using System.Diagnostics.Contracts; using System.Threading; using System.Web; @@ -14,6 +13,7 @@ namespace DotNetOpenAuth.Test.Mocks { using DotNetOpenAuth.Messaging.Bindings; using DotNetOpenAuth.OAuth.ChannelElements; using DotNetOpenAuth.OAuth.Messages; + using Validation; /// <summary> /// A special channel used in test simulations to pass messages directly between two parties. diff --git a/src/DotNetOpenAuth.Test/Mocks/CoordinatingOAuthServiceProviderChannel.cs b/src/DotNetOpenAuth.Test/Mocks/CoordinatingOAuthServiceProviderChannel.cs index 012173c..a6f2a7f 100644 --- a/src/DotNetOpenAuth.Test/Mocks/CoordinatingOAuthServiceProviderChannel.cs +++ b/src/DotNetOpenAuth.Test/Mocks/CoordinatingOAuthServiceProviderChannel.cs @@ -6,7 +6,6 @@ namespace DotNetOpenAuth.Test.Mocks { using System; - using System.Diagnostics.Contracts; using System.Threading; using System.Web; @@ -15,6 +14,7 @@ namespace DotNetOpenAuth.Test.Mocks { using DotNetOpenAuth.OAuth.ChannelElements; using DotNetOpenAuth.OAuth.Messages; using NUnit.Framework; + using Validation; /// <summary> /// A special channel used in test simulations to pass messages directly between two parties. diff --git a/src/DotNetOpenAuth.Test/Mocks/CoordinatingOutgoingWebResponse.cs b/src/DotNetOpenAuth.Test/Mocks/CoordinatingOutgoingWebResponse.cs index 90dbd7d..9df791c 100644 --- a/src/DotNetOpenAuth.Test/Mocks/CoordinatingOutgoingWebResponse.cs +++ b/src/DotNetOpenAuth.Test/Mocks/CoordinatingOutgoingWebResponse.cs @@ -8,10 +8,10 @@ namespace DotNetOpenAuth.Test.Mocks { using System; using System.Collections.Generic; using System.ComponentModel; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; + using Validation; internal class CoordinatingOutgoingWebResponse : OutgoingWebResponse { private CoordinatingChannel receivingChannel; diff --git a/src/DotNetOpenAuth.Test/Mocks/MockHttpMessageHandler.cs b/src/DotNetOpenAuth.Test/Mocks/MockHttpMessageHandler.cs index fba107e..87e8196 100644 --- a/src/DotNetOpenAuth.Test/Mocks/MockHttpMessageHandler.cs +++ b/src/DotNetOpenAuth.Test/Mocks/MockHttpMessageHandler.cs @@ -12,6 +12,7 @@ namespace DotNetOpenAuth.Test.Mocks { using System.Text; using System.Threading; using System.Threading.Tasks; + using Validation; /// <summary> /// An <see cref="HttpMessageHandler"/> that sends each request to the specified delegate. diff --git a/src/DotNetOpenAuth.Test/Mocks/MockHttpRequest.cs b/src/DotNetOpenAuth.Test/Mocks/MockHttpRequest.cs index 88c0a55..d20671e 100644 --- a/src/DotNetOpenAuth.Test/Mocks/MockHttpRequest.cs +++ b/src/DotNetOpenAuth.Test/Mocks/MockHttpRequest.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.Test.Mocks { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Globalization; using System.IO; using System.Net; @@ -18,6 +17,7 @@ namespace DotNetOpenAuth.Test.Mocks { using DotNetOpenAuth.OpenId.RelyingParty; using DotNetOpenAuth.Test.OpenId; using DotNetOpenAuth.Yadis; + using Validation; internal class MockHttpRequest { private readonly Dictionary<Uri, IncomingWebResponse> registeredMockResponses = new Dictionary<Uri, IncomingWebResponse>(); diff --git a/src/DotNetOpenAuth.Test/Mocks/MockIdentifier.cs b/src/DotNetOpenAuth.Test/Mocks/MockIdentifier.cs index e10ba2b..f020923 100644 --- a/src/DotNetOpenAuth.Test/Mocks/MockIdentifier.cs +++ b/src/DotNetOpenAuth.Test/Mocks/MockIdentifier.cs @@ -7,10 +7,10 @@ namespace DotNetOpenAuth.Test.Mocks { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId; using DotNetOpenAuth.OpenId.RelyingParty; + using Validation; /// <summary> /// Performs similar to an ordinary <see cref="Identifier"/>, but when called upon diff --git a/src/DotNetOpenAuth.Test/Mocks/MockRealm.cs b/src/DotNetOpenAuth.Test/Mocks/MockRealm.cs index 1b66da6..8509c03 100644 --- a/src/DotNetOpenAuth.Test/Mocks/MockRealm.cs +++ b/src/DotNetOpenAuth.Test/Mocks/MockRealm.cs @@ -7,9 +7,9 @@ namespace DotNetOpenAuth.Test.Mocks { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId; + using Validation; internal class MockRealm : Realm { private RelyingPartyEndpointDescription[] relyingPartyDescriptions; diff --git a/src/DotNetOpenAuth.Test/Mocks/TestMessageFactory.cs b/src/DotNetOpenAuth.Test/Mocks/TestMessageFactory.cs index 0ec4f46..5a47ab4 100644 --- a/src/DotNetOpenAuth.Test/Mocks/TestMessageFactory.cs +++ b/src/DotNetOpenAuth.Test/Mocks/TestMessageFactory.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.Test.Mocks { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; diff --git a/src/DotNetOpenAuth.Test/OAuth/ChannelElements/OAuthChannelTests.cs b/src/DotNetOpenAuth.Test/OAuth/ChannelElements/OAuthChannelTests.cs index f80935c..b081038 100644 --- a/src/DotNetOpenAuth.Test/OAuth/ChannelElements/OAuthChannelTests.cs +++ b/src/DotNetOpenAuth.Test/OAuth/ChannelElements/OAuthChannelTests.cs @@ -8,7 +8,6 @@ namespace DotNetOpenAuth.Test.OAuth.ChannelElements { using System; using System.Collections.Generic; using System.Collections.Specialized; - using System.Diagnostics.Contracts; using System.IO; using System.Net; using System.Text; @@ -20,6 +19,7 @@ namespace DotNetOpenAuth.Test.OAuth.ChannelElements { using DotNetOpenAuth.OAuth.ChannelElements; using DotNetOpenAuth.Test.Mocks; using NUnit.Framework; + using Validation; [TestFixture] public class OAuthChannelTests : TestBase { diff --git a/src/DotNetOpenAuth.Test/OAuth/ChannelElements/SigningBindingElementBaseTests.cs b/src/DotNetOpenAuth.Test/OAuth/ChannelElements/SigningBindingElementBaseTests.cs index dffe6c1..490399c 100644 --- a/src/DotNetOpenAuth.Test/OAuth/ChannelElements/SigningBindingElementBaseTests.cs +++ b/src/DotNetOpenAuth.Test/OAuth/ChannelElements/SigningBindingElementBaseTests.cs @@ -6,13 +6,13 @@ namespace DotNetOpenAuth.Test.OAuth.ChannelElements { using System.Collections.Generic; - using System.Diagnostics.Contracts; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Messaging.Reflection; using DotNetOpenAuth.OAuth; using DotNetOpenAuth.OAuth.ChannelElements; using DotNetOpenAuth.OAuth.Messages; using NUnit.Framework; + using Validation; [TestFixture] public class SigningBindingElementBaseTests : MessagingTestBase { @@ -125,7 +125,8 @@ namespace DotNetOpenAuth.Test.OAuth.ChannelElements { } internal AccessProtectedResourceRequest CreateResourceRequest(MessageReceivingEndpoint endpoint) { - Contract.Requires(endpoint != null); + Requires.NotNull(endpoint, "endpoint"); + var message = new AccessProtectedResourceRequest(endpoint, Protocol.V10.Version); return message; } diff --git a/src/DotNetOpenAuth.Test/OAuth/OAuthCoordinator.cs b/src/DotNetOpenAuth.Test/OAuth/OAuthCoordinator.cs index 24e512c..21c1775 100644 --- a/src/DotNetOpenAuth.Test/OAuth/OAuthCoordinator.cs +++ b/src/DotNetOpenAuth.Test/OAuth/OAuthCoordinator.cs @@ -6,12 +6,12 @@ namespace DotNetOpenAuth.Test.OAuth { using System; - using System.Diagnostics.Contracts; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Messaging.Bindings; using DotNetOpenAuth.OAuth; using DotNetOpenAuth.OAuth.ChannelElements; using DotNetOpenAuth.Test.Mocks; + using Validation; /// <summary> /// Runs a Consumer and Service Provider simultaneously so they can interact in a full simulation. diff --git a/src/DotNetOpenAuth.Test/OAuth2/OAuth2Coordinator.cs b/src/DotNetOpenAuth.Test/OAuth2/OAuth2Coordinator.cs index 6494585..eeda125 100644 --- a/src/DotNetOpenAuth.Test/OAuth2/OAuth2Coordinator.cs +++ b/src/DotNetOpenAuth.Test/OAuth2/OAuth2Coordinator.cs @@ -12,6 +12,7 @@ namespace DotNetOpenAuth.Test.OAuth2 { using System.Text; using DotNetOpenAuth.OAuth2; using DotNetOpenAuth.Test.Mocks; + using Validation; internal class OAuth2Coordinator<TClient> : CoordinatorBase<TClient, AuthorizationServer> where TClient : ClientBase { diff --git a/src/DotNetOpenAuth.Test/OpenId/AuthenticationTests.cs b/src/DotNetOpenAuth.Test/OpenId/AuthenticationTests.cs index 6129ee7..14bcaec 100644 --- a/src/DotNetOpenAuth.Test/OpenId/AuthenticationTests.cs +++ b/src/DotNetOpenAuth.Test/OpenId/AuthenticationTests.cs @@ -6,7 +6,6 @@ namespace DotNetOpenAuth.Test.OpenId { using System; - using System.Diagnostics.Contracts; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Messaging.Bindings; using DotNetOpenAuth.OpenId; @@ -15,6 +14,7 @@ namespace DotNetOpenAuth.Test.OpenId { using DotNetOpenAuth.OpenId.RelyingParty; using DotNetOpenAuth.Test.Mocks; using NUnit.Framework; + using Validation; [TestFixture] public class AuthenticationTests : OpenIdTestBase { @@ -136,8 +136,8 @@ namespace DotNetOpenAuth.Test.OpenId { } private void ParameterizedAuthenticationTest(Protocol protocol, bool statelessRP, bool sharedAssociation, bool positive, bool immediate, bool tamper) { - Requires.True(!statelessRP || !sharedAssociation, null, "The RP cannot be stateless while sharing an association with the OP."); - Requires.True(positive || !tamper, null, "Cannot tamper with a negative response."); + Requires.That(!statelessRP || !sharedAssociation, null, "The RP cannot be stateless while sharing an association with the OP."); + Requires.That(positive || !tamper, null, "Cannot tamper with a negative response."); var securitySettings = new ProviderSecuritySettings(); var cryptoKeyStore = new MemoryCryptoKeyStore(); var associationStore = new ProviderAssociationHandleEncoder(cryptoKeyStore); diff --git a/src/DotNetOpenAuth.Test/OpenId/ChannelElements/ExtensionsBindingElementTests.cs b/src/DotNetOpenAuth.Test/OpenId/ChannelElements/ExtensionsBindingElementTests.cs index 849c796..dd47782 100644 --- a/src/DotNetOpenAuth.Test/OpenId/ChannelElements/ExtensionsBindingElementTests.cs +++ b/src/DotNetOpenAuth.Test/OpenId/ChannelElements/ExtensionsBindingElementTests.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.Test.OpenId.ChannelElements { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using System.Text.RegularExpressions; using DotNetOpenAuth.Messaging; @@ -19,6 +18,7 @@ namespace DotNetOpenAuth.Test.OpenId.ChannelElements { using DotNetOpenAuth.Test.Mocks; using DotNetOpenAuth.Test.OpenId.Extensions; using NUnit.Framework; + using Validation; [TestFixture] public class ExtensionsBindingElementTests : OpenIdTestBase { diff --git a/src/DotNetOpenAuth.Test/OpenId/Extensions/ExtensionTestUtilities.cs b/src/DotNetOpenAuth.Test/OpenId/Extensions/ExtensionTestUtilities.cs index fd5bba2..8d0e6ff 100644 --- a/src/DotNetOpenAuth.Test/OpenId/Extensions/ExtensionTestUtilities.cs +++ b/src/DotNetOpenAuth.Test/OpenId/Extensions/ExtensionTestUtilities.cs @@ -7,7 +7,6 @@ namespace DotNetOpenAuth.Test.OpenId.Extensions { using System; using System.Collections.Generic; - using System.Diagnostics.Contracts; using System.Linq; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Messaging.Bindings; @@ -18,6 +17,7 @@ namespace DotNetOpenAuth.Test.OpenId.Extensions { using DotNetOpenAuth.OpenId.Provider; using DotNetOpenAuth.OpenId.RelyingParty; using DotNetOpenAuth.Test.Messaging; + using Validation; public static class ExtensionTestUtilities { /// <summary> diff --git a/src/DotNetOpenAuth.Test/OpenId/OpenIdCoordinator.cs b/src/DotNetOpenAuth.Test/OpenId/OpenIdCoordinator.cs index 41528a7..5000833 100644 --- a/src/DotNetOpenAuth.Test/OpenId/OpenIdCoordinator.cs +++ b/src/DotNetOpenAuth.Test/OpenId/OpenIdCoordinator.cs @@ -6,13 +6,13 @@ namespace DotNetOpenAuth.Test.OpenId { using System; - using System.Diagnostics.Contracts; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.Messaging.Bindings; using DotNetOpenAuth.OpenId; using DotNetOpenAuth.OpenId.Provider; using DotNetOpenAuth.OpenId.RelyingParty; using DotNetOpenAuth.Test.Mocks; + using Validation; internal class OpenIdCoordinator : CoordinatorBase<OpenIdRelyingParty, OpenIdProvider> { internal OpenIdCoordinator(Action<OpenIdRelyingParty> rpAction, Action<OpenIdProvider> opAction) diff --git a/src/DotNetOpenAuth.Test/Properties/AssemblyInfo.cs b/src/DotNetOpenAuth.Test/Properties/AssemblyInfo.cs index 2960d75..723aabf 100644 --- a/src/DotNetOpenAuth.Test/Properties/AssemblyInfo.cs +++ b/src/DotNetOpenAuth.Test/Properties/AssemblyInfo.cs @@ -4,7 +4,6 @@ // </copyright> //----------------------------------------------------------------------- -using System.Diagnostics.Contracts; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; @@ -21,5 +20,3 @@ using System.Runtime.InteropServices; // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("aef0bb13-b79c-4854-a69a-de58b8feb5d1")] - -[assembly: ContractVerification(true)]
\ No newline at end of file diff --git a/src/DotNetOpenAuth.Test/TestUtilities.cs b/src/DotNetOpenAuth.Test/TestUtilities.cs index a526f7f..3d3e151 100644 --- a/src/DotNetOpenAuth.Test/TestUtilities.cs +++ b/src/DotNetOpenAuth.Test/TestUtilities.cs @@ -11,6 +11,7 @@ namespace DotNetOpenAuth.Test { using System.Linq; using System.Net; using log4net; + using Validation; /// <summary> /// An assortment of methods useful for testing. diff --git a/src/DotNetOpenAuth.Test/packages.config b/src/DotNetOpenAuth.Test/packages.config new file mode 100644 index 0000000..10eec89 --- /dev/null +++ b/src/DotNetOpenAuth.Test/packages.config @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="Validation" version="2.0.0.12319" targetFramework="net40" /> +</packages>
\ No newline at end of file diff --git a/src/DotNetOpenAuth/DotNetOpenAuth.proj b/src/DotNetOpenAuth/DotNetOpenAuth.proj index 8c9610d..342f65c 100644 --- a/src/DotNetOpenAuth/DotNetOpenAuth.proj +++ b/src/DotNetOpenAuth/DotNetOpenAuth.proj @@ -4,7 +4,6 @@ <PropertyGroup> <SuppressBuildTarget>true</SuppressBuildTarget> - <AddContractsAssemblyForDelaySigning>false</AddContractsAssemblyForDelaySigning> </PropertyGroup> <Import Project="$(ProjectRoot)tools\DotNetOpenAuth.props" /> @@ -21,38 +20,15 @@ <PrimaryProductOutput Condition=" '%(MergeIntoUnifiedAssembly)' != 'false' ">true</PrimaryProductOutput> </ProjectReference> <SignDependsOn Include="BuildUnifiedProduct" /> - <DelaySignedAssemblies Include="$(ILMergeOutputContractAssembly)" - Condition=" '$(BuildCodeContractsReferenceAssemblies)' == 'true' "/> </ItemGroup> <Target Name="BuildILMergeInputs" DependsOnTargets="ResolveReferences"> <ItemGroup> <ILMergeProductInputAssemblies Include="@(ReferencePath)" Condition=" '%(ReferencePath.PrimaryProductOutput)' == 'true' "/> - <ILMergeInputContractAssemblies Include="@(ILMergeProductInputAssemblies->'%(RootDir)%(Directory)CodeContracts\%(FileName).Contracts%(Extension)')" - Condition=" '%(FileName)' != 'Microsoft.Contracts' "/> </ItemGroup> </Target> - <Target Name="BuildUnifiedContractAssembly" DependsOnTargets="BuildILMergeInputs" - Condition=" '$(BuildCodeContractsReferenceAssemblies)' == 'true' " - Inputs="@(ILMergeInputContractAssemblies)" Outputs="$(ILMergeOutputContractAssembly)"> - - <MakeDir Directories="$(ILMergeOutputContractAssemblyDirectory)" /> - - <Message Text="Merging $(ILMergeOutputContractAssembly)" Importance="high" /> - <ILMerge - ExcludeFile="$(ProjectRoot)ILMergeInternalizeExceptions.txt" - InputAssemblies="@(ILMergeInputContractAssemblies)" - OutputFile="$(ILMergeOutputContractAssembly)" - SearchDirectories="$(OutputPath);@(ILMergeSearchDirectories)" - KeyFile="$(PublicKeyFile)" - DelaySign="true" - ToolPath="$(ProjectRoot)tools\ILMerge" - TargetPlatformVersion="$(ClrVersion).0" - TargetPlatformDirectory="$(ILMergeTargetPlatformDirectory)" /> - </Target> - <Target Name="BuildUnifiedProductAssembly" DependsOnTargets="BuildILMergeInputs" Inputs="@(ILMergeProductInputAssemblies);@(ILMergeInputAssemblies)" Outputs="$(ILMergeOutputAssembly);$(ILMergeOutputXmlDocs)"> <MakeDir Directories="$(ILMergeOutputAssemblyDirectory)" /> @@ -83,7 +59,7 @@ TargetPlatformDirectory="$(ILMergeTargetPlatformDirectory)" /> </Target> - <Target Name="BuildUnifiedProduct" DependsOnTargets="BuildUnifiedProductAssembly;BuildUnifiedContractAssembly" /> + <Target Name="BuildUnifiedProduct" DependsOnTargets="BuildUnifiedProductAssembly" /> <Import Project="$(MSBuildToolsPath)\Microsoft.Common.targets" /> <Import Project="$(ProjectRoot)tools\DotNetOpenAuth.targets" /> diff --git a/src/DotNetOpenAuth/Stub.csproj b/src/DotNetOpenAuth/Stub.csproj index 713639e..5640261 100644 --- a/src/DotNetOpenAuth/Stub.csproj +++ b/src/DotNetOpenAuth/Stub.csproj @@ -4,7 +4,6 @@ <PropertyGroup> <SuppressBuildTarget>true</SuppressBuildTarget> - <AddContractsAssemblyForDelaySigning>false</AddContractsAssemblyForDelaySigning> </PropertyGroup> <PropertyGroup> @@ -18,7 +17,6 @@ <AppDesignerFolder>Properties</AppDesignerFolder> <AssemblyName>DotNetOpenAuth</AssemblyName> <OutputPath>$(IntermediatePath)\stub\</OutputPath> - <NoCodeContracts>true</NoCodeContracts> </PropertyGroup> <Import Project="$(ProjectRoot)tools\DotNetOpenAuth.Product.props" /> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> diff --git a/src/Mono.Math/Properties/AssemblyInfo.cs b/src/Mono.Math/Properties/AssemblyInfo.cs index 0e40bff..93e3a7f 100644 --- a/src/Mono.Math/Properties/AssemblyInfo.cs +++ b/src/Mono.Math/Properties/AssemblyInfo.cs @@ -7,7 +7,6 @@ // We DON'T put an AssemblyVersionAttribute in here because it is generated in the build. using System; -using System.Diagnostics.Contracts; using System.Net; using System.Reflection; using System.Resources; @@ -31,8 +30,6 @@ using System.Web.UI; // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("7d73990c-47c0-4256-9f20-a893add9e289")] -[assembly: ContractVerification(true)] - #if StrongNameSigned // See comment at top of this file. We need this so that strong-naming doesn't // keep this assembly from being useful to shared host (medium trust) web sites. diff --git a/src/Org.Mentalis.Security.Cryptography/Properties/AssemblyInfo.cs b/src/Org.Mentalis.Security.Cryptography/Properties/AssemblyInfo.cs index 4a9e9b9..6b93f7f 100644 --- a/src/Org.Mentalis.Security.Cryptography/Properties/AssemblyInfo.cs +++ b/src/Org.Mentalis.Security.Cryptography/Properties/AssemblyInfo.cs @@ -7,7 +7,6 @@ // We DON'T put an AssemblyVersionAttribute in here because it is generated in the build. using System; -using System.Diagnostics.Contracts; using System.Net; using System.Reflection; using System.Resources; @@ -31,8 +30,6 @@ using System.Web.UI; // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("7d73990c-47c0-4256-9f20-a893add9e289")] -[assembly: ContractVerification(true)] - #if StrongNameSigned // See comment at top of this file. We need this so that strong-naming doesn't // keep this assembly from being useful to shared host (medium trust) web sites. diff --git a/src/packages/Microsoft.IdentityModel.6.1.7600.16394/Microsoft.IdentityModel.6.1.7600.16394.nupkg b/src/packages/Microsoft.IdentityModel.6.1.7600.16394/Microsoft.IdentityModel.6.1.7600.16394.nupkg Binary files differnew file mode 100644 index 0000000..acc6f4e --- /dev/null +++ b/src/packages/Microsoft.IdentityModel.6.1.7600.16394/Microsoft.IdentityModel.6.1.7600.16394.nupkg diff --git a/src/packages/Microsoft.IdentityModel.6.1.7600.16394/Microsoft.IdentityModel.6.1.7600.16394.nuspec b/src/packages/Microsoft.IdentityModel.6.1.7600.16394/Microsoft.IdentityModel.6.1.7600.16394.nuspec new file mode 100644 index 0000000..630c4b6 --- /dev/null +++ b/src/packages/Microsoft.IdentityModel.6.1.7600.16394/Microsoft.IdentityModel.6.1.7600.16394.nuspec @@ -0,0 +1,18 @@ +<?xml version="1.0"?> +<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd"> + <metadata> + <id>Microsoft.IdentityModel</id> + <version>6.1.7600.16394</version> + <title>Windows Identity Foundation</title> + <authors>Microsoft</authors> + <owners>Microsoft</owners> + <licenseUrl>http://go.microsoft.com/fwlink/?LinkID=259741</licenseUrl> + <projectUrl>http://www.microsoft.com/wif</projectUrl> + <requireLicenseAcceptance>true</requireLicenseAcceptance> + <description>Windows Identity Foundation enables .NET developers to externalize identity logic from their application, improving developer productivity, enhancing application security, and enabling interoperable federation. Enjoy greater productivity, applying the same tools and programming model to build on-premises software as well as cloud services. Create more secure applications by reducing custom implementations and using a single simplified identity model based on claims. Enjoy greater flexibility in application deployment through interoperability based on industry standard protocols, allowing applications and identity infrastructure services to communicate via claims.</description> + <summary>Windows Identity Foundation enables .NET developers to externalize identity logic from their application, improving developer productivity, enhancing application security, and enabling interoperable federation. Enjoy greater productivity, applying the same tools and programming model to build on-premises software as well as cloud services. Create more secure applications by reducing custom implementations and using a single simplified identity model based on claims. Enjoy greater flexibility in application deployment through interoperability based on industry standard protocols, allowing applications and identity infrastructure services to communicate via claims.</summary> + <releaseNotes>WIF was integrated into .NET in version 4.5. WIF 3.5 is available for Windows Vista and Windows 7 as a standalone installer, as feature in Windows 8, or WebPI. WIF 3.5 works with .NET 3.5, 4.0 and 4.5. Because many of the classes in WIF 3.5 and WIF 4.5 share the same names, when you are using both WIF 3.5 and WIF 4.5 together, be sure to either use fully qualified class names or use namespace aliases to distinguish between classes in WIF 3.5 and WIF 4.5.</releaseNotes> + <copyright>Copyright 2012</copyright> + <tags>authentication federation claims</tags> + </metadata> +</package>
\ No newline at end of file diff --git a/src/packages/Microsoft.IdentityModel.6.1.7600.16394/lib/net35/Microsoft.IdentityModel.dll b/src/packages/Microsoft.IdentityModel.6.1.7600.16394/lib/net35/Microsoft.IdentityModel.dll Binary files differnew file mode 100644 index 0000000..5c1c205 --- /dev/null +++ b/src/packages/Microsoft.IdentityModel.6.1.7600.16394/lib/net35/Microsoft.IdentityModel.dll diff --git a/src/packages/repositories.config b/src/packages/repositories.config new file mode 100644 index 0000000..0b7a47b --- /dev/null +++ b/src/packages/repositories.config @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8"?> +<repositories> + <repository path="..\..\samples\OAuthConsumerWpf\packages.config" /> + <repository path="..\..\samples\OpenIdOfflineProvider\packages.config" /> + <repository path="..\DotNetOpenAuth.AspNet\packages.config" /> + <repository path="..\DotNetOpenAuth.Core.UI\packages.config" /> + <repository path="..\DotNetOpenAuth.Core\packages.config" /> + <repository path="..\DotNetOpenAuth.InfoCard.UI\packages.config" /> + <repository path="..\DotNetOpenAuth.InfoCard\packages.config" /> + <repository path="..\DotNetOpenAuth.OAuth.Common\packages.config" /> + <repository path="..\DotNetOpenAuth.OAuth.Consumer\packages.config" /> + <repository path="..\DotNetOpenAuth.OAuth.ServiceProvider\packages.config" /> + <repository path="..\DotNetOpenAuth.OAuth\packages.config" /> + <repository path="..\DotNetOpenAuth.OAuth2.AuthorizationServer\packages.config" /> + <repository path="..\DotNetOpenAuth.OAuth2.Client.UI\packages.config" /> + <repository path="..\DotNetOpenAuth.OAuth2.Client\packages.config" /> + <repository path="..\DotNetOpenAuth.OAuth2.ClientAuthorization\packages.config" /> + <repository path="..\DotNetOpenAuth.OAuth2.ResourceServer\packages.config" /> + <repository path="..\DotNetOpenAuth.OAuth2\packages.config" /> + <repository path="..\DotNetOpenAuth.OpenId.Provider.UI\packages.config" /> + <repository path="..\DotNetOpenAuth.OpenId.Provider\packages.config" /> + <repository path="..\DotNetOpenAuth.OpenId.RelyingParty.UI\packages.config" /> + <repository path="..\DotNetOpenAuth.OpenId.RelyingParty\packages.config" /> + <repository path="..\DotNetOpenAuth.OpenId.UI\packages.config" /> + <repository path="..\DotNetOpenAuth.OpenId\packages.config" /> + <repository path="..\DotNetOpenAuth.OpenIdInfoCard.UI\packages.config" /> + <repository path="..\DotNetOpenAuth.OpenIdOAuth\packages.config" /> + <repository path="..\DotNetOpenAuth.Test\packages.config" /> +</repositories>
\ No newline at end of file diff --git a/tools/Contracts/Bin/CodeContractsVSPropertyPane.dll b/tools/Contracts/Bin/CodeContractsVSPropertyPane.dll Binary files differdeleted file mode 100644 index 35ef983..0000000 --- a/tools/Contracts/Bin/CodeContractsVSPropertyPane.dll +++ /dev/null diff --git a/tools/Contracts/Bin/ccdocgen.exe b/tools/Contracts/Bin/ccdocgen.exe Binary files differdeleted file mode 100644 index a797a05..0000000 --- a/tools/Contracts/Bin/ccdocgen.exe +++ /dev/null diff --git a/tools/Contracts/Bin/ccdocgen.exe.config b/tools/Contracts/Bin/ccdocgen.exe.config deleted file mode 100644 index c0ea9a5..0000000 --- a/tools/Contracts/Bin/ccdocgen.exe.config +++ /dev/null @@ -1,38 +0,0 @@ -<configuration>
- <!--
- <startup>
- <supportedRuntime version="v4.0"/>
- </startup>
--->
- <system.serviceModel>
- <bindings>
- <basicHttpBinding>
- <binding name="ServiceSoap" closeTimeout="00:01:00" openTimeout="00:01:00"
- receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
- bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
- maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
- messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
- useDefaultWebProxy="true">
- <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
- maxBytesPerRead="4096" maxNameTableCharCount="16384" />
- <security mode="None">
- <transport clientCredentialType="None" proxyCredentialType="None"
- realm="" />
- <message clientCredentialType="UserName" algorithmSuite="Default" />
- </security>
- </binding>
- </basicHttpBinding>
- </bindings>
- <client>
- <endpoint address="http://olpmstorage2/leaderboard/service.asmx"
- binding="basicHttpBinding" bindingConfiguration="ServiceSoap"
- contract="LeaderBoardAccess.ServiceSoap" name="ServiceSoap" />
- </client>
- </system.serviceModel>
- <runtime>
-<!--
- <gcConcurrent enabled="false"/>
--->
- <gcServer enabled="true"/>
- </runtime>
-</configuration>
diff --git a/tools/Contracts/Bin/ccrefgen.exe b/tools/Contracts/Bin/ccrefgen.exe Binary files differdeleted file mode 100644 index 42fc156..0000000 --- a/tools/Contracts/Bin/ccrefgen.exe +++ /dev/null diff --git a/tools/Contracts/Bin/ccrefgen.exe.config b/tools/Contracts/Bin/ccrefgen.exe.config deleted file mode 100644 index 446f373..0000000 --- a/tools/Contracts/Bin/ccrefgen.exe.config +++ /dev/null @@ -1,8 +0,0 @@ -<configuration>
- <runtime>
-<!--
- <gcConcurrent enabled="false"/>
--->
- <gcServer enabled="true"/>
- </runtime>
-</configuration>
diff --git a/tools/Contracts/Bin/ccrewrite.exe b/tools/Contracts/Bin/ccrewrite.exe Binary files differdeleted file mode 100644 index 8f20f14..0000000 --- a/tools/Contracts/Bin/ccrewrite.exe +++ /dev/null diff --git a/tools/Contracts/Bin/ccrewrite.exe.config b/tools/Contracts/Bin/ccrewrite.exe.config deleted file mode 100644 index e03bc72..0000000 --- a/tools/Contracts/Bin/ccrewrite.exe.config +++ /dev/null @@ -1,39 +0,0 @@ -<configuration>
-<!--
- <startup>
- <supportedRuntime version="v4.0"/>
- </startup>
- -->
- <system.serviceModel>
- <bindings>
- <basicHttpBinding>
- <binding name="ServiceSoap" closeTimeout="00:01:00" openTimeout="00:01:00"
- receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
- bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
- maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
- messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
- useDefaultWebProxy="true">
- <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
- maxBytesPerRead="4096" maxNameTableCharCount="16384" />
- <security mode="None">
- <transport clientCredentialType="None" proxyCredentialType="None"
- realm="" />
- <message clientCredentialType="UserName" algorithmSuite="Default" />
- </security>
- </binding>
- </basicHttpBinding>
- </bindings>
- <client>
- <endpoint address="http://olpmstorage2/leaderboard/service.asmx"
- binding="basicHttpBinding" bindingConfiguration="ServiceSoap"
- contract="LeaderBoardAccess.ServiceSoap" name="ServiceSoap" />
- </client>
- </system.serviceModel>
-
- <runtime>
-<!--
- <gcConcurrent enabled="false"/>
--->
- <gcServer enabled="true"/>
- </runtime>
-</configuration>
diff --git a/tools/Contracts/Contracts/.NETFramework/v4.0/Microsoft.VisualBasic.Compatibility.Contracts.dll b/tools/Contracts/Contracts/.NETFramework/v4.0/Microsoft.VisualBasic.Compatibility.Contracts.dll Binary files differdeleted file mode 100644 index 7636ea2..0000000 --- a/tools/Contracts/Contracts/.NETFramework/v4.0/Microsoft.VisualBasic.Compatibility.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/.NETFramework/v4.0/Microsoft.VisualBasic.Contracts.dll b/tools/Contracts/Contracts/.NETFramework/v4.0/Microsoft.VisualBasic.Contracts.dll Binary files differdeleted file mode 100644 index b6582af..0000000 --- a/tools/Contracts/Contracts/.NETFramework/v4.0/Microsoft.VisualBasic.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/.NETFramework/v4.0/System.Configuration.Contracts.dll b/tools/Contracts/Contracts/.NETFramework/v4.0/System.Configuration.Contracts.dll Binary files differdeleted file mode 100644 index 0218244..0000000 --- a/tools/Contracts/Contracts/.NETFramework/v4.0/System.Configuration.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/.NETFramework/v4.0/System.Configuration.Install.Contracts.dll b/tools/Contracts/Contracts/.NETFramework/v4.0/System.Configuration.Install.Contracts.dll Binary files differdeleted file mode 100644 index 50380c5..0000000 --- a/tools/Contracts/Contracts/.NETFramework/v4.0/System.Configuration.Install.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/.NETFramework/v4.0/System.Contracts.dll b/tools/Contracts/Contracts/.NETFramework/v4.0/System.Contracts.dll Binary files differdeleted file mode 100644 index de15bc8..0000000 --- a/tools/Contracts/Contracts/.NETFramework/v4.0/System.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/.NETFramework/v4.0/System.Core.Contracts.dll b/tools/Contracts/Contracts/.NETFramework/v4.0/System.Core.Contracts.dll Binary files differdeleted file mode 100644 index 8e88bed..0000000 --- a/tools/Contracts/Contracts/.NETFramework/v4.0/System.Core.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/.NETFramework/v4.0/System.Data.Contracts.dll b/tools/Contracts/Contracts/.NETFramework/v4.0/System.Data.Contracts.dll Binary files differdeleted file mode 100644 index 77d3267..0000000 --- a/tools/Contracts/Contracts/.NETFramework/v4.0/System.Data.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/.NETFramework/v4.0/System.Drawing.Contracts.dll b/tools/Contracts/Contracts/.NETFramework/v4.0/System.Drawing.Contracts.dll Binary files differdeleted file mode 100644 index 654d416..0000000 --- a/tools/Contracts/Contracts/.NETFramework/v4.0/System.Drawing.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/.NETFramework/v4.0/System.Security.Contracts.dll b/tools/Contracts/Contracts/.NETFramework/v4.0/System.Security.Contracts.dll Binary files differdeleted file mode 100644 index a8a86e7..0000000 --- a/tools/Contracts/Contracts/.NETFramework/v4.0/System.Security.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/.NETFramework/v4.0/System.Web.Contracts.dll b/tools/Contracts/Contracts/.NETFramework/v4.0/System.Web.Contracts.dll Binary files differdeleted file mode 100644 index eb0a5ad..0000000 --- a/tools/Contracts/Contracts/.NETFramework/v4.0/System.Web.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/.NETFramework/v4.0/System.Windows.Forms.Contracts.dll b/tools/Contracts/Contracts/.NETFramework/v4.0/System.Windows.Forms.Contracts.dll Binary files differdeleted file mode 100644 index e5b1338..0000000 --- a/tools/Contracts/Contracts/.NETFramework/v4.0/System.Windows.Forms.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/.NETFramework/v4.0/System.Xml.Contracts.dll b/tools/Contracts/Contracts/.NETFramework/v4.0/System.Xml.Contracts.dll Binary files differdeleted file mode 100644 index fc19500..0000000 --- a/tools/Contracts/Contracts/.NETFramework/v4.0/System.Xml.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/.NETFramework/v4.0/System.Xml.Linq.Contracts.dll b/tools/Contracts/Contracts/.NETFramework/v4.0/System.Xml.Linq.Contracts.dll Binary files differdeleted file mode 100644 index 6a1f298..0000000 --- a/tools/Contracts/Contracts/.NETFramework/v4.0/System.Xml.Linq.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/.NETFramework/v4.0/WindowsBase.Contracts.dll b/tools/Contracts/Contracts/.NETFramework/v4.0/WindowsBase.Contracts.dll Binary files differdeleted file mode 100644 index 873f531..0000000 --- a/tools/Contracts/Contracts/.NETFramework/v4.0/WindowsBase.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/.NETFramework/v4.0/mscorlib.Contracts.dll b/tools/Contracts/Contracts/.NETFramework/v4.0/mscorlib.Contracts.dll Binary files differdeleted file mode 100644 index aa4996f..0000000 --- a/tools/Contracts/Contracts/.NETFramework/v4.0/mscorlib.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/Silverlight/v3.0/Microsoft.Contracts.dll b/tools/Contracts/Contracts/Silverlight/v3.0/Microsoft.Contracts.dll Binary files differdeleted file mode 100644 index 77a19fe..0000000 --- a/tools/Contracts/Contracts/Silverlight/v3.0/Microsoft.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/Silverlight/v3.0/Microsoft.VisualBasic.Contracts.dll b/tools/Contracts/Contracts/Silverlight/v3.0/Microsoft.VisualBasic.Contracts.dll Binary files differdeleted file mode 100644 index 08f67df..0000000 --- a/tools/Contracts/Contracts/Silverlight/v3.0/Microsoft.VisualBasic.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/Silverlight/v3.0/System.Contracts.dll b/tools/Contracts/Contracts/Silverlight/v3.0/System.Contracts.dll Binary files differdeleted file mode 100644 index ea926be..0000000 --- a/tools/Contracts/Contracts/Silverlight/v3.0/System.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/Silverlight/v3.0/System.Core.Contracts.dll b/tools/Contracts/Contracts/Silverlight/v3.0/System.Core.Contracts.dll Binary files differdeleted file mode 100644 index 86655e1..0000000 --- a/tools/Contracts/Contracts/Silverlight/v3.0/System.Core.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/Silverlight/v3.0/System.Windows.Browser.Contracts.dll b/tools/Contracts/Contracts/Silverlight/v3.0/System.Windows.Browser.Contracts.dll Binary files differdeleted file mode 100644 index e6f3530..0000000 --- a/tools/Contracts/Contracts/Silverlight/v3.0/System.Windows.Browser.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/Silverlight/v3.0/System.Windows.Contracts.dll b/tools/Contracts/Contracts/Silverlight/v3.0/System.Windows.Contracts.dll Binary files differdeleted file mode 100644 index 94a79aa..0000000 --- a/tools/Contracts/Contracts/Silverlight/v3.0/System.Windows.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/Silverlight/v3.0/System.Xml.Contracts.dll b/tools/Contracts/Contracts/Silverlight/v3.0/System.Xml.Contracts.dll Binary files differdeleted file mode 100644 index d2c5a03..0000000 --- a/tools/Contracts/Contracts/Silverlight/v3.0/System.Xml.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/Silverlight/v3.0/System.Xml.Linq.Contracts.dll b/tools/Contracts/Contracts/Silverlight/v3.0/System.Xml.Linq.Contracts.dll Binary files differdeleted file mode 100644 index f61ce57..0000000 --- a/tools/Contracts/Contracts/Silverlight/v3.0/System.Xml.Linq.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/Silverlight/v3.0/mscorlib.Contracts.dll b/tools/Contracts/Contracts/Silverlight/v3.0/mscorlib.Contracts.dll Binary files differdeleted file mode 100644 index 3b72665..0000000 --- a/tools/Contracts/Contracts/Silverlight/v3.0/mscorlib.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/Silverlight/v4.0/Microsoft.VisualBasic.Contracts.dll b/tools/Contracts/Contracts/Silverlight/v4.0/Microsoft.VisualBasic.Contracts.dll Binary files differdeleted file mode 100644 index c9544eb..0000000 --- a/tools/Contracts/Contracts/Silverlight/v4.0/Microsoft.VisualBasic.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/Silverlight/v4.0/System.Contracts.dll b/tools/Contracts/Contracts/Silverlight/v4.0/System.Contracts.dll Binary files differdeleted file mode 100644 index adbcddb..0000000 --- a/tools/Contracts/Contracts/Silverlight/v4.0/System.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/Silverlight/v4.0/System.Core.Contracts.dll b/tools/Contracts/Contracts/Silverlight/v4.0/System.Core.Contracts.dll Binary files differdeleted file mode 100644 index dd4d18d..0000000 --- a/tools/Contracts/Contracts/Silverlight/v4.0/System.Core.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/Silverlight/v4.0/System.Windows.Browser.Contracts.dll b/tools/Contracts/Contracts/Silverlight/v4.0/System.Windows.Browser.Contracts.dll Binary files differdeleted file mode 100644 index fea8ae2..0000000 --- a/tools/Contracts/Contracts/Silverlight/v4.0/System.Windows.Browser.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/Silverlight/v4.0/System.Windows.Contracts.dll b/tools/Contracts/Contracts/Silverlight/v4.0/System.Windows.Contracts.dll Binary files differdeleted file mode 100644 index c868871..0000000 --- a/tools/Contracts/Contracts/Silverlight/v4.0/System.Windows.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/Silverlight/v4.0/System.Xml.Contracts.dll b/tools/Contracts/Contracts/Silverlight/v4.0/System.Xml.Contracts.dll Binary files differdeleted file mode 100644 index 07e53dc..0000000 --- a/tools/Contracts/Contracts/Silverlight/v4.0/System.Xml.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/Silverlight/v4.0/System.Xml.Linq.Contracts.dll b/tools/Contracts/Contracts/Silverlight/v4.0/System.Xml.Linq.Contracts.dll Binary files differdeleted file mode 100644 index ff3a0e4..0000000 --- a/tools/Contracts/Contracts/Silverlight/v4.0/System.Xml.Linq.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/Silverlight/v4.0/mscorlib.Contracts.dll b/tools/Contracts/Contracts/Silverlight/v4.0/mscorlib.Contracts.dll Binary files differdeleted file mode 100644 index 940a3f5..0000000 --- a/tools/Contracts/Contracts/Silverlight/v4.0/mscorlib.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/v3.5/Microsoft.Contracts.dll b/tools/Contracts/Contracts/v3.5/Microsoft.Contracts.dll Binary files differdeleted file mode 100644 index 866b564..0000000 --- a/tools/Contracts/Contracts/v3.5/Microsoft.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/v3.5/Microsoft.VisualBasic.Compatibility.Contracts.dll b/tools/Contracts/Contracts/v3.5/Microsoft.VisualBasic.Compatibility.Contracts.dll Binary files differdeleted file mode 100644 index 0acb1e1..0000000 --- a/tools/Contracts/Contracts/v3.5/Microsoft.VisualBasic.Compatibility.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/v3.5/Microsoft.VisualBasic.Contracts.dll b/tools/Contracts/Contracts/v3.5/Microsoft.VisualBasic.Contracts.dll Binary files differdeleted file mode 100644 index f8a7883..0000000 --- a/tools/Contracts/Contracts/v3.5/Microsoft.VisualBasic.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/v3.5/System.Configuration.Contracts.dll b/tools/Contracts/Contracts/v3.5/System.Configuration.Contracts.dll Binary files differdeleted file mode 100644 index 11b3e4c..0000000 --- a/tools/Contracts/Contracts/v3.5/System.Configuration.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/v3.5/System.Configuration.Install.Contracts.dll b/tools/Contracts/Contracts/v3.5/System.Configuration.Install.Contracts.dll Binary files differdeleted file mode 100644 index 860c1db..0000000 --- a/tools/Contracts/Contracts/v3.5/System.Configuration.Install.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/v3.5/System.Contracts.dll b/tools/Contracts/Contracts/v3.5/System.Contracts.dll Binary files differdeleted file mode 100644 index b58a65d..0000000 --- a/tools/Contracts/Contracts/v3.5/System.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/v3.5/System.Core.Contracts.dll b/tools/Contracts/Contracts/v3.5/System.Core.Contracts.dll Binary files differdeleted file mode 100644 index 3fd0427..0000000 --- a/tools/Contracts/Contracts/v3.5/System.Core.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/v3.5/System.Data.Contracts.dll b/tools/Contracts/Contracts/v3.5/System.Data.Contracts.dll Binary files differdeleted file mode 100644 index 9f7be79..0000000 --- a/tools/Contracts/Contracts/v3.5/System.Data.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/v3.5/System.Drawing.Contracts.dll b/tools/Contracts/Contracts/v3.5/System.Drawing.Contracts.dll Binary files differdeleted file mode 100644 index 07e0121..0000000 --- a/tools/Contracts/Contracts/v3.5/System.Drawing.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/v3.5/System.Security.Contracts.dll b/tools/Contracts/Contracts/v3.5/System.Security.Contracts.dll Binary files differdeleted file mode 100644 index 36a8938..0000000 --- a/tools/Contracts/Contracts/v3.5/System.Security.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/v3.5/System.Web.Contracts.dll b/tools/Contracts/Contracts/v3.5/System.Web.Contracts.dll Binary files differdeleted file mode 100644 index 1be9277..0000000 --- a/tools/Contracts/Contracts/v3.5/System.Web.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/v3.5/System.Windows.Forms.Contracts.dll b/tools/Contracts/Contracts/v3.5/System.Windows.Forms.Contracts.dll Binary files differdeleted file mode 100644 index abfbedd..0000000 --- a/tools/Contracts/Contracts/v3.5/System.Windows.Forms.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/v3.5/System.Xml.Contracts.dll b/tools/Contracts/Contracts/v3.5/System.Xml.Contracts.dll Binary files differdeleted file mode 100644 index 36df135..0000000 --- a/tools/Contracts/Contracts/v3.5/System.Xml.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/v3.5/System.Xml.Linq.Contracts.dll b/tools/Contracts/Contracts/v3.5/System.Xml.Linq.Contracts.dll Binary files differdeleted file mode 100644 index 975e128..0000000 --- a/tools/Contracts/Contracts/v3.5/System.Xml.Linq.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/v3.5/WindowsBase.Contracts.dll b/tools/Contracts/Contracts/v3.5/WindowsBase.Contracts.dll Binary files differdeleted file mode 100644 index ecd1feb..0000000 --- a/tools/Contracts/Contracts/v3.5/WindowsBase.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Contracts/v3.5/mscorlib.Contracts.dll b/tools/Contracts/Contracts/v3.5/mscorlib.Contracts.dll Binary files differdeleted file mode 100644 index 72306d0..0000000 --- a/tools/Contracts/Contracts/v3.5/mscorlib.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/Documentation/ContractsManual.pdf b/tools/Contracts/Documentation/ContractsManual.pdf deleted file mode 100644 index 9b0de85..0000000 --- a/tools/Contracts/Documentation/ContractsManual.pdf +++ /dev/null @@ -1,10577 +0,0 @@ -%PDF-1.4 -% -4 0 obj -<< /S /GoTo /D (section.2) >> -endobj -7 0 obj -(Code Contracts Library Overview) -endobj -8 0 obj -<< /S /GoTo /D (subsection.3) >> -endobj -11 0 obj -(Example) -endobj -12 0 obj -<< /S /GoTo /D (section.38) >> -endobj -15 0 obj -(Contracts) -endobj -16 0 obj -<< /S /GoTo /D (subsection.39) >> -endobj -19 0 obj -(Preconditions) -endobj -20 0 obj -<< /S /GoTo /D (subsubsection.44) >> -endobj -23 0 obj -(Legacy Requires) -endobj -24 0 obj -<< /S /GoTo /D (subsection.48) >> -endobj -27 0 obj -(Postconditions) -endobj -28 0 obj -<< /S /GoTo /D (subsubsection.49) >> -endobj -31 0 obj -(Normal Postconditions) -endobj -32 0 obj -<< /S /GoTo /D (subsubsection.52) >> -endobj -35 0 obj -(Exceptional Postconditions) -endobj -36 0 obj -<< /S /GoTo /D (subsubsection.55) >> -endobj -39 0 obj -(Special Methods within Postconditions) -endobj -40 0 obj -<< /S /GoTo /D (subsection.84) >> -endobj -43 0 obj -(Object Invariants) -endobj -44 0 obj -<< /S /GoTo /D (subsection.92) >> -endobj -47 0 obj -(Assert) -endobj -48 0 obj -<< /S /GoTo /D (subsection.96) >> -endobj -51 0 obj -(Assume) -endobj -52 0 obj -<< /S /GoTo /D (subsection.100) >> -endobj -55 0 obj -(EndContractBlock) -endobj -56 0 obj -<< /S /GoTo /D (subsection.105) >> -endobj -59 0 obj -(Quantifiers) -endobj -60 0 obj -<< /S /GoTo /D (subsubsection.106) >> -endobj -63 0 obj -(ForAll) -endobj -64 0 obj -<< /S /GoTo /D (subsubsection.114) >> -endobj -67 0 obj -(Exists) -endobj -68 0 obj -<< /S /GoTo /D (subsection.115) >> -endobj -71 0 obj -(Interface Contracts) -endobj -72 0 obj -<< /S /GoTo /D (subsection.148) >> -endobj -75 0 obj -(Contracts on Abstract Methods) -endobj -76 0 obj -<< /S /GoTo /D (subsection.168) >> -endobj -79 0 obj -(Overloads on Contract Methods) -endobj -80 0 obj -<< /S /GoTo /D (subsection.171) >> -endobj -83 0 obj -(Contract Argument Validator Methods) -endobj -84 0 obj -<< /S /GoTo /D (subsection.219) >> -endobj -87 0 obj -(Contract Abbreviator Methods) -endobj -88 0 obj -<< /S /GoTo /D (section.278) >> -endobj -91 0 obj -(Contract Inheritance) -endobj -92 0 obj -<< /S /GoTo /D (subsection.279) >> -endobj -95 0 obj -(Custom Parameter Validation and Inheritance) -endobj -96 0 obj -<< /S /GoTo /D (subsection.280) >> -endobj -99 0 obj -(Inheriting from Multiple Methods) -endobj -100 0 obj -<< /S /GoTo /D (subsection.281) >> -endobj -103 0 obj -(Purity and Inheritance) -endobj -104 0 obj -<< /S /GoTo /D (subsection.282) >> -endobj -107 0 obj -(Object Invariants and Inheritance) -endobj -108 0 obj -<< /S /GoTo /D (section.283) >> -endobj -111 0 obj -(Contract Attributes) -endobj -112 0 obj -<< /S /GoTo /D (subsection.284) >> -endobj -115 0 obj -(ContractClass and ContractClassFor) -endobj -116 0 obj -<< /S /GoTo /D (subsection.291) >> -endobj -119 0 obj -(ContractInvariantMethod) -endobj -120 0 obj -<< /S /GoTo /D (subsection.292) >> -endobj -123 0 obj -(Pure) -endobj -124 0 obj -<< /S /GoTo /D (subsection.293) >> -endobj -127 0 obj -(RuntimeContracts) -endobj -128 0 obj -<< /S /GoTo /D (subsection.294) >> -endobj -131 0 obj -(ContractPublicPropertyName) -endobj -132 0 obj -<< /S /GoTo /D (subsection.299) >> -endobj -135 0 obj -(ContractVerification) -endobj -136 0 obj -<< /S /GoTo /D (subsection.300) >> -endobj -139 0 obj -(ContractRuntimeIgnored) -endobj -140 0 obj -<< /S /GoTo /D (subsection.301) >> -endobj -143 0 obj -(ContractOption) -endobj -144 0 obj -<< /S /GoTo /D (section.302) >> -endobj -147 0 obj -(Usage Guidelines) -endobj -148 0 obj -<< /S /GoTo /D (subsection.303) >> -endobj -151 0 obj -(Argument Validation and Contracts) -endobj -152 0 obj -<< /S /GoTo /D (subsubsection.305) >> -endobj -155 0 obj -(Assembly Mode) -endobj -156 0 obj -<< /S /GoTo /D (subsubsection.306) >> -endobj -159 0 obj -(Difference between Requires"426830A Exn"526930B \040and if-then-throw) -endobj -160 0 obj -<< /S /GoTo /D (subsubsection.307) >> -endobj -163 0 obj -(Forcing Projects to build with Contracts) -endobj -164 0 obj -<< /S /GoTo /D (subsection.316) >> -endobj -167 0 obj -(Migrating Projects towards Contracts) -endobj -168 0 obj -<< /S /GoTo /D (subsubsection.317) >> -endobj -171 0 obj -(Marking Existing Validation Code as Contracts) -endobj -172 0 obj -<< /S /GoTo /D (subsubsection.318) >> -endobj -175 0 obj -(Issues with Early Return) -endobj -176 0 obj -<< /S /GoTo /D (subsubsection.330) >> -endobj -179 0 obj -(Delegating Checks to Other Methods) -endobj -180 0 obj -<< /S /GoTo /D (subsubsection.354) >> -endobj -183 0 obj -(Writing Interface Contracts) -endobj -184 0 obj -<< /S /GoTo /D (subsubsection.355) >> -endobj -187 0 obj -(Going Further) -endobj -188 0 obj -<< /S /GoTo /D (subsection.356) >> -endobj -191 0 obj -(Contract Ordering) -endobj -192 0 obj -<< /S /GoTo /D (subsection.357) >> -endobj -195 0 obj -(Purity) -endobj -196 0 obj -<< /S /GoTo /D (subsection.358) >> -endobj -199 0 obj -(Visibility) -endobj -200 0 obj -<< /S /GoTo /D (subsection.359) >> -endobj -203 0 obj -(Special Method Usage) -endobj -204 0 obj -<< /S /GoTo /D (section.361) >> -endobj -207 0 obj -(Visual Studio Integration) -endobj -208 0 obj -<< /S /GoTo /D (subsection.362) >> -endobj -211 0 obj -(Assembly Mode) -endobj -212 0 obj -<< /S /GoTo /D (subsubsection.363) >> -endobj -215 0 obj -(Custom Parameter Validation) -endobj -216 0 obj -<< /S /GoTo /D (subsubsection.364) >> -endobj -219 0 obj -(Standard Contract Requires) -endobj -220 0 obj -<< /S /GoTo /D (subsection.365) >> -endobj -223 0 obj -(Runtime Contract Checking) -endobj -224 0 obj -<< /S /GoTo /D (subsubsection.366) >> -endobj -227 0 obj -(Runtime Checking Level) -endobj -228 0 obj -<< /S /GoTo /D (subsubsection.367) >> -endobj -231 0 obj -(Public Surface Contract Checks) -endobj -232 0 obj -<< /S /GoTo /D (subsubsection.368) >> -endobj -235 0 obj -(Assert on Contract Failure) -endobj -236 0 obj -<< /S /GoTo /D (subsubsection.369) >> -endobj -239 0 obj -(Call-site Requires Checking) -endobj -240 0 obj -<< /S /GoTo /D (subsubsection.370) >> -endobj -243 0 obj -(Build Steps) -endobj -244 0 obj -<< /S /GoTo /D (subsubsection.371) >> -endobj -247 0 obj -(Extra Options) -endobj -248 0 obj -<< /S /GoTo /D (subsubsection.372) >> -endobj -251 0 obj -(Suppressing Warnings) -endobj -252 0 obj -<< /S /GoTo /D (subsection.378) >> -endobj -255 0 obj -(C\043 Code Snippets) -endobj -256 0 obj -<< /S /GoTo /D (subsection.379) >> -endobj -259 0 obj -(VB Code Snippets) -endobj -260 0 obj -<< /S /GoTo /D (subsection.380) >> -endobj -263 0 obj -(Building a Contract Reference Assembly) -endobj -264 0 obj -<< /S /GoTo /D (subsection.381) >> -endobj -267 0 obj -(Static Contract Checking) -endobj -268 0 obj -<< /S /GoTo /D (subsubsection.382) >> -endobj -271 0 obj -(Current Limitations of the Checker and Bugs) -endobj -272 0 obj -<< /S /GoTo /D (subsubsection.385) >> -endobj -275 0 obj -(Setting Up a Configuration) -endobj -276 0 obj -<< /S /GoTo /D (subsubsection.386) >> -endobj -279 0 obj -(Focus Your Attention) -endobj -280 0 obj -<< /S /GoTo /D (subsubsection.391) >> -endobj -283 0 obj -(Dealing with Warnings) -endobj -284 0 obj -<< /S /GoTo /D (subsubsection.405) >> -endobj -287 0 obj -(Baseline) -endobj -288 0 obj -<< /S /GoTo /D (subsubsection.406) >> -endobj -291 0 obj -(Filtering Warning Messages) -endobj -292 0 obj -<< /S /GoTo /D (section.413) >> -endobj -295 0 obj -(Runtime Contract Behavior) -endobj -296 0 obj -<< /S /GoTo /D (subsection.414) >> -endobj -299 0 obj -(Rewriter Methods) -endobj -300 0 obj -<< /S /GoTo /D (subsection.471) >> -endobj -303 0 obj -(ReportFailure Method) -endobj -304 0 obj -<< /S /GoTo /D (subsection.480) >> -endobj -307 0 obj -(RaiseContractFailedEvent) -endobj -308 0 obj -<< /S /GoTo /D (subsection.481) >> -endobj -311 0 obj -(TriggerFailure) -endobj -312 0 obj -<< /S /GoTo /D (subsection.482) >> -endobj -315 0 obj -(Rational for Runtime Behavior) -endobj -316 0 obj -<< /S /GoTo /D (subsection.483) >> -endobj -319 0 obj -(ContractException) -endobj -320 0 obj -<< /S /GoTo /D (subsection.484) >> -endobj -323 0 obj -(Providing a Custom Contract Runtime Class) -endobj -324 0 obj -<< /S /GoTo /D (subsection.518) >> -endobj -327 0 obj -(Test Harness Setup) -endobj -328 0 obj -<< /S /GoTo /D (subsection.539) >> -endobj -331 0 obj -(Tests that Exercise Contract Failure) -endobj -332 0 obj -<< /S /GoTo /D (section.540) >> -endobj -335 0 obj -(Contract Documentation Generation) -endobj -336 0 obj -<< /S /GoTo /D (subsection.541) >> -endobj -339 0 obj -(Contract XML Format) -endobj -340 0 obj -<< /S /GoTo /D (subsubsection.542) >> -endobj -343 0 obj -(Contract Elements) -endobj -344 0 obj -<< /S /GoTo /D (subsubsection.548) >> -endobj -347 0 obj -(Additional Exception Elements) -endobj -348 0 obj -<< /S /GoTo /D (subsection.549) >> -endobj -351 0 obj -(Usage from Visual Studio) -endobj -352 0 obj -<< /S /GoTo /D (subsection.550) >> -endobj -355 0 obj -(Sandcastle Integration) -endobj -356 0 obj -<< /S /GoTo /D (section.551) >> -endobj -359 0 obj -(Installation) -endobj -360 0 obj -<< /S /GoTo /D (subsection.552) >> -endobj -363 0 obj -(VS2010 Beta2) -endobj -364 0 obj -<< /S /GoTo /D (subsection.553) >> -endobj -367 0 obj -(VS2010 Beta1) -endobj -368 0 obj -<< /S /GoTo /D (subsection.554) >> -endobj -371 0 obj -(Upgrade-downgrade issues) -endobj -372 0 obj -<< /S /GoTo /D (section.555) >> -endobj -375 0 obj -(Troubleshooting) -endobj -376 0 obj -<< /S /GoTo /D (subsection.556) >> -endobj -379 0 obj -(ASP .NET) -endobj -380 0 obj -<< /S /GoTo /D (subsubsection.557) >> -endobj -383 0 obj -(Asserts) -endobj -384 0 obj -<< /S /GoTo /D (subsubsection.558) >> -endobj -387 0 obj -(Ambiguous Type Warnings) -endobj -388 0 obj -<< /S /GoTo /D (subsection.567) >> -endobj -391 0 obj -(Contracts on struct constructors) -endobj -392 0 obj -<< /S /GoTo /D (subsection.585) >> -endobj -395 0 obj -(Call-site Requires) -endobj -396 0 obj -<< /S /GoTo /D (section.586) >> -endobj -399 0 obj -(Known Issues) -endobj -400 0 obj -<< /S /GoTo /D (subsection.587) >> -endobj -403 0 obj -(Build Slowdown) -endobj -404 0 obj -<< /S /GoTo /D (subsection.588) >> -endobj -407 0 obj -(Contracts on Delegates) -endobj -408 0 obj -<< /S /GoTo /D (subsection.589) >> -endobj -411 0 obj -(Iterators) -endobj -412 0 obj -<< /S /GoTo /D (subsection.603) >> -endobj -415 0 obj -(Closures) -endobj -416 0 obj -<< /S /GoTo /D (subsection.606) >> -endobj -419 0 obj -(Forms and Generated Code) -endobj -420 0 obj -<< /S /GoTo /D (subsection.611) >> -endobj -423 0 obj -(Old-style assembly signing) -endobj -424 0 obj -<< /S /GoTo /D (subsection.614) >> -endobj -427 0 obj -(Edit-Continue Not Working) -endobj -428 0 obj -<< /S /GoTo /D (section.615) >> -endobj -431 0 obj -(Feedback) -endobj -432 0 obj -<< /S /GoTo /D (appendix.616) >> -endobj -435 0 obj -(Appendix) -endobj -436 0 obj -<< /S /GoTo /D (subsection.617) >> -endobj -439 0 obj -(MsBuild Integration) -endobj -440 0 obj -<< /S /GoTo /D (subsection.618) >> -endobj -443 0 obj -(Contract Rewriter Command Line Options) -endobj -444 0 obj -<< /S /GoTo /D (subsubsection.619) >> -endobj -447 0 obj -(Troubleshooting Rewriting) -endobj -448 0 obj -<< /S /GoTo /D (subsection.620) >> -endobj -451 0 obj -(Static Contract Verifier Command Line Options) -endobj -452 0 obj -<< /S /GoTo /D (subsection.621) >> -endobj -455 0 obj -(Contract Reference Assemblies) -endobj -456 0 obj -<< /S /GoTo /D [457 0 R /Fit ] >> -endobj -474 0 obj << -/Length 1509 -/Filter /FlateDecode ->> -stream -xˎ6_[% Rė"M7@&EmzHr,9wCr}
B3Mc+T|rew/r표+|ݎ.~9Y3VH9Sru!2P@,jz= `ưu@d_=R#{)<CmJ'/lwCq -F] -:Z.NJצ**W7@+
,m
aed:߭zw8Qp'9Rf,{S*[|=]܆EǘE;>U,hPx}a;9-9X%@=vq]{'g78L ȝDB9m{2hی}xdj)YbbfXsgĜ(<eBpd$3k:u-f{(<Yp98`8i#qvmTNz@om{)DяBFAy5X&ÞVٌٜEJ!<*%^_bɕ{<*=δsx#oOm7-aݾu -68e>uk0RyȻ7'q;\On 46cC'-"Bf`896NʜXǓfڿAutc!7=*PE;㶝oK t](7vp17'$X$C{kD SEIAq4%;4E/ -ej:XyQŜ2y}o@]f8uXP3d$
N)4trYҦyup8lWD_?x#+5r6ЎgR27ks]1HlBC<v?:t?Irzum\dس70bX0P_hrd?Ǡkr -M -!I"0c`Cآ
83@ -7Q6{ڿS~kJ,,(b)Vhl>O z;}n`Vj[hsm_<`xW줢b9`[c`q*q02'c0,7@yxU -'P2Fu{phZRyQ@Ugz4-RN|=Y͐e^ 3E}\NU瀺
< -endstream -endobj -457 0 obj << -/Type /Page -/Contents 474 0 R -/Resources 473 0 R -/MediaBox [0 0 612 792] -/Parent 485 0 R -/Annots [ 459 0 R 460 0 R 461 0 R 462 0 R 463 0 R 464 0 R 465 0 R 466 0 R 467 0 R 468 0 R ] ->> endobj -458 0 obj << -/Type /XObject -/Subtype /Image -/Width 225 -/Height 139 -/BitsPerComponent 8 -/ColorSpace /DeviceRGB -/Length 40753 -/Filter/FlateDecode -/DecodeParms<</Colors 3/Columns 225/BitsPerComponent 8/Predictor 10>> ->> -stream -xڬwlYz~DŽ{̗ޛ*/QBC#1Int@5^4ðn *ITUY61{7cVxƍ{}Aa -@_/T]pO@*O&.^=] - hP"Becˋ6VR"# -ʝc - -us'^C@E#`f -5 -V}?fVce(_ -@,$L,DbhzݶT8<60!1$VVX6-1S[+۲lIRRĀ6I(27VN|G:P/4Ol&J|or]t'$9usuVPfKIo7^CDKB$n5ihq?\x~G݉dRF,1l$,ƈdHR>5$&$Qc;hNǟѝƅO B,"<! -a9N|EiO)E
J- - -k%KBfz(ӽb}"QLUQc%żVy/8B@{ -YDž# )w۩$ -u[^r;gzYIS#ȓlu['w&@DZls^6t"- -Vt̮v!`oFwĐΚ2Y!bILlF,<XFk0CP>}['p24
@BnfM${[_ƊFMB[ѭ蚛$@BdluC -AeȜy\ij/ -Bo^>Or.[3xy]:\GԠ|[E/&[+RjM4"(\u@_tefV*UXI%*j븒d1$ zp^6\:>r9[OD`Yȍc84V=~g͆:'; - -ЈlH@ԑbՉocX6\}V. -ea(4 -cZIlf fĽT?:WDӍNIl/ /Y`_4o71Q!NSIL3>?z(T#ñkKsk!I<O"p|i -A91X6pѝ)wFQpy>f`˜lP~4JƦYe_~ERMu\"N+T=fbb&b -csH:"2 B@S6%5=l -Jco _MUO=s|(qLj+)e"bW{yb0bNt;7DLvX5GV)B%&0_}P<{m' - -f*2rF+8|KG-YEOSg$ -ȋzw7[d灇_,6% -[_ -P)B]<tPεy*txw_p1cs%QH97P"2Lw6&DնOhz7@{O;d%Qew`hlr0[ -Pj3QMwvTwtP_ZX.ߥ[)dQ4u\-iJ J*WG?|>Xhk\`s|ނdz&\t -Dk;1 - -$ -t5/} -p2@!.H"*괪Zrj -jU{p1"*X@$H$S4.mGSut畭? -#zCRC?3O_66 EqsD[a`۵Q^SblwpwD%/ g}R -}(+) %<|kb';ֹWG)m?t2Y_+ϻMRP~3BT L;Sד? -%Ŝ)_^W'Oم -ݾJYԤYyga -?
RJ,z$o|AyuJcFDiI&ӰfSxxR+xD*_( -O -u;zVt&rdZ`n}t!l^!.E9k<1M-V;3D `
0^vཡn|:ڧ/Ԣ<dw -xW -qtfV$@9v; -DkcstbkF_ Tcm|?xį&n].OSR&l`S-fk^l"| -u}vf
daO}fK6vdI؊TTXNe;XQa~:"QWN=wʙ?}9W%|2R秱~,6: -tuДlCtxbC2b+ -p~Il{} -V^)_tَEdZ|?ఁRPcM"*B YH -"n2plVɴ^fww8:TTXK@@Pj͈0x6ɪ$BOsc1 *;O3KEj]pxL[6WY`6߾-65&7ۆ&(v"TSc?:ᮇص!#s -^5ttgvؔmzݖS`&fJWSv\A)NZAeU}+nl'E^<xBVi<
s-bP -Ev..,DD2p˟Ѩ
'M;6j";` ,%՝۲yjNvoLNK?z
wj@N24ڡkb
*Ua{JIwRRaAA L@KYrxRj3JF391bb$1E+s
v\EPV,5Yb3Kv #3L2=yCIDPӨK3
<ѽϠr]42m~ - -B;@"v~e -* BCڿu~)yrP4r;cq ->x'@
)|SҘ͵.lƼg@DNto&; -)QJZʒ-pz{}ʱ>H8~xCghDbD$GӔhD
Bķ=7WayMXEWRE+NK0jyQ5NLm7H8*$U}7ԇZnzI'fߊ7wk<D1XGXJSr%1vdG"
di&l<N@L\xBBIPys'oE8qiܒ)Z3}w^Oo" -oED~~RG态^{s|͝oNXL(Q#ƒJwArLbCc;ֱg? -JkU籩\w"blGH˘A7x
-Xxdv;jķ_h z+uRaԦX)9M/A),|n*u}Ly! -S2N6#M;L TT -,x*Hע5 -TBe9֝,Ak1X~-RǡM.@k~lNq-z.%y::ab32FJ]A -txw_ptzD&)PcȤyN -Ӄ.gL5tG[M&;axc˛#쥊[?ؑٻR}]RX.U)0jRBrz;9L2@Pͽd`j&c̸'1[)}xd(̢@dG
>p{dk$Ӥ1TUp/̵QΑ,Ll;ZKUdj"\U@vo2 -Hn-+0^6,B -V:4N<#m -~ -jO.u ~7fk#\Q3Θ݂dTRgoVj:xU#$DBDP)FR9QrI*U8:|37X -,"#;HFN8Ou -(po^>x;n"S3++Aer>c?g -5hD@(W -sl}46D<ܜ܈iyV'宇44_K̩JgNf~^3(5VUqZN0>tؤ&"j -9h?^GP]aVjZ -T^Nq`ԙ2r"Vucp]<@<XU%LGRR(uq -ӂD6A(uJU`?2UG -&@Aa[Qմ"8gvS֦PcҀ.*=ss~7( -Ån05,*$ݺJ:%|XfdPJ5d2yc9Mhl7O0 -]l0gt@ZC8ɓAu -_Zn8WT3臐J)#*&㧈B͋>=9zwXb8eG -f'v -a4n0hy}'[~c7 \1gyR"LË#
.ni=Ase Dcfrk穠XΫ_=t}O7R1-dcRv{C3(h8aF@lǝv_oANSh@&<٫ VJS2nUHC-W-k|w*?6; -jոYxVGWeW=珊 -@qQT/V\pCe3JMHa<_(RSVQu/x͙Jظ -)V]x~8zMDp'
-, @7 Nt*x -^[0X+Ib^m}I~;~7j"|-VF ɮr4:N@ -KӉgv"1'Sܙ -؎v۩;^_ JBc?ts -@FI# @d6_/zȎR]+'u26w˱ esF -U?GT"tn& Og~h}`06NXXJ&D QXNY!@bGh[h3|csQ -uUG(*P *T! 6A -l+T)Q0#1Sn0Vl - -ln6t7-uC}("&Sr#zg{:(s:ɗcV@VEw%;l7H'I86;L(;()6iq1ݠ|(` -S
-X -i)Me\ڧ6'A@),UQ=> 3LYi9_0hxAcin0@ft&L/>)My٧E_6el> -xRt2JLUQyiPu,4W=37rY_';asK3#eձ#2'Ж-Es}+ͳ -D (
`)YWNH92^[1=$&3{r\/I%9:Bp (TSBR8`lUO7rlZ5c'TU#!iTAe)vF㉝!k!1$YHd#)Ih|stт~0X6[1SPy3h,؏.wKΤ2tEk<Oĥ.Fk)E=>#`8"NH4q$+e\oG7AZj12
fNrdդPJs(SѴ3 MN#F4tȇ~X}ZUu|
U@!4
pz8UjB -^fwrgs|4K3 -S-
a9ld9O[5so60
jO6ӭP7fv 3΅)j)SDl:H8،.E4[h0di@xgA&I|+<ܨ:՝rւnu`*2a%xwR9wf'Gx< x:hVL<=9Z"%V +rcC{;Lw̞?$(SJSRu,ec36C`ٌ֝N}*D -VlG7[~Dó}to
t9kвr@DV2dFaןm膇D
րJ3=<x^e>]`T -͗tsƩ|s2FJ+ -f(RR.JSN %շ*6%m~a7^0vlsȜcYJ)CRΜ2YC;{ɆB:xcL?r~ʱ!'z$gܤQIB=܍8fw\xL##N3!I,%Dqә|j9awgq@-6V {LݺXf:h*Vgp]ٸ43uR%&E J"*U<qu]߅˭V$~WHu`Ju%7c̚1+F -OL -k暒 -rb5W=B{o>N?>HIj[ t:̵~?\`!ɝ3_;]* -SnkI:<( -*:dz|0-7N=v/W甄]ǩ44z -p^UtBKپd_S."V<o~o.c}.\N|yn0 %T{q#jp"y7͗/OoF@5f8ݘb> -ݽZyf%WC셭'dtopH_Qz(UEUAMUg*}Ro+? -odoƥ(0?O C|RͭJQC2n<zW(|q>qs_'|O'4qWF( -@7= -f!D-0 P4b
3ϽlE@[B5zfrp$k@|(dexlpU`(]R2E+}L,~Qלj˘yAU?KIEDLT.kx@,zjR
{OGRnGڨn5R&nw<w{}j~PvW~JQdG#髻P(PBj 4/#b`s)]5kg%h28j̮-8 -{ -ގ/bq1|+[#f}v6XPpugr{d r
'{> &/W - -=
-K{>|'3ܖk~d?/CR͙RpǼ - ֻpNr -*N&y!-}v3jٻbn}BH;iDՍ9Q#BRr^i9L0s>Yɵ:SJ -$錿|$Y{%J>T`D - l&f -M*݇x 5jGg4&㛣ĬRJ)ӣ|hǺ -|} - -ɗFZ+]/0'9@fPj7WT@Tg6MD£a]=]<ޔC%lE֭t]Jd+m8}v& ņH>166JMfnRf;#s`}639TbW?A]K.NYoOJe:[q -Ԭ@2_nԐSU#)- @Vcwј)Ė' {n"v]20R%+CɓSQWy@R%mμǟ9Э3o]c -X;Ddm}Cac{>@voJPڴն.dHkkFʆؘ=3RK>Pֺؚ1̛YX<dO;j -6h)'7Goʹ|??־g10Qz,; nVqVtn2 m@;^ʝaj)(5Q - KuQEs^*ѺU~)|~g -KTRYyWKUv^n{|#Zy _z3pYIr5M^K(پf)7 -Ze%T~nM^] - -z2_'# -jiP
D+կJMi#ru(OoxVy̖?& -:&:M20@! -j
ٓ<`k^f;$RRHF@kA -_#C2 -*]@ -3zdTWU\rN\X(9%\b;Ԙd!H?Kwck.f(qjZk. -4͌],n\9 -"И -̕͡v7|bC{ K9¥)_Q$*8u[[7zXi&\ -3eԟ8 #7qkEū> -0 -8Fk?.~Kw~0|7}:ȌXezP@n - -Ԩ]Ԍ q))] -4 -ulbS4Q'[hyԵ8##41a%< ttH$q?+; J.~e29ukf> -ȏEf4icQ0Wv҇@醔`Q!}Fڟ<dHA^[6ȟ*ђ} - O!~:Q4DLT@zz'0>P7CDߥ|Bu_d -_$#H6!+!ԁOSO*V:#f^p[@Of??'A -\^iQ )esJ6!Բ
:[Ԛ:?vWla-| 9[%{>=1+;?@ӸJޱ=!Sf ̜RNjz {2 -[o-lգ/$3HےJzƪmW@~չWs+7k.qi|nZy{ -'z -WIdlΐklb:]Cݡz5^o|WdTljHj(צ>·UsD<W#߽7y"zjSꋝW{_D?{>1FĤD).~me3 OoMٚ͞(E`W!@$qh0,W*In!t ' -5# |uBީO!=+
|07
b ֚Z
CVB"4GtDڔ -kUPIwa)Ă<nK*HŔ+1uIqf;
-:<@;4YfV(;ND|PPU d%_1oR&:CU -fgGuG͔A8zMJ(luezAMt)8Th{G:6AzwmdkH}(L l{6l癳h:In㻮WbZvi\V'-MHhЄ~`QпT(l=fx8eEo+27u}YL+KvP'!mQ/)/IFD!9S8g]K=t e%#U%9JкKVpouԾ=-`ZZi+C9SgYZipYEҘP)2,PJ%EbX4UY5JT+W@E wj!&gv]ߎqt. -u$ilr]@*7&hRPgۮ{J]ك3"RP3̰WfkYDd+]Mqƨ:dݚ(KLԬA(҉k$@! -endstream -endobj -459 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [131.137 430.393 138.111 442.348] -/A << /S /GoTo /D (section.413) >> ->> endobj -460 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [130.82 399.066 153.292 409.914] -/A << /S /GoTo /D (subsubsection.406) >> ->> endobj -461 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [251.881 335.305 266.604 346.153] -/A << /S /GoTo /D (subsection.303) >> ->> endobj -462 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [483.319 303.425 503.023 314.273] -/A << /S /GoTo /D (subsection.171) >> ->> endobj -463 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [411.062 271.544 430.766 282.392] -/A << /S /GoTo /D (subsection.219) >> ->> endobj -464 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [131.489 251.619 146.211 262.467] -/A << /S /GoTo /D (subsection.301) >> ->> endobj -465 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [130.78 219.738 145.502 230.587] -/A << /S /GoTo /D (subsection.316) >> ->> endobj -466 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [130.737 199.813 145.459 210.661] -/A << /S /GoTo /D (subsection.518) >> ->> endobj -467 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [71.004 132.994 258.745 143.842] -/A << /S /GoTo /D (section.2) >> ->> endobj -468 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 121.039 148.906 131.887] -/A << /S /GoTo /D (subsection.3) >> ->> endobj -475 0 obj << -/D [457 0 R /XYZ 71 721 null] ->> endobj -476 0 obj << -/D [457 0 R /XYZ 72 720 null] ->> endobj -484 0 obj << -/D [457 0 R /XYZ 72 147.98 null] ->> endobj -473 0 obj << -/Font << /F15 477 0 R /F16 478 0 R /F25 479 0 R /F14 480 0 R /F8 481 0 R /F26 482 0 R /F28 483 0 R >> -/XObject << /Im1 458 0 R >> -/ProcSet [ /PDF /Text /ImageC ] ->> endobj -533 0 obj << -/Length 1496 -/Filter /FlateDecode ->> -stream -x[[6)ri_ص/)>3ZڱbۅDl'YD0Fo8`O^]xy -, -rY0Bb9݃~@WtQ?0!TS6Uq"f -[%yEY
XxCǰB^0vG,38w -E8Fdc!a60xiɡ8l,ʒK2:y_JFtg=OZttY˫̄煾bEJ -wL:&/ڀ˶9$`:qE2)[pguV댻ऺGB݀nm)V־|nAa¦}VKwlpX>Jy]]4=Ҳ8[L^%pw{GoXo:,"S7 -p\E:}/1cmW|쾡|y:@ݐ#L,eaҘwngR{I ٤z¦O>?aƱq&<]K)\F;kV`vk1ojG6hۥ%, -!^ -tm*v[c -HP+->g$A ->J-euNQ;{(GGP($90ƑXoNnڅ҈D[ȑڝ+\6YaCIAch˶D)"B]ˏ
Z<0-<Jf![/N.^,\ -endstream -endobj -532 0 obj << -/Type /Page -/Contents 533 0 R -/Resources 531 0 R -/MediaBox [0 0 612 792] -/Parent 485 0 R -/Annots [ 469 0 R 470 0 R 471 0 R 472 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R 494 0 R 495 0 R 496 0 R 497 0 R 498 0 R 499 0 R 500 0 R 501 0 R 502 0 R 503 0 R 504 0 R 505 0 R 506 0 R 507 0 R 508 0 R 509 0 R 510 0 R 511 0 R 512 0 R 513 0 R 514 0 R 515 0 R 516 0 R 517 0 R 518 0 R 519 0 R 520 0 R 521 0 R 522 0 R 523 0 R 524 0 R 525 0 R 526 0 R 527 0 R 528 0 R 529 0 R ] ->> endobj -469 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [71.004 709.041 136.8 717.869] -/A << /S /GoTo /D (section.38) >> ->> endobj -470 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 697.086 170.298 705.997] -/A << /S /GoTo /D (subsection.39) >> ->> endobj -471 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 683.194 213.94 693.931] -/A << /S /GoTo /D (subsubsection.44) >> ->> endobj -472 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 673.176 174.477 682.087] -/A << /S /GoTo /D (subsection.48) >> ->> endobj -486 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 661.22 242.085 670.131] -/A << /S /GoTo /D (subsubsection.49) >> ->> endobj -487 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 647.328 261.014 658.176] -/A << /S /GoTo /D (subsubsection.52) >> ->> endobj -488 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 635.373 312.404 646.221] -/A << /S /GoTo /D (subsubsection.55) >> ->> endobj -489 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 623.418 187.041 634.266] -/A << /S /GoTo /D (subsection.84) >> ->> endobj -490 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 613.4 138.39 622.2] -/A << /S /GoTo /D (subsection.92) >> ->> endobj -491 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 601.445 144.451 610.245] -/A << /S /GoTo /D (subsection.96) >> ->> endobj -492 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 589.489 191.69 598.4] -/A << /S /GoTo /D (subsection.100) >> ->> endobj -493 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 575.597 158.814 586.445] -/A << /S /GoTo /D (subsection.105) >> ->> endobj -494 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 565.579 170.298 574.49] -/A << /S /GoTo /D (subsubsection.106) >> ->> endobj -495 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 553.624 169.274 562.424] -/A << /S /GoTo /D (subsubsection.114) >> ->> endobj -496 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 541.669 194.541 550.58] -/A << /S /GoTo /D (subsection.115) >> ->> endobj -497 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 529.714 249.446 538.625] -/A << /S /GoTo /D (subsection.148) >> ->> endobj -498 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 517.758 250.774 526.669] -/A << /S /GoTo /D (subsection.168) >> ->> endobj -499 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 503.866 281.188 514.714] -/A << /S /GoTo /D (subsection.171) >> ->> endobj -500 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 493.848 246.319 502.759] -/A << /S /GoTo /D (subsection.219) >> ->> endobj -501 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [71.004 471.93 193.059 480.841] -/A << /S /GoTo /D (section.278) >> ->> endobj -502 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 459.975 313.152 468.886] -/A << /S /GoTo /D (subsection.279) >> ->> endobj -503 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 446.083 258.468 456.931] -/A << /S /GoTo /D (subsection.280) >> ->> endobj -504 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 434.128 210.398 444.976] -/A << /S /GoTo /D (subsection.281) >> ->> endobj -505 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 422.172 258.744 433.021] -/A << /S /GoTo /D (subsection.282) >> ->> endobj -506 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [71.004 402.192 188.211 411.103] -/A << /S /GoTo /D (section.283) >> ->> endobj -507 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 390.237 270.7 399.148] -/A << /S /GoTo /D (subsection.284) >> ->> endobj -508 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 378.281 222.436 387.192] -/A << /S /GoTo /D (subsection.291) >> ->> endobj -509 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 366.326 131.499 375.127] -/A << /S /GoTo /D (subsection.292) >> ->> endobj -510 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 354.371 190.777 363.171] -/A << /S /GoTo /D (subsection.293) >> ->> endobj -511 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 340.479 241.005 351.327] -/A << /S /GoTo /D (subsection.294) >> ->> endobj -512 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 330.461 199.19 339.372] -/A << /S /GoTo /D (subsection.299) >> ->> endobj -513 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 316.568 219.807 327.417] -/A << /S /GoTo /D (subsection.300) >> ->> endobj -514 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 304.613 179.79 315.351] -/A << /S /GoTo /D (subsection.301) >> ->> endobj -515 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [71.004 282.695 174.313 293.544] -/A << /S /GoTo /D (section.302) >> ->> endobj -516 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 270.74 267.877 281.588] -/A << /S /GoTo /D (subsection.303) >> ->> endobj -517 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 258.785 211.754 269.633] -/A << /S /GoTo /D (subsubsection.305) >> ->> endobj -518 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 246.276 370.492 258.232] -/A << /S /GoTo /D (subsubsection.306) >> ->> endobj -519 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 234.875 320.319 245.723] -/A << /S /GoTo /D (subsubsection.307) >> ->> endobj -520 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 222.92 275.93 233.768] -/A << /S /GoTo /D (subsection.316) >> ->> endobj -521 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 210.964 350.373 221.813] -/A << /S /GoTo /D (subsubsection.317) >> ->> endobj -522 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 199.009 251.715 209.857] -/A << /S /GoTo /D (subsubsection.318) >> ->> endobj -523 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 187.054 304.905 197.902] -/A << /S /GoTo /D (subsubsection.330) >> ->> endobj -524 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 175.099 262.979 185.947] -/A << /S /GoTo /D (subsubsection.354) >> ->> endobj -525 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 163.144 204.988 173.992] -/A << /S /GoTo /D (subsubsection.355) >> ->> endobj -526 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 151.189 191.469 162.037] -/A << /S /GoTo /D (subsection.356) >> ->> endobj -527 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 139.233 138.694 149.971] -/A << /S /GoTo /D (subsection.357) >> ->> endobj -528 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 127.278 150.484 138.126] -/A << /S /GoTo /D (subsection.358) >> ->> endobj -529 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 115.323 207.769 126.171] -/A << /S /GoTo /D (subsection.359) >> ->> endobj -534 0 obj << -/D [532 0 R /XYZ 71 721 null] ->> endobj -531 0 obj << -/Font << /F25 479 0 R /F8 481 0 R /F14 480 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -585 0 obj << -/Length 1610 -/Filter /FlateDecode ->> -stream -x[sF+鍸hW{ܦCv^(h
@W}(FiL+
;d#>zDሂx'tFDd<GWyYx$*mWq#%V2UvNpXrF -=p[|yz-,=eG'wz=JAfC۞|ICQorN}: -Wܮ*%oԇ0;7Lw^0/~gu&A\,n{i=&C*ƚYVOe\*Hdvl`uWB.u;qЪbBPA&AA1她eu#[6܅6b#1eq&VO4ӬV5&3k^Yɻg05fСQ=E}IBugOWGeڽaf\Jյ=E}W:wu֡=W<d˴Tys҃_M1utUWRE L%@6``9kB^9Aw"T -MGٕuF#<$7;21ac_9eYebɀ>CueHnw(ڵy[bf*TcGW'NasG.~lr{._Upkba2'm~ڻG>Hm]h^3Rdv^nQ?:wc9v>՟];rHh)Eֳٿަ -endstream -endobj -584 0 obj << -/Type /Page -/Contents 585 0 R -/Resources 583 0 R -/MediaBox [0 0 612 792] -/Parent 485 0 R -/Annots [ 530 0 R 535 0 R 536 0 R 537 0 R 538 0 R 539 0 R 540 0 R 541 0 R 542 0 R 543 0 R 544 0 R 545 0 R 546 0 R 547 0 R 548 0 R 549 0 R 550 0 R 551 0 R 552 0 R 553 0 R 554 0 R 555 0 R 556 0 R 557 0 R 558 0 R 559 0 R 560 0 R 561 0 R 562 0 R 563 0 R 564 0 R 565 0 R 566 0 R 567 0 R 568 0 R 569 0 R 570 0 R 571 0 R 572 0 R 573 0 R 574 0 R 575 0 R 576 0 R 577 0 R 578 0 R 579 0 R 580 0 R 581 0 R ] ->> endobj -530 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [71.004 707.104 215.366 717.952] -/A << /S /GoTo /D (section.361) >> ->> endobj -535 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 695.149 179.873 705.997] -/A << /S /GoTo /D (subsection.362) >> ->> endobj -536 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 685.131 273.329 694.042] -/A << /S /GoTo /D (subsubsection.363) >> ->> endobj -537 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 671.238 265.331 682.087] -/A << /S /GoTo /D (subsubsection.364) >> ->> endobj -538 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 659.283 233.34 670.131] -/A << /S /GoTo /D (subsection.365) >> ->> endobj -539 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 647.328 249.557 658.176] -/A << /S /GoTo /D (subsubsection.366) >> ->> endobj -540 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 637.31 281.354 646.221] -/A << /S /GoTo /D (subsubsection.367) >> ->> endobj -541 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 625.355 259.298 634.266] -/A << /S /GoTo /D (subsubsection.368) >> ->> endobj -542 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 611.463 262.84 622.311] -/A << /S /GoTo /D (subsubsection.369) >> ->> endobj -543 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 599.507 193.019 610.356] -/A << /S /GoTo /D (subsubsection.370) >> ->> endobj -544 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 587.552 205.223 598.29] -/A << /S /GoTo /D (subsubsection.371) >> ->> endobj -545 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 575.597 238.708 586.335] -/A << /S /GoTo /D (subsubsection.372) >> ->> endobj -546 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 563.642 192.825 574.49] -/A << /S /GoTo /D (subsection.378) >> ->> endobj -547 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 551.687 191.856 562.535] -/A << /S /GoTo /D (subsection.379) >> ->> endobj -548 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 539.732 287.858 550.58] -/A << /S /GoTo /D (subsection.380) >> ->> endobj -549 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 527.776 221.301 538.625] -/A << /S /GoTo /D (subsection.381) >> ->> endobj -550 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 515.821 340.798 526.669] -/A << /S /GoTo /D (subsubsection.382) >> ->> endobj -551 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 503.866 261.484 514.714] -/A << /S /GoTo /D (subsubsection.385) >> ->> endobj -552 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 493.848 237.048 502.648] -/A << /S /GoTo /D (subsubsection.386) >> ->> endobj -553 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 479.956 242.86 490.804] -/A << /S /GoTo /D (subsubsection.391) >> ->> endobj -554 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 469.938 178.628 478.849] -/A << /S /GoTo /D (subsubsection.405) >> ->> endobj -555 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 456.045 263.753 466.894] -/A << /S /GoTo /D (subsubsection.406) >> ->> endobj -556 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [71.004 436.065 228.053 444.976] -/A << /S /GoTo /D (section.413) >> ->> endobj -557 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 424.11 189.698 433.021] -/A << /S /GoTo /D (subsection.414) >> ->> endobj -558 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 410.217 208.322 421.065] -/A << /S /GoTo /D (subsection.471) >> ->> endobj -559 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 400.199 224.263 409.11] -/A << /S /GoTo /D (subsection.480) >> ->> endobj -560 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 386.307 172.235 397.155] -/A << /S /GoTo /D (subsection.481) >> ->> endobj -561 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 376.289 246.097 385.2] -/A << /S /GoTo /D (subsection.482) >> ->> endobj -562 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 362.397 192.936 373.134] -/A << /S /GoTo /D (subsection.483) >> ->> endobj -563 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 350.441 307.285 361.29] -/A << /S /GoTo /D (subsection.484) >> ->> endobj -564 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 338.486 195.177 349.224] -/A << /S /GoTo /D (subsection.518) >> ->> endobj -565 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 328.468 269.399 337.379] -/A << /S /GoTo /D (subsection.539) >> ->> endobj -566 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [71.004 306.55 272.705 315.461] -/A << /S /GoTo /D (section.540) >> ->> endobj -567 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 294.595 210.536 303.396] -/A << /S /GoTo /D (subsection.541) >> ->> endobj -568 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 282.64 224.318 291.551] -/A << /S /GoTo /D (subsubsection.542) >> ->> endobj -569 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 268.748 278.947 279.596] -/A << /S /GoTo /D (subsubsection.548) >> ->> endobj -570 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 256.793 222.519 267.641] -/A << /S /GoTo /D (subsection.549) >> ->> endobj -571 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 244.837 208.35 255.686] -/A << /S /GoTo /D (subsection.550) >> ->> endobj -572 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [71.004 224.857 144.86 233.768] -/A << /S /GoTo /D (section.551) >> ->> endobj -573 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 212.902 172.429 221.702] -/A << /S /GoTo /D (subsection.552) >> ->> endobj -574 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 200.946 172.429 209.747] -/A << /S /GoTo /D (subsection.553) >> ->> endobj -575 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 187.054 225.646 197.902] -/A << /S /GoTo /D (subsection.554) >> ->> endobj -576 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [71.004 165.136 168.957 175.984] -/A << /S /GoTo /D (section.555) >> ->> endobj -577 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 155.118 158.177 163.919] -/A << /S /GoTo /D (subsection.556) >> ->> endobj -578 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 143.163 174.2 151.963] -/A << /S /GoTo /D (subsubsection.557) >> ->> endobj -579 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 129.271 261.595 140.119] -/A << /S /GoTo /D (subsubsection.558) >> ->> endobj -580 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 119.253 252.601 128.053] -/A << /S /GoTo /D (subsection.567) >> ->> endobj -581 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 105.36 187.788 116.209] -/A << /S /GoTo /D (subsection.585) >> ->> endobj -586 0 obj << -/D [584 0 R /XYZ 71 721 null] ->> endobj -583 0 obj << -/Font << /F25 479 0 R /F8 481 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -603 0 obj << -/Length 630 -/Filter /FlateDecode ->> -stream -xMo@ -;/HPѯHP+fyh}w="DI* -V`>|p6"<LI7 IPe
aF'6!%hcFڥ]xsF~=eI#p̥"c:usBKRt]*ݑuG@^`R<>cW!u/ۦghUY*xn{1V5EkǑ$yxm2L,~G[[*.a̼UgqS>C -#AsNU]FV -endstream -endobj -602 0 obj << -/Type /Page -/Contents 603 0 R -/Resources 601 0 R -/MediaBox [0 0 612 792] -/Parent 485 0 R -/Annots [ 582 0 R 587 0 R 588 0 R 589 0 R 590 0 R 591 0 R 592 0 R 593 0 R 594 0 R 595 0 R 596 0 R 597 0 R 598 0 R 599 0 R 600 0 R ] ->> endobj -582 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [71.004 709.041 156.672 717.869] -/A << /S /GoTo /D (section.586) >> ->> endobj -587 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 697.086 181.008 705.997] -/A << /S /GoTo /D (subsection.587) >> ->> endobj -588 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 683.194 211.865 694.042] -/A << /S /GoTo /D (subsection.588) >> ->> endobj -589 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 673.176 148.325 681.976] -/A << /S /GoTo /D (subsection.589) >> ->> endobj -590 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 661.22 147.522 670.131] -/A << /S /GoTo /D (subsection.603) >> ->> endobj -591 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 649.265 231.001 658.176] -/A << /S /GoTo /D (subsection.606) >> ->> endobj -592 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 635.373 226.2 646.221] -/A << /S /GoTo /D (subsection.611) >> ->> endobj -593 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 623.418 232.233 634.266] -/A << /S /GoTo /D (subsection.614) >> ->> endobj -594 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [71.004 603.437 133.817 612.348] -/A << /S /GoTo /D (section.615) >> ->> endobj -595 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [71.004 579.582 136.861 590.43] -/A << /S /GoTo /D (appendix.616) >> ->> endobj -596 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 567.627 199.079 578.475] -/A << /S /GoTo /D (subsection.617) >> ->> endobj -597 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 555.672 298.623 566.52] -/A << /S /GoTo /D (subsection.618) >> ->> endobj -598 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [108.862 543.717 259.215 554.565] -/A << /S /GoTo /D (subsubsection.619) >> ->> endobj -599 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 531.761 321.177 542.61] -/A << /S /GoTo /D (subsection.620) >> ->> endobj -600 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [85.948 521.743 245.156 530.654] -/A << /S /GoTo /D (subsection.621) >> ->> endobj -604 0 obj << -/D [602 0 R /XYZ 71 721 null] ->> endobj -601 0 obj << -/Font << /F25 479 0 R /F8 481 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -608 0 obj << -/Length 2485 -/Filter /FlateDecode ->> -stream -xڭYmo6_2Hzw@M K4]ګVr$]߯$rD>gf*?2beeyVOj㿬R&sRٿy~^)[.W+feҜ9_Vt˳RMQ.c28ve}LH6|zw;neL錄ŷۑ7"O~*rۭ7\ T%?6u۾/SD1fYE!K+8uqpuuJ0 9zGq\P
j\2i90#bamUt]\R/"`dqP\&F -Δm^})GyE߬e1ˌY/d睫CY?wD/NӈXP -L
]/r3f'oiFVeZZ>$WgƿP%h+1Lə~7d{Xc^Ǜ'HY>/1`ƎW%J9xTͲ3H>⦳PC'@ar
أL2Dsn -E~J䤒QH%bBD|TXL?:3-d
yЊUˡ*^PRe䱐e*)rbSV،<",
3MvP6(<wi]Yʄsۋ]lX W➟/nBQ -Z.Ք,LNj cS~?cRd>Iނ%]5[,5걕S8L:{q~y*Qs25<UZey2, }
6tnݶw%8k@y2S;z&7L'^# ^q6>+b -x2,G4>88hkoJwK{t#p>F b")[|7GzqJO#&gH lu/7Pg (~
ss\-=lqلHg,n`\<jw㫥+<IC{ ZSwY;,Mrb)ٙ
o|Ah}[zz].iK{kE{u\U.#
ì-(Tw$p[{ -!`a? -ҵ@>gŐY|A)'C me5tqh\! -o+v.|sMײTv}S;5z^H`Qu
-c^p+&{1dO_L,|Z #2-ydpHJlˈZɬyrTAIr?҇|,jɢ(Ea%4Cawv2$*Tlg'艚M%&$O!aֆ4P$u{Isw>c=SUuQ-9hz?Êua=}f']x$±s;4iA~Rrϫࣾ: -endstream -endobj -607 0 obj << -/Type /Page -/Contents 608 0 R -/Resources 606 0 R -/MediaBox [0 0 612 792] -/Parent 485 0 R -/Annots [ 605 0 R ] ->> endobj -605 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [159.809 136.645 166.783 147.493] -/A << /S /GoTo /D (figure.37) >> ->> endobj -609 0 obj << -/D [607 0 R /XYZ 71 721 null] ->> endobj -610 0 obj << -/D [607 0 R /XYZ 72 714.022 null] ->> endobj -611 0 obj << -/D [607 0 R /XYZ 72 718.555 null] ->> endobj -615 0 obj << -/D [607 0 R /XYZ 72 709.091 null] ->> endobj -616 0 obj << -/D [607 0 R /XYZ 72 699.626 null] ->> endobj -617 0 obj << -/D [607 0 R /XYZ 72 690.162 null] ->> endobj -619 0 obj << -/D [607 0 R /XYZ 72 680.697 null] ->> endobj -620 0 obj << -/D [607 0 R /XYZ 72 671.233 null] ->> endobj -621 0 obj << -/D [607 0 R /XYZ 72 661.769 null] ->> endobj -622 0 obj << -/D [607 0 R /XYZ 72 652.304 null] ->> endobj -623 0 obj << -/D [607 0 R /XYZ 72 642.84 null] ->> endobj -624 0 obj << -/D [607 0 R /XYZ 72 633.375 null] ->> endobj -625 0 obj << -/D [607 0 R /XYZ 72 623.911 null] ->> endobj -626 0 obj << -/D [607 0 R /XYZ 72 614.446 null] ->> endobj -627 0 obj << -/D [607 0 R /XYZ 72 604.982 null] ->> endobj -628 0 obj << -/D [607 0 R /XYZ 72 595.517 null] ->> endobj -629 0 obj << -/D [607 0 R /XYZ 72 586.053 null] ->> endobj -630 0 obj << -/D [607 0 R /XYZ 72 576.588 null] ->> endobj -631 0 obj << -/D [607 0 R /XYZ 72 567.124 null] ->> endobj -632 0 obj << -/D [607 0 R /XYZ 72 557.659 null] ->> endobj -633 0 obj << -/D [607 0 R /XYZ 72 548.195 null] ->> endobj -634 0 obj << -/D [607 0 R /XYZ 72 538.73 null] ->> endobj -635 0 obj << -/D [607 0 R /XYZ 72 529.266 null] ->> endobj -637 0 obj << -/D [607 0 R /XYZ 72 519.801 null] ->> endobj -638 0 obj << -/D [607 0 R /XYZ 72 510.337 null] ->> endobj -639 0 obj << -/D [607 0 R /XYZ 72 500.872 null] ->> endobj -640 0 obj << -/D [607 0 R /XYZ 72 491.408 null] ->> endobj -641 0 obj << -/D [607 0 R /XYZ 72 481.943 null] ->> endobj -642 0 obj << -/D [607 0 R /XYZ 72 472.479 null] ->> endobj -643 0 obj << -/D [607 0 R /XYZ 72 463.014 null] ->> endobj -644 0 obj << -/D [607 0 R /XYZ 72 453.55 null] ->> endobj -645 0 obj << -/D [607 0 R /XYZ 72 444.085 null] ->> endobj -646 0 obj << -/D [607 0 R /XYZ 72 434.621 null] ->> endobj -647 0 obj << -/D [607 0 R /XYZ 72 425.156 null] ->> endobj -648 0 obj << -/D [607 0 R /XYZ 203.897 396.912 null] ->> endobj -5 0 obj << -/D [607 0 R /XYZ 72 363.094 null] ->> endobj -9 0 obj << -/D [607 0 R /XYZ 72 169.978 null] ->> endobj -606 0 obj << -/Font << /F6 612 0 R /F34 613 0 R /F33 614 0 R /F23 618 0 R /F20 636 0 R /F8 481 0 R /F28 483 0 R /F30 649 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -660 0 obj << -/Length 3501 -/Filter /FlateDecode ->> -stream -xڝZYs6~>^Ur*$Fb!'<,)~*싆h -kӥW#g%VKrILi'ȑE4&]p_2E] \vy@7K6qy$lŵn]?WpGlU7M7YM{sTvCGƅCHqpEOE=3Sk*oeͿ{e:ճE+Z*+=<m#iQh/knаxb<65D woFֲG©+ٺk]}66phm'ڀ1ܧ4+\wt0+V!MsIQKrl쥃 ayصNFZS
Dc-vB>A,^W2^Ad_@-#4M18N~<Do*v:TYfiE ZH -ژ,cmï/1<<&m^m>0[,lr^YEη_|qmji:nq<,ܼ!- d=:
ф12u'(=72a -3͂OkDgZa'<%\FSex">CY=9X¢ʩfpH~hJ{Qp?<6xB 3wEQD#~~@H;::Ͻ*T8ZWoO{V`ޡIq|znMBu=Yf6J%ʹ93Gw=}'CadZ;HsG~:¾1mC<fӮlA K -aPdVBbшz(D.f]wQt/WTz#=$cxj..o9aUhc$JqOSQFE -7SVm&yYx2ɰ1d%xſ_4y$:=(b}Cl-fҞ$!O+IB0*S<̦ ^_clgkf1鏍UAߪ
z/V:<*{ܹ 4(rI<g1Wdl^Faʑ}mq='@qrCL -*Ԁ 45Q5"@w*[:&Qo+gC^qFXfKxlԞ<6j^Ez|R5a</7a:Y5O@ |! -<Y0g$=\J/"d/"
S -endstream -endobj -659 0 obj << -/Type /Page -/Contents 660 0 R -/Resources 658 0 R -/MediaBox [0 0 612 792] -/Parent 485 0 R -/Annots [ 650 0 R 651 0 R 652 0 R 653 0 R 654 0 R 655 0 R 656 0 R 657 0 R ] ->> endobj -650 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [317.542 635.373 324.516 646.221] -/A << /S /GoTo /D (section.302) >> ->> endobj -651 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [315.176 532.659 322.15 544.614] -/A << /S /GoTo /D (section.361) >> ->> endobj -652 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [415.175 532.659 432.388 544.614] -/A << /S /GoTo /D (subsection.617) >> ->> endobj -653 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [393.29 403.122 408.013 415.077] -/A << /S /GoTo /D (subsection.358) >> ->> endobj -654 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [128.87 379.212 143.593 391.167] -/A << /S /GoTo /D (subsection.357) >> ->> endobj -655 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [303.737 318.032 318.46 329.987] -/A << /S /GoTo /D (subsection.303) >> ->> endobj -656 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [363.499 257.406 370.473 268.254] -/A << /S /GoTo /D (section.413) >> ->> endobj -657 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [205.578 98.401 220.3 110.356] -/A << /S /GoTo /D (subsection.100) >> ->> endobj -661 0 obj << -/D [659 0 R /XYZ 71 721 null] ->> endobj -13 0 obj << -/D [659 0 R /XYZ 72 621.783 null] ->> endobj -17 0 obj << -/D [659 0 R /XYZ 72 460.919 null] ->> endobj -662 0 obj << -/D [659 0 R /XYZ 72 363.82 null] ->> endobj -663 0 obj << -/D [659 0 R /XYZ 72 364.662 null] ->> endobj -664 0 obj << -/D [659 0 R /XYZ 72 290.132 null] ->> endobj -665 0 obj << -/D [659 0 R /XYZ 72 291.527 null] ->> endobj -21 0 obj << -/D [659 0 R /XYZ 72 221.172 null] ->> endobj -658 0 obj << -/Font << /F8 481 0 R /F30 649 0 R /F28 483 0 R /F34 613 0 R /F25 479 0 R /F14 480 0 R /F26 482 0 R /F36 666 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -672 0 obj << -/Length 2894 -/Filter /FlateDecode ->> -stream -xڽ]۸}>DbF)Qj/rzMm^%Gɿg[d`Ep7*J+Iɪ<{U(dRiz_7<QU&4UJKra,dn_j'@'Q!%[
>'yϔ{S]/ր'JH](87Rɠ1*!6QT -PIN?Meޤi ߗ( -dye&{t{$OaAFT3z$98zve
LT`jk6e],jLhY~$,
"x;'
Aja;.p -NT;ylP,ޞNQlP2k&65|k"5a! `Y_2vz q̇D/`vJ -Np0u۶y_H|?nX-"q\Rf婳j-1 kecO$x< - 7vrh
9GMk;Ol7ybC -o6xmUxox4TQ0Iw%DD`-{Pn|rg \9,îa"'+6x\wK}E7^Ӡ,!7M$N -gqGȩE{XqaYކϊ -1> -vF*bp0 -0Q}lJ%-N8U*:^
('crA*N!AK{ZL|/sRÌGnJNrcHި+?_*Ev샱ԝxfý@&D:MQ;5$gOYaNu1;=G -n]-})˵KZ#g*?b.rsyL8K29doWo8q)ǩOB.l0hμ?U`*=ݩYzc&〤F@yro:td7^ߗD%p\fS
-%z8 -fqyf3%È;UNAi. -z0MYpdrR[/̈́h`כچ{w.ZkgX>iM_XINހ,N aNu=c3T&Hʴ@9%%ajҋix!>)Ga+MdymSPw>QDi0'Jet?=aG,*x5;Oh{_{!R*(@VCBGdyPKWT\ O0ÊGguQ֍0+#;NwZDwG#FpЧ[gFu⩡.|;珧!x!OZ -m[𭯡<w3Iw\TE* -ʌϗshil;w|!5O6zؔddC&[5EҏH*ɷTe$p{0;uM(/l+js>#c "3?_*<@_\eZ$1~*G{? -endstream -endobj -671 0 obj << -/Type /Page -/Contents 672 0 R -/Resources 670 0 R -/MediaBox [0 0 612 792] -/Parent 685 0 R -/Annots [ 667 0 R 668 0 R 669 0 R ] ->> endobj -667 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [181.81 630.834 196.532 642.79] -/A << /S /GoTo /D (subsection.357) >> ->> endobj -668 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [326.301 630.834 341.024 642.79] -/A << /S /GoTo /D (subsection.358) >> ->> endobj -669 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [105.873 539.227 112.847 548.027] -/A << /S /GoTo /D (section.413) >> ->> endobj -673 0 obj << -/D [671 0 R /XYZ 71 721 null] ->> endobj -674 0 obj << -/D [671 0 R /XYZ 72 720 null] ->> endobj -675 0 obj << -/D [671 0 R /XYZ 72 713.325 null] ->> endobj -676 0 obj << -/D [671 0 R /XYZ 72 702.366 null] ->> endobj -25 0 obj << -/D [671 0 R /XYZ 72 596.47 null] ->> endobj -29 0 obj << -/D [671 0 R /XYZ 72 488.479 null] ->> endobj -678 0 obj << -/D [671 0 R /XYZ 72 442.139 null] ->> endobj -679 0 obj << -/D [671 0 R /XYZ 72 441.043 null] ->> endobj -33 0 obj << -/D [671 0 R /XYZ 72 403.491 null] ->> endobj -680 0 obj << -/D [671 0 R /XYZ 72 358.601 null] ->> endobj -681 0 obj << -/D [671 0 R /XYZ 72 357.505 null] ->> endobj -37 0 obj << -/D [671 0 R /XYZ 72 249.672 null] ->> endobj -682 0 obj << -/D [671 0 R /XYZ 72 205.387 null] ->> endobj -683 0 obj << -/D [671 0 R /XYZ 72 151.589 null] ->> endobj -684 0 obj << -/D [671 0 R /XYZ 72 152.43 null] ->> endobj -670 0 obj << -/Font << /F34 613 0 R /F30 649 0 R /F37 677 0 R /F8 481 0 R /F26 482 0 R /F28 483 0 R /F25 479 0 R /F36 666 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -689 0 obj << -/Length 3246 -/Filter /FlateDecode ->> -stream -xے۶}B>;ą4;4mf;CDJ䆤 -n|LpdƸUJJ% SIhn1vh+Ⓒ2Y}qeF2:S60tr2-\W][F~.OƑpX%5VB. - -:TZX_zˡ}*t:pYuٰ;#O@Lv'[dYN-,[7~d@fYvI +TdMHjM& D@i˰x;n"5Ѷ^=/xW F5[[c<@@;Et(= 9-;-@
B wiy[&^}|xVнwd)rz -oQBcwQ;K?{~j@as$eɜ.$Bf_=~i <j9v;*ʖLKVEߵGH#bӥBU'[Yر*%)=
E?HG}]N{h~l?tJ=;`xT/l.4xm0^.#$MMS*!fBIɛEq]X\9pH^Diw]w>"*oO}ܗ7"u%re;^>A%/u詸 -9 -yۗJ ,:KB(}h="FY@K(btT~))IFJ6c hS~??T$)0ehʉJ)۟ d5h7%O?-e1P'NoNnߊ$qSR`4B2fbN5"$j"=l*dM4Z8gX0t[t."ÒOZOQMGH-Rhg,̐^ -F(-Z{u*Ԛi]`ܮo]W6*I0 I=AV8Cx' \I=r -Da
&CjO[wGMZUPA^ؐSuFL$I߅͒~7J\ -<p -cbBP{_aT&,(o50,! 3s:M֩$. -hܣag<AS`O/h8r\2'lBC*12ȯ2`B6pЀ >J'Δwa`+GŎ'T|y{'tt8``БW\|v)-W~R^(Zbv7$_`%'N(MԨnH
RqmF2hS,'1,vV66.(:NyAȜK[ (yZMvo/ ]3]JQSn!Ygp5*t|o3,uZXmi>i!X4OgJ*Z=yZ?wiQCnG@J9~O.&Wd,zfvy;<.⍐qHBmRa>~N%%-\qBNP<|C! Lp<+<wN,=9ǻ0Kv/eP9ȣgs>`(&c%`(yō#]_F W31-YԸx{ϐ/
%bו:Hg -E4&uJpg.IfA'A24N<o ܡ(=Mi -D 0njdrDnG
i+ -hIpN1&KyY~酃/p"qBi-t -l]ř|$,;Yׄc.ez"'eMW*Kf4W:~L|{V3{ -\Żو>I灟xO*,==LnHm#㒡]ʈe~T- -Hj?q{35uOQÇP1U_3Gg)F^]90nJ"E$r8"AClWyxX_50~MOrP<*wC\s/KI -endstream -endobj -688 0 obj << -/Type /Page -/Contents 689 0 R -/Resources 687 0 R -/MediaBox [0 0 612 792] -/Parent 685 0 R -/Annots [ 686 0 R ] ->> endobj -686 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [450.964 455.915 465.686 467.871] -/A << /S /GoTo /D (subsection.105) >> ->> endobj -690 0 obj << -/D [688 0 R /XYZ 71 721 null] ->> endobj -691 0 obj << -/D [688 0 R /XYZ 72 720 null] ->> endobj -692 0 obj << -/D [688 0 R /XYZ 72 620.964 null] ->> endobj -694 0 obj << -/D [688 0 R /XYZ 72 565.654 null] ->> endobj -695 0 obj << -/D [688 0 R /XYZ 96.907 564.558 null] ->> endobj -696 0 obj << -/D [688 0 R /XYZ 72 537.497 null] ->> endobj -697 0 obj << -/D [688 0 R /XYZ 72 517.565 null] ->> endobj -698 0 obj << -/D [688 0 R /XYZ 96.907 518.406 null] ->> endobj -699 0 obj << -/D [688 0 R /XYZ 72 491.345 null] ->> endobj -700 0 obj << -/D [688 0 R /XYZ 72 473.227 null] ->> endobj -701 0 obj << -/D [688 0 R /XYZ 72 439.889 null] ->> endobj -702 0 obj << -/D [688 0 R /XYZ 96.907 440.731 null] ->> endobj -703 0 obj << -/D [688 0 R /XYZ 96.907 429.772 null] ->> endobj -704 0 obj << -/D [688 0 R /XYZ 72 402.711 null] ->> endobj -705 0 obj << -/D [688 0 R /XYZ 72 370.824 null] ->> endobj -706 0 obj << -/D [688 0 R /XYZ 96.907 371.665 null] ->> endobj -707 0 obj << -/D [688 0 R /XYZ 96.907 360.706 null] ->> endobj -708 0 obj << -/D [688 0 R /XYZ 72 333.645 null] ->> endobj -709 0 obj << -/D [688 0 R /XYZ 72 289.802 null] ->> endobj -710 0 obj << -/D [688 0 R /XYZ 96.907 290.644 null] ->> endobj -711 0 obj << -/D [688 0 R /XYZ 72 253.602 null] ->> endobj -712 0 obj << -/D [688 0 R /XYZ 72 213.262 null] ->> endobj -713 0 obj << -/D [688 0 R /XYZ 72 214.408 null] ->> endobj -714 0 obj << -/D [688 0 R /XYZ 72 203.449 null] ->> endobj -715 0 obj << -/D [688 0 R /XYZ 72 192.49 null] ->> endobj -716 0 obj << -/D [688 0 R /XYZ 72 181.531 null] ->> endobj -687 0 obj << -/Font << /F25 479 0 R /F8 481 0 R /F30 649 0 R /F36 666 0 R /F34 613 0 R /F38 693 0 R /F37 677 0 R /F26 482 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -723 0 obj << -/Length 3158 -/Filter /FlateDecode ->> -stream -xZݓ۶BP3' -LƇeˠ@s2 -L -=Ieu>֦DEf'=eMfn\h<خrEl3ٲ5ۊe@wգ6J_6ۇjC{O-65hT]1,XA۴[#8!
%ͷl%.U:.##Hb0ݮ"vړq& qq"Qi<"z~{Jx<3cbb3r\ϖ۫g+STIfivfTnq
:h_cpH/3'ױ8hvHKݎ'݄:Ua\;>*l -Htww98&4z1!)_Q0'K8,[.nel0\{pkϱ垰B2!/U]uSA"M%v<?<FYz5:ۑa4RVcwE'u##3,ї'M凯5 dj}.2
G;X@IoXMjDS<mӆmẗZlvH
6+}9ihߵHT5C^HqcCl )W!WQCθCj&%P2 zxeA濯 Ri}Vw~*&qb3gMMUĸ]/կNǤ -!PG#J\"X~_ho;ϦQ#r Li6M6zbSY~wXq AuF9 ;R+ծ48U #m!qw!bC<ׅq2|.@N3HY{$ -6 v2eS}+ x}5kcIB.N9?|vO*ǻYiGHRlԄ2I89rڄ6Ĭ1x]GbnJظ׃̿~8oG -
h -Ů3ڝ۰P[vB`x >GBFOPV" -ܨ -il%8.$Q'jR3tK/s -b:P/"iܐ`U55 -O_M^CQus#lv8DϞq\sM?{: -n)pQzH
TkϟaRYqVE)@ꈳ|¥m!nc3oZU,>U,?*'!-=w?[N¦jW6NQo/r27Ns%7^mpV}X4q.|8L
4Nߥ>.!bn0m'rPqO_Ev)gELasӏ\IAQr&{Ka"QI>}/ks!}L<
!EȵTB^zB*rl1@gpSBδ"a5Py=at1KƜh\fqqܾxd(J`⮭Ppt @R0J4!gPe"_b -&j0<u2kE<6u\Na.z?.$1*ĉqQM2BڲCHoh,G"Dn)3zA]V+YݜPS"˯_ᝬuqw)r'8Y\ua,`U@~XD|VgHCRYn*yGg1SMG -endstream -endobj -722 0 obj << -/Type /Page -/Contents 723 0 R -/Resources 721 0 R -/MediaBox [0 0 612 792] -/Parent 685 0 R -/Annots [ 717 0 R 718 0 R 719 0 R 720 0 R ] ->> endobj -717 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [519.632 588.549 534.354 600.504] -/A << /S /GoTo /D (subsection.291) >> ->> endobj -718 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [358.011 401.385 364.985 410.296] -/A << /S /GoTo /D (section.413) >> ->> endobj -719 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [244.34 255.179 251.314 266.027] -/A << /S /GoTo /D (section.413) >> ->> endobj -720 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [125.854 146.222 132.828 158.177] -/A << /S /GoTo /D (section.413) >> ->> endobj -724 0 obj << -/D [722 0 R /XYZ 71 721 null] ->> endobj -41 0 obj << -/D [722 0 R /XYZ 72 657.748 null] ->> endobj -725 0 obj << -/D [722 0 R /XYZ 72 560.228 null] ->> endobj -726 0 obj << -/D [722 0 R /XYZ 72 561.069 null] ->> endobj -727 0 obj << -/D [722 0 R /XYZ 72 550.11 null] ->> endobj -728 0 obj << -/D [722 0 R /XYZ 72 539.151 null] ->> endobj -729 0 obj << -/D [722 0 R /XYZ 72 528.192 null] ->> endobj -730 0 obj << -/D [722 0 R /XYZ 72 517.233 null] ->> endobj -731 0 obj << -/D [722 0 R /XYZ 72 506.275 null] ->> endobj -45 0 obj << -/D [722 0 R /XYZ 72 362.6 null] ->> endobj -732 0 obj << -/D [722 0 R /XYZ 72 312.347 null] ->> endobj -733 0 obj << -/D [722 0 R /XYZ 72 313.189 null] ->> endobj -734 0 obj << -/D [722 0 R /XYZ 72 302.23 null] ->> endobj -49 0 obj << -/D [722 0 R /XYZ 72 242.241 null] ->> endobj -735 0 obj << -/D [722 0 R /XYZ 72 203.944 null] ->> endobj -736 0 obj << -/D [722 0 R /XYZ 72 204.785 null] ->> endobj -737 0 obj << -/D [722 0 R /XYZ 72 193.826 null] ->> endobj -721 0 obj << -/Font << /F8 481 0 R /F30 649 0 R /F28 483 0 R /F34 613 0 R /F38 693 0 R /F36 666 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -741 0 obj << -/Length 3240 -/Filter /FlateDecode ->> -stream -xڭZK6Whs Ue! -~fgQwzr2uI
sr0{`J3 -/vP2:Υ!3 -{qK3xo%؍Tf~;߮kM͠EwHLWfL<UjⰦY0)63puCp}rqT3d]ҤEs^w? -6d]S^Wpl⬛_/Nus! -.M"nn4B'_wV;jW6#(Lwj
SKӬ%4U}dfeL=S`Dd= ȁZ$xӱ-)R@:)4`!SGdF` 䖔b諹$.饗n&JUf{kdyܩ/N6+o#O!9s@h>uv/ -@.n :|.+DNHdh>=d/ -YX(5ash"Q!Mq8>qР{cTecĐQ&RLs=8{@($?\,"vOj0weTOL9%6q}&愽cۦSMx;uCa;§QB0H3x[;&]>Yfqk/
Qc4h8*j+Mx'QS#ٗH)4%#<)Ɔ8JtB=Lsxa%#%S7e3png+KJ9)Sq%R1to@PC7n8}۰gPӦ~BLb[ -!.]Neaɹ7-e k*@< -DA}_7]тEpRoOǠAuQmr#}@ -[S_ӄcB{qfŵ9ɄY)1l1qGR9O!} -'u9,~7Qyi'|5~+z|Zɺ= -endstream -endobj -740 0 obj << -/Type /Page -/Contents 741 0 R -/Resources 739 0 R -/MediaBox [0 0 612 792] -/Parent 685 0 R -/Annots [ 738 0 R ] ->> endobj -738 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [457.253 648.794 479.724 660.749] -/A << /S /GoTo /D (subsubsection.44) >> ->> endobj -742 0 obj << -/D [740 0 R /XYZ 71 721 null] ->> endobj -53 0 obj << -/D [740 0 R /XYZ 72 682.681 null] ->> endobj -743 0 obj << -/D [740 0 R /XYZ 72 621.562 null] ->> endobj -744 0 obj << -/D [740 0 R /XYZ 72 622.403 null] ->> endobj -745 0 obj << -/D [740 0 R /XYZ 72 611.444 null] ->> endobj -746 0 obj << -/D [740 0 R /XYZ 72 600.485 null] ->> endobj -57 0 obj << -/D [740 0 R /XYZ 72 564.516 null] ->> endobj -61 0 obj << -/D [740 0 R /XYZ 72 486.236 null] ->> endobj -747 0 obj << -/D [740 0 R /XYZ 72 391.245 null] ->> endobj -748 0 obj << -/D [740 0 R /XYZ 72 390.149 null] ->> endobj -749 0 obj << -/D [740 0 R /XYZ 72 379.19 null] ->> endobj -750 0 obj << -/D [740 0 R /XYZ 72 269.577 null] ->> endobj -751 0 obj << -/D [740 0 R /XYZ 72 270.419 null] ->> endobj -752 0 obj << -/D [740 0 R /XYZ 72 259.46 null] ->> endobj -753 0 obj << -/D [740 0 R /XYZ 72 248.501 null] ->> endobj -65 0 obj << -/D [740 0 R /XYZ 72 180.053 null] ->> endobj -739 0 obj << -/Font << /F8 481 0 R /F28 483 0 R /F30 649 0 R /F34 613 0 R /F36 666 0 R /F25 479 0 R /F38 693 0 R /F26 482 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -757 0 obj << -/Length 2265 -/Filter /FlateDecode ->> -stream -xYݏܸ
߿bxb}Z^ -ˠ/<xw;F=f"2#IQ$j{],7¬+kX*)KeVwz#LUR}K3데Iu]qIAy(j;,٭?nLW1 -f\RRS?Ux(4`?7Od%5yQ5ؑ.mD,Y6CW܀ AQs$#HeXɈ@XЀZ$(% -v̬D*pwZd(
iu`QP$"7]meLUkɡEsw,M{ůNaA}kiGz?)k>0UC730P.ǮҦMK3m;,TP]Xubb^__]1L]~߷[ӴmT3sj;
G2X<pίHVU)|U7FUǡQޗ7]('fl>]a+HLfV7aLv+e,Wzh`SY3PcLf>Ռጄ,+/43zdzv7n#r7FM|"9'e`;Kv4*PВq#hՔ#BaSf&9h㻘YT-h17ߎOm.Kc~(#ό;V6"S2te/];D:,OW"yޝy -˗({ڄw.{y%^&E|I1,YҰb?1xB*Wsb,1.q,39SoS7q -8ۥX }]9;9v5hɅ -x*) B&<61\$B9Z!\< ->*?SaX }FggjVTitPׇ<Ġ"<3SA`{߹KydNʆ:"P;WB^k;xQ{=!Z`d9| -.9?lHPausw4 -ii g$=29$61IRPf$d;@ϘVkε6,+`H7wueUsyԴ=^7sg<ch0mdyΆHry<xe.ҏnc1O8dget들CgZ<q[[DX<<3]t@f,
,-CSjFΑSon9ꋀtE'wA_ӼBܗԋ,6K, -dٯG1I8<A}KXl&J9)Ny'Gb_":[~ Z)RWJJkp/U4 - -R/d9tl7%{<J yn,^p3F -npBX -endstream -endobj -756 0 obj << -/Type /Page -/Contents 757 0 R -/Resources 755 0 R -/MediaBox [0 0 612 792] -/Parent 685 0 R -/Annots [ 754 0 R ] ->> endobj -754 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [414.798 636.362 429.521 648.317] -/A << /S /GoTo /D (subsection.284) >> ->> endobj -758 0 obj << -/D [756 0 R /XYZ 71 721 null] ->> endobj -69 0 obj << -/D [756 0 R /XYZ 72 694.159 null] ->> endobj -759 0 obj << -/D [756 0 R /XYZ 72 631.381 null] ->> endobj -760 0 obj << -/D [756 0 R /XYZ 72 632.776 null] ->> endobj -761 0 obj << -/D [756 0 R /XYZ 72 621.817 null] ->> endobj -762 0 obj << -/D [756 0 R /XYZ 72 610.858 null] ->> endobj -763 0 obj << -/D [756 0 R /XYZ 72 599.899 null] ->> endobj -764 0 obj << -/D [756 0 R /XYZ 72 588.94 null] ->> endobj -765 0 obj << -/D [756 0 R /XYZ 72 577.981 null] ->> endobj -766 0 obj << -/D [756 0 R /XYZ 72 567.022 null] ->> endobj -767 0 obj << -/D [756 0 R /XYZ 72 556.063 null] ->> endobj -768 0 obj << -/D [756 0 R /XYZ 72 545.105 null] ->> endobj -769 0 obj << -/D [756 0 R /XYZ 72 534.146 null] ->> endobj -770 0 obj << -/D [756 0 R /XYZ 72 523.187 null] ->> endobj -771 0 obj << -/D [756 0 R /XYZ 72 512.228 null] ->> endobj -772 0 obj << -/D [756 0 R /XYZ 72 501.269 null] ->> endobj -773 0 obj << -/D [756 0 R /XYZ 72 490.31 null] ->> endobj -774 0 obj << -/D [756 0 R /XYZ 72 479.351 null] ->> endobj -775 0 obj << -/D [756 0 R /XYZ 72 468.392 null] ->> endobj -776 0 obj << -/D [756 0 R /XYZ 72 457.433 null] ->> endobj -777 0 obj << -/D [756 0 R /XYZ 72 357.563 null] ->> endobj -778 0 obj << -/D [756 0 R /XYZ 72 358.405 null] ->> endobj -779 0 obj << -/D [756 0 R /XYZ 72 347.446 null] ->> endobj -780 0 obj << -/D [756 0 R /XYZ 72 336.487 null] ->> endobj -781 0 obj << -/D [756 0 R /XYZ 72 325.528 null] ->> endobj -782 0 obj << -/D [756 0 R /XYZ 72 314.569 null] ->> endobj -783 0 obj << -/D [756 0 R /XYZ 72 303.61 null] ->> endobj -784 0 obj << -/D [756 0 R /XYZ 72 292.651 null] ->> endobj -785 0 obj << -/D [756 0 R /XYZ 72 281.692 null] ->> endobj -786 0 obj << -/D [756 0 R /XYZ 72 270.733 null] ->> endobj -787 0 obj << -/D [756 0 R /XYZ 72 259.775 null] ->> endobj -788 0 obj << -/D [756 0 R /XYZ 72 248.816 null] ->> endobj -789 0 obj << -/D [756 0 R /XYZ 72 237.857 null] ->> endobj -790 0 obj << -/D [756 0 R /XYZ 72 226.898 null] ->> endobj -73 0 obj << -/D [756 0 R /XYZ 72 189.346 null] ->> endobj -791 0 obj << -/D [756 0 R /XYZ 72 118.553 null] ->> endobj -792 0 obj << -/D [756 0 R /XYZ 72 117.457 null] ->> endobj -755 0 obj << -/Font << /F8 481 0 R /F30 649 0 R /F28 483 0 R /F34 613 0 R /F38 693 0 R /F36 666 0 R /F37 677 0 R /F26 482 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -796 0 obj << -/Length 2647 -/Filter /FlateDecode ->> -stream -xY[o~P,@քs!9v$A͢IF^y%JfCZ^츿ߙޤQbcQ59s.߹ՋZhƱZlX$<dL7 m:[U̚f' -'bD(=RA\OYO6EqoS&V ga-V$Rݖ|zʕRAqh=<i"aה3ţSft'iaN(/>R ' p}Ul|`IܵQbge/W<>)W\,NY"Mpr'G)q0R&89P.HڥqW^&"(#3X'I>:C/7؎T=oyK9EEQ(NG4 Qq0tPh`Xi!FAx.i -6ܭ<U -CT/̮Bw*^DB((Ri#)(=e.l]IĜ`UzG|ۻ䬍KzBZ쑓" :a^%J []n tHe>I-c6L[~!YܫͦhjPn݂Xv2vcg,ENgk5Ј\K?_<^SEG|Ķёt5kělo(M`~0VB&vhb9l_4MQ J
ڽ-7>b2HщmJ a96:PҹߍAY];%Ukg>ƋdnXm<gpܹ]iN|+dྨʬIdm>g]bԒ;W]cҀ&XGG\W6mppHK1D4"yzY=X"p+)(MV6 -{2po%`[< Fd -@q~ OhCӠ~I-r۵\).|l6(5>iDQ9<i߬-3eqk[.FR>@t!!>(b=z̚(рPe1C>wj:"`f%1q"FS[1jsLqdBVT Wh8T&蕒T]MlTA늢n|6}h-bL|')~,2! %z|spkwqV-ڶ}"PP~s]l#<XCe8]z=;~2'Gvu.R@O&;l@d$ʘPx"Ż-uЕt_H]6$RۺpvE)<Mkj+`]9fuucwR5Ќ}ӑvL?{ޣE`=S[>4VljIM\ -sH^)Jm7wyBmmnaW߹]Y;k;0X^bݕ0Ώ
'TfE$uR19WC}Ҳ*k[="/P*yUL(gӈ[P &YV$Mv@B -5T/tL?BlK~;Va^&TO(/4Rdխq8P35sf2-&}S1m\䡙LGK5s][^[^hS#οFArB9Tٶ -i|}LHo1*x|Xc]gv,p|QHK#c靕4kEܾ<cPڄNr7NN2ʼnw6N/`\$ѕڐtsiuV˘ d.M({kǑ\[#JSj=s[y/*BQHQ
&]p+o
p2Q2ӹ'PT$k\C&LDp -L'ScxAiu5nXv24>MONzDLmE1U_˃}sk{ۖ՟Q -v=ВysoOy}dAɣ -356lwoWyy+nRj1W*&S9e8TnTXqh%VZ6Ee/}S9ݍbRDGkuA:Tw`d6}ymJ۬o8bʹt.7, @gZE}[j -endstream -endobj -795 0 obj << -/Type /Page -/Contents 796 0 R -/Resources 794 0 R -/MediaBox [0 0 612 792] -/Parent 685 0 R -/Annots [ 793 0 R ] ->> endobj -793 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [484.931 326.881 499.654 338.836] -/A << /S /GoTo /D (subsection.303) >> ->> endobj -797 0 obj << -/D [795 0 R /XYZ 71 721 null] ->> endobj -798 0 obj << -/D [795 0 R /XYZ 72 720.996 null] ->> endobj -799 0 obj << -/D [795 0 R /XYZ 72 710.037 null] ->> endobj -800 0 obj << -/D [795 0 R /XYZ 72 699.078 null] ->> endobj -801 0 obj << -/D [795 0 R /XYZ 72 688.12 null] ->> endobj -802 0 obj << -/D [795 0 R /XYZ 72 677.161 null] ->> endobj -803 0 obj << -/D [795 0 R /XYZ 72 666.202 null] ->> endobj -804 0 obj << -/D [795 0 R /XYZ 72 655.243 null] ->> endobj -805 0 obj << -/D [795 0 R /XYZ 72 644.284 null] ->> endobj -806 0 obj << -/D [795 0 R /XYZ 72 633.325 null] ->> endobj -807 0 obj << -/D [795 0 R /XYZ 72 622.366 null] ->> endobj -808 0 obj << -/D [795 0 R /XYZ 72 611.407 null] ->> endobj -809 0 obj << -/D [795 0 R /XYZ 72 600.448 null] ->> endobj -810 0 obj << -/D [795 0 R /XYZ 72 589.489 null] ->> endobj -811 0 obj << -/D [795 0 R /XYZ 72 578.531 null] ->> endobj -812 0 obj << -/D [795 0 R /XYZ 72 567.572 null] ->> endobj -813 0 obj << -/D [795 0 R /XYZ 72 556.613 null] ->> endobj -814 0 obj << -/D [795 0 R /XYZ 72 545.654 null] ->> endobj -77 0 obj << -/D [795 0 R /XYZ 72 510.285 null] ->> endobj -815 0 obj << -/D [795 0 R /XYZ 72 474.946 null] ->> endobj -816 0 obj << -/D [795 0 R /XYZ 72 475.787 null] ->> endobj -81 0 obj << -/D [795 0 R /XYZ 72 417.958 null] ->> endobj -817 0 obj << -/D [795 0 R /XYZ 72 300.069 null] ->> endobj -818 0 obj << -/D [795 0 R /XYZ 72 300.91 null] ->> endobj -819 0 obj << -/D [795 0 R /XYZ 72 289.951 null] ->> endobj -820 0 obj << -/D [795 0 R /XYZ 72 278.992 null] ->> endobj -821 0 obj << -/D [795 0 R /XYZ 72 268.033 null] ->> endobj -822 0 obj << -/D [795 0 R /XYZ 72 257.074 null] ->> endobj -823 0 obj << -/D [795 0 R /XYZ 72 246.115 null] ->> endobj -824 0 obj << -/D [795 0 R /XYZ 72 235.156 null] ->> endobj -825 0 obj << -/D [795 0 R /XYZ 72 224.198 null] ->> endobj -826 0 obj << -/D [795 0 R /XYZ 72 213.239 null] ->> endobj -827 0 obj << -/D [795 0 R /XYZ 72 202.28 null] ->> endobj -828 0 obj << -/D [795 0 R /XYZ 72 191.321 null] ->> endobj -829 0 obj << -/D [795 0 R /XYZ 72 180.362 null] ->> endobj -794 0 obj << -/Font << /F34 613 0 R /F30 649 0 R /F38 693 0 R /F36 666 0 R /F37 677 0 R /F28 483 0 R /F8 481 0 R /F26 482 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -832 0 obj << -/Length 2503 -/Filter /FlateDecode ->> -stream -xY[6~_-P@bxtS YLMKْgDg&xA/Xd<<<\.br\l?ċƿ]ĄhxūbI.rbFx,iӶ,W*.m凫oa]<Z'91vD`aU~n+kRV&0x++J%JKL4nJU}Y_yَvLGOp|H)zLD8UEIiu}w~e؍shjSi&tR<?ҳ -<GGqxS^=Dl 3/WǨPC(*za Xg s˫)joreGw9)b:M>8U
-v@i7NYǒg \qы<(Hc*t -68v&!H'CPԹ9V/gD'{
:GĪ˲9 B0a=uUHprm2#rBs<J- -_ф>ph`v*˪VEF>yn -=Yt0K
AK9A+2I<ydB>?#__I(8UHA -E8hөM) -9ZI!: -d~zs"e'P.!(i0hT#GdJ8uڦp52:x1L*i̇ԯ -5?;OIӣx依xfS086RĤ -d~7%$Uݦes1XiuU!}`ٻVr/qBt}h(X0[[kd³ZKkjg 0'}`7+֘HY1Ţ,Ĵ? 1vst~YWR<49a$Q6OCvM?0sdm^6`QTXsNm$#_V{'A[VvۼU1ڍB
46Ne$1eT o?l57t(Ig@9%
o|v(3a/Oc'A_t -endstream -endobj -831 0 obj << -/Type /Page -/Contents 832 0 R -/Resources 830 0 R -/MediaBox [0 0 612 792] -/Parent 868 0 R ->> endobj -833 0 obj << -/D [831 0 R /XYZ 71 721 null] ->> endobj -834 0 obj << -/D [831 0 R /XYZ 72 720 null] ->> endobj -835 0 obj << -/D [831 0 R /XYZ 72 713.325 null] ->> endobj -836 0 obj << -/D [831 0 R /XYZ 72 702.366 null] ->> endobj -837 0 obj << -/D [831 0 R /XYZ 72 691.407 null] ->> endobj -838 0 obj << -/D [831 0 R /XYZ 72 680.448 null] ->> endobj -839 0 obj << -/D [831 0 R /XYZ 72 669.489 null] ->> endobj -840 0 obj << -/D [831 0 R /XYZ 72 658.531 null] ->> endobj -841 0 obj << -/D [831 0 R /XYZ 72 647.572 null] ->> endobj -842 0 obj << -/D [831 0 R /XYZ 72 636.613 null] ->> endobj -843 0 obj << -/D [831 0 R /XYZ 72 560.653 null] ->> endobj -844 0 obj << -/D [831 0 R /XYZ 72 561.494 null] ->> endobj -845 0 obj << -/D [831 0 R /XYZ 72 550.536 null] ->> endobj -846 0 obj << -/D [831 0 R /XYZ 72 539.577 null] ->> endobj -847 0 obj << -/D [831 0 R /XYZ 72 528.618 null] ->> endobj -848 0 obj << -/D [831 0 R /XYZ 72 517.659 null] ->> endobj -849 0 obj << -/D [831 0 R /XYZ 72 506.7 null] ->> endobj -850 0 obj << -/D [831 0 R /XYZ 72 495.741 null] ->> endobj -851 0 obj << -/D [831 0 R /XYZ 72 484.782 null] ->> endobj -852 0 obj << -/D [831 0 R /XYZ 72 473.823 null] ->> endobj -853 0 obj << -/D [831 0 R /XYZ 72 462.864 null] ->> endobj -854 0 obj << -/D [831 0 R /XYZ 72 451.905 null] ->> endobj -855 0 obj << -/D [831 0 R /XYZ 72 440.946 null] ->> endobj -856 0 obj << -/D [831 0 R /XYZ 72 429.988 null] ->> endobj -857 0 obj << -/D [831 0 R /XYZ 72 419.029 null] ->> endobj -858 0 obj << -/D [831 0 R /XYZ 72 408.07 null] ->> endobj -859 0 obj << -/D [831 0 R /XYZ 72 397.111 null] ->> endobj -860 0 obj << -/D [831 0 R /XYZ 72 386.152 null] ->> endobj -861 0 obj << -/D [831 0 R /XYZ 72 375.193 null] ->> endobj -862 0 obj << -/D [831 0 R /XYZ 72 364.234 null] ->> endobj -863 0 obj << -/D [831 0 R /XYZ 72 353.275 null] ->> endobj -864 0 obj << -/D [831 0 R /XYZ 72 313.181 null] ->> endobj -865 0 obj << -/D [831 0 R /XYZ 72 315.118 null] ->> endobj -866 0 obj << -/D [831 0 R /XYZ 72 304.159 null] ->> endobj -867 0 obj << -/D [831 0 R /XYZ 72 293.201 null] ->> endobj -85 0 obj << -/D [831 0 R /XYZ 72 236.669 null] ->> endobj -830 0 obj << -/Font << /F34 613 0 R /F30 649 0 R /F38 693 0 R /F8 481 0 R /F36 666 0 R /F28 483 0 R /F26 482 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -871 0 obj << -/Length 968 -/Filter /FlateDecode ->> -stream -xXnF}W.wEr(ڨ
PH[d(ΒB1%]i @ٹ3? -J jpv.HgUby~h[.U0`U (
Vl2ba<Y.wNi yՊ_>jٖTZ]4m"+ -EE
hAzm@="SkEUȣP|g,T}<UwÆG@Yg{i^xk V~mE'#(]XV}\<q=oo< -endstream -endobj -870 0 obj << -/Type /Page -/Contents 871 0 R -/Resources 869 0 R -/MediaBox [0 0 612 792] -/Parent 868 0 R ->> endobj -872 0 obj << -/D [870 0 R /XYZ 71 721 null] ->> endobj -873 0 obj << -/D [870 0 R /XYZ 72 720 null] ->> endobj -874 0 obj << -/D [870 0 R /XYZ 72 713.325 null] ->> endobj -875 0 obj << -/D [870 0 R /XYZ 72 702.366 null] ->> endobj -876 0 obj << -/D [870 0 R /XYZ 72 691.407 null] ->> endobj -877 0 obj << -/D [870 0 R /XYZ 72 680.448 null] ->> endobj -878 0 obj << -/D [870 0 R /XYZ 72 669.489 null] ->> endobj -879 0 obj << -/D [870 0 R /XYZ 72 658.531 null] ->> endobj -880 0 obj << -/D [870 0 R /XYZ 72 647.572 null] ->> endobj -881 0 obj << -/D [870 0 R /XYZ 72 636.613 null] ->> endobj -882 0 obj << -/D [870 0 R /XYZ 72 625.654 null] ->> endobj -883 0 obj << -/D [870 0 R /XYZ 72 614.695 null] ->> endobj -884 0 obj << -/D [870 0 R /XYZ 72 603.736 null] ->> endobj -885 0 obj << -/D [870 0 R /XYZ 72 592.777 null] ->> endobj -886 0 obj << -/D [870 0 R /XYZ 72 581.818 null] ->> endobj -887 0 obj << -/D [870 0 R /XYZ 72 570.859 null] ->> endobj -888 0 obj << -/D [870 0 R /XYZ 72 559.9 null] ->> endobj -889 0 obj << -/D [870 0 R /XYZ 72 548.941 null] ->> endobj -890 0 obj << -/D [870 0 R /XYZ 72 537.983 null] ->> endobj -891 0 obj << -/D [870 0 R /XYZ 72 527.024 null] ->> endobj -892 0 obj << -/D [870 0 R /XYZ 72 516.065 null] ->> endobj -893 0 obj << -/D [870 0 R /XYZ 72 505.106 null] ->> endobj -894 0 obj << -/D [870 0 R /XYZ 72 494.147 null] ->> endobj -895 0 obj << -/D [870 0 R /XYZ 72 483.188 null] ->> endobj -896 0 obj << -/D [870 0 R /XYZ 72 472.229 null] ->> endobj -897 0 obj << -/D [870 0 R /XYZ 72 461.27 null] ->> endobj -898 0 obj << -/D [870 0 R /XYZ 72 450.311 null] ->> endobj -899 0 obj << -/D [870 0 R /XYZ 72 410.217 null] ->> endobj -900 0 obj << -/D [870 0 R /XYZ 72 411.059 null] ->> endobj -901 0 obj << -/D [870 0 R /XYZ 72 400.1 null] ->> endobj -902 0 obj << -/D [870 0 R /XYZ 72 389.141 null] ->> endobj -903 0 obj << -/D [870 0 R /XYZ 72 378.182 null] ->> endobj -904 0 obj << -/D [870 0 R /XYZ 72 367.223 null] ->> endobj -905 0 obj << -/D [870 0 R /XYZ 72 356.264 null] ->> endobj -906 0 obj << -/D [870 0 R /XYZ 72 345.305 null] ->> endobj -907 0 obj << -/D [870 0 R /XYZ 72 334.346 null] ->> endobj -908 0 obj << -/D [870 0 R /XYZ 72 323.387 null] ->> endobj -909 0 obj << -/D [870 0 R /XYZ 72 312.428 null] ->> endobj -910 0 obj << -/D [870 0 R /XYZ 72 301.47 null] ->> endobj -911 0 obj << -/D [870 0 R /XYZ 72 290.511 null] ->> endobj -912 0 obj << -/D [870 0 R /XYZ 72 279.552 null] ->> endobj -913 0 obj << -/D [870 0 R /XYZ 72 268.593 null] ->> endobj -914 0 obj << -/D [870 0 R /XYZ 72 257.634 null] ->> endobj -915 0 obj << -/D [870 0 R /XYZ 72 246.675 null] ->> endobj -916 0 obj << -/D [870 0 R /XYZ 72 235.716 null] ->> endobj -917 0 obj << -/D [870 0 R /XYZ 72 224.757 null] ->> endobj -918 0 obj << -/D [870 0 R /XYZ 72 213.798 null] ->> endobj -919 0 obj << -/D [870 0 R /XYZ 72 202.839 null] ->> endobj -920 0 obj << -/D [870 0 R /XYZ 72 191.88 null] ->> endobj -921 0 obj << -/D [870 0 R /XYZ 72 180.922 null] ->> endobj -922 0 obj << -/D [870 0 R /XYZ 72 169.963 null] ->> endobj -923 0 obj << -/D [870 0 R /XYZ 72 159.004 null] ->> endobj -924 0 obj << -/D [870 0 R /XYZ 72 148.045 null] ->> endobj -925 0 obj << -/D [870 0 R /XYZ 72 137.086 null] ->> endobj -926 0 obj << -/D [870 0 R /XYZ 72 126.127 null] ->> endobj -927 0 obj << -/D [870 0 R /XYZ 72 115.168 null] ->> endobj -869 0 obj << -/Font << /F34 613 0 R /F30 649 0 R /F38 693 0 R /F8 481 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -934 0 obj << -/Length 3358 -/Filter /FlateDecode ->> -stream -xڕnF24bX:A$ligrHrU E:$e|YzRoM+2aW&,vJ任(_ヌldoE0SfnFS\Bř_ƿ%):,\'ջ7 -[J"⢔{cҨ?^zh89pSqܳび -zUsXN2ɜH 'O;] ]8 ߇;#} -4"͟$=b% G`-[W{c@2oZ"
<SicAmmnE׆E>.5#*MTa ,qJr7:$%;mXstʗ]i+hs@ r#w
UspB+Jr$y -wpd#aـ-R5
NG" 4?];T*M/&"`TMv[mceސ2օ)Mh*B./? -@L7
@)Ɋ.0]4dQ;_"`$k ƜHB)QI8xLyKVk)R)K.>s(c380L4i
(WPIR1yP. %ݮ5^B2h*z C(AKJec)@[z9&cUW/iNPahECȫPC㘇%䩰$aĪqb'sS\^ˠ!xyw!aVʎC]Vqp\XPdx\Ш]R~E"&QklHJ<>5mYqf=sY}6Ke"mSP$CpaqmZjq0%sI0BLR<!^ -3")<`q1V -|@:gdM"G -w! CʟUզ$JXsGF{QaKAC&./`8kC$K -C5Vbj|eń#vwBz㑳x .]ÓCU(8jI#˭˿ۭcUxdu8b+@W lH-Dz6ygɆ-hz\^*`bBPBωOkjWX_%n<BvuLr! k)G_Su^E_Ffp~nV<\}0x!K `)BDV#l=WrkEq2ޫs"ReɽJCHzq0%yX>f9&"WX%`hN~YvHOV?_iYRX]vÂwgO~@1#1Ppv,HIYfY*f?
$G\t_߁ -endstream -endobj -933 0 obj << -/Type /Page -/Contents 934 0 R -/Resources 932 0 R -/MediaBox [0 0 612 792] -/Parent 868 0 R -/Annots [ 928 0 R 929 0 R 930 0 R 931 0 R ] ->> endobj -928 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [109.747 591.681 129.451 603.636] -/A << /S /GoTo /D (subsection.171) >> ->> endobj -929 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [422.821 191.757 445.292 203.713] -/A << /S /GoTo /D (subsubsection.44) >> ->> endobj -930 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [109.725 179.802 129.429 191.757] -/A << /S /GoTo /D (subsection.171) >> ->> endobj -931 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [511.883 179.802 534.354 191.757] -/A << /S /GoTo /D (subsubsection.305) >> ->> endobj -935 0 obj << -/D [933 0 R /XYZ 71 721 null] ->> endobj -936 0 obj << -/D [933 0 R /XYZ 72 720.996 null] ->> endobj -937 0 obj << -/D [933 0 R /XYZ 72 710.037 null] ->> endobj -938 0 obj << -/D [933 0 R /XYZ 72 699.078 null] ->> endobj -89 0 obj << -/D [933 0 R /XYZ 72 577.664 null] ->> endobj -93 0 obj << -/D [933 0 R /XYZ 72 225.644 null] ->> endobj -932 0 obj << -/Font << /F30 649 0 R /F38 693 0 R /F8 481 0 R /F26 482 0 R /F28 483 0 R /F14 480 0 R /F34 613 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -945 0 obj << -/Length 2519 -/Filter /FlateDecode ->> -stream -xڽnHm( 갛bN0`0ohe1H
Iz5ERt`9GuUu[Vy~UCF~Dʬ7Z8x_\[eDiȣU_*'3`?x{r'&Aj3e9D~gMxPt6i@t: R2lԟN2aϵms݈SEAuQF}ɣ0(A:`hjw(yյbP($:aqy<U@! -?]6k'MSEQav E-/ʹh0e`=^o$_aCfv.ʭjDTi-=G DQ~;i iu`Dz|OǨ<B5~Y0c -d+_gfbC,ݰEe13 -,EgyXV ݤheY^WB@pS ZWX0#V rnj6AŒ_ŭ8OSTeY3E$3uD%ϐBbf8%9w\\b91YajhXwd4CD8Nֽ,Il#AŌITlz$s+L8aU}hw3_G8-!ᾮ%Lhb"m)iIpRvn7/a>Rwfmt̶6q!)K蜰Qɔ{(:, ˧ -H
: -hcvWzF%leUYZfL -yX@v0~)@iif͛rSuؤp'JV9][AFoUd%Uw
( -FŤÕoQhb
*&.UUЫ -b -M]@2{_bOScu[(7rvضvSuoDJ -wG*{7ȝS[[su*/bFoGݺb 7x{3V-0(~Ǹ*7gc*Hbj< -R5SAuVف9]SNcķ1| vA -c
F*iG'& -endstream -endobj -944 0 obj << -/Type /Page -/Contents 945 0 R -/Resources 943 0 R -/MediaBox [0 0 612 792] -/Parent 868 0 R -/Annots [ 939 0 R 940 0 R 941 0 R 942 0 R ] ->> endobj -939 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [141.355 570.152 156.077 582.107] -/A << /S /GoTo /D (subsection.357) >> ->> endobj -940 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [439.807 400.905 454.53 412.86] -/A << /S /GoTo /D (subsection.115) >> ->> endobj -941 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [187.712 218.338 202.435 230.294] -/A << /S /GoTo /D (subsection.84) >> ->> endobj -942 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [526.274 160.659 540.996 171.507] -/A << /S /GoTo /D (subsection.357) >> ->> endobj -946 0 obj << -/D [944 0 R /XYZ 71 721 null] ->> endobj -97 0 obj << -/D [944 0 R /XYZ 72 720 null] ->> endobj -101 0 obj << -/D [944 0 R /XYZ 72 604.039 null] ->> endobj -105 0 obj << -/D [944 0 R /XYZ 72 545.806 null] ->> endobj -109 0 obj << -/D [944 0 R /XYZ 72 462.59 null] ->> endobj -113 0 obj << -/D [944 0 R /XYZ 72 436.729 null] ->> endobj -947 0 obj << -/D [944 0 R /XYZ 72 383.969 null] ->> endobj -948 0 obj << -/D [944 0 R /XYZ 72 385.363 null] ->> endobj -949 0 obj << -/D [944 0 R /XYZ 72 374.405 null] ->> endobj -950 0 obj << -/D [944 0 R /XYZ 72 322.355 null] ->> endobj -951 0 obj << -/D [944 0 R /XYZ 72 323.197 null] ->> endobj -952 0 obj << -/D [944 0 R /XYZ 72 312.238 null] ->> endobj -117 0 obj << -/D [944 0 R /XYZ 72 274.686 null] ->> endobj -121 0 obj << -/D [944 0 R /XYZ 72 205.394 null] ->> endobj -943 0 obj << -/Font << /F28 483 0 R /F8 481 0 R /F26 482 0 R /F30 649 0 R /F34 613 0 R /F38 693 0 R /F36 666 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -956 0 obj << -/Length 2634 -/Filter /FlateDecode ->> -stream -xڥY[~?@Hۧ$Ȣ[49ݢ֢m5rNs,ibCrȹpLJo^|*ll206}x$_v`}~|S"5) 7;(/(rykciا8 x)q0*[qsV}'waݏLs__3%IytK[2<7SN%MXԲmYmUꁑTtD4U~|;}w:C~*V0E4j6y84;DnbT<FcMӡf[u(;s|㩣26RO6d<";7ꏍKIKI{V4K\i@w\/`6e[-f'ĤQv'Tԃ-F
:8_F,O2J[7`0O/alc݉c&*&|_ք
"ٟ7Ё|LΛ8l~~wTp1E&)v;F{g!R|ŋMw:C[.Ja2)x/6ʓ|ʀ -pSXa`S۷%ƾ$h#2"VR~a4Dsub]U'n9Wq G;zBN%& OnR%V&h
&i¬t&Eq/q.Uq:[GL뙹{-#)vB/nn1HS;j컾[yjz($s2;Y+8թ
s1ƤW(
vd8Ik@-ڑ½m :F_)- -}?S6cjQ0MGKphOnnć!w -yD7- @Jb\rY1і֘]UC\u^8lBf'[YN·
WqX`3D"@3F@;Fk&a!aq{)+Eײ
"K;( -G - Rc$-5ZB9<{@[=awz|V| -J~ -endstream -endobj -955 0 obj << -/Type /Page -/Contents 956 0 R -/Resources 954 0 R -/MediaBox [0 0 612 792] -/Parent 868 0 R -/Annots [ 953 0 R ] ->> endobj -953 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [109.747 606.018 124.47 617.973] -/A << /S /GoTo /D (subsection.358) >> ->> endobj -957 0 obj << -/D [955 0 R /XYZ 71 721 null] ->> endobj -125 0 obj << -/D [955 0 R /XYZ 72 720 null] ->> endobj -129 0 obj << -/D [955 0 R /XYZ 72 663.815 null] ->> endobj -958 0 obj << -/D [955 0 R /XYZ 72 601.036 null] ->> endobj -959 0 obj << -/D [955 0 R /XYZ 72 602.431 null] ->> endobj -960 0 obj << -/D [955 0 R /XYZ 72 591.472 null] ->> endobj -961 0 obj << -/D [955 0 R /XYZ 72 580.513 null] ->> endobj -133 0 obj << -/D [955 0 R /XYZ 72 508.546 null] ->> endobj -137 0 obj << -/D [955 0 R /XYZ 72 378.582 null] ->> endobj -141 0 obj << -/D [955 0 R /XYZ 72 284.483 null] ->> endobj -954 0 obj << -/Font << /F28 483 0 R /F8 481 0 R /F30 649 0 R /F34 613 0 R /F38 693 0 R /F26 482 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -967 0 obj << -/Length 1344 -/Filter /FlateDecode ->> -stream -xڭVK6Whz<sŇ^%i&LlsIrJF"/@PkiN -)䅟FױMtGx,!Y܂
φxH;Ra=mjM-y4<wiX`>-eyĶ4m٢Xb5@W7tڽ+.:`B?/ʱ#sknMXp;w{@MGC7(:e* `KNFyNy.70J -qkU'B%]B.Pt0q6pչg[mB'hCyq9¤=.ŷFX䱚
>E{ d(DϟNu=U$" -zՍ99,.T&냈~B܀L!"2(; -V -ݔ$Ca:\gb@ -((s-Dz2JݛH|!÷hh'B۰jl Z0,y(8%uGA8V%aϦgSسa8PDG8Aq|go06vCk\5Sya1N
|twRERBt䴽țߴH͆NlG,PR,
SoaM -endstream -endobj -966 0 obj << -/Type /Page -/Contents 967 0 R -/Resources 965 0 R -/MediaBox [0 0 612 792] -/Parent 868 0 R -/Group 964 0 R -/Annots [ 962 0 R ] ->> endobj -963 0 obj << -/Type /XObject -/Subtype /Image -/Width 709 -/Height 484 -/BitsPerComponent 8 -/ColorSpace /DeviceRGB -/SMask 970 0 R -/Length 19098 -/Filter /FlateDecode ->> -stream -x+tݸچװ30렁EgumT8hesX7,,s```a@Nu>]|۾<ŖdZ -& - - - - - -m] -+{h܁ӑugO;FsTpMcMi&SYil'H*|B~,r)"% -յӢrݽӧORړr5Z^8cOfjm#վ?aZI/t_'*m۫?[ޔ/M; -[ޱO#^RĢo -^IC噾М4t¹"<wFUU!̝z -wsLXA -靬X)L#cmY -j - -& -gx1= - -\5pmƦi 9lKJ:^W%YͶW -qRtY}ΠRIRAL3&+*tjNRiW|y?,Jo+- - -炬ij7nӱ@Vy t2kf\EW(PW -6@%jGQ~;T -i6Z[k@ -Zo]Bs=!]L0eϢ\Zt|7k@ -' -O@vn z@DB -P -N -'U`~vb`6z%s$hYtb'빨m'&jiQu:sS|19o5mƽalWOx# -#4vN.K6/qFvO*YVv' T:o]p^Lxy_]k`U[ ;)F
;q^ᅣT3uFةzD`v -RjeяJ:)_Gi~:&\ E@x^k
fd^2 -~n|[֭~x3?c;Q"14X@wU[\>ͭg,NO*zi7wOqB~c+[UrU36Y 'DGF9I
n.[際!gf'd?^.~p,bd>,ڤŎnnh,tH+oՂ}o%Nwے+LJ?0<Z;JD^U=c(V{[*VDGs -piD8a=21!0s76|utoZuxU`'c=Z^Ys95۵d;Qch͗ C^_!nYzGFKٌ8q4kKx(x/WǎasAx|Xde8ႢKû4`vH#h~ ::!ȫjwYk5wk6z!ncv!\55RN߿ -b9 -p4wjoSN[n'ΪOYT;0j~scQ؉`."as
i/v;[4`ĂKWB*/]v徻MI;3*+AU/_VqY/b皅R Yx(xp,DmFF:]؉13d+7 /m0_CB6F{g`m*`'VM<%(;a'6 \!S/@ɀ -؉YMh,e^@c{x۲ƏHQg ڛ U -VңN?mN,Y#%8C&=5?s
ٽMl71S0;?>O u+>A_x&1D+ -e]ϑV%5D]"IbR_MJ|Lh^+*6%uvJ%&b=sW2NXعlڌ>ަ^hv{>;.ŗ]rU08D
#vƂ;U:U|^@!XqȹY7J"6 -Tj]U]f`Ou>[7J{w;YSq h>w% -TbmEB7R+x'2N1͝5qȄfS6ڱR@Y|B|NNH1cZ3d'/VQ.@R9eȭ4`Nym\AҸJu]_h -bxt]wu]vBUu&:7&u8<}HQ5*pc,N}֜{jTMk0t* Ҍ2dUm_vnjd'fA+-d/TXtk/l'"5QgLufy!w{VN#EojNRM܉H4N$a֍h'fA+fO7*zNE,U
$}? -տ\d`'n'gij۾};n{4Tu8ѝ6wrR*jb2B'
cdp[YGzh^*FϺCI]jشpT6`+MP9u$7]7N1u&"-鴲飽DJeVru\:_9Ouq%/LB"`vW/'#2:d -$RxB=N~3 k -SG>5<%BS;1pVu8<yЇvj^b\kWSd10rhXىS
)'m턠de؉vB؉4:s?sUۏtRRZU3wtmtUؕ脚l2F9։CN,ND[So{YġR)YKğ5:!PĈ;rB*J6YVa$C1XNԕ3hCЪX&IRێl2LBgo
(fc';' W -A9bZ[jtzrZ[U{!%5;;t:ؖ$$C 5y]Bjhd;NqaW5;@!-j;$bF/SHi87AZbM&r&iUN|ktR#RTr2ǗIWjNO [_XIv -?qXɾQaD5ۓaokI9|j 5 mWLݪg]oKq&-;XmBEN`'?Fɀ_I ~:T*`' -P -8ZF -۵ƕ+3b滯R;*6g' -".S\ؠK,l ;%'^`vbN`'hxQrsZ`_1U`'NVb*N -W1r aIY=glAzK^̄|f؉Q\r"}n"uZa
p%oPd%-Ĝ?vpNj֖`(ݿV<*F-2ƸdTMxf(*'1E}^ۖEr̳M<d_F:HLHg؉R7YzKrϔvb\Jb+EfBero8^j&>{JxU#RvT0H?jVi.RN^TL׆o55&Nd6D2Q~(R,~vSh'SeVډia'曋?سiK=N!u?mtNo6~n"yaêޫ|zFvH}͛ͣyǣe2Gqzhj#XObΫS V[y)Lvb[`'r2Plڷ0%Q:L!OfT $H_ -?E,R- jCvNgiVM7V w/wYYcVė~'OoMqpqFxd0$Xs<}}4:_H
I9wEƪ+;D_;J̎QhaX|31;fumh)wbvW ׳ahkalݴc'Pgℵ;1svb}aZBM&0="3zl~v -`' -`'VWF\D#I+wu -.Lk'L`y_0z -X8v_U.Mg^vV"vBӷay?Nnn'23&_`.v[ח5֛ {.w -섻R^`wG>Z^5Ż;KsTܴ¢zC$7Q?vs$Q'w,S1fm{3ai(v,ome< '[^x X5]15veI.1/銄B臶)v/\:Ӭ=v4H(a' -cf/N^Z)*04ϷtZ6DxU;0}'uF{qh:/l+bu;}=\N֔9)BaԔy]MY9Ud[q+n"ض"G`*&v`mkbZ+!ڨ$v`y}cnϚ|=uZppiJΈ.m(QN9z?co]ZueRۉ&|[:ĂKWo*MXBQ -EG;d^v@0w;&n{y枻?{N)-fЃn*LUmv~+CpZP+rQ`iihx,b_FUU懤7f +>}Vz%b4Q5 -l(c4dl∰};A;X^A}7p*0LH^{b[kWD#U,&@jzaMPﭥaGxL㔔ξ -XRTihxҖgڔa;IӁJP9J#>i:Um -9?S)<^qMFRN -K?\u~S1K3Mݫ->~8M%w\kw옴*!^8ڬt,Na\;#lz9ڔ'tinx
Rb gİZɹxBJ`'`v¯Mꔴ4^$P~i~K5iM堨%q.ZWawA㘾D:(RcvzÞkJ*D:%.TiT09e+v7_4 Nf'6G( -pN -7X8K;x:$B]mN -6 -J^/apR24,;}N -9sNk)dAIRg؉!\Yc"U[MgL;T;̲kɳyU+;^3?ٚv~(ѻ6}y9?$VEW|1*ye; zgsC -`V
A +ƺ϶ EpF5 -endstream -endobj -970 0 obj << -/Type /XObject -/Subtype /Image -/Width 709 -/Height 484 -/BitsPerComponent 8 -/ColorSpace /DeviceGray -/Length 690 -/Filter /FlateDecode ->> -stream -x1 -endstream -endobj -964 0 obj -<</Type/Group /S/Transparency /CS/DeviceRGB /I true>> -endobj -962 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [383.818 527.193 390.791 539.148] -/A << /S /GoTo /D (figure.304) >> ->> endobj -968 0 obj << -/D [966 0 R /XYZ 71 721 null] ->> endobj -145 0 obj << -/D [966 0 R /XYZ 72 595.796 null] ->> endobj -149 0 obj << -/D [966 0 R /XYZ 72 572.182 null] ->> endobj -969 0 obj << -/D [966 0 R /XYZ 245.228 164.875 null] ->> endobj -965 0 obj << -/Font << /F8 481 0 R /F28 483 0 R >> -/XObject << /Im2 963 0 R >> -/ProcSet [ /PDF /Text /ImageC ] ->> endobj -974 0 obj << -/Length 3447 -/Filter /FlateDecode ->> -stream -xڵZY~_1h<Vah rvhq竮j^Cy:*&77Mm"ױ?d_]Yե[]{ڥ7\V5\V+\?{~>{
&W]eeZiYdiWԕl^!/d]B/LV~(RsܶE'k}7?lu$Uw^*;Qj@=j]]eӶ[YD֩&xŞD;U"p2fD5yTZgW3Ůo}Ctik;1ljpʒ| ]γ}U~`2Y&wO:*J\TvD+MDY{1v
tvXѕ}-0z;8ezw<O;WF둢EV<#̔")H
};|+c=|WjlLYe9N0=eEwah4̫`#|hd>ˎ;2'byX;ni-oL.LUdf6K51.LBSCv( -GӐ,Gxy_DAirr$v4|XX),_rV8y+HeNG1dmkbz@6V\ۮШ!!ۦVnY0W鈶$h%ɫ -=,eڶ$&/:i74ǴQc6ܹCWۚF.a00՜߉$gCf6= C'Ai3\cv䈷=RZi,E*Lq ciE[pY.`Zb엦ͻYOLn0h`67͓':P<ƶ'38jv<[ao2QI|Ww(n/(VId(;:l
h`v}VZН ?vf24ih)h ގ>rkgE^hǑg
Н:SKE) -eudc}@/3]FgA|
olL$CVh7g!mWyJLRYP;E}u -~b+D";LC#}3m='\[ 8!֢b{0[ -MߙKyZI~5. @Tm"لq}gDc1iMq&UqPBi*±@;<EA8hӢdB,Sz -_/cyYnIQ4Rq&DffLNI!K:̹:z46ƪQc#M%ea1Y -XM]5RR -=jQSGgH|l-7_1_VqI:t%~OJEBW֩Lw=ךy_-v,b'Y/`ϤcJ|uT|$<2o<;)R)
%ʡXh<~<4-k5|Z^|^˛]^M!3$@aav{@ -
y98~-S
Л縢LCД[c;24g#;IO}2XO9 D - Uޘ!c25U)$bE23-ƕgdq<9<@8OhU;=j6$o`UaYR5bmEz[#77KS*fٛ?~C$=65A%nM.'+4\iyv!+;,tmp6.Oč/~d FoFi[n^'p$vl/Q:S+a47&0גwMݟAhcz-4#Tw'ܗc]Z1pcTLWJk`w9Gurx˩)w2rv&}krdк Ͳ@^-bO_%Dd\VSz̟?}ۏ#z'OF?n~ʑ0fs?p`aChyNSIAcljdE~dGv@=Ƿ Jx4Ah.25J'(;}suuul>n=h7Un32~!q>}{Ȉg7I<;E>>Z3-x~7S~lZB7q4;FWy -q\q"wq -endstream -endobj -973 0 obj << -/Type /Page -/Contents 974 0 R -/Resources 972 0 R -/MediaBox [0 0 612 792] -/Parent 985 0 R ->> endobj -975 0 obj << -/D [973 0 R /XYZ 71 721 null] ->> endobj -153 0 obj << -/D [973 0 R /XYZ 72 503.69 null] ->> endobj -157 0 obj << -/D [973 0 R /XYZ 72 385.979 null] ->> endobj -161 0 obj << -/D [973 0 R /XYZ 72 246.312 null] ->> endobj -977 0 obj << -/D [973 0 R /XYZ 72 187.969 null] ->> endobj -978 0 obj << -/D [973 0 R /XYZ 72 189.364 null] ->> endobj -979 0 obj << -/D [973 0 R /XYZ 72 178.405 null] ->> endobj -980 0 obj << -/D [973 0 R /XYZ 72 167.446 null] ->> endobj -981 0 obj << -/D [973 0 R /XYZ 72 156.487 null] ->> endobj -982 0 obj << -/D [973 0 R /XYZ 72 145.528 null] ->> endobj -983 0 obj << -/D [973 0 R /XYZ 72 134.569 null] ->> endobj -984 0 obj << -/D [973 0 R /XYZ 72 123.61 null] ->> endobj -972 0 obj << -/Font << /F8 481 0 R /F25 479 0 R /F29 976 0 R /F14 480 0 R /F30 649 0 R /F36 666 0 R /F34 613 0 R /F38 693 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -991 0 obj << -/Length 2832 -/Filter /FlateDecode ->> -stream -xYY~_8Cl5P`I0X~hz*>U]5ٲ$ ==u~uۛ'lXnV^J -inc(Eo<ߛzItGn۵kQQx }?ɷ*yS6*&"W[g&rRF:P~'c2zF8z
v<@jGӊ _mSvb^fͿPvzx,O屨x';kHN&;g+/:7:Q㊝ '/n(Zpiw(:λإX]QU-=,f}[9%|gjГu-OFV*P@}
EHG94G5j5It{([Zj9}GEGQB8$Ñ !|8Ig,!Q::G4
YT<(Ovܖfѹh@o8}
xcsjYEغ3"Hsgwjz3z摢"6ܖzQC -ao5v aJG+{hJv~܉[Mʪ"ЙG+#2dOuw
OM:ɇ-LDߺ<s@̎<Iz/aT$<RLֳѾ}e+cF3*`-كKچWڄKmRK - }_?鉣$?4R8͝_`!+C ډrfepmh:+YUaTPܔ%PB+LIy<WnK-jcQ<W)"cT, -I)+`PCZ -Fr'%%k?e㸃ddL˕OE&G㇎D#!Mg[R7oM빞\;& US1X<phv|cRJp%WA;DsN68L
ucI eIw{.:0YԶ<U,۸ci*؟RTBA}jNdD5~*6
8hO3a rV`C.\Fo˦c"DL@͡ -X}ޓ;б)j߀_*4,E1`nIҋg808\JdۤCq -endstream -endobj -990 0 obj << -/Type /Page -/Contents 991 0 R -/Resources 989 0 R -/MediaBox [0 0 612 792] -/Parent 985 0 R -/Annots [ 971 0 R 986 0 R 987 0 R 988 0 R ] ->> endobj -971 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [162.988 676.759 177.71 687.608] -/A << /S /GoTo /D (subsection.303) >> ->> endobj -986 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [497.876 573.084 504.85 585.039] -/A << /S /GoTo /D (section.540) >> ->> endobj -987 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [446.965 485.562 469.437 496.715] -/A << /S /GoTo /D (subsubsection.44) >> ->> endobj -988 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [215.905 463.893 235.609 472.804] -/A << /S /GoTo /D (subsection.171) >> ->> endobj -992 0 obj << -/D [990 0 R /XYZ 71 721 null] ->> endobj -165 0 obj << -/D [990 0 R /XYZ 72 720 null] ->> endobj -169 0 obj << -/D [990 0 R /XYZ 72 528.609 null] ->> endobj -173 0 obj << -/D [990 0 R /XYZ 72 451.054 null] ->> endobj -993 0 obj << -/D [990 0 R /XYZ 72 413.04 null] ->> endobj -994 0 obj << -/D [990 0 R /XYZ 72 413.881 null] ->> endobj -995 0 obj << -/D [990 0 R /XYZ 72 402.922 null] ->> endobj -996 0 obj << -/D [990 0 R /XYZ 72 391.963 null] ->> endobj -997 0 obj << -/D [990 0 R /XYZ 72 381.004 null] ->> endobj -998 0 obj << -/D [990 0 R /XYZ 72 307.471 null] ->> endobj -999 0 obj << -/D [990 0 R /XYZ 72 306.375 null] ->> endobj -1000 0 obj << -/D [990 0 R /XYZ 72 295.416 null] ->> endobj -1001 0 obj << -/D [990 0 R /XYZ 72 284.458 null] ->> endobj -1002 0 obj << -/D [990 0 R /XYZ 72 273.499 null] ->> endobj -1003 0 obj << -/D [990 0 R /XYZ 72 262.54 null] ->> endobj -177 0 obj << -/D [990 0 R /XYZ 72 202.573 null] ->> endobj -1004 0 obj << -/D [990 0 R /XYZ 72 166.8 null] ->> endobj -1005 0 obj << -/D [990 0 R /XYZ 72 167.641 null] ->> endobj -1006 0 obj << -/D [990 0 R /XYZ 72 156.682 null] ->> endobj -1007 0 obj << -/D [990 0 R /XYZ 72 145.724 null] ->> endobj -1008 0 obj << -/D [990 0 R /XYZ 72 134.765 null] ->> endobj -1009 0 obj << -/D [990 0 R /XYZ 72 123.806 null] ->> endobj -1010 0 obj << -/D [990 0 R /XYZ 72 112.847 null] ->> endobj -989 0 obj << -/Font << /F28 483 0 R /F8 481 0 R /F26 482 0 R /F14 480 0 R /F25 479 0 R /F34 613 0 R /F38 693 0 R /F30 649 0 R /F36 666 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1018 0 obj << -/Length 2479 -/Filter /FlateDecode ->> -stream -xYKܶﯘE*
LK)"GNYUhcWJCbfXc>v씫C.; Fn6LWXvD~ox_ Xmd mUM^^edY -+Vմ)֛(Wk^8)"Q݂FODlTܛ-ި,X0E(74g?S*v}[2~<^^`2Q=8۳ŦQCOO3yHBq -h6uORR!7w7 -^1$U*?| - -vqŪܼF1#4v;z F&^SuPVM)n0|X~ -}AC3*3ojm]iPhhޯU (^Y|P -"=bsX0V(i~pZRÂ9EzL~7ss]K4
rAI%n
dX -O1sHP?,^wq -*| 5~ZgזR,tH9F?l, f=mMrhN=ROIm]FV -gV.If6sC-Z~QKz?$1Ix~N:tsX4O05b` -mέNv<oX5ab_Tךpz)ssd6cMOd$lB"&Mk.k`Ck_bF?ѓpD:$0feu 9 -PAcWO_μ"*2dc?2c@
l%PkZpAl=5Ims[7f\?A(XJǓ3=^
rwIQq>yZl3iHOʡeQ"Xut9s -endstream -endobj -1017 0 obj << -/Type /Page -/Contents 1018 0 R -/Resources 1016 0 R -/MediaBox [0 0 612 792] -/Parent 985 0 R -/Annots [ 1011 0 R 1012 0 R 1013 0 R 1014 0 R 1015 0 R ] ->> endobj -1011 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [320.201 384.164 334.924 395.012] -/A << /S /GoTo /D (subsection.115) >> ->> endobj -1012 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [369.058 219.773 383.78 231.728] -/A << /S /GoTo /D (subsection.84) >> ->> endobj -1013 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [232.081 207.818 246.804 219.773] -/A << /S /GoTo /D (subsection.39) >> ->> endobj -1014 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [459.408 207.818 474.131 219.773] -/A << /S /GoTo /D (subsection.48) >> ->> endobj -1015 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [280.828 172.506 295.551 183.354] -/A << /S /GoTo /D (subsection.381) >> ->> endobj -1019 0 obj << -/D [1017 0 R /XYZ 71 721 null] ->> endobj -1020 0 obj << -/D [1017 0 R /XYZ 72 720.996 null] ->> endobj -1021 0 obj << -/D [1017 0 R /XYZ 72 710.037 null] ->> endobj -1022 0 obj << -/D [1017 0 R /XYZ 72 699.078 null] ->> endobj -1023 0 obj << -/D [1017 0 R /XYZ 72 688.12 null] ->> endobj -1024 0 obj << -/D [1017 0 R /XYZ 72 677.161 null] ->> endobj -1025 0 obj << -/D [1017 0 R /XYZ 72 666.202 null] ->> endobj -1026 0 obj << -/D [1017 0 R /XYZ 72 655.243 null] ->> endobj -1027 0 obj << -/D [1017 0 R /XYZ 72 644.284 null] ->> endobj -1028 0 obj << -/D [1017 0 R /XYZ 72 516.519 null] ->> endobj -1029 0 obj << -/D [1017 0 R /XYZ 72 517.36 null] ->> endobj -1030 0 obj << -/D [1017 0 R /XYZ 72 506.401 null] ->> endobj -1031 0 obj << -/D [1017 0 R /XYZ 72 495.442 null] ->> endobj -1032 0 obj << -/D [1017 0 R /XYZ 72 484.483 null] ->> endobj -1033 0 obj << -/D [1017 0 R /XYZ 72 473.524 null] ->> endobj -1034 0 obj << -/D [1017 0 R /XYZ 72 462.565 null] ->> endobj -1035 0 obj << -/D [1017 0 R /XYZ 72 451.606 null] ->> endobj -181 0 obj << -/D [1017 0 R /XYZ 72 414.054 null] ->> endobj -185 0 obj << -/D [1017 0 R /XYZ 72 287.533 null] ->> endobj -1016 0 obj << -/Font << /F38 693 0 R /F34 613 0 R /F30 649 0 R /F8 481 0 R /F14 480 0 R /F25 479 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1042 0 obj << -/Length 2830 -/Filter /FlateDecode ->> -stream -xڵZKsWC*``+x6vV` -4$ũ"WN P'!O|fX]с"uiwuitƀ-lg=eY!G.mޅȞ:
ȗPV!,rƴF+9P͙yr6n',U~ -:L3?o:XHҟ˒d&j,PY%, CkVU{s(%< YiP=1=VRИL{W]}G}><L*o|uoEcz`ƅ!U>YIEDI,]MPyt=A -lyEg^[*>'z|է|De/=B&?gaP䘇T$OⓙTTsIga.dfZ?(4"W༤r -}ny{3_(8o4 -'@`OII -^a]eXTMꎎ)dqf0eG1Ͷ\v2DP.<e,O2Ԇ` _Q
q-ߚ$`_CMd6m -$u}ᦃ4ecu>Gq[ `OjTQ'Qp용+8);hy],Ʒ<;h9jBZ83ӒQ((C1
#t -NJm|vQi -~/}X˃O'Ja9l<]Bfw6RJ&SGcCB~+>{Cͪ[ە0XpPd -d8r[CU5< -{`8Ld<nk-XdfE'b玒XQDוh"mMY齨V7QSš -9:)ۧbj)&:!pwT -.l04t)q/dH! XSkR/s~|42X|nG!_'`
yc1<o3%`^
ִv<?;@xkh5={Gdd4%ꡙ
($NlD;UOƱ:| -endstream -endobj -1041 0 obj << -/Type /Page -/Contents 1042 0 R -/Resources 1040 0 R -/MediaBox [0 0 612 792] -/Parent 985 0 R -/Group 964 0 R -/Annots [ 1036 0 R 1037 0 R 1039 0 R ] ->> endobj -1036 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [324.387 468.998 339.11 480.954] -/A << /S /GoTo /D (subsection.292) >> ->> endobj -1037 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [285.312 251.363 300.034 263.318] -/A << /S /GoTo /D (subsection.294) >> ->> endobj -1039 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [405.672 126.962 412.646 137.81] -/A << /S /GoTo /D (figure.360) >> ->> endobj -1043 0 obj << -/D [1041 0 R /XYZ 71 721 null] ->> endobj -189 0 obj << -/D [1041 0 R /XYZ 72 720 null] ->> endobj -193 0 obj << -/D [1041 0 R /XYZ 72 555.964 null] ->> endobj -197 0 obj << -/D [1041 0 R /XYZ 72 321.115 null] ->> endobj -201 0 obj << -/D [1041 0 R /XYZ 72 238.419 null] ->> endobj -205 0 obj << -/D [1041 0 R /XYZ 72 179.667 null] ->> endobj -1040 0 obj << -/Font << /F28 483 0 R /F8 481 0 R /F14 480 0 R /F30 649 0 R /F36 666 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1050 0 obj << -/Length 1725 -/Filter /FlateDecode ->> -stream -x}XK6Э2kER#I-niDlel3R-8Cr8̓eQ -?1V&EUE(\VQ}z&grKc7)J oc^:H^/Dtwy=m#Ve(K(詉>nj-:dS߭xGu菫50ԋgxo7}?;Y8N+7_}yLP/ւ%%~BB -BdMaz%ֳ4RoT,iتqzZU*JҠz]Lؚڌ--Β*CI%[Ck6IӶ - -v8\/'< -N+B q@B -F^ByiTtӊxOi5ɋTvS9ҵ8pVlD5CG9mf$j75`0wΑ "}z;Qe-o㔇DV|%8mVF -*d *\C4]ybCv; -ɝE&TB߂flZa@Nj]&|Y5LNs֚shBwj;z
#&L5ҳz(X8*Ԙêi -endstream -endobj -1049 0 obj << -/Type /Page -/Contents 1050 0 R -/Resources 1048 0 R -/MediaBox [0 0 612 792] -/Parent 985 0 R -/Group 964 0 R -/Annots [ 1045 0 R 1046 0 R ] ->> endobj -1038 0 obj << -/Type /XObject -/Subtype /Image -/Width 692 -/Height 520 -/BitsPerComponent 8 -/ColorSpace /DeviceRGB -/SMask 1052 0 R -/Length 24205 -/Filter /FlateDecode ->> -stream -xoWYR;!bvv{;o[$ oĒ -hrSbuViS -qNs*K\bb]Ct瞶jڐhW|<_~
p.֊?δ.9k%pe(ܟɦ(y9N.RJ>o76J~3Y:o7W\bo%1xy -n0T7HQ!\+fjRt5Ò0\[A/Nel.䒟j`ҭ[NpFak+m)mm6X:Vdc*|h[[]oGM%&&ר☈
왶VS",6^`9Z|m^*S٦hAcWVnVV~
pln`.mXhH=j<Vr-
I'["c7D<^Y<!h7*-ϴ¥.8xL;-o]0@F)HYM!=Ӧp /KY϶z_*ʞ(Ļ!}"Rg -FsJbCO<q[)('nJ[%\__]4&͏qg'мC8pkju[1%n0%~ɰ}h|~6xbze)ZQC_';zY"\%R@/Iz^=eĚ4"D1%O8j~:11An=vqM|~oJUKzq <<ns%}_:!秿&/K,?Aˌ4Y];O驟8Ao78?yO7W9=n0zYAecqr+EQY?$:/
F-r~
xRһw~8
g - A5/b#X -n'|RܣQA9SO.R
<U'ڴb씧4+H
ɶsRnѣ -n -J+ܩxmGT݈H+ly=O=t)O5Qh+rbIuIar:uxgĄe?0Yڎyi 'JtĦ*11
- "EN+\B5.HwQ_WWJwyW7}ㆎnС
pkK_~B'^&K-S܄IJ:)WqC)T/wںQ6別x"2>7 -R6)C^V7ySOr=}p%Q?K17^Hz%ϩpm`T8KЧ7m1X>Kw&=eOm;P4Ӳum긷#f>23q
pЯUg"5{/
RON(G}E /(OVx[}Oe3y{ʔ>IIXg6X7~*L J<ϼuyӖn**I٫n -BROFJn&w@9>A@%1Uai?&kg 2
t-I2.P: -SiXܠ=]*M/
-s
p>/SO=$dC+q6toກ۔`o<U
p((3=/yGȆ8V∉F;j
;^^N`;hS6K$xnpנM7}ѣ>J1q<h7ɾqBLsajq6H_D -1_:粒AS{혟Vz"]]&&TD
>?,}{{=xх"ʆ_ђ}Te25شafrJ| -Ɗ[N~c7 1%̚Yo -n`ܖV:߶w=xxfLEWvǝ
w+6|_'=ޥW^)qOB&5n`̥A7_MƬm^*rp%Ҋ9,7W6_W-}C1Zn]t
l&ܩ+t2,gJ ?sC>u>''^F,u8b`굍bAJ.h2t~vQp#r%@`
_ޅ(u|)Aa!'dv붴СWtd6S~{ զ -Uq/^CYb1v><㋁">>I+dSH3'BCn)$`PX)^o!
D6=(Db
?Y6Ws8ݸ}%yWMj~-u\ -+;Y=leӶj$oӞol}CҮ"sAquQȜ={
^rƍ-Qlw(dL7H56v"X)42E{]"ʁ"HEL{.g{?#v
nc7ss{t -ONzxnpϡ} -d?p;G][[!8b⸑y -qUK-GeHnЬJ_
F
Lopݗ
>B+!p8nɧ9.}reKqv;9bnP/{Jty77)}>>{(pn`/}}7._Y[zT7>~^g tx7(t̽ҮV0/zMkKmH<s?RC`N<bJ!=ͅ˸+t6^a -ylntY /FǤW+/0n?>w/{e](s)n|I˗~!+c\n!DQ`)Rytc*]m=t+0czKP f%/b0W-O/N)
OܸA{i
Pq?V8┟]g+c'*DANn -I*)R@|YVO}ur -?t`[= x+𦸒t++
{͵+~׀XRoIL#,ɃF`굍b+kkV7ڵ\qJ
2w
,dra*)#(WB7
vM!O77X6ruܕ:9W dRu]Oq1bs=k3Z\ *[b6h -f7Hl=Vn45wR_DmJ" -=JBuo4Yv%uY7
m -/?zF6tDMNE]A^9]܈tL/G굨taӋwy0b<h --*~\Kq> -1t&5stk677E'osݺ_r%\ъmauRvJ-[۵ێ,ֽRWT`n52w=J67xVhw={9
7(~666vvv)utko<jm$JRmHJ՝N
8jjMn0`70˹jRRi)En\jF?vՍo'i9
7(|_A)'ngMA)_:EW,%oВo;N -Jܦ mj)urLbQ?w
?q,o",~t.~{76ſͮo愬};J&YATcjԟb75||^)S_D?AݔRZp`" -n
ȹ8?n)˱Rc>1q9 - -\=~
քfũ6\7hVn:+)A?и0% -=(M. - -jS - -sՠЃFQu٨wbq6Xy61 -\C` Av{
>wܹ{ȴߧ\n'<oN3V7X9
٩:䎋uFnYP)ᙕRaѯ//O{!n;q<sB}ntq:47szq|z.>_p(
:s}$ VnɭJkMG2Tnb2do8BTJߟa/ܺ".{WE
~UwnAʹo_ߨS<v,Ź_+kW|
:VyUO]U|]l
,@ B>=LݷAninp#~MO -~
QڛV&kS
pָayuSe|__u;gϭfo( # -+ڰ}6+tmb/mCڮJ vm-oN?ē/SSQ7n\pAB }ݏ?X=pp?]5Ձ잡v1]lTZ&n\1ceӗsYAC}ui
f:~X#fudO_by%*
p]|kt xlm --w5ц2_) ʶmCʮ|nt2bܜg!tthۧOZXXx!^cU{宗z
6OFoQmRsAt=z
<wރu4wjKp=i -PقM:b5?!б/`h^_D8+sYꋽ(2E -n<4AȰp/!um;ix#YεԽsؽ/
FY#f=EجJmզ
ނ>xK|
f."BC/+blSbuyd
eO n0ivfq*7(=s
|l)M~hv>%7} -XF3j3wu;~
Sb( -7hO¹M8cI`r1tgzn0N
^Zzbǽ ?x?W - -X"m -= n_$"*nv<RhS -۷o߹sݻݻ>3
{ -{(#???TvYp`np#*=wfsv^ K"U[K{7k'{u>%=,JV -+Wv)TH)dwud-vC]|tH
(-&M)ɹS6pn0l7P -X~QYRuoLSMnAt7moDw#E{zRΝDWo"
D6=(Db
@C<g
0mf71>+/i
F [b57n@VCC@/%|)-
DVmS@^D{%*q=doS +m -)
wm9R`~݃$D
ejɴ[=ˏʓ:v -d04T)25ᔏ-2 -5ˤw2>@Q3쒩٥N
{ۋvi)dͺ픾) -Ta%O e!eR_^)n |` ,q -M
jsrg`{a\\ -n -hV%+<n0~n;?_DA7" -TVR&ZS?^lV˹
-dmT
wJ-ܱ_!7gup{/(j2>^Sw -ɵ{C}/RZ4tj - O -706ay_|͛?B6ıGL7w - -nlxj՞*; .3( )OIh.nP7[DJ0$["jp$tuS&Dyj`rT)Qw^mnO71v)@J[Dcqӄ-iicDp`n K~u?%3/'MQFGEYDJѣn`$+t7HҔ\)R^7gaToU$ݠ#r_:ҤSui0[^p䈾27(ȍ%F
-< 7@nZb0 7cޭI8O("@
t1xdPnM!(!v{BOP8M!2%oT@6pOsiSs c<O/CCnp>/=<SO:)J0.s:.#IƈA&7H> _ip7Eޭ$[ѵr}͛۳A\VNǩ"ڎ<
-cBvjooС_OHV~ԗqWnP7H - -c(In -6Lnl68mCj?C
,3~ -+Z^Z4Zٿlކ -
vlS0(Mm
-7 -Ns2VIZ5`rŖ/bRO\VE7p<G})i -~` -endstream -endobj -1052 0 obj << -/Type /XObject -/Subtype /Image -/Width 692 -/Height 520 -/BitsPerComponent 8 -/ColorSpace /DeviceGray -/Length 722 -/Filter /FlateDecode ->> -stream -x -endstream -endobj -1045 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [479.638 289.323 494.361 301.278] -/A << /S /GoTo /D (subsection.303) >> ->> endobj -1046 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [325.673 233.083 340.396 245.038] -/A << /S /GoTo /D (subsection.303) >> ->> endobj -1051 0 obj << -/D [1049 0 R /XYZ 71 721 null] ->> endobj -1044 0 obj << -/D [1049 0 R /XYZ 238.212 418.733 null] ->> endobj -209 0 obj << -/D [1049 0 R /XYZ 72 323.21 null] ->> endobj -213 0 obj << -/D [1049 0 R /XYZ 72 264.977 null] ->> endobj -1048 0 obj << -/Font << /F8 481 0 R /F30 649 0 R /F28 483 0 R /F25 479 0 R /F26 482 0 R /F29 976 0 R /F14 480 0 R >> -/XObject << /Im3 1038 0 R >> -/ProcSet [ /PDF /Text /ImageC ] ->> endobj -1057 0 obj << -/Length 3241 -/Filter /FlateDecode ->> -stream -x[K8Ws9"6&,٤@ڦR["ڞKZzGUys"\)"nXb3_ƫ1zy{إnޖZ --hJ7}26<a2QD7še5>ޱ\oD4
=-xZdV4܃aO -\ޔӃ%ih(hO@'|8רQeL3hŠm:k+&% )ʛJ-`c
T5֠LgԊ!WQvKk5[gF{hQZJ 0=lw(X>CmxT!8[˴PE0EƆZI,^&-M4}-}s GߐV&Nz -p(*b~Fwr{~;͋M -:ݦȗFWk<8,,lWc#LfbJEihԒp+1*LP6aA%4L5m,FPMaFz7Gͩow~MaPvA -H<XP(߳9i-ŀ=Mm-^^[g;hf&Y<oJMmsPGfG St -s,dw3*ҩ6Lx|9Dz&܉3>"FMx@ՌJKVo#=*L7bIq JXxf*(ܢ25c:P$*R齮t,,k}}]F:GlFDEt3n/8-n~U:܄*vUy H, qqpgd>͏50pQ:؋<ACNSU0pb83<lCXaN;uPo|;V_> ->-*%DYnc.7!1XOyƐ\1|E\qXcƿ/u8{~WRW1} Ojq,Xb -,]r^`%Yd]-m.dl#XP6VqvoCr]]b,gh
@ht K4Z@cѲJ -kn Ӫ/u -sm;L
b3}^V]qhRtbhDrÉYQMFGØ)1tC/k)il;x8-YBvJz a$ّk
֙VMizNEM8غN.:*;\Q߈dIvH]:}v -i
/daUWETMs/v|8"8}k݉w)ZzamMibȊ/Ѥ]`p(AäȼJ-{j;֓} -endstream -endobj -1056 0 obj << -/Type /Page -/Contents 1057 0 R -/Resources 1055 0 R -/MediaBox [0 0 612 792] -/Parent 985 0 R -/Annots [ 1047 0 R 1053 0 R 1054 0 R ] ->> endobj -1047 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [353.051 688.161 367.774 700.116] -/A << /S /GoTo /D (subsection.303) >> ->> endobj -1053 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [168.029 546.242 182.752 558.197] -/A << /S /GoTo /D (subsection.380) >> ->> endobj -1054 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [469.012 143.266 475.986 154.114] -/A << /S /GoTo /D (section.413) >> ->> endobj -1058 0 obj << -/D [1056 0 R /XYZ 71 721 null] ->> endobj -217 0 obj << -/D [1056 0 R /XYZ 72 720 null] ->> endobj -221 0 obj << -/D [1056 0 R /XYZ 72 639.6 null] ->> endobj -225 0 obj << -/D [1056 0 R /XYZ 72 533.297 null] ->> endobj -229 0 obj << -/D [1056 0 R /XYZ 72 326.488 null] ->> endobj -233 0 obj << -/D [1056 0 R /XYZ 72 198.517 null] ->> endobj -1055 0 obj << -/Font << /F25 479 0 R /F8 481 0 R /F30 649 0 R /F28 483 0 R /F14 480 0 R /F38 693 0 R /F26 482 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1064 0 obj << -/Length 3072 -/Filter /FlateDecode ->> -stream -xڭYێ}h̓ؖE%AHv#.QV-uS7ҭ]#yh4Eb)7iK4.VE
wY]j(01_Ǫ+{| -wej~d!6TIR~,XN]?w,K0o5$Y^
ޫPr7%^OFmq
ӬDt\5 -xa<jt6 -TfR]PPvڏSkMkc5c~c7::t*4k8*xr˯q`s29cK -(2MYiaN<e~hd*Z/+ۓɌEkUM_v(K$,1~j"gɝ,F~0O wly!Ak',V{/c6vY?>]dY>xxde= -;5NV'[66v"&pf-g{n\Wy6pYwb0mz*pjnkS/oBb#2f0 -A}q$(CYf.|h`t됰kJ -tpӕDz+0 -;d )?EB(\G`+ y_댭QtlI|h~k1kQ?i
טBx%)UNOx"9=&ݐ˺~|aIP1/7gn8_qN84KҎld镱MUNiwᕜ9!$ILCl@1 -i.H2R -`$ǂ{KG
\m9/EuC -$:_ u++,bqT'PR:gy{"Q`zV]QQz*0j Lo<KEP#NɺF0eŻwzF82%7C&V`Y\
éh.n3 -\؍ܑA4
$B -+v=/7\-}-c<h@+LPxm"L;H_
JÕ 0Ar@PY#rYyZJ?x3f*\gy9kcU
`r50%.ߺ@Gᴗ 8~,y0+
_@;'$
ИЃf u,h-S3|AJn!7`A~+?3͚N ]6(py?%k<~!"jBaF_rkkևx`nyu|+fUis<L8"_5Cgb[ -΅[B%3<7rIXH&,Oܗ&^ۻ_o")l/]@03:LS-~L\ROvЏ/C*ھ=t?r[6-5($s1V-~[䏁N?d/ -J0/NqNX -nHd}7}c.ʂ+.GT(z|JfWJ$$n_ufsF6֟sSgJwG]TמIU2_)QXH|xg.OaQ:/*d -endstream -endobj -1063 0 obj << -/Type /Page -/Contents 1064 0 R -/Resources 1062 0 R -/MediaBox [0 0 612 792] -/Parent 1072 0 R -/Annots [ 1059 0 R 1060 0 R 1061 0 R ] ->> endobj -1059 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [209.236 433.836 223.958 445.791] -/A << /S /GoTo /D (subsection.380) >> ->> endobj -1060 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [186.155 390.158 193.129 402.113] -/A << /S /GoTo /D (section.413) >> ->> endobj -1061 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [336.953 322.03 343.927 333.985] -/A << /S /GoTo /D (section.413) >> ->> endobj -1065 0 obj << -/D [1063 0 R /XYZ 71 721 null] ->> endobj -237 0 obj << -/D [1063 0 R /XYZ 72 720 null] ->> endobj -241 0 obj << -/D [1063 0 R /XYZ 72 509.252 null] ->> endobj -245 0 obj << -/D [1063 0 R /XYZ 72 377.281 null] ->> endobj -249 0 obj << -/D [1063 0 R /XYZ 72 263.823 null] ->> endobj -1067 0 obj << -/D [1063 0 R /XYZ 72 213.766 null] ->> endobj -1068 0 obj << -/D [1063 0 R /XYZ 72 214.607 null] ->> endobj -1069 0 obj << -/D [1063 0 R /XYZ 72 203.649 null] ->> endobj -1070 0 obj << -/D [1063 0 R /XYZ 72 192.69 null] ->> endobj -1071 0 obj << -/D [1063 0 R /XYZ 72 181.731 null] ->> endobj -1062 0 obj << -/Font << /F25 479 0 R /F8 481 0 R /F11 1066 0 R /F30 649 0 R /F14 480 0 R /F26 482 0 R /F34 613 0 R /F38 693 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1075 0 obj << -/Length 2355 -/Filter /FlateDecode ->> -stream -xZMs8Whk.|9)OUj'W.h9+SH%
` UsHn -뛍WWbaz[S/o.>_^a)"VRŶ>BЫ+1qzw!4&[2z/<$ YPU .nAc]<#)}{OX!d,K}1BؐRlpĒ,lpf[EAG68duvd22AD<d0$:BFPG:Rs˦IIR!kbT(H<P8.ZUTljꅫO77N3+@e@xQ%?D!a&K*;Mp7 -ΓX~hcΓ9ݖw#Ao߁'X_~yʇ^1X<Qr:<м
Yo7dSp2;B=jHL<\SlkȸiyG[s[wλ|ѽ^muOV&lDB&4)P5T݄Y*Hrqsq|frMȎt&.WCq7oՑHώ4K3<"$a2Zͮ8)xdc9zD$gu.Î.10Ņ0<1E|Q BAәm[=u -`s=)yun۰[,t2ꛃ)kŪ,η|ܿӷb~a,$-BZW@e:.-TnH0n3HJ4S>v9pշO͙~=}g]mm
?ڇ[n/EM]AUg-vf(sma5oMrg_B=lpuI]ޕVrgvyT]c~m km?CmfVZ!XzIþ9@)b,UT*NB#<x0cP]$8˃*6⺀uTq3'&puCմ6r:6|HwCdmvdt(X(!Y0y˦_"d@ud`Ju -[OiJHY("Q6*Ri4p$+˘A
VyjLS.MTǍddX,cNF"GE[
,!?zz*h 9AܿjF>ݟ8 TR5nTCm{C[;XUIaV`KkW=κy:azat.X4M:Xs|xÛ}7\<:"Wʒ) -SX#)#G=#l&ɣ LO,R$|P#T3==K5rVh#0G=߁0شz {:ua"˘&Ԣ$ Y2Q8D2a+T@I$AP"j8A="Y9(R(8˞'Q'c -5\ukd
æKez$G蹼'LJ<@ !iJYbڌ`LP)uqq.畓bHd -?Yv40?uv$u$侀c7ytabO:M3(0)so*CG4 -endstream -endobj -1074 0 obj << -/Type /Page -/Contents 1075 0 R -/Resources 1073 0 R -/MediaBox [0 0 612 792] -/Parent 1072 0 R ->> endobj -1076 0 obj << -/D [1074 0 R /XYZ 71 721 null] ->> endobj -253 0 obj << -/D [1074 0 R /XYZ 72 720 null] ->> endobj -257 0 obj << -/D [1074 0 R /XYZ 72 420.372 null] ->> endobj -1073 0 obj << -/Font << /F28 483 0 R /F8 481 0 R /F29 976 0 R /F14 480 0 R /F30 649 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1081 0 obj << -/Length 2795 -/Filter /FlateDecode ->> -stream -xڭYɒܸ+*P$nIQ>x.(qҭ;7p+vKrR$`"eև7]xYi]&|}E PPyQ7a
?n5Ǟ)'hylKw]e1<`;w^f/Mi?^L}S{}SFjofrbԾ;hzE4BHC2(}YXgdZ|À.lL_CSnGeV 5@g&s@չuFLc19,?SZ뱞әeZ/DA%"` ْr+Vɾ7E()_zLLK!kZgB//$-khq/,-hJMUYe1"3 -řc>sgK<a4SJ jhCߋq -sHNWQ|ad&<P(pqۥ),f?*x+](2byei
?+wZ^69y,<g* -G߰e%\N8['k -~WMj%VH<1ϕurO<sKyeql -Q!SX|lFpJ -WQz| z(ps1:MFFBma
iE,c :_(Ō6hj嫢3\I0H&Ѯvt,FbRU+ -5к'v{i(
}[QA/$B?oH_jA%ӹ @O\Cȷ,d-Y4w.M{Lu4@'a@cQnnF`}|<@@Fؾߪ -`wk@ -endstream -endobj -1080 0 obj << -/Type /Page -/Contents 1081 0 R -/Resources 1079 0 R -/MediaBox [0 0 612 792] -/Parent 1072 0 R -/Annots [ 1077 0 R 1078 0 R ] ->> endobj -1077 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [481.41 405.776 498.623 416.624] -/A << /S /GoTo /D (subsection.621) >> ->> endobj -1078 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [424.097 119.959 443.801 130.807] -/A << /S /GoTo /D (subsection.589) >> ->> endobj -1082 0 obj << -/D [1080 0 R /XYZ 71 721 null] ->> endobj -261 0 obj << -/D [1080 0 R /XYZ 72 720 null] ->> endobj -265 0 obj << -/D [1080 0 R /XYZ 72 392.831 null] ->> endobj -269 0 obj << -/D [1080 0 R /XYZ 72 288.715 null] ->> endobj -1083 0 obj << -/D [1080 0 R /XYZ 72 242.492 null] ->> endobj -1084 0 obj << -/D [1080 0 R /XYZ 72 196.671 null] ->> endobj -1079 0 obj << -/Font << /F28 483 0 R /F26 482 0 R /F8 481 0 R /F25 479 0 R /F30 649 0 R /F14 480 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1087 0 obj << -/Length 3485 -/Filter /FlateDecode ->> -stream -xڥɒ>_[*
&QRD8)ۇA4&ۺc۷櫻Dɮ4Jww]08ݕOhI7P5mU)iP绿|&vayp;xO(';ëP5K3\5Ss`l=VAyCCro"o܇dpW -h:>oQ!hJoA䎇A[W&'$R]. 8\FAtA T=F.+OX -{I6UȠ'tf*
` E -r4p|աx\>PYDg8npdelJ%S|/ -<w?2V;q0URy=AhsbKti Ȏ2XRU:MF:~P#`@H]V^58`7+o]
ҩF@vY5xiK\Yӽ=[}Tykw#HRdNFg~|#|X責3]o Lq|@Bq$i}ʮ+]iGQGKT^@!I.`$Q ^ku(W -?8{Hې8Pu҇F>qAX%ʃ -U牟Nvp`, -#PW1e`h -N!w):qᇱy#Z6qv,Iy>\Fv(X't9ZiԝK8$|6)^BɴU>塋kדJ}L8B -mK$!`4ozq4t^DB|JW"%5+Mʦd8l_^jxїt!m/?. ndr2 -endstream -endobj -1086 0 obj << -/Type /Page -/Contents 1087 0 R -/Resources 1085 0 R -/MediaBox [0 0 612 792] -/Parent 1072 0 R ->> endobj -1088 0 obj << -/D [1086 0 R /XYZ 71 721 null] ->> endobj -273 0 obj << -/D [1086 0 R /XYZ 72 720 null] ->> endobj -277 0 obj << -/D [1086 0 R /XYZ 72 430.117 null] ->> endobj -1089 0 obj << -/D [1086 0 R /XYZ 72 370.403 null] ->> endobj -1090 0 obj << -/D [1086 0 R /XYZ 72 371.245 null] ->> endobj -1091 0 obj << -/D [1086 0 R /XYZ 72 320.232 null] ->> endobj -1092 0 obj << -/D [1086 0 R /XYZ 72 321.073 null] ->> endobj -281 0 obj << -/D [1086 0 R /XYZ 72 213.981 null] ->> endobj -1085 0 obj << -/Font << /F25 479 0 R /F8 481 0 R /F26 482 0 R /F14 480 0 R /F30 649 0 R /F34 613 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1095 0 obj << -/Length 3506 -/Filter /FlateDecode ->> -stream -xn|MHMMM&Z Ƀmh.wn]~haKPpԯ.?K.Uq~9ڕ -~ -z#N@RXm#ǎE0 -~ް}*"RΤNW -zT4:x3&̢yX -\1z8u$-+g>mͤ} 1(*NHZOk3Hn}Vv|b`18@,38/%* ;b
=y0VޫGt}ꑗĆ+Ac9Ѳ#ܝJO뇐(+ƬPGyF/){Ug1= F]'aE@RձJnǢw I(~ gQw}wdgڹbFёG#1
N{~"]EyGa}wRВ<4 T=qz|'y&rEEq
(DuVb0Y8|x<xMK
-mGc2 fW3=DΜNTc}[YGaht,J!U}85t&gY#Qu*#RF$er퍅HؚᰏQܪ,T6}S`#Qhj $Bu]˒|Bq+?n/
U2O٠ -3DMQJk/YhL>!bYO -SHVsZ2h/ Mdadc'GJ-"7.,ITUy0h};J&0h8JH>tS#Wx#qQQzQ$zN crOJxXOA$~Y0u+ÅB'&W`\Y²@*tޕ#IlKn9{&Գ6unLti5/BS='vy֢{ȥP{q4-{ =kRͧalܼGo`qnϷ pă0M-fKM!%TyQ7G-# -0oj\ZɅQyL - -D@Ɏa؈dJ558ES||(|sCHbJz(^SCM65 -y"+YğS,4Cip(؍M27;4T n(2\M8w6rr8tc!N#rɕleK4+jGAäŖSH[( !ūҲzka*`(+yc8\jn]b!qc:^e453V7Ġ"fIB)3E]҃.vJ:S(f5N.%a>fX^~++
}͝0yMaH -S]515k":qzp>7 -2 }UPhxڪ&0骊qE#]]h3|lक़}E/_kCVAm=݀4$aZ} !
KAeɗ/f5;U'-(BޗQ.!p 0zb$
fNĒ7i#%#^R"o@,s1 IgBɕpޤ*&TDPaeBU1$\<wT.Qd Q"+w`q
-|i4/QY<=@qN?fHس[iʗ/n;ř<L=#q/L(Pq9>0)CorCVӄ{H`8m#\QZxgFpjg2G(Y b|}~bK˧+ -$i=KRl!R<nyul[O^f(BӖ2]U\<hmOw -JQ%t4S ^]F-_<Z5c+k,>_7s.uH-mX+>"UraiwDĿX1 N%xmSAwYzGu>z/
vݻnr9 -ށiI$;e -endstream -endobj -1094 0 obj << -/Type /Page -/Contents 1095 0 R -/Resources 1093 0 R -/MediaBox [0 0 612 792] -/Parent 1072 0 R ->> endobj -1096 0 obj << -/D [1094 0 R /XYZ 71 721 null] ->> endobj -1097 0 obj << -/D [1094 0 R /XYZ 72 720 null] ->> endobj -1098 0 obj << -/D [1094 0 R /XYZ 72 713.325 null] ->> endobj -1099 0 obj << -/D [1094 0 R /XYZ 72 649.321 null] ->> endobj -1100 0 obj << -/D [1094 0 R /XYZ 72 650.162 null] ->> endobj -1101 0 obj << -/D [1094 0 R /XYZ 72 639.203 null] ->> endobj -1102 0 obj << -/D [1094 0 R /XYZ 72 628.244 null] ->> endobj -1103 0 obj << -/D [1094 0 R /XYZ 72 617.285 null] ->> endobj -1104 0 obj << -/D [1094 0 R /XYZ 72 519.352 null] ->> endobj -1105 0 obj << -/D [1094 0 R /XYZ 72 518.257 null] ->> endobj -1106 0 obj << -/D [1094 0 R /XYZ 72 454.252 null] ->> endobj -1107 0 obj << -/D [1094 0 R /XYZ 72 455.093 null] ->> endobj -1108 0 obj << -/D [1094 0 R /XYZ 72 355.223 null] ->> endobj -1109 0 obj << -/D [1094 0 R /XYZ 72 356.065 null] ->> endobj -285 0 obj << -/D [1094 0 R /XYZ 72 284.097 null] ->> endobj -1093 0 obj << -/Font << /F30 649 0 R /F34 613 0 R /F8 481 0 R /F38 693 0 R /F36 666 0 R /F25 479 0 R /F26 482 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1112 0 obj << -/Length 3228 -/Filter /FlateDecode ->> -stream -xZ[6~_a2a)R%"l3%WIfCb3vm"sHϫ5KY]b1Cθgofo~oUc_$ -~:Ȫuཀྵ߯Ûd .Ä$%oo"Molg LNHWvUY4UhZ۵]GL0i0y(͢" u7%=jsP(ܬy迨^\āLI{%T4P - vm6'fdخ2̃ȉ((okS-(X!%u|抻qc7 DV뚔97G,즀Yc{+,&܁ \JrL+Ǵn.K_rp}#.x⯋ dX_;-b"Es5tϋW|F~K5M\2Ǻ1kf)SlNHr;2-LqX&SNx/.oL -ljMU8K'Ռ'P|0w{AhTx(Aa!9"$.a{T+AjEƪv);8tRjCkWművlIN},)4\Nyx˷6;ej3^ÔeISjS˖:hI*r8>Sd&Ӫ55Fie37^c( -}P9D:jY>#l>V*nsr ]%zRy]"RA}h^=rKj-ja87d'4l0mf鮖̕u~z+m?#f-kÄb}GUkM73(-o -Oْ*& -v -#'5-Lh
&<%XC
ziq3V*vrxzFbq
=!Civ4:@f+3<BނC}[T-yVqw t4 -6C$n38ZiC0}qwϻpM{Z.$qzƅ7߬;3= -= -$OLvp蝮P};>Ԏo0?zf5gljhgkjiqv`GĒBgx3)ggƛn>gG7 x1FCtnOrynn -endstream -endobj -1111 0 obj << -/Type /Page -/Contents 1112 0 R -/Resources 1110 0 R -/MediaBox [0 0 612 792] -/Parent 1072 0 R ->> endobj -1113 0 obj << -/D [1111 0 R /XYZ 71 721 null] ->> endobj -289 0 obj << -/D [1111 0 R /XYZ 72 720 null] ->> endobj -1114 0 obj << -/D [1111 0 R /XYZ 72 648.393 null] ->> endobj -1115 0 obj << -/D [1111 0 R /XYZ 72 649.788 null] ->> endobj -1116 0 obj << -/D [1111 0 R /XYZ 72 575.433 null] ->> endobj -1117 0 obj << -/D [1111 0 R /XYZ 72 576.827 null] ->> endobj -1118 0 obj << -/D [1111 0 R /XYZ 72 467.16 null] ->> endobj -1119 0 obj << -/D [1111 0 R /XYZ 72 468.001 null] ->> endobj -293 0 obj << -/D [1111 0 R /XYZ 72 396.505 null] ->> endobj -297 0 obj << -/D [1111 0 R /XYZ 72 295.454 null] ->> endobj -1110 0 obj << -/Font << /F25 479 0 R /F8 481 0 R /F30 649 0 R /F38 693 0 R /F28 483 0 R /F32 1120 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1124 0 obj << -/Length 3206 -/Filter /FlateDecode ->> -stream -x[ܶb|^V|SiSv)Ҵ䃼˽w$Jݽ;;@7^^=3+H]fFB9ɹ]-g?eo.vŜ"[rqk۾mo:~e^s7,n]][[|v(~`9ͪfx]utam].x%[XS_rlNRRH79Y\m^߇A^lw$Zk
|o,t9Q\̔D -5[lK>[BL(A4g{
7
>)"zh"QmqF@ Jh/"X'Cp(,|Gc͕?PuP&ҮE+=Rr'=R=MATlNWG2l/+CwQ.T;8U+kmm/&M.f_6lI# -#bPw#>\Hp -sNwrS?|˯^e]-]v_t
ï=˪Xylh܀k)&e`qo6K_u{;GBK?$,P1t#RdXy1I"j˅QSG%'^o'i;x~Uzp.DGt -"u~NL.
D$Z{j1CA8{lӔ6ES -P-;O -FFգaX{mQ~TP-!HN1"q'G -L"%<KIַ -tj,C¯rΚyF<e0O}옄aⱘ$aGpAO@~c/PK9\'f@u -9ʑ6B=Xԡ9Ym</ ;m1ui}$$aZ -8Ic\=_ۭEJf=2{}nI#*KyL
mc&}~o{n+Wdʠ[tߥ%'$ -)dd憪4 [xHQ.M\]*;H[smdpg.R7깢)~lz^n}CDn}?v]
d&7n#qc]I=&:qȘ"mcwv1Yq -h%9q@uXpHi=ѭhv}_w|)ʄjܹw˰7 - _'(S$Z~iыަvB!*÷}Xbd/ڡ76"4e(a:kq~2T -0p&t\%K4\sr)
.)v@ -)6pރ;ކ+O)/,b$RG* L(XMeD1Hil ^M2bxouW";Zҥ%Lx[PmM.k@9;am XL/qx -ݝ.QU)ki
;Ԯ#ѐNP>)XZ}Cn\ -i|*@pB$9/d
<0omE-}^TfQK"JtֿKӔ͆>Ǔ -rʳ+ߴ݅A. 1%13_ ,1B *`ԡ'oo7uh~ybv#a]"Nz.Ф'"a|C|Y0r&SMHжqY8'6EB.ΜBD$ -$$A)}>/Wh W^ݮ -0|0 -tH&`<=fIZG*POԱB .n3|luHc - -endstream -endobj -1123 0 obj << -/Type /Page -/Contents 1124 0 R -/Resources 1122 0 R -/MediaBox [0 0 612 792] -/Parent 1155 0 R -/Annots [ 1121 0 R ] ->> endobj -1121 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [91.483 438.772 106.205 450.727] -/A << /S /GoTo /D (subsection.484) >> ->> endobj -1125 0 obj << -/D [1123 0 R /XYZ 71 721 null] ->> endobj -1126 0 obj << -/D [1123 0 R /XYZ 72 598.787 null] ->> endobj -1127 0 obj << -/D [1123 0 R /XYZ 72 597.691 null] ->> endobj -1128 0 obj << -/D [1123 0 R /XYZ 72 586.732 null] ->> endobj -1129 0 obj << -/D [1123 0 R /XYZ 72 575.774 null] ->> endobj -1130 0 obj << -/D [1123 0 R /XYZ 72 564.815 null] ->> endobj -1131 0 obj << -/D [1123 0 R /XYZ 72 553.856 null] ->> endobj -1132 0 obj << -/D [1123 0 R /XYZ 72 542.897 null] ->> endobj -1133 0 obj << -/D [1123 0 R /XYZ 72 531.938 null] ->> endobj -1134 0 obj << -/D [1123 0 R /XYZ 72 520.979 null] ->> endobj -1135 0 obj << -/D [1123 0 R /XYZ 72 510.02 null] ->> endobj -1136 0 obj << -/D [1123 0 R /XYZ 72 422.672 null] ->> endobj -1137 0 obj << -/D [1123 0 R /XYZ 72 423.513 null] ->> endobj -1138 0 obj << -/D [1123 0 R /XYZ 72 412.554 null] ->> endobj -1139 0 obj << -/D [1123 0 R /XYZ 72 401.595 null] ->> endobj -1140 0 obj << -/D [1123 0 R /XYZ 72 390.636 null] ->> endobj -1141 0 obj << -/D [1123 0 R /XYZ 72 243.512 null] ->> endobj -1142 0 obj << -/D [1123 0 R /XYZ 72 244.354 null] ->> endobj -1143 0 obj << -/D [1123 0 R /XYZ 72 233.395 null] ->> endobj -1144 0 obj << -/D [1123 0 R /XYZ 72 222.436 null] ->> endobj -1145 0 obj << -/D [1123 0 R /XYZ 72 211.477 null] ->> endobj -1146 0 obj << -/D [1123 0 R /XYZ 72 200.518 null] ->> endobj -1147 0 obj << -/D [1123 0 R /XYZ 72 189.559 null] ->> endobj -1148 0 obj << -/D [1123 0 R /XYZ 72 178.6 null] ->> endobj -1149 0 obj << -/D [1123 0 R /XYZ 72 167.641 null] ->> endobj -1150 0 obj << -/D [1123 0 R /XYZ 72 156.682 null] ->> endobj -1151 0 obj << -/D [1123 0 R /XYZ 72 145.724 null] ->> endobj -1152 0 obj << -/D [1123 0 R /XYZ 72 134.765 null] ->> endobj -1153 0 obj << -/D [1123 0 R /XYZ 72 123.806 null] ->> endobj -1154 0 obj << -/D [1123 0 R /XYZ 72 112.847 null] ->> endobj -1122 0 obj << -/Font << /F8 481 0 R /F32 1120 0 R /F38 693 0 R /F30 649 0 R /F34 613 0 R /F36 666 0 R /F14 480 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1160 0 obj << -/Length 2449 -/Filter /FlateDecode ->> -stream -xYMsW0>
L3XǮʦnW7LJ19&Kڙίk`>IP"撃" 4|yJg9qƭOefǤ|d(x0'|!KMTH
F\/ /MV4KI~[4EU45~JU}]N32oݳ#B2#%>9s^a`fYkfdкFv[6ݎ0#m~+y_3VHÜ5]6C -з4ei⏟"t,UUdIˤK;ۢ"JPcσ[mdEᘕ1c`_$K{'bD2vfy_GVL=b])#O!!ȸ!'3='H S@$Y8*$wߊ t= 2}#g)tq=+S-| 9uMf15s%/wHml-1͘/0_Șc?˹9LZD -+>Fsi{fDT,&T)s:U;2㘐bU
mGCz)RQ똛)s2{"xDtOS(sR) eHsv,7;.AS)öCVOC3qĬD`-lzw[l1as@$.c\(%Mlu<j\i|no./~#313rS0'>[aGrvnaB^~{,2i}n` I?_N':GmWVETzl(4ϑT`=V2zWmIstKCDU'$Ȑ9
27bUӾ5>Ʌ<+2taC4 WlS -H@JR\X8T@"zgjA]SPA1T]^[j[u/A+-˜:SFŠw~[byǽɸ*+]q>|tA)-J-71
ͪ0ݣ%Or*HPp(y*o 3AxԴtFXhmeR>2jNR -٦y2P*!?,SDLX<6|BO;E~)ZZ" DɁfl
\ -\ |7vuсX/:B -y`aԏA d` 4 N$`ֶ4>$(em8idɻ*,Te ڣ-M@Y0/WEk퓼B -Ah]lo.hiB~@p?r)}~A<z
p"!']Teݞqir]IMwKp*JV˯@kG}rQL@I_*;3pq
2zؤ^Uyw~|n{6R`7@7T5 ŏ6`5Ϗ]"4qB4lY1näjEGF"SׅB -w(MrusZD -W=<UR7 -]̤ånHD'sU^_[.i{qn$w融2NzFV_
TvJ-Q.cIYG^J Rd=BHGpzM/f7K,-JKn%&JT-!L6QZoUuzX:|ZFamhKbv>0Da,Vm9Cf[RXB9Q=, -4%O1z/nRɳJAum#_b3Ii6<]ק9*r3XVJ7s[~fT]'!Cg
J$TzңQ'S9JBں2WUBthcyW.m7Q8DDh|"nؕ~[84atXFƗ!յ.HU-AFm^WE3] !h[bG}Bi|npw^m!7|j͜nB4\Ay%|HILy*|n7@0D[_PG Jz>jaӑ+Tznq_K8S@v*uV'FЀ$:.]`TL_oUKO~5ṏ·!B#FQ˼ "bҡRʗg%?Y -endstream -endobj -1159 0 obj << -/Type /Page -/Contents 1160 0 R -/Resources 1158 0 R -/MediaBox [0 0 612 792] -/Parent 1155 0 R -/Annots [ 1156 0 R 1157 0 R ] ->> endobj -1156 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [494.443 324.831 509.166 336.786] -/A << /S /GoTo /D (subsection.484) >> ->> endobj -1157 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [277.129 172.004 291.852 183.959] -/A << /S /GoTo /D (subsection.484) >> ->> endobj -1161 0 obj << -/D [1159 0 R /XYZ 71 721 null] ->> endobj -1162 0 obj << -/D [1159 0 R /XYZ 72 720.996 null] ->> endobj -1163 0 obj << -/D [1159 0 R /XYZ 72 710.037 null] ->> endobj -1164 0 obj << -/D [1159 0 R /XYZ 72 699.078 null] ->> endobj -1165 0 obj << -/D [1159 0 R /XYZ 72 688.12 null] ->> endobj -1166 0 obj << -/D [1159 0 R /XYZ 72 677.161 null] ->> endobj -1167 0 obj << -/D [1159 0 R /XYZ 72 666.202 null] ->> endobj -1168 0 obj << -/D [1159 0 R /XYZ 72 655.243 null] ->> endobj -1169 0 obj << -/D [1159 0 R /XYZ 72 644.284 null] ->> endobj -1170 0 obj << -/D [1159 0 R /XYZ 72 633.325 null] ->> endobj -1171 0 obj << -/D [1159 0 R /XYZ 72 622.366 null] ->> endobj -1172 0 obj << -/D [1159 0 R /XYZ 72 611.407 null] ->> endobj -1173 0 obj << -/D [1159 0 R /XYZ 72 600.448 null] ->> endobj -1174 0 obj << -/D [1159 0 R /XYZ 72 589.489 null] ->> endobj -1175 0 obj << -/D [1159 0 R /XYZ 72 578.531 null] ->> endobj -1176 0 obj << -/D [1159 0 R /XYZ 72 567.572 null] ->> endobj -1177 0 obj << -/D [1159 0 R /XYZ 72 556.613 null] ->> endobj -1178 0 obj << -/D [1159 0 R /XYZ 72 545.654 null] ->> endobj -1179 0 obj << -/D [1159 0 R /XYZ 72 534.695 null] ->> endobj -1180 0 obj << -/D [1159 0 R /XYZ 72 523.736 null] ->> endobj -1181 0 obj << -/D [1159 0 R /XYZ 72 512.777 null] ->> endobj -1182 0 obj << -/D [1159 0 R /XYZ 72 501.818 null] ->> endobj -1183 0 obj << -/D [1159 0 R /XYZ 72 490.859 null] ->> endobj -1184 0 obj << -/D [1159 0 R /XYZ 72 479.9 null] ->> endobj -1185 0 obj << -/D [1159 0 R /XYZ 72 427.851 null] ->> endobj -1186 0 obj << -/D [1159 0 R /XYZ 72 428.692 null] ->> endobj -1187 0 obj << -/D [1159 0 R /XYZ 72 417.734 null] ->> endobj -1188 0 obj << -/D [1159 0 R /XYZ 72 406.775 null] ->> endobj -301 0 obj << -/D [1159 0 R /XYZ 72 358.911 null] ->> endobj -1189 0 obj << -/D [1159 0 R /XYZ 72 308.448 null] ->> endobj -1190 0 obj << -/D [1159 0 R /XYZ 72 309.289 null] ->> endobj -1191 0 obj << -/D [1159 0 R /XYZ 72 298.33 null] ->> endobj -1192 0 obj << -/D [1159 0 R /XYZ 72 287.371 null] ->> endobj -1193 0 obj << -/D [1159 0 R /XYZ 72 276.412 null] ->> endobj -1194 0 obj << -/D [1159 0 R /XYZ 72 265.453 null] ->> endobj -1195 0 obj << -/D [1159 0 R /XYZ 72 254.494 null] ->> endobj -1196 0 obj << -/D [1159 0 R /XYZ 72 243.535 null] ->> endobj -305 0 obj << -/D [1159 0 R /XYZ 72 149.595 null] ->> endobj -1158 0 obj << -/Font << /F34 613 0 R /F30 649 0 R /F38 693 0 R /F8 481 0 R /F36 666 0 R /F28 483 0 R /F37 677 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1201 0 obj << -/Length 3221 -/Filter /FlateDecode ->> -stream -xڕZIsܺ_iT塹[.)?]q>J!B38z>\rEnt,nn& LN'I6݃=tSզ۸ؽAmۏIxSmۢnBg|EeN_4QnG۬3OxiC;g nJݧަLpڛA#3t$H}e25$NolopcƮMDX Nᖿc!ٳ<B#K B#jEz0]˲_ndĖ^xXEH/|*r8vz6϶A-g烡.? -h!M"8UT5Kmjw~xtEʸqcSl7LPb <(7Dq-ծǣ>bs\Р(;WE -AI3~FML8n'8Kw -R - -,csb>pВ)ȵp^ -F:Y+_xO#hH/-TBU8CXUBxjb1<4_(h~>vV?y|uI%>`-8_אuU7@w
.NȇvhA4
Fr<5سll#r`9Xoqy{ ۀ{~7+=&[7/2I p ?g -\9_r^ч'ۊ{p1Yڄ\߱1/ƿۃ.f`x660/a{J?aТpwlpH4hƮ7["PЇIO8
g^l_I/t* OYt>p/]ġ"@2O>rSz3\ȢBH![}+q1\mm=( -SܙJJy,4jA'GB}X1ճ0ܛ0^|w?<ɖE̦/Z?rn
zP(Qؓ^me<rcv*'o[$HR
#Gy;ն,D&0s۾RX;Ew=+
)⚈2Pbݪ
^'8z}@G[W.!V }ע9bCEw/3]0Fy0)2Jd7%5XQBFfRT Sl-$(K*}(Þ=WSq\v!a#O rz9RPUOϴeb -2$n5S~Xupld,iy/:vJ\;BV6ۣ*v\@#Lh%I_ ޒ(݅p-X -wpe2Ht(m5$).<%$.̡=6YW]Wyh[bɃ(Bԓi6N2AjuPh@|-82mw4nLr) 07NKM][d]~b_a#v4gvD4 R|~Jz -FjF]0g~ꗢW8AyR[gRl6ѯxıEkn
q0LliSި
L~!3T٦4U -9@ xjЏ~9 -+BqQi' Z -ShxzhGWa!rb^`9*f?}<>y%1Q^fHO/cv߱9|Ortmt62_p?0({]d}nJDzqY&5t#eQ"d
.*j14&-%QLKW8\{Q&[)܀wQ}drԎ
@T 'ӸC6nBxؓMlźuCιuiqeVwrV0x\h=yš"x.rBj8/l7Sb]`ȵUJ Z,eW"94|>Y../x
r[yI8MP*FviPFa]JEr -&6xa-pFZ,.Ȯ4r13KhV~h/Dtf/,-$MZ劵*s/Fݘ08->k~f,ss -endstream -endobj -1200 0 obj << -/Type /Page -/Contents 1201 0 R -/Resources 1199 0 R -/MediaBox [0 0 612 792] -/Parent 1155 0 R -/Annots [ 1197 0 R 1198 0 R ] ->> endobj -1197 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [294.693 263.863 309.416 274.712] -/A << /S /GoTo /D (subsection.518) >> ->> endobj -1198 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [252.933 239.953 267.656 250.801] -/A << /S /GoTo /D (subsection.303) >> ->> endobj -1202 0 obj << -/D [1200 0 R /XYZ 71 721 null] ->> endobj -309 0 obj << -/D [1200 0 R /XYZ 72 622.428 null] ->> endobj -313 0 obj << -/D [1200 0 R /XYZ 72 516.375 null] ->> endobj -317 0 obj << -/D [1200 0 R /XYZ 72 227.009 null] ->> endobj -1199 0 obj << -/Font << /F8 481 0 R /F30 649 0 R /F28 483 0 R /F26 482 0 R /F34 613 0 R /F38 693 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1205 0 obj << -/Length 2435 -/Filter /FlateDecode ->> -stream -xZݓ۸
߿ogHt&L7G6mkbK>I/@P_^9&lD? /^f9JzYctv,/8*{U%nU^l(cݔ.jlPϻ#.첺zo2ƙق&Yif밑DzOy1&j\Ζ2+>@~hJ@R"qR4HK/ΊUiG{rU^eoFFl0`BúRir9H)#2!EuGe<#0$cn,2,ϴFAZ0u0*6Cp.|K+ /2)ȷn%(b]v~;]-VK\o8PkD͖_~g+1iSg6_Lf2K8i3c4ipB':i}xPxD -˨7sa,+6,2fMX ->_[YeϋA2_MHM/Pj;VĴ2e1W7`:d 0-9rPM֞`fXl:f -]WULa;]x}PQ -Mb
b`D?9|.G:G7P$ -zr nٸ]TfێAG -$*ihdBՋ&>j_*uA"XC]}Nj";>PwUNaC=@2/1i71{^SWF=W("XSM1яi@NCs8a\hfwTuYEx}F -z7ytB~$$;ɼ^|zȮƥT0ޟ)J+z"o;RAyb'T<^qE]ڝh/& g|ArϙCnnqr}*'zk&J'Ba[.t!,a2{]څ݆&)si*hThTTd{W`/r -endstream -endobj -1204 0 obj << -/Type /Page -/Contents 1205 0 R -/Resources 1203 0 R -/MediaBox [0 0 612 792] -/Parent 1155 0 R ->> endobj -1206 0 obj << -/D [1204 0 R /XYZ 71 721 null] ->> endobj -321 0 obj << -/D [1204 0 R /XYZ 72 720 null] ->> endobj -1207 0 obj << -/D [1204 0 R /XYZ 72 661.003 null] ->> endobj -1208 0 obj << -/D [1204 0 R /XYZ 72 661.845 null] ->> endobj -1209 0 obj << -/D [1204 0 R /XYZ 72 650.886 null] ->> endobj -1210 0 obj << -/D [1204 0 R /XYZ 72 639.927 null] ->> endobj -1211 0 obj << -/D [1204 0 R /XYZ 72 628.968 null] ->> endobj -1212 0 obj << -/D [1204 0 R /XYZ 72 618.009 null] ->> endobj -1213 0 obj << -/D [1204 0 R /XYZ 72 607.05 null] ->> endobj -1214 0 obj << -/D [1204 0 R /XYZ 72 596.091 null] ->> endobj -1215 0 obj << -/D [1204 0 R /XYZ 72 585.132 null] ->> endobj -1216 0 obj << -/D [1204 0 R /XYZ 72 574.173 null] ->> endobj -1217 0 obj << -/D [1204 0 R /XYZ 72 563.214 null] ->> endobj -1218 0 obj << -/D [1204 0 R /XYZ 72 552.256 null] ->> endobj -1219 0 obj << -/D [1204 0 R /XYZ 72 541.297 null] ->> endobj -1220 0 obj << -/D [1204 0 R /XYZ 72 530.338 null] ->> endobj -1221 0 obj << -/D [1204 0 R /XYZ 72 519.379 null] ->> endobj -1222 0 obj << -/D [1204 0 R /XYZ 72 508.42 null] ->> endobj -1223 0 obj << -/D [1204 0 R /XYZ 72 497.461 null] ->> endobj -1224 0 obj << -/D [1204 0 R /XYZ 72 486.502 null] ->> endobj -1225 0 obj << -/D [1204 0 R /XYZ 72 475.543 null] ->> endobj -1226 0 obj << -/D [1204 0 R /XYZ 72 464.584 null] ->> endobj -1227 0 obj << -/D [1204 0 R /XYZ 72 453.625 null] ->> endobj -1228 0 obj << -/D [1204 0 R /XYZ 72 442.666 null] ->> endobj -1229 0 obj << -/D [1204 0 R /XYZ 72 431.708 null] ->> endobj -1230 0 obj << -/D [1204 0 R /XYZ 72 420.749 null] ->> endobj -1231 0 obj << -/D [1204 0 R /XYZ 72 409.79 null] ->> endobj -1232 0 obj << -/D [1204 0 R /XYZ 72 398.831 null] ->> endobj -1233 0 obj << -/D [1204 0 R /XYZ 72 387.872 null] ->> endobj -1234 0 obj << -/D [1204 0 R /XYZ 72 376.913 null] ->> endobj -1235 0 obj << -/D [1204 0 R /XYZ 72 365.954 null] ->> endobj -1236 0 obj << -/D [1204 0 R /XYZ 72 354.995 null] ->> endobj -1237 0 obj << -/D [1204 0 R /XYZ 72 344.036 null] ->> endobj -1238 0 obj << -/D [1204 0 R /XYZ 72 333.077 null] ->> endobj -1239 0 obj << -/D [1204 0 R /XYZ 72 322.119 null] ->> endobj -325 0 obj << -/D [1204 0 R /XYZ 72 158.135 null] ->> endobj -1203 0 obj << -/Font << /F28 483 0 R /F8 481 0 R /F34 613 0 R /F30 649 0 R /F38 693 0 R /F36 666 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1243 0 obj << -/Length 3006 -/Filter /FlateDecode ->> -stream -xڭYY~_!lB!n6٤M8nx(%qM$ק!q,O쮾7*T*KܘUQvu_ܟ\֛8&OZgA6x75HůNbzw*lZ&縮/6:]mfNME$0QЕ -Vq6:s$rf^]劖僊Mu98ޭ7*KeV
X}
3M{^F( U'"KՃl:/;ЗMݽ@Ftx*w{NE[;S6qC+I{WTz,ltCxKwZ9?WIY̛F&M`unO2FsαvHЀxc*AL.:QʒDzW;Vtɒȹ>[܂zh3p^si1<tL_O9_Eȟ%
OL"Wu{
C^<D)s}Z&xFq@sJ7@JVm3m ;oNνt4M2R [&Y"hj/QAy4QtY֟Quݠuؔ-<<qM9 -1?C6YZ{#;wd70?kf,(|}](
]xLOArG+(Bvl9Fo(Aݮ1
_o#OdsVbu;CF>@"r`;thV9@Ȯ4̮v_>F=qiyeLF9Ɖj?w#ڙE܆Q$3Ru -0!WUdIU/LBD` Mx @6';ڎ7c?(Wk -l>y\nŞXji@hhl=Y71o*8ɨ$N1X11;&~!,iY`;VdBfvUO>"d
}Jj̨u
_fhHh{Yg-Ѳ5#gSQer - #ՐaLyb3%9
Qw٘U-@͇ @Fmp|zk*?-^P@lC{jr8|'6U4ئi4kƀB6j-ڄGl:/FR۶hCSUTUSzNqb˔)[E*:Dzu&Ejn47 3&ț^lpGSMEhNh01i$HEmeEgwȟ#!~ĉIa86\ %:!+).\uOΒ[c^!LwO!1cY릃'_D&cI#ϙ#JԈ6wg"V2EɢsTz,3)KOn7[M'|7#b. -7FH&u 1Cè!#s% -endstream -endobj -1242 0 obj << -/Type /Page -/Contents 1243 0 R -/Resources 1241 0 R -/MediaBox [0 0 612 792] -/Parent 1155 0 R -/Annots [ 1240 0 R ] ->> endobj -1240 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [376.232 206.625 390.954 218.58] -/A << /S /GoTo /D (subsection.484) >> ->> endobj -1244 0 obj << -/D [1242 0 R /XYZ 71 721 null] ->> endobj -1245 0 obj << -/D [1242 0 R /XYZ 72 704.115 null] ->> endobj -1246 0 obj << -/D [1242 0 R /XYZ 72 648.324 null] ->> endobj -1247 0 obj << -/D [1242 0 R /XYZ 72 564.583 null] ->> endobj -1248 0 obj << -/D [1242 0 R /XYZ 96.907 563.487 null] ->> endobj -1249 0 obj << -/D [1242 0 R /XYZ 96.907 552.528 null] ->> endobj -1250 0 obj << -/D [1242 0 R /XYZ 96.907 541.569 null] ->> endobj -1251 0 obj << -/D [1242 0 R /XYZ 96.907 530.61 null] ->> endobj -1252 0 obj << -/D [1242 0 R /XYZ 96.907 519.651 null] ->> endobj -1253 0 obj << -/D [1242 0 R /XYZ 96.907 508.692 null] ->> endobj -1254 0 obj << -/D [1242 0 R /XYZ 96.907 497.734 null] ->> endobj -1255 0 obj << -/D [1242 0 R /XYZ 96.907 486.775 null] ->> endobj -1256 0 obj << -/D [1242 0 R /XYZ 96.907 475.816 null] ->> endobj -1257 0 obj << -/D [1242 0 R /XYZ 96.907 464.857 null] ->> endobj -1258 0 obj << -/D [1242 0 R /XYZ 96.907 453.898 null] ->> endobj -1259 0 obj << -/D [1242 0 R /XYZ 96.907 442.939 null] ->> endobj -1260 0 obj << -/D [1242 0 R /XYZ 72 311.189 null] ->> endobj -1261 0 obj << -/D [1242 0 R /XYZ 96.907 312.03 null] ->> endobj -1262 0 obj << -/D [1242 0 R /XYZ 96.907 301.071 null] ->> endobj -1263 0 obj << -/D [1242 0 R /XYZ 96.907 290.112 null] ->> endobj -1264 0 obj << -/D [1242 0 R /XYZ 72 224.115 null] ->> endobj -329 0 obj << -/D [1242 0 R /XYZ 72 170.324 null] ->> endobj -1241 0 obj << -/Font << /F8 481 0 R /F30 649 0 R /F29 976 0 R /F34 613 0 R /F38 693 0 R /F36 666 0 R /F37 677 0 R /F28 483 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1267 0 obj << -/Length 2264 -/Filter /FlateDecode ->> -stream -xYˎWFQ$]d&AF 7LwWInw}XEe2+NO}RlʸlpY\*E'2<7Mo;۵~]h?(GD`'ՠoETը0Rǡ7Nſ@<h{Ljb)Do۴rK;W%,\zHDKhMO/[EUcQq?|ЯاiBl̨'s= -ʖ:sOP=R |UTe!u_=P|6G3Xaz.]=vTs /%3JjXߓ̙ -'{Ul=fε;* zDg=qZs?Hov8WO`kd!jH_g'>><(J,8 -A~ ^Ҹ q[˖XMA8;ɫOq|JEEI3
"Ji.20_.:r`E~?cl'Tݹ"Jj0P'ܥ -?`ˋSWUa0ާ!v~ Oƞl-)}{m}2:\8O[}87l߽| 8\/*//#xW)TeŽrs o> 9HPAGrjDԠq3`/qX<a7V_'aQҴy?UOCacΟ qΟLԘUF̀?s{VK?K`'[6{sl7~.jO?()teg"]倿H:P]VJu^NX_mt;}qkS>_՞(hɆYNʒY7RBGPoՠs[s[q*Op( -K-lr~I7Y2~PƷV]Su rIMK=CR@EYP0 -Tgѭ8w:V:FX -3a5aS8oI>=>f_*diht#OݸW/w<_X+*z%x-9q(XK d}>?74/l -endstream -endobj -1266 0 obj << -/Type /Page -/Contents 1267 0 R -/Resources 1265 0 R -/MediaBox [0 0 612 792] -/Parent 1155 0 R ->> endobj -1268 0 obj << -/D [1266 0 R /XYZ 71 721 null] ->> endobj -333 0 obj << -/D [1266 0 R /XYZ 72 633.346 null] ->> endobj -337 0 obj << -/D [1266 0 R /XYZ 72 543.267 null] ->> endobj -341 0 obj << -/D [1266 0 R /XYZ 72 426.169 null] ->> endobj -1269 0 obj << -/D [1266 0 R /XYZ 72 409.717 null] ->> endobj -1270 0 obj << -/D [1266 0 R /XYZ 72 310.511 null] ->> endobj -1271 0 obj << -/D [1266 0 R /XYZ 72 235.023 null] ->> endobj -1272 0 obj << -/D [1266 0 R /XYZ 72 111.906 null] ->> endobj -1265 0 obj << -/Font << /F8 481 0 R /F26 482 0 R /F30 649 0 R /F28 483 0 R /F14 480 0 R /F25 479 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1279 0 obj << -/Length 2801 -/Filter /FlateDecode ->> -stream -xYIsܸWt͉rS\7DST&㲕*DՌd -m`-ʾDayd*$vE+(bwM_orԛn}_KoZX]ēLgNI`7{Icv@7{=2a32cik
oyGdoE&< -E0:fJ;mp58cNș"'n2NipnOD<"t5$L86v;`wXyڍUXYWCcl=ƕa2NJÓN,L-^〲|m08cՎL;U|%þLC%}e0, -7MTsme1XӲ/2*n4aaOzF:N$L:Q q8d|:bpg;9z&e^COkc0Zr$(=ܥ<2ƍˊ$b1E,}n&^ -O~}qI5,Տpq8qﭝyvdx g<m,tLHA9 p؝ -[Y@)7Xd~#}¶v8 ilӬ/:QtdIl=pN*ZcYJn2P9f3ӈf^B7/2tqS.pY,J2y ?pd]T##J1
r<]'-5CE|23PIQB閮;ZJ-Z_#Y\Nq'qEMFsa.;jdC9cIqQ"$tg&qHs䯊*{*åҨ|CP(#j{k-v)SHSLi+a\љ$̪Lud2/ \j\zZπZ۩@*8Tqv i7E<GE~Ei:}zz -1<Ct-b۸_%EZ17nkV>.~pg\V\d=,C!_|J^QrYX.^ArTm/ǯXͤK998jpea0Zeʽ;u@M1{ -/*
hX3q(SezNep7ns5LvC\%A
UpYŮ%K"XG)`Pν/\ L@
5zʅ찗%TEYȯe>HcNF$FAT(K!ӽ -F6+#Xo0WAOK -d-|H9ϗb@lE(O{ cw8>vFӃF>U%xn nN&'?3%t59p}(1^m -d]HYb>a"=~jRS;[\Z|5y$}c"9?[J/hmOkͩ{|* -7UR3`>y0EӯYH(z"0ci
4G.W~'J
poBY6\;ؙ#:ث\\Y]n -B -HY2w`.[y~?{:H#`c8J(Vrttʷc/P>oeAH$a/,I}V\[pcr %*+uL+@WuyB;Baj˔? L -endstream -endobj -1278 0 obj << -/Type /Page -/Contents 1279 0 R -/Resources 1277 0 R -/MediaBox [0 0 612 792] -/Parent 1286 0 R -/Annots [ 1273 0 R 1274 0 R 1283 0 R 1275 0 R 1284 0 R 1276 0 R 1285 0 R ] ->> endobj -1273 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[0 1 1] -/Rect [124.206 406.322 304.03 418.277] -/Subtype/Link/A<</Type/Action/S/URI/URI(http://www.codeplex.com/Sandcastle)>> ->> endobj -1274 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[0 1 1] -/Rect [371.135 212.355 540.996 223.48] -/Subtype/Link/A<</Type/Action/S/URI/URI(http://msdn.microsoft.com/en-us/devlabs/dd491992.aspx)>> ->> endobj -1283 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[0 1 1] -/Rect [95.91 200.4 207.74 211.525] -/Subtype/Link/A<</Type/Action/S/URI/URI(http://msdn.microsoft.com/en-us/devlabs/dd491992.aspx)>> ->> endobj -1275 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[0 1 1] -/Rect [371.135 168.243 540.996 180.198] -/Subtype/Link/A<</Type/Action/S/URI/URI(http://msdn.microsoft.com/en-us/devlabs/dd491992.aspx)>> ->> endobj -1284 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[0 1 1] -/Rect [95.91 156.565 207.74 167.689] -/Subtype/Link/A<</Type/Action/S/URI/URI(http://msdn.microsoft.com/en-us/devlabs/dd491992.aspx)>> ->> endobj -1276 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[0 1 1] -/Rect [455.318 124.407 540.996 136.363] -/Subtype/Link/A<</Type/Action/S/URI/URI(http://research.microsoft.com/contracts)>> ->> endobj -1285 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[0 1 1] -/Rect [95.91 114.113 218.201 123.854] -/Subtype/Link/A<</Type/Action/S/URI/URI(http://research.microsoft.com/contracts)>> ->> endobj -1280 0 obj << -/D [1278 0 R /XYZ 71 721 null] ->> endobj -1281 0 obj << -/D [1278 0 R /XYZ 72 720 null] ->> endobj -345 0 obj << -/D [1278 0 R /XYZ 72 662.279 null] ->> endobj -349 0 obj << -/D [1278 0 R /XYZ 72 558.218 null] ->> endobj -353 0 obj << -/D [1278 0 R /XYZ 72 440.209 null] ->> endobj -357 0 obj << -/D [1278 0 R /XYZ 72 285.262 null] ->> endobj -1277 0 obj << -/Font << /F25 479 0 R /F8 481 0 R /F14 480 0 R /F28 483 0 R /F26 482 0 R /F30 649 0 R /F40 1282 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1290 0 obj << -/Length 2310 -/Filter /FlateDecode ->> -stream -xڭXIW -hp_ ,ƴsP"KRVHmlTWo^[c/@I.E.W~-_^*\EY3^PEx_\Eyg{\-đʫ'y2-G7{jo.0*-wMg2I=eAd\s{H;#2ϔ\;ƺd[ ,Y -ӳڳ2=+& -OH3zU;ف=PPQ75O憞dmI}ۑDoP
n.{k:<잔SXpD>SdHp M2M0V5-rK[1i==
dֽ!7a:Y$CDeBJ;hY,͖GtPdդNn1kYHs2pyFrp2nU`'{vF8W^*$ )%L;Jh$OuW,_ViL2JTc-]۵[ * -lz
iK -}BSCeOf%6MB52ѭąGݿ%$)E<hL41!%CG5/_2<VA -q/'TfŌ2R!j ~p
W081"kabm1͕NEn{%26[L8LÖpt['I6DUu'`eyachQV8R8g!+D]X=11)?*5;@Eix?mͮv(|pS<VEp:NnZɀ7VPX/T?lR}1 -Uu߆)W;sz^ɻƎ%o//Θ@1/X$wP#d[ "\&>HBuUה:7:ʬ^xF\_y -endstream -endobj -1289 0 obj << -/Type /Page -/Contents 1290 0 R -/Resources 1288 0 R -/MediaBox [0 0 612 792] -/Parent 1286 0 R ->> endobj -1291 0 obj << -/D [1289 0 R /XYZ 71 721 null] ->> endobj -361 0 obj << -/D [1289 0 R /XYZ 72 720 null] ->> endobj -365 0 obj << -/D [1289 0 R /XYZ 72 631.934 null] ->> endobj -369 0 obj << -/D [1289 0 R /XYZ 72 358.508 null] ->> endobj -373 0 obj << -/D [1289 0 R /XYZ 72 298.65 null] ->> endobj -377 0 obj << -/D [1289 0 R /XYZ 72 270.552 null] ->> endobj -381 0 obj << -/D [1289 0 R /XYZ 72 252.96 null] ->> endobj -1288 0 obj << -/Font << /F28 483 0 R /F8 481 0 R /F14 480 0 R /F30 649 0 R /F36 666 0 R /F25 479 0 R /F26 482 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1295 0 obj << -/Length 2629 -/Filter /FlateDecode ->> -stream -xYݏ۸߿Ke`9`Iд!]\AYrΐ,
PŦpf8^]\erT15i64&1׳ƔRG9g2tU<"S<8OUe^nwz6g{x0gITukp\U%ηuj[77wnk7X}Qȳ=YӘ,x_|7_ʻK͙vh4=۬Gf=5ê-0R:[,/QnA?;yTk2ͽM2dO[9Agb2_(TtU:LSj`:,Y@|SVHϴ:i= ]".*+=z$(..~`dzS tLScZ?Y%<d! ɑ$vxsff*/?;"qT4f=m[-$7rWWf]]oAݕ)j\%YzH9hgjC(cLH&n_0>Zclmv6ƜsLJ$=k<eq 7ULD
6+IS79N~|Q/|wN5nf[a?ч0.]|@bU\V].~#a4=XLſ.^a&ȫIbK^cg?tk b"ދ3j vn>5`MV~?pg5;8:ԺFgEUIvh!-,Mg]\::/_扌O6ʗ7Rє7q>slBcy]HWvKkkJԱ9W^h3yj'6D\7\>S@5(#BiXڬٛW{. -IH-wO1-P#fB4M+ -GLb杽qNeVW]80Yz
>{κ3Z<m:Tx:!fEg- @WXDՐC[ w)wo쇢 -oc!@ZB!Nµ. -V -X8fum<%*e?ւ\})iq/s6KV?bmgj߸B5*YLνwLI;טKw%ukl0eDlY;lPZ/ Y,"U1sf~@6<|{`elj'z⣳-8j\gE>kAkٲ0k{%kLkyN> -=}L! -B.U [$%8?"Xȇ -b.AzCo[MqecL1IXLiqn&JJu?"> -endstream -endobj -1294 0 obj << -/Type /Page -/Contents 1295 0 R -/Resources 1293 0 R -/MediaBox [0 0 612 792] -/Parent 1286 0 R -/Annots [ 1287 0 R 1297 0 R 1292 0 R ] ->> endobj -1287 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[0 1 1] -/Rect [512.852 664.527 540.996 675.652] -/Subtype/Link/A<</Type/Action/S/URI/URI(http://msdn.microsoft.com/en-us/library/bfyb45k1.aspx)>> ->> endobj -1297 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[0 1 1] -/Rect [71.004 652.572 324.551 663.697] -/Subtype/Link/A<</Type/Action/S/URI/URI(http://msdn.microsoft.com/en-us/library/bfyb45k1.aspx)>> ->> endobj -1292 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [458.301 294.143 480.773 304.991] -/A << /S /GoTo /D (subsubsection.55) >> ->> endobj -1296 0 obj << -/D [1294 0 R /XYZ 71 721 null] ->> endobj -385 0 obj << -/D [1294 0 R /XYZ 72 720 null] ->> endobj -1298 0 obj << -/D [1294 0 R /XYZ 72 635.913 null] ->> endobj -1299 0 obj << -/D [1294 0 R /XYZ 72 636.754 null] ->> endobj -1300 0 obj << -/D [1294 0 R /XYZ 72 625.795 null] ->> endobj -1301 0 obj << -/D [1294 0 R /XYZ 72 614.836 null] ->> endobj -1302 0 obj << -/D [1294 0 R /XYZ 72 603.877 null] ->> endobj -1303 0 obj << -/D [1294 0 R /XYZ 72 592.918 null] ->> endobj -1304 0 obj << -/D [1294 0 R /XYZ 72 581.959 null] ->> endobj -1305 0 obj << -/D [1294 0 R /XYZ 72 571 null] ->> endobj -389 0 obj << -/D [1294 0 R /XYZ 72 533.448 null] ->> endobj -1306 0 obj << -/D [1294 0 R /XYZ 72 484.629 null] ->> endobj -1307 0 obj << -/D [1294 0 R /XYZ 72 485.47 null] ->> endobj -1308 0 obj << -/D [1294 0 R /XYZ 72 474.511 null] ->> endobj -1309 0 obj << -/D [1294 0 R /XYZ 72 463.552 null] ->> endobj -1310 0 obj << -/D [1294 0 R /XYZ 72 452.593 null] ->> endobj -1311 0 obj << -/D [1294 0 R /XYZ 72 441.634 null] ->> endobj -1312 0 obj << -/D [1294 0 R /XYZ 72 430.675 null] ->> endobj -1313 0 obj << -/D [1294 0 R /XYZ 72 419.716 null] ->> endobj -1314 0 obj << -/D [1294 0 R /XYZ 72 379.622 null] ->> endobj -1315 0 obj << -/D [1294 0 R /XYZ 72 380.464 null] ->> endobj -1316 0 obj << -/D [1294 0 R /XYZ 72 328.414 null] ->> endobj -1317 0 obj << -/D [1294 0 R /XYZ 72 329.256 null] ->> endobj -1318 0 obj << -/D [1294 0 R /XYZ 72 289.162 null] ->> endobj -1319 0 obj << -/D [1294 0 R /XYZ 72 290.003 null] ->> endobj -1320 0 obj << -/D [1294 0 R /XYZ 72 279.044 null] ->> endobj -1321 0 obj << -/D [1294 0 R /XYZ 72 268.085 null] ->> endobj -1322 0 obj << -/D [1294 0 R /XYZ 72 257.126 null] ->> endobj -393 0 obj << -/D [1294 0 R /XYZ 72 219.574 null] ->> endobj -1293 0 obj << -/Font << /F25 479 0 R /F8 481 0 R /F30 649 0 R /F40 1282 0 R /F36 666 0 R /F28 483 0 R /F34 613 0 R /F38 693 0 R /F11 1066 0 R /F26 482 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1325 0 obj << -/Length 2328 -/Filter /FlateDecode ->> -stream -xڽX۸~88"Ez$6EMٕ%٤}EYRISp^|LT/nL/2Q-n7wR˕R: \7XrgIpuoTX$ q+=г\o*涁A#Sb/Hu*lTylnwv&Ip'L`yuCYM?l\y_8Og-U[Uxy۴5uw<gFBh0m}- -(\mzP&p)ػ=qzMЗxxòNC:jg ->Ps o@MLc -8w\/7:v41{o')<#$@z ZHcNP%E}ws.<*z_g~ -j#8:?7*5T1R"ȫ?Afpl+l6MMEx <0>Cٖ{H -FC za: -Z8Q[w7vNc_K&V'&=<?Ϗߍw;m_F]Q0iF0,x\5P&JORZE.;tS}H+knj|5(st|yˁ~Y{LbRHoxlk̔(L255y`'S -so'bK#,,[_ -endstream -endobj -1324 0 obj << -/Type /Page -/Contents 1325 0 R -/Resources 1323 0 R -/MediaBox [0 0 612 792] -/Parent 1286 0 R ->> endobj -1326 0 obj << -/D [1324 0 R /XYZ 71 721 null] ->> endobj -397 0 obj << -/D [1324 0 R /XYZ 72 720 null] ->> endobj -401 0 obj << -/D [1324 0 R /XYZ 72 700.172 null] ->> endobj -405 0 obj << -/D [1324 0 R /XYZ 72 640.053 null] ->> endobj -409 0 obj << -/D [1324 0 R /XYZ 72 569.917 null] ->> endobj -1327 0 obj << -/D [1324 0 R /XYZ 72 531.724 null] ->> endobj -1328 0 obj << -/D [1324 0 R /XYZ 72 532.565 null] ->> endobj -1329 0 obj << -/D [1324 0 R /XYZ 72 521.606 null] ->> endobj -1330 0 obj << -/D [1324 0 R /XYZ 72 510.647 null] ->> endobj -1331 0 obj << -/D [1324 0 R /XYZ 72 499.688 null] ->> endobj -1332 0 obj << -/D [1324 0 R /XYZ 72 488.729 null] ->> endobj -1333 0 obj << -/D [1324 0 R /XYZ 72 477.77 null] ->> endobj -1334 0 obj << -/D [1324 0 R /XYZ 72 466.811 null] ->> endobj -1335 0 obj << -/D [1324 0 R /XYZ 72 455.853 null] ->> endobj -1336 0 obj << -/D [1324 0 R /XYZ 72 444.894 null] ->> endobj -1337 0 obj << -/D [1324 0 R /XYZ 72 433.935 null] ->> endobj -1338 0 obj << -/D [1324 0 R /XYZ 72 422.976 null] ->> endobj -1339 0 obj << -/D [1324 0 R /XYZ 72 412.017 null] ->> endobj -413 0 obj << -/D [1324 0 R /XYZ 72 328.267 null] ->> endobj -1340 0 obj << -/D [1324 0 R /XYZ 72 265.609 null] ->> endobj -1341 0 obj << -/D [1324 0 R /XYZ 72 267.004 null] ->> endobj -417 0 obj << -/D [1324 0 R /XYZ 72 207.164 null] ->> endobj -1342 0 obj << -/D [1324 0 R /XYZ 72 132.552 null] ->> endobj -1343 0 obj << -/D [1324 0 R /XYZ 72 133.946 null] ->> endobj -1323 0 obj << -/Font << /F28 483 0 R /F8 481 0 R /F34 613 0 R /F30 649 0 R /F38 693 0 R /F36 666 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1348 0 obj << -/Length 2438 -/Filter /FlateDecode ->> -stream -xڽXKs6W-*Do*^8Zsp|H1dF784ڵ9 -ᇵ*ݛBW`oa7Rrl^ore˪T.Xy)$g/ϾLT*"q$韚Ea̍ p.|%(D9c4a*uz&ae, JkOn:5- _`"p@8( -J0 ->"5BfK@^0/f -w%¾ᷮDDN6qw3a$NoCfBDQ@ǩ0O0*ixK(OS8Hz3IZL%I셇r%l\GONhJl8:-,SS(}@\{l *۩ӊ{v\MFϯ -yPV{L*C&;:|8Kaﭞ|/ҿcVHj0eॳͻŔFSc؏-0X/QYlv /$l=Eƛ[OVr^5'hlRYo.W^? -mTGQ"]8 a|pCHi?= .[CbQ$S<2dG<}<^(x*EA!DG%h[~~yT00'gEdH2<诎"b_?nNa$2{?' ]Ε\8+ ,("y&_;<6
Z,
f~`#( -endstream -endobj -1347 0 obj << -/Type /Page -/Contents 1348 0 R -/Resources 1346 0 R -/MediaBox [0 0 612 792] -/Parent 1286 0 R -/Annots [ 1344 0 R 1354 0 R 1345 0 R ] ->> endobj -1344 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[0 1 1] -/Rect [439.627 481.928 540.996 493.053] -/Subtype/Link/A<</Type/Action/S/URI/URI(http://social.msdn.microsoft.com/Forums/en-US/codecontracts/threads)>> ->> endobj -1354 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[0 1 1] -/Rect [71.004 470.692 324.551 481.097] -/Subtype/Link/A<</Type/Action/S/URI/URI(http://social.msdn.microsoft.com/Forums/en-US/codecontracts/threads)>> ->> endobj -1345 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [295.053 383.398 302.027 394.247] -/A << /S /GoTo /D (section.361) >> ->> endobj -1349 0 obj << -/D [1347 0 R /XYZ 71 721 null] ->> endobj -1350 0 obj << -/D [1347 0 R /XYZ 72 720 null] ->> endobj -1351 0 obj << -/D [1347 0 R /XYZ 72 713.325 null] ->> endobj -421 0 obj << -/D [1347 0 R /XYZ 72 676.614 null] ->> endobj -1352 0 obj << -/D [1347 0 R /XYZ 72 640.337 null] ->> endobj -1353 0 obj << -/D [1347 0 R /XYZ 72 641.178 null] ->> endobj -425 0 obj << -/D [1347 0 R /XYZ 72 593.962 null] ->> endobj -429 0 obj << -/D [1347 0 R /XYZ 72 522.954 null] ->> endobj -433 0 obj << -/D [1347 0 R /XYZ 72 444.53 null] ->> endobj -437 0 obj << -/D [1347 0 R /XYZ 72 415.879 null] ->> endobj -1346 0 obj << -/Font << /F36 666 0 R /F30 649 0 R /F28 483 0 R /F8 481 0 R /F40 1282 0 R /F14 480 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1357 0 obj << -/Length 2781 -/Filter /FlateDecode ->> -stream -xZ[o~ׯexi -͞W,v<_ylt˝+&iSje/ۆN2ۼ*hgo+l2ܬJyj`bG!b&鍮uꋦuqAM -<<ܣ_&`Ȫ( -#燌˘碧=U/]JA͜8%' -?Ș -Ih-7snVEC}=sKILl2W;+ nъ] ;s#4Uo|x cDa+PVuk&9p`<}7d<xn`}4I -Ub_r0+PEQ9\ʆڄ;v\U_ZVݓB[tE9ʬ:nlE7 5>vjz -s`0I&JI8J'R}'F,9?sMY~LW/*9UQhŞ7*ccp`$b߉܁h17]"`ue[li{y7-^y5W/ߕ*}|s#pd&'B &xELy/ߨy仆{ۯ]5#meeQM8cM>P1<I_`hꏛg-B:2
yPlXP54&ѼnV3%{ hz -4 L|FRjR8<[$~ꦁ<lk%ry!ǰ'ӟ$ѤS823CIA?ፄp{q}f{@BmaHg?ً>B|xkE!^;%8Nkۡ0oqɱНGw
?3N^wNŠ/ bO\rXMgESQ}ͧH-IЅWR][1p]Uo Sdz r' r&ʸ&65E2$*,g텓DVdGcc쪺%?rz7[6'-1NށɗaU^8[2w"pSv QZeB]k<{35,zxW["DXR`|̈́Ji8\=@p˦tYvRs6m
T2:bx3R -rEYnD 3oF`@?7'U:zrZ:OJ't0-?Y₩ -c+#9TJŘ)BvT1Lf]8
$Xa^v|O]=pj -1:x=Be!J|X -endstream -endobj -1356 0 obj << -/Type /Page -/Contents 1357 0 R -/Resources 1355 0 R -/MediaBox [0 0 612 792] -/Parent 1286 0 R ->> endobj -1358 0 obj << -/D [1356 0 R /XYZ 71 721 null] ->> endobj -441 0 obj << -/D [1356 0 R /XYZ 72 311.594 null] ->> endobj -1355 0 obj << -/Font << /F14 480 0 R /F30 649 0 R /F8 481 0 R /F28 483 0 R /F36 666 0 R /F41 1359 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1363 0 obj << -/Length 2535 -/Filter /FlateDecode ->> -stream -xڕYKs8W(D4ߔRv⌳&f PH-@Jv$AQIDݭWj4z\eUeWշ٢G^InD,ܾ5ÿ/es /goJ5a+CԧW^Wdy^qp|̘_[! -o{߮W`z}~S|:2)X(g;3U.9\֍ʶʌE*-*p/_$[@LWuH&ż'uQw@ъNXAҨ5-ڎԭ]-OLb9{9zܑac\]--7VpI~C+7,矫yȢs|_B,hMQ(.i\')F߯ދmZ(S.cét".<HNN{HƓhva!z?q%U+?,WEq@} -e<<ÃD\ӛoY 2z)O/ƿt'Ylqw/ -:q5s -D$ -{Hmf*OQD c<t2.Vv5~l9j3IX*'NZQ{q<u»Nyi?R}'88L:
`xDƈc1hcS IGF<7[qԅ^\bQiMӥ]QgST! -z-Kي-t -)\5z<N]쎂2D!?*WLVU?\
Îu3WoLt\9;k֓s]~lw -[+KzF8l!
қo;rB*ed֝=e!`r]{ъ2pWl@C -endstream -endobj -1362 0 obj << -/Type /Page -/Contents 1363 0 R -/Resources 1361 0 R -/MediaBox [0 0 612 792] -/Parent 1365 0 R -/Annots [ 1360 0 R ] ->> endobj -1360 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[.9 .9 1] -/Rect [426.927 421.169 441.65 433.124] -/A << /S /GoTo /D (subsection.380) >> ->> endobj -1364 0 obj << -/D [1362 0 R /XYZ 71 721 null] ->> endobj -445 0 obj << -/D [1362 0 R /XYZ 72 453.008 null] ->> endobj -449 0 obj << -/D [1362 0 R /XYZ 72 303.119 null] ->> endobj -1361 0 obj << -/Font << /F41 1359 0 R /F25 479 0 R /F8 481 0 R /F30 649 0 R /F28 483 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1368 0 obj << -/Length 1679 -/Filter /FlateDecode ->> -stream -xXo6~_=%jג)k&XRd@J:[l(Q!8.(%SIZlÞdwǻ˓,FY0Z7'U<?jx>?ӱے -G.x@&Z -EcFVKRⵑY~0`zQ4^j4+D -ƍW㗌SKBކXY,-8
g.D d:6?IX?N34F}(AUc DDXrm%"H i(FQ2FK,FxVr ]#JA (㌯s o2puSc,}XOH -ẃaxflZfo-܁9:V5pWBdܤu?*/N<QD6u0Q
HY --ʘ`Ő
4*(+A[%ŚB}r$D\J -=%g$4l%hG;TYSڢv~WcwF -{ -\Z<@t1NiJMHyKgE.eA -H
~OB"kQ8Xd98JYEgK#ǂDsrUV[Eb -k)% eݨTcbBLYJ3`boQuCx:v A`Ֆ<k2[Jgy7 _'
POb1P RD^ϊG0uG$=;ik1``%C̱%*EC}oTFti&d[Dƭ*ՙՒqRߺ,%E}n}09H ,y<
SW-/ŨcWʍ[kOƶٟBcs7E3-+N7"D/Y߯V+u<r,6 ĂqrW<73FhV,愿AC_E+NlǐZ7QS.%0qMǣ٤SmxvԤnLs\ґ O|iB\3Bĸ4ޢI@TK61AH[rF~%aS[YUuusdy۷*nTW5Tc7(r'q-LD&%cFfK@w=\M :
>1l(iuR+si&=wmV5܄Fʶ,Фg+|c[H1C֙>6n!i+&SwM%y:g=z_L_,m3{s4`LG P_=$b -endstream -endobj -1367 0 obj << -/Type /Page -/Contents 1368 0 R -/Resources 1366 0 R -/MediaBox [0 0 612 792] -/Parent 1365 0 R ->> endobj -1369 0 obj << -/D [1367 0 R /XYZ 71 721 null] ->> endobj -1366 0 obj << -/Font << /F41 1359 0 R /F8 481 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1372 0 obj << -/Length 1941 -/Filter /FlateDecode ->> -stream -xڭXKs6W(n"O8:u<Ӵ= 1& -扺,*V!</մe8S_Yiq %!u#qԕSR)jVguS[.pRiAYhamQIWwZi6
puZ0|%zjD i-U#h -֢pc<GR|VKEFCFw`Z#i~zПu:*6@ûh6Eaj$Dl -\uSN8b<QT
z3Җzld
Vnqsč;!TiJM Z|v+/xAWڷWԓUiķC6D6&a 驂{K1j
.Z1pRӗxҋ'.ȫCdq0˕ٯ:] +?i\WIw)_Ơd4e7XkRHhpņXizb$Y8#vv@]~4l 2s(㚋A^8d=8}D;\U TDM/v58ޢ[D])
Tiv -}3XX)00*?Eթ1eXMEo -kT%y,L=TE Kꃶ4tŮȇ~s\MRvkS(m(3hN&`C,faAo!j-O7)RU8cAjÙЄȩ.FVyF[\Ph"vA1Ժ:]˹Eϑ[j:70N`k -d -gB(>5 b!6[jwқ;aߡnR=QBqS1H~
a ->` -@xHU]uF&sGZ-wn= Sx7\_4m/J.qR47u¬vV߫DQ!aU|7CC3C"F6Xۀ^B`}i9
-R1Qc;r( -a}c$XA4|K{^O~rLYVyf}]Ҭss- -F>Ro~OzH-pVܣBIgh7h]! t< ZA(x?8T -endstream -endobj -1371 0 obj << -/Type /Page -/Contents 1372 0 R -/Resources 1370 0 R -/MediaBox [0 0 612 792] -/Parent 1365 0 R ->> endobj -1373 0 obj << -/D [1371 0 R /XYZ 71 721 null] ->> endobj -453 0 obj << -/D [1371 0 R /XYZ 72 485.888 null] ->> endobj -1370 0 obj << -/Font << /F41 1359 0 R /F28 483 0 R /F8 481 0 R /F30 649 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1376 0 obj << -/Length 412 -/Filter /FlateDecode ->> -stream -xڍn0E|wD"QuJvEvPu)Aaα3 -m!\Fa]艌gPᛷth$+_RcRri:tU -L`GG(9Z
H'0BgRC8Z27,r%Fyfy;_}+Jg3EggEG_.[zx6$uwŹOo'|-K;"^} -YJxt`KH.B#QAueۤ>i|=}-ej:LR -c<_/xpt18O۩QP 0f\{σ0=1tP`%)jV-hFLjXYL|rfô$danl_) -endstream -endobj -1375 0 obj << -/Type /Page -/Contents 1376 0 R -/Resources 1374 0 R -/MediaBox [0 0 612 792] -/Parent 1365 0 R ->> endobj -1377 0 obj << -/D [1375 0 R /XYZ 71 721 null] ->> endobj -1374 0 obj << -/Font << /F41 1359 0 R /F8 481 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -1378 0 obj -[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] -endobj -1379 0 obj -[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] -endobj -1380 0 obj -[285.5 513.9 856.5 513.9 856.5 799.4 285.5 399.7 399.7 513.9 799.4 285.5 342.6 285.5 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 285.5 285.5 285.5 799.4 485.3 485.3 799.4 770.7 727.9 742.3 785 699.4 670.8 806.5 770.7 371 528.1 799.2 642.3 942 770.7 799.4 699.4 799.4 756.5 571 742.3 770.7 770.7 1056.2 770.7 770.7 628.1 285.5 513.9 285.5 513.9 285.5 285.5 513.9 571 456.8 571 457.2 314 513.9 571 285.5 314 542.4 285.5 856.5 571 513.9 571 542.4 402 405.4 399.7 571 542.4 742.3 542.4 542.4] -endobj -1381 0 obj -[277.8 277.8 777.8 500 777.8 500 530.9 750 758.5 714.7 827.9 738.2 643.1 786.3 831.3 439.6 554.5 849.3 680.6 970.1 803.5 762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 828.5 580.6 682.6 388.9 388.9 388.9 1000 1000 416.7 528.6 429.2 432.8 520.5 465.6 489.6 477 576.2 344.5 411.8 520.6 298.4 878 600.2 484.7 503.1 446.4 451.2 468.8 361.1] -endobj -1382 0 obj -[319.4 500 833.3 500 833.3 758.3 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 319.4 777.8 472.2 472.2 666.7 666.7 666.7 638.9 722.2 597.2 569.4 666.7 708.3 277.8 472.2 694.4 541.7 875 708.3 736.1 638.9 736.1 645.8 555.6 680.6 687.5 666.7 944.5 666.7 666.7 611.1 288.9 500 288.9 500 277.8 277.8 480.6 516.7 444.4 516.7 444.4 305.6 500 516.7 238.9 266.7 488.9 238.9 794.4 516.7 500 516.7 516.7 341.7 383.3 361.1 516.7 461.1 683.3 461.1 461.1] -endobj -1383 0 obj -[799.4 285.5 799.4 513.9 799.4 513.9 799.4 799.4 799.4 799.4 799.4 799.4 799.4 1027.8 513.9 513.9 799.4 799.4 799.4 799.4 799.4 799.4 799.4 799.4 799.4 799.4 799.4 799.4 1027.8 1027.8 799.4 799.4 1027.8 1027.8 513.9 513.9 1027.8 1027.8 1027.8 799.4 1027.8 1027.8 628.1 628.1 1027.8 1027.8 1027.8 799.4 279.3 1027.8 685.2 685.2 913.6 913.6 0 0 571 571 685.2 513.9 742.3 742.3 799.4 799.4 628.1 821.1 673.6 542.6 793.8 542.4 736.3 610.9 871 562.7 696.6 782.2 707.9 1229.2 842.1 816.3 716.8 839.3 873.9 622.4 563.2 642.3 632.1 1017.5 732.4 685 742 685.2 685.2 685.2 685.2 685.2 628.1 628.1 456.8 456.8 456.8 456.8 513.9 513.9 399.7 399.7 285.5 513.9 513.9 628.1 513.9] -endobj -1384 0 obj -[285.5 399.7 399.7 513.9 799.4 285.5 342.6 285.5 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 285.5 285.5 325.6 799.4 485.3 485.3 685.2 686.7 686 656.6 743 617.3 588.7 685.2 726.8 287 486.1 715.3 560.2 898.1 726.8 759.3 657.4 759.3 665.9 571 702.2 706.8 686.7 972.2 686.7 686.7 628.1 298.6 513.9 298.6 513.9 285.5 285.5 493.8 530.9 456.8 530.9 456.8 314 513.9 530.9 245.4 273.9 502.3 245.4 816.3 530.9 513.9 530.9 530.9 351.1 394 371.1 530.9 473.8 702.2 473.8 473.8] -endobj -1385 0 obj -[799.4 513.9 799.4] -endobj -1386 0 obj -[599.5 550.9 550.9 836.4 836.4 245.4 273.9 513.9 513.9 513.9 513.9 513.9 686.7 456.8 493.8 742.3 799.4 513.9 885.8 1000 799.4 245.4 325.6 513.9 856.5 513.9 856.5 779.3 285.5 399.7 399.7 513.9 799.4 285.5 342.6 285.5 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 285.5 285.5 325.6 799.4 485.3 485.3 685.2 686.7 686 656.6 743 617.3 588.7 685.2 726.8 287 486.1 715.3 560.2 898.1 726.8 759.3 657.4 759.3 665.9 571 702.2 706.8 686.7 972.2 686.7 686.7 628.1 298.6 513.9 298.6 513.9 285.5 285.5 493.8 530.9 456.8 530.9 456.8 314 513.9 530.9 245.4 273.9 502.3 245.4 816.3 530.9 513.9 530.9 530.9 351.1 394 371.1 530.9 473.8 702.2 473.8 473.8 446.8] -endobj -1387 0 obj -[826.4 531.3 826.4] -endobj -1388 0 obj -[531.3 531.3] -endobj -1389 0 obj -[413.2 413.2 531.3 826.4 295.1 354.2 295.1 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 295.1 295.1 336.8 826.4 501.7 501.7 708.3 708.3 708.3 678.8 767.4 637.2 607.6 708.3 750 295.1 501.7 737.9 578.1 927.1 750 784.7 678.8 784.7 687.5 590.3 725.7 729.2 708.3 1003.5 708.3 708.3 649.3 309 531.3 309 531.3 295.1 295.1 510.4 548.6 472.2 548.6 472.2 324.7 531.3 548.6 253.5 283 519.1 253.5 843.8 548.6 531.3 548.6 548.6 362.9 407.3 383.7 548.6 489.6 725.7 489.6 489.6] -endobj -1390 0 obj -[366.7 558.3 916.7 550 1029.1 830.6 305.6 427.8 427.8 550 855.6 305.6 366.7 305.6 550 550 550 550 550 550 550 550 550 550 550 305.6 305.6 366.7 855.6 519.4 519.4 733.3 733.3 733.3 702.8 794.4 641.7 611.1 733.3 794.4 330.6 519.4 763.9 580.6 977.8 794.4 794.4 702.8 794.4 702.8 611.1 733.3 763.9 733.3 1038.9 733.3 733.3 672.2 343.1 558.3 343.1 550 305.6 305.6 525 561.1 488.9 561.1 511.1 336.1 550 561.1 255.6 286.1 530.6 255.6 866.7 561.1 550 561.1 561.1 372.2 421.7 404.2 561.1 500 744.4 500 500] -endobj -1391 0 obj -[680.6 680.6 680.6 680.6 680.6 680.6 680.6 680.6 680.6 680.6] -endobj -1392 0 obj -[625 625 937.5 937.5 312.5 343.7 562.5 562.5 562.5 562.5 562.5 849.5 500 574.1 812.5 875 562.5 1018.5 1143.5 875 312.5 342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.2 531.2 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 500 625 513.3 343.7 562.5 625 312.5 343.7 593.7 312.5 937.5 625 562.5 625 593.7 459.5 443.8 437.5 625 593.7 812.5 593.7 593.7] -endobj -1393 0 obj -[306.7 408.9 408.9 511.1 766.7 306.7 357.8 306.7 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 306.7 306.7 306.7 766.7 511.1 511.1 766.7 743.3 703.9 715.6 755 678.3 652.8 773.6 743.3 385.6 525 768.9 627.2 896.7 743.3 766.7 678.3 766.7 729.4 562.2 715.6 743.3 743.3 998.9 743.3 743.3 613.3 306.7 514.4 306.7 511.1 306.7 306.7 511.1 460 460 511.1 460 306.7 460 511.1 306.7 306.7 460 255.6 817.8 562.2 511.1 511.1 460 421.7 408.9 332.2 536.7 460 664.4 463.9 485.6] -endobj -1394 0 obj -[583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500 1000] -endobj -1395 0 obj -[777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9] -endobj -1396 0 obj -[670.8 638.9 638.9 958.3 958.3 319.4 351.4 575 575 575 575 575 869.4 511.1 597.2 830.6 894.4 575 1041.7 1169.4 894.4 319.4 350 602.8 958.3 575 958.3 894.4 319.4 447.2 447.2 575 894.4 319.4 383.3 319.4 575 575 575 575 575 575 575 575 575 575 575 319.4 319.4 350 894.4 543.1 543.1 894.4 869.4 818.1 830.6 881.9 755.6 723.6 904.2 900 436.1 594.4 901.4 691.7 1091.7 900 863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.4 602.8 319.4 575 319.4 319.4 559 638.9 511.1 638.9 527.1 351.4 575 638.9 319.4 351.4 606.9 319.4 958.3 638.9 575 638.9 606.9 473.6 453.6 447.2 638.9 606.9 830.6 606.9 606.9] -endobj -1397 0 obj -[272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272 489.6 272 272 489.6 544 435.2 544 435.2 299.2 489.6 544 272 299.2 516.8 272 816 544 489.6 544 516.8 380.8 386.2 380.8 544] -endobj -1398 0 obj -[667.6 706.6 628.2 602.1 726.3 693.3 327.6 471.5 719.4 576 850 693.3 719.8 628.2 719.8 680.5 510.9 667.6 693.3 693.3 954.5 693.3 693.3 563.1 249.6 458.6 249.6 458.6 249.6 249.6 458.6 510.9 406.4 510.9 406.4 275.8 458.6 510.9 249.6 275.8 484.7 249.6 772.1 510.9 458.6 510.9 484.7 354.1 359.4 354.1 510.9] -endobj -1399 0 obj << -/Length1 2370 -/Length2 19709 -/Length3 0 -/Length 21086 -/Filter /FlateDecode ->> -stream -xڌP\ -4.]4NpKpwwww 8J=\)HUM퍁v.L< -u?,DF.21#C9{;
`ab@ -% -BOCv<{7=N, ,K{%qF*s7.96!-wi%-,ΰկ2긤8N_KeɻMҝlMTu0^%f d#%~d*:zպhcpx~Nvfr<B1HB&l+`N+8Gx2[[xn{pa+N>+%\z-습iƸF1ݛvaycMhN[Wy&װt3ƴғ ̀ kf25s3_@Qzs~\Y<<Mjxb :F
s~l0
67lX.|iFh0=;Ji9XVn34z5ʤUCd/n¦WHm?ϗqN|yi3sՎ0ҟf`w\dV;0J|Rx'FT'bMܒdmBn#._ʻ,ykdpI/afPJ?rv. - -ggb}q祝9a@bV!"y -qv:@Ք{^h %0xU'z(y-sۋ2Q41,/"#)}TYl+T1[M661rU_Љ z^ņOlIkފ,"'YfVѦd68 {coQi7%ө(#=WPR5SsakdV7)jI9Χ - -,k0L^ -Oɭ
K{ҽm -kYS-E'ɞp%gŰj-ƆHhJ
Sg5T99ȴ8S]2erIO&6Sj-=f/R,Gpp%:\ť?ԃ-@}_x_Apů;8ZM'Ҙe?2*WZQmx!z;%f!w:
w)&
ϔJ,NaҺ]H>*Z)?G VmviX#"ҹI'K1oF~^/o%&a^wDⲽEDf*AY\?}2o!6O\G$ Tn+,m[,euvS;ptC'
t5\y[H ~nVfTޕbG:
k0#'Nx-Ј_v -GNIWp/Ό"w͈e7ps"4wO{)NG+&70wZYhs
L'Xi]uA53
}mwKriŮ
^&^''s*֮lg]k0ue;D(6`s#.opK~>$Q-Έg\ojX|6]For !S@:QϝזZ
f'$&#BFP*390)L -|b!`aq!TF+*iWSa+%)Ig{,]bC/ea`a;iЧ -(D%v찌Q2oUiΑsH 4o=xc3$ -9Y>N9:Fq# mk=}*oKTB3Ctve02K$gEW -fghU -HCXirA99!w9KeЊl=NS8(RR`a{`ij$˩TN<OewQ
./^\o2ka䈷:ۑ4xyYL i;![~</ОGzxmFCu>U#.7e[zF<8П=ZJO=(:!KN\jQ۶ٗ*j>KB?6A$GT,=E
`we]<%v
X47p{=/j!a=ށ"tuߓ2 Ld3ԥ)NaCAި -aq~xhjIsFGw߭.H|R! -j$9oA
;Q&WeX_U<4xzKQ^j\,816`C{mac|F$F֡DX91@K7m!F^:D%驤r:z8-xc&R$ꇳktiD -hM{PҸ4rl̑)JkʆL~M3&?S^XRM%~)W!%@ma4/%RkӼ\~z4aFēmDʋܒ8~M4svR˅BZ8;`ҍQ2%3:sj͖ghI2@EMl2"]H86# ]"BE:KszQͅ/uG$ar%ֶ2cmaߓaܨjoVeQ#Lw/VI -I"yxo2ϷN3f<ڙ6IVR~(@p3D^Lj0T-XEhfhP5)e$lc0CT-2AaO'&iJ8zr)TY'|`83h;2Ixskevlw%O:|BƗFUb~sȶ7TI6KK.f861Ȥ
@Iʲ5Ke) >|
.E=p%E -o -m[ph%E^cN-3MtGXP;y%ʃŗ5=̒ LchnP; &{9٥gJV$nC0C`3-3zKY1w}0xW?r'Fòmv ->_ɳ^_5J$dGkF4f5yՕf(K{?A׃XqK.jQEV[bZK'z!=~`Zwih:sYx}y咚k;8NC{|I(!z1m=rjS{@ V'P^]:I -(OBMH0tH ĵRft..~E-kUl}DEw^]&dqIKM}%f"\%ZKZ`Fekz
fi\c\2kMG/ˣ]U6LZX6^Ⱥv.8VΩQcةLgtQZIVOa$QMt!X1_?1Rguz^Is֝qY7Y"M<갽]k'֍Cw+݊eYr -Islz?lgGrw4Q*˸ǵD"`g<KmZHx[i|:$ƩgE2J)nۿڕ40FMy\A>}Ф>;*,LiAk.s-B|]\/;gӫE@-!^k9*:.JZ.R+|gLp-SػhZ b.Y ^aSUF5*Q0#rwg Kjk^v -O+.iVdwp욶m;0}A!,TAW6ROB0 -:ۏE1 $A|z<oMmBКQʆ)hY$pg.nbBaSh/R$F˼+Q%#47&LJ -KяF{mR∁_uaF{]d6hku~%UƯfKC&;;ű3S+ -HUr8ΰ+7Suaq1jH_=9%ё?S43HK&c31v~B=On0wV0yɀ]')Z~"|b虭9Yq0 -6tϲaLZ 5!tW+A~ҌeF 35$,V>.tYRā0iL(k{?mϼ4գ\-,'"9Tm_z8'1-bM:JP"ti峗oYՙm}OD1VdUBl??QtL5X8e6VŹ8Nm撛fl]v(@7 -(< LHʝJ$R*3p. c"!JPeAD!' -04Xg^`$m,IxY(ھ/sl<DbpB)3IղCC;|1HPM)7+ksUY?;cw>Q;d QVZxnR횰N4L{Auj鴜)cz66a :_DIUӦIRcGYh5ї)Ӵ2Y
BCN8od2"-h/oqFzDr <t>% ->
-sB38\U~La8["jkϥSmc xp4A -IT7]Wwz4/y^hC[! ;Px_G8PKh*f`PJPC7{aP)fe`q,2KdlQZUFa&Z&.à=D4)"l!s<ݟi0Kl@Č1tULgCOdwtP<QbBc6|O͘,Sb`~MCUM3f4lSm>
vZ @i)cT˯mg,7oh -JpH
[*+s5{dזTh.,!0p )HDCFuse_C`(ri+]zqf&΄߱kDq9m
xP!vtq9YCS¡}'O˙U˞P"j/5sYIU?Xl_M\T.ʾU6%9m*Xz0d
͟]uA8\uɋ荼]fC6*L$N{=Gv֓{!hWM#n{Xap)L^$dc4Kgυkx"j_p=Mnl| -= 99ح͖Jİ(kVt,u^L&QG^CC*'wHlNe*_Jkd#|<J a`M}Ee7ttVUhM` 0
@Xp(H`ڒM4z<O@$0׀>WNuaOV&=)%'sd*(֘'cO}pF"xSx -$F,7X -ӑZMxWS8O7[=˪7{Tk - -WB&$#|H3=Gk `ԽTQk~q -F(ldю 6F?5HѓYZ9vz
Koų| iʯS|O(ՖdhcpڙM«=!:DnV@ryj셛M*Y$0[l@x4{ҳoņg(e?6Ω!%â:0Xc0JBhm/}ua-GsuT&-)ZD4$o7*gZ~SF8CQKWlWt';A߅ -9|U*^->XNn)$+ u3txC5x RkŢa1vIsshzP3-"-DiYPD9ݳ8rkyrzq$h7_ᰏ};A52 -)>ʶA&v}E --~n< -2VpjIyxfeʴx{&ZcH8)-a㬂rGZ껼:`:33~i8 -%[Z\)Rbr1gGAX4<Mbߴ5#HpinnI3g5OGxZD;"e*'te|nlk?8t#9I+>Hbw/:^>^<pH z('[A2_倌%J/hL+_7m֛qbӂגNJ\`OF[=4<`w91DQHSN>%[W!\p$-H*|w6nmnEW)<Z^d?nD)TWUX$Bq..xZ -K,EHǮշ&C뼜j
LR7*DI`rR}c[G~^.iٌ5wz/= Ͱ@ 9yBv
WjI0ݴ4Cd2+~X L4]˪^}
k1ϳfE3.IѰU0~,6L1[ٝO --ďK?ejt>Feeh|YY- -ɸfH#2_-&[y[Ge^{$MȾa -^[` -rrHQ`z^/oEO"P_ 5[Dܪr'cE--7JxrI5Q'9]~6mʰ4!l>:3c+2腖ׯ>jSQl;#S/#v3HT:CoL y{?s!%j*6ѨMYІ~fT -qs}YYK4l-=ЅQڸ|l@Hi#EMvg }<0o$ S=2+%6eKdvk>Bg**yO7FNRƑ -|k/c åfh<癣b܄B3|خ"|>_+G)IՀ'_p!cNRN,Bdjn/b_uM^G-8C:PĶɩh:O0sy?ż[1wEkYsW0;dAo;{Ru= -W
}5
Mv -;** -8Rsߑ|i&o!\O,,\ w$O=C,l}*aGLb(Bwp]EzlF ?۹ -8z{SDHٹ3hZDnS+LRԤiųe%l7F6|i돼Gu=T ~^i3T
ߤ-m8%;4:J<:[#B٥hO>͉R{KW[np/9
B;Xm+sd>Eb^g{!߉p x[66f3d}ATo]Aɦ[)R;\옝+E⊵mF=2kﰷK^iY~{+9quAF__BEu+Gab9qYXgF-ٝ&,ZωM7cfdk
'K%>Nz!of=D۰v-<
gGh?.}Ġ^]]YFԼΑӉԬ aYmnF.D>fW 7*ﭗ -Ȉ21-c+j,5|vdw7wT/N"^'`=OF̠^dKa$z0#C≴ -R<yJshxu`Mrp6/P. lw ftjp<;0\Q(JZl)"3rW);^ YY&<y*? -yt(
Û~MrW>8 m4;UOGHB^R~j"Fݧ9Jn r+suq -}]Rk2;RTy>ES~ױ(2zxjF<:PUޫp*e>B\0re -8x7Q*Ll,^H9l>'d}&`*E -q:Iyc쵯2'Vb7
ۏi~D[9w?|p4dSzHGn|妠kiN1?O)Īo,aZOb6\f~G3TUOLD;}4
pCۅf`bOCPLfSiͬYoI -.&ǧrw`h+*~b=7/,lmEHҫ)//cG2O=UdFhL=6ޟzb6c It$ sxG/Ck<C4\+hS˚AeK.V5S'=^I]O;(FpI6r#EݹtQ\lzGOM]/5`xڋV\ǹ(*CjpBnAA -qMol
9lہcˑ~&-Qx>!m@Zv?UJEvj .𣷝bo4gO[)B82EjPc%: -o)im-s.4~0h>k~;Q~kO~܋a~l2a)
`o4EN4b-@8X5Q6Z_, -%V};q8BJb{p蜴 -5u@F *Ӏ^
%NAyGήuT!z6-gٞC*H R-rcDO̩L-UL?JBncn,@;K I !\$9旟,<Ζ -=@"%J0?mWHiBO*=8umqk A짏j:Gw;<'UdBvmv&Z&~}7N[QSDj٭694Qo 5(,R` -^7\B0M^bt#.>G֛[֛|WAk6ʞr(Qk)q}Z7W4̶v9WQ40M][w d1IRV#on9 g}JqEuC!]32@Nzlto8"6[C(mDm貰fIQ.jyP0[c+ $cWy6tlU"`kn{`Vϰkk>WGV/=(?VlEym`{49ŮæH2ш$<*6
\]u"rVл'O 3W2S`'Av KZ$ mv @`J~N{椹NV|(%bm0!If(CilZix
L\7
3μn+.:N2Er#El
M_#5]Li@p[32N'Ҷb>C -{_yTk -c>3 b'WXy -ʕ)^K}#;|&@/47H$53sƷ\)yS;*ǝ#*\
(p0}ﭒ.9;hNK+`a -gFա -Y.<4yĬp
ӗ4=`XLaP -V%YߊrnlGnEPڜbo|C0K!f$gESڽLF2$)j6CH -`\.Z]"q$/NOgd58/Yو|SG7 ~A=vh4KlߡrtF{ -Wʒŏ-F^ -endstream -endobj -1400 0 obj << -/Type /FontDescriptor -/FontName /TGGSDC+CMBX10 -/Flags 4 -/FontBBox [-56 -250 1164 750] -/Ascent 694 -/CapHeight 686 -/Descent -194 -/ItalicAngle 0 -/StemV 114 -/XHeight 444 -/CharSet (/A/B/C/D/E/F/G/I/K/L/M/N/O/P/R/S/T/U/V/W/Y/a/b/c/d/e/eight/f/ff/fi/five/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/question/quoteright/r/s/seven/six/t/three/two/u/v/w/x/y/zero) -/FontFile 1399 0 R ->> endobj -1401 0 obj << -/Length1 2317 -/Length2 17424 -/Length3 0 -/Length 18778 -/Filter /FlateDecode ->> -stream -xڌPֆCpw-Cpw݃ww$@@pvHޢ -o(ITEM FV&^+
RuxJ
=bN@c5qcwGy{@`eeaމ nfegbNV.u@cJ`f; bt25],vMmV@IAodldd!H -vKcYZ9ˠjon/ZA! 3:@UZ -`eeps -`Cl -/F{/#_v{WĿXZ9Zz:X<-YߕߥߵAw2s@v&$d{ND9!ojf{Y?]E@ -m헠m;{4$/'M0IʝO>φ *s3E'"CDpj>/>62y -0<*M-+r"<W3ƨG.Rd/A0ҡ_x,-μ$a/Y܇GKq>9G-z*]V'UbNd*؍bQOڻ_1130Peo.,TyRt짭jn.z^#wa!rWT`aS%D[[!螣U!y7U6|~ocӞ33R 5SAY01rqVK\>h7Ap֓2^o -9'B8Ub3yeAOlu'C٢&BUA!
ܵeEm7JDMs~Պ%IW̞~2p,RS9$?gͮdL*`aZY$OWÓE,KW4L%تcgY0L^vDc`vWoGSIFc^\0k;2ԢЕ!s|R}BOgrw#W";:WeZ9WإQ~(R_6Ee^tS߈٫>{+~X$A^ޙbJ2.tMBZ@&՝N]ɻR9fZ -@[ʷF>0WF7cڮn{;G &ZcmjMƢlCs-YA[K}ŲI#+VBc q7GQ!Tύ! -
I! 6CNm;E@ƙAw -}#HSfVX/bOl?&9jyq4^34}E{9q/dQ] A:FJK:>,GRG/uXzSG<4<D~AO~5ꂵ~h[~<8R!3il]vV٬`N)nu*&fb>*Cŕn2>su$$? XJj{Ƈ)<q.liqT@urb] jeAIV.kcv7d=ҵ-Nj63 -:qߥu<5䌈5>VEweM2X2`wo#+O_kxzRclOj[vHH>{:T^"4@A[3;. !RB3_Wt2LՍSѡrO&|PHv4n%ԬRl>E끂hBW"#tKY'2#\g`4AseR-P1){YŕPW7U798wF2zFbt,.ZH1FkrAA-8gv)5bKl>uz=;iB'.6xv<d - -,TSLx尖oDVJ{3#w"ꕍA#QҚ2A. 3}<đ[5WdC٬ QXlRelu;F_"T{FbvPot3ĘLZJidvgWsx./T4sAfC<]R"sB!d=iҮ豋W^7NTV -sG T%Iws 'uN(xJKSШRqʴ\5#)ZE=o8!uz~|@C|2ucVdVCZ|L2AG`on
ا+Juo+;ׂ?e>e"/*٦EQԧeiZ;F殪MY7wl$)s˔Y:Lj5d[CڇG6 -kR&U("R eD[Ao\",?ZaH-#zP_PlNX߿ɿY"Yjwԭ5ZH Aexe',:ob_^4R}3!s{rc߽d@Y%"K-Ը &D%wf -ΐudZPZ/NMɎHљgD$̌@dbGN"'}3&G>02ZeRƜ-۸AtWgdDq$C;%\˟e!z|]ÔY+ڲ"
h,1& أ"@c8(=rLIH
a -{^CCMxg'Yۇa~YzLj}ux+c"9
м=X|۪Cz:5";odк7zN'bnO|U)}wWZl\ݳP_j<$C؈1ۓ}鶚pDf=2
8ПywSM$4CX[5.Me%YL;~MnsHLV$xLnf4n3eZWMS&Ls'-ѧ#6;g6d1yZ_M:S6]I=[oEQ~+e4ur5ܾ价j!0940UZz v[ZeLqpEOV&Bo<E"i5_1"YbXù'J%+ ,%EsI"3<jgߵci:tAh EIZGpŐSa*
U.8NVآ~DXºSR`@mk;%<]:5-Ef&Pp@Xu8f Ἆxx&w_nnbɑ`M<:;K&s<+*nf8QTO.}+`GWVBptvF+ڷ/P3#q2\;c<>lT= Bs\jlW%(2oIA률*#Ihm3<H?LHL;67+![*.ZF ۏFЏgjx˭6;\@Ba>Xu2jw
uM0;] uKu"QY7Z~Q{KA%չ.NLbc<}0aZ$a.hP"ETYݤ\kB(NY[,j$/`(iPV!ӝM74} -f=JSP)$]Uf>&H
WCLD3:(`Uc2Ky3/x*EuWu[E2'ًɸa<9]PL0[o-\ӏ#-:pMSƔfH~&{G'y^aWwQ -awҀY[ӽ°>(zf[Ѽ9?L{ƃ</XNq?C#pj0QTQb6+!D,m\gJ*F5ϥ@LvHG4^ 0Cg]6CF~6@ -=\8afn.u0MAM@^`rPA l{BX(\g)Uwƀ̅swԠ6R6}cH>ܶ]}4U{_dIX\~Vǣ_.-^s@2 !>]l㲑wLvqmp|z+^q-Yt5aQ3*ܚ݉P7 QXAz -AH-3&Re]@mo^7&?pN*NK"r[(,`Fյ,>sů*^9Vo%U{Rț|y46T}#[|b0:=M!~5:oƼmגrz -&5WHٓԭ9Q,iӮo^ -gg=YRA&;#,u%tѩQ,sNJ?Y{UOBG*eǜXMרJj-k}z竖CZB+Ą4&(iw2م{[My/աa RψUa^mz8jU{/kݦQH/G=8h9 }>cmkhٗ,7s0l;ĺd8;$wU§_"y.mfI'(x(-ߣ&Nx3ery枕px@>亣H B|mf(j
rā~ӽ5zms%5RB[_Sq$` -evc.Hccpnx
Q -lDxax~[%X -*9H[n4_**bK.0hXhINxz:9c+]5]3?fW+xY%9霠 -VM+#4uu]~M -ˋGT&b?{ f`ƿA -XѪ7D19e܂C]k8l /8B93樥C4}ؤXqiD`J,"P;eSW/NKVIq+xEX9n/G*O&:Љ[%ˑgCCzXfqAd:1D{! -66tu-(ԍl6 -w5-) -^][ښER$"tC6 l]^LU슅'? -)aa3iB:*zDn@(hCY0 -K{ Eq+L3՞P9^]i7.@A>, 7"LBLmL6k.{uC -1xҖ]PH(llրd=v@Ng"T\I -0q/}xN:yd]iP6ܮuf|Q+*ں7΄$|eE]ڑGHo\$M$*հCӸ9Tf -V+D\Vjm4msGBJ^;- *'^BX]%3ُcpiQ#-f!#<Gvd`.Y*K_\8>ۂ`zӇ.Tf<XSwBbeoLA*5FYuyd*-J7cSkPP>}6XŖ@ɾK]X)+OZ٦=̇ -
lMuO$94+ֿ_H'J1:w
:VTwC>ш]5N.!j괼P@IcJ呿}-:dJ?N"S+3q!+Et|5<S(*.'Pج5/N]_1z`$RNj"'6-Nq0Bݨ*+;mS",tkxLQu[[0(FG=Čd)x).l%܊}wu}6vvL>= i<s,Z^xs^Έw_hY>gXrU".YAm^>2IO0S+sƾ=
N͖]`bc14uXQNr[I;m0i]u -nuufOAk#mzʶڬIwd@ح3Ԇ[ŐtlTn;<@'m%1-T, O6LlQzv59?ySނ}Z{49&|"+L= -geY/fRrjdJniW7+j-wA>3]`?o[ NU%h${B -}W\u檒ڠŠ9EJŰ9c+_#Hӥ -Cvq`. -I&(@p*c]58;I8R/hS^3r/,RqP\]2~&V*R2?_ro-D2*e#QuO<GȨ'm\Yo:9!R,X5) ͘*A[fQF:U8zOtZ9cBv`qUL7x֬hgä́`>v-]7=6WZvy]nrS:y
=ð:^e,҆g,ЇC'a/d"JœZ=mKKj&HiuK*-TJ;BSu:DJ -ShjH5\u1
V霞ߍn"µ%24V oi]sy8^߬˱uryS*垱M5è\q|8Ws#VnWؙU2jzqT:f:BZ
G&#]4[]tNfҸn?Bm.AHN+'fYGF zp"}5 i&FkڱC;q1;vd<cla5,DzS⸇k[?r~b *hOh1:@OsPIvJs<fMNyꖘJ@oLbȮQdAcZ9^z2('51l7+rN
xRP0k@nNV٠Eo_"|c"UCOl=6#oXac;l H2^_:,s!940j^qiǸ@[^{3z:^З{MJӼڐD}XO:\Q-ESZ;hD]&Z+?]n֗_꘎.uq02j4zv`z خ.0e/ܒouL-0fYyC|,tё:jUW@kͰBUP"<:-svrv*LvNفFfԈ3/3Kʬ9|x7Atr) - -W?\7ގ%/^4zՆ9BEFj=)rTbO</y\%x2U.}GB&P -X,b|g%zg,A[w0Miߡq%%9jȬvpH -.:'"r=}-dgj~fGhp0581o|t -g雯.d鷢*ت$sa_Bm)?i~.M}HVs.g 8b~ |ӳzWrAsƃ_l͑/TsʐD[D
}2[!Kwc4 -jv]9C~Og>q1>b=v܃7Da,/ǜ 0m9D˅_gR ErinAT'/#;VFЏ}a/-Zxt]N-'`s -R̅a0aJU" -ΝLjC+3erpMq%#iOco-g2bOV4䫙۶ 0I̘qk.Z1F-ywu mT)3t.-I;5GV^ yI-QVh$#2DNiȘLyLyໂ? XF"PBe< ;䊐doD`c."QV\K$FM-zG ^x`8.q}{crg"#9~Okwhq>^^Ě^Bn:F+ZGzkjNK#܄<Zͳ o~ӣNxU։ױ뀐gz\Tx1((C[F^U`+<ǯu!RӔ7@0!h#IeT]8$Aҋg\C36KmV̮9vE)Ɲ]d/̌{?=+^RSA<C2pg -t1)jBǮ -Y --P7n?{ݏWŰqlXcQ_2U]Oz
Zeh_2NfcU-5j=]m2|Wث=e[B12ϾmM-kUee=+_23
LOFs쯍#@1bSXRt}Ɛ -,肭%/*9p k zoNPk`ZG|WܒfpH&Cn\djM3N-VÏaUl7E -[lXg5v{yj^RLx}m!M|m'&Jh&D/MIS46J9BKI
ǶR~lqT8"ĈYw/U15u5^Zr=xC/]GBn`nZ!5EdR'̽ -|6dom6e>A,mB_uq[JB#\銹| -m~lp&ÌML#t#D;PMP yĜ'/'#>uym^4jPO
F`}Q$bѽ&?| -IxƟiƓ2;W(?OH$QؖtS~uCkJFu]=rRUwbX]6/ڠ[Ă$%zyS@ -&tAt4N¿_]uKrq_ 0ˆkёP.o_7/}-y8|q7Hґ`&XxC41EI.3͇`Է%Vr,u_2EZgw$B*½lIII*,~$r%-E4d$IWoi6BXk[;uyl=؛l$(r\}Y慜|`EsIŹ.ڊ?WN^k2 4{5;▀VY3ȥiG - ;ξXw63y -CtX yD*dj8qI Ynuoᶄ -1^?m!8
Z[=ya ^^WƂ9NsamH+gHu7sY[_}UGnXP.q<X]wo ڏљnQ2S - j
wbgaHK+W}8ƏڴV4SC'Ib5p/ȿ63#ao)V
(3oЌvR4.dW8"r|W -ɋ=, =,U -Gt*l/Ą*!.
W,r`㏓y99--soP-}hx3N"mExܶXXVg1xEes/! TJ/2]h>SP1k&5FQj>7YMDW*օJ4Hj
1I(xrL٪̇RRI=& o
f`*eyܟ*ȼnXVc!kv].Xn3FK3{sYArONKx2~/"<XEjnj)XvU"GCHjx*:1㭽۽ptF,eP!e<x#@2ZaS8N_
;ԗϫ!a| ݿ@m؏ЎJD/KZuP JH[[gyЇ{~xi_OLf#MA\^},U,ze/3Bm{5{˶ͭ&M(UEz -džڼEx.^܇tn)Qr1QRL}JT8X5h5ln?11bqHck->_BaZHp!9jBr Ua/Qn+LxwKʄxEۉ^ 6@8B'>d9U4F.{Ѡ -`Oo82OMT㾂wn4ԯ젻h)]YZ#Ʀx2rKT>+'jBnt`I`ie$|]]:)+`-ݳoSw~ZB+א -tpYKKobފEMEe
S~Cfr~ >9<dm`2R}VTJ>Bj梵&$\ړ_[*2l ?*!Qpsa.O`o]$Ct}z5$k*9vFivmϊD|aE?IH%!0Ii9Uw$"16Olsڢֈ"zM -r>m0N3 -xȨY1Unqc> w)i -endstream -endobj -1402 0 obj << -/Type /FontDescriptor -/FontName /VGXJGE+CMBX12 -/Flags 4 -/FontBBox [-53 -251 1139 750] -/Ascent 694 -/CapHeight 686 -/Descent -194 -/ItalicAngle 0 -/StemV 109 -/XHeight 444 -/CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/a/b/c/d/e/eight/f/fi/five/four/g/h/hyphen/i/j/k/l/m/n/nine/numbersign/o/one/p/period/q/r/s/seven/six/t/three/two/u/v/w/x/y/zero) -/FontFile 1401 0 R ->> endobj -1403 0 obj << -/Length1 1565 -/Length2 7743 -/Length3 0 -/Length 8771 -/Filter /FlateDecode ->> -stream -xڍT6RHM mtwFml[JJC$n^;}auw\s˃Ǻ2s"
44T -\!kC
@ -"p?!ĭ1(G PV\ -r}$2VDъpWc8ju;1
Gw}{Pzg C^/>֡ -% -~KҰJOvlW@f0feIC!]GLW+P,{Y0ȓ8*^8-2VHy`fQ[9{2h+9}⻇55d(EMiŭuɼtK'FW'Y/C;;c? zX][1%"ڗ<x堣w;ɄgNV h>VK#Ti||5P)d3Ei<<ZϾ5!{WPIݦKM8ڔ&=O<
qQ,.O$nYCAHc-ӵd8oyA[eoNzvme_v]mID}.MiDY3E"7ssl:[k6uiK4#'Is3W62)fV+i3!W?IaXO^K
܋@an&66$"0{ 4{a.a-8 8\pReЯ{Nw?m%Fm+|+<lU\sPv;SqtKwu]epgRC|ƌR㤥ZzYָJ_A<@l!냊;@5lqKAWLzB7 -Ji8ۘn56%[ 9M8ݪJ5Pa8d졵fQ[&R$[pYH`kPP4|[BF
94Dt(9>zս?Ihdk] -Qd7V,U{WSdEW|d-$?8mׅWØwG<w*]_R3!ЎWUaio6q^q(G^W|`巻Ӝo -6xi=p^yŰbT
fZD$TޘwQEs>K_D]!wʧܘդĵ -^/?u1jY+X
X*CiϒFMad -t1yP^ :Ⱥ]?$\tj! ->ث]Y]_~Όı)mZsirKrUߍמ:vЫOl(˭=aH/,za$I8EYx<evǠW9/PO$rn}|Vwd$]Ŭ.ZQ9}\>"̜2<ŎjB.IWd -'mKS#QhǮJW<QA7i%?۲)]TқiL3]vɝxn#9W|Wp}փͷøJY.Pnt&⢚O|xۙaЀ18ZRjEn~۱zCCd-~@L&#ۤ8mB2Ù&~C_f?I(Ѹ3_n~"#dvߠāM/T?\چ5+)XJPΗКť-J=HD<V%`vo)}tH_,[ar`⽞ږ&fj|yM1oS^2gy XQ.m5GUf+KVVMtgxqXpGͽ^O^뤩LcЍ@Eŗ->&m}~df~ \uD1j`{qOasKX݁%9VTbLH -LY04+ӬgLzmԪy$Au~y]=njUbO2>{{SQ-29UgKvE,vd7{c9M~5+R -L?u/2fGKfz_+?ǥŧv֗g6M݊{]n<d=U0daj~gYmS.<l()倰m/<{_$.5bƽb)J>>dB($kPs'E0wz+`gI0C堄ޗ#Zs0Z9y
xaS+W1d Z"A2^/p5
o+{:%El#;(,(}Y}Vѫ}7ɖLaxOvrp҅nQMC>둑f]qnڤ6 ->1gT/&Hf,Nɑ`r%R7#F"1_0zZfAt;<Z̮Ѯ:~RGYg%De|7w7v6r&U6|v+j~!ZUa5|јXz[n!v3T-]MQGVksR_ٗFuYΦᵾ쉄ZDo|>[M*`0}U-lV"a>hKi Czk,7u2$8N ~ -n\nTpj3~s4m5G1*M
xA1WxIO a&IGQtKud%V@EQn}ԦZ:[#alk
s#k7^*ܩR<:SkcpKފׯ\@ӍٱNe)ϊ ]cf %x /ZF} -ro1E5梧z© -S16+ۏ~$qcF:\gttJcu 6qf8g${ -n$rR6n|V]/vso;x)9K7Uu|3''CO۔&nijhz! ֦ULu^N֓-cZurPiW#md%ʞ|[c%9E϶^:_Kus,q *MRJ-WL+#UFwZM%<Vƛ}2hL՜>:׀6HQpo{ TKYqحGIZř+*D -\n7lXxa3?/-FH9{Hy
4} p̜FIu?!S}yP"q&QbO_y'=?U170ιY,ӦQ4E;ƫR68ـ, ]si s1k3vD0DNK]^tٍ0ɱ|Rim%c,ZR(n[ι%1AxFDUN>(y=qq;,V%&UM;a,4}`cl鬍|gʻmk ń?3N"t'ʙ_m$=a$LLIFہ(ɣswM$%#c{"/XIzR/+{}`nWpmNJ8. O;x F܊=$ϡM 3`
d16ܙޙʃb@2WKtVew0a!>[:qλ{[G?쐲|2BN_}bTD)RxoXc68t`sC".Q{˻0Vig3(]UEJE0v#N1 -]x}Y|No4T6{
j}Dcxs+zhY7<xy&AvLVbuaoZ!M!
KcY3\zg< ]dY>$w䰳 hgD_3ʑh|(\L0b(W䮏cVnTW^N<|Uz;2tZX!8}>ۮz%</O*o
uDe0sH+՜fgVȴs]RK -pe+>"M7¸Ȫ\ais=SJz|'3
"Npx%il:.DtF{k-AA>QYgYN'k'$T3@Б;L919w-QJ! -6`?
d$';*1Fe5E3#8gnLIVhvD89 -Սr1n!;@{Ȏ]YkuO&v$q?Zހ#j){ -Rs
%*>[&)]] d`mUTN툑u -c[?VɒN)c6-e]ȸc:U{|hf(!N6|B'pHeY%
UDXSBmWo;'qC3usK<XRtGXϨD='3J?k'{Ӓ=ݢƴ[_Vgx{t2me<tx[,7La~-m܋fHdqgE֧T[eSWԛH %sIHXQ03MTU~{҂hv`}IE=p?8.b!5zYT#<N]^֔7(CXz ~zc&|zxr;G"H-:՜⒱*2<p0}EY=r:~53cX_E"^@ACBmzT'= |NFr;Bjo(X_O${tNے2<E 2s7{@=n*ëך/''2$ wz,~~lg&RHtK3fn -endstream -endobj -1404 0 obj << -/Type /FontDescriptor -/FontName /TDJJBR+CMMI10 -/Flags 4 -/FontBBox [-32 -250 1048 750] -/Ascent 694 -/CapHeight 683 -/Descent -194 -/ItalicAngle -14 -/StemV 72 -/XHeight 431 -/CharSet (/A/B/C/a/c/n/o/period/r/s/t) -/FontFile 1403 0 R ->> endobj -1405 0 obj << -/Length1 1430 -/Length2 6052 -/Length3 0 -/Length 7024 -/Filter /FlateDecode ->> -stream -xڍtTk.H(RJ/3ttw9 - -HtuΚyY׀OeSA!1|~&B` 1!&f3y(rPA1XB!uO -P,<n4?QW-+#Q0$M?%{&Dy#H{_ =pwO_.X?:G` -G'Z(v g`pOaG:b9*p.cI[GtQh'
vv.gAa-wH;uP_b,!=7~$ -
1 -65`
t`@ -+Tc5!Cyfrvsq=;|wTV&M\^{2A'$MIԣG1HޱÀ4co[e*w#Zʲ5č/cv.p.&|ɢ!tBȻl{5.T+ly5 -C,͠$LPi<[p<k#VR@+Y[ 99c
ߊP!'B"mbc,юRs*!Mo'{G{[8ANv
3^ڙ&()ުBҥ|r:v3"%#1i3Q]LeI=\Vr[<QeNqFS0=J+<1!Y-6S_qc-;rm|0y+&aC=0GhOF>]}ʎo*CN P]~Fɓ#XzCf֒Olǩar
v9bJNbgyn~_25T[/e46ZЛ毞Z}H9cmvOA6.KrdnX246[e(DF%[b/g`VU -870Xt ̵LSf%xZ|&[@Q~'l$Y:d,߽O~>$Rn\IKNø{yX{r%6DžAB<NAW|zy(,.uy}ďq9A*]~CtUþN_iζt\s$r)D.'%h<Di}Y`u|7Õf9B-m֓RO/D2mB
}qgL1b yf[a -xl$Bf]KƕI!{Wj2~ZHBYM~uZ^۱cdۧVdHdYp4ĄG8q>7`M^9un#egѮF:7掃FiߊhgE5Q) -3 -='T;S -Y%M h^QPy)g4˕l&~2zaDޥRˎb{C{EI1 -3 -x4s]x\D"8ήk6賮~-@HOZqJ5Qog1>㾙TڴxTr+YVE+ ARSFC rp}~Ff]ADҊY0]/Inۮ7)69<b^v(#szpuFjݷ0MYĕq
iYȋMҙl%777*rnFP'Y]!x&uOeURZp&??]ϯDLݕ{}S.f - r8ʻuS?"zfCL`*,QA{7{ Id{_AjvS7ŀuKvU3)=|/..w -+5SGLu*ߝ] E̅AB-%/ڵ>6E:=[-]_Hg}PSCbj~
FMTWm74z6t~c>EMdEyNG;?[Gd:C\{47ܨ>jG~Ԭa)ηicJpnv7Ċv+JDqgw8Feu?j&_U+8!W6|~$3[>ؕ+ MdH~gk^j/3,^2/߉#L{k --$F˖&3Ր=w|Xܑ,_镆&RƝo6F_v8?L;>NM㚫rG|\i<%"~A3e3(6^RXb/ZEo{'_Ogj8t:ǥ(; nC`/X[@"d47Ydؤ䈿oĨibvT
Վ[W-UR_1 -%(Wdk]ǩ|pXԢD; -q81Sѝ(~Уȅ]S}<rrf)|'ǻgWqj<{ -K;kFʭ*>eCUHF~~2v<$< Lu:V+(<7$$2@Y/WȮ3"A*.A<<dN [OUW2T -H]#}"Ҥ(nXƒ49w5?)&ؘW_߅55Nϧ` Bl#
fHVoMi-PWm~ -!Ƶ%v>+ʪ+yu:2Ew+$e -e7/1z͘S:*2 Qr]#+,YobfOZ9Sn"YA#[Z?ϭ 68NxN,0-$ϲr̓>,*x}<C3r4";lx2E徟;_ -|*F*3GY̥Cc23hb%(2Ƒ~3Rq!wX߆IEp2W~ftѫu;;wƄsp{\K|N9!d?WةofyݣM>Q8bδ-Htl'ءWT\7%yA~3+ )/֦k d<1љ&9K3N/E|途TQZ(l#iGP=1p'g*?Xd<GsQ^ǭ\j(T9H{0 -dX?2.Y7Ӧ$xn(KX+6p;8Q²{E EmHt})3CԮ4u!6{*%0f+U`zhy{]bmP"&n@_ꚇiVAgΥPքʼvI]|+Zޑ~Ls!afeu|䓓ދ掲Xvͧ-CqjziZN/(%fG q -DULFł{ -?%j)}GYL`tzAk)`ʷisj&\Fqd9vn{.i]N:Ue(s-4!sM/>(<YDo!:S>.|I(ƃQ7hc0wJtZ`NTNp7^mȍNe#fp
Of-h˟l0W|5̟y$}}:<mc:Co0s=*{_nBp$%2%x)HV%a<'\H)ۄBŦ[3iA[Å̳$
zy틟4]xU1gV7&ω,劾~9]LyTWp? -endstream -endobj -1406 0 obj << -/Type /FontDescriptor -/FontName /ZRLUIR+CMMI8 -/Flags 4 -/FontBBox [-24 -250 1110 750] -/Ascent 694 -/CapHeight 683 -/Descent -194 -/ItalicAngle -14 -/StemV 78 -/XHeight 431 -/CharSet (/greater/less) -/FontFile 1405 0 R ->> endobj -1407 0 obj << -/Length1 1430 -/Length2 6052 -/Length3 0 -/Length 7024 -/Filter /FlateDecode ->> -stream -xڍT4k(RB"5j FB*jמ-joEjj(J=n:s=9ٟ<_N6]}
D` 0@AKKM - -q#p_!%1?͏DI<{}r -lPfG'{@8 @?,pA"15_uGzB -~ӽ~LƮKve8.|e1F4M z^e=ۙQAKS5$c=ʮNthPw\xQˢ(rh%ikZok6]Es< ڻu;*S#bebʿǘ?Ey -8f{1E=lĂN8&J7Ѣʅv=['t(yxNP_/+<AFL&Y KxWr?b[kJx:;oOExmСb@#vYX<.+'y1Ґi7kiRMAU:H&G?8J
-!O,4:11 rD>'ąS)՛/,!ZG,IWʣ`.gE^>-)vSܩ{,*ya\3UQFb^yMvcċmJYN-tz~FR}.?ke&#)<N$[+Z2L>0g|`nCii cit^Okf -bZ=Xؤ9fp]Ȫ}\t\;q?9˾zM<L$n7ٱ(D)Q%M4 -!LEY -Q2 7{JKRXIw1[hȊ||p -~tR+XÎw%(nͭ+J?vYr6r$`ǻ9/a&bJ]Eͼ!i-m^!N礷j&[1!_+3rdwXhwQ6TOf<`Դti31SAlbF4"TlEc>Ɛ3Z>rOg]SDۉu;:lM(;JgdɺD?B. -;
.mGf[Dw9;e\c{^E7hwLdEX\&⏑Th"VE.ziO,)}'}s4_gd\1mc{7F7\``:L{*Z=Maf9nR!3tW$[e˕++p -#4e~)\[1p*YH{Ν[=o+r
*]LP
XP-N^ -joi8SWxR;0ǖ}>c!KAٶ5<-2I/~|rOBϼ!EIV+CK6f~lvܸm9;WdDJMHv7hȕ?iVT1;)aXHP4mvrf3[qA̸Ф"4!|8cG~(_f!Ogk7Xi -dܿh߰:?2w7d2Hy -`<i
-錞5zݝZjϕduPW!g*_=]6櫛5h)gy|n,T=*- Գc8p$|ʷE<MHz~>*VuY;do*q)<@5! O * z d]C?&7D,DLND"ɜN_-z].b>HZv\μ^hH,ҵT`P\*Tdi^Gv99/(9# d閍`!8V+1Ĝ<#D?+GUrvҦ<&y4W觫()烵@1mZhj0o\<wyǿ}J#sV21Gt [Ԁ0(ڙwH²$KbUK"P
Z{kؒHާ Q}~RϰMv!fH|ivQ}Seg-xP3?~SA<VGLTv99{79-ڣ2y<`~&Y#WtP-TCh_}'oю"[ڋ+2,-য.vFyU~|Sϭ;רjxǂlQ4Veq).VЭIc~צ\CY%jUFmzڭGx!1
~g]ajcA/oɊ$)6ICܕ_?qoZ8: -5&v0z);!Ԛ{6-ZSi -H\Cd<,AGK`5M*J5O-
XsKKߺ6-t>B(Yy8Szdd9CgjҫCz3έʬ.`đ -7ES= oR Yjlue,=Y9XnRzR&Ȉ5h*9ŐЁ;XPGdF9GS/? -˙(oj= -jg~ +||UI&6jMi㝯wa(F-FSlĀcŶ`YHDK0dzFT7M=!6ݳ]dBĀftJW-xHo%$PWy+ }3K&n;uȱ=JE.)УtBg9hY>pNWyjj0k(,e|Zo@D2jntm)&a` D6HzkL±K"V5|_p.=<5wB^ 6 -y(7n+YK~5rBu^ZWɯ2Ln, -{؉_Ȯ+"{hmxJW؛Z=1Vr1ZƁ/]0R3;\3pN%N -oT:"Ϩm>2Z2>!v=a֝>Ü=fn[-,}Oh߆ J5h#tJͷF:F.Kζ9MD(]Yn-?~\B\KPz@1KlYX˝ݞ -L;K$uf'Iv_{bC,\v2~ŧN.=ɀЕe L|boH߾tobBTmlWF31F,K깐_o3rZ(NK.ГHsɇo]l -@dS͉H -q\➧
Es[Tj-|w/=#BYVmJk4],#nY>؆ ENNE%6ڷQ..'s>>.lY3[V?#/x'}yҖmn:UfHSGQMqAf˥Ko -.JU0b<%FN@-in+LE7$9H3otpJW<cZ!66[ym%v834[C: AD*8ij!g*\nnrҖ<Ư"^zCÇ@sq[G"d=a -Vxa7.T_ -;l}o&3$(*XUH}LwEHkl
^lZr~7]-Q\ Y|nUU͛;}z+2n <W5jܣ{z3A6ܕ{U,%WūyPy*-> -uubtd8x[y{ZDv!d:%;"UMC(fLxL|q{>ŸU@CpY{?v%|bZs.c*fccKA{RY;zR[ >fnA,hu4>(:}"z4WPt3'982nuXfigf
'St.as-MY5Wy/c; -\B7hjjgK;ᥭRN՟nzݗ+;r)=劁,H[W݂Z&ze:Y*rzśZi
R%BK_|,p/"hV6Y!RzVt>ۡoyEXޥ~дEgyzd4ׯ:!Zˎ2#U6Ƴۭ/09:Z,z5RvӤ9u]o*OJG-~ӞK< Qi]Tǫ}[s)4?,'jnO9:.;^2Mp3ʞSv@|?wdS*ME1M7"5W({V<G]IoeQ:V`$ņ-9gPYV|A܄s|p(Bi'(M{\>%qsrrq"Bg01rRQ%7l߷C_߯ɘJaW%ȍHݐ6˯ g'9S-s;j{yOf_a̶V2BoIS1D&uO^lG@v8 %wQ|~e/Vݦ1PFGLo>d;L9\31%iBDDYo[pJʐ9uEoOɖH5X5ao -endstream -endobj -1408 0 obj << -/Type /FontDescriptor -/FontName /YJCLWH+CMMI9 -/Flags 4 -/FontBBox [-29 -250 1075 750] -/Ascent 694 -/CapHeight 683 -/Descent -194 -/ItalicAngle -14 -/StemV 74 -/XHeight 431 -/CharSet (/greater/less) -/FontFile 1407 0 R ->> endobj -1409 0 obj << -/Length1 2679 -/Length2 23067 -/Length3 0 -/Length 24583 -/Filter /FlateDecode ->> -stream -xڌP\iNи{.ww4ww.C|o9UYkw71P֙ `ffcdffEPt#F::Ya 4rčAv -v -` -:ii
kMTil:߆458Up"R?@O.|[3dx,E<~)Ѕ}jN9粯1ѺsY80ph(swh^e|Nc -o~|\Pgu%}Cy6>C%z"UR6_H>u-kFjmS_r'^N2 -}/ T -ݹLtN*`k+`YĿG }hjHnVЀN*oa*tDP-k23QWw'<f}9?T6^*vn͡.Zq*w^^ZIfRfHDnRʘ.*K=v8H/VDzX=3kVjq䫐F1L5ܙܕc~|tѩI)MJ$ -~wޘL]ԕĦ)EK]iwٍLFpYa@ޒxan0Vm?k]5Rd#M_D<N쒌{YW78 )Iwӯ7#_"74DVj3PdlҀR
B:ׅl,'f*'ݺ
[rnmpMqpcg_ݥrUl#q,)IgYkuQovhHBFSaŦ|WEWf% fEBzy#R_'&; &\FY@97}2 =xT:Fr܍T#)Z8wk -d*"⌡,"RoWo6
MK#9kj2Fp
RN
su;ݕY VP8Z}\XHLjv!Zx5!tmm=`Wbw%0iͫ~<0c$,R}T\1Źp0Nʆ+pU[qMx[jT(\콨Tv*H9>V%Y*Nerrߞ*tqN#QCxpr㋔I՞ai.v -8. i9asmE3<]%BrIX&48cSۺ柝+)Jw?NQ?qH<h'1Uk(\Q[.bu'>v 7ZowǢ=,* \{tFУkH~8}?O_53鶽ͪgWַ 2)$c1r+js. n)t>{e@(\#oˡvFYp2[S-Ps#0LG=]BakO
ɼ
&ecQ70Mp|h%NA͚1'h'D&۾, -e \^"M5Qy2s2l,k*nDj֥wж0 pQ`TP{ձ.!E^
fSP7_;=^9sj;ᄕXNr$'}a "K5AQPXxs]Ҧs*Zͺ챜WV -)%JsI6jK{Q|ՌU&3Y֡x!5 -֑&RnDd*%F-KvnӾ[¤[Or?>wj|6Z1ZN|T62?ш]fPγY\<^Hppd1g|lea|'G2G¼ WE().ryD%sm[kN0YXI+~9""8~_('V( -D]Ebt:;J4kz6dyۻ^ gƧ-
0:Dc6kU<; -ݗpMPϙ>K|A\V,.4}qPy=(7yw -Ajr\pti:ڷg@%¨%0IIp
YyhFA*(2[{):%4\9YHߴVz}z7dk`)+G"Pw36P٨H%'ٸz!xP:_nը@#e9uB~s =S2FMHڴ6QKcaxD811(/l8F-_N/mC̝?3UOePwA5X#yf4p=1|3(q
"6
z*:q|~(w!e5mk_^[CM{gGk;хo)Y$̏GMIHOF:f!9ǰZ
|RDoIDo8uIgu`XR&L8xYdD^7:1AG~1)uT,S=(4KJΣljAdQEcو:ͪN$J_UTPUȺĽ gQ;Cj|"c[%J#_&\
äqJ-Ჽw-0қŇ(2~߅l1Sܜڮ!w*=:(B3#ۦD -Al`c$4fc
Lȉm\rW7#&YwLJt~zl,bUåBos>p/fl\UqX:A2-_6ҞKK~ -/Lf>l)'cECR)Tf -N3s4~<565k7#-RXMHw^D)IL|$6xwV7y#.@o|eJB(#?X
'aXMwJ,t4?ovZ
-W0`MdӶ^VlUT29?jIsog{GO`$?]L#,Y(}4j:صxBvX#wJYNvA01q%7}F9W*S) -E/l8UNm0dfق -w̦~~hVe<ɸJ?dÈF5+6lLÕ} V_9`QKTC2Kg9ėK-ZJp>0tfe<O%z -K_[8a -܆Nڠd.DJD7Q-]*{:f.Ni;F(~{bJZHqFE:a(Ǡi5*+iؙљ+vyS;K
FW+5zGf>E)Hg= -a((J:-|qLIQ7yTo[v]ϊS,]W~n!pCa<oSb̅ANslFhEȑ:Փo
vKd@#zX^cXȏsG9
o-7BK=GѢψg(@^ -J(z
SFʄZ]u#h0~n(Эwngۑ,k{\O}si̙IC\V1
D1l~.U7D:}"/c*]gAhWI0!aKf:M6.Rx*?OG"xd$f@NA\N806It)כmj8#UdBʯ"GHt]-mph+h)䜮ujxڨd8UB`STw}~ئRtXNR/[Lͥ
}P#w(*<Khh,_F^}[gީP|f#ՇEp~B|OHR$m%Wiz#y{^./
X ,22sU -۰1;YGbkbq2+cԳUfgxX&\LBG͍^\wvA=zYvous%+RP[F*\IMLw /I^`*"ªYg寠iZ `7ko]e\WWa -uI^YsZQ1F;wwU˒ˋ6a,A{OLFwջơ`)a2ikwϼ#? Fxhe}fuI0.4V<IfA/*oHąs>kf>T]Ga:nZTa[:!f;!3' AJqVzLA=_y:y7G۴].\!/ԛ6-%>fcU\a??xÌ9wZf:DbVuT˺{_5L%kne"|zP nYyK -~Hmo5~Cd+C^En3`Ovp<^c>jzgXvu{BEU{%ZJeەx$G"xU؇rUkbM|k!mLjtZ=: -~UsJ2V!Ȑkt'E5Ub@cm/7ZnԁM`odn=:l9軲r(< -k8{Bٹ"<;]co1iڰ|ӿ< Coi%Jjtu?&8џɨ M?eZOROSn`6Bk7ގ9緾3dƑFJ$m0.f@:[:Eꡚ*Ze[6 Īi1@0~Ly|SpEZK}J{٨Q+<͎nM+viޗ{0z5CF -ӧ}fƫu#{68^ro~U&cX%jm>;35MBrZ[/&<WN8Aq̯=kvWGJѵxf30lG<Y@v歋kJw6ֺ;鮮\1}Dh=V
}šp6ZO2/=Dj'ƹX>͈,}'Ջ
U *a~|aKz2n:N -Π/Ѡ3LTc
;ʜ[)= {?1xg?ٵlȼH4{7iɼƦ?VnvO<-=Vu}wP|U[p̝.s"2.̟('s2yɷ~]ȤMI˂zoWA`}G<M06<UߢK>B9LąYfcs ,䭮8cWFQciX@ȕ)",YGkw[$/61%A¨Ojf&B"qko`O; lWc #c XIX˝wZ?쌒V@'.ˍ:-@ټFT0~/sogb/r{bVҋέgHT/u{%~pޜ?ok/=$oVUx{Oզ@y~ՂUQA7DiLdLg@7EoЃ?8N)lpO!=5-1&M!
`ȱo=[r%D`ǙJKo֧y$e``V܂PYR'!6c>d)+kŇaȎ%KpqZ@7SqdcgJ~Cۃ[r(̐8WUq#-=E*N -V֬o\K
#^Õ2̌J}k{
aCHDc#C"-NZ瘩U3AW_F*Jq;p?1 nFߟ(?
W ҬS8t]a4{4]ɸ<1nOj8d;lMPh涱͇+IƟWaʷu1{e'l}'ei#7aɌ#瞀5OJXvKHf(Q)2Tp&2\eD A} -+[£q~{iMX8([IIq1)Z#qRF,'[dEW*^8
b皵[~gE~Efjy~K.%,RAo60L^Del[?gZ⋯Zxw)K.I!K.YRڀs#6遄^#i0. -n\xۀ{<rO֛#$Ua>Z)g&̍7=nyS8[=I%I";N5E@{wU}
'UOvWG6߳vJ=E
T7{اMUOLUkDJȵQC1{ -F(wXb`"y:ÃoԍA/
U7.;,FtBnC9}pnt:Էߕ˟햐G,~H=h==ܯ0Wp <E$K{p*0mfDk9bXAzMV#RCh/ǏcV%]kG=Hɯ,Cp`S>Jx3FMDjL[!lN6LH8)778Kw,bI*~ѿ 3X篎7Z~]h!6W˺%Ii(-)4
>^~Z\'7~{{]γ(k,%B88*YwHI-ؒzls]Rv2DhC253b;6dزfbuS2+esf'Ro2B^?~ - \W,=`pNL*E<hEE5sbonɹ*-QsPq -}O;džÈclSkB*"};w0Y)1ƺMM/3xƎ`u0(ZM~EFWAq<%D$W{3,Xq)l2,a\F'h ̚ Gj1B䖿K8Z<瓂8}KF6^#ty 7c9 -7%E*ф\]$0̬ICn;L;A4wJ%]DZv;\prkicIgC̶uraU#]]ѰBE&h<)^gY>k Zv
*HL%gAF75K[ߡ]TLP0T }NQWO)0|$V ażěMpЕftݢYn_7h/M1`U܃ۼ\cFa 8X̂wX\HOoӇoSt,}:]cD-əa<7f!lA_:ׅ\CAFeoeg+
n,!Np^\5̹#.u5
ZHn Ј m±d#b¾nn!|wIStZr^Otks]o0?w3 -fAƅȭӧh #@[<o]ڠ;PJJy[:oh{}!=oMsT3Zd -];6${E -I%XiToDwmV6ی流9 -!2#c1oörc._ę -߷g:XvMoQ Ԛ쎚\MlUv"x23_QJYse$77F[u35pO;=a9R]U^c&6Lk9K45z"?:Nձ@6wLw
Ac5qYz)NWt8>FKIg"l'^㘋v;I@07skV(<%ZN6e[7hfHG8Ꞅf
z{E4?⫁a~N!hwņ?`Lj3u҈6>kD[-ahl68,l@pK[U>
&Xl,pX(- ^6b(TtF-bФ$xт;h ۈYDfF_G:LOF2;Bԁk\uO-ɣZC
-WFej({DȡpxtG{l]>'
N5ۨqҩ
8c{YK#`#~j(`0En_vPqਥ,arDZN|bl(&>- -SD.|pYPw[C=v{u)-b_ia q͡5bCkiq6jn*2
X}='H>8Va5SΟ&% -O>JlL!*D0 hl|ŭrJ^ُ#O5G4't\AFPIN#3=M?wL8]Jng2 -p%"*PܳVFѕ%IBJymeYlty t"L7kG$.gPI)VPT=ʹW"Nqׁx0=@F,DH$ -;R1x6D<UWtkhS/AO<`صOuGRWR-0sJ_>^)gKɆ!4`pSbu(T\ŰZl̏n ,r&qM!1: |SHP8"mrxh|!,bel -Ǥq#U$ضJVp?Gk?J1-1rq#{G<]\ $ -t)iB0&]ſ2EE"|3<
K}-U JJvn9E!J[yj
bb.ju`Y{@7=V`듔'Z%+))P.'1H/[zHчNX_hQ%TWqmuӃe7C_Rt=?' jRm˓pWQ] -dBmfע'YkPZc=>6ڧ\i5MOoJP3n?1&8ֲXC -oyaMTOĿ -EZ*ᇚ`i,A"gA&߰܋AaPзQ1S]<tBy9YE -_f}U߮#ЭNOr5=T"u'z˾>֣ ۭ? -di&2N3/wɽRBy5왺@F WyGwi&p
C(w1܍2$_
c.k"E}:
)'ںk`h+KyW})lP(4ol謒S#[?wnq"@MiGŤ -LbJ^)y3ru&}>&HOttpu]b
Q/~ѐH+ -?.yXfU~Lzjd<*)YUBZt6[.Y&w8jGЏLx.ZH>{R`~{z~'rV^ -@'h4 ^]nn.T$`3fl֕'G}\Or&ɄAM?TIzҞ8lO>F2ed^*n"f+̭ВJڱAuav4'P<4B7*֠:P/7UZ$Z4º@9`>kl_W/bKޚe6s171M_(,?ݙrx&DBFMማwzѢBZzMLE6љ^q139c#S73)Mvƻ0o95.xwmLT^!Qo1>?Ag!r^WyޚZiBVVm}=Bjwyz?6&m9]brB7A!mg!KxxDIO߇̲vqvzL'Á#RLW<xNkFEX*)F7Jyy<<g$։V|v`.DH֕~ps0-ƒx_",P:DZqҕ:^bВUAUi6A(N.k$m<]*3lψԺA~$
˳OtajIE1t$`PXZ|&[</*b֞p8E$~@XԨ}AiJzL.Gtj[S3!Mfh\.9+qJ4p4-E, fRj[#7[vw/*fҐ^=&B 1d#|ߕ1V`X9nF3uז2P/O;3v8i",SgЈQϞX/R`=H05?Pjd>_-k'LcrߔFim7d_\Iued/NOGDK
*~ׄ8ufA%[q"vQkcaO,n#5ġ-3MQ)&l -M<(R`Vj
^d!Yɜ||_N鿼]NdC裵>&L:+w;Ɲ8p ׃ OrL8xwg4ܡ1`d/3qajmTσÖ\x6 -)z<-sH5\J7 U7"Wd]/Tc!eN -eZG1IFDGwW[oz5Kol*2bpF$rTKQaP[A5b\@E֖~,Vk=A_j=Z:%Xi9cjkBَ_X$iW#S5"I<&&jڰi`"4sfm'RŻ0%SL|[h7Dlf!'AL4?9mt5<L(0ofj:(2z$'.e{l{KdruL{^NK]""+9 -3!~PTmeHʸB\32sg>%wnֲoڨ\FQ]LVW`; 2§1;vI19(! n0 -=klAf$(1_BPjN!WHfi+Ӎ={E4O7B7!$/MR -롑_Gb[Mhր&m%*]+TϬȑ/7F4'8]iǒ(
IFpco[عԟ#IRu}5a -dF
sѦ"[KJMpx$I\?RDG ]<w558<k̏0?0fvawBy\Vv}*qk{G/$:}Ew? GkQ1,ScҴG{ڬsOx)DvsUqߧ6T_P8 -Uhf9]Xk -nGt'*ܑ9 -@R'X]R3]ȝ3,u6G"M.!g4Q/jtN
5g9lYwwe3Ԋ:}Dv5#&6H}}{ T~ ~U],X]eWLRP~`ss-hMΒ;zb_B -:wV{{|0,Mi0ohʔ%2wgq+V":a;}ra;2xӺ+5+^O g#͍QSVFO(爌D!&f^P&G=Fҟh-rZ,0[iEkG}٫n+c[[$UdnN@Բ HN: -0 USx.&It87c09C ;jA3qltpkpV -z2Wa6"4}rI}5(A,kDZl=%`mum ?GoEcaVo^0.'8SY.)tD(X
/TW -ZqջL|vsnrĴHeՐn~EW0;kzX*Zq+0ЫgZ@pO3<g -Hpls{,.d{kb5Ao]Qe^sVwv|w`REMJAK|jHIXf -$xl?e'Ge"fN1 -FՇ2S2J5f_YY6T-+20ٷvUWkIdC&E& z\ފF*k@)3\7UJML:?H-qAyl -ӂ5ꖩ;(#˘uP{JSm#֚GY4
*8ʖ,Wi_mJnC_Ke%Q,<n*x5yLD=((;KDQY[SJE5aQ8A'Eי8*p=>;6W~O^=#^3Cc81DvPAr
eG{ -j7ɶy촨uct/Z/GH)bs`/qw.qoY KZ{YSJ&;sBо+5R<5Σcb9 -!y(ԣ1BSi ] -g%^dϖ0I#/bT=FUR)J -G)iyy[Yg|G*{`JT -# -[$_h -FdvaI(r+
{DIVS~%i戚%$a%.(`۾ yD:9Np:wu@
q#n>;sX Vr~Tʪ;TϚkϾ_~N=tq
k"W0\g.Rh0Ɯ05C'zxe¬~H9:mR~?/]q#Ey@O? >`X0 -+=k" 8R{8:Q0{>y<QLI1+Ux`gAdAg$fzDWBW{r<ἲljTHZӃ\#j67ĪVөK1YUɐS憥ubM]Bfn̔פfrּ/5~k|hb|S * -Q6Az%SR0vM|DӅ#oFW9]V ΗDؙoч>ͪ!f5<[w<Kl'0Evh5mጤmZ-$^$rֵEReFlv>Vz>C) NHDQ1u3nStR7E&58-oT@C2E$L?T*_ -8o}-G9AJWHf((p|꼅dȾU:mY3%vlT5|kG>sU>L笇G"AU&"cqr<dXTƞ`6XCr -< A8],].fTAR֫Kk2M!zf~uy<4ʻTA䪪w-;1!6Xz_5JYӑf1H71*O5$kVf1mo]BR*zm̡gnAIj~IZ!UK\f`KĜ&c3c˔ʐԑ̯#٩T˛j>H3Ld-naD\35f -^6 -d>A:*X9_VC|V%Y"4 S͞mެ:T9 P4w]o]eJ&Bl)UYzV3Xr0drĕ&y_1yrZ6̕mdx*5=xK.e8vZWeM1GBgPwH=5dw#Éu2($Wt|ڀ-\7ȓ@mS'0ֺ9EA^JysD
P~nc_Jn85Qnt<Xf"ZZvKώq.ni.YYkPOR?/4FN$^K+U5@9×LqE.K_я4*wN8[Kp)S -/R/]((dz(m-`Ů4}I*1(AVB]6;LƮEժ@~羆"s'ѣ11U3yih5!ADq<B^
ߏIF儈|zÍ뀃(#-~sY;6b|~IJ4We!ܪYv""m˥4*nW%}sҫJb@ۘ@ CwGhZ]#Uioovic$y"g!ڐ/"V^d -5G[44d\:BM3Bjn3m=-G魓53qNDVRkl4aCD>]<)==rJz)xU]i~+Xqw -]sJ⹓cvO৳K4YxڟDS_q2Ki&44!s -Ta=qTf!0SLS?K ..ĉ_`_Πe|Cϐښ',ߋ- -4|]-E^륣0Oh2Z)MEUyW=>JGEuXT -[/AF/ix>m~Qe~C_ev*(w<Ɲ{=t;j|x6WW|>xY.D iEbAs0"6֥1.=#7np&vϝX#wFWI=`M.@;,v.ǎoe7zy-۵sp>wU@<PB=mceo"NS̶TZBE-UASb%R}.vlyZ[쀫;ȲV[ -CDoCRaa-,pX¦8ChvX|&
J(oՋL qh" qC(\{%{mBO[b -hщ-aXjġe(ALOd^ sc(҅&Dy -l4ILB]n?b4 Z<uX;>#wZu0P -/43dҋAE?``n~:6Ќ=H[8]CI4K0ufEJjH/j} ,Q#lLt6L+D'gSa־ˊ1RLCr?!Zgm}UsOUuƕ#N"g0
->9>is8YRkI]v>D$+`)ꙃXh\nD*^Z6QC6&J*zḑL]= 0)n3P:B+{,ZUXB̪0 -fR-H0xCIv+s_# ,$A#iDaJJ<p "}hYbXZs7SɐQY*m(EAu%.rxC -endstream -endobj -1410 0 obj << -/Type /FontDescriptor -/FontName /LSSPKW+CMR10 -/Flags 4 -/FontBBox [-40 -250 1009 750] -/Ascent 694 -/CapHeight 683 -/Descent -194 -/ItalicAngle 0 -/StemV 69 -/XHeight 431 -/CharSet (/A/B/C/D/E/F/G/H/I/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/a/b/bracketleft/bracketright/c/colon/comma/d/dotaccent/e/eight/emdash/f/ff/ffi/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/numbersign/o/one/p/parenleft/parenright/period/q/question/quotedblleft/quotedblright/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) -/FontFile 1409 0 R ->> endobj -1411 0 obj << -/Length1 1675 -/Length2 8962 -/Length3 0 -/Length 10046 -/Filter /FlateDecode ->> -stream -xڍ4z7nQM{V1ޛ{ժWQ[UEfWϽys$}I׀G(a(~^8@AK_ -@ d ԝPws? -!iB!<<<xAήp4ceЇB07a6'3^|V=OBB -B - E ->?? -6wp3@!7&G
r:yep7nЂMM nus_ -tr0;uUzBP#.܅w pW[Gwo6wW w)`6pH>n -x1 -h-oK5ڹ}+E*RrĠr -,:mͼޝ/[裸OߗJ+y5Ƚh?{)ĻMyYC([iIM5wP;NFLH_2\ N8 -~vbw^xoCtNVsc8s'+p:^gEI]c{R P ^h3:k="cv%|*%KByr1}cǤR
0@5F7'*Vk/yaH2ed?Lf½Tckr/Y'mk:BoVlCQxj6HӬZ}0jFF?38ur9hXC['?\C'e`{/ -7掦ɧŋ8R\7#JY oeE do(v9:yпr=SǟD=!UOlo*Kbk<D#x^ A0-퉳e
m2*8YZ-6ɶOBnWd:n^FyhE!mVu)86r%E;pk$R*DTZU:Tm5Q||L;)8&uqIDm@ތ -,nsÙ3+aפcڽ[h3Y-XTۄ
(O'v7ONpq6kd/ -sѬ4O8L*`~7h?unƬdmRQ5VF
T>}UK>T{I},"Wr_wVeaC4,Fzm$FYZ{薈S\bu -I86[%ilw@ -<Bglْ"@3הrmmv -u;M)']G;u:rC
Җfhq՜Q3`GiAE/5gh@}LW`.}YM\8b[`2>$kKá -KT$qEU;ٯZVXWs $SacX~m.#Oިa=M&7^OWʘ,j?~P~AA(6(SbTZǀZDm7^˚ x
N̟6>>YPx%{[Ei]ZĄwjPXIJ"Ff eiU۩B`).%<uFNb9/fX -YI8Z>t.2NAl?fT -~&1IIHSCrFj&[F\s{.@OYA
wxNf8ZxPtx5alpm
y~u2*PԽnχ,Yz@*) -}E5ގ']r/0=t>%W`¤ӲG͉]Q -Km'0RQuac;4U 6kVN>xQﰕAI M<
U@!b*Ji_F'3cQU)[Am¢O/]P_<g{;hS{ÄjI -Q~L1rKDgsGzzAOG,bU"qO!F^L
99RPH=VM*.C߆P6 jLv`pdҍ@Gx!.
>g<+}.@.QQG7t!S+AgXptpϡsP2WF<w\p#SS+r2Kָ6tƶD~"9U±C&PXb}Cm5)1J;!}K1l\%E(%v98ѐIݕ%L T#+~=JdPIWoO@Cl$
mcwDdPΡU,=_A/-?&PWh-aqzMυҶ.Ke?G2[q<8W/Ri^8xtOٝxcלY`OӠ<XȈ9߭bl]D+H -tZ~a`MyV6u.7@_mAxw T;&@CV[6=ymMEJm[@d -;3jj\D$z_]~H@]p7]9J Z9* +}gXDuڟ)7*_>%i -ˣCd!a"Le-I1KC"J =bD`ٯ2fΡG{EiX[2pOԾi˫706az*<|qz5ϱ'p]H9sÎIuHWy1:Z>g jV$+-zX7n9\w#"%mSғ,EηqUx_8Tj7uXm-XuPmTNr_ -H兮515F<l_.?6!gZƉbc@mf/J-row+:!FlыM-Z`[gYG qܱs1~Cc9P -WJ$NeXb,a#w[)~X{LO9G%UMe,ǤC|Dv=Ǭ:t`f3L=A-I -SwJb -Y ^HB+6}1.*X{P N(OT:;9+nWhRU-=eӏ;g[|e1t54Oa)$7kd_{]ueUNyw[HBC[_uLrniNQNпf$M#alP5M^CKWrkV̳qXknI#>chИ4TEBa&YzhBi'2^h{13>)[̃
wx=^%Y+:KxB/̪:cOj.ȇb$t5"N,^ r }֔3PBBu%ZUk#-:HV#ג$պ鯅"-ʘ5rǜocE6(
HǂTWh/ -Q+LBhƫ0*},k6!tk!q/:)ļpA[Q}$Qø %ٻ2B$k c_7]2GSvW㝄dqΪVL42ҿ7QIzPG9.1 lNV%ۏL^0h#<)uR -+.t:slѿlzZ7E2ίs>`H㙐*'lQY(¶!-P찘*8sHe]yʯoK48ƘX|TI:}]+Qiz
/1-2AA-ǟ[AUiOGe2clO ~o=6.(t^44>PuAWEҞʁFITj @K7[SX,V#``AoSf|ظr!͙3mN#4!0Ryjp1/m(e{gs$Z'Q6J%OeIc[@⚾.&nnB5Ʋ5Yo瀒le4xh5 -d"UC2if\szt'occ.řaFe7SZv[\ѠT=egh}o"ybf1g
O,(8e5?*-nWC
ԴK
^~qDZޝHb/\ܲQ-{iY~n&LpMa]>Mrwx $t#N5؏q!|@IHy?nS\]Oo3iwcM:>h$Mbʞ flN(h_?oO.ۣbosQ`>ykP@ZYuaJEؐA0]֩8KSxƼ(j8 -P,g}kDѓ^=[RU|(zG@rkqDkCs -ϦQ9ke#<8Ұta+mΩ_ -7`wyD{d|ķrΦBW^/C1MCCUL055Wk X,ԼO -z+r8]b=GhK6Hp10Qvܥ[7S[R,J -Wk]m՜oLL@Hb`pԄhUjT'6XnbjjD74#AI3+ډ{yYW-QDRy84$oGvBq߶6OULa.+@boH>'Qk1\t˴:~_/uʗ@^chAyǚbtTI9iu{Tv#r -0x4kĢ}.~^1\͆ K"6Dz[;zzq:indz˔^Tj\e^T_:Yeڥ -(l\_^!h\ - -endstream -endobj -1412 0 obj << -/Type /FontDescriptor -/FontName /WJRFFS+CMR12 -/Flags 4 -/FontBBox [-34 -251 988 750] -/Ascent 694 -/CapHeight 683 -/Descent -194 -/ItalicAngle 0 -/StemV 65 -/XHeight 431 -/CharSet (/C/J/M/a/c/comma/e/f/i/n/o/one/p/r/s/t/three/two/u/zero) -/FontFile 1411 0 R ->> endobj -1413 0 obj << -/Length1 1575 -/Length2 8015 -/Length3 0 -/Length 9041 -/Filter /FlateDecode ->> -stream -xڍT5t()+
Hw.!ttwwHww(ȋ}sؽ3w;sz(j3IL,| -` -t JXFatw3Uixa -4St|mRd]g}DnxQ EjJ5ʖuvpy=#CDϫ?N_,~^ҽ&Dgji6"6_3'cJT1@w~&aF\w8 H|(*)K?`0+P:FYv(wݻ(Ę|i~{_}WeO:pybըsv
Tnsv[}TI2k?rFa]qVRJB4,yUʹEMI6_`bEe|msQX9p|}19la~Kҍ۔*2q2DPbSp||J'ͩF\a3XK_[hbԞVPYAdx<:[@oR~ye$RO/UI8e=>Q.w;{}3{Y$ -1*GNէ6g:'3lCYd$FW1&n.TLV}yWzmj<СbxĶK8;F+A -gs SaCsGʮ6-e;ka<#ͪbNϟ\i^zik
/-%;'Ud2u<,ҩ
Q<[e?FsIauOMp -;EQre?ZH~zĘ!#J:D(!<k2[-=JDxkNφ*N37WMC) -MneW_k42\5lai?')i oʏ_@`ՠ(pe4][[45{}$ÉunScsK;|~4CgrlB9QU߯:>+\:|R|c))mANqX^Sn9!7K$Js$a${߮ݹk.i>%Er+5hpMCu8@*wD+5*PnWz4@w2%sعEWc 9\Fl -Zޔ34CsBpɪ0G#k+[7L
-/TvgY:U;eG95l6.ÙB$:|Je4FIPB99(؍ni^E+觅0PBx|͇[qnpJoVK7AFBNk*oTr:#t(+ƙC8wX5\"jjeb0H¨>ɚm'Er@8|'&r^R_$ƴ=iB3kr*k.:_iVm0;-H">nHrO~)*/WwP}
:n)ys- -wω7
KeA9/Q|kㄅ4F@ -S)ۼ3hUspѣ9kOGM%xeP'2/ţ.p)_'K~.B0 $Fx^S6em뚸fsZR7nYg?LI<σqcyޘb@]I9F3hxMlXQ&YHs7bڷ:[x$>2nA5XkbK-+ -~1&1Bћr~vm?jH;lA/M@v_
k@74[kT!c?6V/%L'E -"oՉFCy&%䘡Mwqlx)mۄ (U䦋:Kii?Rt#>;QLs;9wfA苻ڧC"*2ZKz{~ -nLnP)bIq
hPT*~WosdZB[ywހym$$9q^H+ipX7U|xn-d_SSg(,.V,}~@u~ <593_#]WhD6~ik[#vSgm!/r:YNi<Bc
3!b}5I?$Je>Hd+LmWK];]!A? dwp։3/N"/Νط)=گo? 5GfL9~TB@njDyS1f;Պ=KZ3rzaB: zSg,gyc^O}i%Iªͤzֶ=0՝MBL7r}CsB)1O^.Iw@bU , -Aw!8ش37^/1?ytlF*\ -h峾݈w*8zzMCZ9Nrhʵ;MJ8Ɉ:kiݫ̄8u%zS\hYWk9bPZlɝiQ D<Lq>!̍4ϸ/7.N8iUd) 벡cT3+a͗ToT?`\/@_d:@VWQȢZ -t%ߩCaY -Tl>vONIi'g!΄8AsNL^ {PK21e]B.S;Yfύ@w5ƘI^MBV:bzTG!lJ[Ů8f
Ox@#e ;EhM+,):dCݞ)>Asq=O2fO^^B{nDf*mVHOOkupDo/u{*Gk3ұlI Y9#H_-M8}r0Sq1ϳ,UPw]@A+!B9!x Fn?Wf9*7 -3a3P\o0+T:&L֣F9V棦͖ь&͠8ɄHдbNiOIg0N2Ys| Mؼ͕Ĩ+^|lH赃D` zp&EtNj*HD:tQLgL_?4J.f}N!`ReO{8P=ii(hY<- -rc1ƹܒNit!ao),
ܝ|&o*ʣM}v ò)Bc;1?0d0'c'Qѓ*e5!At-AVk+MWB -hK*qXZ<Y;P{k6kW#zFVe!p*p!3uVČ#8W(xRӻh{59<;d٨)?-@EL1vՁ0v+vPIb!_͐FO
S -䚿wih%kAY)Zr\vtvzL>'apt!F`#@@G6YADžqf%*\olnyK -^][x4w1T9/v4(0@H3FN4z\j@Ɠl[:? -+q+~ZL{b6OÈSIaއ4W-YIB37kefi>G,+wP,4HՋAF7½e"6K.[[}ܕMډJ; ѿjR}.t+b'=%#Ռ +o#ul)4[~|^ dCń>n"[Tz}
RߗU}uT<M*vC=]g5$=A -UHh0;̈\Lf+0 МGU2x_uš5_Q7VOY -|i}p6^,'f~
5] 1Y;qghS
Y\iP2blfj_pB'&dri|t8\jH_1=ҵ}Wx'~N9kTx7hr-,MZ~sQA^kUԍF:QɆ -)VhP^v(C`}xFL1.Qۼg?mCՁ'_zdR$$"XrmCȓʿC@j+0ΜSfjUޑ)tDaAD$1gw]2mwv7Bhh=+G6t0҂= -ģ<|lɵ+*w5> iL~7xzXg\b)ޕn=MJriR|rB"`"sj2t3)M4%9VQ/1{G,T -3\H o\{>_GP&rR͗[ߊY] ynwPdd4 -S sJ!) TymոK(50NW/6PUysz0|q9k`'iWuѨP-|(O_I| 4lzf`ET+ - g:䧙>oq{QI)ʇiK]fQ➩EYKfosVwa$CخE%h)+jwvxcPyatHq8.|#]RaƱgNjr]+ؐpHH+}Au;GJcntrHsz&%6bu{;* -endstream -endobj -1414 0 obj << -/Type /FontDescriptor -/FontName /XGDFIB+CMR17 -/Flags 4 -/FontBBox [-33 -250 945 749] -/Ascent 694 -/CapHeight 683 -/Descent -195 -/ItalicAngle 0 -/StemV 53 -/XHeight 430 -/CharSet (/C/M/U/a/c/d/e/l/n/o/r/s/t/u) -/FontFile 1413 0 R ->> endobj -1415 0 obj << -/Length1 1533 -/Length2 7501 -/Length3 0 -/Length 8520 -/Filter /FlateDecode ->> -stream -xڍT\."!)04H
%t01tItH4ҍtJw(]w7]9Ϯ쳆FC]j B`\@a -1YM
-(;x -0[ - Sre+wWW3[{@V3P+PЖJ) -OQI,78I,RI]xKrwP4%h64nƘB;w UC]GrO/]!]G#ʳ[dq̶N -ϒ h()lӤ(0vJg?p/& >=P+DZbFqY.v '3$D:'gMV&-_j͖ͧĎDZ \1<Ƶe%J*'2sURlIq -?[0]-02q6O430/ULjQ3/VTr`+rleqa]~:99B9l ڀ?yߑy5qF)M3!YgkW7sNAy^1quI3Ţ/qܙ:3e1l!;CsHl6 -|(0@m[6?p3dLprǛN.ʟids;#ҽtQVƃpF][+v_ΫurZ2-.B0V#/ \Scj~[mjKhi}L'CP!jZSo\}Ð}@2\9C/n&TOZtdmʶmR -XEFMx9+P6o;.h,'y펋ޕVܢ%UUs&B_ُ:<vDzԭ{Ĝ.oTIT)'ZjG4a&H1}zbGZO5-79Zmo3(vK0T|hq4rRXJp9f▝f`D-_Pd;"
8ʆ 5@BMTƞY}z~P&^}l]. -
K8l֮,u>NEb+YF4Ț[ܤmd2&\\PۅdG!7XZν#zҏcքʒ9m:SVaܼڴr;p偵Ӊs祣mpHJޘY/W>.}R)]b -VdA͉&ʠl"Ȅč6kc&DpWc\(ZwGz,Gc3-|oYr2Xo6/873[,F#!_COT%^Px5eȸ{Zuc$(-xjEm:.sBVZ{ -<eFJqiLj˕8`ܔ$\wU"]rLP:q -{T]]v٭,֕z*-GW$gř>Hb!QIl
v$ H[>KO\; -QWl,hiҩUrv34 -1cC>Y` -_w<sדR#gQV~8Ǹ{NQLɞ*z{#Ox>h93DZ@GwUNRj=iqScʼne\OWtz{/E)
&=gyGݥV҉ -ذ&?2^F&4:$da=nծZ9-lLH}YPz=Vʦ5Q5f)~th8Sé|nj$wp\bb?</Tqזm|D{(+unS'&q_ -0% -8#m:@ё*\nQ"8 _GX,ѠHd]3-8R0y!cj.e0A_74)j0XI,>y兾A0Tě%tUb'Aibk m6 :@LsL_ࠆT]x)T@a!q?$åD]v3!wr(L@3qRgٱcVvDvELpӄTb'{J\1e~ΛDs2e7+\sV>OV?p;U~T@U ebh-G/07r}͋UAFes@5˄GpQ[k!pJV'5jn+19fv&KF&>,ɤȀgj٬ymhC+FϤzK۴JbvK˓U7T
EojFtM1F٣Ej>=kptNL+]\Zx6Tȫo&]d͐R2IA -Oo,41➽h>v6/{ҟ<2(2M{"!ӼXd(dr^GlrN>L9O݁)+%%ڨCq0W
%X3VQ|ڽҏ|s٤9xfF<K_#SXicojY4.2kֵ$&ٷ!meM8LtCHx>. HU]"v u|_~3D2:x֦D+ZzI߭YDqzxٷ}MQu^NUTWmiF <7H9ImGT=dKkENlXryxqбzGؾ`^Q.<_Ep_5kWȹE|K{22YZl^F5未"fqTXHbKB穩*豵LHvl23[1/v|Zhc%#^ :L;fȏoFx -j,:?:mc07ne<fpŵ
ˮ4R4̻X2Pu\7i^>}_Ha5*}hs$hoCnKW?1Q3*;fgKo4
<M*$c*9m>['hc8lXrM4 $бѴ`{5 Br"HVL_K߲vN<u$wL?Uqj۴29JmWo$wȏWb> &'IG=Niy.:6?tT&}v@! L|]nULsɐƃd Rr&bJOR/M!ZI -xWVE%Sgr䍹NJd1=s $TC {!KFX`:TÝZIĈȚuƪ꿗
s*4p'lݮKZ8VX2 -L28ґP8|I4[R8}nZؼOd,g,oXqй>gbxJPF``HZԵ?SV1MVu",/}5\7W -t4 C}
KhGY=x -~bAKR0Bu8H?\-_c@{tRp|k!VPc%f -(IgcD,*}23{G3kmo(jN'Ccё$uLPG- !ifgϱi1y]*;h#cia)8ulK4@V(%0$8**Ն?/Wm\2nT%lE4c;ɣy -Wϋ%&
~0<,9,VXc'#?m&\5uDa)ĭ<4qg=ǖ(e&Sҙ+O~e/rNtK(>`ҏ-8s쮚5u݄LVIT XG2{^rZlOF+,e
=5S"%s{;Wd:sicB)(:nVAZd֒[}QwY¾nYEDBòf6M\%~n4Q*U{<3]4D!qG]}=n1LERv*y -GmF~|K! -|>E,,u>RLQa")R}Ow[YTH]ħJOc$cݎZϓ+qSHtcV8ȿ$4lm -endstream -endobj -1416 0 obj << -/Type /FontDescriptor -/FontName /RKGDEA+CMR5 -/Flags 4 -/FontBBox [-10 -250 1304 750] -/Ascent 694 -/CapHeight 680 -/Descent -194 -/ItalicAngle 0 -/StemV 89 -/XHeight 431 -/CharSet (/eight/five/four/nine/one/seven/six/three/two/zero) -/FontFile 1415 0 R ->> endobj -1417 0 obj << -/Length1 1980 -/Length2 13475 -/Length3 0 -/Length 14691 -/Filter /FlateDecode ->> -stream -xڍP -'k݃5@A&%[pw@Р9gfUVWuϲ%j*2e5FQs{S#+@\A@Er%E:9w$L\ -@s+je\L6C"@@se_A\3 -T==#T#Dس<L#س%[G~Pa< -@Rq6zy<TJSa$v鈤oD0/z"*!]^&N=]nGG,t3'?37
ݨĞm3rF%5uJU=iקpW-́R2N~7g!rȱKwiG/
{_DGah¡Kc༨e}絸ZrDᢕ Ѹ#;V]εE~сf^<dV2蔘S\X)m^1by˟?(6~5 9YpBUU\(F3%CD
+҃3Kθ{Se*0ÈoL1k_Ў0eȲaq9=ooB!0Qzaə8xhAQo -'ɀyȌus5rѱt2TF{CuH, -(0%s>4ŦS@/yzeȕ]4l}feo.ZCzfJf "
y}]ʨFkvqgF#9h{f9y)*NΡWZw|{V%֓R}ZnDԩ"b<IZym.9мpO0w;kr`XD_A2&]q5+c7n$4SV$rS?> wj
fcqH$v '5A*3xBY%$OgW%P>4GlBdt"#rpQ湉 fБi9av~~-G_#\xE;r§3zK{bkTxeyКI%kr>:+7C?fӏҍ"e`R2y]k3rmPPUuPRg+<+L;BrMA"g: `{qFFS'2[t*ЗQ+fgG+4ojEr%
4ap}l['f*I+ϫq<sǯPwZ\U"'/;Ek+E''nj5ܼ($ yHiiW}῞N/#Ƹ}r ~!̮H`=Ȥe/ -
{7a`|#UKY϶!z;I5B#vcJrZa@P-m|\8=H`V1Q6F){dSobʍ)"@ZskAHF@u'о-JY,J"$$#-I3q ->]1GU'H2<6OdX:WFx 5~0'Bs&Rq[c;u8ŠRQӨ_.uH[# -x,!F[z -e$>@xɿ, -L'wیɔ[z3oJ,_4s~?$QTM?{7]$7D?!N -C&KP:-x0G]^l} m+ ZuwRiO1B{%1l9yֹ^:{Kvm
˳v_e "*mK݇.f* vEӀkہ58,A~Q/}#={0Kd\-d
?y҂XyS3ttXE-4~/$Yi^84A2*GL3ݩw]wdB5AS+2O[PKC/\7 ?+ dOPWAV W=gq Y.4vqBe(H#Jm?%ҕhdcZ\a?&Z2N7N6S4>=)1g@A>ebxT[pHYbi DaGH=⪓Hu|!$4WN5keFǃQYrB:gTM\æz;(<O}"*$:IW_HG{v-p~+IvqjlDh$[,-tHx~Y5],QjrBpa=A7'x]p:xySrL<~ - s+h1b}Tܪth'vAO^v>tzMO%5ǚܴ|Q~rP{獗"9{bP|.OrrxR{BSh&n8 AC8V(Hcի&B0N!e%&PTܓs59
~WS/g>2i"yqTi,v@&v B2HAb2]_Z1,͖*1;$,mFDP7+"|zhiq/-$},5GtDP&(YE sJc*{v\!n:qX!6<Lp4#{Jha,wsvZ{RLZ;δHQUxekTWBu,W_6͑kQN;@ŢtdiTDr>}4o -sqWrSGyaU3BǑm`2oׯ ->Y#|]dApUಶ~YD3UT4'xt
䩁IWlZ}әWqүC'8_4J).bIƲ\Ńlb*Fn]QΡJexHT7\Q(]r/x -02/y.l˱EqeNQZ
n ܤ'+.r茵IEɡV+9<`. -8ui}&zjX%e\,Lv? -zTIT1 ouqf!gRlǒ<^Ղvk:,dw=ƜreC83NXv#] -*z{fQ[>Ti1WF,CH>"pcMT'?W3@WZl0>Ô_ DZc͏)Eôo^\}JA j9?9% -bI9N -c|&XtH %[u[D/Te=nՍ]>cv{ R*D^rB_(۶5jm_,j)uC"ZYp<t%>IpѬ1ܻ=;$EW>o@qZKO+_dn.$mJ)r(cTf1[_>X23\_b8`uoXBg-՝Kf#}~28D؞HiHɲtaMéɹ -Dm㨲x(2{a!@+,|
Yɗ]t*_];mYڧTcT)VW "sңyh_XP[>C -N+@RYe2)/rHC@`<Oh9{xu!SdN0/8=On"%8T))(u_c8R)W9ŊVt"_Due15t:id
2{ntr3$G0}ؗI.\%< Fitpѿ' c%-K=T_7#1! 4$ѾXݷ%ޅȈ]߁2WykPPn.Ө]@w5Cl2uc߈.mբsT]u!چ}6E7>Qt} }o"wF@ʢ(5Xݾy]rܚ&QxdiGՕ exEY9v.2gvn$sQ),VÕ/W(F^4D
-UmU#Z/X`;]q6acvQ+4ZyIw%\I x9. -yG/49Tԍ-OnfF x:=%ЅJTL|Kc$Xay-`Yڃ9U(MD-oW;R?0"KEa_<R{s_9oL"CUxIȷe251 9f+O)mޏC8Px@8d -nãyό82n\ê>&{EJ{Ór]g|̓+N'5`ЧtْuyJTd5m9WJ)|+93S2l%̦5S5Bp{
* Hxܦ xWFZSG -oꛛkOcpMV;9P2^
xJ[Y^<yW-bv?r][5рzM1§|R>,nWg.]ݤ&ܪXm=5
+L})>ŋ -JȲ(G%Sh -nYu]->j}E2s@QIe9v=8Z'[
.nBCu!ҳ -ϣNu;;,r6ۉ"jĘ<BsaM.ř:K2!*OjXߣ#dSae -tG;V{ED<.mܫ:Tr ;w,nn(3AYyQӶe>QOK<\PzV';f~ȧ# -F#}U̫ÓmK J զ{ H!@X8&C dǍ3sP - ^15z;fJݖ^j^$ҔrEI-5 U360O%-uDuD
=WXC܁ACЛ>7G.X0?&Bx\<gMٜHZ @z6oSyf2ɊѺ* - -BhhשF2e8! -թ=|)8#.0C.z e!U;x亡X0:, -U
?#xlY@Qd ӑ^.S1^!#MzST**|KغJN!Ưo#䉰kZ(kXٿM`WFKPm.k txU`m;6џNA^lӜJޣ\6#hKJ#hcԬ\lȱ"VIz8R#,6/#aW >h3~o;ؗ+G9sdiy %+sK>JEp -T/]ObJ_u~rVJL"[kWaN3MH* -oRt7g:|Cϸ6'4e*Ʌfꉈ`̠FGWY5FNb5|w9n/RwESr8A_O*ݝ+qFx"Sјt(?AI|.HtYvYsiG:ij$ոeNagblW|KxTx{e:goZo͝XK
qZɼŗqYs,U9.u77soϳenH=S3u>C^AxfH!V˦z|d8AKt7MOXE<2j~TśuRkv0 ST4<qI3egN?L.P@07;)92-`RpxjPp<zLʝ˦[!
J2?
Jk}Ԋ&3gN0b{t=[6`cZH%0-${hې%!g&m4c: qN`γ,mFK<ت}eҝ &-Q
D2SIYlӌ\LQї@ʟ+HldXY%\Kj8)툴>
3Mr;k2m*(dc¬5t%)_;HJc2FH_ -KԸj[AMЊ.F:F>DAߌ=JIanz-؟:59\FiǶzhV%<@&ewW{yө{=J(^뺯أ+{ݪ"%&ۗ7\A^AuEGڙVwPI:NOڅ)϶Ca wԆd!|*+ӰYed)eQl܇z6my<{Lֺxa`핆}Em-:yInt@WIgڟ~R{^XхG -`ER|`Qג -pZdUY)a w=tShgKu(qPg/ӹ9
g͘8I4altۆ:&/dFfXJE\O1WzWb)d9d(| ilo -0&WiHU,w}"mYqӷP2H)Lo4OK
+:
^:K|vkL|>\@ݍ1rhd_v MtJSI~?)'SJM95#/dMW#k~<&(]Bo6$K9ke9.) w#su!Cq]EK©jL R*"VbsvITgd!kFTܹQ\
a7O0eOImg|Wh+I?j`U{j!1iPr{"mj]zQe'rx,sCLwГ^GxukMWwƽRltvd,̒@p&|~0_!0Yk@jwA2,0<Ԭ53ea!9m49Y5$4w-f8;-my -endstream -endobj -1418 0 obj << -/Type /FontDescriptor -/FontName /ZXYSGP+CMR9 -/Flags 4 -/FontBBox [-39 -250 1036 750] -/Ascent 694 -/CapHeight 683 -/Descent -194 -/ItalicAngle 0 -/StemV 74 -/XHeight 431 -/CharSet (/A/C/E/F/I/O/R/T/a/c/comma/d/e/equal/exclam/f/g/h/i/l/m/n/o/parenleft/parenright/period/q/quotedblleft/quotedblright/r/s/semicolon/t/u/v/w/x/y) -/FontFile 1417 0 R ->> endobj -1419 0 obj << -/Length1 2065 -/Length2 10261 -/Length3 0 -/Length 11499 -/Filter /FlateDecode ->> -stream -xڍTm.HwI C )) H00Cw !Hw7H)())yM}_5k<k{&z
-.i9D -9 -@ ?(!Sbh[C]Rh, g -Pw8e' -p8' -Қ -7̿
R
~` Ѽx=o
~# ށ?]F(ߊ\Գeуv[ X
5bAT>A,U+"`eo#. -Pk9Dx;DpC,q NOSM) -GZ~kD0s
"h
-~/DoCDT'܃]K
x@X0xMmHe4;w8A8d*zڳ'3JdҰ *$l8|Wnϓ+jP89r0^Ő%Aw&Tje@t`(:'OjEҧg\7"!r6LqVz9xijm~'Kw2<j0b -/e7_)g(wAb<-M?B6ku0!zX!NchJ1s;|`G3Jɗ1I]S,Z%D>.-* -6PW^{a_/.$,3{x5~[ĠD-HnߞOX|V<@RwSyKT|d0`1.Fid^4 -|/+ƛJGjn`;e\I_ɍ|g=vu{sbeU! -6* -!C~U7bL_'4?GH`R8~Q.bgBNǥs~Dv%ܼB7KMGkܟWBžTGaK#4G㎼%o"NӇ?iO,ovUU:g6Xh.gFoI̞aMҫ*E:3QPIk02Ldz )tM~T.ۮ -ק'A]8[8*gjx~'sf@1>02\DD]TQTQ<n}89/m$,ވn}q֔/!KlK˿)_GHPdܻ&#;|h5- -[(u|L`bxmBʩ`Ѥ;a>Tg\U> Aۦʍ9.IOi!,?(ǡ$L'4l:]^ٺFAvQIP,z>e۴I?Cedi~%+˳Xut'1qƄˉħuI -+ȳ~e2>p; Խ$] -Yzট#B)IS[Tz>3ħ~Ƨ?þhӴ7(ȟ:aE˰!'Ȅ.V<;8*8аw$=~O -H{Zb!Gtā#UY.2[.
GcrQ3?\o^?ބ'>C \P3Zw>1M|#WfΒg"T:Z'"us0M..sirEb
=]4~S2gqhaD`eSJ58*92Q>oSQE -L^Yeݛ`PBMU*zIw`3`1Ć5^&yAuK$
OCnS䮹D$?N ¢;ܨuRQoc?{_7L(e&kV&,;Y̸7q9̳efǀVȈ9Pqd)'}:#=a^fWmc4l|,Mn#A=ȍxwQo-H^ƷGc,/>n4JL|{xS4RGB[V5PR8Qyky|SMC,;RÐs -L{Dewa/d-9hAj]M"K`?x1Gck~@YĶHiѬ0p)HCinzv*I2F-S'N@ݺ<*_Y\[P81̟27M\4nղh*PEH>5`Ȱdal63$~ZѼbӘ6/VF,k_"j\DpǿֹB3{4l*bGQd˂FU)% N(FGҿLn -N~BBw@~4bhӍɊ<2MӘ}Ȃӭ -oѧa)`!a?ۼ*kݑ(sCH"8^tHwK5 I<{,;ؑϾ;σ[+Xm:]S}
C|?#:[`&N`FerTB>~06 -LtyM~鷭茭ryja/ӳU/T,$6E?˳5׳F^p7Szpu{1úkiRTMdzP,L -e۳}d8qL\EǫutVWkIqQUHӭL%y͏*`npi_.-NJf~s. WWc8Af"ioӎ+*`铦e>"Y
tDaT|{UΪ@HQ"ɍR=4jZ?bdEd^'SK:02-hkqWr/7QN8[Oo#_wŞ?p -Θ;6ۑbz_e_3-)|L}r_Up~Z^0'ⅆ^6)qM´Wtt2eCi -kzHQʻ[ЈEKr~A;׀DbXq -lG~8yh@o'PuWQ=rzh5|E5~P6ɪY6It1sz:km3EԢ.֎Pc|N~8qhT^"5=N
^NĢ}r=g>S/~ܧ](Â@q]xgFj־2#M\-Z -mZS# -I;YBW"_#4v܉LÞˆV -⏠OFH,+WGvs2zCiz!|,a -c[ 8FridE{5Ƥ,Zw@Vؙ0bmvܫ͋1ӣ`Qݞ[؛϶>1|z:諀>Qo5czw+`#j>;a!>o[:M)LoQ%~N& -f2)2OԇjB7aʭ49S08<Eoj |gb{~ - 'HeV7'z2nQ2`#,D5b-'o$W:J$}"g9,O*<x+ʿ8m]?Lz]=R?~J~9=ׁlo -<YCר)1|XUAvzB"wT<RYԄXSᡚJrK} -"!g-)/Z
*"'.1>H2LCX(Q$ܸ;5[Ỹ~*Ijm$Vkx=fNBb>$Ms6xHoXGxx=3"4+}p*1v&=Td0D>ީ2d'`DU%g=GW=91r6ʧzKC`uW#Rv])}*n>B^O=m&?+6=Q>(&|lϖSz2k&]5KUb|r@+Cv\s!vrkH'ԬSI))W[B?6Cp8xnX*5
}R&˜-?bst1絈#V6GhOkQs1[Pq~ͽ̇^X -3(#!vJOB=Ӹ'^Z~T$>{.oKlkoPUx6U+rd6Vm8z1I#ʒwä<CTHS6^- R
?4cv*ΦPI-?ϐ++zϝMG`
cDU;c*}{v]@:|GïXاŒ3cF|gV(G<LΧrRE?|8sLL8}xD9S,^XMOnDCbl_" 'Reե#}VLy㣂+-3G-_jcECg})kjvoyTƓ=UG$嶬*+t\IIt@
>>`Îɤxv*B#?L!xbȉ- -^X&rvy)؆Ї2/uCw02X춯~`5X V.Tx5|P^u|1vu J/h8#3P^W~j!0&5WI&eΐ6jej/ݭZrL|3H60l(,BMwc |a| qo5>ڴ|M^H -5rT -V^}OkT+m)3} -ثL
H]_TM},%%?B_ɼZ-Hf5&Tb}gu\%Q"e;sO -$'ek1jp !ԊȭyMēM+6;/RU5'ZJBbH6x+;OqASB~"ecO1k-wj2zPE-ԃ͙e1j:ZoP$y(nT}7pħ?b>9s]$X?//-.!"q`u%ƍxGc4,CqA Z椭2D^HjUL%D],Oze{ӷr*PIװ!\ca%>;6
W߸1~ӆ7/8}f#BI!#GhԹ -ccGE2_~e|ln%%d>E:mm)X 9(KDSYX3FEx'ƊE}PLhDp nĎ\[g _4}ԣalwwh))M/*%֧ۢ}wQ koI麃'8)37P.P/Nk/sMo6"Ue5d Yb4uܲ@0/R(,7
Q]kp(X%b~Ύ\0LFi}rJtBN?5 -o}YvtD?(1ƾˉ/n(*6`U.}0\Hn>ŹBZϴzaS9=K6A?'UY/R6ps鎘$uf/c`+ͽ|!@Ybo`GhcK\\aâ-w"haPs#٦6k膖]Ks3TB>"/zsvfV[Tj]D`wPM1sȅygoٞg]K-AeP|@FfH :Y;,X*p,8\qљV";c"05zcG
]ͫf
%<<ٖ6($%-PaLk=ݒ+j -[L,VzTi[ -g{juv@?vݹ/Hz]I)4졷'2[N22TVXi nJye6沷t?xE%q#k7@?& -endstream -endobj -1420 0 obj << -/Type /FontDescriptor -/FontName /NHSZDL+CMSS10 -/Flags 4 -/FontBBox [-61 -250 999 759] -/Ascent 694 -/CapHeight 694 -/Descent -194 -/ItalicAngle 0 -/StemV 78 -/XHeight 444 -/CharSet (/A/C/E/I/M/N/O/P/R/S/V/a/b/bracketleft/bracketright/c/d/e/equal/exclam/f/g/h/hyphen/i/j/l/m/n/o/p/parenleft/parenright/period/q/r/s/semicolon/t/u/v/x/y) -/FontFile 1419 0 R ->> endobj -1421 0 obj << -/Length1 2014 -/Length2 10069 -/Length3 0 -/Length 11283 -/Filter /FlateDecode ->> -stream -xڍT}7NKH)nPC.)Qn.)w<9{vζ՟{]̠%YaP78@NCWW+ˏ̬A82]T9W0H;
-@&誨п6 -Fu<> -qqcق -xH.B!+a+G"tF:#nuEDY3r`F>x\HZ@$-PY9,D7GDV@7o5nH:nD=ָ_a!U!?+eh<6>a}]i}cJ2N^Ҹ%r(Y{ش/
Oӎ$lBϚWI-,z0 kuHV滛Vs=C
"R&u-ܘi1hlJEj⦧-u.Auf:؟ۓ,=WB%)*CP\ylj=EVL(UqL8F錫sv}d!n-(m o5}v.ۍ?&=QGqU)+6e(!o_Πk\4WͣB)Rө -%uTꖞ-^1;KWsZq4>N -'vv Zk֏|4[Hwbr8z%Z
hH}FBVC1ޙR2z|xԁO&.@ ]e~`0)}GVJ `(L2lzB0e㤾3Yqg]oc2FI\Ӿ۟Cr+ U[#l?/a`;d6@3:E`Jv̩٧=U+pǸE -ˉz9BND*s2WsFR+Ysd(0M!OOl"W~j.]Ll+jʖIl-c5쀄Hw/4jI6H>;K -(cJ(e0$XoNjKmεܭs1vѿ|:ϩ8Ra-p9{4cm*FcւJE)5nɑd,y. DW.\1FX<41tZ$*E/B)9G٧y6qoQҖF]'z[%} -!֜L
3q/PW`'rh4/hy_']!Nxo'ι+[Fkr7CMLGK1&2RLYSwQHm?|RdMWS*e c3oN{DI1jN!g8 NL`0ZX٪qqn[q.U¸G'2ʹG͖IJ34E#@$"\s^ؖe]^F1>1ּƫ $ӛ|QO}iae{ -Oؚ|byK/R -~N )зwZ!",y3ڔv:=ᷙrh`*"/:_B>Llh| -\3
<&R{~vmEzvRxI`ҷ-U5mϘ"e&tjcT5ag@bsNzE)Za2Z pl@0lT:KT meй^3Šn"z8,GlAA?}M$K5u'ʛ8}SS)sR2+r3*MzRˁKKea}62e1#MCvε7`:맍Cwu;o}3?|뫭"]wJz^ ,~:GK/HhQHTxÒ,/Ơ^3ۚ/=93`dѓ(,Ȼx2V}_66Cnɀx#&yxz`(ڝ{p$W@uի].˹ -i/xިN1md/<Y=,Q R,m0q/7S~>2Zx<|U͜GUHzֺdQڒpwhxz9?!-蓭ެ@$ޤvCi7$?fU ?sע$<Jkmgnaĩj$;('$hG*Jo,y6NlllwꐕIK_"VӾ<>$tj&С$j&x,Lb}|iԉ]HMT%|B-:2S</|XXAE[1~#@#V!eb~lzҊz*¤j:]+$їu,ܥP`ڶU촫hh_>J͍QH:)珎:I
G262TlZm\JQ~Us#G.;IA!-k%oօ>նhHwFN>ẳ$3V1mw6YF|nƠԚpժZ@٪L>m"#q~drYO{g})<}kB6:t --KK3ڭ*mnCWڷsG}>='nI]M;Є!GF-7 -_s +AHVNӗV_R2W$A+ag;v6䕭}B^!:lT60[i/EGUψɆilKԳ hyBJޓ^zEom~E E8ȊCmEEYw}sMK[gspv~/]qPg*36o5#|7ل< U*LXjQ``\dgnk4v[k1~^K>?ؐ/$g`G}<4ohlmGkJpC;d[0~OJ~-iωm- 1絒>C<|[Lā)?"N-S)L3H53qQ<jϮ9v#[U -u{-g"ٗwa8K/<+w
Hꛥ6j3]&|c=t\FE=(ϖ]/[nylη8of\QC7vv:-F<s -B;^7^ܵ-Fu%$O_cܻ$Mv͖rú~0 QP"2+? - -Fɨ`]r5撺?O1vÝn~h9*CD]D<BploXTq]TgWƾe0Q lt)$KdON@+~ ? EY -β{y2Z`:Y-.I^SO#DcoQtuuK
x2lD -D].
`;|+2j[8zPn+Ϥ1U}JTIy[D$)6yTRCnEF ۽sҳ -Uv{*orvِ`fFwLQ~zaR;&Z]YĠiJԥS/K7G.iO&ZkoUY/FQ0'xSmdD[! -
P
{N(`-hQz옇sr4gD_u*oTTz0XTvд:|ߤG)EBϥ -wVutSZ.},EPqԍb#;q=`VK.c.Ucmc<*7.#(fz522}B -V<튥<83CuK\!POi泷&y&jlpa4)OMQx<zOW/勢r,48F{DVtnGʺ*A-s7-by13dK6C&Zayb2]Gòhgq_|X_p~sx7Ѿʮ0p;HyC{4-hռ{S -j~]u c)x3X/AMztEG:͵UU~3IϹWE.),{SD嫛3h.Zd*ĆT vfsŽūqsyإo4d6R{z(nLIE]`jHH{\'Snf{4ݣ]& f\RF"1gؙ[El3jldB&Lgˉ`3ῇ5w7m4U܃Ȓ(J5k?h_/]e{ceذu˥Yeوc#Ev
XPɪBWxV۠7N`VB7V\;p۱qyӃTO!:AYDyy_q)\c -oșTOLR⽸[+>@B[>q?+ٶRs7VԍyXgk/{v'?w fS73zoWwJX#(W7bk%I5dֈ[-D_x+me;XL[PҒ#RYlƙ:t44]SpV-<=\wBյ'I9ug,-lnTYfݹAzⷷN]o*xM<9nvWX[(V>
}yavJW(e'wڢ('vIV8]_rCo%4eQ -,䷚X~*=},SLdȪ亟ē:8CY?yR&lNm4Bۻ闅bMT{)b|8"Qy˃{dzu moi6 -:(*_ꟽ57{'Өh3˨v#Пbur)&O8++Q"2cCJPYtu넦M qb5 1DI]۫+չ)^-5:qb[Cnϡbz[ۗn}az:A$5W=>:ff]|:4&"4tg݈&HDcUqk_4.[,3֗*߬RC+@cu2#2ҡAXVV5yƷQoP=Ns*q@Qf3fNL)f5 -$R",oc2IhK{}&
?{b7m)v\̮:1?A u(2 --usڍ<u$:VS;_j&*_!tji4^_$RzKyz*N7gK -➠(݄'TkPU;^q/[-85M"oJL$soGˎq!euzIŋcFڃ*VOEdvj4$Τ&m -%.P
A^GEIwL(jc؞[khͪn:BFw+{%Sw/?A50/IRC~w\Dۘ:6~y'OO7_c_s}!UE~.i#xS8I^OQ\9HdXļzJPiwg-nJܖ5l{! m8/:SaS{6|ώe"hƦś>=)9K}#|{+23l@N1ZR/
`JhuOW۫[ڌT.: ϷI5Թ)IY%D 0 SiJmjA9&bHPK,G5^ -1Kt5RfJ499Xʊ/_iS6P9H\>4Zqe'yeEsyOF`y\˝tˏߏG|ZG%
*
:%ɠkGiW;٢eb
h^3#Ĝ+SJfc$T`/)c89h MlOX -0ќA(MyB`='x1w=DI5S|-D}Mϲ'+H0RivBB?~Dolb\$#$v
`r2B"ெ/u#;xgG -`d^=X(?k7 Rhz8o -endstream -endobj -1422 0 obj << -/Type /FontDescriptor -/FontName /INKVEY+CMSS8 -/Flags 4 -/FontBBox [-65 -250 1062 761] -/Ascent 694 -/CapHeight 694 -/Descent -194 -/ItalicAngle 0 -/StemV 87 -/XHeight 444 -/CharSet (/C/D/E/I/M/O/R/S/a/b/bracketleft/bracketright/c/comma/d/e/equal/g/h/i/j/l/m/n/o/one/p/parenleft/parenright/period/q/r/s/semicolon/t/u/v/x/y/zero) -/FontFile 1421 0 R ->> endobj -1423 0 obj << -/Length1 2694 -/Length2 14495 -/Length3 0 -/Length 15999 -/Filter /FlateDecode ->> -stream -xڍT -H7R -RezACO 1k+zf&n2BB
dgojm -[[Z1dͭFVF0taT2uIc! -gag03p89 -& -? x:@0A? @pO$ -nD-v~wӯgn7/_Vs_V)?L#L
G?r%G9zd?PdG_cffp?no"`'{
"p@?f;-}`bcoup{]&;v:V?f
x̪* wF6ZCc4zB(2MdS'm
拂&f=iOF];|W%2 D{:AĆcI[gߠkhQũ>rv>ir,7褉GPo75ѣ0U$UǞMn#]RWVz{X/*8ʂݤHӇbq>I}b.c=<FԿƯESq;?-,GZ%[=Y!:RW-l :?}%imt3ӭy<H]K
ŰC+O#E|EL ̓/$pХ~[5@tV$Ӂ^{T;^x4Ij,EQ3HC; -m'~^ke"ȉJ5i1ӹň{1GNq0|(ɻ+q``&W(:*j,Fb-cҚi9+ChՆWM%~<UO"u郄",?G+aHGrbKo<
qmĎrG@/ {eOIn!c\ -NkV<螶EC`>@H#ksLqDCY<y:KRYQ{]&T~wlTE-w -u1 -։ƒݗF}| `.jCq H
rAb[wv<CsF zk:_0 -4lj0XI[-^gd)D -k&Q|p"ޒ:RVK<;~&{Y-h F}]0"&zy7+~
$ $zz$tHM_e9X^³+ cG+r&3$6g<Fa*#bxhA:R7d˄Kr6}T> -ՉivBf}M4* -QUTC5Uzݕ%װ/-iL)mOz!{%L/
i@+<bG=J$7fJQugt[ -uY"_tBr3I$&&Y m1#&-cw/_^ŴeKPѺ`[0 -ٸ:[ZЂEl -cs&ߛ UiZzGØ^ +Ud}Oپh`%AM,GkҚt]?bT_2ː$ڑȵ,+Et[\#k<o8P^093R*mz!4ZJY# 6.+7MpT@!Rn!%fᒱyy:0/qoRM6?ʼnsc*_a+ѾZ+QhL5}gy&u63Xohz&R8"=Arv[mk9^~{eker(d횹0/bP -b<TF/}MrğD̐+ ?dB6N%kjPFBuo3BqЩu{#T+ -,7Vf᭝b kAD~pAdԥQ~}2 ٜ܊.wV-%5q9q0<Xلt&lXx7NLlS0ݒZmvgRo<'-Gs9cuyo>@S4#j3"O5y$:$< -hm6히</~hPzF66^ -;gK^|YBv LȟJo;.o+pmz4 o1& -
Cз ir -6Alqb"6NzRxOJM\{@,`X¥0#vqYcS)anѤtW=leKh~Kdq-ߧOoRaCchx֮+tCǻ.w98s<b}gr#L8SPGw$Znrٹ8YP6X^UhtZ9&ۉĶߝ3ō:mgJRاYkf<NǸo}muN^Z8|E`:=>tƇ% -?sRh PEr3n [2oI#1-$e n?3ڢbF+hʼ{_G_WʽkK3pV &?ť$ ȓS ((E9eiTtTߑj_w'qn/ -SCh:)Y8LR?I1upmi?/-u,}$X[V\P-cO-UFF[qޘd=}leOUط"KV]bUrhС##*Y'D nFpiiPڣ ik^MzagRu=ZO٣$:DE~V)ވEQ-vU(q.9.,Z}Xx.
fb!w(2yjG+zc)=W!h_vOLulN1
d>K}6yl)RNξiьڈR&`YG\v[DHRo=c%veF:QS*tА18YrTN]Θϻ9R7|gSyrF[x+M{R[:5\O=rt;8w)̲58Nrމ"RNi^z}lij Au<4(#H;~b9v$N -*4Dk95Y"wiSȻt,<J!g5;f!oF|16_΅M8\hsxZn]@(RI#2.S"4V}L{J.nJ#ފEq4.aKRƪ:aWMaw,5%&XӾE<I5qJiE/_2f$nR8/>wH]Gݯk,B?F'
?#N"|UK<%ǫm͇`+u#aT8Ky݁IpEf]4yQÎfURްtb
;R
M,u]n~ElY|N2qvG-<%m zebd_߇{M2bDi ->0q1y
ϻ{AS#t24mLJF[=նGsR֩SrI)AWX3 -1Sx@(%tyB\#.L}f9eNKr"pѲoiweiD'OjUxh'/ٞ}МI%0Wv\6i4kKeg@F{ "RԸNs0Ìpȓik~D>3?\07xܣpyq]G)i<Փ"
*8WvB8.s -Qv4osj{,=0 -v..q7 -ֈ~R}h4g&Օz#ǣe"Ct -g8WeKXJ1ҫl3 -Pq</]q{4O8yhNI99tדMb9?v_'-LIp!*^
LhKJtY:]1{90"³)\%%,eS}]a0[)k6t:Mae<>Ӧb0ɯ
/Ƥ^MQ-}z,MT{84ޔ6rc3(?SW)M9,hR/"x+s02mY:!qz6̀@NIl-N?4VRudWd!Uyx<:cGj֕<S9Y!.<ex#G*tGkЃA.#$f5%`z=`E],
8}q^p;B""f2e?@283Bvrbu).|^_CȃcV>fi~:|OG.RWNug\ -Yc{ -
ww -kyY)3~uKf|/o_ѓKsL
?aebl-Nmz#~VKE|nfT2xMQS7=SSFA8yhЁ\0CXn͡ŤГqTI&s7X2R~74f3z$"q47v?Ƌ -{`iB m\}6MCǪ1cz0W9{|᱈#gKH~8߾KH;SGTZZZ~GO' c]ф.5*Z_ANDU֏)Ir}J@THoWY7$?+am% -9F\ǢUE鋈d\"), -+`1 -ԬilI1I.p\vo4m9Ìs
WSOH/`ʔ V^j+Ha9Ix/""DwVmvv(zf3
¬i>b0N'GKY-y/2{ݮǖmdlu;W(#Q8 -7M1q}[2:%V7 Q"(E\y?&\hCWy&ĸ-6,6}zNtoh ˮݸpG&.Tii]IΔ7>nbRBI&0̞V[T7ΪS
$f`#Quk%.Cw*b8?/(:^t<gTAk/߽u@͞mB.I'} ,V|{.`a4 āl`n4^?ρȄhC%簴G}XGdTX:ss"D:B՜#a5L:!-=)wu7'.>>7q{ ;YxȺzD4yZo+̴96ӹI}SA; -kls#2穑-,B} prFq1:cʳp$U12L^SCZRCj-dMd=Q^\8ԛ%@uguY)YhUq2g
].&fdR\l -ysDK|˘drzQ墱t(ۛ`:Bo9hPT#ӎa;zieS'
G.Jhx3{}ڛC6[zV>LW07Q:gy/ڲ-ទ`hey8.ak(6{2ǾH-*C7/ \)^>rA?&bnh{*zU:$ŷimncTZc#31"kHۑi|iG+)x[_c3Vu -і,VpބL|_+a)VS?_lڄ"7.Zd@n9*n w/0ZuJyHFPDN(~q;T1&y昖ӻ/PЙʛ._X^,1izل]>mݢAP4 -\ \g9?`GiTv&,ovhpQ/5^i=AVc&mPSF{c!_!VC8)?"Ņd7}s -/<zVgM46>Ǹ{nV\1Q-w|/֜S܁1T]WctƜNrxoY;~c@0ܑqf]<Bet1`A>-pRj##f\yW$$ŝvr/jL -~,)6-Vj9?3-O/5C7$~JnrпSub&ݎļ -j,yJƹfhz -bS 1[NY5Ee<UKH~8lUG>,zEhreb]< -aHei -#_,ޤ4F$Q뼒p@B}[B - -hZ毄&fS2a\ 4k)hkiC!|
WsMbY˜oDx)T+\4i!&T]lK>]/Լya5|li3)0B-]IK+YI]A" -i߷g56)SR5"7c8,
^CB-ĥ-w*bwk)%s0MM7-NڡV0DAy -*>*q lԓLy-r{P8Is{#KLFiaO}GScHeB#Puxt|sFYo7a]Z3bW2{k_!a -'0g8//-EKCi\T49S -F/k')Ҝ-- tO2%Ľb6Z܈IơGqc-tT~Dp,R -4ג -Qplg^N}o.ڪﴦZ;2Nӌ}8JM!2xh*Yߞ)\).t^y Y -]w(z
\~v9Ԅ%@ċkV^kOXT -Xb<+ -~r6eaz -@@,'. -endstream -endobj -1424 0 obj << -/Type /FontDescriptor -/FontName /COYCDJ+CMSS9 -/Flags 4 -/FontBBox [-63 -250 1027 760] -/Ascent 694 -/CapHeight 694 -/Descent -194 -/ItalicAngle 0 -/StemV 83 -/XHeight 444 -/CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/U/V/W/X/Z/a/ampersand/b/bracketleft/bracketright/c/colon/comma/d/dollar/e/eight/equal/f/ff/fi/five/four/g/h/i/j/k/l/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/question/quotedblright/quoteleft/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) -/FontFile 1423 0 R ->> endobj -1425 0 obj << -/Length1 1754 -/Length2 9311 -/Length3 0 -/Length 10400 -/Filter /FlateDecode ->> -stream -xڍtuT- H 1HH3504CHtw#ttJ4H?oZ3=g_gl0ѕ
)V֖zprrsrra@]!z0 p(Q74rɀ\頻0G= -9TA6`=@B\IIÃ[1<6 -u098 - -jD! - -8V
~h݊_|͠k_srbKks7b^q7^%{8/U`StkEA=!PW͟$C!0߽vpAߔ`/r@p8~ -{fhմ=cCtu\ÒߥpcQw\j ۗpݨ<n뀽<A¾$hLa/l[(UtT72u 'i|.dmtRTvTqߩR,Q,%#M -rS櫼x+M̡s$ ->}/q)?n5Ŵޣ03]w;gD"h2b;E -0Q 8\7g'`[u,~Ğ++T]nG}ΘwA\a<Wcr[Dqh_y0ϽB?k<~'VLю%џBwp&_ɳ][X^sT -Sˢ>oҶ0r>GMyEPdML21,Y -ron[w-rdF59?U̚% - #oL.KPfXo4l/'cs`WE(7{qJMoY2m-dVp>._JJ%LF`_x!pl?gZy_T -,J1?uՍ>_QZ*/N=0sYH`f_f -pF~$=ǦGL [hQWqq -,wjo܍0ՓaOztX7}Z0ڄAбx7)nYm,H3½[cڇƓ$dsG$"q6ۭɨ -e?#
-:0k"ӢiHp,w]H^[Aho.%qhd#oߥSu2Ck<$$Rn>071LfE̕a)ʒcuH<w/I8"Mk:8XM>#/~(Qd -ad'Ϟ
?!:rb-V 7y{ǭ.w -M66ȵͪNDiؗN-l@?'ىN4(0È\!vfׇKږƤfHXAXS#kwE^k=ΣX7ORT=iqODweTAxoXo&ֲ*əfG/| qǺ1WDQxgy\1dra -AOgT!a:p]!O_)3mv'Pq"\ZOMRK{L-tu]"KnFn.Xv:=2ETK<`m=zދND8*e:atFjp';*)on.E6'*W1d_+{z -Mqo0NwS3dOK5))T;ʍKp ş_THU[HX̅YoE,;/}P'r%7umc oNJ+DynerL<JQU1%RVג;Z>9TLk`wZKLaEg --<jK$2k2}yL?B[ⵝoR -fY: q^״aIEW -P;WlM?9&*ppщw9_6F?ˇck.PO"rBCنxYyxe7CTpK]R }i~dćR/xʗzKOe%/:Fe(nf:юYPT?Bu<%ys<Voz֞h/!W?yH+%,. i2&-~3ka542-iJ6m&8g0q1p+$(]FJC|&f%?45ߍWI8})s'4][F%35+u83.0FF>Ee-ao@aStiph{v5$][VrE d0!rK6Ƚ(ݨ)eH"ޙ)_ -n`o@ȕ^(.XJi{S
$%9Eo#^:kJL%eif&<$Pa$G%2-6EƾJQ2Wɡ,YJGbl+㓓iIPUėMgt9oag[qB'VOr܈^bGHzadGkӑp*oxGn_u*ne*
ME*X9wzvuhOn4m}H-(r8C*Ub/g{wx.z8^=]nZ^z4t@zʝ0MP# -ڛ%=;:{p;k^eӝJfX:OG$vEQ^sC-Xv-
}dn.e6̽KrBg~9K`Vzj&ZX:;mK&'}oljZ>6aF-Ib"}ECy1!{椹yᲹ$Fb?棂7e^aWc@?F~{$@yl,J -Md}ͤ/齁z7j=[|ۖMr"=j!73"\EGH؈&;e -\_$ti8#$'
Z+)ȍx100;+Ѯ&$PǸˣJ?>З*|xy^w8oNY Mm#8YWЦLܘ hܖp [[UbF[+,`Vy8lrK6 -e7Q(fu|c<Ho7U[;W;Er1 -SZk?I8H;Vޑ;zGJ[S\c5yGZ#{+km%ODt
Xï<al\E6w?.w~?.e-] -"rkG RYdg5
6ZhxxQT5!*{PPWz@izŐW1}Gqo'A8Ld%8xxcm|IY4)[7fHq)[M="]'y:*幹Aų-Mx҆hlEx?m<eA%ɌK6׆ -n{/-t<x\.7FZUfGͮ}B?VHYI|fK.;-[JfSIt5oT&%#u<j;9(9I.{/_5t5)<0::Oњ6٥ZiC -D 54[|}5 Ci" GAQ%q -ۭkˣQg
T
iҷx?~}DcEݷ0 -qcy|)b5nY1Rw96! -]T~pxCڷ+a鋟%~~{H$qZ0Q,}WhH~:(?E`zC.mS"sy(^7} -%%dۆgl|6JO $Z<x;q}-e<a!/`J#_y$ -G%HL}1Tyzuqur`,l(ʧL'b6[*jFn,
dV|R'nZ?TapqܐyJsS+4eiB [G:L"8?k7+0 Bܩ/F>^L#~bbIQ<?x' Xì"{1lb7(DVe0\Y"5e^T\f}~2 [/w)#1Y4{I|olURƼW.U -̋//|Aya7jHZ( #i^p'%DFqF## a`)Ļ9UвbǺ2Q]qYU%:(Tq&Czt$Rrs[l!5Cܘxh@y,ώL~hbJrsh/<drao&4Tx
px"':LŸXNhJFz'S.M?~KQn3zEinE1_K<v*}F鬊i2T!yb -N`grչӧ0ѥ8m]mOcF5ɿeEq>ayaSRo㐗4[F)w{uȒ+%$@zȳ -I++tk9G7
-Uw\.mwD#
hӑxgZ,((Qg_ncps~X~,ZL/_lX2KX{$l_WW -xqM=?,Rp^RN.$=Å9Sz\u9Min˹)ea#\* !>^ -endstream -endobj -1426 0 obj << -/Type /FontDescriptor -/FontName /MRAYCV+CMSSBX10 -/Flags 4 -/FontBBox [-71 -250 1099 780] -/Ascent 694 -/CapHeight 694 -/Descent -194 -/ItalicAngle 0 -/StemV 136 -/XHeight 458 -/CharSet (/a/b/c/d/e/exclam/f/g/h/i/j/l/m/n/o/p/r/s/t/u/v/w/x/y) -/FontFile 1425 0 R ->> endobj -1427 0 obj << -/Length1 2027 -/Length2 10339 -/Length3 0 -/Length 11561 -/Filter /FlateDecode ->> -stream -xڍTZMw JCw ]1Cw HH#)(tIwwwHx}>gh)յX% Y(č!RR -eh)(Ԝ@v`s8 -oav09U9@VB`S>WK++F_a`,:: n,aC5beKRfmx888ar,m%veiu:a2@`ks X- - - -n*Y,mn,R=:-;K{ -@2Kկ{cF< -ae@Xa+ʀ2~:t;p'جA䂥vv<@?&wWs?apaz=@XR /vtw)pсd1? -
k dF>Md)0As둙0]O\P*ʚصJ:__U7%=og~^O%^S6%K>,rSkGѢK{Z,˧ެ^]LH.{hѧsALcN$zY;з#:X#d>rin*ݥ<"t|_9C92XRLjdS@(1]!n߭|{al1T
\_}NJ3<cNIWCLIR سe bvƸ
y$L\5!,4p#)aP']`#)_Owp"&goޜ6cN -Җ׆ȳS[ŶR-#dwIy F!L
.ktܧ愮Msˊb+cV\TY 7$WEp|.5KkķZO'C~~P3
%4p6V 1HAd5
Fr J4ܷҍq/7<#~zY#QWk`E 1L$J;V"LB|~2سH|9|aLi@P}vwcN+c$*W^4}=Yh
TKxv
u #3{YdЯ_3m?_71ejcM1"ړ\Ul_"MW)5p?mׁMoj*o
meR:TM7hCӰ/POݾutQAN65s!Ai0cZH(E u7 hJ"/^Liwa?Jѧ?%1Dk?". p(hj{zGjniC2eEs> -mC &p}XagrhZwK;+J -2'AF'ߊ^Vrsg0#S4M/ϣSxRbK%++KG鋉Jъ.@PcZl~${]MQ\7~zr{(&"qdP|^<ij\mA9NAH߷㊦!#8C]
>TspSTUTMYnj?վ} eR7%yPa~n>`xE5=NMcPĈQsyv`cHHhM/*>Mh!U@R5+*EV7?8!|F^a -Q|}JJh47oÚ2~JhK|qϏ8&N=D1הkCmKΜrq\Yg+T&5iFnp2Y8X%~J_m/4RԮj+Vse0]zuUb:d8(\LS@ -Z&I;7JIT>Lx} Dꎴӿ]3_X1WQV6bq}Fا-i*A|!,Vw}U;L}=M
}Kð!pݒ3:ޙ\ 3{f -3U\!>Sivw1"{)nѧ3};pY( -i;>rmʎaKo"*#-+.>*O1K>8_!h1vZX#r'hL3UXͯpw5'^Mn9naOgG,'qnGr
is= {pm3grry)k!۫QLUpSыM4R[9Q L?)CH)IliVs7_w_C_o!,vD8O|'3:ZD3JԤy艸rMijŷ%%b"nYhr5!)v㜤`,}|s{]ıɎ=$QSxti屲p#FiNN]z@qT%Fo,e\:e2=٥{J㺵21_;ă\D!ZaP'7JH) V"a.%Ѥ0e!}9" iVp5'7Յ2_3Ӧ:UyU
z%ٖ` yQYy]ĔQTT8hZЎqet%5qlWއv0hNe%muRanц'B9q6>~ MP]~pS`hD_8x,j-VuػZ$x7O쇴55 -Z7;ܚ̋ -8eO6\R)mpc~cD704MRba|~;/ddf),f̘5WIÜJTȱ_>xWj5wp`۲J\oWu_^[8l ARSe)pRRr˓W -2l}K7
UUȃ̦vMH'>OE*J+g6ivwoߕ)|ygK lѾ{)H Än~
-9j|j~Q:L+$>wnz -ҠN/YPy^}!aw^2Kb,kϦvĕ#&8˻,3p(,B!*1*AH+u0R?s0s<G"`>iF`o:]:smO -Ӣ5Wp̕|IfMdaTd(5Y,]X((/wDA, LVq:?[sKf[6ܢ2b5)Wse~ꉛ"FS5k&_s4橝r;]N)S ֻm~ ":S0+|D p]؛1Ǯ$ -8 &*$+Ez2'if=4ЯjᏈ9#b"^|}eάz&^7(%\AEQx<be GH$1@ڢY<<pwc1:k[$ -_\`weO˼exuwɘW'%5NDzT[pdCշ죕U< -CuJd #>`沝'$G;\3 -!9J5kMh<I|q1Ux%j8W+[Q;*V/M -fg%%A5/|9}tc{OqЬs+'M<|[Zogv+9/]0YYʎN'Ţ}ʋ\XQ:VPIO868??G -_|/q5'LP2{=Iք0aTy
&阇c%hQEh_^ݕƭ.lNŚ[oQϾP4 !ڕ\*(=ǯׯMShƶ峃cézʽIu;2Yh_ Gá`'] T-+ᦶiyXTʧw .x}Y?J!g
$AY/}FV`% -.ֽǼZg^0L*Púm"ƮzL] -2A&8wpg' FpMgAaH'9fxm-ç3pj\fӄgۼlOscD;ݖ+կ+>p)=ZR)|,˳ܾBC6kFF -kTysB6UyT#{j: -/uQ!z^q#
7a.iLLu/sՙ9 ɪ*joZ -d/oL;KzanR
wnς^O|gnT*ػ349(x'7U է´ap'BJ)3z`#a8J]،'5fBΊh\͡1X_ڧoq6WY]]2tؔtOxh|gKoOf פVy5\wa4Q?x`b>.0%n
~+{tI^1b`1K>̃-lt3qPd`\n4=:cSE GϝiƵh3{i+Oܝ -e/ժ<;shDP\zj.]122.<4bm(Cm-y~Ck7.S*&:W{d2D0 PɭHgx40?e :CZԼuSn|t˗ZwP$M96S#!%fA)7&jpݢjV/H}/bO}ī.(l*w3<:$=Ƕo@P2]_.wܵT˩>wؤvcddDPLXNՖE8Epj -
3uձ%7q$& YZPcb|
)#!Cb DܯE[P՞6#"kPI#O?ql2̷V:1)$:&7ݨn&TוwRUlzɷMg!G
"V7̮
HX7|_ܔZ:sKw&pwTj{wxP7 -e8?^YOkVB -wsDX/cvA*v,Ca):\`t]N|czInx.*fߕ-i܂(B#
P\
s>#!*Cyѫ5G$y;DJ+8SHRrƢ؇vo=Egɴ`zphI{g룊vrǞBߖ2no$&-d<u>m^6Lxo?OlÚ,7<?ߕc=#3Ωd?IukS^-bG'TVέ1RaH7#f=S1|V}t| -WO<.@b7^v`!X8gvt*1);Du#bͰFѷqZ)#||ؗ'<V9Gt8D/HPIBu^|
>WQ/ǭcgiCȩ퍁_9pަ# l=ny35Ľ~O1qC\'dQgA;#4IOAwSiÔ\r3;LSOP>3% d,T:7)U;7딧Sv71АxA -NeԵǛ"{%y?-kP+Eɳ*f<A6[Z`ҏyHX[\W7OIe5_;잷^ A}0+M hv<Nj1Q!=vo_18ϹM^ew$DZ5gd}TX5tAY~GgT}6ض[
arrHLE*(쮫l;xYfBCI!3iZ"*5ezçN$gfYvqcwgE -VQ5Q>GPbP< -adTzq -F$1SjK$qt<X/4v_b
4{LOWZ*LJQ -m8CK[ۗ1 -8OXiImtjRT!fkt4g*Sރڼ{<E~Z>ۃ'Sul.b{exvCFlLA=k̬oBSpV*AI1P]\;!q^TG6w0HJwg ŀ#C#9= v6^&T =dD,ws-?HdLQj=0S_x{j UNm|Z:⢑?5{vE^he*86Iu>{ ;ps [CW)AM R#ƍKJfJ< -6+4%\*YzJ1NV&*zw"Ҥ{q-^[֧^eϘ_H䩈!mp]b^G^:hrst^ ZT}WKeTB0_YAm 3`7Z`]l‟G -g /@
ATW_' USX5Aq%,g|y4&p/JG~YjРcM~iz~о2-kT-Nm(W -YZxk˪0˰:5Ąk'[P[Ri[v/T){<z -nNs&,6c8 _Ts(""Q~ܩ>z5|
;khb6(FS'0{.ؐӳC8dTAQJε;Q4+riODL-_t?6k~aRMi``{x_c0zp#N7 -ZM NJbYc7tգ=(Rpbd/d
ʥ_KOm61-Tt)~dbtd.$'@гٓ=$'5E]yi^pGr|{MOӲ;|}6Ie*)t]9^Bɂ~4
u[ -endstream -endobj -1428 0 obj << -/Type /FontDescriptor -/FontName /AJKMCV+CMSSI9 -/Flags 4 -/FontBBox [-99 -250 1104 760] -/Ascent 694 -/CapHeight 694 -/Descent -194 -/ItalicAngle -12 -/StemV 84 -/XHeight 444 -/CharSet (/A/B/C/D/E/F/I/K/L/O/P/R/S/T/a/b/c/comma/d/e/f/g/h/i/k/l/m/n/o/p/parenleft/parenright/period/quoteright/r/s/slash/t/u/v/w/y) -/FontFile 1427 0 R ->> endobj -1429 0 obj << -/Length1 1524 -/Length2 6781 -/Length3 0 -/Length 7792 -/Filter /FlateDecode ->> -stream -xڍT64ҫH H{o!@ $@BUzޤ(UtwQsoe3g3;Yac5E@p/O@e` -
DI -G(?'ɇpz - , .""@\/.f4_M?| -Fl P8?f_ktݠ^ -?'7V]+&GƆ -! -<];OZvGmC~A<+O9Q
; _&ErX<ȵwuZk*W9f=c8c=[^W؇6C*,x~(#~fi[{o@ɇA.V_\+p̆ -d&4P$:Ka85d4wY5E^0,T3/ -ž{ -}o#[Ytgĕ^1X'rIxYY|S]Ckւw^7"TS} ^m~+{YJ)E{S2`o,40osl^D.-EݜxvSQl{00R$k -zērIڝR.u0j3=ȋlU}8B!^v
tj|5FJ? ?Uztŏ5ejdɓT
OhI#NBGԃ~:b-dPQj] M$Y@;IP(5pV̮%@WҬZGT! :9FBXpoĘçGWorv -'KUo&ZĒt!4":HQ,6$|=XE(=[tM,e>ό{q82el5qrlI&K_oD6v'Zqe1nN0W*jW
X$㿤^[aD gK-{2
^gW_[|
͝LyƐ%q.M~-#.
8p`C~+zhY. -^ߨ0_fY~z@wlʃ%g8$Dzt[}_+` -m9*z6:y b؎#:cf?Q:U>$}{:>EPaVD?T-آ!+5gfl0-rk1? -5Aq=Z=v^2(, Y6&1 p67{<苼mWڅe=Q+Y6RLΡ1#$_a~!wi6Z(_y KwiBA.SoR=8cVVsFlֵ*$+|NW?a.>nne=0O:mL -VzrJIL4XÎބg-zO -/GpS-@g'MOjuچ9 ͞ǡ~Q|[Psi{lpt"7QYnvIn=QgagӍ{ u`x:G0]DJ,c=?{ewFluJ8zf;lкWM<I<}ےuKvaR -';k|WJk0ɽKq" -oth>W<69]kҭ<qg¶ԧ^*7ۣ|y#wާ4PPJyeL}p{'NoXܳ,"pSl6sz+iSwΩ!
˄bo?v'n` -{#a5MNrj\Z$
7fiszX)n8ƁDk,*5{ߣ呾q7se<)`ׁ
zs8"e}
wa,k?[(~Rwr;C[G˺!Si<9Ž@)˰[6p"X_Wj3Ni91/:?8x]"V/1>OT=W/- (wl_*%Q<]$c4^rCe8:9Z>ܩ>5]U*`|zqrW2Yo33 -fVKdq1lSrdIr7q>:sp̡Gv_qpSp5
4?F=q:Ǔ)t;mK]YͿϹVmM)_|j%_S1@i5>oFsL̶R.x{a -[_.kaۃn.U@ -dt0$#*uObU"Ņ59l{Yd\SWhi׆{7T](,oic4h>Fz&R!ZF.usx]g,ZRUc$<m¬"J.#PΙzҬwiƛ{l_֦Dݛ+f6V&ϐ}+,Z/YK>*ɸz7S.)KwGϝh:>ծ3oVގT;4Y4stCpZ"}|` -2{ aMW%oK*6%]Qe6,iDRbY I7yGp@@-Te8ZVS+vT[uᲯ(l fNHn2( -Ey#apd<Iѝk'Դn32!I,"F|U[8<4&ChY&ǥv_B+3e=EtvWKky* -+^f5Bg.M5̍QVq_5%~W_4uQl}V,'}(GccӑU :͇=|oB3HL*!yXBM[mo%Yh -*8~.r2r*/m6g,&~dT\3 u\@FHfާ;JGqR(VjeƈY87D:GYhKA3,=OLL^2^G],ϻ_ČǝJ[&}䖿#Tobm\V'ɵ|^'zZٮ퉪[LXE6?n[o>σMb.2ͮUY#[UT?>eAo6seL9$ |3㤶!h".m_ m8BE4ߴ9m'LSNjF;bƙݥE:Q.LdkY+TyA1{ÞC"c4axMߍ'Qh*Y䩽+b^]RfXffS\NS҅Ex -roJax'h-_ΓCx.IM%j" -i?=^8S2F;ӸiIbW'"0妥ى+%Kk|MG|x ͢nD\}pKrmMQch˒\ʆgK'rVCxMĴFSQI+9]qpvӝLV$rB:=&*oy\m6-]
-R?~h+6X4%n//L7A궷taUb喷fMzT%imDKa^-eK#>a/o[`tdpd^.PKjM -
T&oN|s ~Iw/;x"N=W~hy2S{nsx#\=e4skx;ŭIQGPjg( -epErim`;A$Iw -Y,M^
anc9 ׃t)p)6E^t6557H<`@bhNpIz9.SϤeΏć:>[M'r3OR;wSh2/n?-+Gg\\!!oȲSDgaW;~kʺbLis*O
o0vyǙw>YJ̣֝oГw?L -7KOK=}7]t>w9N] -Ɏ{_;HtDIwjIo*N;3b[i(cFcDxz^Tc,ɝtd
VW8f4樔bGc7= 3TWz -W`4ebqsPQdpW ]*1\ܣFT݀?/[?8A5.O{gq)miZR" -|EEYA_Fcd+؉2xU(LwzCkCִ>LuMхpG6;B-#.#DDJ[ud.c -endstream -endobj -1430 0 obj << -/Type /FontDescriptor -/FontName /EJQXFB+CMSY10 -/Flags 4 -/FontBBox [-29 -960 1116 775] -/Ascent 750 -/CapHeight 683 -/Descent -194 -/ItalicAngle -14 -/StemV 40 -/XHeight 431 -/CharSet (/angbracketleft/angbracketright/braceleft/braceright/bullet/minus) -/FontFile 1429 0 R ->> endobj -1431 0 obj << -/Length1 1423 -/Length2 6228 -/Length3 0 -/Length 7194 -/Filter /FlateDecode ->> -stream -xڍuT.R Cwt -eBbE@²@5}+iHXXi -o220V_6UU_PL((#! -7ve}8Vm,7*HGEAp3D`NO+p5\H! -uࢄˆ:V
@BQ_'*! _0Nd8oB8@"¢@!{4 -w;`b?MG]'m+ -
46G$&0.Ͽ-faLg}ӄR8T+KKfcxŵ@ -th=yw7wz7܈Зm)t@j"A$ĦK.qUyQ$3ow}%6 - ^9~\+ }`n-H̠ b`Wv~5߶=ɓ5O/<K wrlAT`eQwoc -UI{4*q]Kǀ~KZ]N8%X~V9%*Ko W}tOm=
/%[fȒH,e2m72Y>r|I_F<," -?=+E[ܪT,8̍N!5A!v{5Jh%]Pr|=p
C[eV_N dӌŶ!Ii.McR+f+T}p[o{p-Wb8LX$.9Pj$J -t>P{@9`7n챵n` - <O?" ʧ}Z^_N,aS -[H¶<H6qm2MUy&6xXԠo#u{iQ%jܗv՟Mp=wb
/Mei#05ꞑ,?# -2MWM9" Wc>[)bEe͋fNdS_QewqdYm|1\F]˃U4雝?|_Y0>eyÕybEx~h3 l?nOW ͌YxB730WN=k|b
yGEgS:'{TC$KR֠<9smS)[k݈bޔpV;DKbNԾkQЬ& -NPR^f#5y,9Iu.Kϋ/1ϵ=309QoƔgPQ6ksܮ;6-|U9o>MT}QV{-_|b{Zxuaט[9xc[t*GFL'Fp&Rrhsr6mUyQJ ~zFT*5wƐz(9bnnv%yaKHP~ĶeJY-uoQqPYnbR04}>|wHj.9kiUתkxOՋb -m|ʳ_}bEM ~T]I>:'3qOCi0O-ҹ5巉NC*MpSҧ1>8?`e>|(E^j+8ӓmBNʲA?Dc#rhLO;U'r&ոty=>>͚0Pfܪ(
hYE姇fWK3fXt:^S;zyiGLyF52OA+ߜ&-W4˝֯(τi,ݦO0z,ximGcyihߡEfTd6<9,#ptY -Nr`:u7D?#fPQAiz=&.($?*_C02QE}?\UaF
4\kvZB=ާCUG#<5Fw\ͧRZ;HĘYXm2c3 bLW1FxT ' _`\^EŊ3WijV]W7Z>u rp>VB4}T<b,ItMc>VL#-]dh<W0@, -5JKJZHz`VFӅ*ߔd60D(o%bӋN&
pŔyje8.#ߜ>7|0ݔ:SP}GV
I^-d}>T5=\/yYֳ݆+L{{LU'DCQ_c) uʱ]jM}M묞^trjKz|e_gj^#z0gcGlo5^o?P*>&1^['o}Տg|a9AvrՌ'kΧrPUzYԋe -Z=vJwf4 -mL_qg"MH؏}3`yep2~@x`ZXO!R[$;1ƙotx`UBH+VWb؞_`b
Da4w!kx'D[o@3co>A(!S鐌hgpE?0ͣ.j)!킞zZAhe|7珧J/TvZ8 -YBɫ;i\"E[u-DȮ謨$9ܒ-R9Cٍ!gP ` L?P3C_pf&;yyZ2=!?OWN5&B~>E7,]=Y6l6RV
?zR4S^|Z T -G$IT %VNZ)C81ALXB'/ķ)Or:<cJ11I]$<&[BPjUs/XF;܋ɰ H(!xo(VC:ނu}mFʐLK: -E^a{W
_z<5v -SԽsRZv.IⶼSIC7ګ5e]WlcC5<}'fbh8s c5O^gά'H:~`zMi¦`]7o/^I|R|vasc[Ri?O9Z8KΜ; -^5Jg+dvqnއ|^/`
om.o2qK
Ը!9eq829/U`"/
H|8`ݞwm4}4{GR\sD;/a.Y@k#<*{Bbq}P,u<i(*Bf4R9163r-T5rr렍<|7q$#Г;cZztgC6*;$r6;9~Z*M*^yLඳZO%(#)VjvIw$MݾOdkDT97?X߽ґWFD9$ܫ`/b]#O$KvWxٚbG֛6
-IbMJAGOxʝcǥr%{q #,4|-$@f=;Rc271oI<]#;Z$Fki4AE(6ȵ5d_smwߢNnJ`1G)L,K$D+{W4̇RUL)Į?ڢq -y7j].Kd(X"> DqDs-g}r_(},(֚ =L
e#;vݵ̔P/nYQ×}:'D -+n#K#wq_G+(ЬaƂD
[OUN8)`H|{I 2 -endstream -endobj -1432 0 obj << -/Type /FontDescriptor -/FontName /YQORBY+CMSY8 -/Flags 4 -/FontBBox [-30 -955 1185 779] -/Ascent 750 -/CapHeight 683 -/Descent -194 -/ItalicAngle -14 -/StemV 46 -/XHeight 431 -/CharSet (/braceleft/braceright) -/FontFile 1431 0 R ->> endobj -1433 0 obj << -/Length1 1561 -/Length2 6946 -/Length3 0 -/Length 7974 -/Filter /FlateDecode ->> -stream -xڍXl6L -HI(%Fw+cmt -!ݍHIHHw7}|}?;v9YuV'(kK@a~ PSAD$ -K2Bc 4O -n;4IJ@͍G mxxnP)AB!1'AQ ` -N n -1|N -Y}#m -b) -e>n/+ /*z -뮒rA|4]ci\KOb]jl(kTR} -,umcU\\:ףUʮ{g{MIt}i<YZ|CgmFf@'%nRssODv*cs:1ՅkǍM`u~g*V%j]i.{w-K2P |rAWCf3ccemT34*?h+m;&{JS@] vy^L9<*>&U,`k]pħiaL_f_uǵ@xyDSe,L]Y+!Vi"7ϧ4#`|=-qKl#C/NT=:[[ӳjϠOҜ,<ӪtYS-&ӻR<fwv e|O>>0~'w1m8%Hತmy5kwˢ#D94k{So4Vs:DO-rHNTIq0^u<U\cPhO,G>檣 ->^7Saf|OӴil%+LyQ,e%+2R<t\ -O:}2+V.&F%qy۪RӀ@T[ގ"%sq8sqY!k75;_PK]zVD='N"ża:$V^:P1e_ NESp6 -lp{Z(ws4i~ǯ}rF =T!*rȌnb1N5ϼQ/;8,*ۙ/m-$if|ܠ);6|7]EE3O_zzo!M[D_9x49ه33?0}FT1\nLY 5#$Cشx``FsnM#@}b%%s
o<U7L}~&i[Ŗ$-sɟRm(`_J'kw}ӁI'*e L2p'hÞDМkD_CR)f֟\6<qL!9C5/-,uYnRinlU=0#AIs{]IA86gf8]"%jȴO>=-Tm5w~ګ$b[}KI9x9ufKU%JΡR>N8@*qtBC2&=M{eu>sQj>"Ù@!WH[ҶbL9xP@e;s5_2EWa^=
5[+dXbjHW}W;;pSAS;YV+#ɗa -,ǕؾCjw5EFRe>P *g\QMyP -bژ̮B.I5$Rwfjwclm,ۉD%*g^wW<ׯFH50&yABS,^jQGzxG>Mr_&1i+ĵs#tw{37=g*wyX4Ji?ᰖ -;ɝkQ,TA嘅0S -]2Tkfnsw1Z]gN03Ba176CسE4û8UE#L/
ƆؾfXЅٹ^<=u^ոeOխ"H|^Ҧ$j5%"b, -M-<w;=ÜEN:qo
;~ToI1Xo(Z+O$vEOy0cB9XϜE2uLϗVXlȨ8OXlZ?b6M/'RW%lM`u5~$᪰s>zsE'/G _p:m}~ja!04np+=ݽ/hhڤ?yƷغ^&vjn$G[C44<f.V^OJ"[H8Ap0iinYEA;ttS&)Og#X/k[%9,\$F*/51/hTUeґޙ́zB7|l[fRU=j'b!.&=efa.v3kgTI5Z7W()'YrN/JIKH5"؞t5*E=YB
abmpv\ -?Qp֜)Fir6='ݾir`zrO~P]p1{fQN&ji6N\>*k+*էj6:ܙG={O-
ggv9yu5\:sx(aУPW1U䶽^pM>J)!ߕS! -|x碽ށ|xrun(Bh̗El`׃*,=gH9ִJv§ۣ{ѨX~$$l?~sRk4x%hrm\}2XsaJymc8CF/SLw\}'~tvJ@ϱ,D`JqDku;''ܮ쑰F1;ޝyvXeifFsrHmkK]cB#Ǟ@ᙌ4'ccNv2kU,"#IeksВZY]k4Zvl?wFyRD˾zhy56yOv[ɽ}1Rep<S&sb.NSBt&JŌP%ﲰ dWSbC}WGc_xgSK/bMTlȧ$
KzY3ugO9e4*e٘ -[Ȗ0VAŕf2yR(=m5gZ# -<[: Nu}aBipj䃅5bd=(]ܚ߸7p+nV˩>{uO4H$&)-X?Rm{LE3EqaEnh/DM/o)'%]=w≹x{]O<cΦ]a\C-f] RGPb(ec)PDDHрENOMz_3 HR]16%SJ&XfQs/|$z3!OݟBas!lJn|En|Z%~%>1`jT ֚~ɷ?qƋG%1۩suw4w}AcuUIRxi[#f<Bk
P _Wwֵ r|@J&г>ٱ$c_sJ -o4kwOAM,?m$]MyL$E\E=(J*eM$]DceeV7hsSN[H']c"3Her`Ԣ;O|`a - -XNtR,e+>6~oCsE{Ӂ,&֚i'_W!c{Z $&x%&|"Py]>ό{츋(22KG%J*Qd'{j^<Fj
68ÙIG<I7AfI7Zam<u_ڎҵ#?cqTK8
8CI9P^[1QۦhF$ɟ8PLL?51' -}a1$!8\~q1{g" N &\'Yi-MIll鲏OV/&O/o|g -^WOM/({YeUyq2HR1y$̸DUƸ2*hv -h2xv1ő@pk@$OapX.磻Z-ާ[D=0E͚=R -汊8W_ZRȐk+ސ'nTӾ`>KҞPRB>(gxjY&8nm?rd{S o-Qo8+ -^lJ[CTn6E-7 UVcR/Z>75{]/!_!qlRPxE`1w4ҬF ŌɈ#kp*nYoU_ -u?- Zg^7{*eM671M0q)~ۗݭG_Q]f&z,AR[pz2slD=X}Ϋ<ŶU?KqIYlN
u9Z#˩A>⚸zۋB嶌Uːp!'nn(\}ܞ{[1S4`Fk+/7C) ;%]+Ry\5.& -Alc[38R - -endstream -endobj -1434 0 obj << -/Type /FontDescriptor -/FontName /IZVTOR+CMSY9 -/Flags 4 -/FontBBox [-29 -958 1146 777] -/Ascent 750 -/CapHeight 683 -/Descent -194 -/ItalicAngle -14 -/StemV 43 -/XHeight 431 -/CharSet (/angbracketleft/angbracketright/asteriskmath/backslash/bar/braceleft/braceright/minus) -/FontFile 1433 0 R ->> endobj -1435 0 obj << -/Length1 1993 -/Length2 14505 -/Length3 0 -/Length 15731 -/Filter /FlateDecode ->> -stream -xڍPҀ!02Kp' 22w'wwCe9{y^-kuBII$ikabef)ɰ -jkA9b0Z;2: 1\s -2Q2@wi(T -U[S*l_8٘ -zAp4t N /+PXY&`cdAdX,|a&6Vny@5me)%qKRT `bdq -:YWd:8v+q<X_gg6% -WPwYrW@
s&|DcbTr>P*n1PCQ햏?TF$ŜZ=S3F'ɰ/8?iJl<>!1ϲe -7 -Eͨ6Dsggz(l!r:x\{*sR#tyt(X%V -Sv}g,h^Fry1X|g!8
,V}VQw(4*0iFx;3 *7'Q>⻎͓*:R7pS!5\R?eb"ʲKP}̊$_4e]~c(}ZӤt!X\5ɕA3լj%_gk`Oz~*GߧNt`(%vj3$݄IK}77N9eV"dDl4Yw'%/c_c$KW'lf]ky)^}2{Q:M56*s#8FSa?Q6K3D(2Z4M77l@G< ,w1".,٤)P
\\|QªXlWPЁQz}? ʂj"֎{51yG7" -kR͢1 -z-ZVLm -uLXB/g+r> aL^0g;Ļ0)&Si³`QυGn}Zo4$$F>UqEKyn -; hoBr
h"PcƤviYtoN_2̕]U!9}s1Qgf^e&۬N$IJ\C}Y|ܥ;~ݔc5-Y6[07w9aCBj9O" -z3Z
zd3u/9T?h':ՄcG
Y\A7bLI+LWPk$| A2NxoP8yKb0(|/ǥzfN3/;nx,ނwIy,IoO+1=<cъk)4ɴlJz67Sӷ(Vb|i4LS~nР!rDH
bF~Aim/Kg
b_rhz - -~TniNQ!Edty5OZNG1/*;TVؗ~r2KEۦw5{P4ɒ`)jFZјWң7S~BZIADo7Ac@:qFdlw>g^O-Jl+<C-k69l -~n - -`G"_$;N_Db]-ܪs~j68D횠;!Zܸ:e.^D5$9vxq&GeٿS:Į
*<iU5?]^Еe56l!l6hPPSk=u)n^8h}Y7OSң8ل%lŏ3%|`t껡BqO0~j*j)_T -"b^\Ce5t%ǣ2(Ŷ9YY~z˹پX R8^H48KG,T~$Oد,&b3ۍWHu6GhhϏ?DÓZf`c5,Vrax=k~PyM -QS ]UahkރE"O5rVCkzO {bm%>_74,8l9>5Ŗkeplwbs_pu'$bcw]hz_^RbR|S<MyRUup`4sbg,>pve}'y{¯(c8Ri@ǽQ'RNz>XD"GA:JFtzeY `}X[&A'Hү7?i>NDVY*6 _vԠ|{rBko#'M/W˫*svK -҅SP@<Gͪ+fapHtE;M>[8CWZt<(X~?ɆW{ -7',egP<e3*1$x=wг18ljM?v>6 -E?28^&ѯ>ShɳyVm@dQ18ht`uKb0<1ך<r5]PXrk"uE9J{,}tr. -[njm#Bua%%Ql+NJ~*k?Hv?.Q|V{&p*[0Nm"A^vrqMTkn1qv&fw[A)͏0eN9ҧc&/ -tWӛ%%n
;Q&?p7JɺvRF7nRYB|}rZl(HQNچy@2wpnMp&PKb-ͅ>"z<p ᔹxȷb,ꚑ@MrM3|%z+ײ+>!o;EH۶!ofcPx<=NRzE2 -7и%DnާͦxZ8KhU_EaďB8EK; zve? -G}e.[-ZN# UtȽyat֓v]iW7=Bk<5hl~JC':W-<ȊS- yɫޱʯQyJRX]0
vN!xd:nN(|3H}tA?rFiJh-8+q3=!wAލlr<i4,{Vs1dUpi'/"6&:cyf66dGI!(\SBF~52eq9lV/7?]>E:$MOÆ
Y6? %Ý0+h!4?ԊJ˶S;!?m/k8lr@KסU><T d
JX͘6̕3L#ataCɬ"2") ;`K|"ǟTX<@u{ω@CGUJ毼0zbGo-E8-]_hLjWF6퓛qOpXT`=eL<G$C8?0zUe1@kWיnL2K\\'&*Вq~A'?#!ս<yJ: -eKh\&\x|u1wI~ -4ԥRfݷs -.10c,/"\{8 1)hrC\H$vL݄E5%ʰM %fy9T<f6g?7HI'oByFKE<IAY2_Yp`avi6cG> -ٺYORxܡ9lu (N'38p%9gI֥@cψ_Pd=0VR>쏪vv)z3E^@t=Q_ -dv2ZS i7逪;Hj9ct%ds={ƥ7e/ǕY!ϭE!r"O4
mKՠ\_Q&=id@lDO/&z .sR0ey{ -;r(qykvgҫ2lA;gP¿PYjN(3 槭,^q2xdg"D;%U -?Kb)U'&E֝ໟp\r]"a:<duB\rؙR<ÅBHڲvQ؋(謡 -qB).1`v&^Q)u揭%xpls -pL4pA|!*8ۃʕ JZ_w02>X,ϷiPc.*y(KFq:^+5,v=k9{{ -eOtSc^j*̗JAK^9[=2DT*Չ-j(3G Iq@fuFWc:vr۸F4/v -Dt|;rJlOTy8ÚR]bŶjۑ5}L;ֶw/SYx gmy#tM]]`:RK<Oq}!؇,ڹYD`V(sFu"diÁzM!JAgč34:sb
{u@Ȩba]~XjO2"jh>MK߅pJ>m>1WIg
QqK[aLjlڼDL7bgQ7bU60'2I ,+Yc3(ja}5&#R|v<7\^d@~(Ξh*"9^OZm?75O\4OB*/xdz9|Is2H'8nPlM,XV1v7Wt㼳8$:^fK3;y8Hm5t8m
BT'b2ڭ -zsrvtဴjL63}o|=]sזy T5S-}
tgܲgaNeȤCAݴy -eTKè O^(8T+Np*mG5p3MA-v:\2%fz(25K!y3nVbCi*rx21E6>pgP#{ڋ!d_d{%Cb.wȵD*7$FIl/Ud}&}]:NUhgG1vb8ƍESUp[LX$b22^x_fIq/'&ٛkVxŃϔ8 3aj@}TC[KtiZB2=⡮Dr<D}FmmSoАyH͟;V&FuwVcE0{wNӝ'@\$
(T*i'V.UM3QYdM 3ᤳ'LFԜKcg\ŌbW_p~p9p1Λ齕t1b]í^+ -io9U2F$[{ ۠0%|3;8sg?nI=?w`7LhαiXuGX
1;rKqH4%vwH)^PbAv!W
+ȿ1 F^'ys^ħ4\'>%8+_BUr -Q¿xNϓkeIPj+n8¤Ͳ'nc.ٮgm]%褜sY]LlT0 ThdO6r xvgk;CXNߧ1:ڣe
*J$
Ӈg#IuYȄ=&8l˿8FU߀ZPEKBf>Zl;e< mQfAx>Vz87 -=JVDK#ftYIb{
J~b1
wFkhFcTymo6jFIWOPre1^I5Sr_:ISg/daB$1-K[L"߭( -g"U0:>] b - ͕i^,2M|`Ds3P~[ilUi,!6|bʮs[_I3!@'FP*+3EVL/ֶe3gI -=4~uG݂ZX}IH{q:"DICњ$dUY ROf - BkmI j9 -}fUݎLN@ ,oC{Ϥ<_JҌF5mZ0;c8autn[#5+Nf1rlu!0wDƲ79lT/Os+=XEv:16@HB=T~kxR_N-}RjezyD-b%[X0B~!Ѱ#'Kv(-!| -CVccJ+_0Ga\ԶnXTgj-l!"' 6$<՞<cV<\^<պSUOLΉtҩ'4-M|ZU4@l
nIBW9Ո -U -~t0>s@ܶ.w{9;(rge߅ -(N/m[[VbB(7\U?)RS5{=FI
D a|}QRg9ܡp"ۅz`zKs4 -L/`5F{'sem/?qgM][iH[;,ss5NذuYg( UJ(f炛-4UC*'_B-Z(8`S^8%<nMٲ'ZQո
dmULE*9PA}@zD3HI7Oҥ8PRyy#Eӆ_7Γv -;/yĨSg>)i--I,ݴʃB@`m9g_F,.3b jotPNwO{~GJSx7T;m~Rs6ED:߁oxzrH.Cb]89p@zB7viYMQk3mhme&UE/w
LqIFgąttJEgefEso$S~̰ctJm߉6~8zk7P, -Ys|.m,nX4Z@/J"Ѥ=/7Kt]"RibxԠ];a鱿
BKkO^f,hq`Ч7#2B9PC<5HؼW'#|<6Y㠜;\~_e44V\ͣ;]l ~e-k'jc_jC$)TTC=\<[~>+*~ ʷ8yOzu*}7;KvD\mM1FC7%kQ8BJotךiC m̃0.>0*[͢=0|Y^쓋3o4UOm*cEzOx跱i˃U4eOuIDk 2]DRR~f-2!՜(ȓ+.H, -x,fAԱfXkOap\Bdiu%L#4JgkqzS2佪j9VSh!ϗTwv+WfA^5IRʩ:M(6F]ܩ)|?lRͰ)]1l';뽕۷g6]@mnлcB%t]W.Y'I)&߁~
;aW[3U`DVtQA?Wla^7*k!N)\āA45[?> -o-;2$$"Vϐ'RwLLλ'];j~GDȯvr3\T)iѮaLJ)4e'f,[=_H/ucך"2REP
N&qw-jf^Xf}(SGTyՁZeb9#BdG&t0߯!UOVQ[߿w.kP:]訸NVcMKn>\|j`rR -hf#m4Utv3h-LmBŹpw}JXuf",oʓFQ3h¢|bIo#,/详毇";;3&ဍ\;joxgDm_Jv釄GYIs%:z_3GkHp
4`e}ҳT_˹C^=c?Wzt#`nc3ٓc?骋3Q/:%,zb<b!x-NG|AG4"BM*7U!BMX<dseĜ{qQܗte4j3dʉ3ϏQ:ס -z?tTawVlwhHTVkJl̅ԼXbzT#1r>+q -I`"}}3] /l$ -*75K|4]?}Ck(W_ׂԞfw+-c?aG1tV( 0qC+^N)ߒ8r%}hs@6nnG&^h.B\@gſ=]qth;q5t֪*iaJͿk -h8ȣ@+$t7(0sv͑TPS(fD2vTioqy*"+wEkΎȣS?ZcjKƭÇTjvDES|:tH1Koo:-TWP=%Ykdz>9[i &k_(,::.Uk>jcS5O}p%+tkd_U<QO5D}WQ@bKٟKۄ:dK_+BUô/ZASX!eOj@8GƟTT3i;* ]n<T^qy@JiY"lx|Rq/?X`&U241#RW6͵uN5tcS g}K~K4D_au= -@׆ ikv?lr~AÛϸ--l>VY!q(*2eȔxN":E~k%%p~S5k j֚Jf.8S'br.Ђ2n?} 2ּ.<,E%2 -_Ď]K4&3h9~'X36[brZοIvXJ4ID|ўϑo[t4+ӣ
`'^b⾚JSTdr((+;dxh-@ }i&r"_@B,Ń"9}[C,<Vp -c݈)6|!!]ww,5AC^0ɢP\d2"(SF^>0r5wQY-S}٥td -E'I[- -endstream -endobj -1436 0 obj << -/Type /FontDescriptor -/FontName /TYQGPD+CMTI10 -/Flags 4 -/FontBBox [-35 -250 1124 750] -/Ascent 694 -/CapHeight 683 -/Descent -194 -/ItalicAngle -14 -/StemV 68 -/XHeight 431 -/CharSet (/A/B/C/D/I/N/O/P/R/S/a/b/c/colon/comma/d/e/f/g/h/hyphen/i/j/k/l/m/n/o/p/period/q/quoteright/r/s/t/u/v/w/x/y) -/FontFile 1435 0 R ->> endobj -1437 0 obj << -/Length1 1917 -/Length2 12457 -/Length3 0 -/Length 13642 -/Filter /FlateDecode ->> -stream -xڍP-kpM
4N.]Cpww`A;{Uts>UP3lؘYl -r -r`u8 -Jvo=\&oWϐ#u#igk?y9x#_ovoa"lۆٚ[ A 7 -ω5eUA7 -Rk1y.;Q36ĒFzvhoEW~{Ç&=y=ĩ!.MN
3ixvo%G̋u/V7P:zP-\)cUq<>;z̟nhsf1s^Ϣ9<c=+5 ( Io1g=ŏ=K6Y!6ȼƺud1X|2mu,2
kOQ\]eC._=anNoOkt<Fuvwp֚%:xc+v{ZfQxYNϺwVH]8"&c7P`q"TC H\ev<x<Npu%npN*2l"4;ƩBM`L)\)/*jUtMrB1Ǡ<9CPӑi̜vVosS&q-v.-]A£¼ЁH\""IhY^Σ_(Q{phVfMaJ:UT#Wҽ"jieuz*ݯh_*nwtƉIמ^ru
פԉ=Ƞlo#nV~1]d6=2a Z~Ȭb,M<q5f>Ve'dhaq Ku4}79hL_kԚk~xCM?H ɪO"ZOሕ
)[S|RVA`Y0 -\-]}`9Vjѹk~5V\x;/B\cj!mnVG_rz~{䕂Lfe(J?D"JJ0rpF8?:E@e]LǙeQfxpX
Ns)%B\D<=T a:ș1
i0k5w-lNRSߛEQf -jDzp3ɟ]ٻ8Yss9D+vtxy̰Ӆ71orТi.; -6d阇[0>ueC~?3Α͌qoC1[+[;L?,~*53?{])x}CuxQ?PfJ^ԱOMvxIWϗFƝc\h!.$VB*{Hmgh?O pg؈
3~ZX-0%7@EQqA&m2NNM-\HF7m!Sõ!ZZMFPrd&pF^H<-H*wB"mYk0ƌ!)D=mR,
M# <
, -pFԖ#g:(nΖy}4~GҸ}wZD9WOF奮J_?OVU+`˙7v%IAowQ%
m0¯@smK0|=*,5ܲЇE"[a!hט1sחkka?:>lVBWExǮR3GX
D*C3b Z|~f3Є<_~ۇ&,9N7.Ұ/˭7%;\4c~1l#()i\;8O6
,(&Bu?ϙ@C1w$cnvv.j!hxN;* -qTzJlDJ+wWx
H1e:2Lڝ,$Zmx@[eDu#R,<,CK)=+tÅ_k_aGA/[<h~|N:^?-K/OKI -1k熵 æD^A(2r,MGh:)!Җ'ybj@VDG}d5taW,a)ܤ -'U0'u9oExЎs%pm'zWbHKfaq73cgfWM4;n"q++Ox>wό^D~Q(t_k>xfr;_Aj۬66~X1X_i
,Uu#]ves;ctN ѫDC PIOlaKԨ -L{^QIːP~S y -!"u~P x_o4_?'P.K뛦O.ȩBr0iПsgFϸkA(6FzW}>U"~,O8Fx:^_jI]$RĂzE,Wr9^+kXO'&EHϬlܔ8MOlߔ5@ou2}F<
g#+KoR]ѱ V愮
:$'ףpm~*zx#
-j]/IGIЌ"Y vs&yVe7 -~@F܆3a۬v#< F.¿ђoWe.<(B㑞nZХ<J!C[2=?Svp.5D@ -雲|Z=Z7?HLhH굎m8gLr?y+H1k7hc̷cpD|ʯ ȅ'T;B[X;ps.D.%FKS!dA$r_hfdQAZ^6#)=8i%.l W:nBÞNc-
/pyWr<B`6\@nH/
tEޤwd -UDWIylwu4ӰhS?}{dFHDd) o.Oʫ! cs-7Y)͜~d2V~o%/09{'CMe^ -$xPuj42n=嗆'.)հ~R.r,kb=5(+FJpFvńyQCj.:L. NC -ձbs/KܴM_TUI^*o5M]]%?HKu
[=JԹQq"~/z9 މkixjiNTLAd̙ͽ\lȖN'Yzc$p[n\E -XYھ)=١9c,ˑ2l(gh|bM|".>!hM_˛:g|KY%,4:јZ<1̡ipN[7D 0WZ恊?J(A[a.__Sr'1G׳,9@qߜH-bCyl(9fA#sv' -wC?3 R<3dlg>5Λ\qG{ũu:`y,C;T\]Z01n08!ZUX]J늦F 1J<[w;
W`J9ưfr}GAPv47 -8=N[Tc>dT<S{hzixY|Ρޑ7,(0cGTo琐PFu5~|TkhEp`U_ĹIg|9 WE, sls^`Z&M#et:8n"81m4x|!@O3wp.+t6ƭ/Jx|&=`Fr)kݱրɅV}ɤ;&owsL=xͲ_x
Enj% -s( -< tUuC&)ú_ -!$HF.'o)hq'.*`.s Nmc[GsS=gygwW4ߟi:"p{M)q#/F>7KI=k21YiXRnTf_ed9Xll$6WT<"hT}Pu_1aS04K9*z<ck6f3wB9xv@5Ĺ[&h*3w9* |ݫPB-X#q4^O"P+)SnʌeupAY.}"\TL'~UMk=mj&p dҗ0CX}SPD\?!{pT/ݹN#16rx,|H7;8H_ gUfIښ5`=jY~ Tzw\$(kiе?h!މ+fϒ^]c˸\_KBϬm"h~vαRSigJ94bG`v3ăkFZD@G
-N{,ư,6\%u= -?FLzuGZ~6
#pFIoTxwX͠"msV@UEV^ Afsifq φq9ݏ}MxQ( \_+IP̑z1gw=U>Z$pB7[JxP0K@*>q -a ]2W2,jzۗ[Ĭ25AS -P1/$d)(+яgjuM -C:@RlkFӐ3
-
`<}LN?K|\=9ə[Ie0eJ -@tval"X\47 G7LqXvCIr]~;1"yi."m&` hFkFUGSE8 g_i^(,c*ԛe,k+h3F?2n!W>"K99gQFVTD7^01î+pzI<MGu+=:KC[i`=kj_ -mõ1BsFv^ -iwTNNLqGRYD -/"^t7\EKWjy
ESbadA;Dx}-@np}Ov3Cw.#YXsºAƨmifzQLYi3HUc!40cʻdf9ޟzz=83oia -i>[TXe(ۡU|HTIf=vƴي]aޙb33GL -Q61-Ec,{[$=ȶ҈Mا0NK.L5W)=p`Iũt$5=aH+BW~V6fzx?_Je}%RƳ3\XpUiYAqt*Uw߰+M;Ϸfl#)qJZ D˱,߆bPuO2NW(STw
ZVs#~}v@7qss'?)l-l~7+q
n'8G`J2TVBWpygxJa%$&t|W7gJv[jyǴZK __/QÌ-^nދɌ.8Hr2v*tpc%Darn+,221[<rZ~H7upf[xZFi}o%rF+z~ hGG:#FÅGwj7A,耍Q×ZAe{&
i.Hz\淦J#=b>F-XF[m__T
b!U[87RP++j -y7MGSO-QiX)V(f@.ik[J"
y?Aߟjg~"1uv9MF-k9\-|5v9ć|
t/Xޏ@hM7t^g-mWX4lSz 3.ls33/`ݟc;|U_Yjbl
9ARb@v[2RM0qAg2uBW$Q6uv$$#Tޠfm?T\Wen1PqZS3| 2z@#sY@/PI|z0ԯ٨ɮastQi` |ī@F,X+ո~&ŎnkŖ~^ApF -#&HnE81`1ߌwHclN>r= AvZM]a$@j`p@x^w@!B 4Dge /}R1 "NZa^ܝj
_,$(dQֲB|͋Rd=S
-yl`97ʻ>x/bF$ -Bt^܆j|_B5OөŤ]J#Mx3sm3o$ >$ -HI$sk[I'W#,Ba彠tcS6 -=\2K5+E3$X%q(||歾 }%3vk^kz3i6>SW
l'HuA\
L c9^4V;UO(95=.gU
2J֠R{A&nmjFh.-r0Xg|T"[m%X(o:nlw&#"3 e3r-HGD*YmĎLW[F#suLe2Esg(O;VHT
1In>w*;jBE:ՕM{ˇ'Ќ?
J_vפQAoIXnk=51 -nzn^voODsT1voW;a9)~*0KNM--w+/kéEO1$|w4/jn7FहH71<hs.d
};q.cXco̾ -ظBiVoon"h=/3;^5l9'烚ߪMnז)D=3'KV'ZBa*|rjLU@5|*M 1\-^.ȸY-ZwClI&35w3\<-VtT0an -G^0%|hMdDc[#,DwC x6GbSˮU?fl~.lv+N˨ L<41x7ҧyyIJE(m徯b|.9Yz;Ga^-wl+*.GM{aO(IfgXu4K0z&S -ro*nsecLjݲe.T(YR+SMbFSMEG<5NkZg+9] n~Hir -endstream -endobj -1438 0 obj << -/Type /FontDescriptor -/FontName /GCNHFL+CMTT10 -/Flags 4 -/FontBBox [-4 -233 537 696] -/Ascent 611 -/CapHeight 611 -/Descent -222 -/ItalicAngle 0 -/StemV 69 -/XHeight 431 -/CharSet (/F/S/U/a/at/b/c/colon/d/e/f/five/four/h/hyphen/i/k/l/m/n/nine/o/one/p/period/r/s/slash/t/two/u/v/w/x/y) -/FontFile 1437 0 R ->> endobj -1439 0 obj << -/Length1 2652 -/Length2 17030 -/Length3 0 -/Length 18545 -/Filter /FlateDecode ->> -stream -xڌP|Cpw'Kpظww@p$XN^սE0ϱ\ URe67J۹002Dx -g(D<,-\@i/ڄE;@dibd7r -ooK,Sxvf -"'dP:yqlwtFQ*|p2T:m_Sr!F=Z7l8g-ƥ<FLY[kzs/9;"[YJoT%M\fFeKS;RV%:RY0/ -{K6֧(zud flh1:E>S6s RK\Mb>&6ʵ<n#+CR}C*Ӝ -!4Hҁե4I|?:ֶ$o.ϞD1X$Y -|kw]y HKȊ
>͇.Ϛ!zk[-ȑ)AcͭxvpdWcؓpQEC뀿t\UNs8Jm1ryЯ+r{/K&Px0R20=CwWۨJe 7幧5fNE^OcG?Z -a;rTպ`#;Bg fM.Ϣ\'<o[7¾c0}pƹK(n`D敒̋Kiۺk&ƀh/`B0cKޓ4]: DOR[i7V(uJKwa \u{Ǡo^w<|<"jBU'>FDP շ.gzɈ -TxA$}ted$U|8b+xt(۵gNf_+r>&%93WzΪ||2ȵTqi힂qR.!pǺrV/fSg0Yߣ˱_rm>
J7!~R:Ew[ѧǕQgV?lCCL(K7ZDwyP\nַ0G]H)K
nIB9 -~ALG-Ïv| -{I醙^=z6=\F3:;N֬Vˎ>qfR&D%Jʹȓ7~:pxwFm֡7qPA@֮{t6*}yrv)?vhrL¬*,Q>_W~{tp'Lt^#=[Ďt -mJlx$f݈Xٵ8A -bIB$:d -0 -Cvs8f(mjB%b
NVTκ}ZT5P?>?Z@5BťYfe,@6fyKu^j_%YeB{r}IͧRmz{9RQfv6^ʓc"jp1f^炙B $}C:5 U@_ֱ6_/)(a -<K[O 2*i|'V+Q&>8<pz?g4L!;HA2ngΗ]vk]5Dp1i7 --Q}ײJ_qB2LB}QE[Ep#fBEǝ܈cPF# iXsEg-ʪRP0J Rga+_?R`6rm~0v_?uQ(#MsM]AʈA.`r,k(l&M)2QO1Dc*aJv2BؓtkXm4 -7.m&VBoɡ.'%7j^'kc5!rquϤłZ(jAzS%SN`mPqgۯ_?4 -MXpVe1Tj2]
u=~ bL'>z?䃯.Js?[P7\u8*2R&VaS -aWthSa_kbp?:E:놃F]kM!:/2Wc9hy<~&=
MAmqm:fb@|Gl
aeq Ëy $M[ -˯~ÊDnQUnᶨCZ/ip{xy,?D϶M("Q'nIK -aXEן5 -y)ê\ۮE)q!()x\[vWd#z"4(?|0ěKY.{ - -/e!|[I2JQ -v}aef7= fTv8xv]ɑP\AI`%4ȭU-L#ǧ}.Ňg[YIfMi6'2Q\Nʐ86jec_b
"]S.!|\ZT-ijG"q❅Şfw!mB;KUHH+ǦqCܦp >BvGD`93uo=֤жejPS\Vx=w;&`nZeSJDs,J)j3 ӒƹaA!MB|{mlD@ʻmzh~Q:0L
DJ - -xb2v -[RhʼnMmH,o @OS -8ItzpLr4QQD,7'Mu~ޖM.svYLg".\6'1tJ֔bDDH!{FB}=? -0(Z5CO&&h[XlߛJ&,2-CfE;bܝlL,6Mv>GMۉ-dj/P7o)YwnzJc|?8P<F!(Xg -nB'4lZjK-<(Px\?+y,^H9o>39c*Zk -XHtr(r"(H5W\7T/4YٖT-K{Ô>ԈV -is'XSV O9AψWFhPHPK6?=Dis|bn6,Lҋ~|4F7$G=zb՟9 mTz pڅ3)S`$k9[\ -M@ @Y}'ؘxӭPGrUEx^K\ -!O*,o* E55[:=侊-gfEd|y!;}<\:^R;W )- -ͨ~u@Nd݉B_
9!Z/v50U#R=|є
eSqV~@[x۽I/9lAc/qW⓭*5+=x䲫ܗcZdo\5=$}_tnǏr%BSuHrr0hNiu?Xyww&9u1ؤlm^5ݴ;5#&D76Uv?^vr(_n$Td%-ٶ{<{NQ\vܛ֗>uC=45d`} -"m# -O -";<X)Yo'KB -' -ufe99,G ̵c)ISiyucTØhoR=#&o)2:E23֙6h ᡠ:&w<ҐI-ڞ۞Ef,EU!<kg:;Wہ 2eskR
^ -SQfiBj&(zhvl-^hoS){zM֍'k3ZWfYxNm0Xn-7:яKAdQL}nct6FgGΧ00^z9[598sYF/"t3a5`i6|8[jZ.xl
βbnl{ӯ>O2M -~86XC+iEBwt^V.pG2DzJRv>3M8'8&Ų3 ~!ӽ_F7tȽ$" !Y`<7QE99xĈy>RxJ3Jk_ru2Y6JX?Yy}9y2ZNvRsy5#tVLz`<c9Ksb.^Ãۛ]ˍQ77MYɺvcR;|'W$!U~>(]3֕Cv=l#ckPB^@5@&<";AxnQ3a%_5 -,֨t?1\?a䕀o lm)4h9\V2;W輙BEZc`JBkO~Gcdl5犨ؿBp簃(U=~*.ύ?!\zU<V:<0tF(ze9whXez˓sE)O\:9ڋ2B2iѮ&As:f
-ET|Ż$,H*ڳ:ZݕnJ`[zȲ~2{G]ώa3Ɇd~0"ˍN:%ƨe#l
8ͳctߛ;ZTaφIRuyDU -;kfXs3?yKi|گ}R,cRѵ -1wp%Uy4(>{X`cmީ2u#1I|"ȳ<>c'"Q!qtiLwgf0{H³"Z:k`"t\=9
\CKDa!FLӗ&HӚ6^Rlm?zMg4.D:Y{`{lYfQj/FZ <Q -`N-Awpe"|-l7}~C wRf~Rķaj2Bh -.x1F0<!k?LԶ3d錍Lȷ+1YU7F瑻Pƒi"D#C[ߒc'mm-D冹צeꍵ3I>H2R`c~s(]I郟@\уyyj-`_ԞXJʶIgrd*"['KmV?V'TB/i{}X1U2yCElNdG$h}__{H1OE3df[\; -S`3L=x|x/Tx:~x.lXx2iqzqټ+'T!N~]/(p¼E
пv{ĸR,oJHFVzT -tHxyـ}1&N;uoM>[^^xx[@S1 嗭ZS۱<#'ZUi@W:_ˢ)¶R%<aS&؎2b9Cd<jӷB0!,U̸MN@3:jyp70Enb223jpw,B25:_`#Mք#}nƢsMۏA0#:-f&U,x$iNujs^PI]/IPU< -؋}y-4ůcYᙞ& Un8JRPU7Bׇ[$.|[)su,LA1!5Be=Ʋ`$U>l.ˈKy -463Z&?*?4q7G6Fn5o)qŞRlt__$^P5]{bmkӒ̢+-T.odΓ22NIcLT_^Y
S)j 5x
ۺ=z48&O8HL^˙
%2q:7kP6Jp}voGK!*݈k\
P6/d!W^n"yp1+FB^>u>Д_,|WE}e2joXѮ|\KYp-5):v#>~l#U=("p9~]`u=1><Jl`kLnbK~ma\/&讉 t/}PpN2c0Y~YI}GKGtPrjʼn+kz>3{hwnȰ._:3K| GGO3LL @[U:I<S
/2y
>oLJ}e-76L -4 4Cu3A;d*\Bwݸ`A^}]kDC5uB>2)_-KRϢ@ybS38wN&2EuVw4.;*N$33=T;S
o|K?L!U4u% uBQ - -`I L3?
gaY+%JӮ14")
QWW}gh(֣$EGQk6BeT`|4CUZ -8_fu:*4z%y7l/+ހS W<hC(DgvOm˼Wc,ռR,5pQe7 -'O};yjtsd> &XaL[)Ћ1r;|r8_*Ɠ!5mX%?LCX;M̆YEŰ -!
zC]O9=b\j+Ynu?7+^ -f^l,`?u,]1Z}64{%5,%B=cxxnV+%ZP{Y pN=P]ʋ$FBL"LhkCNb!+zLj2$WFaKzpXmŃ!%NU2byy# -X~(d`'玘ź*=Wϔ)&,|'4ݱeU5n<e!9:nńz^4s퉯Hέ8cCʜ jhkHȉZ843b,9r;:P}25lqxcw3P1̯r^'nԧvہ?hup!c,I{f+Zse.eO&[4ާ>4Wհٗ-͍7̇1j-^D~_\ʤk8=3r7'w:>-_ -6b8ʂp -8qWZS|[$"D>MEe3 (JTmF^ra;eroL݇d5G'm_GaԐ{-[=m,5y-hݤ0n9$D -J~mN|ڣnWV˷Kwxt>/D\|g`4ZoB0E
us31̩eJ{|"1+f5 *GxdKTd80_VJ8/e($`MK); d`343Շ^m(MlzP*F/ޟ QQ싫,?U7WaMhڀˉQKO_M\+9<-.
ʳhҁl.z+%mZiUd{c͵=-znoz4EOK[!qW~o:jװ%izN֫;<bden6H5dPcOp>y(?*9v{22[f?邏Ws:;4YݞT6 k} - -yr(PKބ7AV389u]a{؊Q\6)ʴNjħ(kB02WF(c#V:$ -2Lq9 -qlxaɼbCo-l9)HKS{;O]pi6_aM/Q8<a18,Ětq~*k7$$ -;zz*r%͙@gkB#7AZ A@>[/` ->!Ѵ%zǕ 1s c~y-CzJ |7#;F<F~:l -E-3d` -iA"_IO~(Ӌ_Tz1tLڞ><٦88FK?v2)ktuppX -cxҎTxvmM|gߓrY&3jN, a<@-[㫮D>`>*\٥vP~O$q;;˧9vFlXe0
3LjCeuEwb"UHf[JCVJSm`mĭ[䩂Q*"ߠ@ka7ƢzВf2~䪊D
Ϛ0&Q0a=%5yHT - -$m%{\ޮ2!7Ns&JYSxr2'blf&>?+EH&K3 ¼
C -==nWGg|t،m7?,;y*(81ceUXf2 -q?Բ#qhׯHL2$a
\9_8w/ -jϤ"kϸ|4L;oh(i ]F -$E"R;^3_~4hƛ@@\'ۜ67!L:p`f |ccn,8Ufc0RxhaDG{(iaXG@m4o]^Vo._صw@.o0" jJi{
/D -FAiGu%.,/tz_<(?
- w`dN[s}"Pm:/h\C x" }ӮH:E5no7'NE`yga -;"}uZ O>MLJp4R}u\H[&7dV-u~@q_HIc`/57UG<S -lYy=Ob h4?@|%IY,a4ivq+[MLZyOK٘&v-Pp:RQvq !pZ!売O"oo0ipo+)}cj@%^s>8 -endstream -endobj -1440 0 obj << -/Type /FontDescriptor -/FontName /STUYVI+CMTT9 -/Flags 4 -/FontBBox [-6 -233 542 698] -/Ascent 611 -/CapHeight 611 -/Descent -222 -/ItalicAngle 0 -/StemV 74 -/XHeight 431 -/CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/U/V/W/X/a/ampersand/asterisk/at/b/bar/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/e/eight/equal/exclam/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/o/one/p/parenleft/parenright/period/plus/q/quoteright/r/s/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) -/FontFile 1439 0 R ->> endobj -479 0 obj << -/Type /Font -/Subtype /Type1 -/BaseFont /TGGSDC+CMBX10 -/FontDescriptor 1400 0 R -/FirstChar 11 -/LastChar 121 -/Widths 1396 0 R ->> endobj -483 0 obj << -/Type /Font -/Subtype /Type1 -/BaseFont /VGXJGE+CMBX12 -/FontDescriptor 1402 0 R -/FirstChar 12 -/LastChar 121 -/Widths 1392 0 R ->> endobj -1066 0 obj << -/Type /Font -/Subtype /Type1 -/BaseFont /TDJJBR+CMMI10 -/FontDescriptor 1404 0 R -/FirstChar 58 -/LastChar 116 -/Widths 1381 0 R ->> endobj -636 0 obj << -/Type /Font -/Subtype /Type1 -/BaseFont /ZRLUIR+CMMI8 -/FontDescriptor 1406 0 R -/FirstChar 60 -/LastChar 62 -/Widths 1387 0 R ->> endobj -666 0 obj << -/Type /Font -/Subtype /Type1 -/BaseFont /YJCLWH+CMMI9 -/FontDescriptor 1408 0 R -/FirstChar 60 -/LastChar 62 -/Widths 1385 0 R ->> endobj -481 0 obj << -/Type /Font -/Subtype /Type1 -/BaseFont /LSSPKW+CMR10 -/FontDescriptor 1410 0 R -/FirstChar 11 -/LastChar 124 -/Widths 1394 0 R ->> endobj -478 0 obj << -/Type /Font -/Subtype /Type1 -/BaseFont /WJRFFS+CMR12 -/FontDescriptor 1412 0 R -/FirstChar 44 -/LastChar 117 -/Widths 1397 0 R ->> endobj -477 0 obj << -/Type /Font -/Subtype /Type1 -/BaseFont /XGDFIB+CMR17 -/FontDescriptor 1414 0 R -/FirstChar 67 -/LastChar 117 -/Widths 1398 0 R ->> endobj -612 0 obj << -/Type /Font -/Subtype /Type1 -/BaseFont /RKGDEA+CMR5 -/FontDescriptor 1416 0 R -/FirstChar 48 -/LastChar 57 -/Widths 1391 0 R ->> endobj -1120 0 obj << -/Type /Font -/Subtype /Type1 -/BaseFont /ZXYSGP+CMR9 -/FontDescriptor 1418 0 R -/FirstChar 33 -/LastChar 121 -/Widths 1380 0 R ->> endobj -976 0 obj << -/Type /Font -/Subtype /Type1 -/BaseFont /NHSZDL+CMSS10 -/FontDescriptor 1420 0 R -/FirstChar 33 -/LastChar 121 -/Widths 1382 0 R ->> endobj -614 0 obj << -/Type /Font -/Subtype /Type1 -/BaseFont /INKVEY+CMSS8 -/FontDescriptor 1422 0 R -/FirstChar 40 -/LastChar 121 -/Widths 1389 0 R ->> endobj -649 0 obj << -/Type /Font -/Subtype /Type1 -/BaseFont /COYCDJ+CMSS9 -/FontDescriptor 1424 0 R -/FirstChar 11 -/LastChar 122 -/Widths 1386 0 R ->> endobj -613 0 obj << -/Type /Font -/Subtype /Type1 -/BaseFont /MRAYCV+CMSSBX10 -/FontDescriptor 1426 0 R -/FirstChar 33 -/LastChar 121 -/Widths 1390 0 R ->> endobj -677 0 obj << -/Type /Font -/Subtype /Type1 -/BaseFont /AJKMCV+CMSSI9 -/FontDescriptor 1428 0 R -/FirstChar 39 -/LastChar 121 -/Widths 1384 0 R ->> endobj -480 0 obj << -/Type /Font -/Subtype /Type1 -/BaseFont /EJQXFB+CMSY10 -/FontDescriptor 1430 0 R -/FirstChar 0 -/LastChar 105 -/Widths 1395 0 R ->> endobj -618 0 obj << -/Type /Font -/Subtype /Type1 -/BaseFont /YQORBY+CMSY8 -/FontDescriptor 1432 0 R -/FirstChar 102 -/LastChar 103 -/Widths 1388 0 R ->> endobj -693 0 obj << -/Type /Font -/Subtype /Type1 -/BaseFont /IZVTOR+CMSY9 -/FontDescriptor 1434 0 R -/FirstChar 0 -/LastChar 110 -/Widths 1383 0 R ->> endobj -482 0 obj << -/Type /Font -/Subtype /Type1 -/BaseFont /TYQGPD+CMTI10 -/FontDescriptor 1436 0 R -/FirstChar 39 -/LastChar 121 -/Widths 1393 0 R ->> endobj -1282 0 obj << -/Type /Font -/Subtype /Type1 -/BaseFont /GCNHFL+CMTT10 -/FontDescriptor 1438 0 R -/FirstChar 45 -/LastChar 121 -/Widths 1379 0 R ->> endobj -1359 0 obj << -/Type /Font -/Subtype /Type1 -/BaseFont /STUYVI+CMTT9 -/FontDescriptor 1440 0 R -/FirstChar 33 -/LastChar 125 -/Widths 1378 0 R ->> endobj -485 0 obj << -/Type /Pages -/Count 6 -/Parent 1441 0 R -/Kids [457 0 R 532 0 R 584 0 R 602 0 R 607 0 R 659 0 R] ->> endobj -685 0 obj << -/Type /Pages -/Count 6 -/Parent 1441 0 R -/Kids [671 0 R 688 0 R 722 0 R 740 0 R 756 0 R 795 0 R] ->> endobj -868 0 obj << -/Type /Pages -/Count 6 -/Parent 1441 0 R -/Kids [831 0 R 870 0 R 933 0 R 944 0 R 955 0 R 966 0 R] ->> endobj -985 0 obj << -/Type /Pages -/Count 6 -/Parent 1441 0 R -/Kids [973 0 R 990 0 R 1017 0 R 1041 0 R 1049 0 R 1056 0 R] ->> endobj -1072 0 obj << -/Type /Pages -/Count 6 -/Parent 1441 0 R -/Kids [1063 0 R 1074 0 R 1080 0 R 1086 0 R 1094 0 R 1111 0 R] ->> endobj -1155 0 obj << -/Type /Pages -/Count 6 -/Parent 1441 0 R -/Kids [1123 0 R 1159 0 R 1200 0 R 1204 0 R 1242 0 R 1266 0 R] ->> endobj -1286 0 obj << -/Type /Pages -/Count 6 -/Parent 1442 0 R -/Kids [1278 0 R 1289 0 R 1294 0 R 1324 0 R 1347 0 R 1356 0 R] ->> endobj -1365 0 obj << -/Type /Pages -/Count 4 -/Parent 1442 0 R -/Kids [1362 0 R 1367 0 R 1371 0 R 1375 0 R] ->> endobj -1441 0 obj << -/Type /Pages -/Count 36 -/Parent 1443 0 R -/Kids [485 0 R 685 0 R 868 0 R 985 0 R 1072 0 R 1155 0 R] ->> endobj -1442 0 obj << -/Type /Pages -/Count 10 -/Parent 1443 0 R -/Kids [1286 0 R 1365 0 R] ->> endobj -1443 0 obj << -/Type /Pages -/Count 46 -/Kids [1441 0 R 1442 0 R] ->> endobj -1444 0 obj << -/Type /Outlines -/First 6 0 R -/Last 434 0 R -/Count 13 ->> endobj -454 0 obj << -/Title 455 0 R -/A 452 0 R -/Parent 434 0 R -/Prev 450 0 R ->> endobj -450 0 obj << -/Title 451 0 R -/A 448 0 R -/Parent 434 0 R -/Prev 442 0 R -/Next 454 0 R ->> endobj -446 0 obj << -/Title 447 0 R -/A 444 0 R -/Parent 442 0 R ->> endobj -442 0 obj << -/Title 443 0 R -/A 440 0 R -/Parent 434 0 R -/Prev 438 0 R -/Next 450 0 R -/First 446 0 R -/Last 446 0 R -/Count -1 ->> endobj -438 0 obj << -/Title 439 0 R -/A 436 0 R -/Parent 434 0 R -/Next 442 0 R ->> endobj -434 0 obj << -/Title 435 0 R -/A 432 0 R -/Parent 1444 0 R -/Prev 430 0 R -/First 438 0 R -/Last 454 0 R -/Count -4 ->> endobj -430 0 obj << -/Title 431 0 R -/A 428 0 R -/Parent 1444 0 R -/Prev 398 0 R -/Next 434 0 R ->> endobj -426 0 obj << -/Title 427 0 R -/A 424 0 R -/Parent 398 0 R -/Prev 422 0 R ->> endobj -422 0 obj << -/Title 423 0 R -/A 420 0 R -/Parent 398 0 R -/Prev 418 0 R -/Next 426 0 R ->> endobj -418 0 obj << -/Title 419 0 R -/A 416 0 R -/Parent 398 0 R -/Prev 414 0 R -/Next 422 0 R ->> endobj -414 0 obj << -/Title 415 0 R -/A 412 0 R -/Parent 398 0 R -/Prev 410 0 R -/Next 418 0 R ->> endobj -410 0 obj << -/Title 411 0 R -/A 408 0 R -/Parent 398 0 R -/Prev 406 0 R -/Next 414 0 R ->> endobj -406 0 obj << -/Title 407 0 R -/A 404 0 R -/Parent 398 0 R -/Prev 402 0 R -/Next 410 0 R ->> endobj -402 0 obj << -/Title 403 0 R -/A 400 0 R -/Parent 398 0 R -/Next 406 0 R ->> endobj -398 0 obj << -/Title 399 0 R -/A 396 0 R -/Parent 1444 0 R -/Prev 374 0 R -/Next 430 0 R -/First 402 0 R -/Last 426 0 R -/Count -7 ->> endobj -394 0 obj << -/Title 395 0 R -/A 392 0 R -/Parent 374 0 R -/Prev 390 0 R ->> endobj -390 0 obj << -/Title 391 0 R -/A 388 0 R -/Parent 374 0 R -/Prev 378 0 R -/Next 394 0 R ->> endobj -386 0 obj << -/Title 387 0 R -/A 384 0 R -/Parent 378 0 R -/Prev 382 0 R ->> endobj -382 0 obj << -/Title 383 0 R -/A 380 0 R -/Parent 378 0 R -/Next 386 0 R ->> endobj -378 0 obj << -/Title 379 0 R -/A 376 0 R -/Parent 374 0 R -/Next 390 0 R -/First 382 0 R -/Last 386 0 R -/Count -2 ->> endobj -374 0 obj << -/Title 375 0 R -/A 372 0 R -/Parent 1444 0 R -/Prev 358 0 R -/Next 398 0 R -/First 378 0 R -/Last 394 0 R -/Count -3 ->> endobj -370 0 obj << -/Title 371 0 R -/A 368 0 R -/Parent 358 0 R -/Prev 366 0 R ->> endobj -366 0 obj << -/Title 367 0 R -/A 364 0 R -/Parent 358 0 R -/Prev 362 0 R -/Next 370 0 R ->> endobj -362 0 obj << -/Title 363 0 R -/A 360 0 R -/Parent 358 0 R -/Next 366 0 R ->> endobj -358 0 obj << -/Title 359 0 R -/A 356 0 R -/Parent 1444 0 R -/Prev 334 0 R -/Next 374 0 R -/First 362 0 R -/Last 370 0 R -/Count -3 ->> endobj -354 0 obj << -/Title 355 0 R -/A 352 0 R -/Parent 334 0 R -/Prev 350 0 R ->> endobj -350 0 obj << -/Title 351 0 R -/A 348 0 R -/Parent 334 0 R -/Prev 338 0 R -/Next 354 0 R ->> endobj -346 0 obj << -/Title 347 0 R -/A 344 0 R -/Parent 338 0 R -/Prev 342 0 R ->> endobj -342 0 obj << -/Title 343 0 R -/A 340 0 R -/Parent 338 0 R -/Next 346 0 R ->> endobj -338 0 obj << -/Title 339 0 R -/A 336 0 R -/Parent 334 0 R -/Next 350 0 R -/First 342 0 R -/Last 346 0 R -/Count -2 ->> endobj -334 0 obj << -/Title 335 0 R -/A 332 0 R -/Parent 1444 0 R -/Prev 294 0 R -/Next 358 0 R -/First 338 0 R -/Last 354 0 R -/Count -3 ->> endobj -330 0 obj << -/Title 331 0 R -/A 328 0 R -/Parent 294 0 R -/Prev 326 0 R ->> endobj -326 0 obj << -/Title 327 0 R -/A 324 0 R -/Parent 294 0 R -/Prev 322 0 R -/Next 330 0 R ->> endobj -322 0 obj << -/Title 323 0 R -/A 320 0 R -/Parent 294 0 R -/Prev 318 0 R -/Next 326 0 R ->> endobj -318 0 obj << -/Title 319 0 R -/A 316 0 R -/Parent 294 0 R -/Prev 314 0 R -/Next 322 0 R ->> endobj -314 0 obj << -/Title 315 0 R -/A 312 0 R -/Parent 294 0 R -/Prev 310 0 R -/Next 318 0 R ->> endobj -310 0 obj << -/Title 311 0 R -/A 308 0 R -/Parent 294 0 R -/Prev 306 0 R -/Next 314 0 R ->> endobj -306 0 obj << -/Title 307 0 R -/A 304 0 R -/Parent 294 0 R -/Prev 302 0 R -/Next 310 0 R ->> endobj -302 0 obj << -/Title 303 0 R -/A 300 0 R -/Parent 294 0 R -/Prev 298 0 R -/Next 306 0 R ->> endobj -298 0 obj << -/Title 299 0 R -/A 296 0 R -/Parent 294 0 R -/Next 302 0 R ->> endobj -294 0 obj << -/Title 295 0 R -/A 292 0 R -/Parent 1444 0 R -/Prev 206 0 R -/Next 334 0 R -/First 298 0 R -/Last 330 0 R -/Count -9 ->> endobj -290 0 obj << -/Title 291 0 R -/A 288 0 R -/Parent 266 0 R -/Prev 286 0 R ->> endobj -286 0 obj << -/Title 287 0 R -/A 284 0 R -/Parent 266 0 R -/Prev 282 0 R -/Next 290 0 R ->> endobj -282 0 obj << -/Title 283 0 R -/A 280 0 R -/Parent 266 0 R -/Prev 278 0 R -/Next 286 0 R ->> endobj -278 0 obj << -/Title 279 0 R -/A 276 0 R -/Parent 266 0 R -/Prev 274 0 R -/Next 282 0 R ->> endobj -274 0 obj << -/Title 275 0 R -/A 272 0 R -/Parent 266 0 R -/Prev 270 0 R -/Next 278 0 R ->> endobj -270 0 obj << -/Title 271 0 R -/A 268 0 R -/Parent 266 0 R -/Next 274 0 R ->> endobj -266 0 obj << -/Title 267 0 R -/A 264 0 R -/Parent 206 0 R -/Prev 262 0 R -/First 270 0 R -/Last 290 0 R -/Count -6 ->> endobj -262 0 obj << -/Title 263 0 R -/A 260 0 R -/Parent 206 0 R -/Prev 258 0 R -/Next 266 0 R ->> endobj -258 0 obj << -/Title 259 0 R -/A 256 0 R -/Parent 206 0 R -/Prev 254 0 R -/Next 262 0 R ->> endobj -254 0 obj << -/Title 255 0 R -/A 252 0 R -/Parent 206 0 R -/Prev 222 0 R -/Next 258 0 R ->> endobj -250 0 obj << -/Title 251 0 R -/A 248 0 R -/Parent 222 0 R -/Prev 246 0 R ->> endobj -246 0 obj << -/Title 247 0 R -/A 244 0 R -/Parent 222 0 R -/Prev 242 0 R -/Next 250 0 R ->> endobj -242 0 obj << -/Title 243 0 R -/A 240 0 R -/Parent 222 0 R -/Prev 238 0 R -/Next 246 0 R ->> endobj -238 0 obj << -/Title 239 0 R -/A 236 0 R -/Parent 222 0 R -/Prev 234 0 R -/Next 242 0 R ->> endobj -234 0 obj << -/Title 235 0 R -/A 232 0 R -/Parent 222 0 R -/Prev 230 0 R -/Next 238 0 R ->> endobj -230 0 obj << -/Title 231 0 R -/A 228 0 R -/Parent 222 0 R -/Prev 226 0 R -/Next 234 0 R ->> endobj -226 0 obj << -/Title 227 0 R -/A 224 0 R -/Parent 222 0 R -/Next 230 0 R ->> endobj -222 0 obj << -/Title 223 0 R -/A 220 0 R -/Parent 206 0 R -/Prev 210 0 R -/Next 254 0 R -/First 226 0 R -/Last 250 0 R -/Count -7 ->> endobj -218 0 obj << -/Title 219 0 R -/A 216 0 R -/Parent 210 0 R -/Prev 214 0 R ->> endobj -214 0 obj << -/Title 215 0 R -/A 212 0 R -/Parent 210 0 R -/Next 218 0 R ->> endobj -210 0 obj << -/Title 211 0 R -/A 208 0 R -/Parent 206 0 R -/Next 222 0 R -/First 214 0 R -/Last 218 0 R -/Count -2 ->> endobj -206 0 obj << -/Title 207 0 R -/A 204 0 R -/Parent 1444 0 R -/Prev 146 0 R -/Next 294 0 R -/First 210 0 R -/Last 266 0 R -/Count -6 ->> endobj -202 0 obj << -/Title 203 0 R -/A 200 0 R -/Parent 146 0 R -/Prev 198 0 R ->> endobj -198 0 obj << -/Title 199 0 R -/A 196 0 R -/Parent 146 0 R -/Prev 194 0 R -/Next 202 0 R ->> endobj -194 0 obj << -/Title 195 0 R -/A 192 0 R -/Parent 146 0 R -/Prev 190 0 R -/Next 198 0 R ->> endobj -190 0 obj << -/Title 191 0 R -/A 188 0 R -/Parent 146 0 R -/Prev 166 0 R -/Next 194 0 R ->> endobj -186 0 obj << -/Title 187 0 R -/A 184 0 R -/Parent 166 0 R -/Prev 182 0 R ->> endobj -182 0 obj << -/Title 183 0 R -/A 180 0 R -/Parent 166 0 R -/Prev 178 0 R -/Next 186 0 R ->> endobj -178 0 obj << -/Title 179 0 R -/A 176 0 R -/Parent 166 0 R -/Prev 174 0 R -/Next 182 0 R ->> endobj -174 0 obj << -/Title 175 0 R -/A 172 0 R -/Parent 166 0 R -/Prev 170 0 R -/Next 178 0 R ->> endobj -170 0 obj << -/Title 171 0 R -/A 168 0 R -/Parent 166 0 R -/Next 174 0 R ->> endobj -166 0 obj << -/Title 167 0 R -/A 164 0 R -/Parent 146 0 R -/Prev 150 0 R -/Next 190 0 R -/First 170 0 R -/Last 186 0 R -/Count -5 ->> endobj -162 0 obj << -/Title 163 0 R -/A 160 0 R -/Parent 150 0 R -/Prev 158 0 R ->> endobj -158 0 obj << -/Title 159 0 R -/A 156 0 R -/Parent 150 0 R -/Prev 154 0 R -/Next 162 0 R ->> endobj -154 0 obj << -/Title 155 0 R -/A 152 0 R -/Parent 150 0 R -/Next 158 0 R ->> endobj -150 0 obj << -/Title 151 0 R -/A 148 0 R -/Parent 146 0 R -/Next 166 0 R -/First 154 0 R -/Last 162 0 R -/Count -3 ->> endobj -146 0 obj << -/Title 147 0 R -/A 144 0 R -/Parent 1444 0 R -/Prev 110 0 R -/Next 206 0 R -/First 150 0 R -/Last 202 0 R -/Count -6 ->> endobj -142 0 obj << -/Title 143 0 R -/A 140 0 R -/Parent 110 0 R -/Prev 138 0 R ->> endobj -138 0 obj << -/Title 139 0 R -/A 136 0 R -/Parent 110 0 R -/Prev 134 0 R -/Next 142 0 R ->> endobj -134 0 obj << -/Title 135 0 R -/A 132 0 R -/Parent 110 0 R -/Prev 130 0 R -/Next 138 0 R ->> endobj -130 0 obj << -/Title 131 0 R -/A 128 0 R -/Parent 110 0 R -/Prev 126 0 R -/Next 134 0 R ->> endobj -126 0 obj << -/Title 127 0 R -/A 124 0 R -/Parent 110 0 R -/Prev 122 0 R -/Next 130 0 R ->> endobj -122 0 obj << -/Title 123 0 R -/A 120 0 R -/Parent 110 0 R -/Prev 118 0 R -/Next 126 0 R ->> endobj -118 0 obj << -/Title 119 0 R -/A 116 0 R -/Parent 110 0 R -/Prev 114 0 R -/Next 122 0 R ->> endobj -114 0 obj << -/Title 115 0 R -/A 112 0 R -/Parent 110 0 R -/Next 118 0 R ->> endobj -110 0 obj << -/Title 111 0 R -/A 108 0 R -/Parent 1444 0 R -/Prev 90 0 R -/Next 146 0 R -/First 114 0 R -/Last 142 0 R -/Count -8 ->> endobj -106 0 obj << -/Title 107 0 R -/A 104 0 R -/Parent 90 0 R -/Prev 102 0 R ->> endobj -102 0 obj << -/Title 103 0 R -/A 100 0 R -/Parent 90 0 R -/Prev 98 0 R -/Next 106 0 R ->> endobj -98 0 obj << -/Title 99 0 R -/A 96 0 R -/Parent 90 0 R -/Prev 94 0 R -/Next 102 0 R ->> endobj -94 0 obj << -/Title 95 0 R -/A 92 0 R -/Parent 90 0 R -/Next 98 0 R ->> endobj -90 0 obj << -/Title 91 0 R -/A 88 0 R -/Parent 1444 0 R -/Prev 14 0 R -/Next 110 0 R -/First 94 0 R -/Last 106 0 R -/Count -4 ->> endobj -86 0 obj << -/Title 87 0 R -/A 84 0 R -/Parent 14 0 R -/Prev 82 0 R ->> endobj -82 0 obj << -/Title 83 0 R -/A 80 0 R -/Parent 14 0 R -/Prev 78 0 R -/Next 86 0 R ->> endobj -78 0 obj << -/Title 79 0 R -/A 76 0 R -/Parent 14 0 R -/Prev 74 0 R -/Next 82 0 R ->> endobj -74 0 obj << -/Title 75 0 R -/A 72 0 R -/Parent 14 0 R -/Prev 70 0 R -/Next 78 0 R ->> endobj -70 0 obj << -/Title 71 0 R -/A 68 0 R -/Parent 14 0 R -/Prev 58 0 R -/Next 74 0 R ->> endobj -66 0 obj << -/Title 67 0 R -/A 64 0 R -/Parent 58 0 R -/Prev 62 0 R ->> endobj -62 0 obj << -/Title 63 0 R -/A 60 0 R -/Parent 58 0 R -/Next 66 0 R ->> endobj -58 0 obj << -/Title 59 0 R -/A 56 0 R -/Parent 14 0 R -/Prev 54 0 R -/Next 70 0 R -/First 62 0 R -/Last 66 0 R -/Count -2 ->> endobj -54 0 obj << -/Title 55 0 R -/A 52 0 R -/Parent 14 0 R -/Prev 50 0 R -/Next 58 0 R ->> endobj -50 0 obj << -/Title 51 0 R -/A 48 0 R -/Parent 14 0 R -/Prev 46 0 R -/Next 54 0 R ->> endobj -46 0 obj << -/Title 47 0 R -/A 44 0 R -/Parent 14 0 R -/Prev 42 0 R -/Next 50 0 R ->> endobj -42 0 obj << -/Title 43 0 R -/A 40 0 R -/Parent 14 0 R -/Prev 26 0 R -/Next 46 0 R ->> endobj -38 0 obj << -/Title 39 0 R -/A 36 0 R -/Parent 26 0 R -/Prev 34 0 R ->> endobj -34 0 obj << -/Title 35 0 R -/A 32 0 R -/Parent 26 0 R -/Prev 30 0 R -/Next 38 0 R ->> endobj -30 0 obj << -/Title 31 0 R -/A 28 0 R -/Parent 26 0 R -/Next 34 0 R ->> endobj -26 0 obj << -/Title 27 0 R -/A 24 0 R -/Parent 14 0 R -/Prev 18 0 R -/Next 42 0 R -/First 30 0 R -/Last 38 0 R -/Count -3 ->> endobj -22 0 obj << -/Title 23 0 R -/A 20 0 R -/Parent 18 0 R ->> endobj -18 0 obj << -/Title 19 0 R -/A 16 0 R -/Parent 14 0 R -/Next 26 0 R -/First 22 0 R -/Last 22 0 R -/Count -1 ->> endobj -14 0 obj << -/Title 15 0 R -/A 12 0 R -/Parent 1444 0 R -/Prev 6 0 R -/Next 90 0 R -/First 18 0 R -/Last 86 0 R -/Count -12 ->> endobj -10 0 obj << -/Title 11 0 R -/A 8 0 R -/Parent 6 0 R ->> endobj -6 0 obj << -/Title 7 0 R -/A 4 0 R -/Parent 1444 0 R -/Next 14 0 R -/First 10 0 R -/Last 10 0 R -/Count -1 ->> endobj -1445 0 obj << -/Names [(Doc-Start) 476 0 R (Item.519) 1245 0 R (Item.520) 1246 0 R (Item.538) 1264 0 R (Item.60) 692 0 R (Item.63) 696 0 R] -/Limits [(Doc-Start) (Item.63)] ->> endobj -1446 0 obj << -/Names [(Item.66) 699 0 R (Item.67) 700 0 R (Item.71) 704 0 R (Item.75) 708 0 R (appendix.616) 433 0 R (figure.304) 969 0 R] -/Limits [(Item.66) (figure.304)] ->> endobj -1447 0 obj << -/Names [(figure.360) 1044 0 R (figure.37) 648 0 R (lstlisting.101) 743 0 R (lstlisting.107) 747 0 R (lstlisting.110) 750 0 R (lstlisting.116) 759 0 R] -/Limits [(figure.360) (lstlisting.116)] ->> endobj -1448 0 obj << -/Names [(lstlisting.134) 777 0 R (lstlisting.149) 791 0 R (lstlisting.169) 815 0 R (lstlisting.172) 817 0 R (lstlisting.185) 834 0 R (lstlisting.194) 843 0 R] -/Limits [(lstlisting.134) (lstlisting.194)] ->> endobj -1449 0 obj << -/Names [(lstlisting.215) 864 0 R (lstlisting.220) 873 0 R (lstlisting.246) 899 0 R (lstlisting.285) 947 0 R (lstlisting.288) 950 0 R (lstlisting.295) 958 0 R] -/Limits [(lstlisting.215) (lstlisting.295)] ->> endobj -1450 0 obj << -/Names [(lstlisting.308) 977 0 R (lstlisting.319) 993 0 R (lstlisting.324) 998 0 R (lstlisting.331) 1004 0 R (lstlisting.346) 1028 0 R (lstlisting.373) 1067 0 R] -/Limits [(lstlisting.308) (lstlisting.373)] ->> endobj -1451 0 obj << -/Names [(lstlisting.387) 1089 0 R (lstlisting.389) 1091 0 R (lstlisting.392) 1097 0 R (lstlisting.394) 1099 0 R (lstlisting.399) 1104 0 R (lstlisting.4) 610 0 R] -/Limits [(lstlisting.387) (lstlisting.4)] ->> endobj -1452 0 obj << -/Names [(lstlisting.40) 662 0 R (lstlisting.401) 1106 0 R (lstlisting.403) 1108 0 R (lstlisting.407) 1114 0 R (lstlisting.409) 1116 0 R (lstlisting.411) 1118 0 R] -/Limits [(lstlisting.40) (lstlisting.411)] ->> endobj -1453 0 obj << -/Names [(lstlisting.415) 1126 0 R (lstlisting.42) 664 0 R (lstlisting.425) 1136 0 R (lstlisting.430) 1141 0 R (lstlisting.45) 674 0 R (lstlisting.467) 1185 0 R] -/Limits [(lstlisting.415) (lstlisting.467)] ->> endobj -1454 0 obj << -/Names [(lstlisting.472) 1189 0 R (lstlisting.485) 1207 0 R (lstlisting.50) 678 0 R (lstlisting.521) 1247 0 R (lstlisting.53) 680 0 R (lstlisting.534) 1260 0 R] -/Limits [(lstlisting.472) (lstlisting.534)] ->> endobj -1455 0 obj << -/Names [(lstlisting.559) 1298 0 R (lstlisting.568) 1306 0 R (lstlisting.57) 683 0 R (lstlisting.576) 1314 0 R (lstlisting.578) 1316 0 R (lstlisting.580) 1318 0 R] -/Limits [(lstlisting.559) (lstlisting.580)] ->> endobj -1456 0 obj << -/Names [(lstlisting.590) 1327 0 R (lstlisting.604) 1340 0 R (lstlisting.607) 1342 0 R (lstlisting.609) 1350 0 R (lstlisting.61) 694 0 R (lstlisting.612) 1352 0 R] -/Limits [(lstlisting.590) (lstlisting.612)] ->> endobj -1457 0 obj << -/Names [(lstlisting.64) 697 0 R (lstlisting.68) 701 0 R (lstlisting.72) 705 0 R (lstlisting.76) 709 0 R (lstlisting.79) 712 0 R (lstlisting.85) 725 0 R] -/Limits [(lstlisting.64) (lstlisting.85)] ->> endobj -1458 0 obj << -/Names [(lstlisting.93) 732 0 R (lstlisting.97) 735 0 R (lstnumber.10) 620 0 R (lstnumber.102) 744 0 R (lstnumber.103) 745 0 R (lstnumber.104) 746 0 R] -/Limits [(lstlisting.93) (lstnumber.104)] ->> endobj -1459 0 obj << -/Names [(lstnumber.108) 748 0 R (lstnumber.109) 749 0 R (lstnumber.11) 621 0 R (lstnumber.111) 751 0 R (lstnumber.112) 752 0 R (lstnumber.113) 753 0 R] -/Limits [(lstnumber.108) (lstnumber.113)] ->> endobj -1460 0 obj << -/Names [(lstnumber.117) 760 0 R (lstnumber.118) 761 0 R (lstnumber.119) 762 0 R (lstnumber.12) 622 0 R (lstnumber.120) 763 0 R (lstnumber.121) 764 0 R] -/Limits [(lstnumber.117) (lstnumber.121)] ->> endobj -1461 0 obj << -/Names [(lstnumber.122) 765 0 R (lstnumber.123) 766 0 R (lstnumber.124) 767 0 R (lstnumber.125) 768 0 R (lstnumber.126) 769 0 R (lstnumber.127) 770 0 R] -/Limits [(lstnumber.122) (lstnumber.127)] ->> endobj -1462 0 obj << -/Names [(lstnumber.128) 771 0 R (lstnumber.129) 772 0 R (lstnumber.13) 623 0 R (lstnumber.130) 773 0 R (lstnumber.131) 774 0 R (lstnumber.132) 775 0 R] -/Limits [(lstnumber.128) (lstnumber.132)] ->> endobj -1463 0 obj << -/Names [(lstnumber.133) 776 0 R (lstnumber.135) 778 0 R (lstnumber.136) 779 0 R (lstnumber.137) 780 0 R (lstnumber.138) 781 0 R (lstnumber.139) 782 0 R] -/Limits [(lstnumber.133) (lstnumber.139)] ->> endobj -1464 0 obj << -/Names [(lstnumber.14) 624 0 R (lstnumber.140) 783 0 R (lstnumber.141) 784 0 R (lstnumber.142) 785 0 R (lstnumber.143) 786 0 R (lstnumber.144) 787 0 R] -/Limits [(lstnumber.14) (lstnumber.144)] ->> endobj -1465 0 obj << -/Names [(lstnumber.145) 788 0 R (lstnumber.146) 789 0 R (lstnumber.147) 790 0 R (lstnumber.15) 625 0 R (lstnumber.150) 792 0 R (lstnumber.151) 798 0 R] -/Limits [(lstnumber.145) (lstnumber.151)] ->> endobj -1466 0 obj << -/Names [(lstnumber.152) 799 0 R (lstnumber.153) 800 0 R (lstnumber.154) 801 0 R (lstnumber.155) 802 0 R (lstnumber.156) 803 0 R (lstnumber.157) 804 0 R] -/Limits [(lstnumber.152) (lstnumber.157)] ->> endobj -1467 0 obj << -/Names [(lstnumber.158) 805 0 R (lstnumber.159) 806 0 R (lstnumber.16) 626 0 R (lstnumber.160) 807 0 R (lstnumber.161) 808 0 R (lstnumber.162) 809 0 R] -/Limits [(lstnumber.158) (lstnumber.162)] ->> endobj -1468 0 obj << -/Names [(lstnumber.163) 810 0 R (lstnumber.164) 811 0 R (lstnumber.165) 812 0 R (lstnumber.166) 813 0 R (lstnumber.167) 814 0 R (lstnumber.17) 627 0 R] -/Limits [(lstnumber.163) (lstnumber.17)] ->> endobj -1469 0 obj << -/Names [(lstnumber.170) 816 0 R (lstnumber.173) 818 0 R (lstnumber.174) 819 0 R (lstnumber.175) 820 0 R (lstnumber.176) 821 0 R (lstnumber.177) 822 0 R] -/Limits [(lstnumber.170) (lstnumber.177)] ->> endobj -1470 0 obj << -/Names [(lstnumber.178) 823 0 R (lstnumber.179) 824 0 R (lstnumber.18) 628 0 R (lstnumber.180) 825 0 R (lstnumber.181) 826 0 R (lstnumber.182) 827 0 R] -/Limits [(lstnumber.178) (lstnumber.182)] ->> endobj -1471 0 obj << -/Names [(lstnumber.183) 828 0 R (lstnumber.184) 829 0 R (lstnumber.186) 835 0 R (lstnumber.187) 836 0 R (lstnumber.188) 837 0 R (lstnumber.189) 838 0 R] -/Limits [(lstnumber.183) (lstnumber.189)] ->> endobj -1472 0 obj << -/Names [(lstnumber.19) 629 0 R (lstnumber.190) 839 0 R (lstnumber.191) 840 0 R (lstnumber.192) 841 0 R (lstnumber.193) 842 0 R (lstnumber.195) 844 0 R] -/Limits [(lstnumber.19) (lstnumber.195)] ->> endobj -1473 0 obj << -/Names [(lstnumber.196) 845 0 R (lstnumber.197) 846 0 R (lstnumber.198) 847 0 R (lstnumber.199) 848 0 R (lstnumber.20) 630 0 R (lstnumber.200) 849 0 R] -/Limits [(lstnumber.196) (lstnumber.200)] ->> endobj -1474 0 obj << -/Names [(lstnumber.201) 850 0 R (lstnumber.202) 851 0 R (lstnumber.203) 852 0 R (lstnumber.204) 853 0 R (lstnumber.205) 854 0 R (lstnumber.206) 855 0 R] -/Limits [(lstnumber.201) (lstnumber.206)] ->> endobj -1475 0 obj << -/Names [(lstnumber.207) 856 0 R (lstnumber.208) 857 0 R (lstnumber.209) 858 0 R (lstnumber.21) 631 0 R (lstnumber.210) 859 0 R (lstnumber.211) 860 0 R] -/Limits [(lstnumber.207) (lstnumber.211)] ->> endobj -1476 0 obj << -/Names [(lstnumber.212) 861 0 R (lstnumber.213) 862 0 R (lstnumber.214) 863 0 R (lstnumber.216) 865 0 R (lstnumber.217) 866 0 R (lstnumber.218) 867 0 R] -/Limits [(lstnumber.212) (lstnumber.218)] ->> endobj -1477 0 obj << -/Names [(lstnumber.22) 632 0 R (lstnumber.221) 874 0 R (lstnumber.222) 875 0 R (lstnumber.223) 876 0 R (lstnumber.224) 877 0 R (lstnumber.225) 878 0 R] -/Limits [(lstnumber.22) (lstnumber.225)] ->> endobj -1478 0 obj << -/Names [(lstnumber.226) 879 0 R (lstnumber.227) 880 0 R (lstnumber.228) 881 0 R (lstnumber.229) 882 0 R (lstnumber.23) 633 0 R (lstnumber.230) 883 0 R] -/Limits [(lstnumber.226) (lstnumber.230)] ->> endobj -1479 0 obj << -/Names [(lstnumber.231) 884 0 R (lstnumber.232) 885 0 R (lstnumber.233) 886 0 R (lstnumber.234) 887 0 R (lstnumber.235) 888 0 R (lstnumber.236) 889 0 R] -/Limits [(lstnumber.231) (lstnumber.236)] ->> endobj -1480 0 obj << -/Names [(lstnumber.237) 890 0 R (lstnumber.238) 891 0 R (lstnumber.239) 892 0 R (lstnumber.24) 634 0 R (lstnumber.240) 893 0 R (lstnumber.241) 894 0 R] -/Limits [(lstnumber.237) (lstnumber.241)] ->> endobj -1481 0 obj << -/Names [(lstnumber.242) 895 0 R (lstnumber.243) 896 0 R (lstnumber.244) 897 0 R (lstnumber.245) 898 0 R (lstnumber.247) 900 0 R (lstnumber.248) 901 0 R] -/Limits [(lstnumber.242) (lstnumber.248)] ->> endobj -1482 0 obj << -/Names [(lstnumber.249) 902 0 R (lstnumber.25) 635 0 R (lstnumber.250) 903 0 R (lstnumber.251) 904 0 R (lstnumber.252) 905 0 R (lstnumber.253) 906 0 R] -/Limits [(lstnumber.249) (lstnumber.253)] ->> endobj -1483 0 obj << -/Names [(lstnumber.254) 907 0 R (lstnumber.255) 908 0 R (lstnumber.256) 909 0 R (lstnumber.257) 910 0 R (lstnumber.258) 911 0 R (lstnumber.259) 912 0 R] -/Limits [(lstnumber.254) (lstnumber.259)] ->> endobj -1484 0 obj << -/Names [(lstnumber.26) 637 0 R (lstnumber.260) 913 0 R (lstnumber.261) 914 0 R (lstnumber.262) 915 0 R (lstnumber.263) 916 0 R (lstnumber.264) 917 0 R] -/Limits [(lstnumber.26) (lstnumber.264)] ->> endobj -1485 0 obj << -/Names [(lstnumber.265) 918 0 R (lstnumber.266) 919 0 R (lstnumber.267) 920 0 R (lstnumber.268) 921 0 R (lstnumber.269) 922 0 R (lstnumber.27) 638 0 R] -/Limits [(lstnumber.265) (lstnumber.27)] ->> endobj -1486 0 obj << -/Names [(lstnumber.270) 923 0 R (lstnumber.271) 924 0 R (lstnumber.272) 925 0 R (lstnumber.273) 926 0 R (lstnumber.274) 927 0 R (lstnumber.275) 936 0 R] -/Limits [(lstnumber.270) (lstnumber.275)] ->> endobj -1487 0 obj << -/Names [(lstnumber.276) 937 0 R (lstnumber.277) 938 0 R (lstnumber.28) 639 0 R (lstnumber.286) 948 0 R (lstnumber.287) 949 0 R (lstnumber.289) 951 0 R] -/Limits [(lstnumber.276) (lstnumber.289)] ->> endobj -1488 0 obj << -/Names [(lstnumber.29) 640 0 R (lstnumber.290) 952 0 R (lstnumber.296) 959 0 R (lstnumber.297) 960 0 R (lstnumber.298) 961 0 R (lstnumber.30) 641 0 R] -/Limits [(lstnumber.29) (lstnumber.30)] ->> endobj -1489 0 obj << -/Names [(lstnumber.309) 978 0 R (lstnumber.31) 642 0 R (lstnumber.310) 979 0 R (lstnumber.311) 980 0 R (lstnumber.312) 981 0 R (lstnumber.313) 982 0 R] -/Limits [(lstnumber.309) (lstnumber.313)] ->> endobj -1490 0 obj << -/Names [(lstnumber.314) 983 0 R (lstnumber.315) 984 0 R (lstnumber.32) 643 0 R (lstnumber.320) 994 0 R (lstnumber.321) 995 0 R (lstnumber.322) 996 0 R] -/Limits [(lstnumber.314) (lstnumber.322)] ->> endobj -1491 0 obj << -/Names [(lstnumber.323) 997 0 R (lstnumber.325) 999 0 R (lstnumber.326) 1000 0 R (lstnumber.327) 1001 0 R (lstnumber.328) 1002 0 R (lstnumber.329) 1003 0 R] -/Limits [(lstnumber.323) (lstnumber.329)] ->> endobj -1492 0 obj << -/Names [(lstnumber.33) 644 0 R (lstnumber.332) 1005 0 R (lstnumber.333) 1006 0 R (lstnumber.334) 1007 0 R (lstnumber.335) 1008 0 R (lstnumber.336) 1009 0 R] -/Limits [(lstnumber.33) (lstnumber.336)] ->> endobj -1493 0 obj << -/Names [(lstnumber.337) 1010 0 R (lstnumber.338) 1020 0 R (lstnumber.339) 1021 0 R (lstnumber.34) 645 0 R (lstnumber.340) 1022 0 R (lstnumber.341) 1023 0 R] -/Limits [(lstnumber.337) (lstnumber.341)] ->> endobj -1494 0 obj << -/Names [(lstnumber.342) 1024 0 R (lstnumber.343) 1025 0 R (lstnumber.344) 1026 0 R (lstnumber.345) 1027 0 R (lstnumber.347) 1029 0 R (lstnumber.348) 1030 0 R] -/Limits [(lstnumber.342) (lstnumber.348)] ->> endobj -1495 0 obj << -/Names [(lstnumber.349) 1031 0 R (lstnumber.35) 646 0 R (lstnumber.350) 1032 0 R (lstnumber.351) 1033 0 R (lstnumber.352) 1034 0 R (lstnumber.353) 1035 0 R] -/Limits [(lstnumber.349) (lstnumber.353)] ->> endobj -1496 0 obj << -/Names [(lstnumber.36) 647 0 R (lstnumber.374) 1068 0 R (lstnumber.375) 1069 0 R (lstnumber.376) 1070 0 R (lstnumber.377) 1071 0 R (lstnumber.388) 1090 0 R] -/Limits [(lstnumber.36) (lstnumber.388)] ->> endobj -1497 0 obj << -/Names [(lstnumber.390) 1092 0 R (lstnumber.393) 1098 0 R (lstnumber.395) 1100 0 R (lstnumber.396) 1101 0 R (lstnumber.397) 1102 0 R (lstnumber.398) 1103 0 R] -/Limits [(lstnumber.390) (lstnumber.398)] ->> endobj -1498 0 obj << -/Names [(lstnumber.400) 1105 0 R (lstnumber.402) 1107 0 R (lstnumber.404) 1109 0 R (lstnumber.408) 1115 0 R (lstnumber.41) 663 0 R (lstnumber.410) 1117 0 R] -/Limits [(lstnumber.400) (lstnumber.410)] ->> endobj -1499 0 obj << -/Names [(lstnumber.412) 1119 0 R (lstnumber.416) 1127 0 R (lstnumber.417) 1128 0 R (lstnumber.418) 1129 0 R (lstnumber.419) 1130 0 R (lstnumber.420) 1131 0 R] -/Limits [(lstnumber.412) (lstnumber.420)] ->> endobj -1500 0 obj << -/Names [(lstnumber.421) 1132 0 R (lstnumber.422) 1133 0 R (lstnumber.423) 1134 0 R (lstnumber.424) 1135 0 R (lstnumber.426) 1137 0 R (lstnumber.427) 1138 0 R] -/Limits [(lstnumber.421) (lstnumber.427)] ->> endobj -1501 0 obj << -/Names [(lstnumber.428) 1139 0 R (lstnumber.429) 1140 0 R (lstnumber.43) 665 0 R (lstnumber.431) 1142 0 R (lstnumber.432) 1143 0 R (lstnumber.433) 1144 0 R] -/Limits [(lstnumber.428) (lstnumber.433)] ->> endobj -1502 0 obj << -/Names [(lstnumber.434) 1145 0 R (lstnumber.435) 1146 0 R (lstnumber.436) 1147 0 R (lstnumber.437) 1148 0 R (lstnumber.438) 1149 0 R (lstnumber.439) 1150 0 R] -/Limits [(lstnumber.434) (lstnumber.439)] ->> endobj -1503 0 obj << -/Names [(lstnumber.440) 1151 0 R (lstnumber.441) 1152 0 R (lstnumber.442) 1153 0 R (lstnumber.443) 1154 0 R (lstnumber.444) 1162 0 R (lstnumber.445) 1163 0 R] -/Limits [(lstnumber.440) (lstnumber.445)] ->> endobj -1504 0 obj << -/Names [(lstnumber.446) 1164 0 R (lstnumber.447) 1165 0 R (lstnumber.448) 1166 0 R (lstnumber.449) 1167 0 R (lstnumber.450) 1168 0 R (lstnumber.451) 1169 0 R] -/Limits [(lstnumber.446) (lstnumber.451)] ->> endobj -1505 0 obj << -/Names [(lstnumber.452) 1170 0 R (lstnumber.453) 1171 0 R (lstnumber.454) 1172 0 R (lstnumber.455) 1173 0 R (lstnumber.456) 1174 0 R (lstnumber.457) 1175 0 R] -/Limits [(lstnumber.452) (lstnumber.457)] ->> endobj -1506 0 obj << -/Names [(lstnumber.458) 1176 0 R (lstnumber.459) 1177 0 R (lstnumber.46) 675 0 R (lstnumber.460) 1178 0 R (lstnumber.461) 1179 0 R (lstnumber.462) 1180 0 R] -/Limits [(lstnumber.458) (lstnumber.462)] ->> endobj -1507 0 obj << -/Names [(lstnumber.463) 1181 0 R (lstnumber.464) 1182 0 R (lstnumber.465) 1183 0 R (lstnumber.466) 1184 0 R (lstnumber.468) 1186 0 R (lstnumber.469) 1187 0 R] -/Limits [(lstnumber.463) (lstnumber.469)] ->> endobj -1508 0 obj << -/Names [(lstnumber.47) 676 0 R (lstnumber.470) 1188 0 R (lstnumber.473) 1190 0 R (lstnumber.474) 1191 0 R (lstnumber.475) 1192 0 R (lstnumber.476) 1193 0 R] -/Limits [(lstnumber.47) (lstnumber.476)] ->> endobj -1509 0 obj << -/Names [(lstnumber.477) 1194 0 R (lstnumber.478) 1195 0 R (lstnumber.479) 1196 0 R (lstnumber.486) 1208 0 R (lstnumber.487) 1209 0 R (lstnumber.488) 1210 0 R] -/Limits [(lstnumber.477) (lstnumber.488)] ->> endobj -1510 0 obj << -/Names [(lstnumber.489) 1211 0 R (lstnumber.490) 1212 0 R (lstnumber.491) 1213 0 R (lstnumber.492) 1214 0 R (lstnumber.493) 1215 0 R (lstnumber.494) 1216 0 R] -/Limits [(lstnumber.489) (lstnumber.494)] ->> endobj -1511 0 obj << -/Names [(lstnumber.495) 1217 0 R (lstnumber.496) 1218 0 R (lstnumber.497) 1219 0 R (lstnumber.498) 1220 0 R (lstnumber.499) 1221 0 R (lstnumber.5) 611 0 R] -/Limits [(lstnumber.495) (lstnumber.5)] ->> endobj -1512 0 obj << -/Names [(lstnumber.500) 1222 0 R (lstnumber.501) 1223 0 R (lstnumber.502) 1224 0 R (lstnumber.503) 1225 0 R (lstnumber.504) 1226 0 R (lstnumber.505) 1227 0 R] -/Limits [(lstnumber.500) (lstnumber.505)] ->> endobj -1513 0 obj << -/Names [(lstnumber.506) 1228 0 R (lstnumber.507) 1229 0 R (lstnumber.508) 1230 0 R (lstnumber.509) 1231 0 R (lstnumber.51) 679 0 R (lstnumber.510) 1232 0 R] -/Limits [(lstnumber.506) (lstnumber.510)] ->> endobj -1514 0 obj << -/Names [(lstnumber.511) 1233 0 R (lstnumber.512) 1234 0 R (lstnumber.513) 1235 0 R (lstnumber.514) 1236 0 R (lstnumber.515) 1237 0 R (lstnumber.516) 1238 0 R] -/Limits [(lstnumber.511) (lstnumber.516)] ->> endobj -1515 0 obj << -/Names [(lstnumber.517) 1239 0 R (lstnumber.522) 1248 0 R (lstnumber.523) 1249 0 R (lstnumber.524) 1250 0 R (lstnumber.525) 1251 0 R (lstnumber.526) 1252 0 R] -/Limits [(lstnumber.517) (lstnumber.526)] ->> endobj -1516 0 obj << -/Names [(lstnumber.527) 1253 0 R (lstnumber.528) 1254 0 R (lstnumber.529) 1255 0 R (lstnumber.530) 1256 0 R (lstnumber.531) 1257 0 R (lstnumber.532) 1258 0 R] -/Limits [(lstnumber.527) (lstnumber.532)] ->> endobj -1517 0 obj << -/Names [(lstnumber.533) 1259 0 R (lstnumber.535) 1261 0 R (lstnumber.536) 1262 0 R (lstnumber.537) 1263 0 R (lstnumber.54) 681 0 R (lstnumber.560) 1299 0 R] -/Limits [(lstnumber.533) (lstnumber.560)] ->> endobj -1518 0 obj << -/Names [(lstnumber.561) 1300 0 R (lstnumber.562) 1301 0 R (lstnumber.563) 1302 0 R (lstnumber.564) 1303 0 R (lstnumber.565) 1304 0 R (lstnumber.566) 1305 0 R] -/Limits [(lstnumber.561) (lstnumber.566)] ->> endobj -1519 0 obj << -/Names [(lstnumber.569) 1307 0 R (lstnumber.570) 1308 0 R (lstnumber.571) 1309 0 R (lstnumber.572) 1310 0 R (lstnumber.573) 1311 0 R (lstnumber.574) 1312 0 R] -/Limits [(lstnumber.569) (lstnumber.574)] ->> endobj -1520 0 obj << -/Names [(lstnumber.575) 1313 0 R (lstnumber.577) 1315 0 R (lstnumber.579) 1317 0 R (lstnumber.58) 684 0 R (lstnumber.581) 1319 0 R (lstnumber.582) 1320 0 R] -/Limits [(lstnumber.575) (lstnumber.582)] ->> endobj -1521 0 obj << -/Names [(lstnumber.583) 1321 0 R (lstnumber.584) 1322 0 R (lstnumber.591) 1328 0 R (lstnumber.592) 1329 0 R (lstnumber.593) 1330 0 R (lstnumber.594) 1331 0 R] -/Limits [(lstnumber.583) (lstnumber.594)] ->> endobj -1522 0 obj << -/Names [(lstnumber.595) 1332 0 R (lstnumber.596) 1333 0 R (lstnumber.597) 1334 0 R (lstnumber.598) 1335 0 R (lstnumber.599) 1336 0 R (lstnumber.6) 615 0 R] -/Limits [(lstnumber.595) (lstnumber.6)] ->> endobj -1523 0 obj << -/Names [(lstnumber.600) 1337 0 R (lstnumber.601) 1338 0 R (lstnumber.602) 1339 0 R (lstnumber.605) 1341 0 R (lstnumber.608) 1343 0 R (lstnumber.610) 1351 0 R] -/Limits [(lstnumber.600) (lstnumber.610)] ->> endobj -1524 0 obj << -/Names [(lstnumber.613) 1353 0 R (lstnumber.62) 695 0 R (lstnumber.65) 698 0 R (lstnumber.69) 702 0 R (lstnumber.7) 616 0 R (lstnumber.70) 703 0 R] -/Limits [(lstnumber.613) (lstnumber.70)] ->> endobj -1525 0 obj << -/Names [(lstnumber.73) 706 0 R (lstnumber.74) 707 0 R (lstnumber.77) 710 0 R (lstnumber.8) 617 0 R (lstnumber.80) 713 0 R (lstnumber.81) 714 0 R] -/Limits [(lstnumber.73) (lstnumber.81)] ->> endobj -1526 0 obj << -/Names [(lstnumber.82) 715 0 R (lstnumber.83) 716 0 R (lstnumber.86) 726 0 R (lstnumber.87) 727 0 R (lstnumber.88) 728 0 R (lstnumber.89) 729 0 R] -/Limits [(lstnumber.82) (lstnumber.89)] ->> endobj -1527 0 obj << -/Names [(lstnumber.9) 619 0 R (lstnumber.90) 730 0 R (lstnumber.91) 731 0 R (lstnumber.94) 733 0 R (lstnumber.95) 734 0 R (lstnumber.98) 736 0 R] -/Limits [(lstnumber.9) (lstnumber.98)] ->> endobj -1528 0 obj << -/Names [(lstnumber.99) 737 0 R (page.1) 475 0 R (page.10) 742 0 R (page.11) 758 0 R (page.12) 797 0 R (page.13) 833 0 R] -/Limits [(lstnumber.99) (page.13)] ->> endobj -1529 0 obj << -/Names [(page.14) 872 0 R (page.15) 935 0 R (page.16) 946 0 R (page.17) 957 0 R (page.18) 968 0 R (page.19) 975 0 R] -/Limits [(page.14) (page.19)] ->> endobj -1530 0 obj << -/Names [(page.2) 534 0 R (page.20) 992 0 R (page.21) 1019 0 R (page.22) 1043 0 R (page.23) 1051 0 R (page.24) 1058 0 R] -/Limits [(page.2) (page.24)] ->> endobj -1531 0 obj << -/Names [(page.25) 1065 0 R (page.26) 1076 0 R (page.27) 1082 0 R (page.28) 1088 0 R (page.29) 1096 0 R (page.3) 586 0 R] -/Limits [(page.25) (page.3)] ->> endobj -1532 0 obj << -/Names [(page.30) 1113 0 R (page.31) 1125 0 R (page.32) 1161 0 R (page.33) 1202 0 R (page.34) 1206 0 R (page.35) 1244 0 R] -/Limits [(page.30) (page.35)] ->> endobj -1533 0 obj << -/Names [(page.36) 1268 0 R (page.37) 1280 0 R (page.38) 1291 0 R (page.39) 1296 0 R (page.4) 604 0 R (page.40) 1326 0 R] -/Limits [(page.36) (page.40)] ->> endobj -1534 0 obj << -/Names [(page.41) 1349 0 R (page.42) 1358 0 R (page.43) 1364 0 R (page.44) 1369 0 R (page.45) 1373 0 R (page.46) 1377 0 R] -/Limits [(page.41) (page.46)] ->> endobj -1535 0 obj << -/Names [(page.5) 609 0 R (page.6) 661 0 R (page.7) 673 0 R (page.8) 690 0 R (page.9) 724 0 R (section*.1) 484 0 R] -/Limits [(page.5) (section*.1)] ->> endobj -1536 0 obj << -/Names [(section*.383) 1083 0 R (section*.384) 1084 0 R (section*.543) 1269 0 R (section*.544) 1270 0 R (section*.545) 1271 0 R (section*.546) 1272 0 R] -/Limits [(section*.383) (section*.546)] ->> endobj -1537 0 obj << -/Names [(section*.547) 1281 0 R (section*.56) 682 0 R (section*.59) 691 0 R (section*.78) 711 0 R (section.2) 5 0 R (section.278) 89 0 R] -/Limits [(section*.547) (section.278)] ->> endobj -1538 0 obj << -/Names [(section.283) 109 0 R (section.302) 145 0 R (section.361) 205 0 R (section.38) 13 0 R (section.413) 293 0 R (section.540) 333 0 R] -/Limits [(section.283) (section.540)] ->> endobj -1539 0 obj << -/Names [(section.551) 357 0 R (section.555) 373 0 R (section.586) 397 0 R (section.615) 429 0 R (subsection.100) 53 0 R (subsection.105) 57 0 R] -/Limits [(section.551) (subsection.105)] ->> endobj -1540 0 obj << -/Names [(subsection.115) 69 0 R (subsection.148) 73 0 R (subsection.168) 77 0 R (subsection.171) 81 0 R (subsection.219) 85 0 R (subsection.279) 93 0 R] -/Limits [(subsection.115) (subsection.279)] ->> endobj -1541 0 obj << -/Names [(subsection.280) 97 0 R (subsection.281) 101 0 R (subsection.282) 105 0 R (subsection.284) 113 0 R (subsection.291) 117 0 R (subsection.292) 121 0 R] -/Limits [(subsection.280) (subsection.292)] ->> endobj -1542 0 obj << -/Names [(subsection.293) 125 0 R (subsection.294) 129 0 R (subsection.299) 133 0 R (subsection.3) 9 0 R (subsection.300) 137 0 R (subsection.301) 141 0 R] -/Limits [(subsection.293) (subsection.301)] ->> endobj -1543 0 obj << -/Names [(subsection.303) 149 0 R (subsection.316) 165 0 R (subsection.356) 189 0 R (subsection.357) 193 0 R (subsection.358) 197 0 R (subsection.359) 201 0 R] -/Limits [(subsection.303) (subsection.359)] ->> endobj -1544 0 obj << -/Names [(subsection.362) 209 0 R (subsection.365) 221 0 R (subsection.378) 253 0 R (subsection.379) 257 0 R (subsection.380) 261 0 R (subsection.381) 265 0 R] -/Limits [(subsection.362) (subsection.381)] ->> endobj -1545 0 obj << -/Names [(subsection.39) 17 0 R (subsection.414) 297 0 R (subsection.471) 301 0 R (subsection.48) 25 0 R (subsection.480) 305 0 R (subsection.481) 309 0 R] -/Limits [(subsection.39) (subsection.481)] ->> endobj -1546 0 obj << -/Names [(subsection.482) 313 0 R (subsection.483) 317 0 R (subsection.484) 321 0 R (subsection.518) 325 0 R (subsection.539) 329 0 R (subsection.541) 337 0 R] -/Limits [(subsection.482) (subsection.541)] ->> endobj -1547 0 obj << -/Names [(subsection.549) 349 0 R (subsection.550) 353 0 R (subsection.552) 361 0 R (subsection.553) 365 0 R (subsection.554) 369 0 R (subsection.556) 377 0 R] -/Limits [(subsection.549) (subsection.556)] ->> endobj -1548 0 obj << -/Names [(subsection.567) 389 0 R (subsection.585) 393 0 R (subsection.587) 401 0 R (subsection.588) 405 0 R (subsection.589) 409 0 R (subsection.603) 413 0 R] -/Limits [(subsection.567) (subsection.603)] ->> endobj -1549 0 obj << -/Names [(subsection.606) 417 0 R (subsection.611) 421 0 R (subsection.614) 425 0 R (subsection.617) 437 0 R (subsection.618) 441 0 R (subsection.620) 449 0 R] -/Limits [(subsection.606) (subsection.620)] ->> endobj -1550 0 obj << -/Names [(subsection.621) 453 0 R (subsection.84) 41 0 R (subsection.92) 45 0 R (subsection.96) 49 0 R (subsubsection.106) 61 0 R (subsubsection.114) 65 0 R] -/Limits [(subsection.621) (subsubsection.114)] ->> endobj -1551 0 obj << -/Names [(subsubsection.305) 153 0 R (subsubsection.306) 157 0 R (subsubsection.307) 161 0 R (subsubsection.317) 169 0 R (subsubsection.318) 173 0 R (subsubsection.330) 177 0 R] -/Limits [(subsubsection.305) (subsubsection.330)] ->> endobj -1552 0 obj << -/Names [(subsubsection.354) 181 0 R (subsubsection.355) 185 0 R (subsubsection.363) 213 0 R (subsubsection.364) 217 0 R (subsubsection.366) 225 0 R (subsubsection.367) 229 0 R] -/Limits [(subsubsection.354) (subsubsection.367)] ->> endobj -1553 0 obj << -/Names [(subsubsection.368) 233 0 R (subsubsection.369) 237 0 R (subsubsection.370) 241 0 R (subsubsection.371) 245 0 R (subsubsection.372) 249 0 R (subsubsection.382) 269 0 R] -/Limits [(subsubsection.368) (subsubsection.382)] ->> endobj -1554 0 obj << -/Names [(subsubsection.385) 273 0 R (subsubsection.386) 277 0 R (subsubsection.391) 281 0 R (subsubsection.405) 285 0 R (subsubsection.406) 289 0 R (subsubsection.44) 21 0 R] -/Limits [(subsubsection.385) (subsubsection.44)] ->> endobj -1555 0 obj << -/Names [(subsubsection.49) 29 0 R (subsubsection.52) 33 0 R (subsubsection.542) 341 0 R (subsubsection.548) 345 0 R (subsubsection.55) 37 0 R (subsubsection.557) 381 0 R] -/Limits [(subsubsection.49) (subsubsection.557)] ->> endobj -1556 0 obj << -/Names [(subsubsection.558) 385 0 R (subsubsection.619) 445 0 R] -/Limits [(subsubsection.558) (subsubsection.619)] ->> endobj -1557 0 obj << -/Kids [1445 0 R 1446 0 R 1447 0 R 1448 0 R 1449 0 R 1450 0 R] -/Limits [(Doc-Start) (lstlisting.373)] ->> endobj -1558 0 obj << -/Kids [1451 0 R 1452 0 R 1453 0 R 1454 0 R 1455 0 R 1456 0 R] -/Limits [(lstlisting.387) (lstlisting.612)] ->> endobj -1559 0 obj << -/Kids [1457 0 R 1458 0 R 1459 0 R 1460 0 R 1461 0 R 1462 0 R] -/Limits [(lstlisting.64) (lstnumber.132)] ->> endobj -1560 0 obj << -/Kids [1463 0 R 1464 0 R 1465 0 R 1466 0 R 1467 0 R 1468 0 R] -/Limits [(lstnumber.133) (lstnumber.17)] ->> endobj -1561 0 obj << -/Kids [1469 0 R 1470 0 R 1471 0 R 1472 0 R 1473 0 R 1474 0 R] -/Limits [(lstnumber.170) (lstnumber.206)] ->> endobj -1562 0 obj << -/Kids [1475 0 R 1476 0 R 1477 0 R 1478 0 R 1479 0 R 1480 0 R] -/Limits [(lstnumber.207) (lstnumber.241)] ->> endobj -1563 0 obj << -/Kids [1481 0 R 1482 0 R 1483 0 R 1484 0 R 1485 0 R 1486 0 R] -/Limits [(lstnumber.242) (lstnumber.275)] ->> endobj -1564 0 obj << -/Kids [1487 0 R 1488 0 R 1489 0 R 1490 0 R 1491 0 R 1492 0 R] -/Limits [(lstnumber.276) (lstnumber.336)] ->> endobj -1565 0 obj << -/Kids [1493 0 R 1494 0 R 1495 0 R 1496 0 R 1497 0 R 1498 0 R] -/Limits [(lstnumber.337) (lstnumber.410)] ->> endobj -1566 0 obj << -/Kids [1499 0 R 1500 0 R 1501 0 R 1502 0 R 1503 0 R 1504 0 R] -/Limits [(lstnumber.412) (lstnumber.451)] ->> endobj -1567 0 obj << -/Kids [1505 0 R 1506 0 R 1507 0 R 1508 0 R 1509 0 R 1510 0 R] -/Limits [(lstnumber.452) (lstnumber.494)] ->> endobj -1568 0 obj << -/Kids [1511 0 R 1512 0 R 1513 0 R 1514 0 R 1515 0 R 1516 0 R] -/Limits [(lstnumber.495) (lstnumber.532)] ->> endobj -1569 0 obj << -/Kids [1517 0 R 1518 0 R 1519 0 R 1520 0 R 1521 0 R 1522 0 R] -/Limits [(lstnumber.533) (lstnumber.6)] ->> endobj -1570 0 obj << -/Kids [1523 0 R 1524 0 R 1525 0 R 1526 0 R 1527 0 R 1528 0 R] -/Limits [(lstnumber.600) (page.13)] ->> endobj -1571 0 obj << -/Kids [1529 0 R 1530 0 R 1531 0 R 1532 0 R 1533 0 R 1534 0 R] -/Limits [(page.14) (page.46)] ->> endobj -1572 0 obj << -/Kids [1535 0 R 1536 0 R 1537 0 R 1538 0 R 1539 0 R 1540 0 R] -/Limits [(page.5) (subsection.279)] ->> endobj -1573 0 obj << -/Kids [1541 0 R 1542 0 R 1543 0 R 1544 0 R 1545 0 R 1546 0 R] -/Limits [(subsection.280) (subsection.541)] ->> endobj -1574 0 obj << -/Kids [1547 0 R 1548 0 R 1549 0 R 1550 0 R 1551 0 R 1552 0 R] -/Limits [(subsection.549) (subsubsection.367)] ->> endobj -1575 0 obj << -/Kids [1553 0 R 1554 0 R 1555 0 R 1556 0 R] -/Limits [(subsubsection.368) (subsubsection.619)] ->> endobj -1576 0 obj << -/Kids [1557 0 R 1558 0 R 1559 0 R 1560 0 R 1561 0 R 1562 0 R] -/Limits [(Doc-Start) (lstnumber.241)] ->> endobj -1577 0 obj << -/Kids [1563 0 R 1564 0 R 1565 0 R 1566 0 R 1567 0 R 1568 0 R] -/Limits [(lstnumber.242) (lstnumber.532)] ->> endobj -1578 0 obj << -/Kids [1569 0 R 1570 0 R 1571 0 R 1572 0 R 1573 0 R 1574 0 R] -/Limits [(lstnumber.533) (subsubsection.367)] ->> endobj -1579 0 obj << -/Kids [1575 0 R] -/Limits [(subsubsection.368) (subsubsection.619)] ->> endobj -1580 0 obj << -/Kids [1576 0 R 1577 0 R 1578 0 R 1579 0 R] -/Limits [(Doc-Start) (subsubsection.619)] ->> endobj -1581 0 obj << -/Dests 1580 0 R ->> endobj -1582 0 obj << -/Type /Catalog -/Pages 1443 0 R -/Outlines 1444 0 R -/Names 1581 0 R -/PageMode/UseOutlines -/OpenAction 456 0 R ->> endobj -1583 0 obj << -/Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.10)/Keywords() -/CreationDate (D:20100630095555-07'00') -/ModDate (D:20100630095555-07'00') -/Trapped /False -/PTEX.Fullbanner (This is MiKTeX-pdfTeX 2.8.3512 (1.40.10)) ->> endobj -xref -0 1584 -0000000001 65535 f -0000000002 00000 f -0000000003 00000 f -0000000000 00000 f -0000000015 00000 n -0000083484 00000 n -0000594227 00000 n -0000000060 00000 n -0000000109 00000 n -0000083539 00000 n -0000594168 00000 n -0000000157 00000 n -0000000183 00000 n -0000088834 00000 n -0000594042 00000 n -0000000230 00000 n -0000000258 00000 n -0000088890 00000 n -0000593931 00000 n -0000000308 00000 n -0000000340 00000 n -0000089173 00000 n -0000593870 00000 n -0000000393 00000 n -0000000427 00000 n -0000093205 00000 n -0000593746 00000 n -0000000477 00000 n -0000000510 00000 n -0000093260 00000 n -0000593672 00000 n -0000000563 00000 n -0000000603 00000 n -0000093430 00000 n -0000593585 00000 n -0000000656 00000 n -0000000701 00000 n -0000093600 00000 n -0000593511 00000 n -0000000754 00000 n -0000000810 00000 n -0000103343 00000 n -0000593424 00000 n -0000000860 00000 n -0000000896 00000 n -0000103797 00000 n -0000593337 00000 n -0000000946 00000 n -0000000971 00000 n -0000104021 00000 n -0000593250 00000 n -0000001021 00000 n -0000001046 00000 n -0000108051 00000 n -0000593163 00000 n -0000001097 00000 n -0000001132 00000 n -0000108335 00000 n -0000593039 00000 n -0000001183 00000 n -0000001213 00000 n -0000108391 00000 n -0000592965 00000 n -0000001267 00000 n -0000001292 00000 n -0000108844 00000 n -0000592891 00000 n -0000001346 00000 n -0000001371 00000 n -0000111752 00000 n -0000592804 00000 n -0000001422 00000 n -0000001460 00000 n -0000113629 00000 n -0000592717 00000 n -0000001511 00000 n -0000001559 00000 n -0000118001 00000 n -0000592630 00000 n -0000001610 00000 n -0000001658 00000 n -0000118171 00000 n -0000592543 00000 n -0000001709 00000 n -0000001763 00000 n -0000123808 00000 n -0000592469 00000 n -0000001814 00000 n -0000001861 00000 n -0000132921 00000 n -0000592341 00000 n -0000001909 00000 n -0000001948 00000 n -0000132977 00000 n -0000592267 00000 n -0000001999 00000 n -0000002061 00000 n -0000136624 00000 n -0000592179 00000 n -0000002112 00000 n -0000002163 00000 n -0000136676 00000 n -0000592088 00000 n -0000002215 00000 n -0000002257 00000 n -0000136733 00000 n -0000592010 00000 n -0000002309 00000 n -0000002362 00000 n -0000136790 00000 n -0000591878 00000 n -0000002411 00000 n -0000002450 00000 n -0000136846 00000 n -0000591799 00000 n -0000002502 00000 n -0000002556 00000 n -0000137245 00000 n -0000591706 00000 n -0000002608 00000 n -0000002651 00000 n -0000137302 00000 n -0000591613 00000 n -0000002703 00000 n -0000002727 00000 n -0000140566 00000 n -0000591520 00000 n -0000002779 00000 n -0000002815 00000 n -0000140619 00000 n -0000591427 00000 n -0000002867 00000 n -0000002913 00000 n -0000140904 00000 n -0000591334 00000 n -0000002965 00000 n -0000003005 00000 n -0000140961 00000 n -0000591241 00000 n -0000003057 00000 n -0000003099 00000 n -0000141018 00000 n -0000591162 00000 n -0000003151 00000 n -0000003185 00000 n -0000163222 00000 n -0000591029 00000 n -0000003234 00000 n -0000003270 00000 n -0000163279 00000 n -0000590911 00000 n -0000003322 00000 n -0000003375 00000 n -0000167211 00000 n -0000590832 00000 n -0000003430 00000 n -0000003463 00000 n -0000167267 00000 n -0000590739 00000 n -0000003518 00000 n -0000003607 00000 n -0000167324 00000 n -0000590660 00000 n -0000003662 00000 n -0000003722 00000 n -0000171753 00000 n -0000590528 00000 n -0000003774 00000 n -0000003830 00000 n -0000171806 00000 n -0000590449 00000 n -0000003885 00000 n -0000003950 00000 n -0000171863 00000 n -0000590356 00000 n -0000004005 00000 n -0000004049 00000 n -0000172549 00000 n -0000590263 00000 n -0000004104 00000 n -0000004158 00000 n -0000177711 00000 n -0000590170 00000 n -0000004213 00000 n -0000004260 00000 n -0000177769 00000 n -0000590091 00000 n -0000004315 00000 n -0000004348 00000 n -0000181574 00000 n -0000589998 00000 n -0000004400 00000 n -0000004437 00000 n -0000181628 00000 n -0000589905 00000 n -0000004489 00000 n -0000004515 00000 n -0000181686 00000 n -0000589812 00000 n -0000004567 00000 n -0000004597 00000 n -0000181744 00000 n -0000589733 00000 n -0000004649 00000 n -0000004689 00000 n -0000181802 00000 n -0000589600 00000 n -0000004738 00000 n -0000004783 00000 n -0000209692 00000 n -0000589482 00000 n -0000004835 00000 n -0000004868 00000 n -0000209749 00000 n -0000589403 00000 n -0000004923 00000 n -0000004970 00000 n -0000214003 00000 n -0000589324 00000 n -0000005025 00000 n -0000005071 00000 n -0000214057 00000 n -0000589192 00000 n -0000005123 00000 n -0000005168 00000 n -0000214113 00000 n -0000589113 00000 n -0000005223 00000 n -0000005265 00000 n -0000214171 00000 n -0000589020 00000 n -0000005320 00000 n -0000005370 00000 n -0000214229 00000 n -0000588927 00000 n -0000005425 00000 n -0000005471 00000 n -0000218274 00000 n -0000588834 00000 n -0000005526 00000 n -0000005573 00000 n -0000218328 00000 n -0000588741 00000 n -0000005628 00000 n -0000005659 00000 n -0000218386 00000 n -0000588648 00000 n -0000005714 00000 n -0000005747 00000 n -0000218444 00000 n -0000588569 00000 n -0000005802 00000 n -0000005842 00000 n -0000221568 00000 n -0000588476 00000 n -0000005894 00000 n -0000005933 00000 n -0000221622 00000 n -0000588383 00000 n -0000005985 00000 n -0000006021 00000 n -0000225201 00000 n -0000588290 00000 n -0000006073 00000 n -0000006131 00000 n -0000225255 00000 n -0000588172 00000 n -0000006183 00000 n -0000006227 00000 n -0000225313 00000 n -0000588093 00000 n -0000006282 00000 n -0000006345 00000 n -0000229364 00000 n -0000588000 00000 n -0000006400 00000 n -0000006446 00000 n -0000229418 00000 n -0000587907 00000 n -0000006501 00000 n -0000006541 00000 n -0000229712 00000 n -0000587814 00000 n -0000006596 00000 n -0000006637 00000 n -0000234429 00000 n -0000587721 00000 n -0000006692 00000 n -0000006720 00000 n -0000238118 00000 n -0000587642 00000 n -0000006775 00000 n -0000006821 00000 n -0000238525 00000 n -0000587509 00000 n -0000006870 00000 n -0000006915 00000 n -0000238583 00000 n -0000587430 00000 n -0000006967 00000 n -0000007003 00000 n -0000248919 00000 n -0000587337 00000 n -0000007055 00000 n -0000007095 00000 n -0000249448 00000 n -0000587244 00000 n -0000007147 00000 n -0000007191 00000 n -0000253480 00000 n -0000587151 00000 n -0000007243 00000 n -0000007277 00000 n -0000253538 00000 n -0000587058 00000 n -0000007329 00000 n -0000007378 00000 n -0000253596 00000 n -0000586965 00000 n -0000007430 00000 n -0000007467 00000 n -0000256479 00000 n -0000586872 00000 n -0000007519 00000 n -0000007580 00000 n -0000258477 00000 n -0000586779 00000 n -0000007632 00000 n -0000007670 00000 n -0000263349 00000 n -0000586700 00000 n -0000007722 00000 n -0000007778 00000 n -0000266087 00000 n -0000586567 00000 n -0000007827 00000 n -0000007880 00000 n -0000266145 00000 n -0000586449 00000 n -0000007932 00000 n -0000007971 00000 n -0000266203 00000 n -0000586370 00000 n -0000008026 00000 n -0000008063 00000 n -0000271173 00000 n -0000586291 00000 n -0000008118 00000 n -0000008167 00000 n -0000271231 00000 n -0000586198 00000 n -0000008219 00000 n -0000008263 00000 n -0000271289 00000 n -0000586119 00000 n -0000008315 00000 n -0000008357 00000 n -0000271347 00000 n -0000585986 00000 n -0000008406 00000 n -0000008438 00000 n -0000274119 00000 n -0000585907 00000 n -0000008490 00000 n -0000008522 00000 n -0000274173 00000 n -0000585814 00000 n -0000008574 00000 n -0000008606 00000 n -0000274231 00000 n -0000585735 00000 n -0000008658 00000 n -0000008702 00000 n -0000274289 00000 n -0000585602 00000 n -0000008751 00000 n -0000008786 00000 n -0000274346 00000 n -0000585484 00000 n -0000008838 00000 n -0000008866 00000 n -0000274404 00000 n -0000585405 00000 n -0000008921 00000 n -0000008948 00000 n -0000278097 00000 n -0000585326 00000 n -0000009003 00000 n -0000009046 00000 n -0000278619 00000 n -0000585233 00000 n -0000009098 00000 n -0000009150 00000 n -0000279679 00000 n -0000585154 00000 n -0000009202 00000 n -0000009240 00000 n -0000282509 00000 n -0000585021 00000 n -0000009289 00000 n -0000009321 00000 n -0000282563 00000 n -0000584942 00000 n -0000009373 00000 n -0000009407 00000 n -0000282621 00000 n -0000584849 00000 n -0000009459 00000 n -0000009501 00000 n -0000282679 00000 n -0000584756 00000 n -0000009553 00000 n -0000009582 00000 n -0000283503 00000 n -0000584663 00000 n -0000009634 00000 n -0000009662 00000 n -0000283679 00000 n -0000584570 00000 n -0000009714 00000 n -0000009758 00000 n -0000287424 00000 n -0000584477 00000 n -0000009810 00000 n -0000009856 00000 n -0000287600 00000 n -0000584398 00000 n -0000009908 00000 n -0000009953 00000 n -0000287658 00000 n -0000584304 00000 n -0000010002 00000 n -0000010030 00000 n -0000287716 00000 n -0000584185 00000 n -0000010080 00000 n -0000010108 00000 n -0000287773 00000 n -0000584106 00000 n -0000010160 00000 n -0000010199 00000 n -0000291003 00000 n -0000583974 00000 n -0000010251 00000 n -0000010309 00000 n -0000294167 00000 n -0000583909 00000 n -0000010364 00000 n -0000010409 00000 n -0000294225 00000 n -0000583816 00000 n -0000010461 00000 n -0000010526 00000 n -0000298620 00000 n -0000583737 00000 n -0000010578 00000 n -0000010627 00000 n -0000012269 00000 n -0000012473 00000 n -0000053468 00000 n -0000053624 00000 n -0000053785 00000 n -0000053944 00000 n -0000054103 00000 n -0000054262 00000 n -0000054421 00000 n -0000054579 00000 n -0000054738 00000 n -0000054891 00000 n -0000057479 00000 n -0000057631 00000 n -0000057788 00000 n -0000057948 00000 n -0000055209 00000 n -0000010679 00000 n -0000055047 00000 n -0000055100 00000 n -0000580380 00000 n -0000580235 00000 n -0000579363 00000 n -0000581543 00000 n -0000580090 00000 n -0000581978 00000 n -0000579509 00000 n -0000055153 00000 n -0000582417 00000 n -0000058105 00000 n -0000058265 00000 n -0000058426 00000 n -0000058587 00000 n -0000058744 00000 n -0000058896 00000 n -0000059053 00000 n -0000059208 00000 n -0000059366 00000 n -0000059527 00000 n -0000059689 00000 n -0000059846 00000 n -0000060004 00000 n -0000060162 00000 n -0000060320 00000 n -0000060478 00000 n -0000060632 00000 n -0000060790 00000 n -0000060948 00000 n -0000061106 00000 n -0000061264 00000 n -0000061419 00000 n -0000061575 00000 n -0000061733 00000 n -0000061891 00000 n -0000062049 00000 n -0000062207 00000 n -0000062364 00000 n -0000062522 00000 n -0000062679 00000 n -0000062834 00000 n -0000062991 00000 n -0000063153 00000 n -0000063315 00000 n -0000063477 00000 n -0000063633 00000 n -0000063795 00000 n -0000063957 00000 n -0000064119 00000 n -0000064281 00000 n -0000064443 00000 n -0000064601 00000 n -0000064759 00000 n -0000064917 00000 n -0000067424 00000 n -0000065128 00000 n -0000056971 00000 n -0000055394 00000 n -0000065075 00000 n -0000067579 00000 n -0000067737 00000 n -0000067899 00000 n -0000068061 00000 n -0000068218 00000 n -0000068380 00000 n -0000068541 00000 n -0000068703 00000 n -0000068864 00000 n -0000069026 00000 n -0000069187 00000 n -0000069349 00000 n -0000069506 00000 n -0000069664 00000 n -0000069821 00000 n -0000069979 00000 n -0000070141 00000 n -0000070303 00000 n -0000070465 00000 n -0000070626 00000 n -0000070788 00000 n -0000070950 00000 n -0000071105 00000 n -0000071262 00000 n -0000071420 00000 n -0000071577 00000 n -0000071735 00000 n -0000071891 00000 n -0000072049 00000 n -0000072206 00000 n -0000072364 00000 n -0000072522 00000 n -0000072676 00000 n -0000072834 00000 n -0000072995 00000 n -0000073157 00000 n -0000073315 00000 n -0000073472 00000 n -0000073626 00000 n -0000073784 00000 n -0000073942 00000 n -0000074100 00000 n -0000074255 00000 n -0000074413 00000 n -0000074573 00000 n -0000074735 00000 n -0000074893 00000 n -0000076142 00000 n -0000075103 00000 n -0000066916 00000 n -0000065225 00000 n -0000075050 00000 n -0000076297 00000 n -0000076455 00000 n -0000076613 00000 n -0000076771 00000 n -0000076928 00000 n -0000077086 00000 n -0000077242 00000 n -0000077400 00000 n -0000077555 00000 n -0000077710 00000 n -0000077868 00000 n -0000078025 00000 n -0000078187 00000 n -0000078344 00000 n -0000078555 00000 n -0000075898 00000 n -0000075187 00000 n -0000078502 00000 n -0000081337 00000 n -0000083594 00000 n -0000081205 00000 n -0000078639 00000 n -0000081491 00000 n -0000081544 00000 n -0000081601 00000 n -0000580525 00000 n -0000581249 00000 n -0000580959 00000 n -0000081658 00000 n -0000081715 00000 n -0000081772 00000 n -0000581688 00000 n -0000081829 00000 n -0000081886 00000 n -0000081943 00000 n -0000082000 00000 n -0000082057 00000 n -0000082113 00000 n -0000082170 00000 n -0000082227 00000 n -0000082284 00000 n -0000082341 00000 n -0000082398 00000 n -0000082455 00000 n -0000082512 00000 n -0000082569 00000 n -0000082626 00000 n -0000082683 00000 n -0000082739 00000 n -0000579802 00000 n -0000082796 00000 n -0000082853 00000 n -0000082910 00000 n -0000082967 00000 n -0000083024 00000 n -0000083081 00000 n -0000083138 00000 n -0000083195 00000 n -0000083251 00000 n -0000083308 00000 n -0000083365 00000 n -0000083422 00000 n -0000581104 00000 n -0000087525 00000 n -0000087681 00000 n -0000087836 00000 n -0000087995 00000 n -0000088153 00000 n -0000088311 00000 n -0000088469 00000 n -0000088625 00000 n -0000089229 00000 n -0000087337 00000 n -0000083755 00000 n -0000088781 00000 n -0000088946 00000 n -0000089002 00000 n -0000089059 00000 n -0000089116 00000 n -0000579946 00000 n -0000092514 00000 n -0000092671 00000 n -0000092829 00000 n -0000093826 00000 n -0000092366 00000 n -0000089391 00000 n -0000092985 00000 n -0000093038 00000 n -0000093091 00000 n -0000093148 00000 n -0000581397 00000 n -0000093316 00000 n -0000093373 00000 n -0000093486 00000 n -0000093543 00000 n -0000093656 00000 n -0000093713 00000 n -0000093770 00000 n -0000582535 00000 n -0000097447 00000 n -0000099107 00000 n -0000097315 00000 n -0000093988 00000 n -0000097606 00000 n -0000097659 00000 n -0000097712 00000 n -0000581834 00000 n -0000097769 00000 n -0000097826 00000 n -0000097887 00000 n -0000097944 00000 n -0000098001 00000 n -0000098062 00000 n -0000098119 00000 n -0000098176 00000 n -0000098233 00000 n -0000098294 00000 n -0000098355 00000 n -0000098412 00000 n -0000098469 00000 n -0000098530 00000 n -0000098591 00000 n -0000098648 00000 n -0000098705 00000 n -0000098766 00000 n -0000098823 00000 n -0000098880 00000 n -0000098937 00000 n -0000098994 00000 n -0000099050 00000 n -0000102664 00000 n -0000102823 00000 n -0000102979 00000 n -0000103134 00000 n -0000104248 00000 n -0000102508 00000 n -0000099269 00000 n -0000103290 00000 n -0000103399 00000 n -0000103456 00000 n -0000103513 00000 n -0000103569 00000 n -0000103626 00000 n -0000103683 00000 n -0000103740 00000 n -0000103851 00000 n -0000103908 00000 n -0000103965 00000 n -0000104077 00000 n -0000104134 00000 n -0000104191 00000 n -0000107837 00000 n -0000108900 00000 n -0000107705 00000 n -0000104384 00000 n -0000107998 00000 n -0000108107 00000 n -0000108164 00000 n -0000108221 00000 n -0000108278 00000 n -0000108447 00000 n -0000108504 00000 n -0000108561 00000 n -0000108617 00000 n -0000108674 00000 n -0000108731 00000 n -0000108787 00000 n -0000111540 00000 n -0000113799 00000 n -0000111408 00000 n -0000109062 00000 n -0000111699 00000 n -0000111808 00000 n -0000111865 00000 n -0000111922 00000 n -0000111979 00000 n -0000112036 00000 n -0000112093 00000 n -0000112149 00000 n -0000112206 00000 n -0000112263 00000 n -0000112320 00000 n -0000112377 00000 n -0000112434 00000 n -0000112491 00000 n -0000112548 00000 n -0000112605 00000 n -0000112661 00000 n -0000112718 00000 n -0000112775 00000 n -0000112832 00000 n -0000112889 00000 n -0000112946 00000 n -0000113003 00000 n -0000113060 00000 n -0000113117 00000 n -0000113174 00000 n -0000113230 00000 n -0000113287 00000 n -0000113344 00000 n -0000113401 00000 n -0000113458 00000 n -0000113515 00000 n -0000113572 00000 n -0000113685 00000 n -0000113742 00000 n -0000116821 00000 n -0000118966 00000 n -0000116689 00000 n -0000113961 00000 n -0000116980 00000 n -0000117033 00000 n -0000117090 00000 n -0000117147 00000 n -0000117204 00000 n -0000117260 00000 n -0000117317 00000 n -0000117374 00000 n -0000117431 00000 n -0000117488 00000 n -0000117545 00000 n -0000117602 00000 n -0000117659 00000 n -0000117716 00000 n -0000117773 00000 n -0000117830 00000 n -0000117887 00000 n -0000117944 00000 n -0000118057 00000 n -0000118114 00000 n -0000118227 00000 n -0000118284 00000 n -0000118340 00000 n -0000118397 00000 n -0000118454 00000 n -0000118511 00000 n -0000118568 00000 n -0000118625 00000 n -0000118682 00000 n -0000118739 00000 n -0000118796 00000 n -0000118852 00000 n -0000118909 00000 n -0000123864 00000 n -0000121712 00000 n -0000119128 00000 n -0000121824 00000 n -0000121877 00000 n -0000121930 00000 n -0000121987 00000 n -0000122044 00000 n -0000122101 00000 n -0000122158 00000 n -0000122215 00000 n -0000122272 00000 n -0000122329 00000 n -0000122386 00000 n -0000122443 00000 n -0000122500 00000 n -0000122557 00000 n -0000122614 00000 n -0000122671 00000 n -0000122728 00000 n -0000122783 00000 n -0000122840 00000 n -0000122897 00000 n -0000122954 00000 n -0000123011 00000 n -0000123068 00000 n -0000123125 00000 n -0000123182 00000 n -0000123239 00000 n -0000123295 00000 n -0000123352 00000 n -0000123409 00000 n -0000123466 00000 n -0000123523 00000 n -0000123580 00000 n -0000123637 00000 n -0000123694 00000 n -0000123751 00000 n -0000582653 00000 n -0000128351 00000 n -0000125062 00000 n -0000124013 00000 n -0000125174 00000 n -0000125227 00000 n -0000125280 00000 n -0000125337 00000 n -0000125394 00000 n -0000125451 00000 n -0000125508 00000 n -0000125565 00000 n -0000125622 00000 n -0000125679 00000 n -0000125736 00000 n -0000125793 00000 n -0000125850 00000 n -0000125907 00000 n -0000125964 00000 n -0000126021 00000 n -0000126078 00000 n -0000126133 00000 n -0000126190 00000 n -0000126247 00000 n -0000126304 00000 n -0000126361 00000 n -0000126418 00000 n -0000126475 00000 n -0000126532 00000 n -0000126589 00000 n -0000126645 00000 n -0000126702 00000 n -0000126759 00000 n -0000126816 00000 n -0000126871 00000 n -0000126928 00000 n -0000126985 00000 n -0000127042 00000 n -0000127099 00000 n -0000127156 00000 n -0000127213 00000 n -0000127270 00000 n -0000127327 00000 n -0000127383 00000 n -0000127440 00000 n -0000127497 00000 n -0000127554 00000 n -0000127611 00000 n -0000127668 00000 n -0000127725 00000 n -0000127782 00000 n -0000127839 00000 n -0000127896 00000 n -0000127952 00000 n -0000128009 00000 n -0000128066 00000 n -0000128123 00000 n -0000128180 00000 n -0000128237 00000 n -0000128294 00000 n -0000132056 00000 n -0000132215 00000 n -0000132376 00000 n -0000132535 00000 n -0000133033 00000 n -0000131900 00000 n -0000128461 00000 n -0000132697 00000 n -0000132750 00000 n -0000132807 00000 n -0000132864 00000 n -0000135938 00000 n -0000136097 00000 n -0000136254 00000 n -0000136412 00000 n -0000137359 00000 n -0000135782 00000 n -0000133182 00000 n -0000136571 00000 n -0000136903 00000 n -0000136960 00000 n -0000137017 00000 n -0000137074 00000 n -0000137131 00000 n -0000137188 00000 n -0000140355 00000 n -0000141075 00000 n -0000140223 00000 n -0000137508 00000 n -0000140513 00000 n -0000140676 00000 n -0000140733 00000 n -0000140790 00000 n -0000140847 00000 n -0000163014 00000 n -0000142783 00000 n -0000162943 00000 n -0000163398 00000 n -0000142636 00000 n -0000141211 00000 n -0000163169 00000 n -0000163336 00000 n -0000162074 00000 n -0000171067 00000 n -0000167836 00000 n -0000167046 00000 n -0000163518 00000 n -0000167158 00000 n -0000580813 00000 n -0000167381 00000 n -0000167438 00000 n -0000167495 00000 n -0000167552 00000 n -0000167609 00000 n -0000167666 00000 n -0000167723 00000 n -0000167780 00000 n -0000582771 00000 n -0000171225 00000 n -0000171380 00000 n -0000171541 00000 n -0000173010 00000 n -0000170911 00000 n -0000167998 00000 n -0000171700 00000 n -0000171920 00000 n -0000171976 00000 n -0000172033 00000 n -0000172090 00000 n -0000172147 00000 n -0000172204 00000 n -0000172261 00000 n -0000172318 00000 n -0000172376 00000 n -0000172434 00000 n -0000172492 00000 n -0000172606 00000 n -0000172662 00000 n -0000172720 00000 n -0000172778 00000 n -0000172836 00000 n -0000172894 00000 n -0000172952 00000 n -0000175918 00000 n -0000176078 00000 n -0000176236 00000 n -0000176395 00000 n -0000176554 00000 n -0000177827 00000 n -0000175746 00000 n -0000173185 00000 n -0000176714 00000 n -0000176769 00000 n -0000176828 00000 n -0000176887 00000 n -0000176946 00000 n -0000177004 00000 n -0000177063 00000 n -0000177122 00000 n -0000177181 00000 n -0000177240 00000 n -0000177299 00000 n -0000177357 00000 n -0000177416 00000 n -0000177475 00000 n -0000177534 00000 n -0000177593 00000 n -0000177652 00000 n -0000181045 00000 n -0000181204 00000 n -0000183951 00000 n -0000181364 00000 n -0000181860 00000 n -0000180876 00000 n -0000177964 00000 n -0000181519 00000 n -0000209628 00000 n -0000209253 00000 n -0000209413 00000 n -0000213471 00000 n -0000209807 00000 n -0000183791 00000 n -0000181984 00000 n -0000209573 00000 n -0000208351 00000 n -0000213631 00000 n -0000213791 00000 n -0000214287 00000 n -0000213317 00000 n -0000209994 00000 n -0000213948 00000 n -0000217746 00000 n -0000217906 00000 n -0000218063 00000 n -0000218796 00000 n -0000217591 00000 n -0000214437 00000 n -0000218219 00000 n -0000579655 00000 n -0000218502 00000 n -0000218561 00000 n -0000218620 00000 n -0000218679 00000 n -0000218737 00000 n -0000582893 00000 n -0000221680 00000 n -0000221397 00000 n -0000218960 00000 n -0000221513 00000 n -0000224827 00000 n -0000224986 00000 n -0000225489 00000 n -0000224681 00000 n -0000221804 00000 n -0000225146 00000 n -0000225371 00000 n -0000225430 00000 n -0000229770 00000 n -0000229193 00000 n -0000225626 00000 n -0000229309 00000 n -0000229476 00000 n -0000229535 00000 n -0000229594 00000 n -0000229653 00000 n -0000234487 00000 n -0000233495 00000 n -0000229907 00000 n -0000233611 00000 n -0000233666 00000 n -0000233721 00000 n -0000233780 00000 n -0000233839 00000 n -0000233898 00000 n -0000233957 00000 n -0000234016 00000 n -0000234075 00000 n -0000234134 00000 n -0000234193 00000 n -0000234252 00000 n -0000234311 00000 n -0000234370 00000 n -0000238641 00000 n -0000237947 00000 n -0000234637 00000 n -0000238063 00000 n -0000238172 00000 n -0000238231 00000 n -0000238290 00000 n -0000238349 00000 n -0000238408 00000 n -0000238466 00000 n -0000580668 00000 n -0000242204 00000 n -0000244126 00000 n -0000242067 00000 n -0000238779 00000 n -0000242363 00000 n -0000242418 00000 n -0000242477 00000 n -0000242536 00000 n -0000242595 00000 n -0000242654 00000 n -0000242713 00000 n -0000242772 00000 n -0000242831 00000 n -0000242890 00000 n -0000242949 00000 n -0000243007 00000 n -0000243066 00000 n -0000243125 00000 n -0000243184 00000 n -0000243243 00000 n -0000243302 00000 n -0000243361 00000 n -0000243420 00000 n -0000243479 00000 n -0000243538 00000 n -0000243597 00000 n -0000243656 00000 n -0000243715 00000 n -0000243772 00000 n -0000243831 00000 n -0000243890 00000 n -0000243949 00000 n -0000244008 00000 n -0000244067 00000 n -0000583018 00000 n -0000246954 00000 n -0000247114 00000 n -0000249506 00000 n -0000246808 00000 n -0000244277 00000 n -0000247274 00000 n -0000247329 00000 n -0000247388 00000 n -0000247447 00000 n -0000247506 00000 n -0000247564 00000 n -0000247623 00000 n -0000247682 00000 n -0000247741 00000 n -0000247800 00000 n -0000247859 00000 n -0000247918 00000 n -0000247977 00000 n -0000248036 00000 n -0000248095 00000 n -0000248154 00000 n -0000248213 00000 n -0000248272 00000 n -0000248331 00000 n -0000248390 00000 n -0000248449 00000 n -0000248508 00000 n -0000248567 00000 n -0000248626 00000 n -0000248683 00000 n -0000248742 00000 n -0000248801 00000 n -0000248860 00000 n -0000248977 00000 n -0000249036 00000 n -0000249095 00000 n -0000249153 00000 n -0000249212 00000 n -0000249271 00000 n -0000249330 00000 n -0000249389 00000 n -0000253105 00000 n -0000253265 00000 n -0000253654 00000 n -0000252959 00000 n -0000249656 00000 n -0000253425 00000 n -0000258535 00000 n -0000256308 00000 n -0000253791 00000 n -0000256424 00000 n -0000256533 00000 n -0000256592 00000 n -0000256651 00000 n -0000256710 00000 n -0000256769 00000 n -0000256828 00000 n -0000256887 00000 n -0000256945 00000 n -0000257004 00000 n -0000257063 00000 n -0000257122 00000 n -0000257181 00000 n -0000257240 00000 n -0000257299 00000 n -0000257358 00000 n -0000257417 00000 n -0000257475 00000 n -0000257534 00000 n -0000257593 00000 n -0000257652 00000 n -0000257711 00000 n -0000257770 00000 n -0000257829 00000 n -0000257888 00000 n -0000257947 00000 n -0000258005 00000 n -0000258064 00000 n -0000258123 00000 n -0000258182 00000 n -0000258241 00000 n -0000258300 00000 n -0000258359 00000 n -0000258418 00000 n -0000261897 00000 n -0000263407 00000 n -0000261760 00000 n -0000258672 00000 n -0000262056 00000 n -0000262111 00000 n -0000262170 00000 n -0000262229 00000 n -0000262288 00000 n -0000262351 00000 n -0000262414 00000 n -0000262477 00000 n -0000262539 00000 n -0000262602 00000 n -0000262665 00000 n -0000262728 00000 n -0000262791 00000 n -0000262854 00000 n -0000262917 00000 n -0000262980 00000 n -0000263043 00000 n -0000263102 00000 n -0000263164 00000 n -0000263227 00000 n -0000263290 00000 n -0000266497 00000 n -0000265916 00000 n -0000263570 00000 n -0000266032 00000 n -0000266261 00000 n -0000266320 00000 n -0000266379 00000 n -0000266438 00000 n -0000269708 00000 n -0000269890 00000 n -0000270288 00000 n -0000270689 00000 n -0000271405 00000 n -0000269517 00000 n -0000266634 00000 n -0000271063 00000 n -0000271118 00000 n -0000582124 00000 n -0000270091 00000 n -0000270490 00000 n -0000270877 00000 n -0000583143 00000 n -0000277477 00000 n -0000274461 00000 n -0000273948 00000 n -0000271556 00000 n -0000274064 00000 n -0000277880 00000 n -0000279737 00000 n -0000277322 00000 n -0000274611 00000 n -0000278042 00000 n -0000277679 00000 n -0000278151 00000 n -0000278210 00000 n -0000278269 00000 n -0000278328 00000 n -0000278387 00000 n -0000278446 00000 n -0000278505 00000 n -0000278564 00000 n -0000278677 00000 n -0000278736 00000 n -0000278794 00000 n -0000278853 00000 n -0000278912 00000 n -0000278971 00000 n -0000279030 00000 n -0000279089 00000 n -0000279148 00000 n -0000279207 00000 n -0000279266 00000 n -0000279325 00000 n -0000279384 00000 n -0000279443 00000 n -0000279502 00000 n -0000279561 00000 n -0000279620 00000 n -0000283855 00000 n -0000282338 00000 n -0000279928 00000 n -0000282454 00000 n -0000282737 00000 n -0000282796 00000 n -0000282855 00000 n -0000282914 00000 n -0000282973 00000 n -0000283032 00000 n -0000283091 00000 n -0000283149 00000 n -0000283208 00000 n -0000283267 00000 n -0000283326 00000 n -0000283385 00000 n -0000283444 00000 n -0000283561 00000 n -0000283620 00000 n -0000283737 00000 n -0000283796 00000 n -0000286667 00000 n -0000287098 00000 n -0000287831 00000 n -0000286512 00000 n -0000283992 00000 n -0000287255 00000 n -0000287310 00000 n -0000287365 00000 n -0000287482 00000 n -0000287541 00000 n -0000286883 00000 n -0000291061 00000 n -0000290832 00000 n -0000287969 00000 n -0000290948 00000 n -0000582271 00000 n -0000293953 00000 n -0000294283 00000 n -0000293816 00000 n -0000291199 00000 n -0000294112 00000 n -0000583268 00000 n -0000296340 00000 n -0000296169 00000 n -0000294408 00000 n -0000296285 00000 n -0000298678 00000 n -0000298449 00000 n -0000296426 00000 n -0000298565 00000 n -0000299455 00000 n -0000299284 00000 n -0000298790 00000 n -0000299400 00000 n -0000299541 00000 n -0000299933 00000 n -0000300261 00000 n -0000300790 00000 n -0000301150 00000 n -0000301666 00000 n -0000302350 00000 n -0000302856 00000 n -0000302894 00000 n -0000303573 00000 n -0000303611 00000 n -0000303643 00000 n -0000304146 00000 n -0000304662 00000 n -0000304742 00000 n -0000305380 00000 n -0000305880 00000 n -0000306513 00000 n -0000307126 00000 n -0000307760 00000 n -0000308167 00000 n -0000308489 00000 n -0000329697 00000 n -0000330121 00000 n -0000349021 00000 n -0000349416 00000 n -0000358308 00000 n -0000358557 00000 n -0000365702 00000 n -0000365936 00000 n -0000373081 00000 n -0000373315 00000 n -0000398020 00000 n -0000398563 00000 n -0000408730 00000 n -0000409003 00000 n -0000418165 00000 n -0000418411 00000 n -0000427052 00000 n -0000427320 00000 n -0000442133 00000 n -0000442493 00000 n -0000454114 00000 n -0000454484 00000 n -0000465889 00000 n -0000466252 00000 n -0000482373 00000 n -0000482920 00000 n -0000493441 00000 n -0000493717 00000 n -0000505400 00000 n -0000505745 00000 n -0000513658 00000 n -0000513945 00000 n -0000521260 00000 n -0000521502 00000 n -0000529597 00000 n -0000529903 00000 n -0000545756 00000 n -0000546085 00000 n -0000559849 00000 n -0000560169 00000 n -0000578836 00000 n -0000583375 00000 n -0000583497 00000 n -0000583587 00000 n -0000583660 00000 n -0000594337 00000 n -0000594518 00000 n -0000594700 00000 n -0000594915 00000 n -0000595142 00000 n -0000595369 00000 n -0000595599 00000 n -0000595827 00000 n -0000596057 00000 n -0000596286 00000 n -0000596515 00000 n -0000596746 00000 n -0000596977 00000 n -0000597196 00000 n -0000597414 00000 n -0000597632 00000 n -0000597850 00000 n -0000598069 00000 n -0000598287 00000 n -0000598506 00000 n -0000598723 00000 n -0000598941 00000 n -0000599160 00000 n -0000599378 00000 n -0000599595 00000 n -0000599814 00000 n -0000600032 00000 n -0000600251 00000 n -0000600468 00000 n -0000600686 00000 n -0000600905 00000 n -0000601123 00000 n -0000601342 00000 n -0000601559 00000 n -0000601777 00000 n -0000601996 00000 n -0000602214 00000 n -0000602433 00000 n -0000602651 00000 n -0000602870 00000 n -0000603087 00000 n -0000603304 00000 n -0000603523 00000 n -0000603741 00000 n -0000603956 00000 n -0000604174 00000 n -0000604392 00000 n -0000604615 00000 n -0000604837 00000 n -0000605060 00000 n -0000605285 00000 n -0000605508 00000 n -0000605730 00000 n -0000605955 00000 n -0000606178 00000 n -0000606403 00000 n -0000606628 00000 n -0000606851 00000 n -0000607076 00000 n -0000607301 00000 n -0000607526 00000 n -0000607751 00000 n -0000607974 00000 n -0000608199 00000 n -0000608421 00000 n -0000608646 00000 n -0000608871 00000 n -0000609091 00000 n -0000609316 00000 n -0000609539 00000 n -0000609764 00000 n -0000609989 00000 n -0000610214 00000 n -0000610437 00000 n -0000610662 00000 n -0000610887 00000 n -0000611110 00000 n -0000611335 00000 n -0000611555 00000 n -0000611780 00000 n -0000611993 00000 n -0000612203 00000 n -0000612414 00000 n -0000612623 00000 n -0000612803 00000 n -0000612974 00000 n -0000613147 00000 n -0000613321 00000 n -0000613498 00000 n -0000613673 00000 n -0000613850 00000 n -0000614021 00000 n -0000614238 00000 n -0000614439 00000 n -0000614640 00000 n -0000614850 00000 n -0000615071 00000 n -0000615297 00000 n -0000615520 00000 n -0000615747 00000 n -0000615974 00000 n -0000616196 00000 n -0000616423 00000 n -0000616650 00000 n -0000616877 00000 n -0000617104 00000 n -0000617332 00000 n -0000617583 00000 n -0000617834 00000 n -0000618085 00000 n -0000618333 00000 n -0000618577 00000 n -0000618716 00000 n -0000618841 00000 n -0000618971 00000 n -0000619099 00000 n -0000619226 00000 n -0000619354 00000 n -0000619482 00000 n -0000619610 00000 n -0000619738 00000 n -0000619866 00000 n -0000619994 00000 n -0000620122 00000 n -0000620250 00000 n -0000620376 00000 n -0000620498 00000 n -0000620614 00000 n -0000620736 00000 n -0000620866 00000 n -0000620999 00000 n -0000621117 00000 n -0000621241 00000 n -0000621369 00000 n -0000621501 00000 n -0000621592 00000 n -0000621702 00000 n -0000621742 00000 n -0000621874 00000 n -trailer -<< /Size 1584 -/Root 1582 0 R -/Info 1583 0 R -/ID [<D05AB66CAF5063FF24EE766AC10A4C94> <D05AB66CAF5063FF24EE766AC10A4C94>] >> -startxref -622150 -%%EOF diff --git a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractassert.snippet b/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractassert.snippet deleted file mode 100644 index 7a47503..0000000 --- a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractassert.snippet +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <SnippetTypes> - <SnippetType>Expansion</SnippetType> - </SnippetTypes> - <Title>Contract.Assert</Title> - <Shortcut>cca</Shortcut> - <Description>Emits a 'Contract.Assert' clause</Description> - <Author>MaF</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - <Object Editable="true"> - <ID>condition</ID> - <ToolTip>condition that must be true</ToolTip> - <Default>false</Default> - <Function> - </Function> - </Object> - </Declarations> - <Code Language="CSharp" Kind="method body"><![CDATA[Contract.Assert($condition$);$end$]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractassume.snippet b/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractassume.snippet deleted file mode 100644 index 4f78ef9..0000000 --- a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractassume.snippet +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <SnippetTypes> - <SnippetType>Expansion</SnippetType> - </SnippetTypes> - <Title>Contract.Assume</Title> - <Shortcut>cam</Shortcut> - <Description>Emits a 'Contract.Assume' clause</Description> - <Author>MaF</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - <Object Editable="true"> - <ID>condition</ID> - <ToolTip>condition that must be true</ToolTip> - <Default>false</Default> - <Function> - </Function> - </Object> - </Declarations> - <Code Language="CSharp" Kind="method body"><![CDATA[Contract.Assume($condition$);$end$]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractensures.snippet b/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractensures.snippet deleted file mode 100644 index ecff2bf..0000000 --- a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractensures.snippet +++ /dev/null @@ -1,22 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <SnippetTypes> - <SnippetType>Expansion</SnippetType> - </SnippetTypes> - <Title>Contract.Ensures</Title> - <Shortcut>ce</Shortcut> - <Description>Emits a 'ensures' clause</Description> - <Author>Jonathan de Halleux</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Code Language="CSharp" Kind="method body"><![CDATA[Contract.Ensures($end$);]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractensuresnonnull.snippet b/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractensuresnonnull.snippet deleted file mode 100644 index 3e4f24b..0000000 --- a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractensuresnonnull.snippet +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <SnippetTypes> - <SnippetType>Expansion</SnippetType> - </SnippetTypes> - <Title>Contract.Ensures(Contract.Result() != null)</Title> - <Shortcut>cen</Shortcut> - <Description>Emits an 'ensures' clause specifying result not null</Description> - <Author>Jonathan de Halleux</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - <Object Editable="true"> - <ID>type</ID> - <ToolTip>the method return type</ToolTip> - <Default>string</Default> - <Function> - </Function> - </Object> - </Declarations> - <Code Language="CSharp" Kind="method body"><![CDATA[Contract.Ensures(Contract.Result<$type$>() != null); -$end$]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractensuresnotisnullorempty.snippet b/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractensuresnotisnullorempty.snippet deleted file mode 100644 index 6520876..0000000 --- a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractensuresnotisnullorempty.snippet +++ /dev/null @@ -1,25 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <SnippetTypes> - <SnippetType>Expansion</SnippetType> - </SnippetTypes> - <Title>Contract.Ensures(!String.IsNullOrEmpty(Contract.Result()))</Title> - <Shortcut>cesn</Shortcut> - <Description>Emits an 'ensures' clause specifying result not null or empty</Description> - <Author>Jonathan de Halleux</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - </Declarations> - <Code Language="CSharp" Kind="method body"><![CDATA[Contract.Ensures(!String.IsNullOrEmpty(Contract.Result<string>())); -$end$]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractinterface.snippet b/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractinterface.snippet deleted file mode 100644 index 6d90b95..0000000 --- a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractinterface.snippet +++ /dev/null @@ -1,41 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <SnippetTypes> - <SnippetType>Expansion</SnippetType> - </SnippetTypes> - <Title>Contracted Interface</Title> - <Shortcut>cintf</Shortcut> - <Description>Boiler plate interface and contract</Description> - <Author>Maf</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - <Object Editable="true"> - <ID>interface</ID> - <ToolTip>Interface name</ToolTip> - <Default>IFoo</Default> - <Function> - </Function> - </Object> - </Declarations> - <Code Language="CSharp" Kind="type decl"><![CDATA[#region $interface$ contract binding -[ContractClass(typeof($interface$Contract))] -public partial interface $interface$ { - $end$ -} - -[ContractClassFor(typeof($interface$))] -abstract class $interface$Contract : $interface$ { -} -#endregion -]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractinvariant.snippet b/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractinvariant.snippet deleted file mode 100644 index 218a468..0000000 --- a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractinvariant.snippet +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <SnippetTypes> - <SnippetType>Expansion</SnippetType> - </SnippetTypes> - <Title>Contract.Invariant</Title> - <Shortcut>ci</Shortcut> - <Description>Emits a 'Contract.Invariant' clause</Description> - <Author>Jonathan de Halleux</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - <Object Editable="true"> - <ID>condition</ID> - <ToolTip>boolean invariant condition</ToolTip> - <Default>false</Default> - <Function> - </Function> - </Object> - </Declarations> - <Code Language="CSharp" Kind="method body"><![CDATA[Contract.Invariant($condition$);$end$]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractinvariantmethod.snippet b/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractinvariantmethod.snippet deleted file mode 100644 index 20eef7a..0000000 --- a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractinvariantmethod.snippet +++ /dev/null @@ -1,36 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <SnippetTypes> - <SnippetType>Expansion</SnippetType> - </SnippetTypes> - <Title>Contract Invariant Method</Title> - <Shortcut>cim</Shortcut> - <Description>Boiler plate invariant method</Description> - <Author>Jonathan de Halleux</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - <Object Editable="true"> - <ID>condition</ID> - <ToolTip>boolean precondition</ToolTip> - <Default>false</Default> - <Function> - </Function> - </Object> - </Declarations> - <Code Language="CSharp" Kind="method body"><![CDATA[[ContractInvariantMethod] -void ObjectInvariant() -{ - Contract.Invariant($condition$);$end$ -} -]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractinvariantnonnull.snippet b/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractinvariantnonnull.snippet deleted file mode 100644 index f061cea..0000000 --- a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractinvariantnonnull.snippet +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <SnippetTypes> - <SnippetType>Expansion</SnippetType> - </SnippetTypes> - <Title>Contract.Invariant</Title> - <Shortcut>cin</Shortcut> - <Description>Emits a 'Contract.Invariant' non-null clause</Description> - <Author>Jonathan de Halleux</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - <Object Editable="true"> - <ID>expression</ID> - <ToolTip>the non-null expression</ToolTip> - <Default>m_X</Default> - <Function> - </Function> - </Object> - </Declarations> - <Code Language="CSharp" Kind="method body"><![CDATA[Contract.Invariant($expression$ != null);$end$]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractinvariantnotisnullorempty.snippet b/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractinvariantnotisnullorempty.snippet deleted file mode 100644 index d91b35c..0000000 --- a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractinvariantnotisnullorempty.snippet +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <SnippetTypes> - <SnippetType>Expansion</SnippetType> - </SnippetTypes> - <Title>Contract.Invariant</Title> - <Shortcut>cisn</Shortcut> - <Description>Emits a 'Contract.Invariant' not String.IsNullOrEmpty clause</Description> - <Author>Jonathan de Halleux</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - <Object Editable="true"> - <ID>expression</ID> - <ToolTip>expression that is not null or empty</ToolTip> - <Default>m_X</Default> - <Function> - </Function> - </Object> - </Declarations> - <Code Language="CSharp" Kind="method body"><![CDATA[Contract.Invariant(!String.IsNullOrEmpty($expression$));$end$]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractold.snippet b/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractold.snippet deleted file mode 100644 index 7cbbfb4..0000000 --- a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractold.snippet +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <Title>Contract.OldValue</Title> - <Shortcut>co</Shortcut> - <Description>Emits a 'Contract.OldValue' expression</Description> - <Author>Manuel Fahndrich</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - <Object Editable="true"> - <ID>expression</ID> - <ToolTip>old expression</ToolTip> - <Default>x</Default> - <Function> - </Function> - </Object> - </Declarations> - <Code Language="CSharp" Kind="any"><![CDATA[Contract.OldValue($expression$)$end$]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractrequires.snippet b/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractrequires.snippet deleted file mode 100644 index 770fbc7..0000000 --- a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractrequires.snippet +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <SnippetTypes> - <SnippetType>Expansion</SnippetType> - </SnippetTypes> - <Title>Contract.Requires</Title> - <Shortcut>cr</Shortcut> - <Description>Emits a 'Contract.Requires' clause</Description> - <Author>Jonathan de Halleux</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - <Object Editable="true"> - <ID>condition</ID> - <ToolTip>precondition expression</ToolTip> - <Default>false</Default> - <Function> - </Function> - </Object> - </Declarations> - <Code Language="CSharp" Kind="method body"><![CDATA[Contract.Requires($condition$);$end$]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractrequiresalways.snippet b/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractrequiresalways.snippet deleted file mode 100644 index eb082d1..0000000 --- a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractrequiresalways.snippet +++ /dev/null @@ -1,38 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <SnippetTypes> - <SnippetType>Expansion</SnippetType> - </SnippetTypes> - <Title>Contract.Requires<E></Title> - <Shortcut>cre</Shortcut> - <Description>Emits a 'Contract.Requires<Exc>' clause</Description> - <Author>Jonathan de Halleux</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - <Object Editable="true"> - <ID>exception</ID> - <ToolTip>Exception type</ToolTip> - <Default>ArgumentException</Default> - <Function> - </Function> - </Object> - <Object Editable="true"> - <ID>condition</ID> - <ToolTip>precondition expression</ToolTip> - <Default>false</Default> - <Function> - </Function> - </Object> - </Declarations> - <Code Language="CSharp" Kind="method body"><![CDATA[Contract.Requires<$exception$>($condition$);$end$]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractrequiresalwaysnotisnullorempty.snippet b/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractrequiresalwaysnotisnullorempty.snippet deleted file mode 100644 index 44f1bf6..0000000 --- a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractrequiresalwaysnotisnullorempty.snippet +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <SnippetTypes> - <SnippetType>Expansion</SnippetType> - </SnippetTypes> - <Title>Contract.Requires<ArgumentException>(!String.IsNullOrEmpty(..))</Title> - <Shortcut>cresn</Shortcut> - <Description>Emits a 'requires with exception' not IsNullOrEmpty</Description> - <Author>Jonathan de Halleux</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - <Object Editable="true"> - <ID>variable</ID> - <ToolTip>argument name</ToolTip> - <Default>arg</Default> - <Function> - </Function> - </Object> - </Declarations> - <Code Language="CSharp" Kind="method body"><![CDATA[Contract.Requires<ArgumentException>(!String.IsNullOrEmpty($variable$));$end$]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractrequiresalwaysnotnull.snippet b/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractrequiresalwaysnotnull.snippet deleted file mode 100644 index 2f1ca2a..0000000 --- a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractrequiresalwaysnotnull.snippet +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <SnippetTypes> - <SnippetType>Expansion</SnippetType> - </SnippetTypes> - <Title>Contract.Requires<ArgumentNullException>(.. != null)</Title> - <Shortcut>cren</Shortcut> - <Description>Emits a 'requires with exception' not null clause</Description> - <Author>Jonathan de Halleux</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - <Object Editable="true"> - <ID>variable</ID> - <ToolTip>variable name</ToolTip> - <Default>arg</Default> - <Function> - </Function> - </Object> - </Declarations> - <Code Language="CSharp" Kind="method body"><![CDATA[Contract.Requires<ArgumentNullException>($variable$ != null, "$variable$");$end$]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractrequiresnotisnullorempty.snippet b/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractrequiresnotisnullorempty.snippet deleted file mode 100644 index d6df838..0000000 --- a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractrequiresnotisnullorempty.snippet +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <SnippetTypes> - <SnippetType>Expansion</SnippetType> - </SnippetTypes> - <Title>Contract.Requires(!String.IsNullOrEmpty(..))</Title> - <Shortcut>crsn</Shortcut> - <Description>Emits a 'requires' not IsNullOrEmpty</Description> - <Author>Jonathan de Halleux</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - <Object Editable="true"> - <ID>variable</ID> - <ToolTip>argument name</ToolTip> - <Default>arg</Default> - <Function> - </Function> - </Object> - </Declarations> - <Code Language="CSharp" Kind="method body"><![CDATA[Contract.Requires(!String.IsNullOrEmpty($variable$));$end$]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractrequiresnotnull.snippet b/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractrequiresnotnull.snippet deleted file mode 100644 index e0607cc..0000000 --- a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractrequiresnotnull.snippet +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <SnippetTypes> - <SnippetType>Expansion</SnippetType> - </SnippetTypes> - <Title>Contract.Requires(.. != null)</Title> - <Shortcut>crn</Shortcut> - <Description>Emits a 'requires' not null clause</Description> - <Author>Jonathan de Halleux</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - <Object Editable="true"> - <ID>variable</ID> - <ToolTip>variable name</ToolTip> - <Default>arg</Default> - <Function> - </Function> - </Object> - </Declarations> - <Code Language="CSharp" Kind="method body"><![CDATA[Contract.Requires($variable$ != null);$end$]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractresult.snippet b/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractresult.snippet deleted file mode 100644 index 3e3f4f2..0000000 --- a/tools/Contracts/Languages/CSharp/Code Contract Snippets/contractresult.snippet +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <Title>Contract.Result</Title> - <Shortcut>crr</Shortcut> - <Description>Emits a 'Contract.Result' expression</Description> - <Author>Manuel Fahndrich</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - <Object Editable="true"> - <ID>type</ID> - <ToolTip>method return type</ToolTip> - <Default>int</Default> - <Function> - </Function> - </Object> - </Declarations> - <Code Language="CSharp" Kind="any"><![CDATA[Contract.Result<$type$>()$end$]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/CSharp/ContractDeclarativeAssemblyAttribute.cs b/tools/Contracts/Languages/CSharp/ContractDeclarativeAssemblyAttribute.cs deleted file mode 100644 index ab2a247..0000000 --- a/tools/Contracts/Languages/CSharp/ContractDeclarativeAssemblyAttribute.cs +++ /dev/null @@ -1,17 +0,0 @@ -// -// This file is included when building a contract declarative assembly -// in order to mark it as such for recognition by the tools -// -using System; -using System.Collections.Generic; -using System.Text; - -[assembly: global::System.Diagnostics.Contracts.ContractDeclarativeAssembly] - -namespace System.Diagnostics.Contracts -{ - [AttributeUsage(AttributeTargets.Assembly)] - internal class ContractDeclarativeAssemblyAttribute : global::System.Attribute - { - } -} diff --git a/tools/Contracts/Languages/CSharp/ContractExtensions.cs b/tools/Contracts/Languages/CSharp/ContractExtensions.cs deleted file mode 100644 index 4074ffa..0000000 --- a/tools/Contracts/Languages/CSharp/ContractExtensions.cs +++ /dev/null @@ -1,45 +0,0 @@ -// -// Include this file in your project if your project uses -// ContractArgumentValidator or ContractAbbreviator methods -// -using System; - -namespace System.Diagnostics.Contracts -{ - /// <summary> - /// Enables factoring legacy if-then-throw into separate methods for reuse and full control over - /// thrown exception and arguments - /// </summary> - [AttributeUsage(AttributeTargets.Method, AllowMultiple=false)] - [Conditional("CONTRACTS_FULL")] - internal sealed class ContractArgumentValidatorAttribute : global::System.Attribute - { - } - - /// <summary> - /// Enables writing abbreviations for contracts that get copied to other methods - /// </summary> - [AttributeUsage(AttributeTargets.Method, AllowMultiple=false)] - [Conditional("CONTRACTS_FULL")] - internal sealed class ContractAbbreviatorAttribute : global::System.Attribute - { - } - - /// <summary> - /// Allows setting contract and tool options at assembly, type, or method granularity. - /// </summary> - [AttributeUsage(AttributeTargets.All, AllowMultiple=true, Inherited=false)] - [Conditional("CONTRACTS_FULL")] - internal sealed class ContractOptionAttribute : global::System.Attribute - { - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "category", Justification = "Build-time only attribute")] - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "setting", Justification = "Build-time only attribute")] - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "toggle", Justification = "Build-time only attribute")] - public ContractOptionAttribute(string category, string setting, bool toggle) { } - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "category", Justification = "Build-time only attribute")] - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "setting", Justification = "Build-time only attribute")] - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "value", Justification = "Build-time only attribute")] - public ContractOptionAttribute(string category, string setting, string value) { } - } -} - diff --git a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractassert.snippet b/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractassert.snippet deleted file mode 100644 index 36c43c0..0000000 --- a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractassert.snippet +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <SnippetTypes> - <SnippetType>Expansion</SnippetType> - </SnippetTypes> - <Title>Contract.Assert</Title> - <Shortcut>cca</Shortcut> - <Description>Emits a 'Contract.Assert' clause</Description> - <Author>MaF</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - <Object Editable="true"> - <ID>condition</ID> - <ToolTip>expression representing the condition that must be true</ToolTip> - <Default>False</Default> - <Function> - </Function> - </Object> - </Declarations> - <Code Language="VB" Kind="method body"><![CDATA[Contract.Assert($condition$)]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractassume.snippet b/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractassume.snippet deleted file mode 100644 index 420b28f..0000000 --- a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractassume.snippet +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <SnippetTypes> - <SnippetType>Expansion</SnippetType> - </SnippetTypes> - <Title>Contract.Assume</Title> - <Shortcut>cam</Shortcut> - <Description>Emits a 'Contract.Assume' clause</Description> - <Author>MaF</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - <Object Editable="true"> - <ID>condition</ID> - <ToolTip>expression representing the condition that must be true</ToolTip> - <Default>False</Default> - <Function> - </Function> - </Object> - </Declarations> - <Code Language="VB" Kind="method body"><![CDATA[Contract.Assume($condition$)]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractensures.snippet b/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractensures.snippet deleted file mode 100644 index 8c8241b..0000000 --- a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractensures.snippet +++ /dev/null @@ -1,30 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <SnippetTypes> - <SnippetType>Expansion</SnippetType> - </SnippetTypes> - <Title>Contract.Ensures</Title> - <Shortcut>cens</Shortcut> - <Description>Emits a 'ensures' clause</Description> - <Author>Jonathan de Halleux</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - <Literal> - <ID>condition</ID> - <ToolTip>boolean invariant condition</ToolTip> - <Default>false</Default> - <ID>condition</ID> - </Literal> - </Declarations> - <Code Language="VB" Kind="method body"><![CDATA[Contract.Ensures($condition$)]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractensuresnonnull.snippet b/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractensuresnonnull.snippet deleted file mode 100644 index 7774a4a..0000000 --- a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractensuresnonnull.snippet +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <SnippetTypes> - <SnippetType>Expansion</SnippetType> - </SnippetTypes> - <Title>Contract.Ensures(Contract.Result() != null)</Title> - <Shortcut>cen</Shortcut> - <Description>Emits an 'ensures' clause specifying result not null</Description> - <Author>Jonathan de Halleux</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - <Object Editable="true"> - <ID>type</ID> - <ToolTip>the method return type</ToolTip> - <Default>string</Default> - <Function> - </Function> - </Object> - </Declarations> - <Code Language="VB" Kind="method body"><![CDATA[Contract.Ensures(Contract.Result(Of $type$)() IsNot Nothing)]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractensuresnotisnullorempty.snippet b/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractensuresnotisnullorempty.snippet deleted file mode 100644 index 2832acd..0000000 --- a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractensuresnotisnullorempty.snippet +++ /dev/null @@ -1,22 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <SnippetTypes> - <SnippetType>Expansion</SnippetType> - </SnippetTypes> - <Title>Contract.Ensures(Not IsNullOrEmpty(Contract.Result()))</Title> - <Shortcut>cesn</Shortcut> - <Description>Emits an 'ensures' clause specifying result is not null or empty</Description> - <Author>Jonathan de Halleux</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Code Language="VB" Kind="method body"><![CDATA[Contract.Ensures(Not String.IsNullOrEmpty(Contract.Result(Of String)()))]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractinterface.snippet b/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractinterface.snippet deleted file mode 100644 index 77c9d20..0000000 --- a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractinterface.snippet +++ /dev/null @@ -1,39 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <SnippetTypes> - <SnippetType>Expansion</SnippetType> - </SnippetTypes> - <Title>Contracted Interface</Title> - <Shortcut>cintf</Shortcut> - <Description>Boiler plate interface and contract</Description> - <Author>Maf</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - <Object Editable="true"> - <ID>interface</ID> - <ToolTip>Interface name</ToolTip> - <Default>IFoo</Default> - <Function> - </Function> - </Object> - </Declarations> - <Code Language="VB" Kind="type decl"><![CDATA[<ContractClass(GetType($interface$Contract))> _ -Public Interface $interface$ -End Interface - -<ContractClassFor(GetType($interface$))> _ -MustInherit Class $interface$Contract - Implements $interface$ -End Class -]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractinvariant.snippet b/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractinvariant.snippet deleted file mode 100644 index 49ff1f1..0000000 --- a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractinvariant.snippet +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <SnippetTypes> - <SnippetType>Expansion</SnippetType> - </SnippetTypes> - <Title>Contract.Invariant</Title> - <Shortcut>cinv</Shortcut> - <Description>Emits a 'Contract.Invariant' clause</Description> - <Author>MaF</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - <Object Editable="true"> - <ID>condition</ID> - <ToolTip>boolean invariant condition</ToolTip> - <Default>false</Default> - <Function> - </Function> - </Object> - </Declarations> - <Code Language="VB" Kind="method body"><![CDATA[Contract.Invariant($condition$)]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractinvariantmethod.snippet b/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractinvariantmethod.snippet deleted file mode 100644 index 750fc80..0000000 --- a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractinvariantmethod.snippet +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <SnippetTypes> - <SnippetType>Expansion</SnippetType> - </SnippetTypes> - <Title>Contract Invariant Method</Title> - <Shortcut>cim</Shortcut> - <Description>Boiler plate invariant method</Description> - <Author>Jonathan de Halleux</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - <Literal> - <ID>condition</ID> - <ToolTip>boolean precondition</ToolTip> - <Default>False</Default> - <Function> - </Function> - </Literal> - </Declarations> - <Code Language="VB" Kind="method decl"><![CDATA[<ContractInvariantMethod()> _ -Private Sub ObjectInvariant() - Contract.Invariant($condition$) -End Sub -]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractinvariantnonnull.snippet b/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractinvariantnonnull.snippet deleted file mode 100644 index 2bf7072..0000000 --- a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractinvariantnonnull.snippet +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <SnippetTypes> - <SnippetType>Expansion</SnippetType> - </SnippetTypes> - <Title>Contract.Invariant</Title> - <Shortcut>cinvn</Shortcut> - <Description>Emits a 'Contract.Invariant' IsNot Nothing clause</Description> - <Author>MaF</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - <Object Editable="true"> - <ID>expression</ID> - <ToolTip>expression that is not nothing</ToolTip> - <Default>m_X</Default> - <Function> - </Function> - </Object> - </Declarations> - <Code Language="VB" Kind="method body"><![CDATA[Contract.Invariant($expression$ IsNot Nothing)]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractinvariantnotisnullorempty.snippet b/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractinvariantnotisnullorempty.snippet deleted file mode 100644 index 6277172..0000000 --- a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractinvariantnotisnullorempty.snippet +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <SnippetTypes> - <SnippetType>Expansion</SnippetType> - </SnippetTypes> - <Title>Contract.Invariant</Title> - <Shortcut>cinvsn</Shortcut> - <Description>Emits a 'Contract.Invariant' Not String.IsNullOrEmpty clause</Description> - <Author>MaF</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - <Object Editable="true"> - <ID>expression</ID> - <ToolTip>expression that is not nothing or empty</ToolTip> - <Default>m_X</Default> - <Function> - </Function> - </Object> - </Declarations> - <Code Language="VB" Kind="method body"><![CDATA[Contract.Invariant(Not String.IsNullOrEmpty($expression$))]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractold.snippet b/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractold.snippet deleted file mode 100644 index b10586a..0000000 --- a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractold.snippet +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <Title>Contract.OldValue</Title> - <Shortcut>cold</Shortcut> - <Description>Emits a 'Contract.OldValue' expression</Description> - <Author>Manuel Fahndrich</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - <Object Editable="true"> - <ID>expression</ID> - <ToolTip>expression to be evaluated in method pre-state</ToolTip> - <Default>x</Default> - <Function> - </Function> - </Object> - </Declarations> - <Code Language="VB" Kind="any"><![CDATA[Contract.OldValue($expression$)]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractrequires.snippet b/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractrequires.snippet deleted file mode 100644 index 79aa5fd..0000000 --- a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractrequires.snippet +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <SnippetTypes> - <SnippetType>Expansion</SnippetType> - </SnippetTypes> - <Title>Contract.Requires</Title> - <Shortcut>creq</Shortcut> - <Description>Emits a 'Contract.Requires' clause</Description> - <Author>Jonathan de Halleux</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - <Object Editable="true"> - <ID>condition</ID> - <ToolTip>precondition expression</ToolTip> - <Default>False</Default> - <Function> - </Function> - </Object> - </Declarations> - <Code Language="VB" Kind="method body"><![CDATA[Contract.Requires($condition$)]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractrequiresalways.snippet b/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractrequiresalways.snippet deleted file mode 100644 index f31c27e..0000000 --- a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractrequiresalways.snippet +++ /dev/null @@ -1,38 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <SnippetTypes> - <SnippetType>Expansion</SnippetType> - </SnippetTypes> - <Title>Contract.Requires(Of Exc)(...)</Title> - <Shortcut>cre</Shortcut> - <Description>Emits a 'Contract.Requires with exception' clause</Description> - <Author>MaF</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - <Object Editable="true"> - <ID>exception</ID> - <ToolTip>Exception type</ToolTip> - <Default>ArgumentException</Default> - <Function> - </Function> - </Object> - <Object Editable="true"> - <ID>condition</ID> - <ToolTip>precondition expression</ToolTip> - <Default>False</Default> - <Function> - </Function> - </Object> - </Declarations> - <Code Language="VB" Kind="method body"><![CDATA[Contract.Requires(Of $exception$)($condition$)]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractrequiresalwaysnotisnullorempty.snippet b/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractrequiresalwaysnotisnullorempty.snippet deleted file mode 100644 index 467b10f..0000000 --- a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractrequiresalwaysnotisnullorempty.snippet +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <SnippetTypes> - <SnippetType>Expansion</SnippetType> - </SnippetTypes> - <Title>Contract.Requires(Of ArgumentException)(Not String.IsNullOrEmpty(..))</Title> - <Shortcut>cresn</Shortcut> - <Description>Emits a 'requires with exception' not IsNullOrEmpty</Description> - <Author>MaF</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - <Object Editable="true"> - <ID>variable</ID> - <ToolTip>argument name</ToolTip> - <Default>arg</Default> - <Function> - </Function> - </Object> - </Declarations> - <Code Language="VB" Kind="method body"><![CDATA[Contract.Requires(Of ArgumentException)(Not String.IsNullOrEmpty($variable$))]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractrequiresalwaysnotnull.snippet b/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractrequiresalwaysnotnull.snippet deleted file mode 100644 index c8f2b8d..0000000 --- a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractrequiresalwaysnotnull.snippet +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <SnippetTypes> - <SnippetType>Expansion</SnippetType> - </SnippetTypes> - <Title>Contract.Requires(Of ArgumentNullException)(.. IsNot Nothing)</Title> - <Shortcut>cren</Shortcut> - <Description>Emits a 'requires with ArgumentNullException' not null clause</Description> - <Author>Jonathan de Halleux</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - <Object Editable="true"> - <ID>variable</ID> - <ToolTip>variable name</ToolTip> - <Default>arg</Default> - <Function> - </Function> - </Object> - </Declarations> - <Code Language="VB" Kind="method body"><![CDATA[Contract.Requires(Of ArgumentNullException)($variable$ IsNot Nothing, "$variable$")]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractrequiresnotisnullorempty.snippet b/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractrequiresnotisnullorempty.snippet deleted file mode 100644 index f7c6b7e..0000000 --- a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractrequiresnotisnullorempty.snippet +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <SnippetTypes> - <SnippetType>Expansion</SnippetType> - </SnippetTypes> - <Title>Contract.Requires(Not IsNullOrEmpty(arg))</Title> - <Shortcut>crsn</Shortcut> - <Description>Emits a 'requires' not is null or empty clause</Description> - <Author>Jonathan de Halleux</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - <Object Editable="true"> - <ID>variable</ID> - <ToolTip>argument name</ToolTip> - <Default>arg</Default> - <Function> - </Function> - </Object> - </Declarations> - <Code Language="VB" Kind="method body"><![CDATA[Contract.Requires(Not String.IsNullOrEmpty($variable$))]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractrequiresnotnull.snippet b/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractrequiresnotnull.snippet deleted file mode 100644 index 1459a74..0000000 --- a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractrequiresnotnull.snippet +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <SnippetTypes> - <SnippetType>Expansion</SnippetType> - </SnippetTypes> - <Title>Contract.Requires(.. IsNot Nothing)</Title> - <Shortcut>crn</Shortcut> - <Description>Emits a 'requires' not null clause</Description> - <Author>Jonathan de Halleux</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - <Object Editable="true"> - <ID>variable</ID> - <ToolTip>variable name</ToolTip> - <Default>arg</Default> - <Function> - </Function> - </Object> - </Declarations> - <Code Language="VB" Kind="method body"><![CDATA[Contract.Requires($variable$ IsNot Nothing)]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractresult.snippet b/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractresult.snippet deleted file mode 100644 index 53fe39b..0000000 --- a/tools/Contracts/Languages/VisualBasic/Code Contract Snippets/contractresult.snippet +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> - <CodeSnippet Format="1.0.0"> - <Header> - <Title>Contract.Result</Title> - <Shortcut>crr</Shortcut> - <Description>Emits a 'Contract.Result' expression</Description> - <Author>Manuel Fahndrich</Author> - </Header> - <Snippet> - <Imports> - <Import> - <Namespace>System.Diagnostics.Contracts</Namespace> - </Import> - </Imports> - <Declarations> - <Object Editable="true"> - <ID>type</ID> - <ToolTip>method return type</ToolTip> - <Default>Integer</Default> - <Function> - </Function> - </Object> - </Declarations> - <Code Language="VB" Kind="any"><![CDATA[Contract.Result(Of $type$)()]]></Code> - </Snippet> - </CodeSnippet> -</CodeSnippets> diff --git a/tools/Contracts/Languages/VisualBasic/ContractDeclarativeAssemblyAttribute.vb b/tools/Contracts/Languages/VisualBasic/ContractDeclarativeAssemblyAttribute.vb deleted file mode 100644 index d1b3078..0000000 --- a/tools/Contracts/Languages/VisualBasic/ContractDeclarativeAssemblyAttribute.vb +++ /dev/null @@ -1,10 +0,0 @@ -' -' This file is included when building a contract declarative assembly -' in order to mark it as such for recognition by the tools -' -<Assembly: ContractDeclarativeAssemblyAttribute()> - -Class ContractDeclarativeAssemblyAttribute - Inherits Global.System.Attribute -End Class - diff --git a/tools/Contracts/Languages/VisualBasic/ContractExtensions.vb b/tools/Contracts/Languages/VisualBasic/ContractExtensions.vb deleted file mode 100644 index 1cbc605..0000000 --- a/tools/Contracts/Languages/VisualBasic/ContractExtensions.vb +++ /dev/null @@ -1,46 +0,0 @@ -' -' Include this file in your project if you want to use -' ContractArgumentValidator methods or ContractAbbreviator methods -' - - -''' <summary> -''' Enables factoring legacy if-then-throw into separate methods for reuse and full control over -''' thrown exception and arguments -''' </summary> -<AttributeUsage(AttributeTargets.Method, AllowMultiple:=False)> _ -<Conditional("CONTRACTS_FULL")> _ -NotInheritable Class ContractArgumentValidatorAttribute - Inherits Global.System.Attribute -End Class - -''' <summary> -''' Enables writing abbreviations for contracts that get copied to other methods -''' </summary> -<AttributeUsage(AttributeTargets.Method, AllowMultiple:=False)> _ -<Conditional("CONTRACTS_FULL")> _ -NotInheritable Class ContractAbbreviatorAttribute - Inherits Global.System.Attribute -End Class - -''' <summary> -''' Allows setting contract and tool options at assembly, type, or method granularity. -''' </summary> -<AttributeUsage(AttributeTargets.All, AllowMultiple:=True, Inherited:=False)> _ -<Conditional("CONTRACTS_FULL")> _ -NotInheritable Class ContractOptionAttribute - Inherits Global.System.Attribute - - <System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId:="category")> _ - <System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId:="setting")> _ - <System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId:="toggle")> _ - Public Sub New(ByVal category As String, ByVal setting As String, ByVal toggle As Boolean) - End Sub - - <System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId:="category")> _ - <System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId:="setting")> _ - <System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId:="value")> _ - Public Sub New(ByVal category As String, ByVal setting As String, ByVal value As String) - End Sub - -End Class diff --git a/tools/Contracts/License.rtf b/tools/Contracts/License.rtf deleted file mode 100644 index 960f819..0000000 --- a/tools/Contracts/License.rtf +++ /dev/null @@ -1,749 +0,0 @@ -{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff38\deff0\stshfdbch11\stshfloch0\stshfhich0\stshfbi0\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;} -{\f3\fbidi \froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f10\fbidi \fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;} -{\f11\fbidi \fmodern\fcharset128\fprq1{\*\panose 02020609040205080304}MS Mincho{\*\falt \'82\'6c\'82\'72 \'96\'be\'92\'a9};}{\f13\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt \'cb\'ce\'cc\'e5};} -{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;}{\f36\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;}{\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;} -{\f38\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Tahoma;}{\f39\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0603020202020204}Trebuchet MS;}{\f40\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}@SimSun;} -{\f41\fbidi \fmodern\fcharset128\fprq1{\*\panose 02020609040205080304}@MS Mincho;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} -{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;} -{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} -{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;} -{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f42\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f43\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} -{\f45\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f46\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f47\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f48\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} -{\f49\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f50\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f62\fbidi \fmodern\fcharset238\fprq1 Courier New CE;}{\f63\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;} -{\f65\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f66\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f67\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f68\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);} -{\f69\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f70\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);}{\f154\fbidi \fmodern\fcharset0\fprq1 MS Mincho Western{\*\falt \'82\'6c\'82\'72 \'96\'be\'92\'a9};} -{\f152\fbidi \fmodern\fcharset238\fprq1 MS Mincho CE{\*\falt \'82\'6c\'82\'72 \'96\'be\'92\'a9};}{\f153\fbidi \fmodern\fcharset204\fprq1 MS Mincho Cyr{\*\falt \'82\'6c\'82\'72 \'96\'be\'92\'a9};} -{\f155\fbidi \fmodern\fcharset161\fprq1 MS Mincho Greek{\*\falt \'82\'6c\'82\'72 \'96\'be\'92\'a9};}{\f156\fbidi \fmodern\fcharset162\fprq1 MS Mincho Tur{\*\falt \'82\'6c\'82\'72 \'96\'be\'92\'a9};} -{\f159\fbidi \fmodern\fcharset186\fprq1 MS Mincho Baltic{\*\falt \'82\'6c\'82\'72 \'96\'be\'92\'a9};}{\f174\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt \'cb\'ce\'cc\'e5};}{\f382\fbidi \froman\fcharset238\fprq2 Cambria Math CE;} -{\f383\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}{\f385\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f386\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f389\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;} -{\f402\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\f403\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}{\f405\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\f406\fbidi \froman\fcharset162\fprq2 Cambria Tur;} -{\f409\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\f412\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f413\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\f415\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;} -{\f416\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\f419\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f422\fbidi \fswiss\fcharset238\fprq2 Tahoma CE;}{\f423\fbidi \fswiss\fcharset204\fprq2 Tahoma Cyr;} -{\f425\fbidi \fswiss\fcharset161\fprq2 Tahoma Greek;}{\f426\fbidi \fswiss\fcharset162\fprq2 Tahoma Tur;}{\f427\fbidi \fswiss\fcharset177\fprq2 Tahoma (Hebrew);}{\f428\fbidi \fswiss\fcharset178\fprq2 Tahoma (Arabic);} -{\f429\fbidi \fswiss\fcharset186\fprq2 Tahoma Baltic;}{\f430\fbidi \fswiss\fcharset163\fprq2 Tahoma (Vietnamese);}{\f431\fbidi \fswiss\fcharset222\fprq2 Tahoma (Thai);}{\f432\fbidi \fswiss\fcharset238\fprq2 Trebuchet MS CE;} -{\f433\fbidi \fswiss\fcharset204\fprq2 Trebuchet MS Cyr;}{\f435\fbidi \fswiss\fcharset161\fprq2 Trebuchet MS Greek;}{\f436\fbidi \fswiss\fcharset162\fprq2 Trebuchet MS Tur;}{\f439\fbidi \fswiss\fcharset186\fprq2 Trebuchet MS Baltic;} -{\f444\fbidi \fnil\fcharset0\fprq2 @SimSun Western;}{\f454\fbidi \fmodern\fcharset0\fprq1 @MS Mincho Western;}{\f452\fbidi \fmodern\fcharset238\fprq1 @MS Mincho CE;}{\f453\fbidi \fmodern\fcharset204\fprq1 @MS Mincho Cyr;} -{\f455\fbidi \fmodern\fcharset161\fprq1 @MS Mincho Greek;}{\f456\fbidi \fmodern\fcharset162\fprq1 @MS Mincho Tur;}{\f459\fbidi \fmodern\fcharset186\fprq1 @MS Mincho Baltic;}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} -{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} -{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} -{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} -{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} -{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} -{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;} -{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} -{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} -{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} -{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} -{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} -{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} -{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} -{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} -{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;} -{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;} -{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} -{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} -{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0; -\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128; -\red192\green192\blue192;}{\*\defchp \dbch\af11 }{\*\defpap \ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{ -\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 -\snext0 \sautoupd \sqformat \spriority0 \styrsid4141243 Normal;}{\s1\ql \fi-357\li357\ri0\sb120\sa120\widctlpar\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls17\outlinelevel0\adjustright\rin0\lin357\itap0 \rtlch\fcs1 \ab\af38\afs19\alang1025 -\ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext1 \slink15 \sqformat \styrsid4141243 heading 1;}{\s2\ql \fi-363\li720\ri0\sb120\sa120\widctlpar -\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls17\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0 \rtlch\fcs1 \ab\af38\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 -\sbasedon0 \snext2 \slink16 \sqformat \styrsid4141243 heading 2;}{\s3\ql \fi-357\li1077\ri0\sb120\sa120\widctlpar\tx1077\jclisttab\tx1440\wrapdefault\aspalpha\aspnum\faauto\ls17\ilvl2\outlinelevel2\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 -\af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext3 \slink17 \sqformat \styrsid4141243 heading 3;}{\s4\ql \fi-358\li1435\ri0\sb120\sa120\widctlpar -\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls17\ilvl3\outlinelevel3\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 -\sbasedon0 \snext4 \slink18 \sqformat \styrsid4141243 heading 4;}{\s5\ql \fi-357\li1792\ri0\sb120\sa120\widctlpar\tx1792\jclisttab\tx2155\wrapdefault\aspalpha\aspnum\faauto\ls17\ilvl4\outlinelevel4\adjustright\rin0\lin1792\itap0 \rtlch\fcs1 -\af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext5 \slink19 \sqformat \styrsid4141243 heading 5;}{\s6\ql \fi-357\li2149\ri0\sb120\sa120\widctlpar -\jclisttab\tx2152\wrapdefault\aspalpha\aspnum\faauto\ls17\ilvl5\outlinelevel5\adjustright\rin0\lin2149\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 -\sbasedon0 \snext6 \slink20 \sqformat \styrsid4141243 heading 6;}{\s7\ql \fi-357\li2506\ri0\sb120\sa120\widctlpar\jclisttab\tx2509\wrapdefault\aspalpha\aspnum\faauto\ls17\ilvl6\outlinelevel6\adjustright\rin0\lin2506\itap0 \rtlch\fcs1 -\af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext7 \slink21 \sqformat \styrsid4141243 heading 7;}{\s8\ql \fi-357\li2863\ri0\sb120\sa120\widctlpar -\jclisttab\tx2866\wrapdefault\aspalpha\aspnum\faauto\ls17\ilvl7\outlinelevel7\adjustright\rin0\lin2863\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 -\sbasedon0 \snext8 \slink22 \sqformat \styrsid4141243 heading 8;}{\s9\ql \fi-358\li3221\ri0\sb120\sa120\widctlpar\jclisttab\tx3223\wrapdefault\aspalpha\aspnum\faauto\ls17\ilvl8\outlinelevel8\adjustright\rin0\lin3221\itap0 \rtlch\fcs1 -\af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext9 \slink23 \sqformat \styrsid4141243 heading 9;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 -Default Paragraph Font;}{\*\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv -\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1033\loch\f0\hich\af0\dbch\af11\cgrid\langnp1033\langfenp1033 -\snext11 \ssemihidden \sunhideused \sqformat Normal Table;}{\*\cs15 \additive \rtlch\fcs1 \ab\af0\afs32 \ltrch\fcs0 \b\f36\fs32\kerning32 \sbasedon10 \slink1 \slocked \spriority9 \styrsid4141243 Heading 1 Char;}{\*\cs16 \additive \rtlch\fcs1 \ab\af38 -\ltrch\fcs0 \b\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\langnp1033\langfenp1033 \sbasedon10 \slink2 \slocked \styrsid4141243 Heading 2 Char;}{\*\cs17 \additive \rtlch\fcs1 \ab\af0\afs26 \ltrch\fcs0 \b\f36\fs26 -\sbasedon10 \slink3 \slocked \ssemihidden \spriority9 \styrsid4141243 Heading 3 Char;}{\*\cs18 \additive \rtlch\fcs1 \ab\af0\afs28 \ltrch\fcs0 \b\f37\fs28 \sbasedon10 \slink4 \slocked \ssemihidden \spriority9 \styrsid4141243 Heading 4 Char;}{\*\cs19 -\additive \rtlch\fcs1 \ab\ai\af0\afs26 \ltrch\fcs0 \b\i\f37\fs26 \sbasedon10 \slink5 \slocked \ssemihidden \spriority9 \styrsid4141243 Heading 5 Char;}{\*\cs20 \additive \rtlch\fcs1 \ab\af0 \ltrch\fcs0 \b\f37 -\sbasedon10 \slink6 \slocked \ssemihidden \spriority9 \styrsid4141243 Heading 6 Char;}{\*\cs21 \additive \rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f37\fs24 \sbasedon10 \slink7 \slocked \ssemihidden \spriority9 \styrsid4141243 Heading 7 Char;}{\*\cs22 \additive -\rtlch\fcs1 \ai\af0\afs24 \ltrch\fcs0 \i\f37\fs24 \sbasedon10 \slink8 \slocked \ssemihidden \spriority9 \styrsid4141243 Heading 8 Char;}{\*\cs23 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \f36 -\sbasedon10 \slink9 \slocked \ssemihidden \spriority9 \styrsid4141243 Heading 9 Char;}{\s24\ql \li357\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin357\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 -\fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext24 \styrsid4141243 Body 1;}{\s25\ql \li720\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\itap0 \rtlch\fcs1 -\af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext25 \styrsid4141243 Body 2;}{ -\s26\ql \li1077\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 -\sbasedon0 \snext26 \styrsid4141243 Body 3;}{\s27\ql \li1435\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 -\fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext27 \styrsid4141243 Body 4;}{\s28\ql \li1803\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin1803\itap0 \rtlch\fcs1 -\af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext28 \styrsid4141243 Body 5;}{ -\s29\ql \li2160\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin2160\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 -\sbasedon0 \snext29 \styrsid4141243 Body 6;}{\s30\ql \li2506\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin2506\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 -\fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext30 \styrsid4141243 Body 7;}{\s31\ql \li2863\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin2863\itap0 \rtlch\fcs1 -\af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext31 \styrsid4141243 Body 8;}{ -\s32\ql \li3221\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin3221\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 -\sbasedon0 \snext32 \styrsid4141243 Body 9;}{\s33\ql \fi-357\li357\ri0\sb120\sa120\widctlpar\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin357\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 -\fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext33 \styrsid4141243 Bullet 1;}{\s34\ql \fi-363\li720\ri0\sb120\sa120\widctlpar -\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin720\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext34 \styrsid4141243 -Bullet 2;}{\s35\ql \fi-357\li1077\ri0\sb120\sa120\widctlpar\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 -\fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext35 \styrsid4141243 Bullet 3;}{\s36\ql \fi-358\li1435\ri0\sb120\sa120\widctlpar -\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls4\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext36 \styrsid4141243 -Bullet 4;}{\s37\ql \fi-357\li1792\ri0\sb120\sa120\widctlpar\jclisttab\tx1795\wrapdefault\aspalpha\aspnum\faauto\ls5\adjustright\rin0\lin1792\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 -\fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext37 \styrsid4141243 Bullet 5;}{\s38\ql \fi-357\li2149\ri0\sb120\sa120\widctlpar -\jclisttab\tx2152\wrapdefault\aspalpha\aspnum\faauto\ls6\adjustright\rin0\lin2149\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext38 \styrsid4141243 -Bullet 6;}{\s39\ql \fi-357\li2506\ri0\sb120\sa120\widctlpar\jclisttab\tx2509\wrapdefault\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin2506\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 -\fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext39 \styrsid4141243 Bullet 7;}{\s40\ql \fi-357\li2863\ri0\sb120\sa120\widctlpar -\jclisttab\tx2866\wrapdefault\aspalpha\aspnum\faauto\ls8\adjustright\rin0\lin2863\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext40 \styrsid4141243 -Bullet 8;}{\s41\ql \fi-358\li3221\ri0\sb120\sa120\widctlpar\jclisttab\tx3223\wrapdefault\aspalpha\aspnum\faauto\ls9\adjustright\rin0\lin3221\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 -\fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon32 \snext41 \styrsid4141243 Bullet 9;}{\s42\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 -\ab\af38\afs28\alang1025 \ltrch\fcs0 \b\fs28\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 \styrsid4141243 Heading EULA;}{\s43\ql \li0\ri0\sb120\sa120\widctlpar\brdrb\brdrs\brdrw10\brsp20 -\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af38\afs28\alang1025 \ltrch\fcs0 \b\fs28\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 \styrsid4141243 -Heading Software Title;}{\s44\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af38\afs19\alang1025 \ltrch\fcs0 -\b\fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext44 \styrsid4141243 Preamble;}{\s45\ql \li0\ri0\sb120\sa120\widctlpar\brdrb\brdrs\brdrw10\brsp20 -\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af38\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext1 \styrsid4141243 Preamble Border;}{ -\s46\qc \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af38\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 -\sbasedon0 \snext46 \styrsid4141243 Heading Warranty;}{\s47\ql \fi-360\li360\ri0\sb120\sa120\widctlpar\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls11\outlinelevel0\adjustright\rin0\lin360\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 -\fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 \styrsid4141243 Heading 1 Warranty;}{\s48\ql \fi-360\li720\ri0\sb120\sa120\widctlpar -\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls11\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 -\sbasedon0 \snext0 \styrsid4141243 Heading 2 Warranty;}{\s49\ql \fi-357\li1077\ri0\sb120\sa120\widctlpar\tx1077\jclisttab\tx1440\wrapdefault\aspalpha\aspnum\faauto\ls10\ilvl2\outlinelevel2\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 -\ab\af38\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon3 \snext49 \styrsid4141243 Heading 3 Bold;}{\s50\ql \fi-358\li1435\ri0\sb120\sa120\widctlpar -\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls4\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 \fs19\ul\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 -\sbasedon36 \snext50 \styrsid4141243 Bullet 4 Underline;}{\s51\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 -\fs19\ul\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon35 \snext51 \styrsid4141243 Bullet 3 Underline;}{\s52\ql \li720\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\itap0 -\rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 \fs19\ul\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon25 \snext52 \styrsid4141243 Body 2 Underline;}{ -\s53\ql \li1077\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 \fs19\ul\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 -\sbasedon26 \snext53 \styrsid4141243 Body 3 Underline;}{\s54\ql \li0\ri0\sb120\sa120\sl480\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 -\fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext54 \slink55 \styrsid4141243 Body Text Indent;}{\*\cs55 \additive \rtlch\fcs1 \af38\afs19 \ltrch\fcs0 \f38\fs19 -\sbasedon10 \slink54 \slocked \ssemihidden \styrsid4141243 Body Text Indent Char;}{\s56\ql \fi-358\li1435\ri0\sb120\sa120\widctlpar\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls4\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 -\ai\af38\afs19\alang1025 \ltrch\fcs0 \i\fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon36 \snext56 \styrsid4141243 Bullet 4 Italics;}{\*\cs57 \additive \rtlch\fcs1 \af38 \ltrch\fcs0 -\f38\lang1033\langfe1033\langnp1033\langfenp1033 \sbasedon10 \styrsid4141243 Body 2 Char;}{\*\cs58 \additive \rtlch\fcs1 \af38 \ltrch\fcs0 \f38\lang1033\langfe1033\langnp1033\langfenp1033 \sbasedon10 \styrsid4141243 Body 3 Char;}{\*\cs59 \additive -\rtlch\fcs1 \af38 \ltrch\fcs0 \f38\lang1033\langfe1033\langnp1033\langfenp1033 \sbasedon10 \styrsid4141243 Body 4 Char;}{\*\cs60 \additive \rtlch\fcs1 \af38 \ltrch\fcs0 \f38\lang1033\langfe1033\langnp1033\langfenp1033 \sbasedon10 \styrsid4141243 -Body 1 Char;}{\s61\ql \li0\ri0\sb120\sa120\widctlpar\brdrt\brdrs\brdrw10\brsp20 \wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af38\afs19\alang1025 \ltrch\fcs0 -\b\fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon44 \snext61 \styrsid4141243 Preamble Border Above;}{\s62\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 -\rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext62 \slink63 \ssemihidden \styrsid4141243 footnote text;}{\*\cs63 \additive \rtlch\fcs1 \af38\afs20 -\ltrch\fcs0 \f38\fs20 \sbasedon10 \slink62 \slocked \ssemihidden \styrsid4141243 Footnote Text Char;}{\*\cs64 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \super \sbasedon10 \ssemihidden \styrsid4141243 footnote reference;}{ -\s65\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 -\sbasedon0 \snext65 \slink66 \ssemihidden \styrsid4141243 endnote text;}{\*\cs66 \additive \rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \f38\fs20 \sbasedon10 \slink65 \slocked \ssemihidden \styrsid4141243 Endnote Text Char;}{\*\cs67 \additive \rtlch\fcs1 \af0 -\ltrch\fcs0 \super \sbasedon10 \ssemihidden \styrsid4141243 endnote reference;}{\s68\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 -\fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext68 \slink69 \ssemihidden \styrsid4141243 annotation text;}{\*\cs69 \additive \rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \f38\fs20 -\sbasedon10 \slink68 \slocked \ssemihidden \styrsid4141243 Comment Text Char;}{\*\cs70 \additive \rtlch\fcs1 \af0\afs16 \ltrch\fcs0 \fs16 \sbasedon10 \ssemihidden \styrsid4141243 annotation reference;}{\s71\ql \li0\ri0\sa160\sl-240\slmult0 -\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext71 \styrsid4141243 Char;}{ -\s72\ql \li0\ri0\sa160\sl-240\slmult0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 -\sbasedon0 \snext72 \styrsid4141243 Char Char Char Char;}{\*\cs73 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf2 \sbasedon10 \styrsid4141243 Hyperlink;}{\s74\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 -\rtlch\fcs1 \af38\afs16\alang1025 \ltrch\fcs0 \fs16\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext74 \slink75 \ssemihidden \styrsid4141243 Balloon Text;}{\*\cs75 \additive \rtlch\fcs1 \af38\afs16 -\ltrch\fcs0 \f38\fs16 \sbasedon10 \slink74 \slocked \ssemihidden \styrsid4141243 Balloon Text Char;}{\*\cs76 \additive \rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang1033\langfe1033\langnp1033\langfenp1033 \sbasedon10 \styrsid4141243 Heading 2 Char1;}{\* -\cs77 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \sbasedon10 \styrsid4141243 page number;}{\s78\ql \li0\ri0\sa160\sl-240\slmult0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 -\fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext78 \styrsid4141243 Char Char Char Char1;}{\s79\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 -\ab\af38\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \snext0 \styrsid8999754 Body 0 Bold;}{\s80\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 -\rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 \snext0 \styrsid8999754 Body 0;}{\s81\ql \li0\ri0\sb120\sa120\widctlpar -\tqc\tx4320\tqr\tx8640\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 -\sbasedon0 \snext81 \slink82 \styrsid11496811 header;}{\*\cs82 \additive \rtlch\fcs1 \af38\afs19 \ltrch\fcs0 \f38\fs19 \sbasedon10 \slink81 \slocked \ssemihidden \styrsid4141243 Header Char;}{\s83\ql \li0\ri0\sb120\sa120\widctlpar -\tqc\tx4320\tqr\tx8640\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 -\sbasedon0 \snext83 \slink84 \styrsid11496811 footer;}{\*\cs84 \additive \rtlch\fcs1 \af38\afs19 \ltrch\fcs0 \f38\fs19 \sbasedon10 \slink83 \slocked \ssemihidden \styrsid4141243 Footer Char;}}{\*\listtable{\list\listtemplateid176468498\listhybrid -{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid692200086\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \s41\fi-358\li3221\jclisttab\tx3223\lin3221 }{\listlevel -\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23 -\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0 -\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 -\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 -\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1 -\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 -\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext -\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid196815738}{\list\listtemplateid-1793664660{\listlevel\levelnfc3\levelnfcn3\leveljc0\leveljcn0\levelfollow0 -\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af0 \ltrch\fcs0 \b\i0\fbias0\hres0\chhres0 \s47\fi-360\li360\jclisttab\tx360\lin360 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0 -\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af0 \ltrch\fcs0 \b\i0\fbias0\hres0\chhres0 \s48\fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0 -\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02);}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0\hres0\chhres0 \fi-360\li1080\jclisttab\tx1080\lin1080 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1 -\levelspace0\levelindent0{\leveltext\'03(\'03);}{\levelnumbers\'02;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 -\levelindent0{\leveltext\'03(\'04);}{\levelnumbers\'02;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0\hres0\chhres0 \fi-360\li1800\jclisttab\tx1800\lin1800 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 -{\leveltext\'03(\'05);}{\levelnumbers\'02;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0\hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext -\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0\hres0\chhres0 \fi-360\li2520\jclisttab\tx2520\lin2520 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext -\'02\'07.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext -\'02\'08.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0\hres0\chhres0 \fi-360\li3240\jclisttab\tx3240\lin3240 }{\listname ;}\listid394402059}{\list\listtemplateid1928476992{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0 -\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af39\afs20 \ltrch\fcs0 \b\i0\f39\fs20\fbias0\hres0\chhres0 \fi-357\li357\jclisttab\tx360\lin357 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0 -\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af39\afs20 \ltrch\fcs0 \b\i0\f39\fs20\fbias0\hres0\chhres0 \fi-363\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc0 -\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af38\afs20 \ltrch\fcs0 \b\i0\f38\fs20\fbias0\hres0\chhres0 \s49\fi-357\li1077\jclisttab\tx1440\lin1077 }{\listlevel\levelnfc3 -\levelnfcn3\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\strike0\f39\fs20\ulnone\fbias0\hres0\chhres0 \fi-358\li1435 -\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc1\levelnfcn1\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 -\b0\i0\strike0\f39\fs20\ulnone\fbias0\hres0\chhres0 \fi-357\li1792\jclisttab\tx2155\lin1792 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 -\ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0\hres0\chhres0 \fi-357\li2149\jclisttab\tx2152\lin2149 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;} -\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0\hres0\chhres0 \fi-357\li2506\jclisttab\tx2509\lin2506 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext -\'02i.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0\hres0\chhres0 \fi-357\li2863\jclisttab\tx2866\lin2863 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 -{\leveltext\'02A.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0\hres0\chhres0 \fi-358\li3221\jclisttab\tx3223\lin3221 }{\listname ;}\listid398796681}{\list\listtemplateid789093748\listhybrid{\listlevel\levelnfc23 -\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid-317712510\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \s34\fi-363\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23 -\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 -\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 -\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1 -\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 -{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext -\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext -\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693 -\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid477573462}{\list\listtemplateid1948578256{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 -\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af39\afs20 \ltrch\fcs0 \b\i0\f39\fs20\fbias0\hres0\chhres0 \fi-357\li357\jclisttab\tx360\lin357 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1 -\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af0\afs20 \ltrch\fcs0 \b\i0\fs20\fbias0\hres0\chhres0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0 -\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0\hres0\chhres0 \fi-357\li1077\jclisttab\tx1440\lin1077 }{\listlevel\levelnfc3\levelnfcn3\leveljc0\leveljcn0 -\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\strike0\f39\fs20\ulnone\fbias0\hres0\chhres0 \fi-358\li1435\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc1 -\levelnfcn1\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\strike0\f39\fs20\ulnone\fbias0\hres0\chhres0 \fi-357\li1792 -\jclisttab\tx2155\lin1792 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0\hres0\chhres0 -\fi-357\li2149\jclisttab\tx2152\lin2149 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 -\b0\i0\f39\fs20\fbias0\hres0\chhres0 \fi-357\li2506\jclisttab\tx2509\lin2506 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02i.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af39\afs20 -\ltrch\fcs0 \b0\i0\f39\fs20\fbias0\hres0\chhres0 \fi-357\li2863\jclisttab\tx2866\lin2863 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02A.;}{\levelnumbers;}\rtlch\fcs1 -\ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0\hres0\chhres0 \fi-358\li3221\jclisttab\tx3223\lin3221 }{\listname ;}\listid630479929}{\list\listtemplateid67698717{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1 -\levelspace0\levelindent0{\leveltext\'02\'00);}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li360\jclisttab\tx360\lin360 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 -{\leveltext\'02\'01);}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext -\'02\'02);}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li1080\jclisttab\tx1080\lin1080 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext -\'03(\'03);}{\levelnumbers\'02;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext -\'03(\'04);}{\levelnumbers\'02;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li1800\jclisttab\tx1800\lin1800 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext -\'03(\'05);}{\levelnumbers\'02;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext -\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li2520\jclisttab\tx2520\lin2520 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'07.;}{\levelnumbers -\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'08.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 -\ltrch\fcs0 \hres0\chhres0 \fi-360\li3240\jclisttab\tx3240\lin3240 }{\listname ;}\listid700712945}{\list\listtemplateid-53848358{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext -\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af38\afs20 \ltrch\fcs0 \b\i0\f38\fs20\fbias0\hres0\chhres0 \s1\fi-357\li357\jclisttab\tx360\lin357 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 -{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af38\afs20 \ltrch\fcs0 \b\i0\f38\fs20\fbias0\hres0\chhres0 \s2\fi-363\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 -\levelindent0{\leveltext\'02\'02.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af38\afs20 \ltrch\fcs0 \b\i0\f38\fs20\fbias0\hres0\chhres0 \s3\fi-357\li1077\jclisttab\tx1440\lin1077 }{\listlevel\levelnfc3\levelnfcn3\leveljc0\leveljcn0\levelfollow0 -\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\strike0\f39\fs20\ulnone\fbias0\hres0\chhres0 \s4\fi-358\li1435\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc1\levelnfcn1 -\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\strike0\f39\fs20\ulnone\fbias0\hres0\chhres0 \s5\fi-357\li1792\jclisttab\tx2155\lin1792 } -{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0\hres0\chhres0 \s6\fi-357\li2149 -\jclisttab\tx2152\lin2149 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0\hres0\chhres0 -\s7\fi-357\li2506\jclisttab\tx2509\lin2506 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02i.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 -\b0\i0\f39\fs20\fbias0\hres0\chhres0 \s8\fi-357\li2863\jclisttab\tx2866\lin2863 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02A.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af39\afs20 -\ltrch\fcs0 \b0\i0\f39\fs20\fbias0\hres0\chhres0 \s9\fi-358\li3221\jclisttab\tx3223\lin3221 }{\listname ;}\listid752163927}{\list\listtemplateid2088029282{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 -\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af39\afs20 \ltrch\fcs0 \b\i0\f39\fs20\fbias0\hres0\chhres0 \fi-357\li357\jclisttab\tx360\lin357 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1 -\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af39\afs20 \ltrch\fcs0 \b\i0\f39\fs20\fbias0\hres0\chhres0 \fi-363\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0 -\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af38\afs20 \ltrch\fcs0 \b\i0\f38\fs20\fbias0\hres0\chhres0 \fi-357\li1077\jclisttab\tx1440\lin1077 }{\listlevel\levelnfc3\levelnfcn3\leveljc0\leveljcn0 -\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\strike0\f39\fs20\ulnone\fbias0\hres0\chhres0 \fi-358\li1435\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc1 -\levelnfcn1\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\strike0\f39\fs20\ulnone\fbias0\hres0\chhres0 \fi-357\li1792 -\jclisttab\tx2155\lin1792 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0\hres0\chhres0 -\fi-357\li2149\jclisttab\tx2152\lin2149 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 -\b0\i0\f39\fs20\fbias0\hres0\chhres0 \fi-357\li2506\jclisttab\tx2509\lin2506 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02i.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af39\afs20 -\ltrch\fcs0 \b0\i0\f39\fs20\fbias0\hres0\chhres0 \fi-357\li2863\jclisttab\tx2866\lin2863 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02A.;}{\levelnumbers;}\rtlch\fcs1 -\ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0\hres0\chhres0 \fi-358\li3221\jclisttab\tx3223\lin3221 }{\listname ;}\listid800729109}{\list\listtemplateid-296591990\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 -\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \s40\fi-357\li2863\jclisttab\tx2866\lin2863 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 -\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext -\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;} -\f3\fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600 -\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel -\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 -\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 -\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid810947713}{\list\listtemplateid1567531878{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0 -\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af39\afs20 \ltrch\fcs0 \b\i0\f39\fs20\fbias0\hres0\chhres0 \fi-357\li357\jclisttab\tx360\lin357 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0 -\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af39\afs20 \ltrch\fcs0 \b\i0\f39\fs20\fbias0\hres0\chhres0 \fi-363\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc0 -\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0\hres0\chhres0 \fi-357\li1077\jclisttab\tx1440\lin1077 }{\listlevel\levelnfc3 -\levelnfcn3\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\strike0\f39\fs20\ulnone\fbias0\hres0\chhres0 \fi-358\li1435 -\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc1\levelnfcn1\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 -\b0\i0\strike0\f39\fs20\ulnone\fbias0\hres0\chhres0 \fi-357\li1792\jclisttab\tx2155\lin1792 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 -\ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0\hres0\chhres0 \fi-357\li2149\jclisttab\tx2152\lin2149 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;} -\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0\hres0\chhres0 \fi-357\li2506\jclisttab\tx2509\lin2506 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext -\'02i.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0\hres0\chhres0 \fi-357\li2863\jclisttab\tx2866\lin2863 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 -{\leveltext\'02A.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0\hres0\chhres0 \fi-358\li3221\jclisttab\tx3223\lin3221 }{\listname ;}\listid826823576}{\list\listtemplateid2088029282{\listlevel\levelnfc0\levelnfcn0 -\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af39\afs20 \ltrch\fcs0 \b\i0\f39\fs20\fbias0\hres0\chhres0 \fi-357\li357\jclisttab\tx360\lin357 }{\listlevel\levelnfc4 -\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af39\afs20 \ltrch\fcs0 \b\i0\f39\fs20\fbias0\hres0\chhres0 \fi-363\li720\jclisttab\tx720\lin720 }{\listlevel -\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af38\afs20 \ltrch\fcs0 \b\i0\f38\fs20\fbias0\hres0\chhres0 \fi-357\li1077\jclisttab\tx1440\lin1077 } -{\listlevel\levelnfc3\levelnfcn3\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\strike0\f39\fs20\ulnone\fbias0\hres0\chhres0 \fi-358\li1435 -\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc1\levelnfcn1\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 -\b0\i0\strike0\f39\fs20\ulnone\fbias0\hres0\chhres0 \fi-357\li1792\jclisttab\tx2155\lin1792 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 -\ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0\hres0\chhres0 \fi-357\li2149\jclisttab\tx2152\lin2149 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;} -\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0\hres0\chhres0 \fi-357\li2506\jclisttab\tx2509\lin2506 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext -\'02i.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0\hres0\chhres0 \fi-357\li2863\jclisttab\tx2866\lin2863 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 -{\leveltext\'02A.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0\hres0\chhres0 \fi-358\li3221\jclisttab\tx3223\lin3221 }{\listname ;}\listid974869818}{\list\listtemplateid-1813845996\listhybrid{\listlevel\levelnfc23 -\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \s39\fi-357\li2506\jclisttab\tx2509\lin2506 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 -\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 -\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext -\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;} -\f2\fbias0\hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320 -\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel -\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 -\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1219436735}{\list\listtemplateid-41362566\listhybrid{\listlevel\levelnfc23 -\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \s36\fi-358\li1435\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 -\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 -\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext -\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;} -\f2\fbias0\hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320 -\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel -\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 -\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1559511898}{\list\listtemplateid-743794326\listhybrid{\listlevel -\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid2033377338\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \s35\fi-357\li1077\jclisttab\tx1080\lin1077 }{\listlevel\levelnfc23 -\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0 -\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 -\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 -\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 -\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 -{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext -\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693 -\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1567649130}{\list\listtemplateid1363474438\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1 -\levelspace0\levelindent0{\leveltext\leveltemplateid-1175557160\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \s37\fi-357\li1792\jclisttab\tx1795\lin1792 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1 -\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 -{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext -\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext -\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693 -\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689 -\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691 -\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693 -\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1848404271}{\list\listtemplateid-1802592190\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1 -\levelspace0\levelindent0{\leveltext\leveltemplateid1229593488\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \s38\fi-357\li2149\jclisttab\tx2152\lin2149 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 -\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext -\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext -\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext -\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693 -\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689 -\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691 -\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693 -\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1877695764}{\list\listtemplateid1186249844\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1 -\levelspace0\levelindent0{\leveltext\leveltemplateid1637229796\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \s33\fi-357\li357\jclisttab\tx360\lin357 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 -\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext -\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext -\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext -\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693 -\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689 -\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691 -\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693 -\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid2054619191}}{\*\listoverridetable{\listoverride\listid2054619191\listoverridecount0\ls1}{\listoverride\listid477573462 -\listoverridecount0\ls2}{\listoverride\listid1567649130\listoverridecount0\ls3}{\listoverride\listid1559511898\listoverridecount0\ls4}{\listoverride\listid1848404271\listoverridecount0\ls5}{\listoverride\listid1877695764\listoverridecount0\ls6} -{\listoverride\listid1219436735\listoverridecount0\ls7}{\listoverride\listid810947713\listoverridecount0\ls8}{\listoverride\listid196815738\listoverridecount0\ls9}{\listoverride\listid398796681\listoverridecount0\ls10}{\listoverride\listid394402059 -\listoverridecount0\ls11}{\listoverride\listid700712945\listoverridecount0\ls12}{\listoverride\listid826823576\listoverridecount0\ls13}{\listoverride\listid630479929\listoverridecount0\ls14}{\listoverride\listid800729109\listoverridecount0\ls15} -{\listoverride\listid974869818\listoverridecount0\ls16}{\listoverride\listid752163927\listoverridecount0\ls17}{\listoverride\listid398796681\listoverridecount0\ls18}{\listoverride\listid398796681\listoverridecount0\ls19}{\listoverride\listid477573462 -\listoverridecount0\ls20}}{\*\rsidtbl \rsid17701\rsid72953\rsid200783\rsid222748\rsid345491\rsid480810\rsid535495\rsid555183\rsid676065\rsid745150\rsid787759\rsid986785\rsid1009112\rsid1012355\rsid1070219\rsid1122066\rsid1182701\rsid1206375\rsid1245853 -\rsid1342505\rsid1528414\rsid1529837\rsid1591306\rsid1722062\rsid1790012\rsid1800865\rsid1845488\rsid1901753\rsid1987218\rsid2173756\rsid2239916\rsid2571685\rsid2584538\rsid2765700\rsid2775782\rsid2781980\rsid2784514\rsid2818569\rsid2830425\rsid2962852 -\rsid3042060\rsid3162620\rsid3163049\rsid3370445\rsid3411320\rsid3411753\rsid3416253\rsid3439038\rsid3475551\rsid3611186\rsid3689565\rsid3739474\rsid3806252\rsid4022155\rsid4023230\rsid4141243\rsid4144829\rsid4202022\rsid4259872\rsid4287357\rsid4287841 -\rsid4595328\rsid4738534\rsid4739523\rsid4793230\rsid4814690\rsid4865423\rsid4878548\rsid4995346\rsid5010248\rsid5062678\rsid5140435\rsid5185544\rsid5250241\rsid5405299\rsid5450553\rsid5459775\rsid5519492\rsid5525537\rsid5660926\rsid5718961\rsid5773282 -\rsid5788093\rsid5840382\rsid5901771\rsid6033147\rsid6042923\rsid6119652\rsid6184270\rsid6227403\rsid6231754\rsid6304161\rsid6365404\rsid6373957\rsid6425843\rsid6453852\rsid6492030\rsid6498245\rsid6506467\rsid6647886\rsid6758513\rsid6888647\rsid6889714 -\rsid6971210\rsid7028642\rsid7100767\rsid7226971\rsid7282236\rsid7290457\rsid7345747\rsid7428746\rsid7433926\rsid7438204\rsid7495929\rsid7544483\rsid7554964\rsid7619174\rsid7692510\rsid7754893\rsid7800249\rsid7878867\rsid8004214\rsid8132403\rsid8197303 -\rsid8214982\rsid8259998\rsid8324055\rsid8325040\rsid8419363\rsid8458805\rsid8545132\rsid8671477\rsid8679719\rsid8738620\rsid8745808\rsid8812012\rsid8857738\rsid8858237\rsid8990244\rsid8999754\rsid9071447\rsid9130596\rsid9203972\rsid9261549\rsid9321702 -\rsid9526807\rsid9649378\rsid9651656\rsid9664357\rsid9778027\rsid9796909\rsid9857610\rsid9860938\rsid9861873\rsid9964378\rsid10171790\rsid10179250\rsid10294454\rsid10749433\rsid10813938\rsid10882308\rsid10955317\rsid11084414\rsid11142543\rsid11347136 -\rsid11432977\rsid11496811\rsid11498068\rsid11622420\rsid11672016\rsid11686297\rsid11695497\rsid11754382\rsid11874088\rsid11882246\rsid11937164\rsid12000701\rsid12015935\rsid12020896\rsid12065226\rsid12199483\rsid12222130\rsid12255436\rsid12407360 -\rsid12585274\rsid12596065\rsid12664082\rsid12722678\rsid12797652\rsid12798176\rsid12913505\rsid13136677\rsid13309404\rsid13334496\rsid13388123\rsid13828315\rsid13832939\rsid13896616\rsid13908819\rsid14168694\rsid14223456\rsid14293847\rsid14297853 -\rsid14380549\rsid14382435\rsid14443673\rsid14491415\rsid14705568\rsid14771509\rsid14825379\rsid14830971\rsid14885665\rsid14889524\rsid14894057\rsid14897950\rsid14943232\rsid15007790\rsid15427736\rsid15493712\rsid15495555\rsid15545976\rsid15601712 -\rsid15811431\rsid15822672\rsid15872081\rsid15925451\rsid16141742\rsid16202142\rsid16385696\rsid16395859\rsid16406536\rsid16450365\rsid16542934\rsid16661796\rsid16712132\rsid16716683}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1 -\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\title MICROSOFT [SoftwareType IS "Beta Software"=PRE-RELEASE ][SoftwareType IS "Evaluation Software"=EVALUATION ]SOFTWARE LICENSE TERMS}{\creatim\yr2009\mo2\dy13\hr15\min44} -{\revtim\yr2009\mo2\dy13\hr15\min44}{\version1}{\edmins0}{\nofpages3}{\nofwords1531}{\nofchars7862}{\nofcharsws9375}{\vern32895}}{\*\userprops {\propname db_build_version}\proptype30{\staticval 2.6}{\propname db_charger_document_reference}\proptype3 -{\staticval 25146}{\propname db_charger_client_name}\proptype30{\staticval tbc}{\propname db_charger_matter_number}\proptype30{\staticval tbc}{\propname autosave}\proptype30{\staticval false}{\propname owner}\proptype30{\staticval REDMOND\'5ckathan} -{\propname db_master_reference}\proptype30{\staticval USETERMS_MAINB}{\propname db_master_version}\proptype30{\staticval 20081001}{\propname db_master_clock}\proptype3{\staticval 783}{\propname db_master_name}\proptype30{\staticval Retail/OEM Software Lic -ense Terms - Main}{\propname db_master_description}\proptype30{\staticval }{\propname db_output_filter_reference}\proptype30{\staticval }{\propname db_base_url}\proptype30{\staticval http://usetermassembly/dealbuilder_live/DealBuilderNET/dealbuilder.asp -x}{\propname ProductVersion}\proptype30{\staticval 0}{\propname MScom}\proptype11{\staticval 0}{\propname LanguageAll}\proptype30{\staticval English}{\propname CanadaAvail}\proptype11{\staticval 1}{\propname CanadaFrench}\proptype11{\staticval 0} -{\propname FileFormat}\proptype11{\staticval 0}{\propname SoftwareType}\proptype30{\staticval Beta Software}{\propname ProductName}\proptype30{\staticval Incubation Software}{\propname NumberOfCopies}\proptype30{\staticval Any number of copies} -{\propname MandatoryActivation}\proptype11{\staticval 0}{\propname BetaUseRight}\proptype30{\staticval On the user's premises}{\propname ProductKey}\proptype11{\staticval 0}{\propname ConfidentialInformation}\proptype11{\staticval 0}{\propname Feedback} -\proptype30{\staticval Optional}{\propname NetFramework}\proptype11{\staticval 0}{\propname InternetBasedServices}\proptype11{\staticval 0}{\propname InternetBasedServicesFeaturesDescOther}\proptype30{\staticval }{\propname TimeBomb}\proptype11 -{\staticval 0}{\propname TermWhen}\proptype30{\staticval A certain number of years}{\propname TermYears}\proptype30{\staticval Two}{\propname TermCommRel}\proptype11{\staticval 0}{\propname db_commit}\proptype30{\staticval ProductVersion}} -{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl720\margr720\margt720\margb720\gutter0\ltrsect -\widowctrl\ftnbj\aenddoc\revisions\trackmoves0\trackformatting1\donotembedsysfont0\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors1 -\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyphcaps0\formshade\horzdoc\dgmargin\dghspace95\dgvspace180\dghorigin720\dgvorigin720\dghshow2\dgvshow1 -\jexpand\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\rempersonalinfo\allowfieldendsel -\wrppunct\asianbrkrule\rsidroot10813938\newtblstyruls\nogrowautofit\utinl \fet0{\*\wgrffmtfilter 013f}\ilfomacatclnup0 -{\*\docvar {db_xml}{<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>\'0a<!DOCTYPE Document SYSTEM "..\'5cDocument.DTD">\'0a<Document><Control NAME="db_base_url" TYPE="string"><Value>http://usetermassembly/dealbuilder_live/DealBuilderNET/dealbuilder.aspx</Value></Control><C -ontrol NAME="db_folder_form" TYPE="string"><Value>microsoft</Value></Control><Control NAME="db_folder_stylesheet" TYPE="string"><Value>microsoft</Value></Control><Control NAME="db_folder_image" TYPE="string"><Value>microsoft</Value></Control><Control NAME -="db_charger_dataset_reference" TYPE="numeric"><Value>25145</Value></Control><Control NAME="db_charger_client_name" TYPE="string"><Value>tbc</Value></Control><Control NAME="db_charger_matter_number" TYPE="string"><Value>tbc</Value></Control><Control NAME= -"db_master_reference" TYPE="string"><Value>USETERMS_MAINB</Value></Control><Control NAME="db_master_publish_build" TYPE="string"><Value>2.6</Value></Control><Control NAME="db_master_name" TYPE="string"><Value>Retail/OEM Software License Terms - Main</Valu -e></Control><Control NAME="db_master_description" TYPE="string"><Value> </Value></Control><Control NAME="db_master_version" TYPE="string"><Value>20081001</Value></Control><Control NAME="db_master_clock" TYPE="numeric"><Value>783</Value></Control><Control -NAME="db_master_refresh" TYPE="boolean"><Value>true</Value></Control><Control NAME="db_host_create_onload" TYPE="string"><Value></Value></Control><Control NAME="db_host_input_onload" TYPE="string"><Value></Value></Control><Control NAME="db_host_output_onl -oad" TYPE="string"><Value></Value></Control><Control NAME="db_host_exception_onload" TYPE="string"><Value></Value></Control><Control NAME="db_host_javascript" TYPE="string"><Value></Value></Control><Control NAME="db_transaction_generator" TYPE="string"><V -alue>unique</Value></Control><Control NAME="db_transaction_prefix" TYPE="string"><Value></Value></Control><Control NAME="db_transaction_suffix" TYPE="string"><Value></Value></Control><Control NAME="db_evaluate" TYPE="boolean"><Value>true</Value></Control> -<Control NAME="db_evaluate_logic" TYPE="boolean"><Value>true</Value></Control><Control NAME="db_evaluate_repeat" TYPE="boolean"><Value>true</Value></Control><Control NAME="db_evaluate_cross_reference" TYPE="boolean"><Value>true</Value></Control><Control N -AME="db_evaluate_calculation" TYPE="boolean"><Value>true</Value></Control><Control NAME="db_evaluate_variable" TYPE="boolean"><Value>true</Value></Control><Control NAME="db_evaluate_include" TYPE="boolean"><Value>true</Value></Control><Control NAME="db_co -deload_include" TYPE="string"><Value>lazy</Value></Control><Control NAME="db_locale_input_date_sequence" TYPE="string"><Value>day_month_year</Value></Control><Control NAME="db_locale_input_thousands_char" TYPE="string"><Value>,</Value></Control><Control N -AME="db_locale_input_decimalpoint_char" TYPE="string"><Value>.</Value></Control><Control NAME="db_locale_output_date_sequence" TYPE="string"><Value>day_month_year</Value></Control><Control NAME="db_locale_output_thousands_char" TYPE="string"><Value>,</Val -ue></Control><Control NAME="db_locale_output_decimalpoint_char" TYPE="string"><Value>.</Value></Control><Control NAME="db_output_hyperlink_target" TYPE="string"><Value>_blank</Value></Control><Control NAME="db_output_document_format" TYPE="string"><Value> -rtf</Value></Control><Control NAME="db_output_document_redline" TYPE="boolean"><Value>false</Value></Control><Control NAME="db_output_document_redline_cause" TYPE="string"><Value>drafting</Value></Control><Control NAME="db_output_document_drafting_notes" -TYPE="string"><Value>indefinite</Value></Control><Control NAME="db_output_document_properties" TYPE="string"><Value>true</Value></Control><Control NAME="db_output_document_property" TYPE="string"><Value>autosave|text|false</Value><Value>owner|text|REDMOND -\'5ckathan</Value></Control><Control NAME="db_output_document_variable_xml" TYPE="boolean"><Value>true</Value></Control><Control NAME="db_output_document_termsheet" TYPE="boolean"><Value>false</Value></Control><Control NAME="db_output_document_answers" TYPE= -"boolean"><Value>true</Value></Control><Control NAME="db_output_document_answers_column" TYPE="string"><Value>prompt</Value><Value>value</Value></Control><Control NAME="db_output_document_answers_row" TYPE="string"><Value>page</Value><Value>group</Value>< -Value>sure</Value><Value>unsure</Value><Value>unknown</Value><Value>deferred</Value></Control><Control NAME="db_output_document_answers_relaunch_transaction_hyperlink" TYPE="boolean"><Value>false</Value></Control><Control NAME="db_output_document_answers_ -relaunch_transaction_url" TYPE="string"><Value></Value></Control><Control NAME="db_output_filter_reference" TYPE="string"><Value></Value></Control><Control NAME="db_output_variable_as" TYPE="string"><Value>alias</Value></Control><Control NAME="db_output_v -ariable_highlights" TYPE="boolean"><Value>false</Value></Control><Control NAME="db_output_variable_sequence" TYPE="string"><Value>ascending</Value></Control><Control NAME="db_output_white_space" TYPE="boolean"><Value>false</Value></Control><Control NAME=" -db_output_line_breaks" TYPE="boolean"><Value>true</Value></Control><Control NAME="db_input_show_column_headings" TYPE="boolean"><Value>false</Value></Control><Control NAME="db_input_heading_repetition_column" TYPE="string"><Value>Repeat</Value></Control>< -Control NAME="db_input_heading_highlight_column" TYPE="string"><Value>Check</Value></Control><Control NAME="db_input_heading_prompt_column" TYPE="string"><Value>Prompt</Value></Control><Control NAME="db_input_heading_question_column" TYPE="string"><Value> -Answer</Value></Control><Control NAME="db_input_heading_state_column" TYPE="string"><Value>Deferral</Value></Control><Control NAME="db_input_heading_guidance_column" TYPE="string"><Value>Guidance</Value></Control><Control NAME="db_input_heading_comment_co -lumn" TYPE="string"><Value>Insert your comments below</Value></Control><Control NAME="db_input_heading_variable_name_column" TYPE="string"><Value>Variable</Value></Control><Control NAME="db_input_help_url" TYPE="string"><Value>/dealbuilder_live/help/dealb -uilder/help.html</Value></Control><Control NAME="db_input_data_validation" TYPE="string"><Value>onsubmit</Value></Control><Control NAME="db_input_show_page_title" TYPE="boolean"><Value>true</Value></Control><Control NAME="db_input_show_group_title" TYPE=" -boolean"><Value>true</Value></Control><Control NAME="db_input_show_repetition_column" TYPE="boolean"><Value>false</Value></Control><Control NAME="db_input_show_state_column" TYPE="boolean"><Value>true</Value></Control><Control NAME="db_input_show_variable -_name_column" TYPE="boolean"><Value>false</Value></Control><Control NAME="db_input_show_committed" TYPE="boolean"><Value>false</Value></Control><Control NAME="db_input_show_group_state" TYPE="boolean"><Value>true</Value></Control><Control NAME="db_input_s -how_group_state_threshold" TYPE="numeric"><Value>2</Value></Control><Control NAME="db_input_state_display" TYPE="string"><Value>dropdown</Value></Control><Control NAME="db_input_state_preselect" TYPE="string"><Value>sure</Value></Control><Control NAME="db -_input_unknown_option" TYPE="string"><Value>Unknown</Value></Control><Control NAME="db_input_unknown_position" TYPE="string"><Value>first</Value></Control><Control NAME="db_input_other_option" TYPE="string"><Value>Other</Value></Control><Control NAME="db_ -input_other_position" TYPE="string"><Value>last</Value></Control><Control NAME="db_input_other_width_single" TYPE="numeric"><Value>20</Value></Control><Control NAME="db_input_other_width_multiple" TYPE="numeric"><Value>20</Value></Control><Control NAME="d -b_input_other_depth_multiple" TYPE="numeric"><Value>4</Value></Control><Control NAME="db_input_other_prompt_multiple" TYPE="string"><Value>Specify others:</Value></Control><Control NAME="db_input_other_prompt_single" TYPE="string"><Value>Specify other:</V -alue></Control><Control NAME="db_input_other_prompt_break_before" TYPE="numeric"><Value>1</Value></Control><Control NAME="db_input_other_prompt_break_after" TYPE="numeric"><Value>1</Value></Control><Control NAME="db_input_active_separator_sure_multiline" -TYPE="string"><Value>, </Value></Control><Control NAME="db_input_active_separator_sure_multiple" TYPE="string"><Value> and </Value></Control><Control NAME="db_input_active_separator_unsure_multiple" TYPE="string"><Value> and/or </Value></Control><Control -NAME="db_input_active_separator_unsure_single" TYPE="string"><Value> or </Value></Control><Control NAME="db_input_active_boolean_true" TYPE="string"><Value>Yes</Value></Control><Control NAME="db_input_active_boolean_false" TYPE="string"><Value>No</Value>< -/Control><Control NAME="db_input_repeat_navigation_prefix" TYPE="string"><Value>(%1 of %2)&\'3bnbsp\'3b</Value></Control><Control NAME="db_input_repeat_navigation_postfix" TYPE="string"><Value></Value></Control><Control NAME="db_input_repeat_navigation_portr -ayal" TYPE="string"><Value>visible</Value></Control><Control NAME="db_input_repeat_format" TYPE="string"><Value>digits</Value></Control><Control NAME="db_input_repeat_prev" TYPE="string"><Value>Prev</Value></Control><Control NAME="db_input_repeat_next" TY -PE="string"><Value>Next</Value></Control><Control NAME="db_input_repeat_separator" TYPE="string"><Value>&\'3bnbsp\'3b|&\'3bnbsp\'3b</Value></Control><Control NAME="db_input_prompt_compulsory_symbol" TYPE="string"><Value>*</Value></Control><Control NAME="db_inpu -t_prompt_compulsory_symbol_location" TYPE="string"><Value>after</Value></Control><Control NAME="db_input_question_compulsory_symbol" TYPE="string"><Value></Value></Control><Control NAME="db_input_question_compulsory_symbol_location" TYPE="string"><Value>a -fter</Value></Control><Control NAME="db_input_disable_when_unknown_compulsory" TYPE="boolean"><Value>true</Value></Control><Control NAME="db_input_disable_when_unknown_non_compulsory" TYPE="boolean"><Value>false</Value></Control><Control NAME="db_input_si -mple_alert" TYPE="string"><Value>client_side</Value></Control><Control NAME="db_input_warning_irrelevant_page" TYPE="string"><Value><\'3bU>\'3bWARNING:<\'3b/U>\'3b That page is no longer relevant because of answers given on this page or a previous page!</Valu -e></Control><Control NAME="db_input_last_page_next_button" TYPE="string"><Value>enabled</Value></Control><Control NAME="db_input_page_goto_list_content" TYPE="string"><Value>relevant_pages</Value></Control><Variable NAME="MScom" TYPE="boolean" STATUS="sur -e"><Value>0</Value></Variable><Variable NAME="LanguageAll" TYPE="select" STATUS="sure"><Value>English</Value></Variable><Variable NAME="CanadaAvail" TYPE="boolean" STATUS="sure"><Value>1</Value></Variable><Variable NAME="CanadaFrench" TYPE="boolean" STATU -S="sure"><Value>0</Value></Variable><Variable NAME="FileFormat" TYPE="boolean" STATUS="sure"><Value>0</Value></Variable><Variable NAME="SoftwareType" TYPE="select" STATUS="sure"><Value>Beta Software</Value></Variable><Variable NAME="ProductName" TYPE="str -ing" STATUS="sure"><Value>Incubation Software</Value></Variable><Variable NAME="NumberOfCopies" TYPE="select" STATUS="sure"><Value>Any number of copies</Value></Variable><Variable NAME="MandatoryActivation" TYPE="boolean" STATUS="sure"><Value>0</Value></V -ariable><Variable NAME="BetaUseRight" TYPE="select" STATUS="sure"><Value>On the user&apos\'3bs premises</Value></Variable><Variable NAME="ProductKey" TYPE="boolean" STATUS="sure"><Value>0</Value></Variable><Variable NAME="ConfidentialInformation" TYPE="boole -an" STATUS="sure"><Value>0</Value></Variable><Variable NAME="Feedback" TYPE="select" STATUS="sure"><Value>Optional</Value></Variable><Variable NAME="NetFramework" TYPE="boolean" STATUS="sure"><Value>0</Value></Variable><Variable NAME="InternetBasedService -s" TYPE="boolean" STATUS="sure"><Value>0</Value></Variable><Variable NAME="TimeBomb" TYPE="boolean" STATUS="sure"><Value>0</Value></Variable><Variable NAME="TermWhen" TYPE="select" STATUS="sure"><Value>A certain number of years</Value></Variable><Variable - NAME="TermYears" TYPE="select" STATUS="sure"><Value>Two</Value></Variable><Variable NAME="TermCommRel" TYPE="boolean" STATUS="sure"><Value>0</Value></Variable></Document>}}{\*\ftnsep \ltrpar \pard\plain \ltrpar -\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0 -\ltrch\fcs0 \insrsid9130596 \chftnsep -\par }}{\*\ftnsepc \ltrpar \pard\plain \ltrpar\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 -\fs19\lang1033\langfe1033\loch\af38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid9130596 \chftnsepc -\par }}{\*\aftnsep \ltrpar \pard\plain \ltrpar\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 -\fs19\lang1033\langfe1033\loch\af38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid9130596 \chftnsep -\par }}{\*\aftnsepc \ltrpar \pard\plain \ltrpar\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 -\fs19\lang1033\langfe1033\loch\af38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid9130596 \chftnsepc -\par }}\ltrpar \sectd \ltrsect\psz1\linex0\endnhere\sectlinegrid360\sectdefaultcl\sectrsid12797652\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3 -\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}} -{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar -\s42\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12255436 \rtlch\fcs1 \ab\af38\afs28\alang1025 \ltrch\fcs0 -\b\fs28\lang1033\langfe1033\loch\af38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 MICROSOFT PRE-RELEASE SOFTWARE LICENSE TERMS -\par }\pard\plain \ltrpar\s43\ql \li0\ri0\sb120\sa120\nowidctlpar\brdrb\brdrs\brdrw10\brsp20 \wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12255436 \rtlch\fcs1 \ab\af38\afs28\alang1025 \ltrch\fcs0 -\b\fs28\lang1033\langfe1033\loch\af38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid8990244 \hich\af38\dbch\af13\loch\f38 CODE CONTRACT}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 -\fs20\dbch\af13\insrsid5840382 \hich\af38\dbch\af13\loch\f38 S}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid8990244 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid9964378\charrsid200783 -\hich\af38\dbch\af13\loch\f38 MICROSOFT }{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid12255436 \hich\af38\dbch\af13\loch\f38 INCUBATION SOFTWARE}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid9964378\charrsid200783 -\par }\pard\plain \ltrpar\s44\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12255436 \rtlch\fcs1 \ab\af38\afs19\alang1025 \ltrch\fcs0 -\b\fs19\lang1033\langfe1033\loch\af38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 -These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you.}{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{ -\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 Please read them.}{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid12797652\charrsid200783 -\hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 They apply to the pr\hich\af38\dbch\af13\loch\f38 -e-release software named above, which includes the media on which you received it, if any.}{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 -\b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 The terms also apply to any Microsoft -\par {\listtext\pard\plain\ltrpar \s34 \rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid9964378\charrsid200783 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s34\ql \fi-360\li360\ri0\sb120\sa120\nowidctlpar -\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin360\itap0\pararsid12255436 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 -\af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 updates, -\par {\listtext\pard\plain\ltrpar \s34 \rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid9964378\charrsid200783 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af38\dbch\af13\loch\f38 supplements, -\par {\listtext\pard\plain\ltrpar \s34 \rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid9964378\charrsid200783 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af38\dbch\af13\loch\f38 Internet-based services, and -\par {\listtext\pard\plain\ltrpar \s34 \rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid9964378\charrsid200783 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af38\dbch\af13\loch\f38 support services -\par }\pard\plain \ltrpar\s44\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12255436 \rtlch\fcs1 \ab\af38\afs19\alang1025 \ltrch\fcs0 -\b\fs19\lang1033\langfe1033\loch\af38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 -for this software, unless other terms accompany those item\hich\af38\dbch\af13\loch\f38 s.}{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 -\b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 If so, those terms apply. -\par }{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS.}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid12797652\charrsid200783 -\hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE. -\par }\pard\plain \ltrpar\s61\ql \li0\ri0\sb120\sa120\nowidctlpar\brdrt\brdrs\brdrw10\brsp20 \wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12255436 \rtlch\fcs1 \ab\af38\afs19\alang1025 \ltrch\fcs0 -\b\fs19\lang1033\langfe1033\loch\af38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 -If you comply with these license terms, you have the rights below. -\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af38\afs20 \ltrch\fcs0 \b\fs20\loch\af38\hich\af38\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 1.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar -\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls17\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid12255436 \rtlch\fcs1 \ab\af38\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 -{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 INSTALLATION AND USE RIGHTS.}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid12797652\charrsid200783 -\hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid9964378\charrsid200783 -\par {\listtext\pard\plain\ltrpar \s35 \rtlch\fcs1 \af38\afs19 \ltrch\fcs0 \f3\fs19\insrsid1722062\charrsid10171790 \loch\af3\dbch\af11\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s35\ql \fi-357\li720\ri0\sb120\sa120\nowidctlpar -\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin720\itap0\pararsid1722062 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af38 -\ltrch\fcs0 \insrsid1722062\charrsid10171790 \hich\af38\dbch\af11\loch\f38 You may install and use any num\hich\af38\dbch\af11\loch\f38 ber of copies of the software on your premises }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid1722062 -\hich\af38\dbch\af11\loch\f38 solely to evaluate and test }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid1722062\charrsid10171790 \hich\af38\dbch\af11\loch\f38 the software}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid9964378\charrsid200783 .}{ -\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid1722062\charrsid1722062 -\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af38\afs20 \ltrch\fcs0 \b\fs20\loch\af38\hich\af38\dbch\af13\insrsid8990244\charrsid2981673 \hich\af38\dbch\af13\loch\f38 2.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar -\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls17\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid8990244 \rtlch\fcs1 \ab\af38\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 { -\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid8990244\charrsid2981673 \hich\af38\dbch\af13\loch\f38 ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS. -\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af38\afs20 \ltrch\fcs0 \b\fs20\loch\af38\hich\af38\dbch\af13\insrsid8990244\charrsid2981673 \hich\af38\dbch\af13\loch\f38 a.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar -\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls17\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid8990244 \rtlch\fcs1 \ab\af38\afs19\alang1025 \ltrch\fcs0 -\b\fs19\lang1033\langfe1033\loch\af38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid8990244\charrsid2981673 \hich\af38\dbch\af13\loch\f38 Distributable Code.}{\rtlch\fcs1 \ab0\af38\afs20 -\ltrch\fcs0 \cs57\b0\fs20\dbch\af13\insrsid8990244\charrsid2981673 \hich\af38\dbch\af13\loch\f38 The software contains code that you are permitted to distribute in programs you develop if yo\hich\af38\dbch\af13\loch\f38 u comply with the terms below.}{ -\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid8990244\charrsid2981673 -\par {\listtext\pard\plain\ltrpar \s49 \rtlch\fcs1 \ab\af38\afs20 \ltrch\fcs0 \b\fs20\loch\af38\hich\af38\dbch\af13\insrsid8990244\charrsid2981673 \hich\af38\dbch\af13\loch\f38 i.\tab}}\pard\plain \ltrpar\s49\ql \fi-357\li1077\ri0\sb120\sa120\nowidctlpar -\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls10\ilvl2\outlinelevel2\adjustright\rin0\lin1077\itap0\pararsid8990244 \rtlch\fcs1 \ab\af38\afs19\alang1025 \ltrch\fcs0 -\b\fs19\lang1033\langfe1033\loch\af38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid8990244\charrsid2981673 \hich\af38\dbch\af13\loch\f38 Right to Use and Distribute.}{\rtlch\fcs1 -\af38\afs20 \ltrch\fcs0 \cs58\fs20\dbch\af13\insrsid8990244\charrsid2981673 \hich\af38\dbch\af13\loch\f38 \hich\f38 The code and text files listed below are \'93\loch\f38 \hich\f38 Distributable Code.\'94}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 -\fs20\dbch\af13\insrsid8990244\charrsid2981673 -\par {\listtext\pard\plain\ltrpar \s50 \rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid8990244\charrsid2981673 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s50\ql \fi-358\li1435\ri0\sb120\sa120\nowidctlpar -\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls4\adjustright\rin0\lin1435\itap0\pararsid8990244 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 \fs19\ul\lang1033\langfe1033\loch\af38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 -\af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid8990244\charrsid2981673 \hich\af38\dbch\af13\loch\f38 REDIST.TXT Files}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\ulnone\dbch\af13\insrsid8990244\charrsid2981673 \hich\af38\dbch\af13\loch\f38 -. You may copy and distribute the object code form of code listed in REDIST.TXT files.}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid8990244\charrsid2981673 -\par {\listtext\pard\plain\ltrpar \s50 \rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid8990244\charrsid2981673 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af38\dbch\af13\loch\f38 Third Party Distribution}{\rtlch\fcs1 \af38\afs20 -\ltrch\fcs0 \fs20\ulnone\dbch\af13\insrsid8990244\charrsid2981673 \hich\af38\dbch\af13\loch\f38 . You \hich\af38\dbch\af13\loch\f38 may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs.}{ -\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid8990244\charrsid2981673 -\par {\listtext\pard\plain\ltrpar \s49 \rtlch\fcs1 \ab\af38\afs20 \ltrch\fcs0 \b\fs20\loch\af38\hich\af38\dbch\af13\insrsid8990244\charrsid2981673 \hich\af38\dbch\af13\loch\f38 ii.\tab}}\pard\plain \ltrpar\s49\ql \fi-357\li1077\ri0\sb120\sa120\nowidctlpar -\jclisttab\tx1077\wrapdefault\aspalpha\aspnum\faauto\ls10\ilvl2\outlinelevel2\adjustright\rin0\lin1077\itap0\pararsid8990244 \rtlch\fcs1 \ab\af38\afs19\alang1025 \ltrch\fcs0 -\b\fs19\lang1033\langfe1033\loch\af38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid8990244\charrsid2981673 \hich\af38\dbch\af13\loch\f38 Distribution Requirements.}{\rtlch\fcs1 \af38\afs20 -\ltrch\fcs0 \cs58\fs20\dbch\af13\insrsid8990244\charrsid2981673 \hich\af38\dbch\af13\loch\f38 For any Distributable Code you distribute, you must}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid8990244\charrsid2981673 -\par {\listtext\pard\plain\ltrpar \s36 \rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid8990244\charrsid2981673 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s36\ql \fi-358\li1435\ri0\sb120\sa120\nowidctlpar -\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls4\adjustright\rin0\lin1435\itap0\pararsid8990244 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 -\af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid8990244\charrsid2981673 \hich\af38\dbch\af13\loch\f38 require distributors and external end users to agree to terms t\hich\af38\dbch\af13\loch\f38 hat protect it at least as much as this agreement; -\par {\listtext\pard\plain\ltrpar \s36 \rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid8990244\charrsid2981673 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af38\dbch\af13\loch\f38 -display your valid copyright notice on your programs; and -\par {\listtext\pard\plain\ltrpar \s36 \rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid8990244\charrsid2981673 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af38\dbch\af13\loch\f38 -indemnify, defend, and hold harmless Microsoft from any claims, including attorneys\hich\f38 \rquote \loch\f38 fees, related to the distribution or use of your programs. -\par {\listtext\pard\plain\ltrpar \s49 \rtlch\fcs1 \ab\af38\afs20 \ltrch\fcs0 \b\fs20\loch\af38\hich\af38\dbch\af13\insrsid8990244\charrsid2981673 \hich\af38\dbch\af13\loch\f38 iii.\tab}}\pard\plain \ltrpar\s49\ql \fi-357\li1077\ri0\sb120\sa120\nowidctlpar -\jclisttab\tx1077\wrapdefault\aspalpha\aspnum\faauto\ls10\ilvl2\outlinelevel2\adjustright\rin0\lin1077\itap0\pararsid8990244 \rtlch\fcs1 \ab\af38\afs19\alang1025 \ltrch\fcs0 -\b\fs19\lang1033\langfe1033\loch\af38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid8990244\charrsid2981673 \hich\af38\dbch\af13\loch\f38 Di\hich\af38\dbch\af13\loch\f38 -stribution Restrictions.}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \cs58\fs20\dbch\af13\insrsid8990244\charrsid2981673 \hich\af38\dbch\af13\loch\f38 You may not}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid8990244\charrsid2981673 -\par {\listtext\pard\plain\ltrpar \s36 \rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid8990244\charrsid2981673 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s36\ql \fi-358\li1435\ri0\sb120\sa120\nowidctlpar -\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls4\adjustright\rin0\lin1435\itap0\pararsid8990244 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 -\af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid8990244\charrsid2981673 \hich\af38\dbch\af13\loch\f38 alter any copyright, trademark or patent notice in the Distributable Code; -\par {\listtext\pard\plain\ltrpar \s36 \rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid8990244\charrsid2981673 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af38\dbch\af13\loch\f38 use Microsoft\hich\f38 \rquote \loch\f38 -s trademarks in your programs\hich\f38 \rquote \loch\f38 names or in a way that suggests your programs come from or are endorsed by Microsoft; -\par {\listtext\pard\plain\ltrpar \s36 \rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid8990244\charrsid2981673 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af38\dbch\af13\loch\f38 distribute \hich\af38\dbch\af13\loch\f38 -Distributable Code to run on a platform other than the Windows platform; -\par {\listtext\pard\plain\ltrpar \s36 \rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid8990244\charrsid2981673 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af38\dbch\af13\loch\f38 -include Distributable Code in malicious, deceptive or unlawful programs; or -\par {\listtext\pard\plain\ltrpar \s36 \rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid8990244\charrsid2981673 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af38\dbch\af13\loch\f38 -modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an\hich\af38\dbch\af13\loch\f38 Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that - -\par {\listtext\pard\plain\ltrpar \s37 \rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid8990244\charrsid2981673 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s37\ql \fi-357\li1792\ri0\sb120\sa120\nowidctlpar -\jclisttab\tx1795\wrapdefault\aspalpha\aspnum\faauto\ls5\adjustright\rin0\lin1792\itap0\pararsid8990244 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 -\af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid8990244\charrsid2981673 \hich\af38\dbch\af13\loch\f38 the code be disclosed or distributed in source code form; or -\par {\listtext\pard\plain\ltrpar \s37 \rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid8990244\charrsid2981673 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard \ltrpar\s37\ql \fi-357\li1792\ri0\sb120\sa120\nowidctlpar -\jclisttab\tx1795\wrapdefault\aspalpha\aspnum\faauto\ls5\adjustright\rin0\lin1792\itap0 {\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid8990244\charrsid2981673 \hich\af38\dbch\af13\loch\f38 others have the right to modify it.}{\rtlch\fcs1 -\af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid9130596 -\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af38\afs20 \ltrch\fcs0 \b\fs20\loch\af38\hich\af38\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 3.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar -\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls17\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid12255436 \rtlch\fcs1 \ab\af38\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 -{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 TERM.}{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 -\ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 The term of this agreement }{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid10179250 \hich\af38\dbch\af13\loch\f38 expire -\hich\af38\dbch\af13\loch\f38 s}{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 two}{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid1528414\charrsid200783 -\hich\af38\dbch\af13\loch\f38 years}{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid4202022 \hich\af38\dbch\af13\loch\f38 after installation of the software}{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 -\b0\fs20\dbch\af13\insrsid345491\charrsid200783 .}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid9964378\charrsid200783 -\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af38\afs20 \ltrch\fcs0 \b\fs20\loch\af38\hich\af38\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 4.\tab}\hich\af38\dbch\af13\loch\f38 PRE-RELEASE SOFTWARE.}{\rtlch\fcs1 \af38\afs20 -\ltrch\fcs0 \fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 This software is a pre-release version.}{ -\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 -It may not work the way a final version of the software will.}{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 -\b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 We may change it for the final, commercial version.}{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{ -\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 We also may not release a commer\hich\af38\dbch\af13\loch\f38 cial version.}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 -\fs20\dbch\af13\insrsid9964378\charrsid200783 -\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af38\afs20 \ltrch\fcs0 \b\fs20\loch\af38\hich\af38\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 5.\tab}\hich\af38\dbch\af13\loch\f38 FEEDBACK.}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 -\fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 -If you give feedback about the software to Microsoft, you give to Microsoft, without charge, the right to use, share and commercialize your feedback in any way and for any purpose.}{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 -\b0\fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 You also give to third parties, without charge, any -\hich\af38\dbch\af13\loch\f38 patent rights needed for their products, technologies and services to use or interface with any specific parts of a Microsoft software or service that includes the feedback.}{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 -\b0\fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 -You will not give feedback that is subject to a license that requires Microsoft t\hich\af38\dbch\af13\loch\f38 o license its software or documentation to third parties because we include your feedback in them.}{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 -\b0\fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 These rights survive this agreement.}{\rtlch\fcs1 -\af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid9964378\charrsid200783 -\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af38\afs20 \ltrch\fcs0 \b\caps\fs20\loch\af38\hich\af38\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 6.\tab}}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 -\caps\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 Scope of License}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid9964378\charrsid200783 .}{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 -\b0\fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 -The software is licensed, not sold. This agreement only gives you some rights to use the software.}{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \ab0\af38\afs20 -\ltrch\fcs0 \b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 Mic\hich\af38\dbch\af13\loch\f38 rosoft reserves all other rights.}{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid12797652\charrsid200783 -\hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 -Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement.}{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid12797652\charrsid200783 -\hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 In doing so, you must comply with any technical limitations in the software that -\hich\af38\dbch\af13\loch\f38 only allow you to use it in certain ways.}{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid12722678\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 -\b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 You may not}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid9964378\charrsid200783 -\par {\listtext\pard\plain\ltrpar \s34 \rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid9964378\charrsid200783 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s34\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar -\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin720\itap0\pararsid12255436 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 -\af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 disclose the results of any benchmark tests of the software to any third party without Microsoft\hich\f38 \rquote \loch\f38 s prior written approval}{ -\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid222748 \hich\af38\dbch\af11\loch\f38 ;}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid9964378\charrsid200783 -\par {\listtext\pard\plain\ltrpar \s34 \rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid9964378\charrsid200783 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af38\dbch\af13\loch\f38 work around any technical limitations in the software} -{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid222748 \hich\af38\dbch\af11\loch\f38 ;}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid9964378\charrsid200783 -\par {\listtext\pard\plain\ltrpar \s34 \rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid9964378\charrsid200783 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af38\dbch\af13\loch\f38 reverse engineer, decomp\hich\af38\dbch\af13\loch\f38 -ile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid222748 \hich\af38\dbch\af11\loch\f38 ;}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 -\fs20\dbch\af13\insrsid9964378\charrsid200783 -\par {\listtext\pard\plain\ltrpar \s34 \rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid9964378\charrsid200783 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af38\dbch\af13\loch\f38 -make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid222748 \hich\af38\dbch\af11\loch\f38 ;}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 -\fs20\dbch\af13\insrsid9964378\charrsid200783 -\par {\listtext\pard\plain\ltrpar \s34 \rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid9964378\charrsid200783 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af38\dbch\af13\loch\f38 publish \hich\af38\dbch\af13\loch\f38 -the software for others to copy}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid222748 \hich\af38\dbch\af11\loch\f38 ;}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid9964378\charrsid200783 -\par {\listtext\pard\plain\ltrpar \s34 \rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid9964378\charrsid200783 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af38\dbch\af13\loch\f38 rent, lease or lend the software}{\rtlch\fcs1 \af38 -\ltrch\fcs0 \insrsid222748 \hich\af38\dbch\af11\loch\f38 ;}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid9964378\charrsid200783 -\par {\listtext\pard\plain\ltrpar \s34 \rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid9964378\charrsid200783 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af38\dbch\af13\loch\f38 -transfer the software or this agreement to any third party}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid222748 \hich\af38\dbch\af11\loch\f38 ; or}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid9964378\charrsid200783 -\par {\listtext\pard\plain\ltrpar \s34 \rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid9964378\charrsid200783 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af38\dbch\af13\loch\f38 -use the software for commercial software hosting services}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid222748 .}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid9964378\charrsid200783 -\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af38\afs20 \ltrch\fcs0 \b\caps\fs20\loch\af38\hich\af38\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 7.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar -\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls17\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid12255436 \rtlch\fcs1 \ab\af38\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 -{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \caps\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 Export Restrictions}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid9964378\charrsid200783 .}{\rtlch\fcs1 \ab0\af38\afs20 -\ltrch\fcs0 \b0\fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 -The software is subject to United States expor\hich\af38\dbch\af13\loch\f38 t laws and regulations.}{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \ab0\af38\afs20 -\ltrch\fcs0 \b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 You must comply with all domestic and international export laws and regulations that apply to the software.}{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 -\b0\fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 -These laws include restrictions on destinations, end users and end use.}{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 -\b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 For additional information, see }{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \cs73\b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 -www.microsoft.com/ex\hich\af38\dbch\af13\loch\f38 porting}{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid9964378\charrsid200783 .}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \cs73\fs20\dbch\af13\insrsid9964378\charrsid200783 -\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af38\afs20 \ltrch\fcs0 \b\caps\fs20\loch\af38\hich\af38\dbch\af13\insrsid9651656\charrsid200783 \hich\af38\dbch\af13\loch\f38 8.\tab}}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 -\caps\fs20\dbch\af13\insrsid9651656\charrsid200783 \hich\af38\dbch\af13\loch\f38 SUPPORT SERVICES.}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid9651656\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 -\b0\fs20\dbch\af13\insrsid9651656\charrsid200783 \hich\af38\dbch\af13\loch\f38 \hich\f38 Because this software is \'93\loch\f38 \hich\f38 as is,\'94\loch\f38 we may not provide support services for it.}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 -\fs20\dbch\af13\insrsid9651656\charrsid200783 -\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af38\afs20 \ltrch\fcs0 \b\caps\fs20\loch\af38\hich\af38\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 9.\tab}}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 -\caps\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 Entire Agreement.}{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \ab0\af38\afs20 -\ltrch\fcs0 \b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agr\hich\af38\dbch\af13\loch\f38 -eement for the software and support services. -\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af38\afs20 \ltrch\fcs0 \b\caps\fs20\loch\af38\hich\af38\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 10.\tab}}\pard \ltrpar\s1\ql \fi-360\li360\ri0\sb120\sa120\nowidctlpar -\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls17\outlinelevel0\adjustright\rin0\lin360\itap0\pararsid12255436 {\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \caps\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 Applicable Law}{ -\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid9964378\charrsid200783 . -\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af38\afs20 \ltrch\fcs0 \b\fs20\loch\af38\hich\af38\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 a.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar -\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls17\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid12255436 \rtlch\fcs1 \ab\af38\afs19\alang1025 \ltrch\fcs0 -\b\fs19\lang1033\langfe1033\loch\af38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 United States.}{\rtlch\fcs1 \ab0\af38\afs20 -\ltrch\fcs0 \b0\fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 -If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict\hich\af38\dbch\af13\loch\f38 of laws principles.}{\rtlch\fcs1 -\ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 -The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort.}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid9964378\charrsid200783 -\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af38\afs20 \ltrch\fcs0 \b\fs20\loch\af38\hich\af38\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 b.\tab}\hich\af38\dbch\af13\loch\f38 Outside the United States.}{\rtlch\fcs1 -\ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 -If you acquired the software in any other country, th\hich\af38\dbch\af13\loch\f38 e laws of that country apply.}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid9964378\charrsid200783 -\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af38\afs20 \ltrch\fcs0 \b\caps\fs20\loch\af38\hich\af38\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 11.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar -\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls17\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid12255436 \rtlch\fcs1 \ab\af38\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 -{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \caps\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 Legal Effect.}{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 } -{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 This agreement describes certain legal rights.}{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 -\b0\fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 -You may have other rights under the laws of your country.}{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 -\b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 You may also have rights with respect to the party from whom you acquired the software.}{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 -\b0\fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \ab0\af38\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 This agreement does\hich\af38\dbch\af13\loch\f38 - not change your rights under the laws of your country if the laws of your country do not permit it to do so.}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \caps\fs20\dbch\af13\insrsid9964378\charrsid200783 -\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af38\afs20 \ltrch\fcs0 \b\caps\fs20\loch\af38\hich\af38\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 12.\tab}\hich\af38\dbch\af13\loch\f38 Disclaimer of Warranty.}{\rtlch\fcs1 -\af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \caps\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 \hich\f38 -The software is licensed \'93\loch\f38 \hich\f38 as-is.\'94}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \caps\fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 -\caps\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 You bear the risk of using it.}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \caps\fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 -\af38\afs20 \ltrch\fcs0 \caps\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 Microsoft gives no express warranties, guarantees or cond\hich\af38\dbch\af13\loch\f38 itions.}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 -\caps\fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \caps\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 -You may have additional consumer rights under your local laws which this agreement cannot change.}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \caps\fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \af38\afs20 -\ltrch\fcs0 \caps\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 To the extent permitted under your local laws, Microsoft excludes the implied warranties of merchantability, fitness for a particular purpose and non- -\hich\af38\dbch\af13\loch\f38 infringement. -\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af38\afs20 \ltrch\fcs0 \b\caps\fs20\loch\af38\hich\af38\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 13.\tab}}\pard \ltrpar\s1\ql \fi-360\li360\ri0\sb120\sa120\nowidctlpar -\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls17\outlinelevel0\adjustright\rin0\lin360\itap0\pararsid12255436 {\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \caps\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 -Limitation on and Exclusion of Remedies and Damages.}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \caps\fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 -\caps\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 You can recover from Microsoft and its suppliers only direct damages up to U.S. $5.00.}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 -\caps\fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \caps\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 -You cannot recover any other damages, including consequential, lost profits, special, indirect or inci\hich\af38\dbch\af13\loch\f38 dental damages. -\par }\pard\plain \ltrpar\s24\ql \li357\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin357\itap0\pararsid12255436 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 -\fs19\lang1033\langfe1033\loch\af38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 This limitation applies to -\par {\listtext\pard\plain\ltrpar \s34 \rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid9964378\charrsid200783 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s34\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar -\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin720\itap0\pararsid12255436 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 -\af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and -\par {\listtext\pard\plain\ltrpar \s34 \rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid9964378\charrsid200783 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af38\dbch\af13\loch\f38 -claims for breach of contract, breach of warranty, guarantee or condition, strict li\hich\af38\dbch\af13\loch\f38 ability, negligence, or other tort to the extent permitted by applicable law. -\par }\pard\plain \ltrpar\ql \li360\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid12255436 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 -\fs19\lang1033\langfe1033\loch\af38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 -It also applies even if Microsoft knew or should have known about the possibility of the damages.}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 -\fs20\dbch\af13\insrsid9964378\charrsid200783 \hich\af38\dbch\af13\loch\f38 The above limitation or exclusion may not apply to you because your country may \hich\af38\dbch\af13\loch\f38 -not allow the exclusion or limitation of incidental, consequential or other damages. -\par }\pard\plain \ltrpar\s79\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12255436 \rtlch\fcs1 \ab\af38\afs19\alang1025 \ltrch\fcs0 -\b\fs19\lang1033\langfe1033\loch\af38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid8999754\charrsid200783 \hich\af38\dbch\af13\loch\f38 -Please note: As this software is distributed in Quebec, Canada, some of the clauses in this agreement are provided below in French. -\par \hich\af38\dbch\af13\loch\f38 Remarque}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid480810\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid8999754\charrsid200783 -\hich\af38\dbch\af13\loch\f38 \hich\f38 : Ce logiciel \'e9\loch\f38 \hich\f38 tant distribu\'e9\loch\f38 \hich\af38\dbch\af13\loch\f38 \hich\f38 au Qu\'e9\loch\f38 \hich\f38 -bec, Canada, certaines des clauses dans ce contrat sont fournies ci-dessous en fran\'e7\loch\f38 ais. -\par }\pard\plain \ltrpar\s80\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12255436 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 -\fs19\lang1033\langfe1033\loch\af38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af38\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid8999754\charrsid200783 \hich\af38\dbch\af13\loch\f38 \hich\f38 EXON\'c9\loch\f38 RATION DE GARANTIE.}{ -\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid8999754\charrsid200783 \hich\af38\dbch\af13\loch\f38 \hich\f38 Le logiciel vis\'e9\loch\f38 \hich\f38 par une licence est offert \'ab\loch\f38 \hich\f38 tel quel \'bb\loch\f38 \hich\f38 -. Toute utilisation de ce logiciel est \'e0\loch\f38 \hich\f38 votre seule risque et p\'e9\loch\f38 ril. Microsoft \hich\af38\dbch\af13\loch\f38 n\hich\f38 \rquote \loch\f38 \hich\f38 accorde aucune autre garantie expresse. Vous pouvez b\'e9\loch\f38 -\hich\f38 n\'e9\loch\f38 ficier de droits additionnels en vertu du }{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid1070219\charrsid200783 \hich\af38\dbch\af13\loch\f38 droit local sur la protection d}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 -\fs20\dbch\af13\insrsid8999754\charrsid200783 \hich\af38\dbch\af13\loch\f38 es consommateurs, que ce contrat ne peut modifier. La ou elles sont permises par le droit locale, les garanties implicites de\hich\af38\dbch\af13\loch\f38 \hich\f38 qualit\'e9 -\loch\f38 marchande, d\hich\f38 \rquote \loch\f38 \hich\f38 ad\'e9\loch\f38 \hich\f38 quation \'e0\loch\f38 un usage particulier et d\hich\f38 \rquote \loch\f38 \hich\f38 absence de contrefa\'e7\loch\f38 on sont exclues. -\par }{\rtlch\fcs1 \ab\af38\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid8999754\charrsid200783 \hich\af38\dbch\af13\loch\f38 \hich\f38 LIMITATION DES DOMMAGES-INT\'c9\loch\f38 \hich\f38 R\'ca\loch\f38 \hich\f38 TS ET EXCLUSION DE RESPONSABILIT\'c9\loch\f38 - POUR LES DOMMAGES.}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid8999754\charrsid200783 \hich\af38\dbch\af13\loch\f38 -Vous pouvez obtenir de Microsoft et de ses fournisseurs une indemnisation e\hich\af38\dbch\af13\loch\f38 \hich\f38 n cas de dommages directs uniquement \'e0\loch\f38 \hich\f38 hauteur de 5,00 $ US. Vous ne pouvez pr\'e9\loch\f38 \hich\f38 tendre \'e0 -\loch\f38 \hich\f38 aucune indemnisation pour les autres dommages, y compris les dommages sp\'e9\loch\f38 \hich\f38 ciaux, indirects ou accessoires et pertes de b\'e9\loch\f38 \hich\f38 n\'e9\loch\f38 fices. -\par \hich\af38\dbch\af13\loch\f38 Cette limitation concerne}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid480810\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid8999754\charrsid200783 -\hich\af38\dbch\af13\loch\f38 : -\par {\listtext\pard\plain\ltrpar \s34 \rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid8999754\charrsid200783 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s34\ql \fi-360\li360\ri0\sb120\sa120\nowidctlpar -\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin360\itap0\pararsid12255436 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 -\af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid8999754\charrsid200783 \hich\af38\dbch\af13\loch\f38 tout}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \af38\afs20 -\ltrch\fcs0 \fs20\dbch\af13\insrsid8999754\charrsid200783 \hich\af38\dbch\af13\loch\f38 ce qui\hich\af38\dbch\af13\loch\f38 \hich\f38 est reli\'e9\loch\f38 - au logiciel, aux services ou au contenu (y compris le code) figurant sur des sites Internet tiers ou dans des programmes tiers}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid480810\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 -\af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid8999754\charrsid200783 \hich\af38\dbch\af13\loch\f38 ; et -\par {\listtext\pard\plain\ltrpar \s34 \rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid8999754\charrsid200783 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af38\dbch\af13\loch\f38 \hich\f38 les r\'e9\loch\f38 \hich\f38 -clamations au titre de violation de contrat ou de garantie, ou au titre de responsabilit\'e9\loch\f38 \hich\f38 stricte, de n\'e9\loch\f38 gli\hich\af38\dbch\af13\loch\f38 gence ou d\hich\f38 \rquote \loch\f38 \hich\f38 -une autre faute dans la limite autoris\'e9\loch\f38 e par la loi en vigueur. -\par }\pard\plain \ltrpar\s80\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12255436 \rtlch\fcs1 \af38\afs19\alang1025 \ltrch\fcs0 -\fs19\lang1033\langfe1033\loch\af38\hich\af38\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid8999754\charrsid200783 \hich\af38\dbch\af13\loch\f38 Elle s\hich\f38 \rquote \loch\f38 \hich\f38 applique -\'e9\loch\f38 \hich\f38 galement, m\'ea\loch\f38 \hich\f38 me si Microsoft connaissait ou devrait conna\'ee\loch\f38 tre l\hich\f38 \rquote \'e9\loch\f38 \hich\f38 ventualit\'e9\loch\f38 d\hich\f38 \rquote \loch\f38 un tel dommage.}{\rtlch\fcs1 -\af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid8999754\charrsid200783 \hich\af38\dbch\af13\loch\f38 Si votre pays n\hich\f38 \rquote -\loch\f38 autorise pas l\hich\f38 \rquote \loch\f38 exclusion ou la limitation de responsabi\hich\af38\dbch\af13\loch\f38 \hich\f38 lit\'e9\loch\f38 - pour les dommages indirects, accessoires ou de quelque nature que ce soit, il se peut que la limitation ou l\hich\f38 \rquote \loch\f38 exclusion ci-dessus ne s\hich\f38 \rquote \loch\f38 \hich\f38 appliquera pas \'e0\loch\f38 \hich\f38 votre \'e9 -\loch\f38 gard. -\par }{\rtlch\fcs1 \ab\af38\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid8999754\charrsid200783 \hich\af38\dbch\af13\loch\f38 EFFET JURIDIQUE.}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{ -\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid8999754\charrsid200783 \hich\af38\dbch\af13\loch\f38 \hich\f38 Le pr\'e9\loch\f38 \hich\f38 sent contrat d\'e9\loch\f38 crit certains droits juridiques. Vous pourriez av -\hich\af38\dbch\af13\loch\f38 oir d\hich\f38 \rquote \loch\f38 \hich\f38 autres droits pr\'e9\loch\f38 vus par les lois de votre pays.}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid12797652\charrsid200783 \hich\af38\dbch\af13\loch\f38 }{ -\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid8999754\charrsid200783 \hich\af38\dbch\af13\loch\f38 \hich\f38 Le pr\'e9\loch\f38 \hich\f38 sent contrat ne modifie pas les droits que vous conf\'e8\loch\f38 rent l} -{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15601712\charrsid200783 \hich\af38\dbch\af13\loch\f38 es lois de votre pays si celles-}{\rtlch\fcs1 \af38\afs20 \ltrch\fcs0 -\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid8999754\charrsid200783 \hich\af38\dbch\af13\loch\f38 ci ne le permettent pas.}{\rtlch\fcs1 \ab\af38\afs20 \ltrch\fcs0 \b\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid9964378\charrsid200783 - -\par }{\*\themedata 504b030414000600080000002100828abc13fa0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb6ac3301045f785fe83d0b6d8 -72ba28a5d8cea249777d2cd20f18e4b12d6a8f843409c9df77ecb850ba082d74231062ce997b55ae8fe3a00e1893f354e9555e6885647de3a8abf4fbee29bbd7 -2a3150038327acf409935ed7d757e5ee14302999a654e99e393c18936c8f23a4dc072479697d1c81e51a3b13c07e4087e6b628ee8cf5c4489cf1c4d075f92a0b -44d7a07a83c82f308ac7b0a0f0fbf90c2480980b58abc733615aa2d210c2e02cb04430076a7ee833dfb6ce62e3ed7e14693e8317d8cd0433bf5c60f53fea2fe7 -065bd80facb647e9e25c7fc421fd2ddb526b2e9373fed4bb902e182e97b7b461e6bfad3f010000ffff0300504b030414000600080000002100a5d6a7e7c00000 -00360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4fc7060abb08 -84a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b63095120f88d94fbc -52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462a1a82fe353 -bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f7468656d652f7468 -656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b4b0d592c9c -070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b4757e8d3f7 -29e245eb2b260a0238fd010000ffff0300504b03041400060008000000210096b5ade296060000501b0000160000007468656d652f7468656d652f7468656d65 -312e786d6cec594f6fdb3614bf0fd87720746f6327761a07758ad8b19b2d4d1bc46e871e698996d850a240d2497d1bdae38001c3ba618715d86d87615b8116d8 -a5fb34d93a6c1dd0afb0475292c5585e9236d88aad3e2412f9e3fbff1e1fa9abd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad79482a9c04 -98f184b4bd2991deb58df7dfbb8ad755446282607d22d771db8b944ad79796a40fc3585ee62949606ecc458c15bc8a702910f808e8c66c69b9565b5d8a314d3c -94e018c8de1a8fa94fd05093f43672e23d06af89927ac06762a049136785c10607758d9053d965021d62d6f6804fc08f86e4bef210c352c144dbab999fb7b471 -7509af678b985ab0b6b4ae6f7ed9ba6c4170b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83a6569632cd467faddec9699640f671 -9e76b7d6ac355c7c89feca9cccad4ea7d36c65b258a206641f1b73f8b5da6a6373d9c11b90c537e7f08dce66b7bbeae00dc8e257e7f0fd2badd5868b37a088d1 -e4600ead1ddaef67d40bc898b3ed4af81ac0d76a197c86826828a24bb318f3442d8ab518dfe3a20f000d6458d104a9694ac6d88728eee2782428d60cf03ac1a5 -193be4cbb921cd0b495fd054b5bd0f530c1931a3f7eaf9f7af9e3f45c70f9e1d3ff8e9f8e1c3e3073f5a42ceaa6d9c84e5552fbffdeccfc71fa33f9e7ef3f2d1 -17d57859c6fffac327bffcfc793510d26726ce8b2f9ffcf6ecc98baf3efdfdbb4715f04d814765f890c644a29be408edf3181433567125272371be15c308d3f2 -8acd249438c19a4b05fd9e8a1cf4cd296699771c393ac4b5e01d01e5a30a787d72cf1178108989a2159c77a2d801ee72ce3a5c545a6147f32a99793849c26ae6 -6252c6ed637c58c5bb8b13c7bfbd490a75330f4b47f16e441c31f7184e140e494214d273fc80900aedee52ead87597fa824b3e56e82e451d4c2b4d32a423279a -668bb6690c7e9956e90cfe766cb37b077538abd27a8b1cba48c80acc2a841f12e698f13a9e281c57911ce298950d7e03aba84ac8c154f8655c4f2af074481847 -bd804859b5e696007d4b4edfc150b12addbecba6b18b148a1e54d1bc81392f23b7f84137c2715a851dd0242a633f900710a218ed715505dfe56e86e877f0034e -16bafb0e258ebb4faf06b769e888340b103d3311da9750aa9d0a1cd3e4efca31a3508f6d0c5c5c398602f8e2ebc71591f5b616e24dd893aa3261fb44f95d843b -5974bb5c04f4edafb95b7892ec1108f3f98de75dc97d5772bdff7cc95d94cf672db4b3da0a6557f70db629362d72bcb0431e53c6066acac80d699a6409fb44d0 -8741bdce9c0e4971624a2378cceaba830b05366b90e0ea23aaa241845368b0eb9e2612ca8c742851ca251ceccc70256d8d87265dd96361531f186c3d9058edf2 -c00eafe8e1fc5c509031bb4d680e9f39a3154de0accc56ae644441edd76156d7429d995bdd88664a9dc3ad50197c38af1a0c16d684060441db02565e85f3b966 -0d0713cc48a0ed6ef7dedc2dc60b17e92219e180643ed27acffba86e9c94c78ab90980d8a9f0913ee49d62b512b79626fb06dccee2a432bbc60276b9f7dec44b -7904cfbca4f3f6443ab2a49c9c2c41476dafd55c6e7ac8c769db1bc399161ee314bc2e75cf8759081743be1236ec4f4d6693e5336fb672c5dc24a8c33585b5fb -9cc24e1d4885545b58463634cc5416022cd19cacfccb4d30eb45296023fd35a458598360f8d7a4003bbaae25e331f155d9d9a5116d3bfb9a95523e51440ca2e0 -088dd844ec6370bf0e55d027a012ae264c45d02f708fa6ad6da6dce29c255df9f6cae0ec38666984b372ab5334cf640b37795cc860de4ae2816e95b21be5ceaf -8a49f90b52a51cc6ff3355f47e0237052b81f6800fd7b802239daf6d8f0b1571a8426944fdbe80c6c1d40e8816b88b8569082ab84c36ff0539d4ff6dce591a26 -ade1c0a7f669880485fd484582903d284b26fa4e2156cff62e4b9265844c4495c495a9157b440e091bea1ab8aaf7760f4510eaa69a6465c0e04ec69ffb9e65d0 -28d44d4e39df9c1a52ecbd3607fee9cec7263328e5d661d3d0e4f62f44acd855ed7ab33cdf7bcb8ae889599bd5c8b3029895b6825696f6af29c239b75a5bb1e6 -345e6ee6c28117e73586c1a2214ae1be07e93fb0ff51e133fb65426fa843be0fb515c187064d0cc206a2fa926d3c902e907670048d931db4c1a44959d366ad93 -b65abe595f70a75bf03d616c2dd959fc7d4e6317cd99cbcec9c58b34766661c7d6766ca1a9c1b327531486c6f941c638c67cd22a7f75e2a37be0e82db8df9f30 -254d30c1372581a1f51c983c80e4b71ccdd28dbf000000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468656d652f74 -68656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4350d363f24 -51eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d262452282e3198 -720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe514173d9850528 -a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100828abc13fa0000001c0200001300000000000000000000000000 -000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b000000000000000000000000 -002b0100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c00000000000000000000000000140200007468 -656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d001400060008000000210096b5ade296060000501b000016000000000000000000 -00000000d10200007468656d652f7468656d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b010000270000000000 -00000000000000009b0900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000960a00000000} -{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d -617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 -6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 -656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} -{\*\latentstyles\lsdstimax267\lsdlockeddef0\lsdsemihiddendef1\lsdunhideuseddef1\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal; -\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdlocked0 heading 1;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdlocked0 heading 2;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdlocked0 heading 3; -\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdlocked0 heading 4;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdlocked0 heading 5;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdlocked0 heading 6; -\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdlocked0 heading 7;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdlocked0 heading 8;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdlocked0 heading 9;\lsdpriority39 \lsdlocked0 toc 1; -\lsdpriority39 \lsdlocked0 toc 2;\lsdpriority39 \lsdlocked0 toc 3;\lsdpriority39 \lsdlocked0 toc 4;\lsdpriority39 \lsdlocked0 toc 5;\lsdpriority39 \lsdlocked0 toc 6;\lsdpriority39 \lsdlocked0 toc 7;\lsdpriority39 \lsdlocked0 toc 8; -\lsdpriority39 \lsdlocked0 toc 9;\lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdpriority1 \lsdlocked0 Default Paragraph Font; -\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority59 \lsdlocked0 Table Grid;\lsdunhideused0 \lsdlocked0 Placeholder Text;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 1; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdunhideused0 \lsdlocked0 Revision; -\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 1; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 2; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 2; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 2; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 3; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 3; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 3; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 4; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 4; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 4; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 5; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 5; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 5; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 6; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 6; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 6; -\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis; -\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference; -\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdpriority37 \lsdlocked0 Bibliography;\lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;}}{\*\datastore 010500000200000018000000 -4d73786d6c322e534158584d4c5265616465722e352e3000000000000000000000060000 -d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffffec69d9888b8b3d4c859eaf6cd158be0f0000000000000000000000009095 -e506358ec901feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000105000000000000}}
\ No newline at end of file diff --git a/tools/Contracts/MsBuild/v3.5/Microsoft.CodeContracts.targets b/tools/Contracts/MsBuild/v3.5/Microsoft.CodeContracts.targets deleted file mode 100644 index ddeec03..0000000 --- a/tools/Contracts/MsBuild/v3.5/Microsoft.CodeContracts.targets +++ /dev/null @@ -1,525 +0,0 @@ -<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - - <!-- Multiple Import Guard --> - <PropertyGroup> - <CodeContractsImported>True</CodeContractsImported> - </PropertyGroup> - - <!--===================================================================== - Begin Microsoft Code Contracts - ======================================================================--> - - <PropertyGroup> - <CodeContractsDeclDir>$(IntermediateOutputPath)Decl\</CodeContractsDeclDir> - <CodeContractsContractSubDir>CodeContracts\</CodeContractsContractSubDir> - <CodeContractsCCRefgenCommand>"$(CodeContractsInstallDir)Bin\ccrefgen"</CodeContractsCCRefgenCommand> - </PropertyGroup> - - <Choose> - <When Condition="'$(TargetFrameworkIdentifier)' == 'Silverlight'"> - <PropertyGroup> - <CodeContractsReferenceAssemblyLibPath>$(CodeContractsInstallDir)Contracts\Silverlight\v3.0</CodeContractsReferenceAssemblyLibPath> - </PropertyGroup> - </When> - <Otherwise> - <PropertyGroup> - <CodeContractsReferenceAssemblyLibPath>$(CodeContractsInstallDir)Contracts\v3.5</CodeContractsReferenceAssemblyLibPath> - </PropertyGroup> - </Otherwise> - </Choose> - - <!--===================================================================== - Build Contract reference assemblies on all builds. - (rather than recursively on demand) - - Also define CONTRACTS_FULL and CODE_ANALYSIS dynamically, otherwise - VS property build pane picks it up and may persist it into the project - settings! - =====================================================================--> - - <PropertyGroup> - <CompileDependsOn>CodeContractsSlipInDefineSymbolDynamically;$(CompileDependsOn);CodeContractReferenceAssembly</CompileDependsOn> - </PropertyGroup> - - <Target - Name="CodeContractsSlipInDefineSymbolDynamically" - Condition="'$(CodeContractsEnableRuntimeChecking)' == 'true'" - > - - <CreateProperty - Condition="'$(Language)'=='C#'" - Value="CONTRACTS_FULL;CODE_ANALYSIS;$(DefineConstants)"> - <Output - TaskParameter="Value" - PropertyName="DefineConstants" /> - </CreateProperty> - <CreateProperty - Condition="'$(Language)'=='VB'" - Value="CONTRACTS_FULL=-1,CODE_ANALYSIS=-1,$(FinalDefineConstants)"> - <Output - TaskParameter="Value" - PropertyName="FinalDefineConstants" /> - </CreateProperty> - - </Target> - - <!--===================================================================== - Determine level of runtime checking - ======================================================================--> - <Choose> - <When Condition="'$(CodeContractsRuntimeCheckingLevel)'=='Full'"> - <PropertyGroup> - <CodeContractsRuntimeLevel>4</CodeContractsRuntimeLevel> - </PropertyGroup> - </When> - <!-- default --> - <When Condition="'$(CodeContractsRuntimeCheckingLevel)'==''"> - <PropertyGroup> - <CodeContractsRuntimeLevel>4</CodeContractsRuntimeLevel> - </PropertyGroup> - </When> - <When Condition="'$(CodeContractsRuntimeCheckingLevel)'=='Pre and Post'"> - <PropertyGroup> - <CodeContractsRuntimeLevel>3</CodeContractsRuntimeLevel> - </PropertyGroup> - </When> - <When Condition="'$(CodeContractsRuntimeCheckingLevel)'=='Preconditions'"> - <PropertyGroup> - <CodeContractsRuntimeLevel>2</CodeContractsRuntimeLevel> - </PropertyGroup> - </When> - <!-- for backward compatibility --> - <When Condition="'$(CodeContractsRuntimeCheckingLevel)'=='RequiresAlways'"> - <PropertyGroup> - <CodeContractsRuntimeLevel>1</CodeContractsRuntimeLevel> - </PropertyGroup> - </When> - <When Condition="'$(CodeContractsRuntimeCheckingLevel)'=='ReleaseRequires'"> - <PropertyGroup> - <CodeContractsRuntimeLevel>1</CodeContractsRuntimeLevel> - </PropertyGroup> - </When> - <Otherwise> - <PropertyGroup> - <CodeContractsRuntimeLevel>0</CodeContractsRuntimeLevel> - </PropertyGroup> - </Otherwise> - </Choose> - - <PropertyGroup - Condition="'$(CodeContractsEnableRuntimeChecking)' == 'true'"> - - <!--===================================================================== - C# and VB specific extra defined constants and rewrite post - build step - - Must run prior to other PrepareForRunDependsOn steps - (Silverlight XAP). - ======================================================================--> - - <PrepareForRunDependsOn>CodeContractInstrument; $(PrepareForRunDependsOn)</PrepareForRunDependsOn> - </PropertyGroup> - - <!--===================================================================== - Add post build step for contract XML documentation generation - ======================================================================--> - <PropertyGroup - Condition="'$(CodeContractsEmitXMLDocs)' == 'true'"> - <PrepareForRunDependsOn>$(PrepareForRunDependsOn);ContractXmlDocumentation</PrepareForRunDependsOn> - </PropertyGroup> - - <!--===================================================================== - Define tool options - ======================================================================--> - - <PropertyGroup - Condition="'$(CodeContractsEnableRuntimeChecking)' == 'true'"> - <CodeContractsRewriteLibPaths>@(CodeContractsBuildLibPaths)</CodeContractsRewriteLibPaths> - <CodeContractsRewriteLibPaths - Condition="'$(CodeContractsLibPaths)' != ''">$(CodeContractsRewriteLibPaths);$(CodeContractsLibPaths)</CodeContractsRewriteLibPaths> - <CodeContractsRewriteLibPaths>$(CodeContractsRewriteLibPaths);$(CodeContractsReferenceAssemblyLibPath)</CodeContractsRewriteLibPaths> - <CodeContractRewriteOptions - Condition="'$(CodeContractsPlatformPath)' != ''" - >$(CodeContractRewriteOptions) "/targetplatform:$(CodeContractsPlatformPath)"</CodeContractRewriteOptions> - <CodeContractRewriteOptions - Condition="'$(CodeContractsClassLibrary)' != ''" - >$(CodeContractRewriteOptions) "/contractLibrary:$(CodeContractsClassLibrary)"</CodeContractRewriteOptions> - <CodeContractRewriteOptions - Condition="'$(CodeContractsAssemblyMode)' == '1'" - >$(CodeContractRewriteOptions) "/assemblyMode=standard"</CodeContractRewriteOptions> - <CodeContractRewriteOptions - Condition="'$(CodeContractsRuntimeOnlyPublicSurface)' == 'true'" - >$(CodeContractRewriteOptions) /publicsurface</CodeContractRewriteOptions> - <CodeContractRewriteOptions - Condition="'$(CodeContractsRuntimeThrowOnFailure)' != 'false'" - >$(CodeContractRewriteOptions) /throwonfailure</CodeContractRewriteOptions> - <CodeContractRewriteOptions - Condition="'$(CodeContractsRuntimeCallSiteRequires)' == 'true'" - >$(CodeContractRewriteOptions) /callsiterequires</CodeContractRewriteOptions> - <CodeContractRewriteOptions - Condition="'$(CodeContractsCustomRewriterAssembly)' != '' and '$(CodeContractsCustomRewriterClass)' != ''" - >$(CodeContractRewriteOptions) "/rewriterMethods:$(CodeContractsCustomRewriterAssembly),$(CodeContractsCustomRewriterClass)"</CodeContractRewriteOptions> - <CodeContractRewriteOptions - Condition="'$(CodeContractsExtraRewriteOptions)' != ''" - >$(CodeContractRewriteOptions) $(CodeContractsExtraRewriteOptions)</CodeContractRewriteOptions> - <CodeContractRewriteOptions>$(CodeContractRewriteOptions) /libpaths:"$(CodeContractsRewriteLibPaths) "</CodeContractRewriteOptions> - <CodeContractRewriteCommand>"$(CodeContractsInstallDir)Bin\ccrewrite" /level:$(CodeContractsRuntimeLevel) /rewrite $(CodeContractRewriteOptions) "$(TargetName)$(TargetExt)"</CodeContractRewriteCommand> - - <CodeContractsRewriterOutput>$(IntermediateOutputPath)$(TargetName).rewritten</CodeContractsRewriterOutput> - - </PropertyGroup> - - <ItemGroup - Condition="'$(CodeContractsEnableRuntimeChecking)' == 'true'"> - <CodeContractsRewriterInputs - Include="@(ReferencePath)"/> - <CodeContractsRewriterInputs - Include="@(IntermediateAssembly)"/> - <CodeContractsRewriterInputs - Include="$(IntermediateOutputPath)$(TargetName).pdb"/> - </ItemGroup> - - - <!--===================================================================== - Runtime check instrumentation - ======================================================================--> - - <Target - Name="CodeContractRewrite" - Condition="'$(CodeContractsEnableRuntimeChecking)' == 'true'" - DependsOnTargets="CodeContractsComputeReferencedLibPaths;EnsureContractReferenceAssemblyOfDependeeProjects;$(CodeContractRewriteDependsOn)" - Inputs="@(CodeContractsRewriterInputs)" - Outputs="$(CodeContractsRewriterOutput)" - > - <PropertyGroup Condition="'$(CodeContractsRuntimeOnlyPublicSurface)' == ''"> - <CodeContractsRuntimeOnlyPublicSurface>false</CodeContractsRuntimeOnlyPublicSurface> - </PropertyGroup> - <Exec - WorkingDirectory="$(IntermediateOutputPath)" - Command="$(CodeContractRewriteCommand)" - /> - - <CallTarget Targets="CodeContractReSign"/> - - <WriteLinesToFile - File="$(CodeContractsRewriterOutput)" - /> - <Touch Files="$(CodeContractsRewriterOutput)"/> - <ItemGroup> - <FileWrites - Include="$(CodeContractsRewriterOutput)"/> - </ItemGroup> - </Target> - - <Target - Name="CodeContractReSign" - Condition="'$(DelaySign)' != 'true'" - > - <GetFrameworkSdkPath> - <Output - TaskParameter="Path" - PropertyName="CodeContractsSdkPath" /> - </GetFrameworkSdkPath> - <PropertyGroup> - <CodeContractsSnExe>"$(CodeContractsSdkPath)Bin\sn.exe"</CodeContractsSnExe> - </PropertyGroup> - <Exec - Condition="'$(KeyOriginatorFile)' != ''" - Command='$(CodeContractsSnExe) /R "@(IntermediateAssembly)" "$(KeyOriginatorFile)"' /> - <Exec - Condition="'$(KeyContainerName)' != ''" - Command='$(CodeContractsSnExe) /Rc "@(IntermediateAssembly)" "$(KeyContainerName)"' /> - </Target> - - <Target - Name="CodeContractInstrument" - Condition="'$(CodeContractsEnableRuntimeChecking)' == 'true'" - DependsOnTargets="CodeContractRewrite" - > - </Target> - - <!--===================================================================== - Building Contract Reference Assemblies - ======================================================================--> - <ItemGroup> - <_CodeContractOutputDirectory Include="$(OutDir)$(CodeContractsContractSubDir)"/> - <_ContractDummyReferenceAssembly Include="$(OutDir)$(CodeContractsContractSubDir)noReferenceAssembly"/> - <ContractReferenceAssembly Include="$(OutDir)$(CodeContractsContractSubDir)$(TargetName).Contracts.dll"/> - <ContractReferenceAssemblyAbsolute Include="@(ContractReferenceAssembly->'%(FullPath)')"/> - <ContractReferenceAssemblyPDB Include="$(OutDir)$(CodeContractsContractSubDir)$(TargetName).Contracts.pdb"/> - <ContractDeclarativeAssembly Include="$(CodeContractsDeclDir)$(TargetName)$(TargetExt)"/> - <ContractDeclarativeAssemblyPDB Include="$(CodeContractsDeclDir)$(TargetName).pdb"/> - <ContractReferenceAssemblies Include="@(ContractReferenceAssembly);@(ContractReferenceAssemblyPDB)"/> - <ContractDeclarativeAssemblies Include="@(ContractDeclarativeAssembly);@(ContractDeclarativeAssemblyPDB)"/> - <CodeContractOutputDirectory Include="@(_CodeContractOutputDirectory->'%(RootDir)%(Directory)')"/> - <ContractDummyReferenceAssembly Include="@(_ContractDummyReferenceAssembly->'%(FullPath)')"/> - </ItemGroup> - <Target - Name="CodeContractReferenceAssembly" - DependsOnTargets="CreateCodeContractReferenceAssembly;CodeContractDummyReferenceAssembly" - /> - - <Target - Name="CreateCodeContractReferenceAssembly" - Condition="'$(TargetName)' != 'Microsoft.Contracts' and '$(CodeContractsReferenceAssembly)' == 'build'" - DependsOnTargets="ContractDeclarativeAssembly;$(CodeContractReferenceAssemblyDependsOn);MakeCodeContractOutputDirectory" - Inputs="@(ContractDeclarativeAssemblies)" - Outputs="@(ContractReferenceAssemblyAbsolute)"> - - <Exec - Condition="Exists('@(ContractDeclarativeAssembly)')" - Command='$(CodeContractsCCRefgenCommand) /pdb /out:"@(ContractReferenceAssembly)" "@(ContractDeclarativeAssembly)"' - /> - - <ItemGroup - Condition="Exists('@(ContractReferenceAssemblyAbsolute)')"> - <FileWrites - Include="@(ContractReferenceAssemblies)"/> - </ItemGroup> - </Target> - - <Target - Name="CodeContractDummyReferenceAssembly" - Condition="'$(CodeContractsReferenceAssembly)' == 'doNotBuild'" - DependsOnTargets="MakeCodeContractOutputDirectory" - Outputs="@(ContractDummyReferenceAssembly)"> - - <Touch - Condition="!Exists(@(ContractDummyReferenceAssembly))" - AlwaysCreate="true" - Files="@(ContractDummyReferenceAssembly)" - /> - <ItemGroup> - <FileWrites - Include="@(ContractDummyReferenceAssembly)"/> - </ItemGroup> - </Target> - - <Target - Name="MakeCodeContractOutputDirectory" - Condition="!Exists(@(CodeContractOutputDirectory))" - > - <Message - Text="Making directory @(CodeContractOutputDirectory)" - /> - <MakeDir - Directories="@(CodeContractOutputDirectory)"/> - </Target> - - <Target - Name="EnsureContractReferenceAssemblyOfDependeeProjects" - Condition="'@(_ResolvedProjectReferencePaths)' != ''" - > - - <Message - Text="EnsureContractReferenceAssemblies: @(_ResolvedProjectReferencePaths)" - Importance="high" - /> - - <Warning - Condition="!Exists('%(RootDir)%(Directory)CodeContracts\%(Filename).Contracts.dll') and !Exists('%(RootDir)%(Directory)\CodeContracts\noReferenceAssembly')" - Text="Contract reference assembly for project '%(Filename)' not found. Select 'Build' or 'DoNotBuild' for Contract Reference in project settings." - HelpKeyword="@(_ResolvedProjectReferencePaths)" - /> - </Target> - - <!--===================================================================== - Building Contract Declarative Assemblies - ======================================================================--> - <Target - Name="ContractDeclarativeAssembly" - DependsOnTargets="ContractsMakeDeclDir;ResolveReferences;ResolveKeySource;ContractDeclarativeAssemblyCS;ContractDeclarativeAssemblyVB" - /> - - <Target Name="ContractsMakeDeclDir"> - <MakeDir - Condition="!Exists('$(CodeContractsDeclDir)')" - Directories="$(CodeContractsDeclDir)"/> - </Target> - - <Target - Name="ContractDeclarativeAssemblyVB" - Condition="'$(Language)'=='VB'" - DependsOnTargets="" - Inputs="$(MSBuildAllProjects); - @(Compile)" - Outputs="@(ContractDeclarativeAssembly->'%(FullPath)')" - > - <ItemGroup> - <ContractDeclarativeSources Include="@(Compile);$(CodeContractsInstallDir)Languages\VisualBasic\ContractDeclarativeAssemblyAttribute.vb"/> - </ItemGroup> - <Message Text="Build Declarative Contract Assembly for VB $(TargetPath)"/> - <Vbc Condition=" '%(_CoreCompileResourceInputs.WithCulture)' != 'true' " - AdditionalLibPaths="$(AdditionalLibPaths)" - AddModules="@(AddModules)" - BaseAddress="$(BaseAddress)" - CodePage="$(CodePage)" - DebugType="$(DebugType)" - DefineConstants="$(FinalDefineConstants),CONTRACTS_FULL=-1,CODE_ANALYSIS=-1" - DelaySign="$(DelaySign)" - DisabledWarnings="$(NoWarn)" - DocumentationFile="" - EmitDebugInformation="$(DebugSymbols)" - ErrorReport="$(ErrorReport)" - FileAlignment="$(FileAlignment)" - GenerateDocumentation="" - Imports="@(Import)" - KeyContainer="$(KeyContainerName)" - KeyFile="$(KeyOriginatorFile)" - MainEntryPoint="$(StartupObject)" - ModuleAssemblyName="$(ModuleAssemblyName)" - NoConfig="true" - NoStandardLib="$(NoStdLib)" - NoVBRuntimeReference="$(NoVBRuntimeReference)" - NoWarnings="$(_NoWarnings)" - NoWin32Manifest="$(NoWin32Manifest)" - Optimize="true" - OptionCompare="$(OptionCompare)" - OptionExplicit="$(OptionExplicit)" - OptionInfer="$(OptionInfer)" - OptionStrict="$(OptionStrict)" - OptionStrictType="$(OptionStrictType)" - OutputAssembly="@(ContractDeclarativeAssembly)" - Platform="$(PlatformTarget)" - References="@(ReferencePath)" - RemoveIntegerChecks="$(RemoveIntegerChecks)" - Resources="@(_CoreCompileResourceInputs);@(CompiledLicenseFile)" - ResponseFiles="$(CompilerResponseFile)" - RootNamespace="$(RootNamespace)" - SdkPath="$(FrameworkPathOverride)" - Sources="@(ContractDeclarativeSources)" - TargetCompactFramework="$(TargetCompactFramework)" - TargetType="$(OutputType)" - ToolExe="$(VbcToolExe)" - ToolPath="$(VbcToolPath)" - TreatWarningsAsErrors="false" - UseHostCompilerIfAvailable="$(UseHostCompilerIfAvailable)" - Utf8Output="$(Utf8Output)" - Verbosity="$(VbcVerbosity)" - WarningsAsErrors="" - WarningsNotAsErrors="$(WarningsNotAsErrors)" - Win32Icon="$(ApplicationIcon)" - Win32Manifest="$(Win32Manifest)" - Win32Resource="$(Win32Resource)" - /> - - <ItemGroup> - <FileWrites - Include="@(ContractDeclarativeAssemblies)"/> - </ItemGroup> - </Target> - - <Target - Name="ContractDeclarativeAssemblyCS" - Condition="'$(Language)'=='C#'" - DependsOnTargets="" - Inputs="$(MSBuildAllProjects); - @(Compile)" - Outputs="@(ContractDeclarativeAssembly->'%(FullPath)')" - > - <ItemGroup> - <ContractDeclarativeSources Include="@(Compile);$(CodeContractsInstallDir)Languages\CSharp\ContractDeclarativeAssemblyAttribute.cs"/> - </ItemGroup> - <Message Text="Build Declarative Contract Assembly for C# $(TargetPath)"/> - <Csc - AdditionalLibPaths="$(AdditionalLibPaths)" - AddModules="@(AddModules)" - AllowUnsafeBlocks="$(AllowUnsafeBlocks)" - BaseAddress="$(BaseAddress)" - CheckForOverflowUnderflow="$(CheckForOverflowUnderflow)" - CodePage="$(CodePage)" - DebugType="full" - DefineConstants="$(DefineConstants);CONTRACTS_FULL;CODE_ANALYSIS" - DelaySign="$(DelaySign)" - DisabledWarnings="$(NoWarn)" - DocumentationFile="" - EmitDebugInformation="true" - ErrorReport="$(ErrorReport)" - FileAlignment="$(FileAlignment)" - GenerateFullPaths="$(GenerateFullPaths)" - KeyContainer="$(KeyContainerName)" - KeyFile="$(KeyOriginatorFile)" - LangVersion="$(LangVersion)" - MainEntryPoint="$(StartupObject)" - ModuleAssemblyName="$(ModuleAssemblyName)" - NoConfig="true" - NoLogo="$(NoLogo)" - NoStandardLib="$(NoStdLib)" - NoWin32Manifest="$(NoWin32Manifest)" - Optimize="true" - OutputAssembly="@(ContractDeclarativeAssembly)" - PdbFile="@(ContractDeclarativeAssemblyPDB)" - Platform="$(PlatformTarget)" - References="@(ReferencePath)" - Resources="" - ResponseFiles="$(CompilerResponseFile)" - Sources="@(ContractDeclarativeSources)" - TargetType="$(OutputType)" - ToolExe="$(CscToolExe)" - ToolPath="$(CscToolPath)" - TreatWarningsAsErrors="false" - UseHostCompilerIfAvailable="$(UseHostCompilerIfAvailable)" - Utf8Output="$(Utf8Output)" - WarningLevel="0" - WarningsAsErrors="" - WarningsNotAsErrors="$(WarningsNotAsErrors)" - Win32Icon="" - Win32Manifest="$(Win32Manifest)" - Win32Resource="$(Win32Resource)" - /> - - <ItemGroup> - <FileWrites - Include="@(ContractDeclarativeAssemblies)"/> - </ItemGroup> - </Target> - - - <Target - Name="CodeContractsComputeReferencedLibPaths"> - <ItemGroup> - <_CodeContractsBuildReferences - Include="@(ReferencePath->'%(RootDir)%(Directory)')"/> - <_CodeContractsBuildReferences - Include="@(ReferencePath->'%(RootDir)%(Directory)CodeContracts')"/> - </ItemGroup> - <RemoveDuplicates - Inputs="@(_CodeContractsBuildReferences)"> - <Output - TaskParameter="Filtered" - ItemName="CodeContractsBuildLibPaths"/> - </RemoveDuplicates> - </Target> - - <!--===================================================================== - Building XML Documentation for Contracts - ======================================================================--> - <PropertyGroup> - <CodeContractsCCDocgenCommand>"$(CodeContractsInstallDir)Bin\ccdocgen"</CodeContractsCCDocgenCommand> - <CodeContractsCCDocLibPaths>$(CodeContractsReferenceAssemblyLibPath);@(CodeContractsBuildLibPaths)</CodeContractsCCDocLibPaths> - <CodeContractsCCDocLibPaths - Condition="'$(CodeContractsLibPaths)' != ''">$(CodeContractsCCDocLibPaths);$(CodeContractsLibPaths)</CodeContractsCCDocLibPaths> - </PropertyGroup> - - <Target - Name="ContractXmlDocumentation" - Condition="Exists('@(DocFileItem)') and Exists('@(ContractReferenceAssemblyAbsolute)')" - DependsOnTargets="CodeContractReferenceAssembly;CodeContractsComputeReferencedLibPaths" - Inputs="@(ContractReferenceAssembly);@(DocFileItem)" - Outputs="@(DocFileItem)"> - - <Exec - Command='$(CodeContractsCCdocgenCommand) -assembly "@(ContractReferenceAssembly)" -xmlFile "@(DocFileItem)" -libpaths "$(CodeContractsCCDocLibPaths) "' - /> - </Target> - - <!--===================================================================== - Include Code Analysis target if present - ======================================================================--> - <PropertyGroup> - <CodeContractAnalysisTargets>$(CodeContractsInstallDir)MsBuild\v3.5\Microsoft.CodeContractAnalysis.targets</CodeContractAnalysisTargets> - </PropertyGroup> - <Import Project="$(CodeContractAnalysisTargets)" Condition="Exists('$(CodeContractAnalysisTargets)')"/> - - <!-- End Microsoft Code Contracts --> -</Project> diff --git a/tools/Contracts/MsBuild/v4.0/Microsoft.CodeContracts.targets b/tools/Contracts/MsBuild/v4.0/Microsoft.CodeContracts.targets deleted file mode 100644 index c7afdbf..0000000 --- a/tools/Contracts/MsBuild/v4.0/Microsoft.CodeContracts.targets +++ /dev/null @@ -1,544 +0,0 @@ -<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - - <!-- Multiple Import Guard --> - <PropertyGroup> - <CodeContractsImported>True</CodeContractsImported> - </PropertyGroup> - - <!--===================================================================== - Begin Microsoft Code Contracts - ======================================================================--> - - <PropertyGroup> - <CodeContractsDeclDir>$(IntermediateOutputPath)Decl\</CodeContractsDeclDir> - <CodeContractsContractSubDir>CodeContracts\</CodeContractsContractSubDir> - <CodeContractsCCRefgenCommand>"$(CodeContractsInstallDir)Bin\ccrefgen"</CodeContractsCCRefgenCommand> - </PropertyGroup> - - <Choose> - <When Condition="'$(TargetFrameworkIdentifier)' == 'Silverlight'"> - <Choose> - <When Condition="'$(TargetFrameworkVersion)' == 'v4.0'"> - <PropertyGroup> - <CodeContractsReferenceAssemblyLibPath>$(CodeContractsInstallDir)Contracts\Silverlight\v4.0</CodeContractsReferenceAssemblyLibPath> - </PropertyGroup> - </When> - <Otherwise> - <PropertyGroup> - <CodeContractsReferenceAssemblyLibPath>$(CodeContractsInstallDir)Contracts\Silverlight\v3.0</CodeContractsReferenceAssemblyLibPath> - </PropertyGroup> - </Otherwise> - </Choose> - </When> - <Otherwise> - <Choose> - <When Condition="'$(TargetFrameworkVersion)' == 'v4.0'"> - <PropertyGroup> - <CodeContractsReferenceAssemblyLibPath>$(CodeContractsInstallDir)Contracts\.NETFramework\v4.0</CodeContractsReferenceAssemblyLibPath> - </PropertyGroup> - </When> - <Otherwise> - <PropertyGroup> - <CodeContractsReferenceAssemblyLibPath>$(CodeContractsInstallDir)Contracts\v3.5</CodeContractsReferenceAssemblyLibPath> - </PropertyGroup> - </Otherwise> - </Choose> - </Otherwise> - </Choose> - - <!--===================================================================== - Build Contract reference assemblies on all builds. - (rather than recursively on demand) - - Also define CONTRACTS_FULL and CODE_ANALYSIS dynamically, otherwise - VS property build pane picks it up and may persist it into the project - settings! - =====================================================================--> - - <PropertyGroup> - <CompileDependsOn>CodeContractsSlipInDefineSymbolDynamically;$(CompileDependsOn);CodeContractReferenceAssembly</CompileDependsOn> - </PropertyGroup> - - <Target - Name="CodeContractsSlipInDefineSymbolDynamically" - Condition="'$(CodeContractsEnableRuntimeChecking)' == 'true'" - > - - <CreateProperty - Condition="'$(Language)'=='C#'" - Value="CONTRACTS_FULL;CODE_ANALYSIS;$(DefineConstants)"> - <Output - TaskParameter="Value" - PropertyName="DefineConstants" /> - </CreateProperty> - <CreateProperty - Condition="'$(Language)'=='VB'" - Value="CONTRACTS_FULL=-1,CODE_ANALYSIS=-1,$(FinalDefineConstants)"> - <Output - TaskParameter="Value" - PropertyName="FinalDefineConstants" /> - </CreateProperty> - - </Target> - - <!--===================================================================== - Determine level of runtime checking - ======================================================================--> - <Choose> - <When Condition="'$(CodeContractsRuntimeCheckingLevel)'=='Full'"> - <PropertyGroup> - <CodeContractsRuntimeLevel>4</CodeContractsRuntimeLevel> - </PropertyGroup> - </When> - <!-- default --> - <When Condition="'$(CodeContractsRuntimeCheckingLevel)'==''"> - <PropertyGroup> - <CodeContractsRuntimeLevel>4</CodeContractsRuntimeLevel> - </PropertyGroup> - </When> - <When Condition="'$(CodeContractsRuntimeCheckingLevel)'=='Pre and Post'"> - <PropertyGroup> - <CodeContractsRuntimeLevel>3</CodeContractsRuntimeLevel> - </PropertyGroup> - </When> - <When Condition="'$(CodeContractsRuntimeCheckingLevel)'=='Preconditions'"> - <PropertyGroup> - <CodeContractsRuntimeLevel>2</CodeContractsRuntimeLevel> - </PropertyGroup> - </When> - <!-- for backward compatibility --> - <When Condition="'$(CodeContractsRuntimeCheckingLevel)'=='RequiresAlways'"> - <PropertyGroup> - <CodeContractsRuntimeLevel>1</CodeContractsRuntimeLevel> - </PropertyGroup> - </When> - <When Condition="'$(CodeContractsRuntimeCheckingLevel)'=='ReleaseRequires'"> - <PropertyGroup> - <CodeContractsRuntimeLevel>1</CodeContractsRuntimeLevel> - </PropertyGroup> - </When> - <Otherwise> - <PropertyGroup> - <CodeContractsRuntimeLevel>0</CodeContractsRuntimeLevel> - </PropertyGroup> - </Otherwise> - </Choose> - - <PropertyGroup - Condition="'$(CodeContractsEnableRuntimeChecking)' == 'true'"> - - <!--===================================================================== - C# and VB specific extra defined constants and rewrite post - build step - - Must run prior to other PrepareForRunDependsOn steps - (Silverlight XAP). - ======================================================================--> - - <PrepareForRunDependsOn>CodeContractInstrument; $(PrepareForRunDependsOn)</PrepareForRunDependsOn> - </PropertyGroup> - - <!--===================================================================== - Add post build step for contract XML documentation generation - ======================================================================--> - <PropertyGroup - Condition="'$(CodeContractsEmitXMLDocs)' == 'true'"> - <PrepareForRunDependsOn>$(PrepareForRunDependsOn);ContractXmlDocumentation</PrepareForRunDependsOn> - </PropertyGroup> - - <!--===================================================================== - Define tool options - ======================================================================--> - - <PropertyGroup - Condition="'$(CodeContractsEnableRuntimeChecking)' == 'true'"> - <CodeContractsRewriteLibPaths>@(CodeContractsBuildLibPaths)</CodeContractsRewriteLibPaths> - <CodeContractsRewriteLibPaths - Condition="'$(CodeContractsLibPaths)' != ''">$(CodeContractsRewriteLibPaths);$(CodeContractsLibPaths)</CodeContractsRewriteLibPaths> - <CodeContractsRewriteLibPaths>$(CodeContractsRewriteLibPaths);$(CodeContractsReferenceAssemblyLibPath)</CodeContractsRewriteLibPaths> - <CodeContractRewriteOptions - Condition="'$(CodeContractsPlatformPath)' != ''" - >$(CodeContractRewriteOptions) "/targetplatform:$(CodeContractsPlatformPath)"</CodeContractRewriteOptions> - <CodeContractRewriteOptions - Condition="'$(CodeContractsClassLibrary)' != ''" - >$(CodeContractRewriteOptions) "/contractLibrary:$(CodeContractsClassLibrary)"</CodeContractRewriteOptions> - <CodeContractRewriteOptions - Condition="'$(CodeContractsAssemblyMode)' == '1'" - >$(CodeContractRewriteOptions) "/assemblyMode=standard"</CodeContractRewriteOptions> - <CodeContractRewriteOptions - Condition="'$(CodeContractsRuntimeOnlyPublicSurface)' == 'true'" - >$(CodeContractRewriteOptions) /publicsurface</CodeContractRewriteOptions> - <CodeContractRewriteOptions - Condition="'$(CodeContractsRuntimeThrowOnFailure)' != 'false'" - >$(CodeContractRewriteOptions) /throwonfailure</CodeContractRewriteOptions> - <CodeContractRewriteOptions - Condition="'$(CodeContractsRuntimeCallSiteRequires)' == 'true'" - >$(CodeContractRewriteOptions) /callsiterequires</CodeContractRewriteOptions> - <CodeContractRewriteOptions - Condition="'$(CodeContractsCustomRewriterAssembly)' != '' and '$(CodeContractsCustomRewriterClass)' != ''" - >$(CodeContractRewriteOptions) "/rewriterMethods:$(CodeContractsCustomRewriterAssembly),$(CodeContractsCustomRewriterClass)"</CodeContractRewriteOptions> - <CodeContractRewriteOptions - Condition="'$(CodeContractsExtraRewriteOptions)' != ''" - >$(CodeContractRewriteOptions) $(CodeContractsExtraRewriteOptions)</CodeContractRewriteOptions> - <CodeContractRewriteOptions>$(CodeContractRewriteOptions) /libpaths:"$(CodeContractsRewriteLibPaths) "</CodeContractRewriteOptions> - <CodeContractRewriteCommand>"$(CodeContractsInstallDir)Bin\ccrewrite" /level:$(CodeContractsRuntimeLevel) /rewrite $(CodeContractRewriteOptions) "$(TargetName)$(TargetExt)"</CodeContractRewriteCommand> - - <CodeContractsRewriterOutput>$(IntermediateOutputPath)$(TargetName).rewritten</CodeContractsRewriterOutput> - - </PropertyGroup> - - <ItemGroup - Condition="'$(CodeContractsEnableRuntimeChecking)' == 'true'"> - <CodeContractsRewriterInputs - Include="@(ReferencePath)"/> - <CodeContractsRewriterInputs - Include="@(IntermediateAssembly)"/> - <CodeContractsRewriterInputs - Include="$(IntermediateOutputPath)$(TargetName).pdb"/> - </ItemGroup> - - - <!--===================================================================== - Runtime check instrumentation - ======================================================================--> - - <Target - Name="CodeContractRewrite" - Condition="'$(CodeContractsEnableRuntimeChecking)' == 'true'" - DependsOnTargets="CodeContractsComputeReferencedLibPaths;EnsureContractReferenceAssemblyOfDependeeProjects;$(CodeContractRewriteDependsOn)" - Inputs="@(CodeContractsRewriterInputs)" - Outputs="$(CodeContractsRewriterOutput)" - > - <PropertyGroup Condition="'$(CodeContractsRuntimeOnlyPublicSurface)' == ''"> - <CodeContractsRuntimeOnlyPublicSurface>false</CodeContractsRuntimeOnlyPublicSurface> - </PropertyGroup> - <Exec - WorkingDirectory="$(IntermediateOutputPath)" - Command="$(CodeContractRewriteCommand)" - /> - - <CallTarget Targets="CodeContractReSign"/> - - <WriteLinesToFile - File="$(CodeContractsRewriterOutput)" - /> - <Touch Files="$(CodeContractsRewriterOutput)"/> - <ItemGroup> - <FileWrites - Include="$(CodeContractsRewriterOutput)"/> - </ItemGroup> - </Target> - - <Target - Name="CodeContractReSign" - Condition="'$(DelaySign)' != 'true'" - > - <GetFrameworkSdkPath> - <Output - TaskParameter="Path" - PropertyName="CodeContractsSdkPath" /> - </GetFrameworkSdkPath> - <PropertyGroup> - <CodeContractsSnExe>"$(CodeContractsSdkPath)Bin\sn.exe"</CodeContractsSnExe> - </PropertyGroup> - <Exec - Condition="'$(KeyOriginatorFile)' != ''" - Command='$(CodeContractsSnExe) /R "@(IntermediateAssembly)" "$(KeyOriginatorFile)"' /> - <Exec - Condition="'$(KeyContainerName)' != ''" - Command='$(CodeContractsSnExe) /Rc "@(IntermediateAssembly)" "$(KeyContainerName)"' /> - </Target> - - <Target - Name="CodeContractInstrument" - Condition="'$(CodeContractsEnableRuntimeChecking)' == 'true'" - DependsOnTargets="CodeContractRewrite" - > - </Target> - - <!--===================================================================== - Building Contract Reference Assemblies - ======================================================================--> - <ItemGroup> - <_CodeContractOutputDirectory Include="$(OutDir)$(CodeContractsContractSubDir)"/> - <_ContractDummyReferenceAssembly Include="$(OutDir)$(CodeContractsContractSubDir)noReferenceAssembly"/> - <ContractReferenceAssembly Include="$(OutDir)$(CodeContractsContractSubDir)$(TargetName).Contracts.dll"/> - <ContractReferenceAssemblyAbsolute Include="@(ContractReferenceAssembly->'%(FullPath)')"/> - <ContractReferenceAssemblyPDB Include="$(OutDir)$(CodeContractsContractSubDir)$(TargetName).Contracts.pdb"/> - <ContractDeclarativeAssembly Include="$(CodeContractsDeclDir)$(TargetName)$(TargetExt)"/> - <ContractDeclarativeAssemblyPDB Include="$(CodeContractsDeclDir)$(TargetName).pdb"/> - <ContractReferenceAssemblies Include="@(ContractReferenceAssembly);@(ContractReferenceAssemblyPDB)"/> - <ContractDeclarativeAssemblies Include="@(ContractDeclarativeAssembly);@(ContractDeclarativeAssemblyPDB)"/> - <CodeContractOutputDirectory Include="@(_CodeContractOutputDirectory->'%(RootDir)%(Directory)')"/> - <ContractDummyReferenceAssembly Include="@(_ContractDummyReferenceAssembly->'%(FullPath)')"/> - </ItemGroup> - <Target - Name="CodeContractReferenceAssembly" - DependsOnTargets="CreateCodeContractReferenceAssembly;CodeContractDummyReferenceAssembly" - /> - - <Target - Name="CreateCodeContractReferenceAssembly" - Condition="'$(TargetName)' != 'Microsoft.Contracts' and '$(CodeContractsReferenceAssembly)' == 'build'" - DependsOnTargets="ContractDeclarativeAssembly;$(CodeContractReferenceAssemblyDependsOn);MakeCodeContractOutputDirectory" - Inputs="@(ContractDeclarativeAssemblies)" - Outputs="@(ContractReferenceAssemblyAbsolute)"> - - <Exec - Condition="Exists('@(ContractDeclarativeAssembly)')" - Command='$(CodeContractsCCRefgenCommand) /pdb /out:"@(ContractReferenceAssembly)" "@(ContractDeclarativeAssembly)"' - /> - - <ItemGroup - Condition="Exists('@(ContractReferenceAssemblyAbsolute)')"> - <FileWrites - Include="@(ContractReferenceAssemblies)"/> - </ItemGroup> - </Target> - - <Target - Name="CodeContractDummyReferenceAssembly" - Condition="'$(CodeContractsReferenceAssembly)' == 'doNotBuild'" - DependsOnTargets="MakeCodeContractOutputDirectory" - Outputs="@(ContractDummyReferenceAssembly)"> - - <Touch - Condition="!Exists(@(ContractDummyReferenceAssembly))" - AlwaysCreate="true" - Files="@(ContractDummyReferenceAssembly)" - /> - <ItemGroup> - <FileWrites - Include="@(ContractDummyReferenceAssembly)"/> - </ItemGroup> - </Target> - - <Target - Name="MakeCodeContractOutputDirectory" - Condition="!Exists(@(CodeContractOutputDirectory))" - > - <Message - Text="Making directory @(CodeContractOutputDirectory)" - /> - <MakeDir - Directories="@(CodeContractOutputDirectory)"/> - </Target> - - <Target - Name="EnsureContractReferenceAssemblyOfDependeeProjects" - Condition="'@(_ResolvedProjectReferencePaths)' != ''" - > - - <Message - Text="EnsureContractReferenceAssemblies: @(_ResolvedProjectReferencePaths)" - Importance="high" - /> - - <Warning - Condition="!Exists('%(RootDir)%(Directory)CodeContracts\%(Filename).Contracts.dll') and !Exists('%(RootDir)%(Directory)\CodeContracts\noReferenceAssembly')" - Text="Contract reference assembly for project '%(Filename)' not found. Select 'Build' or 'DoNotBuild' for Contract Reference in project settings." - HelpKeyword="@(_ResolvedProjectReferencePaths)" - /> - </Target> - - <!--===================================================================== - Building Contract Declarative Assemblies - ======================================================================--> - <Target - Name="ContractDeclarativeAssembly" - DependsOnTargets="ContractsMakeDeclDir;ResolveReferences;ResolveKeySource;ContractDeclarativeAssemblyCS;ContractDeclarativeAssemblyVB" - /> - - <Target Name="ContractsMakeDeclDir"> - <MakeDir - Condition="!Exists('$(CodeContractsDeclDir)')" - Directories="$(CodeContractsDeclDir)"/> - </Target> - - <Target - Name="ContractDeclarativeAssemblyVB" - Condition="'$(Language)'=='VB'" - DependsOnTargets="" - Inputs="$(MSBuildAllProjects); - @(Compile)" - Outputs="@(ContractDeclarativeAssembly->'%(FullPath)')" - > - <ItemGroup> - <ContractDeclarativeSources Include="@(Compile);$(CodeContractsInstallDir)Languages\VisualBasic\ContractDeclarativeAssemblyAttribute.vb"/> - </ItemGroup> - <Message Text="Build Declarative Contract Assembly for VB $(TargetPath)"/> - <Vbc Condition=" '%(_CoreCompileResourceInputs.WithCulture)' != 'true' " - AdditionalLibPaths="$(AdditionalLibPaths)" - AddModules="@(AddModules)" - BaseAddress="$(BaseAddress)" - CodePage="$(CodePage)" - DebugType="$(DebugType)" - DefineConstants="$(FinalDefineConstants),CONTRACTS_FULL=-1,CODE_ANALYSIS=-1" - DelaySign="$(DelaySign)" - DisabledWarnings="$(NoWarn)" - DocumentationFile="" - EmitDebugInformation="$(DebugSymbols)" - ErrorReport="$(ErrorReport)" - FileAlignment="$(FileAlignment)" - GenerateDocumentation="" - Imports="@(Import)" - KeyContainer="$(KeyContainerName)" - KeyFile="$(KeyOriginatorFile)" - LangVersion="$(LangVersion)" - MainEntryPoint="$(StartupObject)" - ModuleAssemblyName="$(ModuleAssemblyName)" - NoConfig="true" - NoStandardLib="$(NoCompilerStandardLib)" - NoVBRuntimeReference="$(NoVBRuntimeReference)" - NoWarnings="$(_NoWarnings)" - NoWin32Manifest="$(NoWin32Manifest)" - Optimize="true" - OptionCompare="$(OptionCompare)" - OptionExplicit="$(OptionExplicit)" - OptionInfer="$(OptionInfer)" - OptionStrict="$(OptionStrict)" - OptionStrictType="$(OptionStrictType)" - OutputAssembly="@(ContractDeclarativeAssembly)" - Platform="$(PlatformTarget)" - References="@(ReferencePath)" - RemoveIntegerChecks="$(RemoveIntegerChecks)" - Resources="@(_CoreCompileResourceInputs);@(CompiledLicenseFile)" - ResponseFiles="$(CompilerResponseFile)" - RootNamespace="$(RootNamespace)" - SdkPath="$(FrameworkPathOverride)" - Sources="@(ContractDeclarativeSources)" - TargetCompactFramework="$(TargetCompactFramework)" - TargetType="$(OutputType)" - ToolExe="$(VbcToolExe)" - ToolPath="$(VbcToolPath)" - TreatWarningsAsErrors="false" - UseHostCompilerIfAvailable="$(UseHostCompilerIfAvailable)" - Utf8Output="$(Utf8Output)" - Verbosity="$(VbcVerbosity)" - WarningsAsErrors="" - WarningsNotAsErrors="$(WarningsNotAsErrors)" - Win32Icon="$(ApplicationIcon)" - Win32Manifest="$(Win32Manifest)" - Win32Resource="$(Win32Resource)" - /> - - <ItemGroup> - <FileWrites - Include="@(ContractDeclarativeAssemblies)"/> - </ItemGroup> - </Target> - - <Target - Name="ContractDeclarativeAssemblyCS" - Condition="'$(Language)'=='C#'" - DependsOnTargets="" - Inputs="$(MSBuildAllProjects); - @(Compile)" - Outputs="@(ContractDeclarativeAssembly->'%(FullPath)')" - > - <ItemGroup> - <ContractDeclarativeSources Include="@(Compile);$(CodeContractsInstallDir)Languages\CSharp\ContractDeclarativeAssemblyAttribute.cs"/> - </ItemGroup> - <Message Text="Build Declarative Contract Assembly for C# $(TargetPath)"/> - <Csc - AdditionalLibPaths="$(AdditionalLibPaths)" - AddModules="@(AddModules)" - AllowUnsafeBlocks="$(AllowUnsafeBlocks)" - BaseAddress="$(BaseAddress)" - CheckForOverflowUnderflow="$(CheckForOverflowUnderflow)" - CodePage="$(CodePage)" - DebugType="full" - DefineConstants="$(DefineConstants);CONTRACTS_FULL;CODE_ANALYSIS" - DelaySign="$(DelaySign)" - DisabledWarnings="$(NoWarn)" - DocumentationFile="" - EmitDebugInformation="true" - ErrorReport="$(ErrorReport)" - FileAlignment="$(FileAlignment)" - GenerateFullPaths="$(GenerateFullPaths)" - KeyContainer="$(KeyContainerName)" - KeyFile="$(KeyOriginatorFile)" - LangVersion="$(LangVersion)" - MainEntryPoint="$(StartupObject)" - ModuleAssemblyName="$(ModuleAssemblyName)" - NoConfig="true" - NoLogo="$(NoLogo)" - NoStandardLib="$(NoCompilerStandardLib)" - NoWin32Manifest="$(NoWin32Manifest)" - Optimize="true" - OutputAssembly="@(ContractDeclarativeAssembly)" - PdbFile="@(ContractDeclarativeAssemblyPDB)" - Platform="$(PlatformTarget)" - References="@(ReferencePath)" - Resources="" - ResponseFiles="$(CompilerResponseFile)" - Sources="@(ContractDeclarativeSources)" - TargetType="$(OutputType)" - ToolExe="$(CscToolExe)" - ToolPath="$(CscToolPath)" - TreatWarningsAsErrors="false" - UseHostCompilerIfAvailable="$(UseHostCompilerIfAvailable)" - Utf8Output="$(Utf8Output)" - WarningLevel="0" - WarningsAsErrors="" - WarningsNotAsErrors="$(WarningsNotAsErrors)" - Win32Icon="" - Win32Manifest="$(Win32Manifest)" - Win32Resource="$(Win32Resource)" - /> - - <ItemGroup> - <FileWrites - Include="@(ContractDeclarativeAssemblies)"/> - </ItemGroup> - </Target> - - - <Target - Name="CodeContractsComputeReferencedLibPaths"> - <ItemGroup> - <_CodeContractsBuildReferences - Include="@(ReferencePath->'%(RootDir)%(Directory)')"/> - <_CodeContractsBuildReferences - Include="@(ReferencePath->'%(RootDir)%(Directory)CodeContracts')"/> - </ItemGroup> - <RemoveDuplicates - Inputs="@(_CodeContractsBuildReferences)"> - <Output - TaskParameter="Filtered" - ItemName="CodeContractsBuildLibPaths"/> - </RemoveDuplicates> - </Target> - - <!--===================================================================== - Building XML Documentation for Contracts - ======================================================================--> - <PropertyGroup> - <CodeContractsCCDocgenCommand>"$(CodeContractsInstallDir)Bin\ccdocgen"</CodeContractsCCDocgenCommand> - <CodeContractsCCDocLibPaths>$(CodeContractsReferenceAssemblyLibPath);@(CodeContractsBuildLibPaths)</CodeContractsCCDocLibPaths> - <CodeContractsCCDocLibPaths - Condition="'$(CodeContractsLibPaths)' != ''">$(CodeContractsCCDocLibPaths);$(CodeContractsLibPaths)</CodeContractsCCDocLibPaths> - </PropertyGroup> - - <Target - Name="ContractXmlDocumentation" - Condition="Exists('@(DocFileItem)') and Exists('@(ContractReferenceAssemblyAbsolute)')" - DependsOnTargets="CodeContractReferenceAssembly;CodeContractsComputeReferencedLibPaths" - Inputs="@(ContractReferenceAssembly);@(DocFileItem)" - Outputs="@(DocFileItem)"> - - <Exec - Command='$(CodeContractsCCdocgenCommand) -assembly "@(ContractReferenceAssembly)" -xmlFile "@(DocFileItem)" -libpaths "$(CodeContractsCCDocLibPaths) "' - /> - </Target> - - <!--===================================================================== - Include Code Analysis target if present - ======================================================================--> - <PropertyGroup> - <CodeContractAnalysisTargets>$(CodeContractsInstallDir)MsBuild\v4.0\Microsoft.CodeContractAnalysis.targets</CodeContractAnalysisTargets> - </PropertyGroup> - <Import Project="$(CodeContractAnalysisTargets)" Condition="Exists('$(CodeContractAnalysisTargets)')"/> - - <!-- End Microsoft Code Contracts --> -</Project> diff --git a/tools/Contracts/PublicAssemblies/Silverlight3/Microsoft.Contracts.dll b/tools/Contracts/PublicAssemblies/Silverlight3/Microsoft.Contracts.dll Binary files differdeleted file mode 100644 index 77a19fe..0000000 --- a/tools/Contracts/PublicAssemblies/Silverlight3/Microsoft.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/PublicAssemblies/Silverlight3/Redist.txt b/tools/Contracts/PublicAssemblies/Silverlight3/Redist.txt deleted file mode 100644 index 0e39817..0000000 --- a/tools/Contracts/PublicAssemblies/Silverlight3/Redist.txt +++ /dev/null @@ -1 +0,0 @@ -Microsoft.Contracts.dll diff --git a/tools/Contracts/PublicAssemblies/v3.5/Microsoft.Contracts.dll b/tools/Contracts/PublicAssemblies/v3.5/Microsoft.Contracts.dll Binary files differdeleted file mode 100644 index 866b564..0000000 --- a/tools/Contracts/PublicAssemblies/v3.5/Microsoft.Contracts.dll +++ /dev/null diff --git a/tools/Contracts/PublicAssemblies/v3.5/Redist.txt b/tools/Contracts/PublicAssemblies/v3.5/Redist.txt deleted file mode 100644 index 0e39817..0000000 --- a/tools/Contracts/PublicAssemblies/v3.5/Redist.txt +++ /dev/null @@ -1 +0,0 @@ -Microsoft.Contracts.dll diff --git a/tools/Contracts/Samples/Samples.zip b/tools/Contracts/Samples/Samples.zip Binary files differdeleted file mode 100644 index 0320621..0000000 --- a/tools/Contracts/Samples/Samples.zip +++ /dev/null diff --git a/tools/Contracts/Sandcastle/Sandcastle.zip b/tools/Contracts/Sandcastle/Sandcastle.zip Binary files differdeleted file mode 100644 index 2828abf..0000000 --- a/tools/Contracts/Sandcastle/Sandcastle.zip +++ /dev/null diff --git a/tools/DotNetOpenAuth.Product.props b/tools/DotNetOpenAuth.Product.props index 066c105..5e6efba 100644 --- a/tools/DotNetOpenAuth.Product.props +++ b/tools/DotNetOpenAuth.Product.props @@ -21,40 +21,6 @@ http://opensource.org/licenses/ms-pl.html <CodeAnalysisRuleSet>$(ProjectRoot)src\DotNetOpenAuth.ruleset</CodeAnalysisRuleSet> <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile> <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression> - - <CodeContractsCustomRewriterAssembly /> - <CodeContractsCustomRewriterClass /> - <CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis> - <CodeContractsBuildReferenceAssembly>True</CodeContractsBuildReferenceAssembly> - <CodeContractsNonNullObligations>True</CodeContractsNonNullObligations> - <CodeContractsBoundsObligations>True</CodeContractsBoundsObligations> - <CodeContractsLibPaths /> - <CodeContractsPlatformPath /> - <CodeContractsExtraAnalysisOptions /> - <CodeContractsBaseLineFile /> - <CodeContractsUseBaseLine>False</CodeContractsUseBaseLine> - <CodeContractsRunInBackground>True</CodeContractsRunInBackground> - <CodeContractsShowSquigglies>True</CodeContractsShowSquigglies> - <CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations> - <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface> - <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure> - <CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires> - <CodeContractsEmitXMLDocs>True</CodeContractsEmitXMLDocs> - <CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions> - <CodeContractsExtraRewriteOptions /> - - <CodeContractsReferenceAssembly Condition=" '$(BuildCodeContractsReferenceAssemblies)' == 'true' ">Build</CodeContractsReferenceAssembly> - <CodeContractsReferenceAssembly Condition=" '$(BuildCodeContractsReferenceAssemblies)' != 'true' ">DoNotBuild</CodeContractsReferenceAssembly> - </PropertyGroup> - - <PropertyGroup Condition=" '$(CodeContractsRewritingEnabled)' != 'true' "> - <CodeContractsAssemblyMode>0</CodeContractsAssemblyMode> - <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking> - </PropertyGroup> - - <PropertyGroup Condition=" '$(CodeContractsRewritingEnabled)' == 'true' "> - <CodeContractsAssemblyMode>1</CodeContractsAssemblyMode> - <CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> @@ -64,16 +30,12 @@ http://opensource.org/licenses/ms-pl.html <DefineConstants>DEBUG;TRACE</DefineConstants> <AllowUnsafeBlocks>false</AllowUnsafeBlocks> <RunCodeAnalysis>false</RunCodeAnalysis> - - <CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)' == 'Release' "> <DebugType>pdbonly</DebugType> <Optimize>true</Optimize> <DefineConstants>TRACE</DefineConstants> - - <CodeContractsRuntimeCheckingLevel>ReleaseRequires</CodeContractsRuntimeCheckingLevel> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)' == 'CodeAnalysis' "> @@ -82,11 +44,6 @@ http://opensource.org/licenses/ms-pl.html </PropertyGroup> <ItemGroup> - <DelaySignedAssemblies Include="$(OutputPath)CodeContracts\$(AssemblyName).Contracts.dll" - Condition=" '$(BuildCodeContractsReferenceAssemblies)' == 'true' and '$(AddContractsAssemblyForDelaySigning)' != 'false' "/> - </ItemGroup> - - <ItemGroup> <Compile Include="$(ProjectRoot)src\GlobalSuppressions.cs"> <Link>GlobalSuppressions.cs</Link> </Compile> diff --git a/tools/DotNetOpenAuth.props b/tools/DotNetOpenAuth.props index aa404c5..09d98bf 100644 --- a/tools/DotNetOpenAuth.props +++ b/tools/DotNetOpenAuth.props @@ -24,7 +24,6 @@ <ILMergeTargetPlatformVersion Condition=" '$(ClrVersion)' == '2' ">2.0</ILMergeTargetPlatformVersion> <ILMergeTargetPlatformVersion Condition=" '$(TargetFrameworkVersion)' == 'v4.0' ">4.0</ILMergeTargetPlatformVersion> <ILMergeTargetPlatformVersion Condition=" '$(TargetFrameworkVersion)' == 'v4.5' ">4.5</ILMergeTargetPlatformVersion> - <BuildCodeContractsReferenceAssemblies>false</BuildCodeContractsReferenceAssemblies> <SignAssembly>true</SignAssembly> <PublicKeyFile Condition="'$(PublicKeyFile)' == ''">$(ProjectRoot)src\official-build-key.pub</PublicKeyFile> @@ -40,13 +39,6 @@ <ILMergeOutputAssembly45Directory>$(OutputPath45)unified\</ILMergeOutputAssembly45Directory> <ILMergeOutputAssembly>$(ILMergeOutputAssemblyDirectory)$(ProductName).dll</ILMergeOutputAssembly> <ILMergeOutputXmlDocs>$(ILMergeOutputAssemblyDirectory)$(ProductName).xml</ILMergeOutputXmlDocs> - <ILMergeOutputContractAssemblyDirectory>$(ILMergeOutputAssemblyDirectory)CodeContracts\</ILMergeOutputContractAssemblyDirectory> - <ILMergeOutputContractAssembly>$(ILMergeOutputContractAssemblyDirectory)$(ProductName).Contracts.dll</ILMergeOutputContractAssembly> - - <!-- Always use our own toolset's copy of Code Contracts for reliably reproducible builds. - Suppress the installed code contracts from importing itself. --> - <DontImportCodeContracts>true</DontImportCodeContracts> - <ImportCodeContractsFromToolset>true</ImportCodeContractsFromToolset> </PropertyGroup> <PropertyGroup Condition=" '$(ClrVersion)' == '4' "> @@ -114,8 +106,6 @@ <AssemblyReferencesToReplaceWith Include="@(ProjectReferencesToRemove->'..\..\Bin-net4.0\$(ProductName).dll')" /> <SignDependsOn Include="Build" Condition=" '$(SuppressBuildTarget)' != 'true' " /> - <ILMergeInputAssemblies Condition=" '$(ClrVersion)' == '2' " - Include="$(ProjectRoot)lib\Microsoft.Contracts.dll" /> </ItemGroup> <Import Project="$(ProjectRoot)lib\DotNetOpenAuth.BuildTasks.targets" /> diff --git a/tools/DotNetOpenAuth.targets b/tools/DotNetOpenAuth.targets index 4317fb9..acb631a 100644 --- a/tools/DotNetOpenAuth.targets +++ b/tools/DotNetOpenAuth.targets @@ -15,7 +15,6 @@ </ItemDefinitionGroup> <PropertyGroup> - <CodeContractsInstallDir>$(ProjectRoot)tools\Contracts\</CodeContractsInstallDir> <DefineConstants Condition=" '$(SignAssembly)' == 'true' ">$(DefineConstants);StrongNameSigned</DefineConstants> <DefineConstants Condition=" '$(ClrVersion)' == '4' ">$(DefineConstants);CLR4</DefineConstants> <DefineConstants Condition=" '$(TargetFrameworkVersion)' == 'v4.5' ">$(DefineConstants);NetFx45</DefineConstants> @@ -27,21 +26,6 @@ <DelaySignedAssemblies Include="$(TargetPath)" Condition=" '$(SuppressTargetPathDelaySignedAssembly)' != 'true' "/> </ItemGroup> - <ItemGroup Condition=" '$(ClrVersion)' != '4' and '$(NoCodeContracts)' != 'true' "> - <Reference Include="Microsoft.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=736440c9b414ea16, processorArchitecture=MSIL"> - <SpecificVersion>False</SpecificVersion> - <HintPath>..\..\lib\Microsoft.Contracts.dll</HintPath> - </Reference> - </ItemGroup> - - <!-- This forces a build break when Code Contracts are not installed. --> - <PropertyGroup> - <CompileDependsOn>$(CompileDependsOn);CheckForCodeContracts</CompileDependsOn> - </PropertyGroup> - <Target Name="CheckForCodeContracts"> - <Error Condition=" '$(CodeContractsImported)' != 'true' " Text="This project requires Code Contracts. Please install from: http://msdn.microsoft.com/en-us/devlabs/dd491992.aspx" /> - </Target> - <!-- This is our multi-targeting aware shadow assembly generator. --> <UsingTask AssemblyFile="$(ProjectRoot)\lib\DotNetOpenAuth.BuildTasks.dll" TaskName="Publicize" /> <PropertyGroup> @@ -125,6 +109,4 @@ </Target> <Target Name="GetOutputPath" Outputs="$(OutputPath)" /> - - <Import Condition="'$(CodeContractsImported)' != 'true' AND ('$(DontImportCodeContracts)' != 'true' or '$(ImportCodeContractsFromToolset)' == 'true')" Project="$(CodeContractsInstallDir)\MsBuild\v4.0\Microsoft.CodeContracts.targets"/> </Project> diff --git a/tools/drop.proj b/tools/drop.proj index 88a20c9..ba2400c 100644 --- a/tools/drop.proj +++ b/tools/drop.proj @@ -91,7 +91,6 @@ $(ILMergeOutputAssembly35Directory)$(SignedSubPath)$(ProductName).dll; $(ILMergeOutputAssembly35Directory)$(ProductName).pdb; $(ILMergeOutputAssembly35Directory)$(ProductName).xml; - $(OutputPath35)CodeContracts\$(SignedSubPath)$(ProductName).Contracts.???; $(ProjectRoot)Doc\README.Bin.html; $(ProjectRoot)src\$(ProductName).Core\Configuration\$(ProductName).xsd; " /> @@ -99,7 +98,6 @@ $(ILMergeOutputAssembly40Directory)$(SignedSubPath)$(ProductName).dll; $(ILMergeOutputAssembly40Directory)$(ProductName).pdb; $(ILMergeOutputAssembly40Directory)$(ProductName).xml; - $(OutputPath40)CodeContracts\$(SignedSubPath)$(ProductName).Contracts.???; $(ProjectRoot)Doc\README.Bin.html; $(ProjectRoot)src\$(ProductName).Core\Configuration\$(ProductName).xsd; " /> @@ -107,7 +105,6 @@ $(ILMergeOutputAssembly45Directory)$(SignedSubPath)$(ProductName).dll; $(ILMergeOutputAssembly45Directory)$(ProductName).pdb; $(ILMergeOutputAssembly45Directory)$(ProductName).xml; - $(OutputPath45)CodeContracts\$(SignedSubPath)$(ProductName).Contracts.???; $(ProjectRoot)Doc\README.Bin.html; $(ProjectRoot)src\$(ProductName).Core\Configuration\$(ProductName).xsd; " /> |